Page MenuHomePhabricator

D8852.diff
No OneTemporary

D8852.diff

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

Mime Type
text/plain
Expires
Sat, Mar 1, 11:55 (3 h, 55 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5187732
Default Alt Text
D8852.diff (3 KB)

Event Timeline