Changeset View
Changeset View
Standalone View
Standalone View
test/functional/wallet_listreceivedby.py
Show All 26 Lines | class ReceivedByTest(BitcoinTestFramework): | ||||
def run_test(self): | def run_test(self): | ||||
# Generate block to get out of IBD | # Generate block to get out of IBD | ||||
self.generate(self.nodes[0], 1) | self.generate(self.nodes[0], 1) | ||||
# save the number of coinbase reward addresses so far | # save the number of coinbase reward addresses so far | ||||
num_cb_reward_addresses = len( | num_cb_reward_addresses = len( | ||||
self.nodes[1].listreceivedbyaddress( | self.nodes[1].listreceivedbyaddress( | ||||
minconf=0, | minconf=0, include_empty=True, include_watchonly=True | ||||
include_empty=True, | ) | ||||
include_watchonly=True)) | ) | ||||
self.log.info("listreceivedbyaddress Test") | self.log.info("listreceivedbyaddress Test") | ||||
# Send from node 0 to 1 | # Send from node 0 to 1 | ||||
addr = self.nodes[1].getnewaddress() | addr = self.nodes[1].getnewaddress() | ||||
txid = self.nodes[0].sendtoaddress(addr, 100000) | txid = self.nodes[0].sendtoaddress(addr, 100000) | ||||
self.sync_all() | self.sync_all() | ||||
# Check not listed in listreceivedbyaddress because has 0 confirmations | # Check not listed in listreceivedbyaddress because has 0 confirmations | ||||
assert_array_result(self.nodes[1].listreceivedbyaddress(), | assert_array_result( | ||||
{"address": addr}, | self.nodes[1].listreceivedbyaddress(), {"address": addr}, {}, True | ||||
{}, | ) | ||||
True) | |||||
# Bury Tx under 10 block so it will be returned by | # Bury Tx under 10 block so it will be returned by | ||||
# listreceivedbyaddress | # listreceivedbyaddress | ||||
self.generate(self.nodes[1], 10) | self.generate(self.nodes[1], 10) | ||||
assert_array_result(self.nodes[1].listreceivedbyaddress(), | assert_array_result( | ||||
self.nodes[1].listreceivedbyaddress(), | |||||
{"address": addr}, | {"address": addr}, | ||||
{"address": addr, "label": "", "amount": Decimal("100000"), "confirmations": 10, "txids": [txid, ]}) | { | ||||
"address": addr, | |||||
"label": "", | |||||
"amount": Decimal("100000"), | |||||
"confirmations": 10, | |||||
"txids": [ | |||||
txid, | |||||
], | |||||
}, | |||||
) | |||||
# With min confidence < 10 | # With min confidence < 10 | ||||
assert_array_result(self.nodes[1].listreceivedbyaddress(5), | assert_array_result( | ||||
self.nodes[1].listreceivedbyaddress(5), | |||||
{"address": addr}, | {"address": addr}, | ||||
{"address": addr, "label": "", "amount": Decimal("100000"), "confirmations": 10, "txids": [txid, ]}) | { | ||||
"address": addr, | |||||
"label": "", | |||||
"amount": Decimal("100000"), | |||||
"confirmations": 10, | |||||
"txids": [ | |||||
txid, | |||||
], | |||||
}, | |||||
) | |||||
# With min confidence > 10, should not find Tx | # With min confidence > 10, should not find Tx | ||||
assert_array_result(self.nodes[1].listreceivedbyaddress(11), { | assert_array_result( | ||||
"address": addr}, {}, True) | self.nodes[1].listreceivedbyaddress(11), {"address": addr}, {}, True | ||||
) | |||||
# Empty Tx | # Empty Tx | ||||
empty_addr = self.nodes[1].getnewaddress() | empty_addr = self.nodes[1].getnewaddress() | ||||
assert_array_result(self.nodes[1].listreceivedbyaddress(0, True), | assert_array_result( | ||||
self.nodes[1].listreceivedbyaddress(0, True), | |||||
{"address": empty_addr}, | {"address": empty_addr}, | ||||
{"address": empty_addr, "label": "", "amount": 0, "confirmations": 0, "txids": []}) | { | ||||
"address": empty_addr, | |||||
"label": "", | |||||
"amount": 0, | |||||
"confirmations": 0, | |||||
"txids": [], | |||||
}, | |||||
) | |||||
# Test Address filtering | # Test Address filtering | ||||
# Only on addr | # Only on addr | ||||
expected = {"address": addr, "label": "", "amount": Decimal( | expected = { | ||||
"100000"), "confirmations": 10, "txids": [txid, ]} | "address": addr, | ||||
"label": "", | |||||
"amount": Decimal("100000"), | |||||
"confirmations": 10, | |||||
"txids": [ | |||||
txid, | |||||
], | |||||
} | |||||
res = self.nodes[1].listreceivedbyaddress( | res = self.nodes[1].listreceivedbyaddress( | ||||
minconf=0, include_empty=True, include_watchonly=True, address_filter=addr) | minconf=0, include_empty=True, include_watchonly=True, address_filter=addr | ||||
) | |||||
assert_array_result(res, {"address": addr}, expected) | assert_array_result(res, {"address": addr}, expected) | ||||
assert_equal(len(res), 1) | assert_equal(len(res), 1) | ||||
# Test for regression on CLI calls with address string (#14173) | # Test for regression on CLI calls with address string (#14173) | ||||
cli_res = self.nodes[1].cli.listreceivedbyaddress(0, True, True, addr) | cli_res = self.nodes[1].cli.listreceivedbyaddress(0, True, True, addr) | ||||
assert_array_result(cli_res, {"address": addr}, expected) | assert_array_result(cli_res, {"address": addr}, expected) | ||||
assert_equal(len(cli_res), 1) | assert_equal(len(cli_res), 1) | ||||
# Error on invalid address | # Error on invalid address | ||||
assert_raises_rpc_error(-4, "address_filter parameter was invalid", | assert_raises_rpc_error( | ||||
self.nodes[1].listreceivedbyaddress, minconf=0, include_empty=True, include_watchonly=True, address_filter="bamboozling") | -4, | ||||
"address_filter parameter was invalid", | |||||
self.nodes[1].listreceivedbyaddress, | |||||
minconf=0, | |||||
include_empty=True, | |||||
include_watchonly=True, | |||||
address_filter="bamboozling", | |||||
) | |||||
# Another address receive money | # Another address receive money | ||||
res = self.nodes[1].listreceivedbyaddress(0, True, True) | res = self.nodes[1].listreceivedbyaddress(0, True, True) | ||||
# Right now 2 entries | # Right now 2 entries | ||||
assert_equal(len(res), 2 + num_cb_reward_addresses) | assert_equal(len(res), 2 + num_cb_reward_addresses) | ||||
other_addr = self.nodes[1].getnewaddress() | other_addr = self.nodes[1].getnewaddress() | ||||
txid2 = self.nodes[0].sendtoaddress(other_addr, 100000) | txid2 = self.nodes[0].sendtoaddress(other_addr, 100000) | ||||
self.generate(self.nodes[0], 1) | self.generate(self.nodes[0], 1) | ||||
# Same test as above should still pass | # Same test as above should still pass | ||||
expected = {"address": addr, "label": "", "amount": Decimal( | expected = { | ||||
"100000"), "confirmations": 11, "txids": [txid, ]} | "address": addr, | ||||
"label": "", | |||||
"amount": Decimal("100000"), | |||||
"confirmations": 11, | |||||
"txids": [ | |||||
txid, | |||||
], | |||||
} | |||||
res = self.nodes[1].listreceivedbyaddress(0, True, True, addr) | res = self.nodes[1].listreceivedbyaddress(0, True, True, addr) | ||||
assert_array_result(res, {"address": addr}, expected) | assert_array_result(res, {"address": addr}, expected) | ||||
assert_equal(len(res), 1) | assert_equal(len(res), 1) | ||||
# Same test as above but with other_addr should still pass | # Same test as above but with other_addr should still pass | ||||
expected = {"address": other_addr, "label": "", "amount": Decimal( | expected = { | ||||
"100000"), "confirmations": 1, "txids": [txid2, ]} | "address": other_addr, | ||||
"label": "", | |||||
"amount": Decimal("100000"), | |||||
"confirmations": 1, | |||||
"txids": [ | |||||
txid2, | |||||
], | |||||
} | |||||
res = self.nodes[1].listreceivedbyaddress(0, True, True, other_addr) | res = self.nodes[1].listreceivedbyaddress(0, True, True, other_addr) | ||||
assert_array_result(res, {"address": other_addr}, expected) | assert_array_result(res, {"address": other_addr}, expected) | ||||
assert_equal(len(res), 1) | assert_equal(len(res), 1) | ||||
# Should be two entries though without filter | # Should be two entries though without filter | ||||
res = self.nodes[1].listreceivedbyaddress(0, True, True) | res = self.nodes[1].listreceivedbyaddress(0, True, True) | ||||
# Became 3 entries | # Became 3 entries | ||||
assert_equal(len(res), 3 + num_cb_reward_addresses) | assert_equal(len(res), 3 + num_cb_reward_addresses) | ||||
Show All 21 Lines | def run_test(self): | ||||
# Bury Tx under 10 block so it will be returned by the default | # Bury Tx under 10 block so it will be returned by the default | ||||
# getreceivedbyaddress | # getreceivedbyaddress | ||||
self.generate(self.nodes[1], 10) | self.generate(self.nodes[1], 10) | ||||
balance = self.nodes[1].getreceivedbyaddress(addr) | balance = self.nodes[1].getreceivedbyaddress(addr) | ||||
assert_equal(balance, Decimal("100000")) | assert_equal(balance, Decimal("100000")) | ||||
# Trying to getreceivedby for an address the wallet doesn't own should | # Trying to getreceivedby for an address the wallet doesn't own should | ||||
# return an error | # return an error | ||||
assert_raises_rpc_error(-4, "Address not found in wallet", | assert_raises_rpc_error( | ||||
self.nodes[0].getreceivedbyaddress, addr) | -4, "Address not found in wallet", self.nodes[0].getreceivedbyaddress, addr | ||||
) | |||||
self.log.info("listreceivedbylabel + getreceivedbylabel Test") | self.log.info("listreceivedbylabel + getreceivedbylabel Test") | ||||
# set pre-state | # set pre-state | ||||
label = '' | label = "" | ||||
address = self.nodes[1].getnewaddress() | address = self.nodes[1].getnewaddress() | ||||
test_address(self.nodes[1], address, labels=[label]) | test_address(self.nodes[1], address, labels=[label]) | ||||
received_by_label_json = [ | received_by_label_json = [ | ||||
r for r in self.nodes[1].listreceivedbylabel() if r["label"] == label][0] | r for r in self.nodes[1].listreceivedbylabel() if r["label"] == label | ||||
][0] | |||||
balance_by_label = self.nodes[1].getreceivedbylabel(label) | balance_by_label = self.nodes[1].getreceivedbylabel(label) | ||||
txid = self.nodes[0].sendtoaddress(addr, 100000) | txid = self.nodes[0].sendtoaddress(addr, 100000) | ||||
self.sync_all() | self.sync_all() | ||||
# listreceivedbylabel should return received_by_label_json because of 0 | # listreceivedbylabel should return received_by_label_json because of 0 | ||||
# confirmations | # confirmations | ||||
assert_array_result(self.nodes[1].listreceivedbylabel(), | assert_array_result( | ||||
self.nodes[1].listreceivedbylabel(), | |||||
{"label": label}, | {"label": label}, | ||||
received_by_label_json) | received_by_label_json, | ||||
) | |||||
# getreceivedbyaddress should return same balance because of 0 | # getreceivedbyaddress should return same balance because of 0 | ||||
# confirmations | # confirmations | ||||
balance = self.nodes[1].getreceivedbylabel(label) | balance = self.nodes[1].getreceivedbylabel(label) | ||||
assert_equal(balance, balance_by_label) | assert_equal(balance, balance_by_label) | ||||
self.generate(self.nodes[1], 10) | self.generate(self.nodes[1], 10) | ||||
# listreceivedbylabel should return updated received list | # listreceivedbylabel should return updated received list | ||||
assert_array_result(self.nodes[1].listreceivedbylabel(), | assert_array_result( | ||||
self.nodes[1].listreceivedbylabel(), | |||||
{"label": label}, | {"label": label}, | ||||
{"label": received_by_label_json["label"], "amount": (received_by_label_json["amount"] + Decimal("100000"))}) | { | ||||
"label": received_by_label_json["label"], | |||||
"amount": received_by_label_json["amount"] + Decimal("100000"), | |||||
}, | |||||
) | |||||
# getreceivedbylabel should return updated receive total | # getreceivedbylabel should return updated receive total | ||||
balance = self.nodes[1].getreceivedbylabel(label) | balance = self.nodes[1].getreceivedbylabel(label) | ||||
assert_equal(balance, balance_by_label + Decimal("100000")) | assert_equal(balance, balance_by_label + Decimal("100000")) | ||||
# Create a new label named "mynewlabel" that has a 0 balance | # Create a new label named "mynewlabel" that has a 0 balance | ||||
address = self.nodes[1].getnewaddress() | address = self.nodes[1].getnewaddress() | ||||
self.nodes[1].setlabel(address, "mynewlabel") | self.nodes[1].setlabel(address, "mynewlabel") | ||||
received_by_label_json = [r for r in self.nodes[1].listreceivedbylabel( | received_by_label_json = [ | ||||
0, True) if r["label"] == "mynewlabel"][0] | r | ||||
for r in self.nodes[1].listreceivedbylabel(0, True) | |||||
if r["label"] == "mynewlabel" | |||||
][0] | |||||
# Test includeempty of listreceivedbylabel | # Test includeempty of listreceivedbylabel | ||||
assert_equal(received_by_label_json["amount"], Decimal("0.0")) | assert_equal(received_by_label_json["amount"], Decimal("0.0")) | ||||
# Test getreceivedbylabel for 0 amount labels | # Test getreceivedbylabel for 0 amount labels | ||||
balance = self.nodes[1].getreceivedbylabel("mynewlabel") | balance = self.nodes[1].getreceivedbylabel("mynewlabel") | ||||
assert_equal(balance, Decimal("0.0")) | assert_equal(balance, Decimal("0.0")) | ||||
if __name__ == '__main__': | if __name__ == "__main__": | ||||
ReceivedByTest().main() | ReceivedByTest().main() |