X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=backends%2Fbitcoind%2Fdeserialize.py;h=21fd9ce785900edb07c45209263a6fbe12ff587b;hb=f865c7c4a2c69fbe78aa0c0a66aa3cd743f2d183;hp=d92a2b5f47bacfe3034df5e494e219c8ea1fda57;hpb=a6c7750da047d13465a040edfa5fa4a9d3d28328;p=electrum-server.git diff --git a/backends/bitcoind/deserialize.py b/backends/bitcoind/deserialize.py index d92a2b5..21fd9ce 100644 --- a/backends/bitcoind/deserialize.py +++ b/backends/bitcoind/deserialize.py @@ -258,8 +258,9 @@ def parse_TxIn(vds): d['prevout_n'] = vds.read_uint32() scriptSig = vds.read_bytes(vds.read_compact_size()) d['sequence'] = vds.read_uint32() - d['address'] = extract_public_key(scriptSig) - #d['script'] = decode_script(scriptSig) + # actually I don't need that at all + # if not is_coinbase: d['address'] = extract_public_key(scriptSig) + # d['script'] = decode_script(scriptSig) return d @@ -274,18 +275,28 @@ def parse_TxOut(vds, i): return d -def parse_Transaction(vds): +def parse_Transaction(vds, is_coinbase): d = {} start = vds.read_cursor d['version'] = vds.read_int32() n_vin = vds.read_compact_size() d['inputs'] = [] for i in xrange(n_vin): - d['inputs'].append(parse_TxIn(vds)) + o = parse_TxIn(vds) + if not is_coinbase: + d['inputs'].append(o) n_vout = vds.read_compact_size() d['outputs'] = [] for i in xrange(n_vout): - d['outputs'].append(parse_TxOut(vds, i)) + o = parse_TxOut(vds, i) + + if o['address'] == "None" and o['value']==0: + print("skipping strange tx output with zero value") + continue + + # if o['address'] != "None": + d['outputs'].append(o) + d['lockTime'] = vds.read_uint32() return d @@ -381,10 +392,22 @@ def extract_public_key(bytes): if match_decoded(decoded, match): return public_key_to_bc_address(decoded[0][1]) + # coins sent to black hole + # DUP HASH160 20 BYTES:... EQUALVERIFY CHECKSIG + match = [ opcodes.OP_DUP, opcodes.OP_HASH160, opcodes.OP_0, opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG ] + if match_decoded(decoded, match): + return "None" + # Pay-by-Bitcoin-address TxOuts look like: # DUP HASH160 20 BYTES:... EQUALVERIFY CHECKSIG match = [ opcodes.OP_DUP, opcodes.OP_HASH160, opcodes.OP_PUSHDATA4, opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG ] if match_decoded(decoded, match): return hash_160_to_bc_address(decoded[2][1]) - return "(None)" + # strange tx + match = [ opcodes.OP_DUP, opcodes.OP_HASH160, opcodes.OP_PUSHDATA4, opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG, opcodes.OP_NOP ] + if match_decoded(decoded, match): + return hash_160_to_bc_address(decoded[2][1]) + + #raise BaseException("address not found in script") see ce35795fb64c268a52324b884793b3165233b1e6d678ccaadf760628ec34d76b + return "None"