Changeset View
Changeset View
Standalone View
Standalone View
test/functional/wallet_watchonly.py
Show All 13 Lines | def set_test_params(self): | ||||
self.num_nodes = 1 | self.num_nodes = 1 | ||||
def skip_test_if_missing_module(self): | def skip_test_if_missing_module(self): | ||||
self.skip_if_no_wallet() | self.skip_if_no_wallet() | ||||
def run_test(self): | def run_test(self): | ||||
node = self.nodes[0] | node = self.nodes[0] | ||||
self.nodes[0].createwallet(wallet_name='default') | self.nodes[0].createwallet(wallet_name="default") | ||||
def_wallet = node.get_wallet_rpc('default') | def_wallet = node.get_wallet_rpc("default") | ||||
a1 = def_wallet.getnewaddress() | a1 = def_wallet.getnewaddress() | ||||
wo_change = def_wallet.getnewaddress() | wo_change = def_wallet.getnewaddress() | ||||
wo_addr = def_wallet.getnewaddress() | wo_addr = def_wallet.getnewaddress() | ||||
self.nodes[0].createwallet(wallet_name='wo', disable_private_keys=True) | self.nodes[0].createwallet(wallet_name="wo", disable_private_keys=True) | ||||
wo_wallet = node.get_wallet_rpc('wo') | wo_wallet = node.get_wallet_rpc("wo") | ||||
wo_wallet.importpubkey( | wo_wallet.importpubkey(pubkey=def_wallet.getaddressinfo(wo_addr)["pubkey"]) | ||||
pubkey=def_wallet.getaddressinfo(wo_addr)['pubkey']) | wo_wallet.importpubkey(pubkey=def_wallet.getaddressinfo(wo_change)["pubkey"]) | ||||
wo_wallet.importpubkey( | |||||
pubkey=def_wallet.getaddressinfo(wo_change)['pubkey']) | |||||
# generate some btc for testing | # generate some btc for testing | ||||
self.generatetoaddress(node, 101, a1) | self.generatetoaddress(node, 101, a1) | ||||
# send 1 btc to our watch-only address | # send 1 btc to our watch-only address | ||||
txid = def_wallet.sendtoaddress(wo_addr, 1000000) | txid = def_wallet.sendtoaddress(wo_addr, 1000000) | ||||
self.generate(self.nodes[0], 1) | self.generate(self.nodes[0], 1) | ||||
# getbalance | # getbalance | ||||
self.log.info( | self.log.info("include_watchonly should default to true for watch-only wallets") | ||||
'include_watchonly should default to true for watch-only wallets') | self.log.info("Testing getbalance watch-only defaults") | ||||
self.log.info('Testing getbalance watch-only defaults') | |||||
assert_equal(wo_wallet.getbalance(), 1000000) | assert_equal(wo_wallet.getbalance(), 1000000) | ||||
assert_equal(len(wo_wallet.listtransactions()), 1) | assert_equal(len(wo_wallet.listtransactions()), 1) | ||||
assert_equal(wo_wallet.getbalance(include_watchonly=False), 0) | assert_equal(wo_wallet.getbalance(include_watchonly=False), 0) | ||||
self.log.info('Testing listreceivedbyaddress watch-only defaults') | self.log.info("Testing listreceivedbyaddress watch-only defaults") | ||||
result = wo_wallet.listreceivedbyaddress() | result = wo_wallet.listreceivedbyaddress() | ||||
assert_equal(len(result), 1) | assert_equal(len(result), 1) | ||||
assert_equal(result[0]["involvesWatchonly"], True) | assert_equal(result[0]["involvesWatchonly"], True) | ||||
result = wo_wallet.listreceivedbyaddress(include_watchonly=False) | result = wo_wallet.listreceivedbyaddress(include_watchonly=False) | ||||
assert_equal(len(result), 0) | assert_equal(len(result), 0) | ||||
self.log.info('Testing listreceivedbylabel watch-only defaults') | self.log.info("Testing listreceivedbylabel watch-only defaults") | ||||
result = wo_wallet.listreceivedbylabel() | result = wo_wallet.listreceivedbylabel() | ||||
assert_equal(len(result), 1) | assert_equal(len(result), 1) | ||||
assert_equal(result[0]["involvesWatchonly"], True) | assert_equal(result[0]["involvesWatchonly"], True) | ||||
result = wo_wallet.listreceivedbylabel(include_watchonly=False) | result = wo_wallet.listreceivedbylabel(include_watchonly=False) | ||||
assert_equal(len(result), 0) | assert_equal(len(result), 0) | ||||
self.log.info('Testing listtransactions watch-only defaults') | self.log.info("Testing listtransactions watch-only defaults") | ||||
result = wo_wallet.listtransactions() | result = wo_wallet.listtransactions() | ||||
assert_equal(len(result), 1) | assert_equal(len(result), 1) | ||||
assert_equal(result[0]["involvesWatchonly"], True) | assert_equal(result[0]["involvesWatchonly"], True) | ||||
result = wo_wallet.listtransactions(include_watchonly=False) | result = wo_wallet.listtransactions(include_watchonly=False) | ||||
assert_equal(len(result), 0) | assert_equal(len(result), 0) | ||||
self.log.info('Testing listsinceblock watch-only defaults') | self.log.info("Testing listsinceblock watch-only defaults") | ||||
result = wo_wallet.listsinceblock() | result = wo_wallet.listsinceblock() | ||||
assert_equal(len(result["transactions"]), 1) | assert_equal(len(result["transactions"]), 1) | ||||
assert_equal(result["transactions"][0]["involvesWatchonly"], True) | assert_equal(result["transactions"][0]["involvesWatchonly"], True) | ||||
result = wo_wallet.listsinceblock(include_watchonly=False) | result = wo_wallet.listsinceblock(include_watchonly=False) | ||||
assert_equal(len(result["transactions"]), 0) | assert_equal(len(result["transactions"]), 0) | ||||
self.log.info('Testing gettransaction watch-only defaults') | self.log.info("Testing gettransaction watch-only defaults") | ||||
result = wo_wallet.gettransaction(txid) | result = wo_wallet.gettransaction(txid) | ||||
assert_equal(result["details"][0]["involvesWatchonly"], True) | assert_equal(result["details"][0]["involvesWatchonly"], True) | ||||
result = wo_wallet.gettransaction(txid=txid, include_watchonly=False) | result = wo_wallet.gettransaction(txid=txid, include_watchonly=False) | ||||
assert_equal(len(result["details"]), 0) | assert_equal(len(result["details"]), 0) | ||||
self.log.info('Testing walletcreatefundedpsbt watch-only defaults') | self.log.info("Testing walletcreatefundedpsbt watch-only defaults") | ||||
inputs = [] | inputs = [] | ||||
outputs = [{a1: 500000}] | outputs = [{a1: 500000}] | ||||
options = {'changeAddress': wo_change} | options = {"changeAddress": wo_change} | ||||
no_wo_options = {'changeAddress': wo_change, 'includeWatching': False} | no_wo_options = {"changeAddress": wo_change, "includeWatching": False} | ||||
result = wo_wallet.walletcreatefundedpsbt( | result = wo_wallet.walletcreatefundedpsbt( | ||||
inputs=inputs, outputs=outputs, options=options) | inputs=inputs, outputs=outputs, options=options | ||||
) | |||||
assert_equal("psbt" in result, True) | assert_equal("psbt" in result, True) | ||||
assert_raises_rpc_error(-4, | assert_raises_rpc_error( | ||||
-4, | |||||
"Insufficient funds", | "Insufficient funds", | ||||
wo_wallet.walletcreatefundedpsbt, | wo_wallet.walletcreatefundedpsbt, | ||||
inputs, | inputs, | ||||
outputs, | outputs, | ||||
0, | 0, | ||||
no_wo_options) | no_wo_options, | ||||
) | |||||
self.log.info('Testing fundrawtransaction watch-only defaults') | self.log.info("Testing fundrawtransaction watch-only defaults") | ||||
rawtx = wo_wallet.createrawtransaction(inputs=inputs, outputs=outputs) | rawtx = wo_wallet.createrawtransaction(inputs=inputs, outputs=outputs) | ||||
result = wo_wallet.fundrawtransaction(hexstring=rawtx, options=options) | result = wo_wallet.fundrawtransaction(hexstring=rawtx, options=options) | ||||
assert_equal("hex" in result, True) | assert_equal("hex" in result, True) | ||||
assert_raises_rpc_error(-4, | assert_raises_rpc_error( | ||||
"Insufficient funds", | -4, "Insufficient funds", wo_wallet.fundrawtransaction, rawtx, no_wo_options | ||||
wo_wallet.fundrawtransaction, | ) | ||||
rawtx, | |||||
no_wo_options) | |||||
if __name__ == '__main__': | if __name__ == "__main__": | ||||
CreateWalletWatchonlyTest().main() | CreateWalletWatchonlyTest().main() |