Skip to content

Commit fe55859

Browse files
committed
Add functional test for scantxoutset
- changed the addresses and keys to fit PIVX requirments - changed the first non HD unspent outputs test from 0.002 to 0.007, because PIVX does not have P2SH_SEGWIT and BECH32 addresses, only LEGACY are tested here
1 parent 4452207 commit fe55859

2 files changed

Lines changed: 95 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#!/usr/bin/env python3
2+
# Copyright (c) 2018 The Bitcoin Core developers
3+
# Copyright (c) 2022 The PIVX developers
4+
# Distributed under the MIT software license, see the accompanying
5+
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
6+
"""Test the scantxoutset rpc call."""
7+
from test_framework.test_framework import PivxTestFramework
8+
from test_framework.util import assert_equal
9+
10+
from decimal import Decimal
11+
import shutil
12+
import os
13+
14+
class ScantxoutsetTest(PivxTestFramework):
15+
def set_test_params(self):
16+
self.num_nodes = 1
17+
self.setup_clean_chain = True
18+
19+
def skip_test_if_missing_module(self):
20+
self.skip_if_no_wallet()
21+
22+
def run_test(self):
23+
self.log.info("Mining blocks...")
24+
self.nodes[0].generate(110)
25+
26+
addr1 = self.nodes[0].getnewaddress("")
27+
pubk1 = self.nodes[0].validateaddress(addr1)['pubkey']
28+
addr2 = self.nodes[0].getnewaddress("")
29+
pubk2 = self.nodes[0].validateaddress(addr2)['pubkey']
30+
addr3 = self.nodes[0].getnewaddress("")
31+
pubk3 = self.nodes[0].validateaddress(addr3)['pubkey']
32+
self.nodes[0].sendtoaddress(addr1, 0.001)
33+
self.nodes[0].sendtoaddress(addr2, 0.002)
34+
self.nodes[0].sendtoaddress(addr3, 0.004)
35+
36+
#send to child keys of DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V
37+
self.nodes[0].sendtoaddress("y1kNaESNDkcshcLsFJ53XYsJi21N1qjTwv", 0.008) # (m/0'/0'/0')
38+
self.nodes[0].sendtoaddress("xzHN1U7N3mzrksMMZ8jpMtm1Qc2BzMZhQc", 0.016) # (m/0'/0'/1')
39+
self.nodes[0].sendtoaddress("yJaWjJzAEsypAV4JkLRmpjrtqQ3X8NfXiW", 0.032) # (m/0'/0'/1500')
40+
self.nodes[0].sendtoaddress("y6u2zs2CfRJhu69fed1AuiR1uK6DGM3Jzo", 0.064) # (m/0'/0'/0)
41+
self.nodes[0].sendtoaddress("y3vZeiqaj6q8bRUkR4F2ojrdjDnF5vcA2x", 0.128) # (m/0'/0'/1)
42+
self.nodes[0].sendtoaddress("y27mmfSF2X81Ymv8td9jnovCuo985wduP4", 0.256) # (m/0'/0'/1500)
43+
self.nodes[0].sendtoaddress("xzbsq3Cf4fc7QfiMt9Liy4gsLvPuvSTqNf", 0.512) # (m/1/1/0')
44+
self.nodes[0].sendtoaddress("xwFDPMkJYwmFUw8SQHEGwA1S6AbtkCz2Vn", 1.024) # (m/1/1/1')
45+
self.nodes[0].sendtoaddress("y5MzBDMpTRzKGSFSZcJRg43yQkHHaNqpvZ", 2.048) # (m/1/1/1500')
46+
self.nodes[0].sendtoaddress("yA8NNWw22P3Rtf4rWgLj2naYbw26nu8X4k", 4.096) # (m/1/1/0)
47+
self.nodes[0].sendtoaddress("yEH1WA5CK49MzU2saBMKR1YvWBVguZmATi", 8.192) # (m/1/1/1)
48+
self.nodes[0].sendtoaddress("y5s2Rr6Earyz52Cq6qa2366oMHjA4ytdk3", 16.384) # (m/1/1/1500)
49+
50+
51+
self.nodes[0].generate(1)
52+
53+
self.log.info("Stop node, remove wallet, mine again some blocks...")
54+
self.stop_node(0)
55+
shutil.rmtree(os.path.join(self.nodes[0].datadir, "regtest", 'wallets'))
56+
self.start_node(0)
57+
self.nodes[0].generate(110)
58+
59+
self.restart_node(0, ['-nowallet'])
60+
self.log.info("Test if we have found the non HD unspent outputs.")
61+
assert_equal(self.nodes[0].scantxoutset("start", [ "pkh(" + pubk1 + ")", "pkh(" + pubk2 + ")", "pkh(" + pubk3 + ")"])['total_amount'], Decimal("0.007"))
62+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(" + pubk1 + ")", "combo(" + pubk2 + ")", "combo(" + pubk3 + ")"])['total_amount'], Decimal("0.007"))
63+
assert_equal(self.nodes[0].scantxoutset("start", [ "addr(" + addr1 + ")", "addr(" + addr2 + ")", "addr(" + addr3 + ")"])['total_amount'], Decimal("0.007"))
64+
assert_equal(self.nodes[0].scantxoutset("start", [ "addr(" + addr1 + ")", "addr(" + addr2 + ")", "combo(" + pubk3 + ")"])['total_amount'], Decimal("0.007"))
65+
66+
self.log.info("Test extended key derivation.")
67+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0'/0h/0h)"])['total_amount'], Decimal("0.008"))
68+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0'/0'/1h)"])['total_amount'], Decimal("0.016"))
69+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0h/0'/1500')"])['total_amount'], Decimal("0.032"))
70+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0h/0h/0)"])['total_amount'], Decimal("0.064"))
71+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0'/0h/1)"])['total_amount'], Decimal("0.128"))
72+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0h/0'/1500)"])['total_amount'], Decimal("0.256"))
73+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0'/0h/*h)", "range": 1499}])['total_amount'], Decimal("0.024"))
74+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0'/0'/*h)", "range": 1500}])['total_amount'], Decimal("0.056"))
75+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0h/0'/*)", "range": 1499}])['total_amount'], Decimal("0.192"))
76+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/0'/0h/*)", "range": 1500}])['total_amount'], Decimal("0.448"))
77+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/0')"])['total_amount'], Decimal("0.512"))
78+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/1')"])['total_amount'], Decimal("1.024"))
79+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/1500h)"])['total_amount'], Decimal("2.048"))
80+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/0)"])['total_amount'], Decimal("4.096"))
81+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/1)"])['total_amount'], Decimal("8.192"))
82+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/1500)"])['total_amount'], Decimal("16.384"))
83+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKVrRjogj3bNiLD8T7yviZvdFiEmRZcQktS3TuQ9au4Md7YzJgc7RZ4P4fkj9s5WMk5scoiNRQM2pUq7x9XGiwH7YDSFiJJJaGrCCro2yXUob2k/1/1/0)"])['total_amount'], Decimal("4.096"))
84+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKVrRjogj3bNiLD8T7yviZvdFiEmRZcQktS3TuQ9au4Md7YzJgc7RZ4P4fkj9s5WMk5scoiNRQM2pUq7x9XGiwH7YDSFiJJJaGrCCro2yXUob2k/1/1/1)"])['total_amount'], Decimal("8.192"))
85+
assert_equal(self.nodes[0].scantxoutset("start", [ "combo(DRKVrRjogj3bNiLD8T7yviZvdFiEmRZcQktS3TuQ9au4Md7YzJgc7RZ4P4fkj9s5WMk5scoiNRQM2pUq7x9XGiwH7YDSFiJJJaGrCCro2yXUob2k/1/1/1500)"])['total_amount'], Decimal("16.384"))
86+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/*')", "range": 1499}])['total_amount'], Decimal("1.536"))
87+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/*')", "range": 1500}])['total_amount'], Decimal("3.584"))
88+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/*)", "range": 1499}])['total_amount'], Decimal("12.288"))
89+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKPuUWy7gEYo13wzMa8dntopw4ZJ7rKddnhnhi3f9tGkaDNpKSSPqMVwxqgTnZhrExKAUSZSo8uKnzcEkjFae1udSMQcvecJbLdmi9PHCETZy7V/1/1/*)", "range": 1500}])['total_amount'], Decimal("28.672"))
90+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKVrRjogj3bNiLD8T7yviZvdFiEmRZcQktS3TuQ9au4Md7YzJgc7RZ4P4fkj9s5WMk5scoiNRQM2pUq7x9XGiwH7YDSFiJJJaGrCCro2yXUob2k/1/1/*)", "range": 1499}])['total_amount'], Decimal("12.288"))
91+
assert_equal(self.nodes[0].scantxoutset("start", [ {"desc": "combo(DRKVrRjogj3bNiLD8T7yviZvdFiEmRZcQktS3TuQ9au4Md7YzJgc7RZ4P4fkj9s5WMk5scoiNRQM2pUq7x9XGiwH7YDSFiJJJaGrCCro2yXUob2k/1/1/*)", "range": 1500}])['total_amount'], Decimal("28.672"))
92+
93+
if __name__ == '__main__':
94+
ScantxoutsetTest().main()

test/functional/test_runner.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
'wallet_import_rescan.py', # ~ 204 sec
7474
'p2p_invalid_block.py', # ~ 213 sec
7575
'feature_reindex.py', # ~ 205 sec
76+
'rpc_scantxoutset.py',
7677
'feature_logging.py', # ~ 195 sec
7778
'wallet_multiwallet.py', # ~ 190 sec
7879
'rpc_bind.py --ipv6', # ~ 191 sec

0 commit comments

Comments
 (0)