mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-24 13:59:38 +02:00
wallet: ExternalSigner: add GetDescriptors method
This commit is contained in:
@@ -20,13 +20,37 @@ def perform_pre_checks():
|
||||
def enumerate(args):
|
||||
sys.stdout.write(json.dumps([{"fingerprint": "00000001", "type": "trezor", "model": "trezor_t"}, {"fingerprint": "00000002"}]))
|
||||
|
||||
def getdescriptors(args):
|
||||
xpub = "tpubD6NzVbkrYhZ4WaWSyoBvQwbpLkojyoTZPRsgXELWz3Popb3qkjcJyJUGLnL4qHHoQvao8ESaAstxYSnhyswJ76uZPStJRJCTKvosUCJZL5B"
|
||||
|
||||
sys.stdout.write(json.dumps({
|
||||
"receive": [
|
||||
"pkh([00000001/44'/1'/" + args.account + "']" + xpub + "/0/*)#vt6w3l3j",
|
||||
"sh(wpkh([00000001/49'/1'/" + args.account + "']" + xpub + "/0/*))#r0grqw5x",
|
||||
"wpkh([00000001/84'/1'/" + args.account + "']" + xpub + "/0/*)#x30uthjs"
|
||||
],
|
||||
"internal": [
|
||||
"pkh([00000001/44'/1'/" + args.account + "']" + xpub + "/1/*)#all0v2p2",
|
||||
"sh(wpkh([00000001/49'/1'/" + args.account + "']" + xpub + "/1/*))#kwx4c3pe",
|
||||
"wpkh([00000001/84'/1'/" + args.account + "']" + xpub + "/1/*)#h92akzzg"
|
||||
]
|
||||
}))
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(prog='./signer.py', description='External signer mock')
|
||||
parser.add_argument('--fingerprint')
|
||||
parser.add_argument('--chain', default='main')
|
||||
|
||||
subparsers = parser.add_subparsers(description='Commands', dest='command')
|
||||
subparsers.required = True
|
||||
|
||||
parser_enumerate = subparsers.add_parser('enumerate', help='list available signers')
|
||||
parser_enumerate.set_defaults(func=enumerate)
|
||||
|
||||
parser_getdescriptors = subparsers.add_parser('getdescriptors')
|
||||
parser_getdescriptors.set_defaults(func=getdescriptors)
|
||||
parser_getdescriptors.add_argument('--account', metavar='account')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
perform_pre_checks()
|
||||
|
||||
@@ -91,5 +91,37 @@ class SignerTest(BitcoinTestFramework):
|
||||
not_hww = self.nodes[1].get_wallet_rpc('not_hww')
|
||||
assert_raises_rpc_error(-8, "Wallet flag is immutable: external_signer", not_hww.setwalletflag, "external_signer", True)
|
||||
|
||||
# assert_raises_rpc_error(-4, "Multiple signers found, please specify which to use", wallet_name='not_hww', disable_private_keys=True, descriptors=True, external_signer=True)
|
||||
|
||||
# TODO: Handle error thrown by script
|
||||
# self.set_mock_result(self.nodes[1], "2")
|
||||
# assert_raises_rpc_error(-1, 'Unable to parse JSON',
|
||||
# self.nodes[1].createwallet, wallet_name='not_hww2', disable_private_keys=True, descriptors=True, external_signer=False
|
||||
# )
|
||||
# self.clear_mock_result(self.nodes[1])
|
||||
|
||||
assert_equal(hww.getwalletinfo()["keypoolsize"], 3)
|
||||
|
||||
address1 = hww.getnewaddress(address_type="bech32")
|
||||
assert_equal(address1, "bcrt1qm90ugl4d48jv8n6e5t9ln6t9zlpm5th68x4f8g")
|
||||
address_info = hww.getaddressinfo(address1)
|
||||
assert_equal(address_info['solvable'], True)
|
||||
assert_equal(address_info['ismine'], True)
|
||||
assert_equal(address_info['hdkeypath'], "m/84'/1'/0'/0/0")
|
||||
|
||||
address2 = hww.getnewaddress(address_type="p2sh-segwit")
|
||||
assert_equal(address2, "2N2gQKzjUe47gM8p1JZxaAkTcoHPXV6YyVp")
|
||||
address_info = hww.getaddressinfo(address2)
|
||||
assert_equal(address_info['solvable'], True)
|
||||
assert_equal(address_info['ismine'], True)
|
||||
assert_equal(address_info['hdkeypath'], "m/49'/1'/0'/0/0")
|
||||
|
||||
address3 = hww.getnewaddress(address_type="legacy")
|
||||
assert_equal(address3, "n1LKejAadN6hg2FrBXoU1KrwX4uK16mco9")
|
||||
address_info = hww.getaddressinfo(address3)
|
||||
assert_equal(address_info['solvable'], True)
|
||||
assert_equal(address_info['ismine'], True)
|
||||
assert_equal(address_info['hdkeypath'], "m/44'/1'/0'/0/0")
|
||||
|
||||
if __name__ == '__main__':
|
||||
SignerTest().main()
|
||||
|
||||
Reference in New Issue
Block a user