Skip to content

Commit

Permalink
feat: add provider population
Browse files Browse the repository at this point in the history
  • Loading branch information
ts0yu authored Aug 11, 2024
1 parent 3124bc9 commit 3d9ee14
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 8 deletions.
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ version = "0.1.0"
edition = "2021"

[dependencies]
alloy = { version = "0.2.1", features = ["full", "node-bindings"] }
alloy = { version = "0.2.1", features = ["full", "node-bindings", "json"] }
alloy-contract = "0.2.1"
alloy-sol-macro = "0.7.7"
alloy-sol-types = "0.7.7"
rand = "0.8.5"
Expand Down
37 changes: 31 additions & 6 deletions src/arena.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
use std::collections::HashMap;

use alloy::{providers::ProviderBuilder, signers::local::PrivateKeySigner};

use super::*;
use crate::{config::Config, feed::Feed, strategy::Strategy};
use crate::types::PoolKey;
use crate::{config::Config, feed::Feed, strategy::Strategy, types::PoolKey};

pub struct Arena {
pub env: AnvilInstance,
pub strategies: Vec<Box<dyn Strategy>>,
pub pool: PoolKey,
pub feed: Box<dyn Feed>,

providers: HashMap<usize, AnvilProvider>,
}

impl Arena {
pub fn run(&mut self, config: Config) {
for i in self.strategies.iter_mut() {
// i.init();
for (idx, strategy) in self.strategies.iter_mut().enumerate() {
strategy.init(self.providers[&idx].clone());
}

for step in 0..config.steps {
for i in self.strategies.iter_mut() {
// i.process();
for (idx, strategy) in self.strategies.iter_mut().enumerate() {
strategy.process(self.providers[&idx].clone());
}

self.feed.step();
Expand All @@ -30,6 +35,8 @@ pub struct ArenaBuilder {
pub strategies: Vec<Box<dyn Strategy>>,
pub pool: Option<PoolKey>,
pub feed: Option<Box<dyn Feed>>,

providers: Option<HashMap<usize, AnvilProvider>>,
}

impl ArenaBuilder {
Expand All @@ -39,6 +46,7 @@ impl ArenaBuilder {
strategies: Vec::new(),
pool: None,
feed: None,
providers: None,
}
}

Expand All @@ -58,11 +66,28 @@ impl ArenaBuilder {
}

pub fn build(self) -> Arena {
let mut providers = HashMap::new();

for i in 0..10 {
let signer: PrivateKeySigner = self.env.keys()[i].clone().into();
let wallet = EthereumWallet::from(signer);

let rpc_url = self.env.endpoint().parse().unwrap();

let provider = ProviderBuilder::new()
.with_recommended_fillers()
.wallet(wallet)
.on_http(rpc_url);

providers.insert(i, provider).unwrap();
}

Arena {
env: self.env,
strategies: self.strategies,
pool: self.pool.unwrap(),
feed: self.feed.unwrap(),
providers,
}
}
}
9 changes: 8 additions & 1 deletion src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,11 @@ sol! {
int24 tickSpacing;
address hooks;
}
}
}

sol! {
#[sol(rpc)]
#[derive(Debug)]
PoolManager,
"contracts/v4-core/out/PoolManager.sol/PoolManager.json"
}

0 comments on commit 3d9ee14

Please sign in to comment.