Skip to content

Commit

Permalink
Here i add back the address determinism, get the tests to pass and re…
Browse files Browse the repository at this point in the history
…vert the premature version changes
  • Loading branch information
0xJepsen committed Aug 14, 2023
1 parent acd983b commit e3d3480
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 59 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"]

Expand Down
2 changes: 1 addition & 1 deletion arbiter-core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "arbiter-core"
version = "1.0.0"
version = "0.3.0"
edition = "2021"

# Dependencies for the release build
Expand Down
25 changes: 20 additions & 5 deletions arbiter-core/src/middleware.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -85,7 +86,7 @@ impl MiddlewareError for RevmMiddlewareError {
}

impl RevmMiddleware {
pub fn new(environment: &Environment) -> Self {
pub fn new(environment: &Environment, seed: Option<String>) -> Self {
let tx_sender = environment.socket.tx_sender.clone();
let (result_sender, result_receiver) = crossbeam_channel::unbounded();
let connection = Connection {
Expand All @@ -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 }
}

}
}

Expand Down
26 changes: 11 additions & 15 deletions arbiter-core/src/tests/interaction.rs
Original file line number Diff line number Diff line change
@@ -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(),
Expand All @@ -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!(
Expand All @@ -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),
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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()))
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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()
Expand Down
47 changes: 26 additions & 21 deletions arbiter-core/src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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::{
Expand All @@ -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<RevmMiddleware>, 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<RevmMiddleware>, Environment, Arc<RevmMiddleware>)> {
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,
))
}
25 changes: 9 additions & 16 deletions arbiter-core/src/tests/strategies.rs
Original file line number Diff line number Diff line change
@@ -1,34 +1,27 @@
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()
);
}

#[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()
);
}

Expand Down

0 comments on commit e3d3480

Please sign in to comment.