|
|
@ -32,6 +32,12 @@ class WalletTest (BitcoinTestFramework): |
|
|
|
self.sync_all() |
|
|
|
self.sync_all() |
|
|
|
|
|
|
|
|
|
|
|
def run_test (self): |
|
|
|
def run_test (self): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check that there's no UTXO on none of the nodes |
|
|
|
|
|
|
|
assert_equal(len(self.nodes[0].listunspent()), 0) |
|
|
|
|
|
|
|
assert_equal(len(self.nodes[1].listunspent()), 0) |
|
|
|
|
|
|
|
assert_equal(len(self.nodes[2].listunspent()), 0) |
|
|
|
|
|
|
|
|
|
|
|
print "Mining blocks..." |
|
|
|
print "Mining blocks..." |
|
|
|
|
|
|
|
|
|
|
|
self.nodes[0].generate(1) |
|
|
|
self.nodes[0].generate(1) |
|
|
@ -48,6 +54,11 @@ class WalletTest (BitcoinTestFramework): |
|
|
|
assert_equal(self.nodes[1].getbalance(), 50) |
|
|
|
assert_equal(self.nodes[1].getbalance(), 50) |
|
|
|
assert_equal(self.nodes[2].getbalance(), 0) |
|
|
|
assert_equal(self.nodes[2].getbalance(), 0) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check that only first and second nodes have UTXOs |
|
|
|
|
|
|
|
assert_equal(len(self.nodes[0].listunspent()), 1) |
|
|
|
|
|
|
|
assert_equal(len(self.nodes[1].listunspent()), 1) |
|
|
|
|
|
|
|
assert_equal(len(self.nodes[2].listunspent()), 0) |
|
|
|
|
|
|
|
|
|
|
|
# Send 21 BTC from 0 to 2 using sendtoaddress call. |
|
|
|
# Send 21 BTC from 0 to 2 using sendtoaddress call. |
|
|
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11) |
|
|
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 11) |
|
|
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 10) |
|
|
|
self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 10) |
|
|
@ -259,6 +270,32 @@ class WalletTest (BitcoinTestFramework): |
|
|
|
except JSONRPCException as e: |
|
|
|
except JSONRPCException as e: |
|
|
|
assert("not an integer" in e.error['message']) |
|
|
|
assert("not an integer" in e.error['message']) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Import address and private key to check correct behavior of spendable unspents |
|
|
|
|
|
|
|
# 1. Send some coins to generate new UTXO |
|
|
|
|
|
|
|
address_to_import = self.nodes[2].getnewaddress() |
|
|
|
|
|
|
|
txid = self.nodes[0].sendtoaddress(address_to_import, 1) |
|
|
|
|
|
|
|
self.nodes[0].generate(1) |
|
|
|
|
|
|
|
self.sync_all() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 2. Import address from node2 to node1 |
|
|
|
|
|
|
|
self.nodes[1].importaddress(address_to_import) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 3. Validate that the imported address is watch-only on node1 |
|
|
|
|
|
|
|
assert(self.nodes[1].validateaddress(address_to_import)["iswatchonly"]) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 4. Check that the unspents after import are not spendable |
|
|
|
|
|
|
|
assert_array_result(self.nodes[1].listunspent(), |
|
|
|
|
|
|
|
{"address": address_to_import}, |
|
|
|
|
|
|
|
{"spendable": False}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 5. Import private key of the previously imported address on node1 |
|
|
|
|
|
|
|
priv_key = self.nodes[2].dumpprivkey(address_to_import) |
|
|
|
|
|
|
|
self.nodes[1].importprivkey(priv_key) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 6. Check that the unspents are now spendable on node1 |
|
|
|
|
|
|
|
assert_array_result(self.nodes[1].listunspent(), |
|
|
|
|
|
|
|
{"address": address_to_import}, |
|
|
|
|
|
|
|
{"spendable": True}) |
|
|
|
|
|
|
|
|
|
|
|
# Mine a block from node0 to an address from node1 |
|
|
|
# Mine a block from node0 to an address from node1 |
|
|
|
cbAddr = self.nodes[1].getnewaddress() |
|
|
|
cbAddr = self.nodes[1].getnewaddress() |
|
|
|