git / moonbite-core / test/functional/wallet_coinbase_category.py · raw

#!/usr/bin/env python3# Copyright (c) 2014-2018 The Bitcoin Core developers# Distributed under the MIT software license, see the accompanying# file COPYING or http://www.opensource.org/licenses/mit-license.php."""Test coinbase transactions return the correct categories.Tests listtransactions, listsinceblock, and gettransaction."""from test_framework.test_framework import BitcoinTestFrameworkfrom test_framework.util import (    assert_array_result)class CoinbaseCategoryTest(BitcoinTestFramework):    def set_test_params(self):        self.num_nodes = 1    def skip_test_if_missing_module(self):        self.skip_if_no_wallet()    def assert_category(self, category, address, txid, skip):        assert_array_result(self.nodes[0].listtransactions(skip=skip),                            {"address": address},                            {"category": category})        assert_array_result(self.nodes[0].listsinceblock()["transactions"],                            {"address": address},                            {"category": category})        assert_array_result(self.nodes[0].gettransaction(txid)["details"],                            {"address": address},                            {"category": category})    def run_test(self):        # Generate one block to an address        address = self.nodes[0].getnewaddress()        self.nodes[0].generatetoaddress(1, address)        hash = self.nodes[0].getbestblockhash()        txid = self.nodes[0].getblock(hash)["tx"][0]        # Coinbase transaction is immature after 1 confirmation        self.assert_category("immature", address, txid, 0)        # Mine another 99 blocks on top        self.nodes[0].generate(99)        # Coinbase transaction is still immature after 100 confirmations        self.assert_category("immature", address, txid, 99)        # Mine one more block        self.nodes[0].generate(1)        # Coinbase transaction is now matured, so category is "generate"        self.assert_category("generate", address, txid, 100)        # Orphan block that paid to address        self.nodes[0].invalidateblock(hash)        # Coinbase transaction is now orphaned        self.assert_category("orphan", address, txid, 100)if __name__ == '__main__':    CoinbaseCategoryTest().main()