def __init__(self, source, destination, block_fetcher=None, verbose=False):
self.source = source<EOL>self.destination = destination<EOL>self.block_fetcher = block_fetcher<EOL>self.verbose = verbose<EOL>parent_currency, self.parent_fork_block = crypto_data[source.lower()].get('<STR_LIT>') or [None, <NUM_LIT:0>]<EOL>child_currency, self.child_fork_block = crypto_data[destination.lower()].get('<STR_LIT>') or [None, <NUM_LIT:0>]<EOL>if not parent_currency and not child_currency:<EOL><INDENT>raise Exception("<STR_LIT>" % (<EOL>source.upper(), destination.upper()<EOL>))<EOL><DEDENT>if source.lower() == '<STR_LIT>':<EOL><INDENT>self.pusher = BlockDozer(verbose=verbose)<EOL>self.tx_fetcher = random.choice([BitpayInsight, ChainSo, LocalBitcoinsChain])(verbose=verbose)<EOL><DEDENT>elif source.lower() == '<STR_LIT>':<EOL><INDENT>self.pusher = random.choice(crypto_data['<STR_LIT>']['<STR_LIT>']['<STR_LIT>'])(verbose=verbose)<EOL>self.tx_fetcher = BlockDozer(verbose=verbose)<EOL><DEDENT>else:<EOL><INDENT>raise Exception("<STR_LIT>")<EOL><DEDENT>
`block_fetcher` is a callable that will return a block.
source is cryptocurrency network we get transactions from.
destination is cryptocurrency network we will replay transactions to.