wallet_coinbase_category.py raw
1 #!/usr/bin/env python3
2 # Copyright (c) 2014-2022 The Limenka developers
3 # Distributed under the MIT software license, see the accompanying
4 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 """Test coinbase transactions return the correct categories.
6
7 Tests listtransactions, listsinceblock, and gettransaction.
8 """
9
10 from test_framework.test_framework import LimenkaTestFramework
11 from test_framework.util import (
12 assert_array_result
13 )
14
15 class CoinbaseCategoryTest(LimenkaTestFramework):
16 def add_options(self, parser):
17 self.add_wallet_options(parser)
18
19 def set_test_params(self):
20 self.num_nodes = 1
21 self.setup_clean_chain = True
22
23 def skip_test_if_missing_module(self):
24 self.skip_if_no_wallet()
25
26 def assert_category(self, category, address, txid, skip):
27 assert_array_result(self.nodes[0].listtransactions(skip=skip),
28 {"address": address},
29 {"category": category})
30 assert_array_result(self.nodes[0].listsinceblock()["transactions"],
31 {"address": address},
32 {"category": category})
33 assert_array_result(self.nodes[0].gettransaction(txid)["details"],
34 {"address": address},
35 {"category": category})
36
37 def run_test(self):
38 # Generate one block to an address
39 address = self.nodes[0].getnewaddress()
40 self.generatetoaddress(self.nodes[0], 1, address)
41 hash = self.nodes[0].getbestblockhash()
42 txid = self.nodes[0].getblock(hash)["tx"][0]
43
44 # Coinbase transaction is immature after 1 confirmation
45 self.assert_category("immature", address, txid, 0)
46
47 # Mine another 99 blocks on top
48 self.generate(self.nodes[0], 99)
49 # Coinbase transaction is still immature after 100 confirmations
50 self.assert_category("immature", address, txid, 99)
51
52 # Mine one more block
53 self.generate(self.nodes[0], 1)
54 # Coinbase transaction is now matured, so category is "generate"
55 self.assert_category("generate", address, txid, 100)
56
57 # Orphan block that paid to address
58 self.nodes[0].invalidateblock(hash)
59 # Coinbase transaction is now orphaned
60 self.assert_category("orphan", address, txid, 100)
61
62 if __name__ == '__main__':
63 CoinbaseCategoryTest(__file__).main()
64