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