Changeset View
Changeset View
Standalone View
Standalone View
test/functional/wallet_listtransactions.py
#!/usr/bin/env python3 | #!/usr/bin/env python3 | ||||
# Copyright (c) 2014-2019 The Bitcoin Core developers | # Copyright (c) 2014-2019 The Bitcoin Core developers | ||||
# Distributed under the MIT software license, see the accompanying | # Distributed under the MIT software license, see the accompanying | ||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | # file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
"""Test the listtransactions API.""" | """Test the listtransactions API.""" | ||||
from decimal import Decimal | from decimal import Decimal | ||||
from test_framework.test_framework import BitcoinTestFramework | from test_framework.test_framework import BitcoinTestFramework | ||||
from test_framework.util import assert_array_result | from test_framework.util import assert_array_result | ||||
class ListTransactionsTest(BitcoinTestFramework): | class ListTransactionsTest(BitcoinTestFramework): | ||||
def set_test_params(self): | def set_test_params(self): | ||||
self.num_nodes = 2 | self.num_nodes = 2 | ||||
self.extra_args = [['-deprecatedrpc=accounts'], | |||||
['-deprecatedrpc=accounts']] | |||||
def run_test(self): | def run_test(self): | ||||
# Leave IBD | # Leave IBD | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
# Simple send, 0 to 1: | # Simple send, 0 to 1: | ||||
txid = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1) | txid = self.nodes[0].sendtoaddress(self.nodes[1].getnewaddress(), 0.1) | ||||
self.sync_all() | self.sync_all() | ||||
assert_array_result(self.nodes[0].listtransactions(), | assert_array_result(self.nodes[0].listtransactions(), | ||||
{"txid": txid}, | {"txid": txid}, | ||||
{"category": "send", "account": "", "amount": Decimal("-0.1"), "confirmations": 0}) | {"category": "send", "amount": Decimal("-0.1"), "confirmations": 0}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"txid": txid}, | {"txid": txid}, | ||||
{"category": "receive", "account": "", "amount": Decimal("0.1"), "confirmations": 0}) | {"category": "receive", "amount": Decimal("0.1"), "confirmations": 0}) | ||||
# mine a block, confirmations should change: | # mine a block, confirmations should change: | ||||
self.nodes[0].generate(1) | self.nodes[0].generate(1) | ||||
self.sync_all() | self.sync_all() | ||||
assert_array_result(self.nodes[0].listtransactions(), | assert_array_result(self.nodes[0].listtransactions(), | ||||
{"txid": txid}, | {"txid": txid}, | ||||
{"category": "send", "account": "", "amount": Decimal("-0.1"), "confirmations": 1}) | {"category": "send", "amount": Decimal("-0.1"), "confirmations": 1}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"txid": txid}, | {"txid": txid}, | ||||
{"category": "receive", "account": "", "amount": Decimal("0.1"), "confirmations": 1}) | {"category": "receive", "amount": Decimal("0.1"), "confirmations": 1}) | ||||
# send-to-self: | # send-to-self: | ||||
txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 0.2) | txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 0.2) | ||||
assert_array_result(self.nodes[0].listtransactions(), | assert_array_result(self.nodes[0].listtransactions(), | ||||
{"txid": txid, "category": "send"}, | {"txid": txid, "category": "send"}, | ||||
{"amount": Decimal("-0.2")}) | {"amount": Decimal("-0.2")}) | ||||
assert_array_result(self.nodes[0].listtransactions(), | assert_array_result(self.nodes[0].listtransactions(), | ||||
{"txid": txid, "category": "receive"}, | {"txid": txid, "category": "receive"}, | ||||
{"amount": Decimal("0.2")}) | {"amount": Decimal("0.2")}) | ||||
# sendmany from node1: twice to self, twice to node2: | # sendmany from node1: twice to self, twice to node2: | ||||
send_to = {self.nodes[0].getnewaddress(): 0.11, | send_to = {self.nodes[0].getnewaddress(): 0.11, | ||||
self.nodes[1].getnewaddress(): 0.22, | self.nodes[1].getnewaddress(): 0.22, | ||||
self.nodes[0].getaccountaddress("from1"): 0.33, | self.nodes[0].getnewaddress(): 0.33, | ||||
self.nodes[1].getaccountaddress("toself"): 0.44} | self.nodes[1].getnewaddress(): 0.44} | ||||
txid = self.nodes[1].sendmany("", send_to) | txid = self.nodes[1].sendmany("", send_to) | ||||
self.sync_all() | self.sync_all() | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"category": "send", "amount": Decimal("-0.11")}, | {"category": "send", "amount": Decimal("-0.11")}, | ||||
{"txid": txid}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[0].listtransactions(), | assert_array_result(self.nodes[0].listtransactions(), | ||||
{"category": "receive", "amount": Decimal("0.11")}, | {"category": "receive", "amount": Decimal("0.11")}, | ||||
{"txid": txid}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"category": "send", "amount": Decimal("-0.22")}, | {"category": "send", "amount": Decimal("-0.22")}, | ||||
{"txid": txid}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"category": "receive", "amount": Decimal("0.22")}, | {"category": "receive", "amount": Decimal("0.22")}, | ||||
{"txid": txid}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"category": "send", "amount": Decimal("-0.33")}, | {"category": "send", "amount": Decimal("-0.33")}, | ||||
{"txid": txid}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[0].listtransactions(), | assert_array_result(self.nodes[0].listtransactions(), | ||||
{"category": "receive", "amount": Decimal("0.33")}, | {"category": "receive", "amount": Decimal("0.33")}, | ||||
{"txid": txid, "account": "from1"}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"category": "send", "amount": Decimal("-0.44")}, | {"category": "send", "amount": Decimal("-0.44")}, | ||||
{"txid": txid, "account": ""}) | {"txid": txid}) | ||||
assert_array_result(self.nodes[1].listtransactions(), | assert_array_result(self.nodes[1].listtransactions(), | ||||
{"category": "receive", "amount": Decimal("0.44")}, | {"category": "receive", "amount": Decimal("0.44")}, | ||||
{"txid": txid, "account": "toself"}) | {"txid": txid}) | ||||
pubkey = self.nodes[1].getaddressinfo( | pubkey = self.nodes[1].getaddressinfo( | ||||
self.nodes[1].getnewaddress())['pubkey'] | self.nodes[1].getnewaddress())['pubkey'] | ||||
multisig = self.nodes[1].createmultisig(1, [pubkey]) | multisig = self.nodes[1].createmultisig(1, [pubkey]) | ||||
self.nodes[0].importaddress( | self.nodes[0].importaddress( | ||||
multisig["redeemScript"], "watchonly", False, True) | multisig["redeemScript"], "watchonly", False, True) | ||||
txid = self.nodes[1].sendtoaddress(multisig["address"], 0.1) | txid = self.nodes[1].sendtoaddress(multisig["address"], 0.1) | ||||
self.nodes[1].generate(1) | self.nodes[1].generate(1) | ||||
self.sync_all() | self.sync_all() | ||||
assert len(self.nodes[0].listtransactions( | assert not [tx for tx in self.nodes[0].listtransactions( | ||||
"watchonly", 100, 0, False)) == 0 | dummy="*", count=100, skip=0, include_watchonly=False) if "label" in tx and tx["label"] == "watchonly"] | ||||
txs = [tx for tx in self.nodes[0].listtransactions( | |||||
dummy="*", count=100, skip=0, include_watchonly=True) if "label" in tx and tx['label'] == 'watchonly'] | |||||
assert_array_result( | assert_array_result( | ||||
self.nodes[0].listtransactions("watchonly", 100, 0, True), | txs, {"category": "receive", "amount": Decimal("0.1")}, {"txid": txid}) | ||||
{"category": "receive", "amount": Decimal("0.1")}, | |||||
{"txid": txid, "account": "watchonly"}) | |||||
if __name__ == '__main__': | if __name__ == '__main__': | ||||
ListTransactionsTest().main() | ListTransactionsTest().main() |