Changeset View
Changeset View
Standalone View
Standalone View
test/functional/zapwallettxes.py
Show All 15 Lines | |||||
""" | """ | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import (assert_equal, | from test_framework.util import (assert_equal, | ||||
assert_raises_jsonrpc, | assert_raises_jsonrpc, | ||||
) | ) | ||||
class ZapWalletTXesTest (BitcoinTestFramework): | class ZapWalletTXesTest (BitcoinTestFramework): | ||||
def set_test_params(self): | |||||
def __init__(self): | |||||
super().__init__() | |||||
self.setup_clean_chain = True | self.setup_clean_chain = True | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
def run_test(self): | def run_test(self): | ||||
self.log.info("Mining blocks...") | self.log.info("Mining blocks...") | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
self.sync_all() | self.sync_all() | ||||
self.nodes[1].generate(100) | self.nodes[1].generate(100) | ||||
Show All 9 Lines | def run_test(self): | ||||
txid2 = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 20) | txid2 = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 20) | ||||
# Confirmed and unconfirmed transactions are now in the wallet. | # Confirmed and unconfirmed transactions are now in the wallet. | ||||
assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | ||||
assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2) | assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2) | ||||
# Stop-start node0. Both confirmed and unconfirmed transactions remain in the wallet. | # Stop-start node0. Both confirmed and unconfirmed transactions remain in the wallet. | ||||
self.stop_node(0) | self.stop_node(0) | ||||
self.nodes[0] = self.start_node(0, self.options.tmpdir) | self.start_node(0) | ||||
assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | ||||
assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2) | assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2) | ||||
# Stop node0 and restart with zapwallettxes and persistmempool. The unconfirmed | # Stop node0 and restart with zapwallettxes and persistmempool. The unconfirmed | ||||
# transaction is zapped from the wallet, but is re-added when the mempool is reloaded. | # transaction is zapped from the wallet, but is re-added when the mempool is reloaded. | ||||
self.stop_node(0) | self.stop_node(0) | ||||
self.nodes[0] = self.start_node(0, self.options.tmpdir, [ | self.start_node(0, ["-persistmempool=1", "-zapwallettxes=2"]) | ||||
"-persistmempool=1", "-zapwallettxes=2"]) | |||||
assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | ||||
assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2) | assert_equal(self.nodes[0].gettransaction(txid2)['txid'], txid2) | ||||
# Stop node0 and restart with zapwallettxes, but not persistmempool. | # Stop node0 and restart with zapwallettxes, but not persistmempool. | ||||
# The unconfirmed transaction is zapped and is no longer in the wallet. | # The unconfirmed transaction is zapped and is no longer in the wallet. | ||||
self.stop_node(0) | self.stop_node(0) | ||||
self.nodes[0] = self.start_node( | self.start_node(0, ["-zapwallettxes=2"]) | ||||
0, self.options.tmpdir, ["-zapwallettxes=2"]) | |||||
# tx1 is still be available because it was confirmed | # tx1 is still be available because it was confirmed | ||||
assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | assert_equal(self.nodes[0].gettransaction(txid1)['txid'], txid1) | ||||
# This will raise an exception because the unconfirmed transaction has been zapped | # This will raise an exception because the unconfirmed transaction has been zapped | ||||
assert_raises_jsonrpc(-5, 'Invalid or non-wallet transaction id', | assert_raises_jsonrpc(-5, 'Invalid or non-wallet transaction id', | ||||
self.nodes[0].gettransaction, txid2) | self.nodes[0].gettransaction, txid2) | ||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
ZapWalletTXesTest().main() | ZapWalletTXesTest().main() |