wallet_coinbase_category.py raw
1 #!/usr/bin/env python3
2 # Copyright (c) 2014-present The Bitcoin Core 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 BitcoinTestFramework
11 from test_framework.util import (
12 assert_array_result
13 )
14
15 class CoinbaseCategoryTest(BitcoinTestFramework):
16 def set_test_params(self):
17 self.num_nodes = 1
18 self.setup_clean_chain = True
19
20 def skip_test_if_missing_module(self):
21 self.skip_if_no_wallet()
22
23 def assert_category(self, category, address, txid, skip):
24 assert_array_result(self.nodes[0].listtransactions(skip=skip),
25 {"address": address},
26 {"category": category})
27 assert_array_result(self.nodes[0].listsinceblock()["transactions"],
28 {"address": address},
29 {"category": category})
30 assert_array_result(self.nodes[0].gettransaction(txid)["details"],
31 {"address": address},
32 {"category": category})
33
34 def run_test(self):
35 # Generate one block to an address
36 address = self.nodes[0].getnewaddress()
37 self.generatetoaddress(self.nodes[0], 1, address)
38 hash = self.nodes[0].getbestblockhash()
39 txid = self.nodes[0].getblock(hash)["tx"][0]
40
41 # Coinbase transaction is immature after 1 confirmation
42 self.assert_category("immature", address, txid, 0)
43
44 # Mine another 99 blocks on top
45 self.generate(self.nodes[0], 99)
46 # Coinbase transaction is still immature after 100 confirmations
47 self.assert_category("immature", address, txid, 99)
48
49 # Mine one more block
50 self.generate(self.nodes[0], 1)
51 # Coinbase transaction is now matured, so category is "generate"
52 self.assert_category("generate", address, txid, 100)
53
54 # Orphan block that paid to address
55 self.nodes[0].invalidateblock(hash)
56 # Coinbase transaction is now orphaned
57 self.assert_category("orphan", address, txid, 100)
58
59 if __name__ == '__main__':
60 CoinbaseCategoryTest(__file__).main()
61