def paint_receipt_summary(emitter, receipt, chain_name: str = None, transaction_type=None, provider_uri: str = None): tx_hash = receipt['transactionHash'].hex() emitter.echo("OK", color='green', nl=False, bold=True) if transaction_type: emitter.echo(f" | {transaction_type} | {tx_hash}", color='yellow', nl=False) else: emitter.echo(f" | {tx_hash}", color='yellow', nl=False) emitter.echo(f" ({receipt['gasUsed']} gas)") emitter.echo( f"Block #{receipt['blockNumber']} | {receipt['blockHash'].hex()}") if not chain_name: blockchain = BlockchainInterfaceFactory.get_interface( provider_uri=provider_uri) chain_name = blockchain.client.chain_name try: url = etherscan_url(item=tx_hash, network=chain_name) except ValueError as e: emitter.log.info("Failed Etherscan URL construction: " + str(e)) else: emitter.echo(f" See {url}\n")
def paint_contract_deployment(emitter, contract_name: str, contract_address: str, receipts: dict, chain_name: str = None, open_in_browser: bool = False): # TODO: switch to using an explicit emitter is_token_contract = contract_name == NUCYPHER_TOKEN_CONTRACT_NAME # Paint heading heading = f'\r{" "*80}\n{contract_name} ({contract_address})' emitter.echo(heading, bold=True) emitter.echo('*' * (42 + 3 + len(contract_name))) try: url = etherscan_url(item=contract_address, network=chain_name, is_token=is_token_contract) except ValueError as e: emitter.log.info("Failed Etherscan URL construction: " + str(e)) else: emitter.echo(f" See {url}\n") # Paint Transactions for tx_name, receipt in receipts.items(): paint_receipt_summary(emitter=emitter, receipt=receipt, chain_name=chain_name, transaction_type=tx_name) if open_in_browser: try: url = etherscan_url(item=contract_address, network=chain_name, is_token=is_token_contract) except ValueError as e: emitter.log.info("Failed Etherscan URL construction: " + str(e)) else: webbrowser.open_new_tab(url)