git / moonbite-core / test/functional/mweb_wallet_upgrade.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."""Tests that non-HD wallets that are upgraded are able to receive via MWEB"""import osimport shutilfrom test_framework.test_framework import BitcoinTestFrameworkfrom test_framework.ltc_util import create_non_hd_wallet, setup_mweb_chainfrom test_framework.util import assert_equalclass MWEBWalletUpgradeTest(BitcoinTestFramework):    def set_test_params(self):        self.setup_clean_chain = True        self.num_nodes = 2        self.extra_args = [['-whitelist=noban@127.0.0.1'],[]]  # immediate tx relay    def skip_test_if_missing_module(self):        self.skip_if_no_previous_releases()        self.skip_if_no_wallet()    def run_test(self):        node0 = self.nodes[0]        node1 = self.nodes[1]        #        # Mine until MWEB is activated        #        self.log.info("Setting up MWEB chain")        setup_mweb_chain(node0)        self.sync_all()                #        # Create a non-HD wallet using an older litecoin core version        #        self.log.info("Creating non-hd wallet")        nonhd_wallet_dat = create_non_hd_wallet(self.chain, self.options)        #        # Replace node1's wallet with the non-HD wallet.dat        #        self.log.info("Replacing wallet with non-hd wallet.dat")        node1.get_wallet_rpc(self.default_wallet_name).unloadwallet()        upgrade_wallet_dir = os.path.join(node1.datadir, "regtest", "wallets", self.default_wallet_name)        shutil.rmtree(upgrade_wallet_dir)        os.mkdir(upgrade_wallet_dir)        shutil.copy(nonhd_wallet_dat, upgrade_wallet_dir)        node1.loadwallet(self.default_wallet_name)        #        # Upgrade node1's non-HD wallet to the latest version        #        self.log.info("Upgrading wallet")        node1.upgradewallet()                #        # Send to MWEB address of upgraded wallet (node1)        #        self.log.info("Send to upgraded wallet's mweb address")        mweb_addr = node1.getnewaddress(address_type='mweb')        tx1_id = node0.sendtoaddress(mweb_addr, 25)        self.sync_mempools()        #        # Verify transaction is received by upgraded wallet (node1)        #        self.log.info("Verify upgraded wallet lists the transaction")        tx1 = node1.gettransaction(txid=tx1_id)        assert_equal(tx1['confirmations'], 0)        assert_equal(tx1['amount'], 25)        assert_equal(tx1['details'][0]['address'], mweb_addr)        node0.generate(1)        self.sync_all()        #        # Verify that MWEB coins can be spent by upgraded wallet (node1)        #        self.log.info("Spending MWEB coins")        mining_mweb_addr = node0.getnewaddress(address_type='mweb')        tx2_id = node1.sendtoaddress(mining_mweb_addr, 10)        self.sync_mempools()        #        # Mine 1 block and verify transaction confirms        #        self.log.info("Mining block to verify it confirms")        node0.generate(1)        tx2 = node0.gettransaction(txid=tx2_id)        assert_equal(tx2['confirmations'], 1)        assert_equal(tx2['amount'], 10)        assert_equal(tx2['details'][0]['address'], mining_mweb_addr)if __name__ == '__main__':    MWEBWalletUpgradeTest().main()