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

#!/usr/bin/env python3# Copyright (c) 2021 The Litecoin Core developers# Distributed under the MIT software license, see the accompanying# file COPYING or http://www.opensource.org/licenses/mit-license.php."""MWEB block weight test"""from decimal import Decimalfrom test_framework.test_framework import BitcoinTestFrameworkfrom test_framework.util import assert_equalclass MWEBWeightTest(BitcoinTestFramework):    def set_test_params(self):        self.setup_clean_chain = True        self.rpc_timeout = 120        self.num_nodes = 3        self.extra_args = [["-spendzeroconfchange=0"]] * self.num_nodes    def skip_test_if_missing_module(self):        self.skip_if_no_wallet()    def run_test(self):        self.log.info("Create some blocks")        self.nodes[0].generate(101)        self.log.info("Pegin some coins - activate MWEB")        addr = self.nodes[0].getnewaddress(address_type='mweb')        self.nodes[0].sendtoaddress(addr, 1)        self.sync_all()        self.nodes[1].generate(700)        self.sync_all()        # Workaround for syncing issue        self.nodes[2].generate(1)        self.sync_all()        self.nodes[2].generate(700)        self.sync_all()        # Max number of MWEB transactions in a block (21000/39)        tx_limit = 538        self.log.info("Create transactions up to the max block weight")        addr = self.nodes[0].getnewaddress(address_type='mweb')        for x in range(0, tx_limit):            self.nodes[1].sendtoaddress(addr, 1)        assert_equal(len(self.nodes[1].getrawmempool()), tx_limit)        self.log.info("Create a block")        self.nodes[1].generate(1)        self.sync_all()        self.log.info("Check mempool is empty")        assert_equal(len(self.nodes[1].getrawmempool()), 0)        self.log.info("Check UTXOs have matured")        utxos = self.nodes[0].listunspent(addresses=[addr])        assert_equal(len(utxos), tx_limit)        assert all(x['amount'] == 1 and x['spendable'] for x in utxos)        self.log.info("Create transactions exceeding the max block weight")        addr = self.nodes[0].getnewaddress(address_type='mweb')        for x in range(0, tx_limit + 1):            self.nodes[2].sendtoaddress(addr, 0.01)        assert_equal(len(self.nodes[2].getrawmempool()), tx_limit + 1)        self.log.info("Create a block")        self.nodes[2].generate(1)        self.sync_all()        self.log.info("Check mempool is not empty")        assert_equal(len(self.nodes[2].getrawmempool()), 1)        self.log.info("Check UTXOs have matured")        utxos = self.nodes[0].listunspent(addresses=[addr])        assert_equal(len(utxos), tx_limit)        assert all(x['amount'] == Decimal('0.01') and x['spendable'] for x in utxos)if __name__ == '__main__':    MWEBWeightTest().main()