|
| 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() |
0 commit comments