Skip to content

Commit 2bcf2b5

Browse files
committed
Test sethdseed
1 parent b5ba01a commit 2bcf2b5

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

test/functional/wallet_hd.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from test_framework.util import (
1212
assert_equal,
1313
connect_nodes_bi,
14+
assert_raises_rpc_error
1415
)
1516

1617

@@ -120,5 +121,39 @@ def run_test(self):
120121

121122
assert_equal(keypath[0:7], "m/0'/1'")
122123

124+
# Generate a new HD seed on node 1 and make sure it is set
125+
orig_masterkeyid = self.nodes[1].getwalletinfo()['hdmasterkeyid']
126+
self.nodes[1].sethdseed()
127+
new_masterkeyid = self.nodes[1].getwalletinfo()['hdmasterkeyid']
128+
assert orig_masterkeyid != new_masterkeyid
129+
addr = self.nodes[1].getnewaddress()
130+
assert_equal(self.nodes[1].getaddressinfo(addr)['hdkeypath'], 'm/0\'/0\'/0\'') # Make sure the new address is the first from the keypool
131+
self.nodes[1].keypoolrefill(1) # Fill keypool with 1 key
132+
133+
# Set a new HD seed on node 1 without flushing the keypool
134+
new_seed = self.nodes[0].dumpprivkey(self.nodes[0].getnewaddress())
135+
orig_masterkeyid = new_masterkeyid
136+
self.nodes[1].sethdseed(False, new_seed)
137+
new_masterkeyid = self.nodes[1].getwalletinfo()['hdmasterkeyid']
138+
assert orig_masterkeyid != new_masterkeyid
139+
addr = self.nodes[1].getnewaddress()
140+
assert_equal(orig_masterkeyid, self.nodes[1].getaddressinfo(addr)['hdmasterkeyid'])
141+
assert_equal(self.nodes[1].getaddressinfo(addr)['hdkeypath'], 'm/0\'/0\'/1\'') # Make sure the new address continues previous keypool
142+
143+
# Check that the next address is from the new seed
144+
self.nodes[1].keypoolrefill(1)
145+
next_addr = self.nodes[1].getnewaddress()
146+
assert_equal(new_masterkeyid, self.nodes[1].getaddressinfo(next_addr)['hdmasterkeyid'])
147+
assert_equal(self.nodes[1].getaddressinfo(next_addr)['hdkeypath'], 'm/0\'/0\'/0\'') # Make sure the new address is not from previous keypool
148+
assert next_addr != addr
149+
150+
# Sethdseed parameter validity
151+
assert_raises_rpc_error(-1, 'sethdseed', self.nodes[0].sethdseed, False, new_seed, 0)
152+
assert_raises_rpc_error(-5, "Invalid private key", self.nodes[1].sethdseed, False, "not_wif")
153+
assert_raises_rpc_error(-1, "JSON value is not a boolean as expected", self.nodes[1].sethdseed, "Not_bool")
154+
assert_raises_rpc_error(-1, "JSON value is not a string as expected", self.nodes[1].sethdseed, False, True)
155+
assert_raises_rpc_error(-5, "Already have this key", self.nodes[1].sethdseed, False, new_seed)
156+
assert_raises_rpc_error(-5, "Already have this key", self.nodes[1].sethdseed, False, self.nodes[1].dumpprivkey(self.nodes[1].getnewaddress()))
157+
123158
if __name__ == '__main__':
124159
WalletHDTest().main ()

0 commit comments

Comments
 (0)