Skip to content

Commit 4f33dbd

Browse files
committed
test: rpc_createmultisig, decouple 'test_mixing_uncompressed_and_compressed_keys'
And also, simplified the test a bit by re-using the already existing 'wallet_multi' (instead of creating a new one). Plus, removed the 'is_bdb_compiled()' calls which were there basically to check if the test has the wallet compiled or not.
1 parent 25a8170 commit 4f33dbd

File tree

1 file changed

+36
-38
lines changed

1 file changed

+36
-38
lines changed

test/functional/rpc_createmultisig.py

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -61,45 +61,8 @@ def run_test(self):
6161
for nsigs in [2, 3]:
6262
for output_type in ["bech32", "p2sh-segwit", "legacy"]:
6363
self.do_multisig(nkeys, nsigs, output_type, wallet_multi)
64-
if wallet_multi is not None:
65-
wallet_multi.unloadwallet()
66-
67-
# Test mixed compressed and uncompressed pubkeys
68-
self.log.info('Mixed compressed and uncompressed multisigs are not allowed')
69-
pk0, pk1, pk2 = [getnewdestination('bech32')[0].hex() for _ in range(3)]
70-
71-
# decompress pk2
72-
pk_obj = ECPubKey()
73-
pk_obj.set(bytes.fromhex(pk2))
74-
pk_obj.compressed = False
75-
pk2 = pk_obj.get_bytes().hex()
76-
77-
if self.is_bdb_compiled():
78-
node0.createwallet(wallet_name='wmulti0', disable_private_keys=True)
79-
wmulti0 = node0.get_wallet_rpc('wmulti0')
80-
81-
# Check all permutations of keys because order matters apparently
82-
for keys in itertools.permutations([pk0, pk1, pk2]):
83-
# Results should be the same as this legacy one
84-
legacy_addr = node0.createmultisig(2, keys, 'legacy')['address']
85-
86-
if self.is_bdb_compiled():
87-
result = wmulti0.addmultisigaddress(2, keys, '', 'legacy')
88-
assert_equal(legacy_addr, result['address'])
89-
assert 'warnings' not in result
90-
91-
# Generate addresses with the segwit types. These should all make legacy addresses
92-
err_msg = ["Unable to make chosen address type, please ensure no uncompressed public keys are present."]
9364

94-
for addr_type in ['bech32', 'p2sh-segwit']:
95-
result = self.nodes[0].createmultisig(nrequired=2, keys=keys, address_type=addr_type)
96-
assert_equal(legacy_addr, result['address'])
97-
assert_equal(result['warnings'], err_msg)
98-
99-
if self.is_bdb_compiled():
100-
result = wmulti0.addmultisigaddress(nrequired=2, keys=keys, address_type=addr_type)
101-
assert_equal(legacy_addr, result['address'])
102-
assert_equal(result['warnings'], err_msg)
65+
self.test_mixing_uncompressed_and_compressed_keys(node0, wallet_multi)
10366

10467
self.log.info('Testing sortedmulti descriptors with BIP 67 test vectors')
10568
with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data/rpc_bip67.json'), encoding='utf-8') as f:
@@ -217,6 +180,41 @@ def do_multisig(self, nkeys, nsigs, output_type, wallet_multi):
217180
txinfo = node0.getrawtransaction(tx, True, blk)
218181
self.log.info("n/m=%d/%d %s size=%d vsize=%d weight=%d" % (nsigs, nkeys, output_type, txinfo["size"], txinfo["vsize"], txinfo["weight"]))
219182

183+
def test_mixing_uncompressed_and_compressed_keys(self, node, wallet_multi):
184+
self.log.info('Mixed compressed and uncompressed multisigs are not allowed')
185+
pk0, pk1, pk2 = [getnewdestination('bech32')[0].hex() for _ in range(3)]
186+
187+
# decompress pk2
188+
pk_obj = ECPubKey()
189+
pk_obj.set(bytes.fromhex(pk2))
190+
pk_obj.compressed = False
191+
pk2 = pk_obj.get_bytes().hex()
192+
193+
# Check all permutations of keys because order matters apparently
194+
for keys in itertools.permutations([pk0, pk1, pk2]):
195+
# Results should be the same as this legacy one
196+
legacy_addr = node.createmultisig(2, keys, 'legacy')['address']
197+
198+
if wallet_multi is not None:
199+
# 'addmultisigaddress' should return the same address
200+
result = wallet_multi.addmultisigaddress(2, keys, '', 'legacy')
201+
assert_equal(legacy_addr, result['address'])
202+
assert 'warnings' not in result
203+
204+
# Generate addresses with the segwit types. These should all make legacy addresses
205+
err_msg = ["Unable to make chosen address type, please ensure no uncompressed public keys are present."]
206+
207+
for addr_type in ['bech32', 'p2sh-segwit']:
208+
result = self.nodes[0].createmultisig(nrequired=2, keys=keys, address_type=addr_type)
209+
assert_equal(legacy_addr, result['address'])
210+
assert_equal(result['warnings'], err_msg)
211+
212+
if wallet_multi is not None:
213+
result = wallet_multi.addmultisigaddress(nrequired=2, keys=keys, address_type=addr_type)
214+
assert_equal(legacy_addr, result['address'])
215+
assert_equal(result['warnings'], err_msg)
216+
217+
220218

221219
if __name__ == '__main__':
222220
RpcCreateMultiSigTest().main()

0 commit comments

Comments
 (0)