diff --git a/qa/rpc-tests/wallet_listunspent.py b/qa/rpc-tests/wallet_listunspent.py index 2514c88f2..8c3b9f93d 100755 --- a/qa/rpc-tests/wallet_listunspent.py +++ b/qa/rpc-tests/wallet_listunspent.py @@ -80,51 +80,39 @@ class WalletListUnspent(BitcoinTestFramework): opid = self.nodes[0].z_sendmany( 'ANY_TADDR', - # FIXME: #6262 The amount here _should_ be 2, but because of a - # bug in the selector for `ANY_TADDR`, it’s selecting - # transparent coinbase, which also means we can’t have - # change. When that bug is fixed, the test should fail - # here, and we can switch it back to 2 (and cascade the - # corrected amounts mentioned below. - [{'address': n1uaddr, 'amount': 10}], + [{'address': n1uaddr, 'amount': 2}], 1, 0, 'AllowRevealedSenders') wait_and_assert_operationid_status(self.nodes[0], opid) self.nodes[0].generate(2) self.sync_all() # height 207 - # FIXME: #6262, should be `expected_matured_at_height(207) - 10 + 10 - 2` - assert_equal(self.nodes[0].getbalance(), expected_matured_at_height(207) - 10 + 10 - 10) + assert_equal(self.nodes[0].getbalance(), expected_matured_at_height(207) - 10 + 10 - 2) opid = self.nodes[0].z_sendmany( 'ANY_TADDR', - # FIXME: Should be 3 (see above) - [{'address': n1uaddr, 'amount': 10}], + [{'address': n1uaddr, 'amount': 3}], 1, 0, 'AllowRevealedSenders') wait_and_assert_operationid_status(self.nodes[0], opid) self.nodes[0].generate(2) self.sync_all() # height 209 - # FIXME: #6262, should be `expected_matured_at_height(209) - 10 + 10 - 2 - 3` - assert_equal(self.nodes[0].getbalance(), expected_matured_at_height(209) - 10 + 10 - 10 - 10) + assert_equal(self.nodes[0].getbalance(), expected_matured_at_height(209) - 10 + 10 - 2 - 3) opid = self.nodes[0].z_sendmany( 'ANY_TADDR', - # FIXME: Should be 5 (see above) - [{'address': n1uaddr, 'amount': 10}], + [{'address': n1uaddr, 'amount': 5}], 1, 0, 'AllowRevealedSenders') wait_and_assert_operationid_status(self.nodes[0], opid) self.nodes[0].generate(2) self.sync_all() # height 211 - # FIXME: #6262, should be `expected_matured_at_height(211) - 10 + 10 - 2 - 3 - 5` - assert_equal(self.nodes[0].getbalance(), expected_matured_at_height(211) - 10 + 10 - 10 - 10 - 10) + assert_equal(self.nodes[0].getbalance(), expected_matured_at_height(211) - 10 + 10 - 2 - 3 - 5) # check balances at various past points in the chain - # FIXME: #6262, change the comparison amounts when the above changes are made. assert_equal(self.matured_at_height(205), expected_matured_at_height(205) - 10 + 10) - assert_equal(self.matured_at_height(207), expected_matured_at_height(207) - 10 + 10 - 10) - assert_equal(self.matured_at_height(209), expected_matured_at_height(209) - 10 + 10 - 10 - 10) - assert_equal(self.matured_at_height(211), expected_matured_at_height(211) - 10 + 10 - 10 - 10 - 10) + assert_equal(self.matured_at_height(207), expected_matured_at_height(207) - 10 + 10 - 2) + assert_equal(self.matured_at_height(209), expected_matured_at_height(209) - 10 + 10 - 2 - 3) + assert_equal(self.matured_at_height(211), expected_matured_at_height(211) - 10 + 10 - 2 - 3 - 5) if __name__ == '__main__': WalletListUnspent().main() diff --git a/qa/rpc-tests/wallet_sendmany_any_taddr.py b/qa/rpc-tests/wallet_sendmany_any_taddr.py index 79846ccb8..40bca037a 100755 --- a/qa/rpc-tests/wallet_sendmany_any_taddr.py +++ b/qa/rpc-tests/wallet_sendmany_any_taddr.py @@ -97,7 +97,7 @@ class WalletSendManyAnyTaddr(BitcoinTestFramework): # Check that ANY_TADDR note selection doesn't attempt a double-spend myopid = self.nodes[3].z_sendmany('ANY_TADDR', [{'address': recipient, 'amount': 20}], 1) - wait_and_assert_operationid_status(self.nodes[3], myopid, "failed", "Insufficient funds: have 14.99998, need 20.00001") + wait_and_assert_operationid_status(self.nodes[3], myopid, "failed", "Insufficient funds: have 14.99998, need 20.00001; note that coinbase outputs will not be selected if you specify ANY_TADDR or if any transparent recipients are included.") # Create an expired transaction on node 3. self.split_network() @@ -123,7 +123,7 @@ class WalletSendManyAnyTaddr(BitcoinTestFramework): assert_equal(0, self.nodes[2].getbalance()) # Check that ANY_TADDR doesn't select an expired output. - wait_and_assert_operationid_status(self.nodes[2], self.nodes[2].z_sendmany('ANY_TADDR', [{'address': recipient, 'amount': 13}]), "failed", "Insufficient funds: have 0.00, need 13.00001") + wait_and_assert_operationid_status(self.nodes[2], self.nodes[2].z_sendmany('ANY_TADDR', [{'address': recipient, 'amount': 13}]), "failed", "Insufficient funds: have 0.00, need 13.00001; note that coinbase outputs will not be selected if you specify ANY_TADDR or if any transparent recipients are included.") if __name__ == '__main__': WalletSendManyAnyTaddr().main() diff --git a/qa/rpc-tests/wallet_shieldingcoinbase.py b/qa/rpc-tests/wallet_shieldingcoinbase.py index c3261993a..c5f570fe0 100755 --- a/qa/rpc-tests/wallet_shieldingcoinbase.py +++ b/qa/rpc-tests/wallet_shieldingcoinbase.py @@ -88,8 +88,8 @@ class WalletShieldingCoinbaseTest (BitcoinTestFramework): errorString = e.error['message'] assert_equal("Invalid from address, no payment source found for address.", errorString); - # This send will fail because our consensus does not allow transparent change when - # shielding a coinbase utxo. + # This send will fail because our consensus does not allow transparent change when + # shielding a coinbase utxo. # TODO: After upgrading to unified address support, change will be sent to the most # recent shielded spend authority corresponding to the account of the source address # and this send will succeed, causing this test to fail. @@ -98,9 +98,9 @@ class WalletShieldingCoinbaseTest (BitcoinTestFramework): myopid = self.nodes[0].z_sendmany(mytaddr, recipients) error_result = wait_and_assert_operationid_status_result( - self.nodes[0], - myopid, "failed", - "When shielding coinbase funds, the wallet does not allow any change. The proposed transaction would result in 8.76542211 in change.", + self.nodes[0], + myopid, "failed", + "When shielding coinbase funds, the wallet does not allow any change. The proposed transaction would result in 8.76542211 in change.", 10) # Test that the returned status object contains a params field with the operation's input parameters @@ -225,7 +225,7 @@ class WalletShieldingCoinbaseTest (BitcoinTestFramework): amount = Decimal('10.0') - DEFAULT_FEE - Decimal('0.00000001') # this leaves change at 1 zatoshi less than dust threshold recipients.append({"address":self.nodes[0].getnewaddress(), "amount":amount }) myopid = self.nodes[0].z_sendmany(mytaddr, recipients, 1) - wait_and_assert_operationid_status(self.nodes[0], myopid, "failed", "Insufficient funds: have 10.00, need 0.00000053 more to avoid creating invalid change output 0.00000001 (dust threshold is 0.00000054)") + wait_and_assert_operationid_status(self.nodes[0], myopid, "failed", "Insufficient funds: have 10.00, need 0.00000053 more to avoid creating invalid change output 0.00000001 (dust threshold is 0.00000054); note that coinbase outputs will not be selected if you specify ANY_TADDR or if any transparent recipients are included.") # Send will fail because send amount is too big, even when including coinbase utxos errorString = "" diff --git a/qa/rpc-tests/wallet_z_sendmany.py b/qa/rpc-tests/wallet_z_sendmany.py index 436e983be..f9c9eacf6 100755 --- a/qa/rpc-tests/wallet_z_sendmany.py +++ b/qa/rpc-tests/wallet_z_sendmany.py @@ -11,6 +11,7 @@ from test_framework.util import ( assert_greater_than, assert_raises_message, connect_nodes_bi, + get_coinbase_address, nuparams, start_nodes, wait_and_assert_operationid_status, @@ -170,9 +171,8 @@ class WalletZSendmanyTest(BitcoinTestFramework): n0account0 = self.nodes[0].z_getnewaccount()['account'] n0ua0 = self.nodes[0].z_getaddressforaccount(n0account0)['address'] - # Change went to a fresh address, so use `ANY_TADDR` which - # should hold the rest of our transparent funds. - source = 'ANY_TADDR' + # Prepare to fund the UA from coinbase + source = get_coinbase_address(self.nodes[2]) recipients = [] recipients.append({"address":n0ua0, "amount":10}) @@ -357,12 +357,13 @@ class WalletZSendmanyTest(BitcoinTestFramework): # # Send some legacy transparent funds to n1ua0, creating Sapling outputs. + source = get_coinbase_address(self.nodes[2]) recipients = [{"address":n1ua0, "amount":10}] # This requires the AllowRevealedSenders policy... - opid = self.nodes[2].z_sendmany('ANY_TADDR', recipients, 1, 0) + opid = self.nodes[2].z_sendmany(source, recipients, 1, 0) wait_and_assert_operationid_status(self.nodes[2], opid, 'failed', revealed_senders_msg) # ... which we can always override with the NoPrivacy policy. - opid = self.nodes[2].z_sendmany('ANY_TADDR', recipients, 1, 0, 'NoPrivacy') + opid = self.nodes[2].z_sendmany(source, recipients, 1, 0, 'NoPrivacy') wait_and_assert_operationid_status(self.nodes[2], opid) self.sync_all() @@ -396,7 +397,7 @@ class WalletZSendmanyTest(BitcoinTestFramework): n0ua1 = self.nodes[0].z_getaddressforaccount(n0account0, ["orchard"])['address'] recipients = [{"address":n0ua1, "amount": 6}] - # Should fail under default and 'FullPrivacy' policies ... + # Should fail under default and 'FullPrivacy' policies ... revealed_amounts_msg = 'Sending from the Sapling shielded pool to the Orchard shielded pool is not enabled by default because it will publicly reveal the transaction amount. THIS MAY AFFECT YOUR PRIVACY. Resubmit with the `privacyPolicy` parameter set to `AllowRevealedAmounts` or weaker if you wish to allow this transaction to proceed anyway.' opid = self.nodes[1].z_sendmany(n1ua0, recipients, 1, 0) wait_and_assert_operationid_status(self.nodes[1], opid, 'failed', revealed_amounts_msg)