def parse_nameop( opcode, payload, fake_pubkey, recipient=None, recipient_address=None, import_update_hash=None ): opcode_name = OPCODE_NAMES[opcode] pubk = pybitcoin.BitcoinPublicKey(fake_pubkey) address = pubk.address() script_pubkey = pybitcoin.make_pay_to_address_script( address ) senders = [{ "script_pubkey": script_pubkey, "script_type": "pubkeyhash", "addresses": [ address ] }] # just enough to get the public key inputs = [{ "scriptSig": { "asm": "ignored %s" % fake_pubkey, } }] script = "OP_RETURN %s" % payload try: scripthex = pybitcoin.make_op_return_script( payload ) except: if len(payload) == 0: scripthex = "6a" else: raise outputs = [{ "scriptPubKey": { "asm": script, "hex": scripthex, "addresses": [] }}] if recipient_address is not None: script = "OP_DUP OP_HASH160 %s OP_EQUALVERIFY OP_CHECKSIG" % binascii.hexlify( pybitcoin.bin_double_sha256( fake_pubkey ) ) scripthex = pybitcoin.make_pay_to_address_script( recipient_address ) outputs.append( { "scriptPubKey": { "asm": script, "hex": scripthex, "addresses": [ recipient_address ] } }) if import_update_hash is not None: script = "OP_DUP OP_HASH160 %s OP_EQUALVERIFY OP_CHECKSIG" % import_update_hash scripthex = pybitcoin.make_pay_to_address_script( pybitcoin.hex_hash160_to_address( import_update_hash ) ) outputs.append( { "scriptPubKey": { "asm": script, "hex": scripthex, "addresses": [ pybitcoin.hex_hash160_to_address(import_update_hash) ] } }) try: op = op_extract( opcode_name, payload, senders, inputs, outputs, 373601, 0, "00" * 64 ) except AssertionError, ae: # failed to parse return None
def parse_nameop( opcode, payload, fake_pubkey, recipient=None, recipient_address=None, import_update_hash=None, burn_address=None, reveal_address=None ): opcode_name = OPCODE_NAMES[opcode] pubk = virtualchain.BitcoinPublicKey(fake_pubkey) address = pubk.address() script_pubkey = virtualchain.make_payment_script( address ) senders = [{ "script_pubkey": script_pubkey, "script_type": "pubkeyhash", "addresses": [ address ] }] # just enough to get the public key inputs = [{ 'script': 'ignored {}'.format(fake_pubkey).encode('hex') }] script = "OP_RETURN %s" % payload try: scripthex = virtualchain.make_data_script(binascii.hexlify(payload)) except: if len(payload) == 0: scripthex = "6a" else: print 'failed on {}'.format(payload) raise outputs = [{ 'script': scripthex, 'value': 0 }] if recipient_address is not None: script = "OP_DUP OP_HASH160 %s OP_EQUALVERIFY OP_CHECKSIG" % binascii.hexlify( virtualchain.lib.hashing.bin_double_sha256( fake_pubkey ) ) scripthex = virtualchain.make_payment_script( recipient_address ) outputs.append( { 'script': scripthex, "value": 10000000 }) if import_update_hash is not None: script = "OP_DUP OP_HASH160 %s OP_EQUALVERIFY OP_CHECKSIG" % import_update_hash scripthex = virtualchain.make_payment_script( virtualchain.hex_hash160_to_address( import_update_hash ) ) outputs.append( { "script": scripthex, "value": 10000000 }) elif burn_address is not None: scripthex = virtualchain.make_payment_script( burn_address ) outputs.append( { "script": scripthex, "value": 10000000 }) elif reveal_address is not None: scripthex = virtualchain.make_payment_script( reveal_address ) outputs.append( { "script": scripthex, "value": 10000000 }) try: op = op_extract( opcode_name, payload, senders, inputs, outputs, 488501, 0, "00" * 64 ) except AssertionError, ae: # failed to parse return None
def parse_nameop(opcode, payload, fake_pubkey, recipient=None, recipient_address=None, import_update_hash=None): opcode_name = OPCODE_NAMES[opcode] pubk = pybitcoin.BitcoinPublicKey(fake_pubkey) address = pubk.address() script_pubkey = pybitcoin.make_pay_to_address_script(address) senders = [{ "script_pubkey": script_pubkey, "script_type": "pubkeyhash", "addresses": [address] }] # just enough to get the public key inputs = [{ "scriptSig": { "asm": "ignored %s" % fake_pubkey, } }] script = "OP_RETURN %s" % payload try: scripthex = pybitcoin.make_op_return_script(payload) except: if len(payload) == 0: scripthex = "6a" else: raise outputs = [{ "scriptPubKey": { "asm": script, "hex": scripthex, "addresses": [] } }] if recipient_address is not None: script = "OP_DUP OP_HASH160 %s OP_EQUALVERIFY OP_CHECKSIG" % binascii.hexlify( pybitcoin.bin_double_sha256(fake_pubkey)) scripthex = pybitcoin.make_pay_to_address_script(recipient_address) outputs.append({ "scriptPubKey": { "asm": script, "hex": scripthex, "addresses": [recipient_address] } }) if import_update_hash is not None: script = "OP_DUP OP_HASH160 %s OP_EQUALVERIFY OP_CHECKSIG" % import_update_hash scripthex = pybitcoin.make_pay_to_address_script( pybitcoin.hex_hash160_to_address(import_update_hash)) outputs.append({ "scriptPubKey": { "asm": script, "hex": scripthex, "addresses": [pybitcoin.hex_hash160_to_address(import_update_hash)] } }) try: op = op_extract(opcode_name, payload, senders, inputs, outputs, 373601, 0, "00" * 64) except AssertionError, ae: # failed to parse return None