Changeset View
Changeset View
Standalone View
Standalone View
qa/rpc-tests/importprunedfunds.py
Show All 10 Lines | class ImportPrunedFundsTest(BitcoinTestFramework): | ||||
def __init__(self): | def __init__(self): | ||||
super().__init__() | super().__init__() | ||||
self.setup_clean_chain = True | self.setup_clean_chain = True | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
def setup_network(self, split=False): | def setup_network(self, split=False): | ||||
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir) | self.nodes = start_nodes(self.num_nodes, self.options.tmpdir) | ||||
connect_nodes_bi(self.nodes,0,1) | connect_nodes_bi(self.nodes, 0, 1) | ||||
self.is_network_split=False | self.is_network_split = False | ||||
self.sync_all() | self.sync_all() | ||||
def run_test(self): | def run_test(self): | ||||
print("Mining blocks...") | print("Mining blocks...") | ||||
self.nodes[0].generate(101) | self.nodes[0].generate(101) | ||||
self.sync_all() | self.sync_all() | ||||
# address | # address | ||||
address1 = self.nodes[0].getnewaddress() | address1 = self.nodes[0].getnewaddress() | ||||
# pubkey | # pubkey | ||||
address2 = self.nodes[0].getnewaddress() | address2 = self.nodes[0].getnewaddress() | ||||
address2_pubkey = self.nodes[0].validateaddress(address2)['pubkey'] # Using pubkey | address2_pubkey = self.nodes[0].validateaddress( | ||||
address2)['pubkey'] # Using pubkey | |||||
# privkey | # privkey | ||||
address3 = self.nodes[0].getnewaddress() | address3 = self.nodes[0].getnewaddress() | ||||
address3_privkey = self.nodes[0].dumpprivkey(address3) # Using privkey | address3_privkey = self.nodes[0].dumpprivkey( | ||||
address3) # Using privkey | |||||
#Check only one address | # Check only one address | ||||
address_info = self.nodes[0].validateaddress(address1) | address_info = self.nodes[0].validateaddress(address1) | ||||
assert_equal(address_info['ismine'], True) | assert_equal(address_info['ismine'], True) | ||||
self.sync_all() | self.sync_all() | ||||
#Node 1 sync test | # Node 1 sync test | ||||
assert_equal(self.nodes[1].getblockcount(),101) | assert_equal(self.nodes[1].getblockcount(), 101) | ||||
#Address Test - before import | # Address Test - before import | ||||
address_info = self.nodes[1].validateaddress(address1) | address_info = self.nodes[1].validateaddress(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].validateaddress(address2) | address_info = self.nodes[1].validateaddress(address2) | ||||
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].validateaddress(address3) | address_info = self.nodes[1].validateaddress(address3) | ||||
assert_equal(address_info['iswatchonly'], False) | assert_equal(address_info['iswatchonly'], False) | ||||
assert_equal(address_info['ismine'], False) | assert_equal(address_info['ismine'], False) | ||||
#Send funds to self | # Send funds to self | ||||
txnid1 = self.nodes[0].sendtoaddress(address1, 0.1) | txnid1 = self.nodes[0].sendtoaddress(address1, 0.1) | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
rawtxn1 = self.nodes[0].gettransaction(txnid1)['hex'] | rawtxn1 = self.nodes[0].gettransaction(txnid1)['hex'] | ||||
proof1 = self.nodes[0].gettxoutproof([txnid1]) | proof1 = self.nodes[0].gettxoutproof([txnid1]) | ||||
txnid2 = self.nodes[0].sendtoaddress(address2, 0.05) | txnid2 = self.nodes[0].sendtoaddress(address2, 0.05) | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
rawtxn2 = self.nodes[0].gettransaction(txnid2)['hex'] | rawtxn2 = self.nodes[0].gettransaction(txnid2)['hex'] | ||||
proof2 = self.nodes[0].gettxoutproof([txnid2]) | proof2 = self.nodes[0].gettxoutproof([txnid2]) | ||||
txnid3 = self.nodes[0].sendtoaddress(address3, 0.025) | txnid3 = self.nodes[0].sendtoaddress(address3, 0.025) | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
rawtxn3 = self.nodes[0].gettransaction(txnid3)['hex'] | rawtxn3 = self.nodes[0].gettransaction(txnid3)['hex'] | ||||
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 | ||||
try: | try: | ||||
self.nodes[1].importprunedfunds(rawtxn1, proof1) | self.nodes[1].importprunedfunds(rawtxn1, proof1) | ||||
except JSONRPCException as e: | except JSONRPCException as e: | ||||
assert('No addresses' in e.error['message']) | assert('No addresses' in e.error['message']) | ||||
else: | else: | ||||
assert(False) | assert(False) | ||||
balance1 = self.nodes[1].getbalance("", 0, True) | balance1 = self.nodes[1].getbalance("", 0, True) | ||||
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(address2, "add2", False) | ||||
result2 = self.nodes[1].importprunedfunds(rawtxn2, proof2) | result2 = self.nodes[1].importprunedfunds(rawtxn2, proof2) | ||||
balance2 = self.nodes[1].getbalance("add2", 0, True) | balance2 = self.nodes[1].getbalance("add2", 0, True) | ||||
assert_equal(balance2, Decimal('0.05')) | assert_equal(balance2, Decimal('0.05')) | ||||
#Import with private key with no rescan | # Import with private key with no rescan | ||||
self.nodes[1].importprivkey(address3_privkey, "add3", False) | self.nodes[1].importprivkey(address3_privkey, "add3", False) | ||||
result3 = self.nodes[1].importprunedfunds(rawtxn3, proof3) | result3 = self.nodes[1].importprunedfunds(rawtxn3, proof3) | ||||
balance3 = self.nodes[1].getbalance("add3", 0, False) | balance3 = self.nodes[1].getbalance("add3", 0, False) | ||||
assert_equal(balance3, Decimal('0.025')) | assert_equal(balance3, Decimal('0.025')) | ||||
balance3 = self.nodes[1].getbalance("*", 0, True) | balance3 = self.nodes[1].getbalance("*", 0, True) | ||||
assert_equal(balance3, Decimal('0.075')) | assert_equal(balance3, Decimal('0.075')) | ||||
#Addresses Test - after import | # Addresses Test - after import | ||||
address_info = self.nodes[1].validateaddress(address1) | address_info = self.nodes[1].validateaddress(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].validateaddress(address2) | address_info = self.nodes[1].validateaddress(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].validateaddress(address3) | address_info = self.nodes[1].validateaddress(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 | ||||
try: | try: | ||||
self.nodes[1].removeprunedfunds(txnid1) | self.nodes[1].removeprunedfunds(txnid1) | ||||
except JSONRPCException as e: | except JSONRPCException as e: | ||||
assert('does not exist' in e.error['message']) | assert('does not exist' in e.error['message']) | ||||
else: | else: | ||||
assert(False) | assert(False) | ||||
balance1 = self.nodes[1].getbalance("*", 0, True) | balance1 = self.nodes[1].getbalance("*", 0, True) | ||||
Show All 12 Lines |