diff --git a/basicswap/bin/run.py b/basicswap/bin/run.py index 156301a..8793240 100755 --- a/basicswap/bin/run.py +++ b/basicswap/bin/run.py @@ -55,10 +55,10 @@ def signal_handler(sig, frame): def startDaemon(node_dir, bin_dir, daemon_bin, opts=[], extra_config={}): daemon_bin = os.path.expanduser(os.path.join(bin_dir, daemon_bin)) - datadir_path = os.path.expanduser(node_dir) # Rewrite litecoin.conf for 0.21.3 + # TODO: Remove ltc_conf_path = os.path.join(datadir_path, 'litecoin.conf') if os.path.exists(ltc_conf_path): config_to_add = ['blockfilterindex=0', 'peerblockfilters=0'] diff --git a/basicswap/config.py b/basicswap/config.py index 09f3be2..ea40bcb 100644 --- a/basicswap/config.py +++ b/basicswap/config.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2019-2023 tecnovert +# Copyright (c) 2019-2024 The Basicswap developers # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. @@ -37,7 +37,4 @@ XMR_BINDIR = os.path.expanduser(os.getenv('XMR_BINDIR', os.path.join(DEFAULT_TES XMRD = os.getenv('XMRD', 'monerod' + bin_suffix) XMR_WALLET_RPC = os.getenv('XMR_WALLET_RPC', 'monero-wallet-rpc' + bin_suffix) -BITCOINCASH_BINDIR = os.path.expanduser(os.getenv('BITCOINCASH_BINDIR', os.path.join(DEFAULT_TEST_BINDIR, 'bitcoincash'))) -BITCOINCASHD = os.getenv('BITCOINCASHD', 'bitcoind' + bin_suffix) -BITCOINCASH_CLI = os.getenv('BITCOINCASH_CLI', 'bitcoin-cli' + bin_suffix) -BITCOINCASH_TX = os.getenv('BITCOINCASH_TX', 'bitcoin-tx' + bin_suffix) +# NOTE: Adding coin definitions here is deprecated. Please add in coin test file. diff --git a/tests/basicswap/common.py b/tests/basicswap/common.py index 05439f0..f36b71b 100644 --- a/tests/basicswap/common.py +++ b/tests/basicswap/common.py @@ -31,19 +31,10 @@ BTC_BASE_RPC_PORT = 32792 BTC_BASE_ZMQ_PORT = 33792 BTC_BASE_TOR_PORT = 33732 -BCH_BASE_PORT = 41792 -BCH_BASE_RPC_PORT = 42792 -BCH_BASE_ZMQ_PORT = 43792 -BCH_BASE_TOR_PORT = 43732 - LTC_BASE_PORT = 34792 LTC_BASE_RPC_PORT = 35792 LTC_BASE_ZMQ_PORT = 36792 -DCR_BASE_PORT = 18555 -DCR_BASE_RPC_PORT = 9110 - - PIVX_BASE_PORT = 34892 PIVX_BASE_RPC_PORT = 35892 PIVX_BASE_ZMQ_PORT = 36892 @@ -51,7 +42,7 @@ PIVX_BASE_ZMQ_PORT = 36892 PREFIX_SECRET_KEY_REGTEST = 0x2e -def prepareDataDir(datadir, node_id, conf_file, dir_prefix, base_p2p_port=BASE_PORT, base_rpc_port=BASE_RPC_PORT, num_nodes=3): +def prepareDataDir(datadir, node_id, conf_file, dir_prefix, base_p2p_port=BASE_PORT, base_rpc_port=BASE_RPC_PORT, num_nodes=3, extra_opts=[]): node_dir = os.path.join(datadir, dir_prefix + str(node_id)) if not os.path.exists(node_dir): os.makedirs(node_dir) @@ -80,8 +71,11 @@ def prepareDataDir(datadir, node_id, conf_file, dir_prefix, base_p2p_port=BASE_P fp.write('acceptnonstdtxn=0\n') fp.write('txindex=1\n') fp.write('wallet=wallet.dat\n') - if not base_p2p_port == BCH_BASE_PORT: - fp.write('findpeers=0\n') + + fp.write('findpeers=0\n') + + for opt in extra_opts: + fp.write(opt + '\n') if base_p2p_port == BTC_BASE_PORT: fp.write('deprecatedrpc=create_bdb\n') diff --git a/tests/basicswap/common_xmr.py b/tests/basicswap/common_xmr.py index da5c0ea..4746065 100644 --- a/tests/basicswap/common_xmr.py +++ b/tests/basicswap/common_xmr.py @@ -29,9 +29,12 @@ from tests.basicswap.common import ( BASE_PORT, BASE_RPC_PORT, BTC_BASE_PORT, BTC_BASE_RPC_PORT, BTC_BASE_TOR_PORT, LTC_BASE_PORT, LTC_BASE_RPC_PORT, - DCR_BASE_PORT, DCR_BASE_RPC_PORT, PIVX_BASE_PORT, ) +from tests.basicswap.extended.test_dcr import ( + DCR_BASE_PORT, DCR_BASE_RPC_PORT, +) + from basicswap.contrib.rpcauth import generate_salt, password_to_hmac import basicswap.config as cfg diff --git a/tests/basicswap/test_bch_xmr.py b/tests/basicswap/test_bch_xmr.py index 06a2f80..495b983 100644 --- a/tests/basicswap/test_bch_xmr.py +++ b/tests/basicswap/test_bch_xmr.py @@ -5,25 +5,25 @@ # Distributed under the MIT software license, see the accompanying # file LICENSE or http://www.opensource.org/licenses/mit-license.php. + import logging +import os import random import unittest -from basicswap.chainparams import XMR_COIN +import basicswap.config as cfg from basicswap.basicswap import ( - BidStates, Coins, SwapTypes, ) -from basicswap.util import ( - COIN, -) +from basicswap.bin.run import startDaemon from basicswap.util.crypto import sha256 from tests.basicswap.test_btc_xmr import BasicSwapTest from tests.basicswap.common import ( - BCH_BASE_RPC_PORT, - wait_for_bid, - wait_for_offer, + make_rpc_func, + prepareDataDir, + stopDaemons, + waitForRPC, ) from basicswap.contrib.test_framework.messages import ( ToHex, @@ -38,8 +38,11 @@ from basicswap.contrib.test_framework.script import ( OP_CHECKSEQUENCEVERIFY, ) from basicswap.interface.bch import BCHInterface +from basicswap.rpc import ( + callrpc_cli, +) from basicswap.util import ensure -from .test_xmr import BaseTest, test_delay_event, callnoderpc +from .test_xmr import test_delay_event, callnoderpc from coincurve.ecdsaotves import ( ecdsaotves_enc_sign, @@ -47,6 +50,16 @@ from coincurve.ecdsaotves import ( ecdsaotves_dec_sig ) +BITCOINCASH_BINDIR = os.path.expanduser(os.getenv('BITCOINCASH_BINDIR', os.path.join(cfg.DEFAULT_TEST_BINDIR, 'bitcoincash'))) +BITCOINCASHD = os.getenv('BITCOINCASHD', 'bitcoind' + cfg.bin_suffix) +BITCOINCASH_CLI = os.getenv('BITCOINCASH_CLI', 'bitcoin-cli' + cfg.bin_suffix) +BITCOINCASH_TX = os.getenv('BITCOINCASH_TX', 'bitcoin-tx' + cfg.bin_suffix) + +BCH_BASE_PORT = 41792 +BCH_BASE_RPC_PORT = 42792 +BCH_BASE_ZMQ_PORT = 43792 +BCH_BASE_TOR_PORT = 43732 + logger = logging.getLogger() @@ -74,50 +87,85 @@ class TestXmrBchSwapInterface(unittest.TestCase): ensure(signature is None, 'signature present') -class TestFunctions(BaseTest): - __test__ = False - start_bch_nodes = True - base_rpc_port = BCH_BASE_RPC_PORT - extra_wait_time = 0 - test_coin_from = Coins.BCH - - def callnoderpc(self, method, params=[], wallet=None, node_id=0): - return callnoderpc(node_id, method, params, wallet, self.base_rpc_port) - - def mineBlock(self, num_blocks=1): - self.callnoderpc('generatetoaddress', [num_blocks, self.bch_addr]) - - def test_05_bch_xmr(self): - logging.info('---------- Test BCH to XMR') - swap_clients = self.swap_clients - offer_id = swap_clients[0].postOffer(Coins.BCH, Coins.XMR, 10 * COIN, 100 * XMR_COIN, 10 * COIN, SwapTypes.XMR_SWAP) - wait_for_offer(test_delay_event, swap_clients[1], offer_id) - offers = swap_clients[1].listOffers(filters={'offer_id': offer_id}) - offer = offers[0] - - swap_clients[1].ci(Coins.XMR).setFeePriority(3) - - bid_id = swap_clients[1].postXmrBid(offer_id, offer.amount_from) - - wait_for_bid(test_delay_event, swap_clients[0], bid_id, BidStates.BID_RECEIVED) - - bid, xmr_swap = swap_clients[0].getXmrBid(bid_id) - assert (xmr_swap) - - swap_clients[0].acceptXmrBid(bid_id) - - wait_for_bid(test_delay_event, swap_clients[0], bid_id, BidStates.SWAP_COMPLETED, wait_for=180) - wait_for_bid(test_delay_event, swap_clients[1], bid_id, BidStates.SWAP_COMPLETED, sent=True) - - swap_clients[1].ci(Coins.XMR).setFeePriority(0) - - class TestBCH(BasicSwapTest): __test__ = True + test_coin = Coins.BCH test_coin_from = Coins.BCH - start_bch_nodes = True base_rpc_port = BCH_BASE_RPC_PORT + bch_daemons = [] + start_ltc_nodes = False + bch_addr = None + + @classmethod + def prepareExtraDataDir(cls, i): + if not cls.restore_instance: + data_dir = prepareDataDir(cfg.TEST_DATADIRS, i, 'bitcoin.conf', 'bch_', base_p2p_port=BCH_BASE_PORT, base_rpc_port=BCH_BASE_RPC_PORT) + + # Rewrite conf file + config_filename: str = os.path.join(cfg.TEST_DATADIRS, 'bch_' + str(i), 'bitcoin.conf') + with open(config_filename, 'r') as fp: + lines = fp.readlines() + with open(config_filename, 'w') as fp: + for line in lines: + if not line.startswith('findpeers'): + fp.write(line) + + if os.path.exists(os.path.join(BITCOINCASH_BINDIR, 'bitcoin-wallet')): + try: + callrpc_cli(BITCOINCASH_BINDIR, data_dir, 'regtest', '-wallet=wallet.dat create', 'bitcoin-wallet') + except Exception as e: + logging.warning('bch: bitcoin-wallet create failed') + raise e + + cls.bch_daemons.append(startDaemon(os.path.join(cfg.TEST_DATADIRS, 'bch_' + str(i)), BITCOINCASH_BINDIR, BITCOINCASHD)) + logging.info('BCH: Started %s %d', BITCOINCASHD, cls.bch_daemons[-1].handle.pid) + waitForRPC(make_rpc_func(i, base_rpc_port=BCH_BASE_RPC_PORT), test_delay_event) + + @classmethod + def addPIDInfo(cls, sc, i): + sc.setDaemonPID(Coins.BCH, cls.bch_daemons[i].handle.pid) + + @classmethod + def prepareExtraCoins(cls): + cls.bch_addr = callnoderpc(0, 'getnewaddress', ['mining_addr'], base_rpc_port=BCH_BASE_RPC_PORT, wallet='wallet.dat') + if not cls.restore_instance: + num_blocks: int = 200 + logging.info('Mining %d BitcoinCash blocks to %s', num_blocks, cls.bch_addr) + callnoderpc(0, 'generatetoaddress', [num_blocks, cls.bch_addr], base_rpc_port=BCH_BASE_RPC_PORT, wallet='wallet.dat') + + @classmethod + def addCoinSettings(cls, settings, datadir, node_id): + + settings['chainclients']['bitcoincash'] = { + 'connection_type': 'rpc', + 'manage_daemon': False, + 'rpcport': BCH_BASE_RPC_PORT + node_id, + 'rpcuser': 'test' + str(node_id), + 'rpcpassword': 'test_pass' + str(node_id), + 'datadir': os.path.join(datadir, 'bch_' + str(node_id)), + 'bindir': BITCOINCASH_BINDIR, + 'use_segwit': False, + } + + @classmethod + def coins_loop(cls): + super(TestBCH, cls).coins_loop() + ci0 = cls.swap_clients[0].ci(cls.test_coin) + try: + if cls.bch_addr is not None: + ci0.rpc_wallet('generatetoaddress', [1, cls.bch_addr]) + except Exception as e: + logging.warning('coins_loop generate {}'.format(e)) + + @classmethod + def tearDownClass(cls): + logging.info('Finalising Bitcoincash Test') + super(TestBCH, cls).tearDownClass() + + stopDaemons(cls.bch_daemons) + cls.bch_daemons.clear() + def mineBlock(self, num_blocks=1): self.callnoderpc('generatetoaddress', [num_blocks, self.bch_addr]) @@ -125,17 +173,17 @@ class TestBCH(BasicSwapTest): return True def test_001_nested_segwit(self): - logging.info('---------- Test {} p2sh nested segwit'.format(self.test_coin_from.name)) + logging.info('---------- Test {} p2sh nested segwit'.format(self.test_coin.name)) logging.info('Skipped') def test_002_native_segwit(self): - logging.info('---------- Test {} p2sh native segwit'.format(self.test_coin_from.name)) + logging.info('---------- Test {} p2sh native segwit'.format(self.test_coin.name)) logging.info('Skipped') def test_003_cltv(self): - logging.info('---------- Test {} cltv'.format(self.test_coin_from.name)) + logging.info('---------- Test {} cltv'.format(self.test_coin.name)) - ci = self.swap_clients[0].ci(self.test_coin_from) + ci = self.swap_clients[0].ci(self.test_coin) self.check_softfork_active('bip65') @@ -196,10 +244,10 @@ class TestBCH(BasicSwapTest): assert (len(tx_wallet['blockhash']) == 64) def test_004_csv(self): - logging.info('---------- Test {} csv'.format(self.test_coin_from.name)) + logging.info('---------- Test {} csv'.format(self.test_coin.name)) swap_clients = self.swap_clients - ci = self.swap_clients[0].ci(self.test_coin_from) + ci = self.swap_clients[0].ci(self.test_coin) self.check_softfork_active('csv') @@ -252,9 +300,9 @@ class TestBCH(BasicSwapTest): assert (len(tx_wallet['blockhash']) == 64) def test_005_watchonly(self): - logging.info('---------- Test {} watchonly'.format(self.test_coin_from.name)) - ci = self.swap_clients[0].ci(self.test_coin_from) - ci1 = self.swap_clients[1].ci(self.test_coin_from) + logging.info('---------- Test {} watchonly'.format(self.test_coin.name)) + ci = self.swap_clients[0].ci(self.test_coin) + ci1 = self.swap_clients[1].ci(self.test_coin) addr = ci.rpc_wallet('getnewaddress', ['watchonly test']) ro = ci1.rpc_wallet('importaddress', [addr, '', False]) @@ -268,10 +316,10 @@ class TestBCH(BasicSwapTest): super().test_006_getblock_verbosity() def test_007_hdwallet(self): - logging.info('---------- Test {} hdwallet'.format(self.test_coin_from.name)) + logging.info('---------- Test {} hdwallet'.format(self.test_coin.name)) test_seed = '8e54a313e6df8918df6d758fafdbf127a115175fdd2238d0e908dd8093c9ac3b' - test_wif = self.swap_clients[0].ci(self.test_coin_from).encodeKey(bytes.fromhex(test_seed)) + test_wif = self.swap_clients[0].ci(self.test_coin).encodeKey(bytes.fromhex(test_seed)) new_wallet_name = random.randbytes(10).hex() self.callnoderpc('createwallet', [new_wallet_name]) self.callnoderpc('sethdseed', [True, test_wif], wallet=new_wallet_name) @@ -402,10 +450,10 @@ class TestBCH(BasicSwapTest): def test_011_p2sh(self): # Not used in bsx for native-segwit coins - logging.info('---------- Test {} p2sh'.format(self.test_coin_from.name)) + logging.info('---------- Test {} p2sh'.format(self.test_coin.name)) swap_clients = self.swap_clients - ci = self.swap_clients[0].ci(self.test_coin_from) + ci = self.swap_clients[0].ci(self.test_coin) script = CScript([2, 2, OP_EQUAL, ]) @@ -449,10 +497,10 @@ class TestBCH(BasicSwapTest): def test_011_p2sh32(self): # Not used in bsx for native-segwit coins - logging.info('---------- Test {} p2sh32'.format(self.test_coin_from.name)) + logging.info('---------- Test {} p2sh32'.format(self.test_coin.name)) swap_clients = self.swap_clients - ci = self.swap_clients[0].ci(self.test_coin_from) + ci = self.swap_clients[0].ci(self.test_coin) script = CScript([2, 2, OP_EQUAL, ]) @@ -495,7 +543,7 @@ class TestBCH(BasicSwapTest): assert (len(tx_wallet['blockhash']) == 64) def test_012_p2sh_p2wsh(self): - logging.info('---------- Test {} p2sh-p2wsh'.format(self.test_coin_from.name)) + logging.info('---------- Test {} p2sh-p2wsh'.format(self.test_coin.name)) logging.info('Skipped') def test_01_a_full_swap(self): @@ -560,7 +608,7 @@ class TestBCH(BasicSwapTest): super().test_05_self_bid_rev() def test_06_preselect_inputs(self): - tla_from = self.test_coin_from.name + tla_from = self.test_coin.name logging.info('---------- Test {} Preselected inputs'.format(tla_from)) logging.info('Skipped') diff --git a/tests/basicswap/test_xmr.py b/tests/basicswap/test_xmr.py index 27f39c1..53e72ae 100644 --- a/tests/basicswap/test_xmr.py +++ b/tests/basicswap/test_xmr.py @@ -84,8 +84,6 @@ from tests.basicswap.common import ( BASE_ZMQ_PORT, BTC_BASE_PORT, BTC_BASE_RPC_PORT, - BCH_BASE_PORT, - BCH_BASE_RPC_PORT, LTC_BASE_PORT, LTC_BASE_RPC_PORT, PREFIX_SECRET_KEY_REGTEST, @@ -101,7 +99,6 @@ logger = logging.getLogger() NUM_NODES = 3 NUM_XMR_NODES = 3 NUM_BTC_NODES = 3 -NUM_BCH_NODES = 3 NUM_LTC_NODES = 3 TEST_DIR = cfg.TEST_DATADIRS @@ -219,18 +216,6 @@ def prepare_swapclient_dir(datadir, node_id, network_key, network_pubkey, with_c 'use_segwit': True, } - if Coins.BCH in with_coins: - settings['chainclients']['bitcoincash'] = { - 'connection_type': 'rpc', - 'manage_daemon': False, - 'rpcport': BCH_BASE_RPC_PORT + node_id, - 'rpcuser': 'test' + str(node_id), - 'rpcpassword': 'test_pass' + str(node_id), - 'datadir': os.path.join(datadir, 'bch_' + str(node_id)), - 'bindir': cfg.BITCOINCASH_BINDIR, - 'use_segwit': False, - } - if cls: cls.addCoinSettings(settings, datadir, node_id) @@ -242,10 +227,6 @@ def btcCli(cmd, node_id=0): return callrpc_cli(cfg.BITCOIN_BINDIR, os.path.join(TEST_DIR, 'btc_' + str(node_id)), 'regtest', cmd, cfg.BITCOIN_CLI) -def bchCli(cmd, node_id=0): - return callrpc_cli(cfg.BITCOINCASH_BINDIR, os.path.join(TEST_DIR, 'bch_' + str(node_id)), 'regtest', cmd, cfg.BITCOINCASH_CLI) - - def ltcCli(cmd, node_id=0): return callrpc_cli(cfg.LITECOIN_BINDIR, os.path.join(TEST_DIR, 'ltc_' + str(node_id)), 'regtest', cmd, cfg.LITECOIN_CLI) @@ -313,20 +294,17 @@ class BaseTest(unittest.TestCase): swap_clients = [] part_daemons = [] btc_daemons = [] - bch_daemons = [] ltc_daemons = [] xmr_daemons = [] xmr_wallet_auth = [] restore_instance = False - start_bch_nodes = False start_ltc_nodes = False start_xmr_nodes = True has_segwit = True xmr_addr = None btc_addr = None - bch_addr = None ltc_addr = None @classmethod @@ -427,20 +405,6 @@ class BaseTest(unittest.TestCase): waitForRPC(make_rpc_func(i, base_rpc_port=BTC_BASE_RPC_PORT), test_delay_event) - for i in range(NUM_BCH_NODES): - if not cls.restore_instance: - data_dir = prepareDataDir(TEST_DIR, i, 'bitcoin.conf', 'bch_', base_p2p_port=BCH_BASE_PORT, base_rpc_port=BCH_BASE_RPC_PORT) - if os.path.exists(os.path.join(cfg.BITCOINCASH_BINDIR, 'bitcoin-wallet')): - try: - callrpc_cli(cfg.BITCOINCASH_BINDIR, data_dir, 'regtest', '-wallet=wallet.dat create', 'bitcoin-wallet') - except Exception as e: - logging.warning('bch: bitcoin-wallet create failed') - raise e - - cls.bch_daemons.append(startDaemon(os.path.join(TEST_DIR, 'bch_' + str(i)), cfg.BITCOINCASH_BINDIR, cfg.BITCOINCASHD)) - logging.info('Bch: Started %s %d', cfg.BITCOINCASHD, cls.part_daemons[-1].handle.pid) - waitForRPC(make_rpc_func(i, base_rpc_port=BCH_BASE_RPC_PORT), test_delay_event) - if cls.start_ltc_nodes: for i in range(NUM_LTC_NODES): if not cls.restore_instance: @@ -502,8 +466,6 @@ class BaseTest(unittest.TestCase): start_nodes.add(Coins.LTC) if cls.start_xmr_nodes: start_nodes.add(Coins.XMR) - if cls.start_bch_nodes: - start_nodes.add(Coins.BCH) if not cls.restore_instance: prepare_swapclient_dir(TEST_DIR, i, cls.network_key, cls.network_pubkey, start_nodes, cls) basicswap_dir = os.path.join(os.path.join(TEST_DIR, 'basicswap_' + str(i))) @@ -521,8 +483,6 @@ class BaseTest(unittest.TestCase): if cls.start_ltc_nodes: sc.setDaemonPID(Coins.LTC, cls.ltc_daemons[i].handle.pid) - if cls.start_bch_nodes: - sc.setDaemonPID(Coins.BCH, cls.bch_daemons[i].handle.pid) cls.addPIDInfo(sc, i) sc.start() @@ -542,8 +502,6 @@ class BaseTest(unittest.TestCase): cls.ltc_addr = cls.swap_clients[0].ci(Coins.LTC).pubkey_to_address(void_block_rewards_pubkey) if cls.start_xmr_nodes: cls.xmr_addr = cls.callxmrnodewallet(cls, 1, 'get_address')['address'] - if cls.start_bch_nodes: - cls.bch_addr = cls.swap_clients[0].ci(Coins.BCH).pubkey_to_address(void_block_rewards_pubkey) else: cls.btc_addr = callnoderpc(0, 'getnewaddress', ['mining_addr', 'bech32'], base_rpc_port=BTC_BASE_RPC_PORT) num_blocks = 400 # Mine enough to activate segwit @@ -592,12 +550,6 @@ class BaseTest(unittest.TestCase): checkForks(callnoderpc(0, 'getblockchaininfo', base_rpc_port=LTC_BASE_RPC_PORT, wallet='wallet.dat')) - if cls.start_bch_nodes: - num_blocks = 200 - cls.bch_addr = callnoderpc(0, 'getnewaddress', ['mining_addr'], base_rpc_port=BCH_BASE_RPC_PORT, wallet='wallet.dat') - logging.info('Mining %d BitcoinCash blocks to %s', num_blocks, cls.bch_addr) - callnoderpc(0, 'generatetoaddress', [num_blocks, cls.bch_addr], base_rpc_port=BCH_BASE_RPC_PORT, wallet='wallet.dat') - num_blocks = 100 if cls.start_xmr_nodes: cls.xmr_addr = cls.callxmrnodewallet(cls, 1, 'get_address')['address'] @@ -660,14 +612,12 @@ class BaseTest(unittest.TestCase): stopDaemons(cls.xmr_daemons) stopDaemons(cls.part_daemons) stopDaemons(cls.btc_daemons) - stopDaemons(cls.bch_daemons) stopDaemons(cls.ltc_daemons) cls.http_threads.clear() cls.swap_clients.clear() cls.part_daemons.clear() cls.btc_daemons.clear() - cls.bch_daemons.clear() cls.ltc_daemons.clear() cls.xmr_daemons.clear() @@ -693,8 +643,6 @@ class BaseTest(unittest.TestCase): def coins_loop(cls): if cls.btc_addr is not None: btcCli('generatetoaddress 1 {}'.format(cls.btc_addr)) - if cls.bch_addr is not None: - bchCli('generatetoaddress 1 {}'.format(cls.bch_addr)) if cls.ltc_addr is not None: ltcCli('generatetoaddress 1 {}'.format(cls.ltc_addr)) if cls.xmr_addr is not None: