tfix #4099: serialisation of txns with negative version number - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit a6841cbd5fb826eb12cf562eaeaf4929248a6dc8 DIR parent 87aee100470be979bb324d186559441e5c914b6a HTML Author: SomberNight <somber.night@protonmail.com> Date: Tue, 13 Mar 2018 01:02:03 +0100 fix #4099: serialisation of txns with negative version number Diffstat: M lib/bitcoin.py | 3 +++ M lib/tests/test_transaction.py | 5 +++++ 2 files changed, 8 insertions(+), 0 deletions(-) --- DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py t@@ -144,6 +144,9 @@ def rev_hex(s): def int_to_hex(i, length=1): assert isinstance(i, int) + if i < 0: + # two's complement + i = pow(256, length) + i s = hex(i)[2:].rstrip('L') s = "0"*(2*length - len(s)) + s return rev_hex(s) DIR diff --git a/lib/tests/test_transaction.py b/lib/tests/test_transaction.py t@@ -265,6 +265,11 @@ class TestTransaction(unittest.TestCase): txid = 'f570d5d1e965ee61bcc7005f8fefb1d3abbed9d7ddbe035e2a68fa07e5fc4a0d' self._run_naive_tests_on_tx(raw_tx, txid) + def test_txid_negative_version_num(self): + raw_tx = 'f0b47b9a01ecf5e5c3bbf2cf1f71ecdc7f708b0b222432e914b394e24aad1494a42990ddfc000000008b483045022100852744642305a99ad74354e9495bf43a1f96ded470c256cd32e129290f1fa191022030c11d294af6a61b3da6ed2c0c296251d21d113cfd71ec11126517034b0dcb70014104a0fe6e4a600f859a0932f701d3af8e0ecd4be886d91045f06a5a6b931b95873aea1df61da281ba29cadb560dad4fc047cf47b4f7f2570da4c0b810b3dfa7e500ffffffff0240420f00000000001976a9147eeacb8a9265cd68c92806611f704fc55a21e1f588ac05f00d00000000001976a914eb3bd8ccd3ba6f1570f844b59ba3e0a667024a6a88acff7f0000' + txid = 'c659729a7fea5071361c2c1a68551ca2bf77679b27086cc415adeeb03852e369' + self._run_naive_tests_on_tx(raw_tx, txid) + # these transactions are from Bitcoin Core unit tests ---> # https://github.com/bitcoin/bitcoin/blob/11376b5583a283772c82f6d32d0007cdbf5b8ef0/src/test/data/tx_valid.json