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
Пример #2
0
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
Пример #3
0
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