diff --git a/Cargo.lock b/Cargo.lock index d3137822e..2196adf7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2919,7 +2919,6 @@ dependencies = [ name = "ethrex-vm" version = "0.1.0" dependencies = [ - "alloy-rpc-types-eth", "bincode", "bytes", "cfg-if", diff --git a/crates/l2/contracts/deployer.rs b/crates/l2/contracts/deployer.rs index a4be03df2..733ab3764 100644 --- a/crates/l2/contracts/deployer.rs +++ b/crates/l2/contracts/deployer.rs @@ -1,9 +1,12 @@ use bytes::Bytes; use colored::Colorize; use ethereum_types::{Address, H160, H256}; +use ethrex_common::U256; use ethrex_l2::utils::config::errors; use ethrex_l2::utils::config::{read_env_as_lines, read_env_file, write_env}; +use ethrex_l2::utils::test_data_io::read_genesis_file; use ethrex_l2_sdk::calldata::{encode_calldata, Value}; +use ethrex_l2_sdk::get_address_from_secret_key; use ethrex_rpc::clients::eth::{ errors::{CalldataEncodeError, EthClientError}, eth_sender::Overrides, @@ -12,6 +15,7 @@ use ethrex_rpc::clients::eth::{ use keccak_hash::keccak; use secp256k1::SecretKey; use spinoff::{spinner, spinners, Color, Spinner}; +use std::fs; use std::{ path::{Path, PathBuf}, process::Command, @@ -102,6 +106,7 @@ async fn main() -> Result<(), DeployError> { &setup_result.eth_client, ) .await?; + make_deposits(bridge_address, &setup_result.eth_client).await; let env_lines = read_env_as_lines().map_err(DeployError::EnvFileError)?; @@ -598,6 +603,71 @@ async fn wait_for_transaction_receipt( Ok(()) } +async fn make_deposits(bridge: Address, eth_client: &EthClient) { + let genesis = read_genesis_file("../../test_data/genesis-l1.json"); + let Ok(pks) = fs::read_to_string("../../test_data/private_keys_l1.txt") else { + return; + }; + let private_keys: Vec = pks + .lines() + .filter(|line| !line.trim().is_empty()) + .map(|line| line.trim().to_string()) + .collect(); + + for pk in private_keys.iter() { + let pk_str = pk.strip_prefix("0x").unwrap_or(pk); + let Ok(pk_h256) = pk_str.parse::() else { + continue; + }; + let pk_bytes = pk_h256.as_bytes(); + let Ok(secret_key) = SecretKey::from_slice(pk_bytes) else { + continue; + }; + let Ok(address) = get_address_from_secret_key(&secret_key) else { + continue; + }; + let values = vec![Value::Address(address)]; + let Ok(calldata) = encode_calldata("deposit(address)", &values) else { + continue; + }; + let Some(acc) = genesis.alloc.get(&address) else { + dbg!("No hay address en genesis ⏭️", address); + continue; + }; + let value_to_deposit = acc + .balance + .checked_div(U256::from_str("2").unwrap_or(U256::zero())) + .unwrap_or(U256::zero()); + let overrides = Overrides { + value: Some(value_to_deposit), + from: Some(address), + gas_limit: Some(21000 * 5), + ..Overrides::default() + }; + + let Ok(build) = eth_client + .build_eip1559_transaction(bridge, address, Bytes::from(calldata), overrides, 1) + .await + else { + continue; + }; + + match eth_client + .send_eip1559_transaction(&build, &secret_key) + .await + { + Ok(_) => { + dbg!("Se completó deposit", address, value_to_deposit); + } + Err(e) => { + dbg!("Falló el deposit 🚩", address, value_to_deposit); + dbg!(e); + continue; + } + } + } +} + #[allow(clippy::unwrap_used)] #[allow(clippy::expect_used)] #[allow(clippy::panic)] diff --git a/crates/l2/proposer/l1_watcher.rs b/crates/l2/proposer/l1_watcher.rs index 4b777d5b8..62ff6c547 100644 --- a/crates/l2/proposer/l1_watcher.rs +++ b/crates/l2/proposer/l1_watcher.rs @@ -40,7 +40,7 @@ impl L1Watcher { ) -> Result { let eth_client = EthClient::new(ð_config.rpc_url); let l2_client = EthClient::new("http://localhost:1729"); - let last_block_fetched = + let last_block_fetched: U256 = EthClient::get_last_fetched_l1_block(ð_client, watcher_config.bridge_address) .await? .into(); @@ -79,7 +79,6 @@ impl L1Watcher { if logs.is_empty() { continue; } - let pending_deposit_logs = self.get_pending_deposit_logs().await?; let _deposit_txs = self .process_logs(logs, &pending_deposit_logs, store, blockchain) diff --git a/test_data/private_keys_l1.txt b/test_data/private_keys_l1.txt new file mode 100644 index 000000000..9a1763ac8 --- /dev/null +++ b/test_data/private_keys_l1.txt @@ -0,0 +1,21 @@ +0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31 +0x39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d +0x53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710 +0xab63b23eb7941c1251757e24b3d2350d2bc05c3c388d06f8fe6feafefb1e8c70 +0x5d2344259f42259f82d2c140aa66102ba89b57b4883ee441a8b312622bd42491 +0x27515f805127bebad2fb9b183508bdacb8c763da16f54e0678b16e8f28ef3fff +0x7ff1a4c1d57e5e784d327c4c7651e952350bc271f156afb3d00d20f5ef924856 +0x3a91003acaf4c21b3953d94fa4a6db694fa69e5242b2e37be05dd82761058899 +0xbb1d0f125b4fb2bb173c318cdead45468474ca71474e2247776b2b4c0fa2d3f5 +0x850643a0224065ecce3882673c21f56bcf6eef86274cc21cadff15930b59fc8c +0x94eb3102993b41ec55c241060f47daa0f6372e2e3ad7e91612ae36c364042e44 +0xdaf15504c22a352648a71ef2926334fe040ac1d5005019e09f6c979808024dc7 +0xeaba42282ad33c8ef2524f07277c03a776d98ae19f581990ce75becb7cfa1c23 +0x3fd98b5187bf6526734efaa644ffbb4e3670d66f5d0268ce0323ec09124bff61 +0x5288e2f440c7f0cb61a9be8afdeb4295f786383f96f5e35eb0c94ef103996b64 +0xf296c7802555da2a5a662be70e078cbd38b44f96f8615ae529da41122ce8db05 +0xbf3beef3bd999ba9f2451e06936f0423cd62b815c9233dd3bc90f7e02a1e8673 +0x6ecadc396415970e91293726c3f5775225440ea0844ae5616135fd10d66b5954 +0xa492823c3e193d6c595f37a18e3c06650cf4c74558cc818b16130b293716106f +0xc5114526e042343c6d1899cad05e1c00ba588314de9b96929914ee0df18d46b2 +0x04b9f63ecf84210c5366c66d68fa1f5da1fa4f634fad6dfc86178e4d79ff9e59