Hush Full Node software. We were censored from Github, this is where all development happens now.
https://hush.is
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.7 KiB
84 lines
3.7 KiB
6 years ago
|
#!/usr/bin/env python2
|
||
|
# Copyright (c) 2018 The Zcash developers
|
||
|
# Distributed under the MIT software license, see the accompanying
|
||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
|
||
|
from test_framework.test_framework import BitcoinTestFramework
|
||
|
from test_framework.util import assert_equal, start_nodes, wait_and_assert_operationid_status
|
||
|
|
||
|
from decimal import Decimal
|
||
|
|
||
|
# Test wallet z_listunspent and z_listreceivedbyaddress behaviour across network upgrades
|
||
|
# TODO: Test z_listreceivedbyaddress
|
||
|
class WalletListNotes(BitcoinTestFramework):
|
||
|
|
||
|
def setup_nodes(self):
|
||
|
return start_nodes(4, self.options.tmpdir, [[
|
||
|
'-nuparams=5ba81b19:202', # Overwinter
|
||
|
'-nuparams=76b809bb:204', # Sapling
|
||
|
]] * 4)
|
||
|
|
||
|
def run_test(self):
|
||
|
# Current height = 200 -> Sprout
|
||
|
sproutzaddr = self.nodes[0].z_getnewaddress('sprout')
|
||
|
saplingzaddr = self.nodes[0].z_getnewaddress('sapling')
|
||
|
print "sprout zaddr", sproutzaddr
|
||
|
print "saplingzaddr", saplingzaddr
|
||
|
|
||
|
# Current height = 201 -> Sprout
|
||
|
self.nodes[0].generate(1)
|
||
|
self.sync_all()
|
||
|
|
||
|
mining_addr = self.nodes[0].listunspent()[0]['address']
|
||
|
# Shield coinbase funds
|
||
|
recipients = []
|
||
|
recipients.append({"address":sproutzaddr, "amount":Decimal('10.0')-Decimal('0.0001')}) # utxo amount less fee
|
||
|
myopid = self.nodes[0].z_sendmany(mining_addr, recipients)
|
||
|
txid_1 = wait_and_assert_operationid_status(self.nodes[0], myopid)
|
||
|
|
||
|
# No funds in sproutzaddr yet
|
||
|
assert_equal(set(self.nodes[0].z_listunspent()), set())
|
||
|
|
||
|
print self.nodes[0].z_gettotalbalance() # no private balance displayed bc no confirmations yet
|
||
|
|
||
|
# list unspent, allowing 0 confirmations
|
||
|
unspent_cb = self.nodes[0].z_listunspent(0)
|
||
|
# list unspent, filtering by address
|
||
|
unspent_cb_filter = self.nodes[0].z_listunspent(0, 9999, False, [sproutzaddr])
|
||
|
assert_equal(unspent_cb, unspent_cb_filter)
|
||
|
assert_equal(len(unspent_cb), 1)
|
||
|
assert_equal(unspent_cb[0]['change'], False)
|
||
|
assert_equal(unspent_cb[0]['txid'], txid_1)
|
||
|
assert_equal(unspent_cb[0]['spendable'], True)
|
||
|
assert_equal(unspent_cb[0]['address'], sproutzaddr)
|
||
|
assert_equal(unspent_cb[0]['amount'], Decimal('10.0')-Decimal('0.0001'))
|
||
|
|
||
|
# Generate a block to confirm shield coinbase tx
|
||
|
# Current height = 202 -> Overwinter. Default address type is Sprout
|
||
|
self.nodes[0].generate(1)
|
||
|
self.sync_all()
|
||
|
|
||
|
sproutzaddr2 = self.nodes[0].z_getnewaddress('sprout')
|
||
|
recipients = [{"address": sproutzaddr2, "amount":Decimal('1.0')-Decimal('0.0001')}]
|
||
|
myopid = self.nodes[0].z_sendmany(sproutzaddr, recipients)
|
||
|
txid_2 = wait_and_assert_operationid_status(self.nodes[0], myopid)
|
||
|
|
||
|
# list unspent, allowing 0conf txs
|
||
|
unspent_tx = self.nodes[0].z_listunspent(0)
|
||
|
unspent_tx_filter = self.nodes[0].z_listunspent(0, 9999, False, [sproutzaddr2])
|
||
|
assert_equal(len(unspent_tx), 2)
|
||
|
assert_equal(unspent_tx[0]['change'], False)
|
||
|
assert_equal(unspent_tx[0]['txid'], txid_2)
|
||
|
assert_equal(unspent_tx[0]['spendable'], True)
|
||
|
assert_equal(unspent_tx[0]['address'], sproutzaddr2)
|
||
|
assert_equal(unspent_tx[0]['amount'], Decimal('1.0')-Decimal('0.0001'))
|
||
|
# TODO: test change
|
||
|
|
||
|
# No funds in saplingzaddr yet
|
||
|
assert_equal(set(self.nodes[0].z_listunspent(0, 9999, False, [saplingzaddr])), set())
|
||
|
|
||
|
# Current height = 204 -> Sapling
|
||
|
# self.nodes[0].generate(2)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
WalletListNotes().main()
|