Changeset View
Changeset View
Standalone View
Standalone View
test/functional/wallet_importprunedfunds.py
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
# Copyright (c) 2014-2016 The Bitcoin Core developers | # Copyright (c) 2014-2016 The Bitcoin Core developers | ||||
# Distributed under the MIT software license, see the accompanying | # Distributed under the MIT software license, see the accompanying | ||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | # file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
"""Test the importprunedfunds and removeprunedfunds RPCs.""" | """Test the importprunedfunds and removeprunedfunds RPCs.""" | ||||
from decimal import Decimal | from decimal import Decimal | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import assert_equal, assert_raises_rpc_error | from test_framework.util import assert_equal, assert_raises_rpc_error | ||||
class ImportPrunedFundsTest(BitcoinTestFramework): | class ImportPrunedFundsTest(BitcoinTestFramework): | ||||
def set_test_params(self): | def set_test_params(self): | ||||
self.setup_clean_chain = True | self.setup_clean_chain = True | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
self.extra_args = [['-deprecatedrpc=accounts']] * 2 | |||||
def run_test(self): | def run_test(self): | ||||
self.log.info("Mining blocks...") | self.log.info("Mining blocks...") | ||||
self.nodes[0].generate(101) | self.nodes[0].generate(101) | ||||
self.sync_all() | self.sync_all() | ||||
# address | # address | ||||
▲ Show 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | def run_test(self): | ||||
proof3 = self.nodes[0].gettxoutproof([txnid3]) | proof3 = self.nodes[0].gettxoutproof([txnid3]) | ||||
self.sync_all() | self.sync_all() | ||||
# Import with no affiliated address | # Import with no affiliated address | ||||
assert_raises_rpc_error( | assert_raises_rpc_error( | ||||
-5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1) | -5, "No addresses", self.nodes[1].importprunedfunds, rawtxn1, proof1) | ||||
balance1 = self.nodes[1].getbalance("", 0, True) | balance1 = self.nodes[1].getbalance() | ||||
assert_equal(balance1, Decimal(0)) | assert_equal(balance1, Decimal(0)) | ||||
# Import with affiliated address with no rescan | # Import with affiliated address with no rescan | ||||
self.nodes[1].importaddress(address2, "add2", False) | self.nodes[1].importaddress(address=address2, rescan=False) | ||||
self.nodes[1].importprunedfunds(rawtxn2, proof2) | self.nodes[1].importprunedfunds(rawtxn2, proof2) | ||||
balance2 = self.nodes[1].getbalance("add2", 0, True) | assert [tx for tx in self.nodes[1].listtransactions( | ||||
assert_equal(balance2, Decimal('0.05')) | include_watchonly=True) if tx['txid'] == txnid2] | ||||
# Import with private key with no rescan | # Import with private key with no rescan | ||||
self.nodes[1].importprivkey( | self.nodes[1].importprivkey(privkey=address3_privkey, rescan=False) | ||||
privkey=address3_privkey, label="add3", rescan=False) | |||||
self.nodes[1].importprunedfunds(rawtxn3, proof3) | self.nodes[1].importprunedfunds(rawtxn3, proof3) | ||||
balance3 = self.nodes[1].getbalance("add3", 0, False) | assert [tx for tx in self.nodes[1].listtransactions() if tx['txid'] | ||||
== txnid3] | |||||
balance3 = self.nodes[1].getbalance() | |||||
assert_equal(balance3, Decimal('0.025')) | assert_equal(balance3, Decimal('0.025')) | ||||
balance3 = self.nodes[1].getbalance("*", 0, True) | |||||
assert_equal(balance3, Decimal('0.075')) | |||||
# Addresses Test - after import | # Addresses Test - after import | ||||
address_info = self.nodes[1].getaddressinfo(address1) | address_info = self.nodes[1].getaddressinfo(address1) | ||||
assert_equal(address_info['iswatchonly'], False) | assert_equal(address_info['iswatchonly'], False) | ||||
assert_equal(address_info['ismine'], False) | assert_equal(address_info['ismine'], False) | ||||
address_info = self.nodes[1].getaddressinfo(address2) | address_info = self.nodes[1].getaddressinfo(address2) | ||||
assert_equal(address_info['iswatchonly'], True) | assert_equal(address_info['iswatchonly'], True) | ||||
assert_equal(address_info['ismine'], False) | assert_equal(address_info['ismine'], False) | ||||
address_info = self.nodes[1].getaddressinfo(address3) | address_info = self.nodes[1].getaddressinfo(address3) | ||||
assert_equal(address_info['iswatchonly'], False) | assert_equal(address_info['iswatchonly'], False) | ||||
assert_equal(address_info['ismine'], True) | assert_equal(address_info['ismine'], True) | ||||
# Remove transactions | # Remove transactions | ||||
assert_raises_rpc_error( | assert_raises_rpc_error( | ||||
-8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1) | -8, "Transaction does not exist in wallet.", self.nodes[1].removeprunedfunds, txnid1) | ||||
balance1 = self.nodes[1].getbalance("*", 0, True) | assert not [tx for tx in self.nodes[1].listtransactions( | ||||
assert_equal(balance1, Decimal('0.075')) | include_watchonly=True) if tx['txid'] == txnid1] | ||||
self.nodes[1].removeprunedfunds(txnid2) | self.nodes[1].removeprunedfunds(txnid2) | ||||
balance2 = self.nodes[1].getbalance("*", 0, True) | assert not [tx for tx in self.nodes[1].listtransactions( | ||||
assert_equal(balance2, Decimal('0.025')) | include_watchonly=True) if tx['txid'] == txnid2] | ||||
self.nodes[1].removeprunedfunds(txnid3) | self.nodes[1].removeprunedfunds(txnid3) | ||||
balance3 = self.nodes[1].getbalance("*", 0, True) | assert not [tx for tx in self.nodes[1].listtransactions( | ||||
assert_equal(balance3, Decimal('0.0')) | include_watchonly=True) if tx['txid'] == txnid3] | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
ImportPrunedFundsTest().main() | ImportPrunedFundsTest().main() |