def cli(ctx, config_path, no_spinner: bool): config = parse_config(ctx, config_path, Config) print_config_and_exit(ctx, config) checker = AccountsChecker(config, no_spinner) result = checker.process() print_json(result)
def cli(ctx, config_path, broadcast: bool): config = parse_config(ctx, config_path, Config) config.abi = file_validator(config.abi, config_path) print_config_and_exit(ctx, config) function_args = yaml.full_load( config.function_args) if config.function_args else [] data = eth_abi.encode_function_input(yaml.full_load(config.abi), config.function_name, function_args) if config.nonce is None: config.nonce = get_nonce_or_exit( config.node, eth_account.private_to_address(config.private_key)) signed_tx = eth_tx.sign_tx( nonce=config.nonce, gas_price=config.gas_price, gas=config.gas, private_key=config.private_key, chain_id=config.chain_id, data=data, value=config.value, to=config.contract, ) if broadcast: res = eth_rpc.eth_send_raw_transaction(config.node, signed_tx.raw_tx) if res.is_ok(): print_json({"tx_hash": res.ok}) else: print_json({"error": res.error}) else: decoded = eth_utils.to_human_readable_tx( eth_tx.decode_raw_tx(signed_tx.raw_tx)) print_json({"signed": signed_tx.dict(), "decoded": decoded})
def cli(ctx, config_path, curl): config = parse_config(ctx, config_path, Config) print_config_and_exit(ctx, config) if curl: data = {"jsonrpc": "2.0", "method": config.method, "params": config.params, "id": config.id} data_str = json.dumps(data) click.echo(f"curl -H 'Content-Type: application/json' -X POST --data '{data_str}' {config.node}") exit(0) res = eth_rpc.rpc_call(node=config.node, method=config.method, params=config.params) print_json(res.ok_or_error)
def cli(ctx, config_path): config = parse_config(ctx, config_path, Config) print_config_and_exit(ctx, config) tasks = ParallelTasks() for node in config.nodes: tasks.add_task(node, _get_node_info, args=(node, )) tasks.execute() result = {} for node in config.nodes: result[node] = tasks.result[node] print_json(result)
def cli(ctx, config_path): config = parse_config(ctx, config_path, Config) print_config_and_exit(ctx, config) if not eth_account.is_valid_private_key(config.from_, config.private_key): print_json({"error": "wrong private key"}) exit(1) raw_tx = eth_tx.sign_tx(**config.dict(exclude={"from_"})) print_json( raw_tx.dict() | { "decoded": eth_utils.to_human_readable_tx(eth_tx.decode_raw_tx(raw_tx.raw_tx)) })
def cli(ctx, config_path, print_data): config = parse_config(ctx, config_path, Config) config.abi = file_validator(config.abi, config_path) print_config_and_exit(ctx, config) function_args = yaml.full_load(config.function_args) if config.function_args else [] data = eth_abi.encode_function_input(yaml.full_load(config.abi), config.function_name, function_args) if print_data: click.echo(data) exit(0) res = eth_rpc.eth_call(config.node, config.address, data) if res.is_ok(): click.echo(res.ok) else: click.echo(f"error: {res.error}")
def cli(ctx, config_path, broadcast: bool): config = parse_config(ctx, config_path, Config) print_config_and_exit(ctx, config) txs = sign_txs(config) result: list[Any] = [] if broadcast: for tx in txs: res = eth_rpc.eth_send_raw_transaction(config.random_node, tx.raw_tx) result.append([tx.tx_hash, "ok" if res.is_ok() else res.error]) else: for tx in txs: res = eth_tx.decode_raw_tx(tx.raw_tx) result.append({ "raw": tx.raw_tx, "tx": eth_utils.to_human_readable_tx(res) }) print_json(result)