From e3d3480878362e5f02af0d80e62d4b6a385a48e5 Mon Sep 17 00:00:00 2001 From: Waylon Jepsen Date: Mon, 14 Aug 2023 14:59:11 -0700 Subject: [PATCH] Here i add back the address determinism, get the tests to pass and revert the premature version changes --- Cargo.toml | 2 +- arbiter-core/Cargo.toml | 2 +- arbiter-core/src/middleware.rs | 25 +++++++++++--- arbiter-core/src/tests/interaction.rs | 26 +++++++-------- arbiter-core/src/tests/mod.rs | 47 +++++++++++++++------------ arbiter-core/src/tests/strategies.rs | 25 +++++--------- 6 files changed, 68 insertions(+), 59 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e8cfd1b64..e17646d9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ # Package configuration [package] name = "arbiter" -version = "1.0.0" +version = "0.3.0" edition = "2021" authors = ["Colin Roberts", "Waylon Jepsen"] diff --git a/arbiter-core/Cargo.toml b/arbiter-core/Cargo.toml index c1bd74c7e..891cd9540 100644 --- a/arbiter-core/Cargo.toml +++ b/arbiter-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "arbiter-core" -version = "1.0.0" +version = "0.3.0" edition = "2021" # Dependencies for the release build diff --git a/arbiter-core/src/middleware.rs b/arbiter-core/src/middleware.rs index 0c733a7d1..081d15d2b 100644 --- a/arbiter-core/src/middleware.rs +++ b/arbiter-core/src/middleware.rs @@ -28,7 +28,8 @@ use ethers::{ Log, }, }; -use rand::{rngs::{StdRng, OsRng}, SeedableRng}; +use ethers::core::rand::{rngs::StdRng, thread_rng, SeedableRng}; +use rand::rngs; use revm::primitives::{CreateScheme, ExecutionResult, Output, TransactTo, TxEnv, B160, U256}; use serde::{de::DeserializeOwned, Serialize}; use thiserror::Error; @@ -85,7 +86,7 @@ impl MiddlewareError for RevmMiddlewareError { } impl RevmMiddleware { - pub fn new(environment: &Environment) -> Self { + pub fn new(environment: &Environment, seed: Option) -> Self { let tx_sender = environment.socket.tx_sender.clone(); let (result_sender, result_receiver) = crossbeam_channel::unbounded(); let connection = Connection { @@ -96,9 +97,23 @@ impl RevmMiddleware { filter_receivers: Arc::new(tokio::sync::Mutex::new(HashMap::new())), }; let provider = Provider::new(connection); - let mut rng = OsRng::default(); - let wallet = Wallet::new(&mut rng); - Self { provider, wallet } + + // let mut rng = thread_rng(); + // let wallet = Wallet::new(&mut rng); + // Self { provider, wallet } + if let Some(seed) = seed { + let mut hasher = Sha256::new(); + hasher.update(seed.clone()); + let hashed = hasher.finalize(); + let mut rng: rngs::StdRng = SeedableRng::from_seed(hashed.into()); + let wallet = Wallet::new(&mut rng); + Self { provider, wallet } + } else { + let mut rng = thread_rng(); + let wallet = Wallet::new(&mut rng); + Self { provider, wallet } + } + } } diff --git a/arbiter-core/src/tests/interaction.rs b/arbiter-core/src/tests/interaction.rs index b835b4ed1..d7ce66ecc 100644 --- a/arbiter-core/src/tests/interaction.rs +++ b/arbiter-core/src/tests/interaction.rs @@ -1,8 +1,10 @@ +use ethers::prelude::Client; + use super::*; #[tokio::test] async fn test_deploy() -> Result<()> { - let (arbiter_token, _environment) = deploy_and_start().await?; + let (arbiter_token, _environment, _) = deploy_and_start().await?; println!("{:?}", arbiter_token); assert_eq!( arbiter_token.address(), @@ -13,7 +15,7 @@ async fn test_deploy() -> Result<()> { #[tokio::test] async fn call() -> Result<()> { - let (arbiter_token, _) = deploy_and_start().await?; + let (arbiter_token, _, _) = deploy_and_start().await?; let admin = arbiter_token.admin(); let output = admin.call().await?; assert_eq!( @@ -25,7 +27,7 @@ async fn call() -> Result<()> { #[tokio::test] async fn transact() -> Result<()> { - let (arbiter_token, _) = deploy_and_start().await?; + let (arbiter_token, _, _) = deploy_and_start().await?; let mint = arbiter_token.mint( Address::from_str(TEST_MINT_TO).unwrap(), ethers::types::U256::from(TEST_MINT_AMOUNT), @@ -58,8 +60,8 @@ async fn transact() -> Result<()> { #[tokio::test] async fn filter_watcher() -> Result<()> { - let (arbiter_token, environment) = deploy_and_start().await.unwrap(); - let client = environment.agents[0].client.clone(); + let (arbiter_token, environment, client) = deploy_and_start().await.unwrap(); + // let client = environment.agents[0].client.clone(); let mut filter_watcher = client.watch(&Filter::default()).await?; let approval = arbiter_token.approve( client.default_sender().unwrap(), @@ -103,8 +105,7 @@ async fn filter_watcher() -> Result<()> { #[tokio::test] async fn filter_address() -> Result<()> { - let (arbiter_token, environment) = deploy_and_start().await.unwrap(); - let client = environment.agents[0].client.clone(); + let (arbiter_token, environment, client) = deploy_and_start().await.unwrap(); let mut default_watcher = client.watch(&Filter::default()).await?; let mut address_watcher = client .watch(&Filter::new().address(arbiter_token.address())) @@ -166,8 +167,7 @@ async fn filter_address() -> Result<()> { #[tokio::test] async fn filter_topics() -> Result<()> { - let (arbiter_token, environment) = deploy_and_start().await.unwrap(); - let client = environment.agents[0].client.clone(); + let (arbiter_token, environment, client) = deploy_and_start().await.unwrap(); let mut default_watcher = client.watch(&Filter::default()).await?; let mut approval_watcher = client .watch(&arbiter_token.approval_filter().filter) @@ -227,17 +227,13 @@ async fn transaction_loop() -> Result<()> { let expected_tx_per_block = dist.sample(); println!("expected_tx_per_block: {}", expected_tx_per_block); - - let agent = Agent::new(TEST_AGENT_NAME); - env.add_agent(agent); - let agent = &env.agents[0]; // tx_0 is the transaction that creates the token contract - let (arbiter_token, _) = deploy_and_start().await?; + let (arbiter_token, env, client) = deploy_and_start().await?; for index in 1..expected_tx_per_block { println!("index: {}", index); let tx = arbiter_token - .mint(agent.client.default_sender().unwrap(), 1000u64.into()) + .mint(client.default_sender().unwrap(), 1000u64.into()) .send() .await .unwrap() diff --git a/arbiter-core/src/tests/mod.rs b/arbiter-core/src/tests/mod.rs index 346f39340..7a57e1510 100644 --- a/arbiter-core/src/tests/mod.rs +++ b/arbiter-core/src/tests/mod.rs @@ -2,8 +2,11 @@ // mod interaction; mod management; +mod strategies; +mod interaction; -use std::str::FromStr; + +use std::{str::FromStr, sync::Arc}; use anyhow::{Ok, Result}; use ethers::{ @@ -29,23 +32,25 @@ pub const TEST_APPROVAL_AMOUNT: u128 = 420; //TODO: Send a tx before and after pausing the environment. -// async fn deploy_and_start() -> Result<(ArbiterToken, Environment)> { -// let mut environment = Environment::new(TEST_ENV_LABEL, 1.0, 1); -// let agent = Agent::new(TEST_AGENT_NAME); -// agent.attach_to_environment(&mut environment); -// environment.run(); -// Ok(( -// ArbiterToken::deploy( -// environment.agents[0].client.clone(), -// ( -// TEST_ARG_NAME.to_string(), -// TEST_ARG_SYMBOL.to_string(), -// TEST_ARG_DECIMALS, -// ), -// )? -// .send() -// .await -// .unwrap(), -// environment, -// )) -// } +async fn deploy_and_start() -> Result<(ArbiterToken, Environment, Arc)> { + let mut environment = Environment::new(TEST_ENV_LABEL, 1.0, 1); + + let signer = Arc::new(RevmMiddleware::new(&environment, Some("0".to_string()))); + + environment.run(); + Ok(( + ArbiterToken::deploy( + signer.clone(), + ( + TEST_ARG_NAME.to_string(), + TEST_ARG_SYMBOL.to_string(), + TEST_ARG_DECIMALS, + ), + )? + .send() + .await + .unwrap(), + environment, + signer, + )) +} diff --git a/arbiter-core/src/tests/strategies.rs b/arbiter-core/src/tests/strategies.rs index 59ca694de..ee86aca6b 100644 --- a/arbiter-core/src/tests/strategies.rs +++ b/arbiter-core/src/tests/strategies.rs @@ -1,20 +1,15 @@ +use std::sync::Arc; + use super::*; -#[test] -fn attach_agent() { - let environment = &mut Environment::new(TEST_ENV_LABEL, 1.0, 1); - let agent = Agent::new(TEST_AGENT_NAME); - agent.attach_to_environment(environment); - assert_eq!(environment.agents[0].name, TEST_AGENT_NAME); -} +const TEST_AGENT_NAME: &str = "test_agent"; #[test] fn simulation_agent_wallet() { let environment = &mut Environment::new(TEST_ENV_LABEL, 1.0, 1); - let agent = Agent::new(TEST_AGENT_NAME); - agent.attach_to_environment(environment); + let client_with_signer = Arc::new(RevmMiddleware::new(environment, Some(TEST_AGENT_NAME.to_string()))); assert_eq!( - environment.agents[0].client.default_sender().unwrap(), + client_with_signer.default_sender().unwrap(), Address::from_str("0x09e12ce98726acd515b68f87f49dc2e5558f6a72").unwrap() ); } @@ -22,13 +17,11 @@ fn simulation_agent_wallet() { #[test] fn multiple_agent_addresses() { let environment = &mut Environment::new(TEST_ENV_LABEL, 1.0, 1); - let agent = Agent::new(TEST_AGENT_NAME); - agent.attach_to_environment(environment); - let agent2 = Agent::new(format!("new_{}", TEST_AGENT_NAME)); - agent2.attach_to_environment(environment); + let client_1_with_signer = Arc::new(RevmMiddleware::new(environment, Some("0".to_string()))); + let client_2_with_signer = Arc::new(RevmMiddleware::new(environment, Some("1".to_string()))); assert_ne!( - environment.agents[0].client.default_sender(), - environment.agents[1].client.default_sender() + client_1_with_signer.default_sender(), + client_2_with_signer.default_sender() ); }