def create_bitcoin_address(test_obj): # fee address pk = str(test_obj.hdwallet.get_pubkey(path=FEE_PATH).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = FEE_PATH test_obj.addr_dic['fee'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set fee addr: ' + str(addr)) path2 = FEE_PATH + '/0' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set fee ct_addr: ' + str(ct_addr)) # gen address pk = str(test_obj.hdwallet.get_pubkey(path=GEN_PATH).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = FEE_PATH test_obj.addr_dic['gen'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set gen addr: ' + str(addr)) path2 = GEN_PATH + '/0' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set gen ct_addr: ' + str(ct_addr)) # wpkh main address path = '{}/0/0'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['main'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set main addr: ' + str(addr)) path2 = path + '/0' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set main ct_addr: ' + str(ct_addr)) # pkh address path = '{}/0/1'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2pkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['p2pkh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('pkh({})'.format(str(pk)), network=NETWORK) print('set p2pkh addr: ' + str(addr)) path2 = path + '/0' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set p2pkh ct_addr: ' + str(ct_addr)) # wpkh address path = '{}/0/2'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['p2wpkh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set p2wpkh addr: ' + str(addr)) path2 = path + '/0' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set p2wpkh ct_addr: ' + str(ct_addr)) # p2sh-p2wpkh address path = '{}/0/3'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2sh_p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['p2sh-p2wpkh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('sh(wpkh({}))'.format( str(pk)), network=NETWORK) print('set p2sh-p2wpkh addr: ' + str(addr)) path2 = path + '/0' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set p2sh-p2wpkh ct_addr: ' + str(ct_addr)) # multisig_key path = '{}/0/'.format(ROOT_PATH) path_list = [path + str(i + 1) for i in range(3)] pk1 = str(test_obj.hdwallet.get_pubkey(path=path_list[0]).pubkey) pk2 = str(test_obj.hdwallet.get_pubkey(path=path_list[1]).pubkey) pk3 = str(test_obj.hdwallet.get_pubkey(path=path_list[2]).pubkey) pk_list = [pk1, pk2, pk3] req_num = 2 desc_multi = 'multi({},{},{},{})'.format(req_num, pk1, pk2, pk3) addr = AddressUtil.multisig(req_num, pk_list, HashType.P2SH, network=NETWORK) test_obj.path_dic[str(addr)] = path_list test_obj.addr_dic['p2sh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor( 'sh({})'.format(desc_multi), network=NETWORK) print('set p2sh addr: ' + str(addr)) path2 = MULTISIG_CT_PATH_BASE + '1' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set p2sh ct_addr: ' + str(ct_addr)) addr = AddressUtil.multisig(req_num, pk_list, HashType.P2WSH, network=NETWORK) test_obj.path_dic[str(addr)] = path_list test_obj.addr_dic['p2wsh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor( 'wsh({})'.format(desc_multi), network=NETWORK) print('set p2wsh addr: ' + str(addr)) path2 = MULTISIG_CT_PATH_BASE + '2' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set p2wsh ct_addr: ' + str(ct_addr)) addr = AddressUtil.multisig(req_num, pk_list, HashType.P2SH_P2WSH, network=NETWORK) test_obj.path_dic[str(addr)] = path_list test_obj.addr_dic['p2sh-p2wsh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor( 'sh(wsh({}))'.format(desc_multi), network=NETWORK) print('set p2sh-p2wsh addr: ' + str(addr)) path2 = MULTISIG_CT_PATH_BASE + '3' sk = test_obj.hdwallet.get_privkey(path=path2).privkey test_obj.blind_key_dic[str(addr)] = sk ct_addr = ConfidentialAddress(addr, sk.pubkey) test_obj.ct_addr_dic[str(addr)] = ct_addr print('set p2sh-p2wsh ct_addr: ' + str(ct_addr)) # master blinding key path = '{}/0/1001'.format(ROOT_PATH) sk = str(test_obj.hdwallet.get_privkey(path=path).privkey) test_obj.master_blinding_key = sk print('set master blinding key: ' + sk)
assert_equal, assert_error, assert_match from cfd.key import Network from cfd.descriptor import parse_descriptor, Descriptor, DescriptorScriptType from cfd.util import CfdError def test_descriptor_func(obj, name, case, req, exp, error): try: _network = req.get('network', 'mainnet') if req.get('isElements', False) and (_network.lower() == Network.REGTEST.as_str()): _network = Network.ELEMENTS_REGTEST if name == 'Descriptor.Parse': resp = parse_descriptor(req['descriptor'], _network, path=req.get('bip32DerivationPath', '')) elif name == 'Descriptor.Checksum': resp = parse_descriptor(req['descriptor'], _network, path=req.get('bip32DerivationPath', '0')) elif name == 'Descriptor.Create': return # not implement else: raise Exception('unknown name: ' + name) assert_error(obj, name, case, error) assert_equal(obj, name, case, exp, str(resp), 'descriptor') if isinstance(resp, Descriptor) and (name == 'Descriptor.Parse'): if resp.network == Network.ELEMENTS_REGTEST:
OutPoint(txin['txid'], txin['vout']), txin['hashType'], redeem_script=txin['redeemScript'], signature_list=signature_list) if 'multisig p2wsh' == case: print(str(resp)) elif name == 'ConfidentialTransaction.VerifySign': resp, txin = get_tx() err_list = [] for txin in req.get('txins', []): hash_type = HashType.P2WPKH addr = txin.get('address', '') desc = txin.get('descriptor', '') if desc != '': desc = parse_descriptor(desc, network=Network.LIQUID_V1) addr = desc.data.address hash_type = desc.data.hash_type elif addr != '': addr = AddressUtil.parse(addr) hash_type = addr.hash_type try: resp.verify_sign( OutPoint(txin['txid'], txin['vout']), addr, hash_type, txin.get('confidentialValueCommitment', txin.get('amount', 0))) except CfdError as err: _dict = {'txid': txin['txid'], 'vout': txin['vout']} _dict['reason'] = err.message
def create_bitcoin_address(test_obj): # fee address pk = str(test_obj.hdwallet.get_pubkey(path=FEE_PATH).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = FEE_PATH test_obj.addr_dic['fee'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set fee addr: ' + str(addr)) # wpkh main address path = '{}/0/0'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['main'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set main addr: ' + str(addr)) # pkh address path = '{}/0/1'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2pkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['p2pkh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('pkh({})'.format(str(pk)), network=NETWORK) print('set p2pkh addr: ' + str(addr)) # wpkh address path = '{}/0/2'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['p2wpkh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('wpkh({})'.format(str(pk)), network=NETWORK) print('set p2wpkh addr: ' + str(addr)) # p2sh-p2wpkh address path = '{}/0/3'.format(ROOT_PATH) pk = str(test_obj.hdwallet.get_pubkey(path=path).pubkey) addr = AddressUtil.p2sh_p2wpkh(pk, network=NETWORK) test_obj.path_dic[str(addr)] = path test_obj.addr_dic['p2sh-p2wpkh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor('sh(wpkh({}))'.format( str(pk)), network=NETWORK) print('set p2sh-p2wpkh addr: ' + str(addr)) # multisig_key path = '{}/0/'.format(ROOT_PATH) path_list = [path + str(i + 1) for i in range(3)] pk1 = str(test_obj.hdwallet.get_pubkey(path=path_list[0]).pubkey) pk2 = str(test_obj.hdwallet.get_pubkey(path=path_list[1]).pubkey) pk3 = str(test_obj.hdwallet.get_pubkey(path=path_list[2]).pubkey) pk_list = [pk1, pk2, pk3] req_num = 2 desc_multi = 'multi({},{},{},{})'.format(req_num, pk1, pk2, pk3) addr = AddressUtil.multisig(req_num, pk_list, HashType.P2SH, network=NETWORK) test_obj.path_dic[str(addr)] = path_list test_obj.addr_dic['p2sh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor( 'sh({})'.format(desc_multi), network=NETWORK) print('set p2sh addr: ' + str(addr)) addr = AddressUtil.multisig(req_num, pk_list, HashType.P2WSH, network=NETWORK) test_obj.path_dic[str(addr)] = path_list test_obj.addr_dic['p2wsh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor( 'wsh({})'.format(desc_multi), network=NETWORK) print('set p2wsh addr: ' + str(addr)) addr = AddressUtil.multisig(req_num, pk_list, HashType.P2SH_P2WSH, network=NETWORK) test_obj.path_dic[str(addr)] = path_list test_obj.addr_dic['p2sh-p2wsh'] = addr test_obj.desc_dic[str(addr)] = parse_descriptor( 'sh(wsh({}))'.format(desc_multi), network=NETWORK) print('set p2sh-p2wsh addr: ' + str(addr))
resp.add_tapscript_sign(OutPoint(txin['txid'], txin['vout']), signature_list=signature_list, tapscript=txin['tapscript'], control_block=txin['controlBlock'], annex=txin.get('annex', None)) elif name == 'Transaction.VerifySign': err_list = [] utxos = load_utxo_list(req) for txin in req.get('txins', []): hash_type = HashType.P2WPKH addr = txin.get('address', '') desc = txin.get('descriptor', '') if desc != '': desc = parse_descriptor(desc) addr = desc.data.address hash_type = desc.data.hash_type elif addr != '': addr = AddressUtil.parse(addr) hash_type = addr.hash_type try: resp.verify_sign(OutPoint(txin['txid'], txin['vout']), addr, hash_type, txin.get('amount', 0), utxos) except CfdError as err: _dict = {'txid': txin['txid'], 'vout': txin['vout']} _dict['reason'] = err.message err_list.append(_dict)