Browse Source

Parse transaction version field

Closes: #2462
2.9.x
Johann Bauer 8 years ago
parent
commit
534eaa9bd1
  1. 6
      lib/tests/test_transaction.py
  2. 6
      lib/transaction.py

6
lib/tests/test_transaction.py

@ -7,7 +7,7 @@ from lib.keystore import xpubkey_to_address
unsigned_blob = '01000000012a5c9a94fcde98f5581cd00162c60a13936ceb75389ea65bf38633b424eb4031000000005701ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000ffffffff0140420f00000000001976a914230ac37834073a42146f11ef8414ae929feaafc388ac00000000' unsigned_blob = '01000000012a5c9a94fcde98f5581cd00162c60a13936ceb75389ea65bf38633b424eb4031000000005701ff4c53ff0488b21e03ef2afea18000000089689bff23e1e7fb2f161daa37270a97a3d8c2e537584b2d304ecb47b86d21fc021b010d3bd425f8cf2e04824bfdf1f1f5ff1d51fadd9a41f9e3fb8dd3403b1bfe00000000ffffffff0140420f00000000001976a914230ac37834073a42146f11ef8414ae929feaafc388ac00000000'
signed_blob = '01000000012a5c9a94fcde98f5581cd00162c60a13936ceb75389ea65bf38633b424eb4031000000006c493046022100a82bbc57a0136751e5433f41cf000b3f1a99c6744775e76ec764fb78c54ee100022100f9e80b7de89de861dc6fb0c1429d5da72c2b6b2ee2406bc9bfb1beedd729d985012102e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6ffffffff0140420f00000000001976a914230ac37834073a42146f11ef8414ae929feaafc388ac00000000' signed_blob = '01000000012a5c9a94fcde98f5581cd00162c60a13936ceb75389ea65bf38633b424eb4031000000006c493046022100a82bbc57a0136751e5433f41cf000b3f1a99c6744775e76ec764fb78c54ee100022100f9e80b7de89de861dc6fb0c1429d5da72c2b6b2ee2406bc9bfb1beedd729d985012102e61d176da16edd1d258a200ad9759ef63adf8e14cd97f53227bae35cdb84d2f6ffffffff0140420f00000000001976a914230ac37834073a42146f11ef8414ae929feaafc388ac00000000'
v2_blob = "0200000001191601a44a81e061502b7bfbc6eaa1cef6d1e6af5308ef96c9342f71dbf4b9b5000000006b483045022100a6d44d0a651790a477e75334adfb8aae94d6612d01187b2c02526e340a7fd6c8022028bdf7a64a54906b13b145cd5dab21a26bd4b85d6044e9b97bceab5be44c2a9201210253e8e0254b0c95776786e40984c1aa32a7d03efa6bdacdea5f421b774917d346feffffff026b20fa04000000001976a914024db2e87dd7cfd0e5f266c5f212e21a31d805a588aca0860100000000001976a91421919b94ae5cefcdf0271191459157cdb41c4cbf88aca6240700"
class TestBCDataStream(unittest.TestCase): class TestBCDataStream(unittest.TestCase):
@ -141,6 +141,10 @@ class TestTransaction(unittest.TestCase):
res = xpubkey_to_address('fd007d260305ef27224bbcf6cf5238d2b3638b5a78d5') res = xpubkey_to_address('fd007d260305ef27224bbcf6cf5238d2b3638b5a78d5')
self.assertEquals(res, ('fd007d260305ef27224bbcf6cf5238d2b3638b5a78d5', '1CQj15y1N7LDHp7wTt28eoD1QhHgFgxECH')) self.assertEquals(res, ('fd007d260305ef27224bbcf6cf5238d2b3638b5a78d5', '1CQj15y1N7LDHp7wTt28eoD1QhHgFgxECH'))
def test_version_field(self):
tx = transaction.Transaction(v2_blob)
self.assertEquals(tx.txid(), "b97f9180173ab141b61b9f944d841e60feec691d6daab4d4d932b24dd36606fe")
class NetworkMock(object): class NetworkMock(object):

6
lib/transaction.py

@ -515,6 +515,7 @@ class Transaction:
self._inputs = None self._inputs = None
self._outputs = None self._outputs = None
self.locktime = 0 self.locktime = 0
self.version = 1
def update(self, raw): def update(self, raw):
self.raw = raw self.raw = raw
@ -583,6 +584,7 @@ class Transaction:
self._inputs = d['inputs'] self._inputs = d['inputs']
self._outputs = [(x['type'], x['address'], x['value']) for x in d['outputs']] self._outputs = [(x['type'], x['address'], x['value']) for x in d['outputs']]
self.locktime = d['lockTime'] self.locktime = d['lockTime']
self.version = d['version']
return d return d
@classmethod @classmethod
@ -708,7 +710,7 @@ class Transaction:
return s return s
def serialize_preimage(self, i): def serialize_preimage(self, i):
nVersion = int_to_hex(1, 4) nVersion = int_to_hex(self.version, 4)
nHashType = int_to_hex(1, 4) nHashType = int_to_hex(1, 4)
nLocktime = int_to_hex(self.locktime, 4) nLocktime = int_to_hex(self.locktime, 4)
inputs = self.inputs() inputs = self.inputs()
@ -733,7 +735,7 @@ class Transaction:
return any(self.is_segwit_input(x) for x in self.inputs()) return any(self.is_segwit_input(x) for x in self.inputs())
def serialize(self, estimate_size=False, witness=True): def serialize(self, estimate_size=False, witness=True):
nVersion = int_to_hex(1, 4) nVersion = int_to_hex(self.version, 4)
nLocktime = int_to_hex(self.locktime, 4) nLocktime = int_to_hex(self.locktime, 4)
inputs = self.inputs() inputs = self.inputs()
outputs = self.outputs() outputs = self.outputs()

Loading…
Cancel
Save