Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13115744
D8852.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
3 KB
Subscribers
None
D8852.diff
View Options
diff --git a/doc/functional-tests.md b/doc/functional-tests.md
--- a/doc/functional-tests.md
+++ b/doc/functional-tests.md
@@ -365,8 +365,5 @@
#### [test_framework/key.py](/test/functional/test_framework/key.py)
Test-only secp256k1 elliptic curve implementation
-#### [test_framework/bignum.py](/test/functional/test_framework/bignum.py)
-Helpers for script.py
-
#### [test_framework/blocktools.py](/test/functional/test_framework/blocktools.py)
Helper functions for creating blocks and transactions.
diff --git a/test/functional/test_framework/bignum.py b/test/functional/test_framework/bignum.py
deleted file mode 100644
--- a/test/functional/test_framework/bignum.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python3
-#
-# Distributed under the MIT software license, see the accompanying
-# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-"""Big number routines.
-
-This file is copied from python-bitcoinlib.
-"""
-
-import struct
-
-
-# generic big endian MPI format
-
-def bn_bytes(v, have_ext=False):
- ext = 0
- if have_ext:
- ext = 1
- return ((v.bit_length() + 7) // 8) + ext
-
-
-def bn2bin(v):
- s = bytearray()
- i = bn_bytes(v)
- while i > 0:
- s.append((v >> ((i - 1) * 8)) & 0xff)
- i -= 1
- return s
-
-
-def bn2mpi(v):
- have_ext = False
- if v.bit_length() > 0:
- have_ext = (v.bit_length() & 0x07) == 0
-
- neg = False
- if v < 0:
- neg = True
- v = -v
-
- s = struct.pack(b">I", bn_bytes(v, have_ext))
- ext = bytearray()
- if have_ext:
- ext.append(0)
- v_bin = bn2bin(v)
- if neg:
- if have_ext:
- ext[0] |= 0x80
- else:
- v_bin[0] |= 0x80
- return s + ext + v_bin
-
-
-# bitcoin-specific little endian format, with implicit size
-
-
-def mpi2vch(s):
- r = s[4:] # strip size
- r = r[::-1] # reverse string, converting BE->LE
- return r
-
-
-def bn2vch(v):
- return bytes(mpi2vch(bn2mpi(v)))
diff --git a/test/functional/test_framework/script.py b/test/functional/test_framework/script.py
--- a/test/functional/test_framework/script.py
+++ b/test/functional/test_framework/script.py
@@ -7,7 +7,6 @@
This file is modified from python-bitcoinlib.
"""
-from .bignum import bn2vch
import hashlib
import struct
@@ -23,7 +22,6 @@
MAX_SCRIPT_ELEMENT_SIZE = 520
-
OPCODE_NAMES = {}
@@ -31,6 +29,18 @@
return hashlib.new('ripemd160', sha256(s)).digest()
+def bn2vch(v):
+ """Convert number to bitcoin-specific little endian format."""
+ # We need v.bit_length() bits, plus a sign bit for every nonzero number.
+ n_bits = v.bit_length() + (v != 0)
+ # The number of bytes for that is:
+ n_bytes = (n_bits + 7) // 8
+ # Convert number to absolute value + sign in top bit.
+ encoded_v = 0 if v == 0 else abs(v) | ((v < 0) << (n_bytes * 8 - 1))
+ # Serialize to bytes
+ return encoded_v.to_bytes(n_bytes, 'little')
+
+
_opcode_instances = []
@@ -48,9 +58,11 @@
# OP_PUSHDATA1
return b'\x4c' + bytes([len(d)]) + d
elif len(d) <= 0xffff:
- return b'\x4d' + struct.pack(b'<H', len(d)) + d # OP_PUSHDATA2
+ # OP_PUSHDATA2
+ return b'\x4d' + struct.pack(b'<H', len(d)) + d
elif len(d) <= 0xffffffff:
- return b'\x4e' + struct.pack(b'<I', len(d)) + d # OP_PUSHDATA4
+ # OP_PUSHDATA4
+ return b'\x4e' + struct.pack(b'<I', len(d)) + d
else:
raise ValueError("Data too long to encode in a PUSHDATA op")
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 1, 11:55 (24 m, 59 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5187732
Default Alt Text
D8852.diff (3 KB)
Attached To
D8852: [tests] remove bignum.py
Event Timeline
Log In to Comment