Use cached sprout addresses rather than funding
This commit is contained in:
parent
1951a1fc46
commit
1c2a406f32
|
@ -52,7 +52,7 @@ class TurnstileTest (BitcoinTestFramework):
|
|||
def __init__(self):
|
||||
super().__init__()
|
||||
self.num_nodes = 3
|
||||
self.cache_behavior = 'clean'
|
||||
self.cache_behavior = 'sprout'
|
||||
|
||||
def setup_network(self, split=False):
|
||||
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[BASE_ARGS] * self.num_nodes)
|
||||
|
@ -86,39 +86,38 @@ class TurnstileTest (BitcoinTestFramework):
|
|||
|
||||
def run_test(self):
|
||||
# Sanity-check the test harness
|
||||
self.nodes[0].generate(101)
|
||||
assert_equal(self.nodes[0].getblockcount(), 101)
|
||||
assert_equal(self.nodes[0].getblockcount(), 200)
|
||||
self.sync_all()
|
||||
|
||||
# Node 0 shields some funds
|
||||
dest_addr = self.nodes[0].z_getnewaddress(POOL_NAME.lower())
|
||||
taddr0 = get_coinbase_address(self.nodes[0])
|
||||
if (POOL_NAME == "SPROUT"):
|
||||
myopid = self.nodes[0].z_shieldcoinbase(taddr0, dest_addr, 0, 1)['opid']
|
||||
dest_addr = self.nodes[0].listaddresses()[0]['sprout']['addresses'][0]
|
||||
elif (POOL_NAME == "SAPLING"):
|
||||
# Node 0 shields some funds
|
||||
dest_addr = self.nodes[0].z_getnewaddress('sapling')
|
||||
recipients = []
|
||||
recipients.append({"address": dest_addr, "amount": Decimal('10')})
|
||||
recipients.append({"address": dest_addr, "amount": Decimal('50')})
|
||||
myopid = self.nodes[0].z_sendmany(taddr0, recipients, 1, 0)
|
||||
wait_and_assert_operationid_status(self.nodes[0], myopid)
|
||||
else:
|
||||
fail("Unrecognized pool name: " + POOL_NAME)
|
||||
wait_and_assert_operationid_status(self.nodes[0], myopid)
|
||||
self.sync_all()
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
assert_equal(self.nodes[0].z_getbalance(dest_addr), Decimal('10'))
|
||||
assert_equal(self.nodes[0].z_getbalance(dest_addr), Decimal('50'))
|
||||
|
||||
# Verify size of shielded pool
|
||||
self.assert_pool_balance(self.nodes[0], POOL_NAME.lower(), Decimal('10'))
|
||||
self.assert_pool_balance(self.nodes[1], POOL_NAME.lower(), Decimal('10'))
|
||||
self.assert_pool_balance(self.nodes[2], POOL_NAME.lower(), Decimal('10'))
|
||||
self.assert_pool_balance(self.nodes[0], POOL_NAME.lower(), Decimal('200'))
|
||||
self.assert_pool_balance(self.nodes[1], POOL_NAME.lower(), Decimal('200'))
|
||||
self.assert_pool_balance(self.nodes[2], POOL_NAME.lower(), Decimal('200'))
|
||||
|
||||
# Relaunch node 0 with in-memory size of value pools set to zero.
|
||||
self.restart_and_sync_node(0, TURNSTILE_ARGS)
|
||||
|
||||
# Verify size of shielded pool
|
||||
self.assert_pool_balance(self.nodes[0], POOL_NAME.lower(), Decimal('0'))
|
||||
self.assert_pool_balance(self.nodes[1], POOL_NAME.lower(), Decimal('10'))
|
||||
self.assert_pool_balance(self.nodes[2], POOL_NAME.lower(), Decimal('10'))
|
||||
self.assert_pool_balance(self.nodes[1], POOL_NAME.lower(), Decimal('200'))
|
||||
self.assert_pool_balance(self.nodes[2], POOL_NAME.lower(), Decimal('200'))
|
||||
|
||||
# Node 0 creates an unshielding transaction
|
||||
recipients = []
|
||||
|
@ -170,8 +169,8 @@ class TurnstileTest (BitcoinTestFramework):
|
|||
|
||||
# Verify size of shielded pool
|
||||
self.assert_pool_balance(self.nodes[0], POOL_NAME.lower(), Decimal('0'))
|
||||
self.assert_pool_balance(self.nodes[1], POOL_NAME.lower(), Decimal('9'))
|
||||
self.assert_pool_balance(self.nodes[2], POOL_NAME.lower(), Decimal('9'))
|
||||
self.assert_pool_balance(self.nodes[1], POOL_NAME.lower(), Decimal('199'))
|
||||
self.assert_pool_balance(self.nodes[2], POOL_NAME.lower(), Decimal('199'))
|
||||
|
||||
# Stop node 0 and check logs to verify the block was rejected as a turnstile violation
|
||||
string_to_find1 = "ConnectBlock(): turnstile violation in " + POOL_NAME.capitalize() + " shielded value pool"
|
||||
|
|
|
@ -19,60 +19,29 @@ from decimal import Decimal
|
|||
|
||||
# Test wallet z_listunspent behaviour across network upgrades
|
||||
class WalletListNotes(BitcoinTestFramework):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.cache_behavior = 'sprout'
|
||||
|
||||
def setup_nodes(self):
|
||||
return start_nodes(4, self.options.tmpdir, [[
|
||||
nuparams(NU5_BRANCH_ID, 215),
|
||||
'-allowdeprecated=z_getnewaddress',
|
||||
'-allowdeprecated=z_getbalance',
|
||||
'-allowdeprecated=z_gettotalbalance',
|
||||
]] * 4)
|
||||
|
||||
def run_test(self):
|
||||
# Current height = 200 -> Sapling
|
||||
assert_equal(200, self.nodes[0].getblockcount())
|
||||
sproutzaddr = self.nodes[0].z_getnewaddress('sprout')
|
||||
|
||||
# we've got lots of coinbase (taddr) but no shielded funds yet
|
||||
assert_equal(0, Decimal(self.nodes[0].z_gettotalbalance()['private']))
|
||||
sproutzaddr = self.nodes[0].listaddresses()[0]['sprout']['addresses'][0]
|
||||
receive_amount_1 = self.nodes[0].z_getbalance(sproutzaddr)
|
||||
|
||||
# Set current height to 201
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
assert_equal(201, self.nodes[0].getblockcount())
|
||||
|
||||
# Shield one coinbase output
|
||||
receive_amount_1 = Decimal('10.0') - DEFAULT_FEE
|
||||
result = self.nodes[0].z_shieldcoinbase('*', sproutzaddr, DEFAULT_FEE, 1)
|
||||
txid_1 = wait_and_assert_operationid_status(self.nodes[0], result['opid'])
|
||||
self.sync_all()
|
||||
|
||||
# No funds (with (default) one or more confirmations) in sproutzaddr yet
|
||||
assert_equal(0, len(self.nodes[0].z_listunspent()))
|
||||
assert_equal(0, len(self.nodes[0].z_listunspent(1)))
|
||||
|
||||
# no private balance because no confirmations yet
|
||||
assert_equal(0, Decimal(self.nodes[0].z_gettotalbalance()['private']))
|
||||
|
||||
# list private unspent, this time allowing 0 confirmations
|
||||
unspent_cb = self.nodes[0].z_listunspent(0)
|
||||
assert_equal(1, len(unspent_cb))
|
||||
assert_equal(False, unspent_cb[0]['change'])
|
||||
assert_equal(txid_1, unspent_cb[0]['txid'])
|
||||
assert_equal('sprout', unspent_cb[0]['pool'])
|
||||
assert_equal(True, unspent_cb[0]['spendable'])
|
||||
assert_equal(sproutzaddr, unspent_cb[0]['address'])
|
||||
assert_equal(receive_amount_1, unspent_cb[0]['amount'])
|
||||
|
||||
# list unspent, filtering by address, should produce same result
|
||||
unspent_cb_filter = self.nodes[0].z_listunspent(0, 9999, False, [sproutzaddr])
|
||||
assert_equal(unspent_cb, unspent_cb_filter)
|
||||
|
||||
# Generate a block to confirm shield coinbase tx
|
||||
self.nodes[0].generate(1)
|
||||
self.sync_all()
|
||||
|
||||
# Current height = 202
|
||||
assert_equal(202, self.nodes[0].getblockcount())
|
||||
|
||||
# Send 1.0 minus default fee from sproutzaddr to a new Sapling zaddr
|
||||
saplingzaddr = self.nodes[0].z_getnewaddress('sapling')
|
||||
receive_amount_2 = Decimal('1.0')
|
||||
|
@ -88,19 +57,19 @@ class WalletListNotes(BitcoinTestFramework):
|
|||
assert_equal(len(unspent_tx), 2)
|
||||
# sort low-to-high by amount (order of returned entries is not guaranteed)
|
||||
unspent_tx = sorted(unspent_tx, key=lambda k: k['amount'])
|
||||
assert_equal(False, unspent_tx[0]['change'])
|
||||
assert_equal(txid_2, unspent_tx[0]['txid'])
|
||||
assert_equal('sapling', unspent_tx[0]['pool'])
|
||||
assert_equal(True, unspent_tx[0]['spendable'])
|
||||
assert_equal(saplingzaddr, unspent_tx[0]['address'])
|
||||
assert_equal(receive_amount_2, unspent_tx[0]['amount'])
|
||||
assert_equal(False, unspent_tx[0]['change'])
|
||||
|
||||
assert_equal(True, unspent_tx[1]['change'])
|
||||
assert_equal(txid_2, unspent_tx[1]['txid'])
|
||||
assert_equal('sprout', unspent_tx[1]['pool'])
|
||||
assert_equal(True, unspent_tx[1]['spendable'])
|
||||
assert_equal(sproutzaddr, unspent_tx[1]['address'])
|
||||
assert_equal(change_amount_2, unspent_tx[1]['amount'])
|
||||
assert_equal(True, unspent_tx[1]['change'])
|
||||
|
||||
unspent_tx_filter = self.nodes[0].z_listunspent(0, 9999, False, [saplingzaddr])
|
||||
assert_equal(1, len(unspent_tx_filter))
|
||||
|
@ -127,26 +96,26 @@ class WalletListNotes(BitcoinTestFramework):
|
|||
# low-to-high in amount
|
||||
unspent_tx = sorted(unspent_tx, key=lambda k: k['amount'])
|
||||
|
||||
assert_equal(False, unspent_tx[0]['change'])
|
||||
assert_equal(txid_2, unspent_tx[0]['txid'])
|
||||
assert_equal('sapling', unspent_tx[0]['pool'])
|
||||
assert_equal(True, unspent_tx[0]['spendable'])
|
||||
assert_equal(saplingzaddr, unspent_tx[0]['address'])
|
||||
assert_equal(receive_amount_2, unspent_tx[0]['amount'])
|
||||
assert_equal(False, unspent_tx[0]['change'])
|
||||
|
||||
assert_equal(False, unspent_tx[1]['change'])
|
||||
assert_equal(txid_3, unspent_tx[1]['txid'])
|
||||
assert_equal('sapling', unspent_tx[1]['pool'])
|
||||
assert_equal(True, unspent_tx[1]['spendable'])
|
||||
assert_equal(saplingzaddr2, unspent_tx[1]['address'])
|
||||
assert_equal(receive_amount_3, unspent_tx[1]['amount'])
|
||||
assert_equal(False, unspent_tx[1]['change'])
|
||||
|
||||
assert_equal(True, unspent_tx[2]['change'])
|
||||
assert_equal(txid_3, unspent_tx[2]['txid'])
|
||||
assert_equal('sprout', unspent_tx[2]['pool'])
|
||||
assert_equal(True, unspent_tx[2]['spendable'])
|
||||
assert_equal(sproutzaddr, unspent_tx[2]['address'])
|
||||
assert_equal(change_amount_3, unspent_tx[2]['amount'])
|
||||
assert_equal(True, unspent_tx[2]['change'])
|
||||
|
||||
unspent_tx_filter = self.nodes[0].z_listunspent(0, 9999, False, [saplingzaddr])
|
||||
assert_equal(1, len(unspent_tx_filter))
|
||||
|
@ -169,7 +138,7 @@ class WalletListNotes(BitcoinTestFramework):
|
|||
# but this requires Sapling support for those RPCs
|
||||
|
||||
# Set current height to 215 -> NU5
|
||||
self.nodes[0].generate(12)
|
||||
self.nodes[0].generate(13)
|
||||
self.sync_all()
|
||||
assert_equal(215, self.nodes[0].getblockcount())
|
||||
|
||||
|
@ -187,37 +156,37 @@ class WalletListNotes(BitcoinTestFramework):
|
|||
# low-to-high in amount
|
||||
unspent_tx = sorted(unspent_tx, key=lambda k: k['amount'])
|
||||
|
||||
assert_equal(False, unspent_tx[0]['change'])
|
||||
assert_equal(txid_2, unspent_tx[0]['txid'])
|
||||
assert_equal('sapling', unspent_tx[0]['pool'])
|
||||
assert_equal(True, unspent_tx[0]['spendable'])
|
||||
assert_true('account' not in unspent_tx[0])
|
||||
assert_equal(saplingzaddr, unspent_tx[0]['address'])
|
||||
assert_equal(receive_amount_2, unspent_tx[0]['amount'])
|
||||
assert_equal(False, unspent_tx[0]['change'])
|
||||
|
||||
assert_equal(False, unspent_tx[1]['change'])
|
||||
assert_equal(txid_3, unspent_tx[1]['txid'])
|
||||
assert_equal('sapling', unspent_tx[1]['pool'])
|
||||
assert_equal(True, unspent_tx[1]['spendable'])
|
||||
assert_true('account' not in unspent_tx[1])
|
||||
assert_equal(saplingzaddr2, unspent_tx[1]['address'])
|
||||
assert_equal(receive_amount_3, unspent_tx[1]['amount'])
|
||||
assert_equal(False, unspent_tx[1]['change'])
|
||||
|
||||
assert_equal(True, unspent_tx[2]['change'])
|
||||
assert_equal(txid_3, unspent_tx[2]['txid'])
|
||||
assert_equal('sprout', unspent_tx[2]['pool'])
|
||||
assert_equal(txid_4, unspent_tx[2]['txid'])
|
||||
assert_equal('orchard', unspent_tx[2]['pool'])
|
||||
assert_equal(True, unspent_tx[2]['spendable'])
|
||||
assert_true('account' not in unspent_tx[2])
|
||||
assert_equal(sproutzaddr, unspent_tx[2]['address'])
|
||||
assert_equal(change_amount_3, unspent_tx[2]['amount'])
|
||||
assert_equal(account0, unspent_tx[2]['account'])
|
||||
assert_equal(ua0, unspent_tx[2]['address'])
|
||||
assert_equal(receive_amount_4, unspent_tx[2]['amount'])
|
||||
assert_equal(False, unspent_tx[2]['change'])
|
||||
|
||||
assert_equal(False, unspent_tx[3]['change'])
|
||||
assert_equal(txid_4, unspent_tx[3]['txid'])
|
||||
assert_equal('orchard', unspent_tx[3]['pool'])
|
||||
assert_equal(txid_3, unspent_tx[3]['txid'])
|
||||
assert_equal('sprout', unspent_tx[3]['pool'])
|
||||
assert_equal(True, unspent_tx[3]['spendable'])
|
||||
assert_equal(account0, unspent_tx[3]['account'])
|
||||
assert_equal(ua0, unspent_tx[3]['address'])
|
||||
assert_equal(receive_amount_4, unspent_tx[3]['amount'])
|
||||
assert_true('account' not in unspent_tx[3])
|
||||
assert_equal(sproutzaddr, unspent_tx[3]['address'])
|
||||
assert_equal(change_amount_3, unspent_tx[3]['amount'])
|
||||
assert_equal(True, unspent_tx[3]['change'])
|
||||
|
||||
if __name__ == '__main__':
|
||||
WalletListNotes().main()
|
||||
|
|
Loading…
Reference in New Issue