segwit flag
This commit is contained in:
parent
9958f7550f
commit
5f2d808e1c
@ -1,6 +1,7 @@
|
||||
from secp256k1 import lib as secp256k1
|
||||
import random
|
||||
|
||||
MAX_AMOUNT = 2100000000000000
|
||||
SIGHASH_ALL = 0x00000001
|
||||
SIGHASH_NONE = 0x00000002
|
||||
SIGHASH_SINGLE = 0x00000003
|
||||
|
||||
@ -36,12 +36,15 @@ def rebasebits(data, frombits, tobits, pad=True):
|
||||
raise Exception("invalid padding")
|
||||
return ret
|
||||
|
||||
|
||||
def rebase_5_to_8(data, pad = True):
|
||||
return rebasebits(data, 5, 8, pad)
|
||||
|
||||
|
||||
def rebase_8_to_5(data, pad = True):
|
||||
return rebasebits(data, 8, 5, pad)
|
||||
|
||||
|
||||
def rebase_32_to_5(data):
|
||||
if type(data) == bytes:
|
||||
data = data.decode()
|
||||
@ -53,12 +56,14 @@ def rebase_32_to_5(data):
|
||||
raise Exception("Non base32 characters")
|
||||
return b
|
||||
|
||||
|
||||
def rebase_5_to_32(data, bytes = True):
|
||||
r = bytearray()
|
||||
for i in data:
|
||||
r.append(base32_int_map[i])
|
||||
return r.decode() if not bytes else r
|
||||
|
||||
|
||||
def bech32_polymod(values):
|
||||
"""Internal function that computes the Bech32 checksum."""
|
||||
generator = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
|
||||
@ -70,6 +75,7 @@ def bech32_polymod(values):
|
||||
chk ^= generator[i] if ((top >> i) & 1) else 0
|
||||
return chk ^ 1
|
||||
|
||||
|
||||
def encode_base58(b):
|
||||
"""Encode bytes to a base58-encoded string"""
|
||||
# Convert big-endian bytes to integer
|
||||
@ -90,6 +96,7 @@ def encode_base58(b):
|
||||
break
|
||||
return b58_digits[0] * pad + res
|
||||
|
||||
|
||||
def decode_base58(s):
|
||||
"""Decode a base58-encoding string, returning bytes"""
|
||||
if not s:
|
||||
|
||||
@ -2,11 +2,13 @@
|
||||
from struct import unpack
|
||||
import json
|
||||
from .tools import *
|
||||
from .address import PrivateKey
|
||||
from binascii import hexlify, unhexlify
|
||||
|
||||
|
||||
class Transaction(dict):
|
||||
def __init__(self, raw_tx = None):
|
||||
def __init__(self, raw_tx=None):
|
||||
self["format"] = "raw"
|
||||
self["txId"] = None
|
||||
self["hash"] = None
|
||||
self["version"] = None
|
||||
@ -22,7 +24,7 @@ class Transaction(dict):
|
||||
self["time"] = None
|
||||
self["blockTime"] = None
|
||||
self["blockIndex"] = None
|
||||
self["coinbase"] = None
|
||||
self["coinbase"] = False
|
||||
self["fee"] = None
|
||||
self["data"] = None
|
||||
self["amount"] = 0
|
||||
@ -79,15 +81,19 @@ class Transaction(dict):
|
||||
self["vIn"][0]["txId"] == b'\x00' * 32 and \
|
||||
self["vIn"][0]["vOut"] == 0xffffffff:
|
||||
self["coinbase"] = True
|
||||
else:
|
||||
self["coinbase"] = False
|
||||
if sw:
|
||||
self["segwit"] = True
|
||||
self["hash"] = double_sha256(b)
|
||||
self["txId"] = double_sha256(b[:4] + b[6:sw] + b[-4:])
|
||||
else:
|
||||
self["segwit"] = False
|
||||
self["txId"] = double_sha256(b)
|
||||
self["hash"] = self["txId"]
|
||||
|
||||
def decode(self, testnet = False):
|
||||
self["format"] = "decoded"
|
||||
if type(self["txId"]) == bytes:
|
||||
self["txId"] = rh2s(self["txId"])
|
||||
if "flag" in self:
|
||||
@ -174,7 +180,7 @@ class Transaction(dict):
|
||||
def serialize(self, segwit=True, hex=False):
|
||||
chunks = []
|
||||
chunks.append(struct.pack('<L', self["version"]))
|
||||
if segwit and "segwit" in self:
|
||||
if segwit and self["segwit"]:
|
||||
chunks.append(b"\x00\x01")
|
||||
chunks.append(int_to_var_int(len(self["vIn"])))
|
||||
for i in self["vIn"]:
|
||||
@ -199,7 +205,7 @@ class Transaction(dict):
|
||||
else:
|
||||
chunks.append(int_to_var_int(int(len(self["vOut"][i]['scriptPubKey']) / 2)))
|
||||
chunks.append(unhexlify(self["vOut"][i]['scriptPubKey']))
|
||||
if segwit and "segwit" in self:
|
||||
if segwit and self["segwit"]:
|
||||
for i in self["vIn"]:
|
||||
chunks.append(int_to_var_int(len(self["vIn"][i]['txInWitness'])))
|
||||
for w in self["vIn"][i]['txInWitness']:
|
||||
@ -218,4 +224,90 @@ class Transaction(dict):
|
||||
return json.dumps(self)
|
||||
except:
|
||||
pass
|
||||
return json.dumps(self.decode())
|
||||
return json.dumps(self.decode())
|
||||
|
||||
# def add_input(self, tx_id=None, v_out=0, sequence=0xffffffff,
|
||||
# script_sig=b"", tx_in_witness=None, amount=None,
|
||||
# script_pub_key=None, private_key=None):
|
||||
#
|
||||
# if type(tx_id) == Input:
|
||||
#
|
||||
# else:
|
||||
# i = Input(tx_id, )
|
||||
# if self["vIn"]:
|
||||
# # coinbase tx only one input allowed
|
||||
# assert tx_id != None
|
||||
# if tx_id is None:
|
||||
# tx_id = b"\x00" * 32
|
||||
# assert v_out == 0 and sequence == 0xffffffff
|
||||
#
|
||||
# if type(tx_id) == str:
|
||||
# tx_id = unhexlify(tx_id)
|
||||
# else:
|
||||
# assert type(script_sig) == bytes
|
||||
# assert len(tx_id) == 32
|
||||
# assert type(v_out) == int
|
||||
# assert v_out <= 0xffffffff and v_out >= 0
|
||||
# assert type(sequence) == int
|
||||
# assert sequence <= 0xffffffff and sequence >= 0
|
||||
# if type(script_sig) == str:
|
||||
# script_sig = unhexlify(script_sig)
|
||||
# else:
|
||||
# assert type(script_sig) == bytes
|
||||
# assert len(script_sig) <= 520
|
||||
# if private_key:
|
||||
# if type(private_key) != PrivateKey:
|
||||
# private_key = PrivateKey(private_key)
|
||||
# if amount:
|
||||
# assert type(amount) == int
|
||||
# assert amount >= 0 and amount <= MAX_AMOUNT
|
||||
# if tx_in_witness:
|
||||
# assert type(tx_in_witness) == list
|
||||
# l = 0
|
||||
# witness = []
|
||||
# for w in tx_in_witness:
|
||||
# if type(w) == str:
|
||||
# witness.append(unhexlify(w) if self["format"] == "raw" else w)
|
||||
# else:
|
||||
# witness.append(w if self["format"] == "raw" else unhexlify(w))
|
||||
# l += 1 + len(w)
|
||||
# if len(w) >= 0x4c:
|
||||
# l += 1
|
||||
# if len(w) > 0xff:
|
||||
# l += 1
|
||||
# # witness script limit
|
||||
# assert l <= 10000
|
||||
# if tx_id == b"\x00" * 32:
|
||||
# assert v_out == 0 and sequence == 0xffffffff and len(script_sig) <= 100
|
||||
# self["coinbase"] = True
|
||||
#
|
||||
# k = len(self["vIn"])
|
||||
# self["vIn"][k] = dict()
|
||||
# self["vIn"][k]["vOut"] = v_out
|
||||
# self["vIn"][k]["sequence"] = sequence
|
||||
# if self["format"] == "raw":
|
||||
# self["vIn"][k]["txId"] = tx_id
|
||||
# self["vIn"][k]["scriptSig"] = script_sig
|
||||
# if tx_in_witness:
|
||||
# self["segwit"] = True
|
||||
# self["vIn"][k]["txInWitness"] = witness
|
||||
# else:
|
||||
# self["vIn"][k]["txId"] = rh2s(tx_id)
|
||||
# self["vIn"][k]["scriptSig"] = script_sig
|
||||
# self["vIn"][i]["scriptSigOpcodes"] = decode_script(script_sig)
|
||||
# self["vIn"][i]["scriptSigAsm"] = decode_script(script_sig, 1)
|
||||
# if tx_in_witness:
|
||||
# self["segwit"] = True
|
||||
# self["vIn"][k]["txInWitness"] = witness
|
||||
# if amount:
|
||||
# self["value"] = amount
|
||||
# if private_key:
|
||||
# self["privateKey"] = private_key
|
||||
#
|
||||
# # todo
|
||||
# # if self["vOut"]:
|
||||
# # self.__refresh_tx__()
|
||||
#
|
||||
# """
|
||||
# написать сценарии использования
|
||||
# """
|
||||
|
||||
@ -44,8 +44,15 @@ class TransactionDeserializeTests(unittest.TestCase):
|
||||
# print("OK")
|
||||
|
||||
def test_segwit_deserialize(self):
|
||||
non_segwit_view = "020000000140d43a99926d43eb0e619bf0b3d83b4a31f60c176beecfb9d35bf45e54d0f7420100000017160014a4b4ca48de0b3fffc15404a1acdc8dbaae226955ffffffff0100e1f5050000000017a9144a1154d50b03292b3024370901711946cb7cccc38700000000"
|
||||
segwit_view = "0200000000010140d43a99926d43eb0e619bf0b3d83b4a31f60c176beecfb9d35bf45e54d0f7420100000017160014a4b4ca48de0b3fffc15404a1acdc8dbaae226955ffffffff0100e1f5050000000017a9144a1154d50b03292b3024370901711946cb7cccc387024830450221008604ef8f6d8afa892dee0f31259b6ce02dd70c545cfcfed8148179971876c54a022076d771d6e91bed212783c9b06e0de600fab2d518fad6f15a2b191d7fbd262a3e0121039d25ab79f41f75ceaf882411fd41fa670a4c672c23ffaf0e361a969cde0692e800000000"
|
||||
non_segwit_view = "020000000140d43a99926d43eb0e619bf0b3d83b4a31f60c176beecfb9d35bf45e54d0f7420" \
|
||||
"100000017160014a4b4ca48de0b3fffc15404a1acdc8dbaae226955ffffffff0100e1f50500" \
|
||||
"00000017a9144a1154d50b03292b3024370901711946cb7cccc38700000000"
|
||||
segwit_view = "0200000000010140d43a99926d43eb0e619bf0b3d83b4a31f60c176beecfb9d35bf45e54d0f7420" \
|
||||
"00000017160014a4b4ca48de0b3fffc15404a1acdc8dbaae226955ffffffff0100e1f5050000000" \
|
||||
"017a9144a1154d50b03292b3024370901711946cb7cccc387024830450221008604ef8f6d8afa89" \
|
||||
"2dee0f31259b6ce02dd70c545cfcfed8148179971876c54a022076d771d6e91bed212783c9b06e0" \
|
||||
"de600fab2d518fad6f15a2b191d7fbd262a3e0121039d25ab79f41f75ceaf882411fd41fa670a4c" \
|
||||
"672c23ffaf0e361a969cde0692e800000000"
|
||||
print("Deserialize Segwit transaction")
|
||||
ns = Transaction(non_segwit_view)
|
||||
s = Transaction(segwit_view)
|
||||
@ -53,8 +60,83 @@ class TransactionDeserializeTests(unittest.TestCase):
|
||||
self.assertEqual(s.serialize(segwit=True, hex = True), segwit_view)
|
||||
self.assertEqual(ns.serialize(segwit=False, hex = True), non_segwit_view)
|
||||
|
||||
non_segwit_view = "01000000060c02c24bbfefd94cdc4f58a3f83f93e05b14ad968ec6aba54190c3dcba6eef1b00000000da00483045022100f4dbf2ca7b5da97bd78818635d48004e6bf1a6f7e5e24bcecb7d93f554e49eaf02200a05025d93475b6372d14bd8fe8366fe10570ade772b19d124d3b0175b9f6eda0147304402202290feb53fc4cb077c5d3eed0ed5367fef4011ac708c1acaaa5003e4ed680ddf022012c52160ae6b85fc59ceed80c7cacd5358b80712371733de7c76fef552114ee60147522103ee30ea502d692ecfc79dfcb6fb2d6914fc70ba80db971beebacccdbaed40d7c52102f52db885d04dc43ca8562471759dd621b899faf508caba70963d9228bfd2415e52ae00000000dab020ee0a80a818e4d20a52aa7ba367a0a2d430d22c26ccb4572527e259e14a01000000d900473044022064745ac8cae859bb19305a550981b8d39b69efec55b9a423dca645cd3b5c845502205cf375839d7f056235feb550a8138a03e75fa140503a2ce61fe239a3bfe42145014730440220728b0393d5427d8abb56a608c6b1a0b14c5455f3abeb56ce8a5c7f70035af71d022052a99e4e389790b364f6180caf1523d6da2b3daabe85952705023be2b5409b360147522103e296937dbdafdae4d0a45b33d9a691b0c0e71d97bd2ffc82da895a251f74bd7e2103ead7ad0c398f928cbe851a6b387a5e74d139487caf4d4ac3dc3d478254dbbb4452ae0000000067a6c2e2f14fc412b3f5627fafac2fe43009bc403ec680839579444df2ce042b00000000da00483045022100d3bdc055fa5dcce335a1d572b1c3ccb8cc9ba91960c6361c77e29ded716e233102200e7ebb43fd39fb98c714098d4fda32d94cdbefdd96c0c918b788aacc6164953c0147304402202f4338d2710edb1960dcf7136411f065a16bee4e44b86604d64c660315bc55040220238c1c3216feb31051f7798297317819da1dfa830d24a6a9e38a37367a68ebd101475221037b2987df626510ce25e6ce5fdb716705e23fecb7398b2cbb0a1c0af7ca5da717210345e358653b4580b5bd68d263089a0a2bf9fcc1e145fcf2a3d4b9ab5cd7e1a76752ae000000004f28d63103dfb86a5d92d2daf328bbb35d72239766a5853b7076a90d1745813200000000da00483045022100e89ac8215ee87186de284c419b2522ebfb2ecb8063d0f91942f2ad63f383d3d4022036485902bb1f2e0b2cc645aab8781def27f25e91d8256d48dd48d5cfca1a21c20147304402201449379f1d57f2b7ad1dc0882f59627287a6c32180ffa7637941b0eaa666dd4b022028eb0eed77e1b92de046098c855834a5feeadea55d17160bc6d11d47184e8b51014752210283db605dc305201ab9be509a22d2c83b388002fb54ecd82d86efe83c0a1d35822103146f745eff0ae31fe899aafd27d51d2c0f5b0c03f2f47b3c65bb26ec7581ad8652ae0000000021cb3b00d1f22455e76e86872e00ef556578bcc112071e6a5b4ac02ab682fdb301000000232200206ea344e9a4a8f8a8983479af2ae3ed29fab153955af14457780a304a6832b9c50000000016dcc4b40a514c43ed61d6c01a9006d7f21a6d30b99b3e580d21578e35002502000000002322002049ea1f7c280b32fee0dce2e1801df2218df59d64614c4fe76c043ee2c80116700000000002005ed0b20000000017a91495c5c19257aa52bd4b702ba1a5e29b8d72a75a3a876d6b4e010000000017a91487b6255a5df746188f0bd22ed0194a40ec98f2de87be810700"
|
||||
segwit_view = "010000000001060c02c24bbfefd94cdc4f58a3f83f93e05b14ad968ec6aba54190c3dcba6eef1b00000000da00483045022100f4dbf2ca7b5da97bd78818635d48004e6bf1a6f7e5e24bcecb7d93f554e49eaf02200a05025d93475b6372d14bd8fe8366fe10570ade772b19d124d3b0175b9f6eda0147304402202290feb53fc4cb077c5d3eed0ed5367fef4011ac708c1acaaa5003e4ed680ddf022012c52160ae6b85fc59ceed80c7cacd5358b80712371733de7c76fef552114ee60147522103ee30ea502d692ecfc79dfcb6fb2d6914fc70ba80db971beebacccdbaed40d7c52102f52db885d04dc43ca8562471759dd621b899faf508caba70963d9228bfd2415e52ae00000000dab020ee0a80a818e4d20a52aa7ba367a0a2d430d22c26ccb4572527e259e14a01000000d900473044022064745ac8cae859bb19305a550981b8d39b69efec55b9a423dca645cd3b5c845502205cf375839d7f056235feb550a8138a03e75fa140503a2ce61fe239a3bfe42145014730440220728b0393d5427d8abb56a608c6b1a0b14c5455f3abeb56ce8a5c7f70035af71d022052a99e4e389790b364f6180caf1523d6da2b3daabe85952705023be2b5409b360147522103e296937dbdafdae4d0a45b33d9a691b0c0e71d97bd2ffc82da895a251f74bd7e2103ead7ad0c398f928cbe851a6b387a5e74d139487caf4d4ac3dc3d478254dbbb4452ae0000000067a6c2e2f14fc412b3f5627fafac2fe43009bc403ec680839579444df2ce042b00000000da00483045022100d3bdc055fa5dcce335a1d572b1c3ccb8cc9ba91960c6361c77e29ded716e233102200e7ebb43fd39fb98c714098d4fda32d94cdbefdd96c0c918b788aacc6164953c0147304402202f4338d2710edb1960dcf7136411f065a16bee4e44b86604d64c660315bc55040220238c1c3216feb31051f7798297317819da1dfa830d24a6a9e38a37367a68ebd101475221037b2987df626510ce25e6ce5fdb716705e23fecb7398b2cbb0a1c0af7ca5da717210345e358653b4580b5bd68d263089a0a2bf9fcc1e145fcf2a3d4b9ab5cd7e1a76752ae000000004f28d63103dfb86a5d92d2daf328bbb35d72239766a5853b7076a90d1745813200000000da00483045022100e89ac8215ee87186de284c419b2522ebfb2ecb8063d0f91942f2ad63f383d3d4022036485902bb1f2e0b2cc645aab8781def27f25e91d8256d48dd48d5cfca1a21c20147304402201449379f1d57f2b7ad1dc0882f59627287a6c32180ffa7637941b0eaa666dd4b022028eb0eed77e1b92de046098c855834a5feeadea55d17160bc6d11d47184e8b51014752210283db605dc305201ab9be509a22d2c83b388002fb54ecd82d86efe83c0a1d35822103146f745eff0ae31fe899aafd27d51d2c0f5b0c03f2f47b3c65bb26ec7581ad8652ae0000000021cb3b00d1f22455e76e86872e00ef556578bcc112071e6a5b4ac02ab682fdb301000000232200206ea344e9a4a8f8a8983479af2ae3ed29fab153955af14457780a304a6832b9c50000000016dcc4b40a514c43ed61d6c01a9006d7f21a6d30b99b3e580d21578e35002502000000002322002049ea1f7c280b32fee0dce2e1801df2218df59d64614c4fe76c043ee2c80116700000000002005ed0b20000000017a91495c5c19257aa52bd4b702ba1a5e29b8d72a75a3a876d6b4e010000000017a91487b6255a5df746188f0bd22ed0194a40ec98f2de87000000000400473044022100d0d2ded141c9369bcc99de23d3d41d1d99d6cff47126df1b0c4d4797f947eacf021f790f1c112b3425ebc3251d719aae6ef0f9830b688585275591a5353f1f973801483045022100bf06c762e6ab64258d2f2777a66fe32ddd8f36e232b80bf5afa6ff9b9aa73ee0022049caf991fce808e60a9b17499f5e0dc11f6163e3ef7bca8109b72b5695d674210147522103edd556806048b319d71f43466c4415001bb32d8afe3aac06532d3ac210fd0e86210215e16727cf1389b4ee377487385f3ec595841a6bb747eb9c3a5cd559e9b1c8dc52ae040047304402204e9cc87526e148d236d692fa70104d26b8df632f30f4e3be38a2e99cec76d0f80220354ae575c3537c0ad2399a6037a9164b0cb147b12f262efc906649ca7950e2eb0147304402203553bcd1565804ec71c997c87006bd91c639b74a004b19a239c7f551aab5635a0220753f74e065c0b7cdf67d16b00f6a20dda7159a49f20aa493a7889b2851b2fea30147522103b09ac1fa65a55fa4feadea57c4cf417d7490065d8b844ada60c242a441e0e3a42103c0625169b46dbbde3492db7c62f1be8f582131467620cef17335306bad7ef88a52aebe810700"
|
||||
non_segwit_view = "01000000060c02c24bbfefd94cdc4f58a3f83f93e05b14ad968ec6aba54190c3dcba6eef1b00" \
|
||||
"000000da00483045022100f4dbf2ca7b5da97bd78818635d48004e6bf1a6f7e5e24bcecb7d93" \
|
||||
"f554e49eaf02200a05025d93475b6372d14bd8fe8366fe10570ade772b19d124d3b0175b9f6e" \
|
||||
"da0147304402202290feb53fc4cb077c5d3eed0ed5367fef4011ac708c1acaaa5003e4ed680d" \
|
||||
"df022012c52160ae6b85fc59ceed80c7cacd5358b80712371733de7c76fef552114ee6014752" \
|
||||
"2103ee30ea502d692ecfc79dfcb6fb2d6914fc70ba80db971beebacccdbaed40d7c52102f52d" \
|
||||
"b885d04dc43ca8562471759dd621b899faf508caba70963d9228bfd2415e52ae00000000dab0" \
|
||||
"20ee0a80a818e4d20a52aa7ba367a0a2d430d22c26ccb4572527e259e14a01000000d9004730" \
|
||||
"44022064745ac8cae859bb19305a550981b8d39b69efec55b9a423dca645cd3b5c845502205c" \
|
||||
"f375839d7f056235feb550a8138a03e75fa140503a2ce61fe239a3bfe4214501473044022072" \
|
||||
"8b0393d5427d8abb56a608c6b1a0b14c5455f3abeb56ce8a5c7f70035af71d022052a99e4e38" \
|
||||
"9790b364f6180caf1523d6da2b3daabe85952705023be2b5409b360147522103e296937dbdaf" \
|
||||
"dae4d0a45b33d9a691b0c0e71d97bd2ffc82da895a251f74bd7e2103ead7ad0c398f928cbe85" \
|
||||
"1a6b387a5e74d139487caf4d4ac3dc3d478254dbbb4452ae0000000067a6c2e2f14fc412b3f5" \
|
||||
"627fafac2fe43009bc403ec680839579444df2ce042b00000000da00483045022100d3bdc055" \
|
||||
"fa5dcce335a1d572b1c3ccb8cc9ba91960c6361c77e29ded716e233102200e7ebb43fd39fb98" \
|
||||
"c714098d4fda32d94cdbefdd96c0c918b788aacc6164953c0147304402202f4338d2710edb19" \
|
||||
"60dcf7136411f065a16bee4e44b86604d64c660315bc55040220238c1c3216feb31051f77982" \
|
||||
"97317819da1dfa830d24a6a9e38a37367a68ebd101475221037b2987df626510ce25e6ce5fdb" \
|
||||
"716705e23fecb7398b2cbb0a1c0af7ca5da717210345e358653b4580b5bd68d263089a0a2bf9" \
|
||||
"fcc1e145fcf2a3d4b9ab5cd7e1a76752ae000000004f28d63103dfb86a5d92d2daf328bbb35d" \
|
||||
"72239766a5853b7076a90d1745813200000000da00483045022100e89ac8215ee87186de284c" \
|
||||
"419b2522ebfb2ecb8063d0f91942f2ad63f383d3d4022036485902bb1f2e0b2cc645aab8781d" \
|
||||
"ef27f25e91d8256d48dd48d5cfca1a21c20147304402201449379f1d57f2b7ad1dc0882f5962" \
|
||||
"7287a6c32180ffa7637941b0eaa666dd4b022028eb0eed77e1b92de046098c855834a5feeade" \
|
||||
"a55d17160bc6d11d47184e8b51014752210283db605dc305201ab9be509a22d2c83b388002fb" \
|
||||
"54ecd82d86efe83c0a1d35822103146f745eff0ae31fe899aafd27d51d2c0f5b0c03f2f47b3c" \
|
||||
"65bb26ec7581ad8652ae0000000021cb3b00d1f22455e76e86872e00ef556578bcc112071e6a" \
|
||||
"5b4ac02ab682fdb301000000232200206ea344e9a4a8f8a8983479af2ae3ed29fab153955af1" \
|
||||
"4457780a304a6832b9c50000000016dcc4b40a514c43ed61d6c01a9006d7f21a6d30b99b3e58" \
|
||||
"0d21578e35002502000000002322002049ea1f7c280b32fee0dce2e1801df2218df59d64614c" \
|
||||
"4fe76c043ee2c80116700000000002005ed0b20000000017a91495c5c19257aa52bd4b702ba1" \
|
||||
"a5e29b8d72a75a3a876d6b4e010000000017a91487b6255a5df746188f0bd22ed0194a40ec98" \
|
||||
"f2de87be810700"
|
||||
segwit_view = "010000000001060c02c24bbfefd94cdc4f58a3f83f93e05b14ad968ec6aba54190c3dcba6eef1b00" \
|
||||
"000000da00483045022100f4dbf2ca7b5da97bd78818635d48004e6bf1a6f7e5e24bcecb7d93f554" \
|
||||
"e49eaf02200a05025d93475b6372d14bd8fe8366fe10570ade772b19d124d3b0175b9f6eda014730" \
|
||||
"4402202290feb53fc4cb077c5d3eed0ed5367fef4011ac708c1acaaa5003e4ed680ddf022012c521" \
|
||||
"60ae6b85fc59ceed80c7cacd5358b80712371733de7c76fef552114ee60147522103ee30ea502d69" \
|
||||
"2ecfc79dfcb6fb2d6914fc70ba80db971beebacccdbaed40d7c52102f52db885d04dc43ca8562471" \
|
||||
"759dd621b899faf508caba70963d9228bfd2415e52ae00000000dab020ee0a80a818e4d20a52aa7b" \
|
||||
"a367a0a2d430d22c26ccb4572527e259e14a01000000d900473044022064745ac8cae859bb19305a" \
|
||||
"550981b8d39b69efec55b9a423dca645cd3b5c845502205cf375839d7f056235feb550a8138a03e7" \
|
||||
"5fa140503a2ce61fe239a3bfe42145014730440220728b0393d5427d8abb56a608c6b1a0b14c5455" \
|
||||
"f3abeb56ce8a5c7f70035af71d022052a99e4e389790b364f6180caf1523d6da2b3daabe85952705" \
|
||||
"023be2b5409b360147522103e296937dbdafdae4d0a45b33d9a691b0c0e71d97bd2ffc82da895a25" \
|
||||
"1f74bd7e2103ead7ad0c398f928cbe851a6b387a5e74d139487caf4d4ac3dc3d478254dbbb4452ae" \
|
||||
"0000000067a6c2e2f14fc412b3f5627fafac2fe43009bc403ec680839579444df2ce042b00000000" \
|
||||
"da00483045022100d3bdc055fa5dcce335a1d572b1c3ccb8cc9ba91960c6361c77e29ded716e2331" \
|
||||
"02200e7ebb43fd39fb98c714098d4fda32d94cdbefdd96c0c918b788aacc6164953c014730440220" \
|
||||
"2f4338d2710edb1960dcf7136411f065a16bee4e44b86604d64c660315bc55040220238c1c3216fe" \
|
||||
"b31051f7798297317819da1dfa830d24a6a9e38a37367a68ebd101475221037b2987df626510ce25" \
|
||||
"e6ce5fdb716705e23fecb7398b2cbb0a1c0af7ca5da717210345e358653b4580b5bd68d263089a0a" \
|
||||
"2bf9fcc1e145fcf2a3d4b9ab5cd7e1a76752ae000000004f28d63103dfb86a5d92d2daf328bbb35d" \
|
||||
"72239766a5853b7076a90d1745813200000000da00483045022100e89ac8215ee87186de284c419b" \
|
||||
"2522ebfb2ecb8063d0f91942f2ad63f383d3d4022036485902bb1f2e0b2cc645aab8781def27f25e" \
|
||||
"91d8256d48dd48d5cfca1a21c20147304402201449379f1d57f2b7ad1dc0882f59627287a6c32180" \
|
||||
"ffa7637941b0eaa666dd4b022028eb0eed77e1b92de046098c855834a5feeadea55d17160bc6d11d" \
|
||||
"47184e8b51014752210283db605dc305201ab9be509a22d2c83b388002fb54ecd82d86efe83c0a1d" \
|
||||
"35822103146f745eff0ae31fe899aafd27d51d2c0f5b0c03f2f47b3c65bb26ec7581ad8652ae0000" \
|
||||
"000021cb3b00d1f22455e76e86872e00ef556578bcc112071e6a5b4ac02ab682fdb3010000002322" \
|
||||
"00206ea344e9a4a8f8a8983479af2ae3ed29fab153955af14457780a304a6832b9c50000000016dc" \
|
||||
"c4b40a514c43ed61d6c01a9006d7f21a6d30b99b3e580d21578e35002502000000002322002049ea" \
|
||||
"1f7c280b32fee0dce2e1801df2218df59d64614c4fe76c043ee2c80116700000000002005ed0b200" \
|
||||
"00000017a91495c5c19257aa52bd4b702ba1a5e29b8d72a75a3a876d6b4e010000000017a91487b6" \
|
||||
"255a5df746188f0bd22ed0194a40ec98f2de87000000000400473044022100d0d2ded141c9369bcc" \
|
||||
"99de23d3d41d1d99d6cff47126df1b0c4d4797f947eacf021f790f1c112b3425ebc3251d719aae6e" \
|
||||
"f0f9830b688585275591a5353f1f973801483045022100bf06c762e6ab64258d2f2777a66fe32ddd" \
|
||||
"8f36e232b80bf5afa6ff9b9aa73ee0022049caf991fce808e60a9b17499f5e0dc11f6163e3ef7bca" \
|
||||
"8109b72b5695d674210147522103edd556806048b319d71f43466c4415001bb32d8afe3aac06532d" \
|
||||
"3ac210fd0e86210215e16727cf1389b4ee377487385f3ec595841a6bb747eb9c3a5cd559e9b1c8dc" \
|
||||
"52ae040047304402204e9cc87526e148d236d692fa70104d26b8df632f30f4e3be38a2e99cec76d0" \
|
||||
"f80220354ae575c3537c0ad2399a6037a9164b0cb147b12f262efc906649ca7950e2eb0147304402" \
|
||||
"203553bcd1565804ec71c997c87006bd91c639b74a004b19a239c7f551aab5635a0220753f74e065" \
|
||||
"c0b7cdf67d16b00f6a20dda7159a49f20aa493a7889b2851b2fea30147522103b09ac1fa65a55fa4" \
|
||||
"feadea57c4cf417d7490065d8b844ada60c242a441e0e3a42103c0625169b46dbbde3492db7c62f1" \
|
||||
"be8f582131467620cef17335306bad7ef88a52aebe810700"
|
||||
print("Deserialize Segwit transaction")
|
||||
ns = Transaction(non_segwit_view)
|
||||
s = Transaction(segwit_view)
|
||||
@ -62,9 +144,55 @@ class TransactionDeserializeTests(unittest.TestCase):
|
||||
self.assertEqual(s.serialize(segwit=True, hex = True), segwit_view)
|
||||
self.assertEqual(ns.serialize(segwit=False, hex = True), non_segwit_view)
|
||||
|
||||
tx = "01000000014cee27ba570d2cca50bb9b3f7374c7eb24ec16ffec0a077c84c1cc23b0161804010000008b48304502200f1100f78596c8d46fb2f39c570ce6945956a3dd33c48fbdbe53af1c383182ed022100a85b528ea21ee7f39b2ec1568ac19f26f4dd4fb9d3dbf70587986de3c2c90fa801410426e4d0890ad5272b2b9a10ca3f518f7e025932caa62f13467e444df89ed25f24f4fc5075cad32f468c8f7f913e30057449d65623726e7102f5eaa326d486ebf7ffffffff020010000000000000006020e908000000001976a914947236437233a71cb033a53932008dbfe346388e88ac00000000"
|
||||
tx = "01000000014cee27ba570d2cca50bb9b3f7374c7eb24ec16ffec0a077c84c1cc23b0161804010000008b48304" \
|
||||
"502200f1100f78596c8d46fb2f39c570ce6945956a3dd33c48fbdbe53af1c383182ed022100a85b528ea21ee7" \
|
||||
"f39b2ec1568ac19f26f4dd4fb9d3dbf70587986de3c2c90fa801410426e4d0890ad5272b2b9a10ca3f518f7e0" \
|
||||
"25932caa62f13467e444df89ed25f24f4fc5075cad32f468c8f7f913e30057449d65623726e7102f5eaa326d4" \
|
||||
"86ebf7ffffffff020010000000000000006020e908000000001976a914947236437233a71cb033a53932008db" \
|
||||
"fe346388e88ac00000000"
|
||||
Transaction(tx)
|
||||
tx = "01000000011e6c87805dad469ed72b42668b858df90e6b007c6410a7bde65bb1cf687d8409000000006b48304502204f3353cf129bb805fb90315aeb6d5ab8e0937129c4b0f1422495e42b6bf0e928022100cbdd2811a4c94397aa731c224ee0c7290fea6bc17a9b3ce5957d9937c60f4f97012103e2a0e6a91fa985ce4dda7f048fca5ec8264292aed9290594321aa53d37fdea32ffffffff0160e3160000000000fdaf0563ff054effffffff4da30546726f6d2061336136316665663433333039623966623233323235646637393130623033616663353436356239204d6f6e205365702031372030303a30303a303020323030310a46726f6d3a205361746f736869204e616b616d6f746f203c7361746f7368696e40676d782e636f6d3e0a446174653a204d6f6e2c2031322041756720323031332030323a32383a3032202d303230300a5375626a6563743a205b50415443485d2052656d6f7665202853494e474c457c444f55424c4529425954450a0a492072656d6f76656420746869732066726f6d20426974636f696e20696e20663165316662346264656638373863386663313536346661343138643434653735343161376538330a696e2053657074203720323031302c20616c6d6f73742074687265652079656172732061676f2e204265207761726e6564207468617420492068617665206e6f740a61637475616c6c792074657374656420746869732070617463682e0a2d2d2d0a206261636b656e64732f626974636f696e642f646573657269616c697a652e7079207c2020202038202b2d2d2d2d2d2d2d0a20312066696c65206368616e6765642c203120696e73657274696f6e282b292c20372064656c6574696f6e73282d290a0a64696666202d2d67697420612f6261636b656e64732f626974636f696e642f646573657269616c697a652e707920622f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a696e64657820363632303538332e2e38396239623162203130303634340a2d2d2d20612f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a2b2b2b20622f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a4040202d3238302c3130202b3238302c38204040206f70636f646573203d20456e756d65726174696f6e28224f70636f646573222c205b0a2020202020224f505f57495448494e222c20224f505f524950454d44313630222c20224f505f53484131222c20224f505f534841323536222c20224f505f48415348313630222c0a2020202020224f505f48415348323536222c20224f505f434f4445534550415241544f52222c20224f505f434845434b534947222c20224f505f434845434b534947564552494659222c20224f505f434845434b4d554c5449534947222c0a2020202020224f505f434845434b4d554c5449534947564552494659222c0a2d2020202028224f505f53494e474c45425954455f454e44222c2030784630292c0a2d2020202028224f505f444f55424c45425954455f424547494e222c20307846303030292c0a2020202020224f505f5055424b4559222c20224f505f5055424b455948415348222c0a2d2020202028224f505f494e56414c49444f50434f4445222c20307846464646292c0a2b2020202028224f505f494e56414c49444f50434f4445222c2030784646292c0a205d290a200a200a4040202d3239332c3130202b3239312c3620404020646566207363726970745f4765744f70286279746573293a0a202020202020202020766368203d204e6f6e650a2020202020202020206f70636f6465203d206f72642862797465735b695d290a20202020202020202069202b3d20310a2d20202020202020206966206f70636f6465203e3d206f70636f6465732e4f505f53494e474c45425954455f454e4420616e642069203c206c656e286279746573293a0a2d2020202020202020202020206f70636f6465203c3c3d20380a2d2020202020202020202020206f70636f6465207c3d206f72642862797465735b695d290a2d20202020202020202020202069202b3d20310a200a2020202020202020206966206f70636f6465203c3d206f70636f6465732e4f505f5055534844415441343a0a202020202020202020202020206e53697a65203d206f70636f64650a2d2d200a312e372e392e340a0a6800000000"
|
||||
tx = "01000000011e6c87805dad469ed72b42668b858df90e6b007c6410a7bde65bb1cf687d8409000000006b48304" \
|
||||
"502204f3353cf129bb805fb90315aeb6d5ab8e0937129c4b0f1422495e42b6bf0e928022100cbdd2811a4c943" \
|
||||
"97aa731c224ee0c7290fea6bc17a9b3ce5957d9937c60f4f97012103e2a0e6a91fa985ce4dda7f048fca5ec82" \
|
||||
"64292aed9290594321aa53d37fdea32ffffffff0160e3160000000000fdaf0563ff054effffffff4da3054672" \
|
||||
"6f6d2061336136316665663433333039623966623233323235646637393130623033616663353436356239204" \
|
||||
"d6f6e205365702031372030303a30303a303020323030310a46726f6d3a205361746f736869204e616b616d6f" \
|
||||
"746f203c7361746f7368696e40676d782e636f6d3e0a446174653a204d6f6e2c2031322041756720323031332" \
|
||||
"030323a32383a3032202d303230300a5375626a6563743a205b50415443485d2052656d6f7665202853494e47" \
|
||||
"4c457c444f55424c4529425954450a0a492072656d6f76656420746869732066726f6d20426974636f696e206" \
|
||||
"96e20663165316662346264656638373863386663313536346661343138643434653735343161376538330a69" \
|
||||
"6e2053657074203720323031302c20616c6d6f73742074687265652079656172732061676f2e2042652077617" \
|
||||
"26e6564207468617420492068617665206e6f740a61637475616c6c7920746573746564207468697320706174" \
|
||||
"63682e0a2d2d2d0a206261636b656e64732f626974636f696e642f646573657269616c697a652e7079207c202" \
|
||||
"0202038202b2d2d2d2d2d2d2d0a20312066696c65206368616e6765642c203120696e73657274696f6e282b29" \
|
||||
"2c20372064656c6574696f6e73282d290a0a64696666202d2d67697420612f6261636b656e64732f626974636" \
|
||||
"f696e642f646573657269616c697a652e707920622f6261636b656e64732f626974636f696e642f6465736572" \
|
||||
"69616c697a652e70790a696e64657820363632303538332e2e38396239623162203130303634340a2d2d2d206" \
|
||||
"12f6261636b656e64732f626974636f696e642f646573657269616c697a652e70790a2b2b2b20622f6261636b" \
|
||||
"656e64732f626974636f696e642f646573657269616c697a652e70790a4040202d3238302c3130202b3238302" \
|
||||
"c38204040206f70636f646573203d20456e756d65726174696f6e28224f70636f646573222c205b0a20202020" \
|
||||
"20224f505f57495448494e222c20224f505f524950454d44313630222c20224f505f53484131222c20224f505" \
|
||||
"f534841323536222c20224f505f48415348313630222c0a2020202020224f505f48415348323536222c20224f" \
|
||||
"505f434f4445534550415241544f52222c20224f505f434845434b534947222c20224f505f434845434b53494" \
|
||||
"7564552494659222c20224f505f434845434b4d554c5449534947222c0a2020202020224f505f434845434b4d" \
|
||||
"554c5449534947564552494659222c0a2d2020202028224f505f53494e474c45425954455f454e44222c20307" \
|
||||
"84630292c0a2d2020202028224f505f444f55424c45425954455f424547494e222c20307846303030292c0a20" \
|
||||
"20202020224f505f5055424b4559222c20224f505f5055424b455948415348222c0a2d2020202028224f505f4" \
|
||||
"94e56414c49444f50434f4445222c20307846464646292c0a2b2020202028224f505f494e56414c49444f5043" \
|
||||
"4f4445222c2030784646292c0a205d290a200a200a4040202d3239332c3130202b3239312c362040402064656" \
|
||||
"6207363726970745f4765744f70286279746573293a0a202020202020202020766368203d204e6f6e650a2020" \
|
||||
"202020202020206f70636f6465203d206f72642862797465735b695d290a20202020202020202069202b3d203" \
|
||||
"10a2d20202020202020206966206f70636f6465203e3d206f70636f6465732e4f505f53494e474c4542595445" \
|
||||
"5f454e4420616e642069203c206c656e286279746573293a0a2d2020202020202020202020206f70636f64652" \
|
||||
"03c3c3d20380a2d2020202020202020202020206f70636f6465207c3d206f72642862797465735b695d290a2d" \
|
||||
"20202020202020202020202069202b3d20310a200a2020202020202020206966206f70636f6465203c3d206f7" \
|
||||
"0636f6465732e4f505f5055534844415441343a0a202020202020202020202020206e53697a65203d206f7063" \
|
||||
"6f64650a2d2d200a312e372e392e340a0a6800000000"
|
||||
Transaction(tx)
|
||||
tx = "0100000001c86c4ddc01f59b748e6a55a6d09c5bce7574fbdec721ca468768b5d6d9e3fb00000000006b48304" \
|
||||
"5022076b5504ad7aff614e32159ac055362a1197c9a5e50de48cf4f05c7547b39c0b5022100ea67efb2585aae" \
|
||||
"40a53363f48e3e38dfc7387b238f8716fa53a5f0ed51b7c314012102452928340bc618777d217a52f30d8e144" \
|
||||
"0d98f561c523a31834a1614106f3c15ffffffff025cf5352f0d0000001976a9141855d5890b8aec536ffc3e59" \
|
||||
"cb586e98b34b5b9288ac0bd32204000000001976a9146f3f6845da01e856a426c31dfeef188c06bf574d88ac0" \
|
||||
"0000000"
|
||||
Transaction(tx)
|
||||
tx = "0100000001c86c4ddc01f59b748e6a55a6d09c5bce7574fbdec721ca468768b5d6d9e3fb00000000006b483045022076b5504ad7aff614e32159ac055362a1197c9a5e50de48cf4f05c7547b39c0b5022100ea67efb2585aae40a53363f48e3e38dfc7387b238f8716fa53a5f0ed51b7c314012102452928340bc618777d217a52f30d8e1440d98f561c523a31834a1614106f3c15ffffffff025cf5352f0d0000001976a9141855d5890b8aec536ffc3e59cb586e98b34b5b9288ac0bd32204000000001976a9146f3f6845da01e856a426c31dfeef188c06bf574d88ac00000000"
|
||||
Transaction(tx)
|
||||
Loading…
Reference in New Issue
Block a user