From 1636439b77fc162de20ffcf57e565be7d58bb033 Mon Sep 17 00:00:00 2001 From: Anthony Graignic <anthony.graignic@uca.fr> Date: Tue, 4 Jul 2023 15:28:16 +0200 Subject: [PATCH] Init toolbox bin --- Cargo.toml | 9 ++++++ bin/toolbox.rs | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 bin/toolbox.rs diff --git a/Cargo.toml b/Cargo.toml index c8e1bf3..522083d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,6 +5,15 @@ authors = ["Anthony Graignic <anthony.graignic@uca.fr>"] edition = "2021" description = "Transaction and Behavior injector for Ecomobicoin networks" license = "AGPL-3.0-only" +default-run="main" + +[[bin]] +path = "src/main.rs" +name = "main" + +[[bin]] +path = "bin/toolbox.rs" +name = "toolbox" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/bin/toolbox.rs b/bin/toolbox.rs new file mode 100644 index 0000000..680535c --- /dev/null +++ b/bin/toolbox.rs @@ -0,0 +1,87 @@ +use clap::{Parser, Subcommand}; +use dotenvy::dotenv; +use ethereum_types::Address; +use ethers::prelude::*; +use ethers::{providers::Provider, signers::LocalWallet}; +use ethnum::U256; +use tracing::info; + +#[derive(Parser)] +#[clap( + name = "truite-injector-toolbox", + about = "Toolbox for injecting tx and bx in an Ecomobicoin node.", + author, version, + long_about = None +)] +#[command(propagate_version = true)] +struct Opts { + #[command(subcommand)] + command: SubCommand, +} + +#[derive(Subcommand, Debug)] +enum SubCommand { + /// Send tx + Tx { + to: Address, + #[clap(long, default_value_t = U256::from(210_000u128))] + value: U256, + }, + /// Send bx + Bx { + #[clap(long)] + quantity: Option<U256>, + #[clap(long)] + timestamp: u64, + #[clap(long)] + data: Option<Bytes>, + }, + /// Feed a block + Block {}, +} +#[tokio::main] +async fn main() { + let cli = Opts::parse(); + + dotenv().expect(".env file not found"); + // for (key, value) in env::vars() { + // println!("{key}: {value}"); + // } + + let signing_key = std::env::var("SIGNING_KEY").unwrap(); + let signer: LocalWallet = signing_key.parse::<LocalWallet>().unwrap(); + + let rpc_url: String = + std::env::var("RPC_URL").unwrap_or_else(|_| "http://127.0.0.1:8545".into()); + let provider = Provider::<Http>::try_from(rpc_url.clone()).unwrap(); + + let chain_id: u64 = std::env::var("CHAIN_ID") + .unwrap_or_else(|_| String::from("63")) + .parse::<u64>() + .unwrap(); + + let block_number: U64 = provider.get_block_number().await.unwrap_or_else(|_| { + panic!( + "Failed to get block number from {:?}, cannot go further", + rpc_url + ) + }); + // connect the wallet to the provider + let client = SignerMiddleware::new(provider, signer.clone().with_chain_id(chain_id)); + info!( + "Connected to chain id: {:?}, rpc: {:?}, latest block number: {:?}.", + chain_id, rpc_url, block_number + ); + + match &cli.command { + SubCommand::Tx { to, value } => { + println!("tx") + } + SubCommand::Bx { + quantity, + timestamp, + data, + } => println!("bx"), + SubCommand::Block {} => println!("bloc"), + } +} -- GitLab