Skip to content

Commit 796b020

Browse files
committed
wallet: add taproot support to external signer
1 parent 5bf65ec commit 796b020

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

src/external_signer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ bool ExternalSigner::SignTransaction(PartiallySignedTransaction& psbtx, std::str
8181
for (const auto& entry : input.hd_keypaths) {
8282
if (parsed_m_fingerprint == MakeUCharSpan(entry.second.fingerprint)) return true;
8383
}
84+
for (const auto& entry : input.m_tap_bip32_paths) {
85+
if (parsed_m_fingerprint == MakeUCharSpan(entry.second.second.fingerprint)) return true;
86+
}
8487
return false;
8588
};
8689

test/functional/mocks/signer.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,15 @@ def getdescriptors(args):
2727
"receive": [
2828
"pkh([00000001/44'/1'/" + args.account + "']" + xpub + "/0/*)#vt6w3l3j",
2929
"sh(wpkh([00000001/49'/1'/" + args.account + "']" + xpub + "/0/*))#r0grqw5x",
30-
"wpkh([00000001/84'/1'/" + args.account + "']" + xpub + "/0/*)#x30uthjs"
30+
"wpkh([00000001/84'/1'/" + args.account + "']" + xpub + "/0/*)#x30uthjs",
31+
"tr([00000001/86'/1'/" + args.account + "']" + xpub + "/0/*)#sng9rd4t"
3132
],
3233
"internal": [
3334
"pkh([00000001/44'/1'/" + args.account + "']" + xpub + "/1/*)#all0v2p2",
3435
"sh(wpkh([00000001/49'/1'/" + args.account + "']" + xpub + "/1/*))#kwx4c3pe",
35-
"wpkh([00000001/84'/1'/" + args.account + "']" + xpub + "/1/*)#h92akzzg"
36+
"wpkh([00000001/84'/1'/" + args.account + "']" + xpub + "/1/*)#h92akzzg",
37+
"tr([00000001/86'/1'/" + args.account + "']" + xpub + "/1/*)#p8dy7c9n"
38+
3639
]
3740
}))
3841

@@ -44,7 +47,8 @@ def displayaddress(args):
4447
return sys.stdout.write(json.dumps({"error": "Unexpected fingerprint", "fingerprint": args.fingerprint}))
4548

4649
expected_desc = [
47-
"wpkh([00000001/84'/1'/0'/0/0]02c97dc3f4420402e01a113984311bf4a1b8de376cac0bdcfaf1b3ac81f13433c7)#0yneg42r"
50+
"wpkh([00000001/84'/1'/0'/0/0]02c97dc3f4420402e01a113984311bf4a1b8de376cac0bdcfaf1b3ac81f13433c7)#0yneg42r",
51+
"tr([00000001/86'/1'/0'/0/0]c97dc3f4420402e01a113984311bf4a1b8de376cac0bdcfaf1b3ac81f13433c7)#4vdj9jqk",
4852
]
4953
if args.desc not in expected_desc:
5054
return sys.stdout.write(json.dumps({"error": "Unexpected descriptor", "desc": args.desc}))

test/functional/wallet_signer.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def test_valid_signer(self):
8989
# )
9090
# self.clear_mock_result(self.nodes[1])
9191

92-
assert_equal(hww.getwalletinfo()["keypoolsize"], 30)
92+
assert_equal(hww.getwalletinfo()["keypoolsize"], 40)
9393

9494
address1 = hww.getnewaddress(address_type="bech32")
9595
assert_equal(address1, "bcrt1qm90ugl4d48jv8n6e5t9ln6t9zlpm5th68x4f8g")
@@ -112,6 +112,13 @@ def test_valid_signer(self):
112112
assert_equal(address_info['ismine'], True)
113113
assert_equal(address_info['hdkeypath'], "m/44'/1'/0'/0/0")
114114

115+
address4 = hww.getnewaddress(address_type="bech32m")
116+
assert_equal(address4, "bcrt1phw4cgpt6cd30kz9k4wkpwm872cdvhss29jga2xpmftelhqll62ms4e9sqj")
117+
address_info = hww.getaddressinfo(address4)
118+
assert_equal(address_info['solvable'], True)
119+
assert_equal(address_info['ismine'], True)
120+
assert_equal(address_info['hdkeypath'], "m/86'/1'/0'/0/0")
121+
115122
self.log.info('Test walletdisplayaddress')
116123
result = hww.walletdisplayaddress(address1)
117124
assert_equal(result, {"address": address1})
@@ -124,7 +131,7 @@ def test_valid_signer(self):
124131
self.clear_mock_result(self.nodes[1])
125132

126133
self.log.info('Prepare mock PSBT')
127-
self.nodes[0].sendtoaddress(address1, 1)
134+
self.nodes[0].sendtoaddress(address4, 1)
128135
self.generate(self.nodes[0], 1)
129136

130137
# Load private key into wallet to generate a signed PSBT for the mock
@@ -133,14 +140,14 @@ def test_valid_signer(self):
133140
assert mock_wallet.getwalletinfo()['private_keys_enabled']
134141

135142
result = mock_wallet.importdescriptors([{
136-
"desc": "wpkh([00000001/84'/1'/0']tprv8ZgxMBicQKsPd7Uf69XL1XwhmjHopUGep8GuEiJDZmbQz6o58LninorQAfcKZWARbtRtfnLcJ5MQ2AtHcQJCCRUcMRvmDUjyEmNUWwx8UbK/0/*)#rweraev0",
143+
"desc": "tr([00000001/86'/1'/0']tprv8ZgxMBicQKsPd7Uf69XL1XwhmjHopUGep8GuEiJDZmbQz6o58LninorQAfcKZWARbtRtfnLcJ5MQ2AtHcQJCCRUcMRvmDUjyEmNUWwx8UbK/0/*)#0jtt2jc9",
137144
"timestamp": 0,
138145
"range": [0,1],
139146
"internal": False,
140147
"active": True
141148
},
142149
{
143-
"desc": "wpkh([00000001/84'/1'/0']tprv8ZgxMBicQKsPd7Uf69XL1XwhmjHopUGep8GuEiJDZmbQz6o58LninorQAfcKZWARbtRtfnLcJ5MQ2AtHcQJCCRUcMRvmDUjyEmNUWwx8UbK/1/*)#j6uzqvuh",
150+
"desc": "tr([00000001/86'/1'/0']tprv8ZgxMBicQKsPd7Uf69XL1XwhmjHopUGep8GuEiJDZmbQz6o58LninorQAfcKZWARbtRtfnLcJ5MQ2AtHcQJCCRUcMRvmDUjyEmNUWwx8UbK/1/*)#7xw2h8ga",
144151
"timestamp": 0,
145152
"range": [0, 0],
146153
"internal": True,

0 commit comments

Comments
 (0)