Beispiel #1
0
def validateGAAddr(result, wallet):

    if sys.version_info.major < 3:
        addrscript = CScript(binascii.unhexlify(result['script']))
    else:
        addrscript = CScript(binascii.unhexlify(result['script']))

    addrdata = [x for x in addrscript]

    assert(len(addrdata) == 5)
    
    if sys.version_info.major < 3:
        secondpkh = binascii.hexlify(addrdata[2])
    else:
        secondpkh = binascii.hexlify(addrdata[2])


    print("Second pubkey hash: %s" % secondpkh)
    
    m = addrdata[0]
    assert(m == 2)
    n = addrdata[3]
    assert(n==2)
    assert(addrdata[4] == OP_CHECKMULTISIG)

    hexsubkey = wallet.subkey(1).subkey(result['pointer']).public_copy().sec_as_hex()

    if sys.version_info.major < 3:
        addrfromapi = P2SHBitcoinAddress.from_redeemScript(CScript(binascii.unhexlify(result['script'])))
    else:
        addrfromapi = P2SHBitcoinAddress.from_redeemScript(CScript(binascii.unhexlify(result['script'])))

    assert(hexsubkey == secondpkh.decode('utf8'))

    return addrfromapi
Beispiel #2
0
def analyze_tx(tx_hex_string):
    output = {}

    # get op_return from transaction
    hex = unhexlify(tx_hex_string)
    deserializedTransaction = CTransaction.deserialize(hex)
    op_return_vout = deserializedTransaction.vout[1].scriptPubKey

    # get redeem script
    redeem_script = ''
    for i in op_return_vout:
        script = bytes(i).decode('utf8')
        if 'REDEEM' in script:
            redeem_script_string = script.replace('REDEEM SCRIPT ', '')
    output['redeemScript'] = redeem_script_string

    # convert redeem script into list
    redeemScript = CScript(unhexlify(redeem_script_string))
    redeem_script_array = []
    for i in redeemScript:
        redeem_script_array.append(i)

    # get redeem script hash (hodl address)
    p2sh_address = P2SHBitcoinAddress.from_redeemScript(redeemScript)
    output['hodlAddress'] = str(p2sh_address)

    # get nlocktime from redeem script
    nlocktime_hex = b2lx(redeem_script_array[0])
    nlocktime = int(nlocktime_hex, 16)
    output['nLockTime'] = nlocktime

    # get authorized key from redeem script
    pubkey = b2x(redeem_script_array[3])

    # get address from authorized key
    pubkey = unhexlify(pubkey)
    P2PKHBitcoinAddress = bitcoin.wallet.P2PKHBitcoinAddress
    addr = P2PKHBitcoinAddress.from_pubkey(pubkey)
    output['authorizedAddress'] = str(addr)

    # get total sent to hodl address
    locked_satoshis = 0
    for i in deserializedTransaction.vout:
        if i.nValue > 0:
            sPK = i.scriptPubKey
            amount = i.nValue
            try:
                vout_p2sh_addr = P2SHBitcoinAddress.from_scriptPubKey(sPK)
                # rewards only paid to really locked funds
                if str(p2sh_address) == str(vout_p2sh_addr):
                    locked_satoshis += amount
            except:
                pass
    output["lockedSatoshis"] = locked_satoshis

    return (output)
Beispiel #3
0
def syncWallet(result, wallet, gaitwallet, path):

    hexprivkey = wallet.subkey(1).subkey(result['pointer']).wif()
    hexpubkey = wallet.subkey(1).subkey(result['pointer']).public_copy().sec_as_hex()
    tproxy = Proxy()

    GAKey = gaitwallet.subkey(1).subkey_for_path(path).subkey(result['pointer']).sec_as_hex()

    addrfromapi = P2SHBitcoinAddress.from_redeemScript(CScript(binascii.unhexlify(result['script'])))
    print(addrfromapi)

    #tproxy.call("importprivkey", hexprivkey, "", False)
    print(tproxy.call("createmultisig", 2, [GAKey, hexpubkey])['address'])
Beispiel #4
0
def generate_multisig_address(redeemscript: str, testnet: bool = False) -> str:
    """
    Generates a P2SH-multisig Bitcoin address from a redeem script

    Args:
        redeemscript: hex-encoded redeem script
                      use generate_multisig_redeem_script to create
                      the redeem script from three compressed public keys
         testnet: Should the address be testnet or mainnet?

    Example:
        TODO
    """

    if testnet:
        bitcoin.SelectParams('testnet')

    redeem_script = CScript(bitcoin.core.x(redeemscript))

    addr = P2SHBitcoinAddress.from_redeemScript(redeem_script)

    return str(addr)
Beispiel #5
0
 def p2sh_addr(self):
     return P2SHBitcoinAddress.from_redeemScript(self.script)
Beispiel #6
0
 def address(self):
     return P2SHBitcoinAddress.from_redeemScript(self.deposit_redeemScript)
Beispiel #7
0
def create_command(args):
    redeemScript = hodl_redeemScript(args.privkey, args.nLockTime)
    logging.debug('redeemScript: %s' % b2x(redeemScript))

    addr = P2SHBitcoinAddress.from_redeemScript(redeemScript)
    print(addr)
Beispiel #8
0
 def p2sh_addr(self):
     return P2SHBitcoinAddress.from_redeemScript(self.script)
Beispiel #9
0
def create_command(args):
    redeemScript = hodl_redeemScript(args.privkey, args.nLockTime)
    logging.debug('redeemScript: %s' % b2x(redeemScript))

    addr = P2SHBitcoinAddress.from_redeemScript(redeemScript)
    print(addr)
Beispiel #10
0
def create_command(pubkey, nLockTime):
    redeemScript = hodl_redeemScript(pubkey, nLockTime)
    addr = P2SHBitcoinAddress.from_redeemScript(redeemScript)
    return ({'address': str(addr), 'redeemScript': b2x(redeemScript)})