2 # Copyright (c) 2014-2016 The Bitcoin Core developers
3 # Distributed under the MIT software license, see the accompanying
4 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 """Test the importprunedfunds and removeprunedfunds RPCs."""
6 from test_framework
.test_framework
import BitcoinTestFramework
7 from test_framework
.util
import *
10 class ImportPrunedFundsTest(BitcoinTestFramework
):
14 self
.setup_clean_chain
= True
18 self
.log
.info("Mining blocks...")
19 self
.nodes
[0].generate(101)
24 address1
= self
.nodes
[0].getnewaddress()
26 address2
= self
.nodes
[0].getnewaddress()
27 address2_pubkey
= self
.nodes
[0].validateaddress(address2
)['pubkey'] # Using pubkey
29 address3
= self
.nodes
[0].getnewaddress()
30 address3_privkey
= self
.nodes
[0].dumpprivkey(address3
) # Using privkey
32 #Check only one address
33 address_info
= self
.nodes
[0].validateaddress(address1
)
34 assert_equal(address_info
['ismine'], True)
39 assert_equal(self
.nodes
[1].getblockcount(),101)
41 #Address Test - before import
42 address_info
= self
.nodes
[1].validateaddress(address1
)
43 assert_equal(address_info
['iswatchonly'], False)
44 assert_equal(address_info
['ismine'], False)
46 address_info
= self
.nodes
[1].validateaddress(address2
)
47 assert_equal(address_info
['iswatchonly'], False)
48 assert_equal(address_info
['ismine'], False)
50 address_info
= self
.nodes
[1].validateaddress(address3
)
51 assert_equal(address_info
['iswatchonly'], False)
52 assert_equal(address_info
['ismine'], False)
55 txnid1
= self
.nodes
[0].sendtoaddress(address1
, 0.1)
56 self
.nodes
[0].generate(1)
57 rawtxn1
= self
.nodes
[0].gettransaction(txnid1
)['hex']
58 proof1
= self
.nodes
[0].gettxoutproof([txnid1
])
60 txnid2
= self
.nodes
[0].sendtoaddress(address2
, 0.05)
61 self
.nodes
[0].generate(1)
62 rawtxn2
= self
.nodes
[0].gettransaction(txnid2
)['hex']
63 proof2
= self
.nodes
[0].gettxoutproof([txnid2
])
65 txnid3
= self
.nodes
[0].sendtoaddress(address3
, 0.025)
66 self
.nodes
[0].generate(1)
67 rawtxn3
= self
.nodes
[0].gettransaction(txnid3
)['hex']
68 proof3
= self
.nodes
[0].gettxoutproof([txnid3
])
72 #Import with no affiliated address
73 assert_raises_jsonrpc(-5, "No addresses", self
.nodes
[1].importprunedfunds
, rawtxn1
, proof1
)
75 balance1
= self
.nodes
[1].getbalance("", 0, True)
76 assert_equal(balance1
, Decimal(0))
78 #Import with affiliated address with no rescan
79 self
.nodes
[1].importaddress(address2
, "add2", False)
80 result2
= self
.nodes
[1].importprunedfunds(rawtxn2
, proof2
)
81 balance2
= self
.nodes
[1].getbalance("add2", 0, True)
82 assert_equal(balance2
, Decimal('0.05'))
84 #Import with private key with no rescan
85 self
.nodes
[1].importprivkey(address3_privkey
, "add3", False)
86 result3
= self
.nodes
[1].importprunedfunds(rawtxn3
, proof3
)
87 balance3
= self
.nodes
[1].getbalance("add3", 0, False)
88 assert_equal(balance3
, Decimal('0.025'))
89 balance3
= self
.nodes
[1].getbalance("*", 0, True)
90 assert_equal(balance3
, Decimal('0.075'))
92 #Addresses Test - after import
93 address_info
= self
.nodes
[1].validateaddress(address1
)
94 assert_equal(address_info
['iswatchonly'], False)
95 assert_equal(address_info
['ismine'], False)
96 address_info
= self
.nodes
[1].validateaddress(address2
)
97 assert_equal(address_info
['iswatchonly'], True)
98 assert_equal(address_info
['ismine'], False)
99 address_info
= self
.nodes
[1].validateaddress(address3
)
100 assert_equal(address_info
['iswatchonly'], False)
101 assert_equal(address_info
['ismine'], True)
104 assert_raises_jsonrpc(-8, "Transaction does not exist in wallet.", self
.nodes
[1].removeprunedfunds
, txnid1
)
106 balance1
= self
.nodes
[1].getbalance("*", 0, True)
107 assert_equal(balance1
, Decimal('0.075'))
109 self
.nodes
[1].removeprunedfunds(txnid2
)
110 balance2
= self
.nodes
[1].getbalance("*", 0, True)
111 assert_equal(balance2
, Decimal('0.025'))
113 self
.nodes
[1].removeprunedfunds(txnid3
)
114 balance3
= self
.nodes
[1].getbalance("*", 0, True)
115 assert_equal(balance3
, Decimal('0.0'))
117 if __name__
== '__main__':
118 ImportPrunedFundsTest().main()