From e1aac32d0d117ddcb929008b0d2cdab239d1c579 Mon Sep 17 00:00:00 2001 From: supernovahs Date: Thu, 13 Jun 2024 18:27:57 +0530 Subject: [PATCH 1/5] avsregistry --- Cargo.lock | 8 +++ Cargo.toml | 1 + crates/chainio/clients/avsregistry/Cargo.toml | 3 +- crates/chainio/clients/avsregistry/src/lib.rs | 12 ---- .../chainio/clients/avsregistry/src/reader.rs | 72 +++++-------------- .../clients/avsregistry/src/subscriber.rs | 39 +++++----- .../chainio/clients/avsregistry/src/writer.rs | 55 ++++++-------- crates/chainio/clients/elcontracts/Cargo.toml | 2 +- crates/utils/Cargo.toml | 5 ++ crates/utils/src/lib.rs | 51 ++++++++++++- 10 files changed, 124 insertions(+), 124 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b5b46209..e3d3fc94 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1358,6 +1358,7 @@ dependencies = [ "eigen-crypto-bls", "eigen-crypto-bn254", "eigen-types", + "eigen-utils", "futures", "hex", "num-bigint", @@ -1539,6 +1540,13 @@ dependencies = [ [[package]] name = "eigen-utils" version = "0.0.1-alpha" +dependencies = [ + "alloy-network", + "alloy-provider", + "alloy-signer-wallet", + "alloy-transport-http", + "reqwest 0.12.4", +] [[package]] name = "either" diff --git a/Cargo.toml b/Cargo.toml index cbda2754..03a55d5a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,6 +44,7 @@ rustdoc.all = "warn" ethers = "2.0.14" ark-ff = "0.4.0" eyre = "0.6.12" +reqwest = "0.12.4" reth = {git = "https://github.com/paradigmxyz/reth"} prometheus-client = "0.22.2" bn254 = {git = "https://github.com/sedaprotocol/bn254"} diff --git a/crates/chainio/clients/avsregistry/Cargo.toml b/crates/chainio/clients/avsregistry/Cargo.toml index b43d6888..6e9bf62e 100644 --- a/crates/chainio/clients/avsregistry/Cargo.toml +++ b/crates/chainio/clients/avsregistry/Cargo.toml @@ -16,13 +16,14 @@ alloy-transport-http.workspace = true alloy-rpc-types.workspace = true serde_json = "1.0.114" num-bigint = "0.4.4" -reqwest = "0.12.4" +reqwest.workspace = true eigen-types.workspace = true eigen-crypto-bls.workspace = true ark-ff.workspace = true eigen-crypto-bn254.workspace = true eigen-client-elcontracts.workspace = true eigen-chainio-utils.workspace = true +eigen-utils.workspace = true ark-bn254 = "0.4.0" thiserror.workspace = true tracing.workspace = true diff --git a/crates/chainio/clients/avsregistry/src/lib.rs b/crates/chainio/clients/avsregistry/src/lib.rs index e3509f1a..d729ddc8 100644 --- a/crates/chainio/clients/avsregistry/src/lib.rs +++ b/crates/chainio/clients/avsregistry/src/lib.rs @@ -13,15 +13,3 @@ pub mod writer; /// Avs registry error message pub mod error; - -// /// cast sig-event "NewPubkeyRegistration(address,(uint256,uint256),(uint256[2],uint256[2]))" -// pub const NEW_BLS_APK_REGISTRATION_EVENT_SIGNATURE: H256 = H256([ -// 0xe3, 0xfb, 0x66, 0x13, 0xaf, 0x2e, 0x89, 0x30, 0xcf, 0x85, 0xd4, 0x7f, 0xcf, 0x6d, 0xb1, 0x01, -// 0x92, 0x22, 0x4a, 0x64, 0xc6, 0xcb, 0xe8, 0x02, 0x3e, 0x0e, 0xee, 0x1b, 0xa3, 0x82, 0x80, 0x41, -// ]); - -// /// cast sig-event "OperatorSocketUpdate(bytes32,string)" -// pub const OPERATOR_SOCKET_UPDATE_EVENT_SIGNATURE: H256 = H256([ -// 0xec, 0x29, 0x63, 0xab, 0x21, 0xc1, 0xe5, 0x0e, 0x1e, 0x58, 0x2a, 0xa5, 0x42, 0xaf, 0x2e, 0x4b, -// 0xf7, 0xbf, 0x38, 0xe6, 0xe1, 0x40, 0x3c, 0x27, 0xb4, 0x2e, 0x1c, 0x5d, 0x6e, 0x62, 0x1e, 0xaa, -// ]); diff --git a/crates/chainio/clients/avsregistry/src/reader.rs b/crates/chainio/clients/avsregistry/src/reader.rs index 21166939..bf55a8f8 100644 --- a/crates/chainio/clients/avsregistry/src/reader.rs +++ b/crates/chainio/clients/avsregistry/src/reader.rs @@ -1,10 +1,11 @@ use crate::error::AvsRegistryError; use alloy_primitives::{Address, Bytes, FixedBytes, B256, U256}; -use alloy_provider::{Provider, ProviderBuilder}; +use alloy_provider::Provider; use alloy_rpc_types::Filter; use alloy_sol_types::sol; use ark_ff::Zero; use eigen_types::operator::{bitmap_to_quorum_ids, BLSApkRegistry, OperatorPubKeys}; +use eigen_utils::get_provider; use num_bigint::BigInt; use std::collections::HashMap; use std::fmt::Debug; @@ -75,10 +76,7 @@ impl AvsRegistryChainReader { operator_state_retriever_addr: Address, stake_registry_addr: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, &provider); @@ -103,10 +101,7 @@ impl AvsRegistryChainReader { } async fn get_quorum_count(&self) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); @@ -129,10 +124,7 @@ impl AvsRegistryChainReader { block_number: u32, quorum_numbers: Bytes, ) -> Result>, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_operator_state_retriever = OperatorStateRetriever::new(self.operator_state_retriever, provider); @@ -159,10 +151,7 @@ impl AvsRegistryChainReader { operator_id: B256, ) -> Result<(U256, Vec>), Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_operator_state_retriever = OperatorStateRetriever::new(self.operator_state_retriever, provider); @@ -196,10 +185,8 @@ impl AvsRegistryChainReader { &self, quorum_numbers: Bytes, ) -> Result>, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let current_block_number_result = provider.get_block_number().await; match current_block_number_result { @@ -260,10 +247,8 @@ impl AvsRegistryChainReader { operator_id: B256, ) -> Result<(Vec, Vec>), Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let current_block_number = provider.get_block_number().await?; if current_block_number > u32::MAX.into() { @@ -283,10 +268,7 @@ impl AvsRegistryChainReader { &self, operator_id: B256, ) -> Result, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, &provider); @@ -322,10 +304,7 @@ impl AvsRegistryChainReader { quorum_numbers: Vec, non_signer_operator_ids: Vec>, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_operator_state_retriever = OperatorStateRetriever::new(self.operator_state_retriever, provider); @@ -348,10 +327,7 @@ impl AvsRegistryChainReader { &self, operator_address: Address, ) -> Result, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); @@ -369,10 +345,7 @@ impl AvsRegistryChainReader { &self, operator_id: [u8; 32], ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, &provider); @@ -392,10 +365,7 @@ impl AvsRegistryChainReader { &self, operator_address: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); @@ -418,10 +388,8 @@ impl AvsRegistryChainReader { start_block: u64, mut stop_block: u64, ) -> Result<(Vec
, Vec), Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let query_block_range = 1024; let current_block_number = provider.get_block_number().await?; if stop_block.is_zero() { @@ -478,10 +446,8 @@ impl AvsRegistryChainReader { start_block: u64, stop_block: u64, ) -> Result, String>, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let mut operator_id_to_socket = HashMap::new(); let query_block_range = 10000; diff --git a/crates/chainio/clients/avsregistry/src/subscriber.rs b/crates/chainio/clients/avsregistry/src/subscriber.rs index 6106cd59..8ba623c9 100644 --- a/crates/chainio/clients/avsregistry/src/subscriber.rs +++ b/crates/chainio/clients/avsregistry/src/subscriber.rs @@ -15,6 +15,8 @@ use alloy_provider::{ use alloy_provider::{Provider, ProviderBuilder}; use alloy_rpc_types::Filter; use alloy_transport::BoxTransport; +use eigen_utils::get_provider; +use reqwest::Client; use BLSApkRegistry::BLSApkRegistryInstance; /// AvsRegistry Chain Subscriber struct @@ -30,41 +32,34 @@ impl AvsRegistryChainSubscriber { } /// Returns blsapkregistry instance - pub async fn build( + pub fn build( &self, bls_apk_registry_addr: Address, - ) -> Result< - BLSApkRegistryInstance< - BoxTransport, - FillProvider< - JoinFill< - JoinFill, NonceFiller>, - ChainIdFiller, - >, - RootProvider, - BoxTransport, - Ethereum, + ) -> BLSApkRegistry::BLSApkRegistryInstance< + alloy_transport_http::Http, + FillProvider< + JoinFill< + JoinFill, NonceFiller>, + ChainIdFiller, >, + RootProvider>, + alloy_transport_http::Http, + Ethereum, >, - Box, > { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let bls_apk_reg = BLSApkRegistry::new(bls_apk_registry_addr, provider); - Ok(bls_apk_reg) + bls_apk_reg } /// Utility function that returns new pubkey registration filter pub async fn get_new_pub_key_registration_filter<'a>( &self, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let current_block_number = provider.get_block_number().await?; let filter = Filter::new() diff --git a/crates/chainio/clients/avsregistry/src/writer.rs b/crates/chainio/clients/avsregistry/src/writer.rs index a7b7ad4a..7c643467 100644 --- a/crates/chainio/clients/avsregistry/src/writer.rs +++ b/crates/chainio/clients/avsregistry/src/writer.rs @@ -8,6 +8,7 @@ use eigen_chainio_utils::{ }; use eigen_client_elcontracts::reader::ELChainReader; use reqwest::Url; +use std::str::FromStr; use eigen_chainio_utils::{ BLSApkRegistry::{G1Point, PubkeyRegistrationParams}, @@ -36,6 +37,8 @@ use eigen_crypto_bls::attestation::KeyPair; use tracing::info; use RegistryCoordinator::SignatureWithSaltAndExpiry; +use eigen_utils::{get_provider, get_signer}; + /// AvsRegistry Writer #[derive(Debug)] pub struct AvsRegistryChainWriter { @@ -46,7 +49,7 @@ pub struct AvsRegistryChainWriter { bls_apk_registry_addr: Address, el_reader: ELChainReader, provider: String, - signer: LocalWallet, + signer: String, } impl AvsRegistryChainWriter { @@ -58,7 +61,7 @@ impl AvsRegistryChainWriter { bls_apk_registry_addr: Address, el_reader: ELChainReader, provider: String, - signer: LocalWallet, + signer: String, ) -> Self { AvsRegistryChainWriter { service_manager_addr, @@ -76,12 +79,9 @@ impl AvsRegistryChainWriter { &self, registry_coordinator_addr: Address, operator_state_retriever_addr: Address, - signer: LocalWallet, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let contract_registry_coordinator = RegistryCoordinator::new(registry_coordinator_addr, &provider); @@ -125,7 +125,7 @@ impl AvsRegistryChainWriter { bls_apk_registry_addr: bls_apk_registry, el_reader, provider: self.provider.clone(), - signer, + signer: self.signer.clone(), }); } @@ -137,17 +137,15 @@ impl AvsRegistryChainWriter { quorum_numbers: Bytes, socket: String, ) -> Result> { - let url = Url::parse(&self.provider).expect("Wrong rpc url"); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); + let provider = get_signer(self.signer.clone(), &self.provider); + let wallet = LocalWallet::from_str(&self.signer).expect("failed to generate wallet "); + // tracing info - info!(avs_service_manager = %self.service_manager_addr, operator= %self.signer.address(),quorum_numbers = ?quorum_numbers,"quorum_numbers,registering operator with the AVS's registry coordinator"); + info!(avs_service_manager = %self.service_manager_addr, operator= %wallet.address(),quorum_numbers = ?quorum_numbers,"quorum_numbers,registering operator with the AVS's registry coordinator"); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); let g1_hashes_msg_to_sign_return = contract_registry_coordinator - .pubkeyRegistrationMessageHash(self.signer.address()) + .pubkeyRegistrationMessageHash(wallet.address()) .call() .await?; @@ -182,15 +180,14 @@ impl AvsRegistryChainWriter { let msg_to_sign = self .el_reader .calculate_operator_avs_registration_digest_hash( - self.signer.address(), + wallet.address(), self.service_manager_addr, operator_to_avs_registration_sig_salt, operator_to_avs_registration_sig_expiry, ) .await?; - let operator_signature = self - .signer + let operator_signature = wallet .sign_message_sync(msg_to_sign.as_slice()) .expect("failed to sign message"); @@ -223,7 +220,7 @@ impl AvsRegistryChainWriter { let tx = contract_call.send().await?; // tracing info - info!(tx_hash = %tx.tx_hash(), avs_service_manager = %self.service_manager_addr,operator = %self.signer.address(),quorum_numbers = ?quorum_numbers , "successfully registered operator with AVS registry coordinator"); + info!(tx_hash = %tx.tx_hash(), avs_service_manager = %self.service_manager_addr,operator = %wallet.address(),quorum_numbers = ?quorum_numbers , "successfully registered operator with AVS registry coordinator"); Ok(*tx.tx_hash()) } @@ -233,11 +230,7 @@ impl AvsRegistryChainWriter { quorum_number: Bytes, ) -> Result> { info!(quorum_numbers = %quorum_number, "updating stakes for entire operator set"); - let url = Url::parse(&self.provider).expect("Wrong rpc url"); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); + let provider = get_signer(self.signer.clone(), &self.provider); let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); @@ -257,11 +250,8 @@ impl AvsRegistryChainWriter { ) -> Result> { info!(operators = ?operators, "updating stakes of operator subset for all quorums"); - let url = Url::parse(&self.provider).expect("Wrong rpc url"); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); + let provider = get_signer(self.signer.clone(), &self.provider); + let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); @@ -278,11 +268,8 @@ impl AvsRegistryChainWriter { quorum_numbers: Bytes, ) -> Result> { info!("deregistering operator with the AVS's registry coordinator"); - let url = Url::parse(&self.provider).expect("Wrong rpc url"); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); + let provider = get_signer(self.signer.clone(), &self.provider); + let contract_registry_coordinator = RegistryCoordinator::new(self.registry_coordinator_addr, provider); diff --git a/crates/chainio/clients/elcontracts/Cargo.toml b/crates/chainio/clients/elcontracts/Cargo.toml index c8036d24..22141c08 100644 --- a/crates/chainio/clients/elcontracts/Cargo.toml +++ b/crates/chainio/clients/elcontracts/Cargo.toml @@ -22,4 +22,4 @@ alloy-provider.workspace = true alloy-signer.workspace = true alloy-network.workspace = true alloy-signer-wallet.workspace = true -reqwest = "0.12.4" +reqwest.workspace = true diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index 1fa5af3f..aab05738 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -6,3 +6,8 @@ rust-version.workspace = true repository.workspace = true [dependencies] +alloy-network.workspace = true +alloy-provider.workspace = true +alloy-transport-http.workspace = true +alloy-signer-wallet.workspace = true +reqwest.workspace = true \ No newline at end of file diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs index de189beb..4eab1ff4 100644 --- a/crates/utils/src/lib.rs +++ b/crates/utils/src/lib.rs @@ -1,7 +1,56 @@ +use alloy_network::{Ethereum, EthereumSigner}; +use alloy_provider::{ + fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, SignerFiller}, + ProviderBuilder, RootProvider, +}; +use alloy_signer_wallet::LocalWallet; +use alloy_transport_http::{Client, Http}; +use reqwest::Url; use std::fs; - +use std::str::FromStr; pub fn read_file(path: &str) -> String { let content = fs::read_to_string(path).unwrap(); content } + +pub fn get_signer( + key: String, + rpc_url: &String, +) -> FillProvider< + JoinFill< + JoinFill< + JoinFill, NonceFiller>, + ChainIdFiller, + >, + SignerFiller, + >, + RootProvider>, + alloy_transport_http::Http, + Ethereum, +> { + let wallet = LocalWallet::from_str(&key.to_string()).expect("failed to generate wallet "); + let url = Url::parse(&rpc_url).expect("Wrong rpc url"); + let provider = ProviderBuilder::new() + .with_recommended_fillers() + .signer(EthereumSigner::from(wallet.clone())) + .on_http(url); + + return provider; +} + +pub fn get_provider( + rpc_url: &String, +) -> FillProvider< + JoinFill, NonceFiller>, ChainIdFiller>, + RootProvider>, + Http, + Ethereum, +> { + let url = Url::parse(&rpc_url).expect("Wrong rpc url"); + let provider = ProviderBuilder::new() + .with_recommended_fillers() + .on_http(url); + + return provider; +} From 053e71d31de975171d0fcb8143e0bb264b93fc4d Mon Sep 17 00:00:00 2001 From: supernovahs Date: Thu, 13 Jun 2024 18:59:56 +0530 Subject: [PATCH 2/5] put all bindings at a common crate and reuse from there --- Cargo.lock | 3 + .../chainio/clients/avsregistry/src/reader.rs | 33 ++--------- .../clients/avsregistry/src/subscriber.rs | 14 +---- .../chainio/clients/avsregistry/src/writer.rs | 22 ++----- crates/chainio/clients/elcontracts/Cargo.toml | 2 + .../chainio/clients/elcontracts/src/reader.rs | 57 ++++++------------- crates/utils/Cargo.toml | 4 +- crates/utils/src/binding.rs | 37 ++++++++++++ crates/utils/src/lib.rs | 1 + 9 files changed, 73 insertions(+), 100 deletions(-) create mode 100644 crates/utils/src/binding.rs diff --git a/Cargo.lock b/Cargo.lock index e3d3fc94..84690c6b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1383,6 +1383,7 @@ dependencies = [ "ark-bn254", "ark-ff 0.4.2", "eigen-types", + "eigen-utils", "reqwest 0.12.4", "thiserror", "tracing", @@ -1541,9 +1542,11 @@ dependencies = [ name = "eigen-utils" version = "0.0.1-alpha" dependencies = [ + "alloy-contract", "alloy-network", "alloy-provider", "alloy-signer-wallet", + "alloy-sol-types", "alloy-transport-http", "reqwest 0.12.4", ] diff --git a/crates/chainio/clients/avsregistry/src/reader.rs b/crates/chainio/clients/avsregistry/src/reader.rs index bf55a8f8..442df2fc 100644 --- a/crates/chainio/clients/avsregistry/src/reader.rs +++ b/crates/chainio/clients/avsregistry/src/reader.rs @@ -2,42 +2,17 @@ use crate::error::AvsRegistryError; use alloy_primitives::{Address, Bytes, FixedBytes, B256, U256}; use alloy_provider::Provider; use alloy_rpc_types::Filter; -use alloy_sol_types::sol; use ark_ff::Zero; use eigen_types::operator::{bitmap_to_quorum_ids, BLSApkRegistry, OperatorPubKeys}; -use eigen_utils::get_provider; +use eigen_utils::{ + binding::{OperatorStateRetriever, RegistryCoordinator, StakeRegistry}, + get_provider, +}; use num_bigint::BigInt; use std::collections::HashMap; use std::fmt::Debug; use tracing::debug; -const REGISTRY_COORDINATOR_PATH: &str = - "../../../../crates/contracts/bindings/utils/json/RegistryCoordinator.json"; -const STAKE_REGISTRY_PATH: &str = - "../../../../crates/contracts/bindings/utils/json/StakeRegistry.json"; -const OPERATOR_STATE_RETRIEVER: &str = - "../../../../crates/contracts/bindings/utils/json/OperatorStateRetriever.json"; - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - StakeRegistry, - "StakeRegistry.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - RegistryCoordinator, - "../../../../crates/contracts/bindings/utils/json/RegistryCoordinator.json" -); -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - OperatorStateRetriever, - "../../../../crates/contracts/bindings/utils/json/OperatorStateRetriever.json" -); - /// Avs Registry chainreader #[derive(Debug, Clone)] pub struct AvsRegistryChainReader { diff --git a/crates/chainio/clients/avsregistry/src/subscriber.rs b/crates/chainio/clients/avsregistry/src/subscriber.rs index 8ba623c9..8d225f03 100644 --- a/crates/chainio/clients/avsregistry/src/subscriber.rs +++ b/crates/chainio/clients/avsregistry/src/subscriber.rs @@ -1,23 +1,13 @@ -use alloy_sol_types::sol; -sol!( - #[allow(missing_docs)] - #[derive(Debug)] - #[sol(rpc)] - BLSApkRegistry, - "../../../../crates/contracts/bindings/utils/json/BLSApkRegistry.json" -); use alloy_network::Ethereum; use alloy_primitives::Address; +use alloy_provider::Provider; use alloy_provider::{ fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller}, RootProvider, }; -use alloy_provider::{Provider, ProviderBuilder}; use alloy_rpc_types::Filter; -use alloy_transport::BoxTransport; -use eigen_utils::get_provider; +use eigen_utils::{binding::BLSApkRegistry, get_provider}; use reqwest::Client; -use BLSApkRegistry::BLSApkRegistryInstance; /// AvsRegistry Chain Subscriber struct #[derive(Debug)] diff --git a/crates/chainio/clients/avsregistry/src/writer.rs b/crates/chainio/clients/avsregistry/src/writer.rs index 7c643467..0bd4b724 100644 --- a/crates/chainio/clients/avsregistry/src/writer.rs +++ b/crates/chainio/clients/avsregistry/src/writer.rs @@ -1,13 +1,10 @@ -use alloy_network::EthereumSigner; use alloy_signer::SignerSync; use alloy_signer_wallet::LocalWallet; -use alloy_sol_types::sol; use ark_bn254::G1Projective; use eigen_chainio_utils::{ convert_bn254_to_ark, convert_to_bn254_g1_point, convert_to_bn254_g2_point, }; use eigen_client_elcontracts::reader::ELChainReader; -use reqwest::Url; use std::str::FromStr; use eigen_chainio_utils::{ @@ -17,27 +14,16 @@ use eigen_chainio_utils::{ PubkeyRegistrationParams as RegistryPubkeyRegistrationParams, }, }; -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - ServiceManagerBase, - "../../../../crates/contracts/bindings/utils/json/ServiceManagerBase.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - StakeRegistry, - "StakeRegistry.json" -); use alloy_primitives::{Address, Bytes, FixedBytes, TxHash, U256}; -use alloy_provider::ProviderBuilder; use eigen_crypto_bls::attestation::KeyPair; use tracing::info; use RegistryCoordinator::SignatureWithSaltAndExpiry; -use eigen_utils::{get_provider, get_signer}; +use eigen_utils::{ + binding::{ServiceManagerBase, StakeRegistry}, + get_provider, get_signer, +}; /// AvsRegistry Writer #[derive(Debug)] diff --git a/crates/chainio/clients/elcontracts/Cargo.toml b/crates/chainio/clients/elcontracts/Cargo.toml index 22141c08..570c5b67 100644 --- a/crates/chainio/clients/elcontracts/Cargo.toml +++ b/crates/chainio/clients/elcontracts/Cargo.toml @@ -15,6 +15,8 @@ eigen-types.workspace=true thiserror.workspace = true tracing.workspace = true +eigen-utils.workspace = true + alloy-sol-types.workspace = true alloy-contract.workspace = true alloy-primitives.workspace = true diff --git a/crates/chainio/clients/elcontracts/src/reader.rs b/crates/chainio/clients/elcontracts/src/reader.rs index 0e8de416..9a920428 100644 --- a/crates/chainio/clients/elcontracts/src/reader.rs +++ b/crates/chainio/clients/elcontracts/src/reader.rs @@ -34,12 +34,10 @@ sol!( "../../../../crates/contracts/bindings/utils/json/IERC20.json" ); +use crate::error::ElContractsError; use alloy_primitives::{Address, FixedBytes, U256}; -use alloy_provider::{Provider, ProviderBuilder}; use eigen_types::operator::Operator; -use std::sync::Arc; - -use crate::error::ElContractsError; +use eigen_utils::{get_provider, get_signer}; #[derive(Debug, Clone)] pub struct ELChainReader { @@ -72,10 +70,8 @@ impl ELChainReader { avs_directory: Address, client: &String, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&client) - .await?; + let provider = get_provider(client); + let contract_delegation_manager = DelegationManager::new(delegation_manager, provider); let slasher = contract_delegation_manager.slasher().call().await?; @@ -104,10 +100,8 @@ impl ELChainReader { approve_salt: FixedBytes<32>, expiry: U256, ) -> Result, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); let delegation_approval_digest_hash = contract_delegation_manager @@ -134,10 +128,8 @@ impl ELChainReader { salt: FixedBytes<32>, expiry: U256, ) -> Result, Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let contract_avs_directory = AVSDirectory::new(self.avs_directory, provider); let operator_avs_registration_digest_hash = contract_avs_directory @@ -156,10 +148,7 @@ impl ELChainReader { operator_addr: Address, strategy_addr: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); @@ -176,10 +165,7 @@ impl ELChainReader { &self, operator_addr: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_slasher = ISlasher::new(self.slasher, provider); @@ -194,10 +180,8 @@ impl ELChainReader { operator_addr: Address, service_manager_addr: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let contract_slasher = ISlasher::new(self.slasher, provider); let service_manager_can_slash_operator_until_block = contract_slasher @@ -215,10 +199,8 @@ impl ELChainReader { &self, strategy_addr: Address, ) -> Result<(Address, Address, Address), Box> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let contract_strategy = IStrategy::new(strategy_addr, &provider); let underlying_token = contract_strategy.underlyingToken().call().await?; @@ -240,10 +222,7 @@ impl ELChainReader { &self, operator: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); let contract_delegation_manager = DelegationManager::new(self.delegation_manager, &provider); @@ -270,10 +249,8 @@ impl ELChainReader { &self, operator: Address, ) -> Result> { - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .on_builtin(&self.provider) - .await?; + let provider = get_provider(&self.provider); + let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); let is_operator = contract_delegation_manager diff --git a/crates/utils/Cargo.toml b/crates/utils/Cargo.toml index aab05738..c6f01d0f 100644 --- a/crates/utils/Cargo.toml +++ b/crates/utils/Cargo.toml @@ -10,4 +10,6 @@ alloy-network.workspace = true alloy-provider.workspace = true alloy-transport-http.workspace = true alloy-signer-wallet.workspace = true -reqwest.workspace = true \ No newline at end of file +reqwest.workspace = true +alloy-sol-types.workspace = true +alloy-contract.workspace = true \ No newline at end of file diff --git a/crates/utils/src/binding.rs b/crates/utils/src/binding.rs new file mode 100644 index 00000000..bd38005f --- /dev/null +++ b/crates/utils/src/binding.rs @@ -0,0 +1,37 @@ +use alloy_sol_types::sol; + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + StakeRegistry, + "../../crates/contracts/bindings/utils/json/StakeRegistry.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + RegistryCoordinator, + "../../crates/contracts/bindings/utils/json/RegistryCoordinator.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + OperatorStateRetriever, + "../../crates/contracts/bindings/utils/json/OperatorStateRetriever.json" +); + +sol!( + #[allow(missing_docs)] + #[derive(Debug)] + #[sol(rpc)] + BLSApkRegistry, + "../../crates/contracts/bindings/utils/json/BLSApkRegistry.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + ServiceManagerBase, + "../../crates/contracts/bindings/utils/json/ServiceManagerBase.json" +); diff --git a/crates/utils/src/lib.rs b/crates/utils/src/lib.rs index 4eab1ff4..01037227 100644 --- a/crates/utils/src/lib.rs +++ b/crates/utils/src/lib.rs @@ -1,3 +1,4 @@ +pub mod binding; use alloy_network::{Ethereum, EthereumSigner}; use alloy_provider::{ fillers::{ChainIdFiller, FillProvider, GasFiller, JoinFill, NonceFiller, SignerFiller}, From 2b51e1c6221d617f9459e39c6c35b69b2b2abade Mon Sep 17 00:00:00 2001 From: supernovahs Date: Thu, 13 Jun 2024 19:01:24 +0530 Subject: [PATCH 3/5] delete stake registry --- .../clients/avsregistry/StakeRegistry.json | 588 ------------------ 1 file changed, 588 deletions(-) delete mode 100644 crates/chainio/clients/avsregistry/StakeRegistry.json diff --git a/crates/chainio/clients/avsregistry/StakeRegistry.json b/crates/chainio/clients/avsregistry/StakeRegistry.json deleted file mode 100644 index f3905268..00000000 --- a/crates/chainio/clients/avsregistry/StakeRegistry.json +++ /dev/null @@ -1,588 +0,0 @@ - - [ - { - "type": "constructor", - "inputs": [ - { - "name": "_registryCoordinator", - "type": "address", - "internalType": "contract IRegistryCoordinator" - }, - { - "name": "_delegationManager", - "type": "address", - "internalType": "contract IDelegationManager" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "MAX_WEIGHING_FUNCTION_LENGTH", - "inputs": [], - "outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "WEIGHTING_DIVISOR", - "inputs": [], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addStrategies", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { - "name": "_strategyParams", - "type": "tuple[]", - "internalType": "struct IStakeRegistry.StrategyParams[]", - "components": [ - { - "name": "strategy", - "type": "address", - "internalType": "contract IStrategy" - }, - { "name": "multiplier", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "delegation", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IDelegationManager" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "deregisterOperator", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumbers", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getCurrentStake", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurrentTotalStake", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getLatestStakeUpdate", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct IStakeRegistry.StakeUpdate", - "components": [ - { - "name": "updateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "nextUpdateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "stake", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakeAtBlockNumber", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "blockNumber", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakeAtBlockNumberAndIndex", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "blockNumber", "type": "uint32", "internalType": "uint32" }, - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakeHistory", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [ - { - "name": "", - "type": "tuple[]", - "internalType": "struct IStakeRegistry.StakeUpdate[]", - "components": [ - { - "name": "updateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "nextUpdateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "stake", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakeHistoryLength", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakeUpdateAtIndex", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct IStakeRegistry.StakeUpdate", - "components": [ - { - "name": "updateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "nextUpdateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "stake", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakeUpdateIndexAtBlockNumber", - "inputs": [ - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "blockNumber", "type": "uint32", "internalType": "uint32" } - ], - "outputs": [{ "name": "", "type": "uint32", "internalType": "uint32" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTotalStakeAtBlockNumberFromIndex", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "blockNumber", "type": "uint32", "internalType": "uint32" }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTotalStakeHistoryLength", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTotalStakeIndicesAtBlockNumber", - "inputs": [ - { "name": "blockNumber", "type": "uint32", "internalType": "uint32" }, - { "name": "quorumNumbers", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "", "type": "uint32[]", "internalType": "uint32[]" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTotalStakeUpdateAtIndex", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct IStakeRegistry.StakeUpdate", - "components": [ - { - "name": "updateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "nextUpdateBlockNumber", - "type": "uint32", - "internalType": "uint32" - }, - { "name": "stake", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initializeQuorum", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "minimumStake", "type": "uint96", "internalType": "uint96" }, - { - "name": "_strategyParams", - "type": "tuple[]", - "internalType": "struct IStakeRegistry.StrategyParams[]", - "components": [ - { - "name": "strategy", - "type": "address", - "internalType": "contract IStrategy" - }, - { "name": "multiplier", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "minimumStakeForQuorum", - "inputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "modifyStrategyParams", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { - "name": "strategyIndices", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "newMultipliers", - "type": "uint96[]", - "internalType": "uint96[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registerOperator", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" }, - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumbers", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [ - { "name": "", "type": "uint96[]", "internalType": "uint96[]" }, - { "name": "", "type": "uint96[]", "internalType": "uint96[]" } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "registryCoordinator", - "inputs": [], - "outputs": [{ "name": "", "type": "address", "internalType": "address" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "removeStrategies", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { - "name": "indicesToRemove", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMinimumStakeForQuorum", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "minimumStake", "type": "uint96", "internalType": "uint96" } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "strategiesPerQuorum", - "inputs": [ - { "name": "", "type": "uint8", "internalType": "uint8" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { "name": "", "type": "address", "internalType": "contract IStrategy" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "strategyParams", - "inputs": [ - { "name": "", "type": "uint8", "internalType": "uint8" }, - { "name": "", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "strategy", - "type": "address", - "internalType": "contract IStrategy" - }, - { "name": "multiplier", "type": "uint96", "internalType": "uint96" } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "strategyParamsByIndex", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "index", "type": "uint256", "internalType": "uint256" } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct IStakeRegistry.StrategyParams", - "components": [ - { - "name": "strategy", - "type": "address", - "internalType": "contract IStrategy" - }, - { "name": "multiplier", "type": "uint96", "internalType": "uint96" } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "strategyParamsLength", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" } - ], - "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], - "stateMutability": "view" - }, - { - "type": "function", - "name": "updateOperatorStake", - "inputs": [ - { "name": "operator", "type": "address", "internalType": "address" }, - { "name": "operatorId", "type": "bytes32", "internalType": "bytes32" }, - { "name": "quorumNumbers", "type": "bytes", "internalType": "bytes" } - ], - "outputs": [{ "name": "", "type": "uint192", "internalType": "uint192" }], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "weightOfOperatorForQuorum", - "inputs": [ - { "name": "quorumNumber", "type": "uint8", "internalType": "uint8" }, - { "name": "operator", "type": "address", "internalType": "address" } - ], - "outputs": [{ "name": "", "type": "uint96", "internalType": "uint96" }], - "stateMutability": "view" - }, - { - "type": "event", - "name": "MinimumStakeForQuorumUpdated", - "inputs": [ - { - "name": "quorumNumber", - "type": "uint8", - "indexed": true, - "internalType": "uint8" - }, - { - "name": "minimumStake", - "type": "uint96", - "indexed": false, - "internalType": "uint96" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OperatorStakeUpdate", - "inputs": [ - { - "name": "operatorId", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "quorumNumber", - "type": "uint8", - "indexed": false, - "internalType": "uint8" - }, - { - "name": "stake", - "type": "uint96", - "indexed": false, - "internalType": "uint96" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "QuorumCreated", - "inputs": [ - { - "name": "quorumNumber", - "type": "uint8", - "indexed": true, - "internalType": "uint8" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StrategyAddedToQuorum", - "inputs": [ - { - "name": "quorumNumber", - "type": "uint8", - "indexed": true, - "internalType": "uint8" - }, - { - "name": "strategy", - "type": "address", - "indexed": false, - "internalType": "contract IStrategy" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StrategyMultiplierUpdated", - "inputs": [ - { - "name": "quorumNumber", - "type": "uint8", - "indexed": true, - "internalType": "uint8" - }, - { - "name": "strategy", - "type": "address", - "indexed": false, - "internalType": "contract IStrategy" - }, - { - "name": "multiplier", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StrategyRemovedFromQuorum", - "inputs": [ - { - "name": "quorumNumber", - "type": "uint8", - "indexed": true, - "internalType": "uint8" - }, - { - "name": "strategy", - "type": "address", - "indexed": false, - "internalType": "contract IStrategy" - } - ], - "anonymous": false - } - ] - \ No newline at end of file From f5d34e7fe3337408b7f7c57cbd089ee44c037657 Mon Sep 17 00:00:00 2001 From: supernovahs Date: Thu, 13 Jun 2024 19:20:07 +0530 Subject: [PATCH 4/5] elcontracts --- .../chainio/clients/elcontracts/src/reader.rs | 46 ++-------------- .../chainio/clients/elcontracts/src/writer.rs | 54 +++---------------- crates/utils/src/binding.rs | 42 +++++++++++++++ 3 files changed, 54 insertions(+), 88 deletions(-) diff --git a/crates/chainio/clients/elcontracts/src/reader.rs b/crates/chainio/clients/elcontracts/src/reader.rs index 9a920428..405cafec 100644 --- a/crates/chainio/clients/elcontracts/src/reader.rs +++ b/crates/chainio/clients/elcontracts/src/reader.rs @@ -1,49 +1,14 @@ -use alloy_sol_types::sol; -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - AVSDirectory, - "../../../../crates/contracts/bindings/utils/json/AVSDirectory.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - DelegationManager, - "../../../../crates/contracts/bindings/utils/json/DelegationManager.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - ISlasher, - "../../../../crates/contracts/bindings/utils/json/ISlasher.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - IStrategy, - "../../../../crates/contracts/bindings/utils/json/IStrategy.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - IERC20, - "../../../../crates/contracts/bindings/utils/json/IERC20.json" -); - -use crate::error::ElContractsError; use alloy_primitives::{Address, FixedBytes, U256}; use eigen_types::operator::Operator; -use eigen_utils::{get_provider, get_signer}; +use eigen_utils::{ + binding::{AVSDirectory, DelegationManager, ISlasher, IStrategy, IERC20}, + get_provider, +}; #[derive(Debug, Clone)] pub struct ELChainReader { slasher: Address, delegation_manager: Address, - strategy_manager: Address, avs_directory: Address, provider: String, } @@ -52,14 +17,12 @@ impl ELChainReader { pub fn new( slasher: Address, delegation_manager: Address, - strategy_manager: Address, avs_directory: Address, provider: String, ) -> Self { ELChainReader { slasher, delegation_manager, - strategy_manager, avs_directory, provider, } @@ -87,7 +50,6 @@ impl ELChainReader { avs_directory, slasher: slasher_addr, delegation_manager, - strategy_manager: strategy_manager, provider: client.to_string(), }) } diff --git a/crates/chainio/clients/elcontracts/src/writer.rs b/crates/chainio/clients/elcontracts/src/writer.rs index 53b7ca1d..f300b81b 100644 --- a/crates/chainio/clients/elcontracts/src/writer.rs +++ b/crates/chainio/clients/elcontracts/src/writer.rs @@ -1,34 +1,7 @@ -use crate::{error::ElContractsError, reader::ELChainReader}; -use alloy_network::EthereumSigner; -use alloy_signer::{Signer, SignerSync}; -use alloy_sol_types::sol; -use reqwest::Url; -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - DelegationManager, - "../../../../crates/contracts/bindings/utils/json/DelegationManager.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - StrategyManager, - "../../../../crates/contracts/bindings/utils/json/StrategyManager.json" -); - -sol!( - #[allow(missing_docs)] - #[sol(rpc)] - IERC20, - "../../../../crates/contracts/bindings/utils/json/IERC20.json" -); -use alloy_network::TxSignerSync; +use crate::reader::ELChainReader; use alloy_primitives::{Address, TxHash, U256}; -use alloy_provider::{Provider, ProviderBuilder}; -use alloy_signer_wallet::LocalWallet; pub use eigen_types::operator::Operator; -use std::sync::Arc; +use eigen_utils::{binding::{DelegationManager, StrategyManager, IERC20}, get_signer}; use tracing::info; use DelegationManager::OperatorDetails; @@ -38,7 +11,7 @@ pub struct ELChainWriter { strategy_manager: Address, el_chain_reader: ELChainReader, provider: String, - signer: LocalWallet, + signer: String, } impl ELChainWriter { @@ -47,7 +20,7 @@ impl ELChainWriter { strategy_manager: Address, el_chain_reader: ELChainReader, provider: String, - signer: LocalWallet, + signer: String, ) -> Self { Self { delegation_manager, @@ -72,11 +45,8 @@ impl ELChainWriter { delegationApprover: operator.has_delegation_approver_address(), stakerOptOutWindowBlocks: operator.has_staker_opt_out_window_blocks(), }; - let url = Url::parse(&self.provider).expect("Wrong rpc url"); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); + let provider = get_signer(self.signer.clone(),&self.provider); + let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); @@ -115,12 +85,8 @@ impl ELChainWriter { delegationApprover: operator.has_delegation_approver_address(), stakerOptOutWindowBlocks: operator.has_staker_opt_out_window_blocks(), }; - let url = Url::parse(&self.provider).expect("Wrong rpc url"); + let provider = get_signer(self.signer.clone(),&self.provider); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); let contract_call_modify_operator_details = @@ -152,12 +118,8 @@ impl ELChainWriter { .get_strategy_and_underlying_erc20_token(strategy_addr) .await?; let (_, underlying_token_contract, underlying_token) = tokens; - let url = Url::parse(&self.provider).expect("Wrong rpc url"); + let provider = get_signer(self.signer.clone(),&self.provider); - let provider = ProviderBuilder::new() - .with_recommended_fillers() - .signer(EthereumSigner::from(self.signer.clone())) - .on_http(url); let contract_underlying_token = IERC20::new(underlying_token_contract, &provider); let contract_call = contract_underlying_token.approve(self.strategy_manager, amount); diff --git a/crates/utils/src/binding.rs b/crates/utils/src/binding.rs index bd38005f..f744a259 100644 --- a/crates/utils/src/binding.rs +++ b/crates/utils/src/binding.rs @@ -35,3 +35,45 @@ sol!( ServiceManagerBase, "../../crates/contracts/bindings/utils/json/ServiceManagerBase.json" ); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + AVSDirectory, + "../../crates/contracts/bindings/utils/json/AVSDirectory.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + DelegationManager, + "../../crates/contracts/bindings/utils/json/DelegationManager.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + ISlasher, + "../../crates/contracts/bindings/utils/json/ISlasher.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + IStrategy, + "../../crates/contracts/bindings/utils/json/IStrategy.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + IERC20, + "../../crates/contracts/bindings/utils/json/IERC20.json" +); + +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + StrategyManager, + "../../crates/contracts/bindings/utils/json/StrategyManager.json" +); From 901e71c46e3ac0fed0169dce1e118f3f88cde74d Mon Sep 17 00:00:00 2001 From: supernovahs Date: Thu, 13 Jun 2024 19:22:04 +0530 Subject: [PATCH 5/5] fmt --- crates/chainio/clients/elcontracts/src/writer.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/chainio/clients/elcontracts/src/writer.rs b/crates/chainio/clients/elcontracts/src/writer.rs index f300b81b..8cfc5ffd 100644 --- a/crates/chainio/clients/elcontracts/src/writer.rs +++ b/crates/chainio/clients/elcontracts/src/writer.rs @@ -1,7 +1,10 @@ use crate::reader::ELChainReader; use alloy_primitives::{Address, TxHash, U256}; pub use eigen_types::operator::Operator; -use eigen_utils::{binding::{DelegationManager, StrategyManager, IERC20}, get_signer}; +use eigen_utils::{ + binding::{DelegationManager, StrategyManager, IERC20}, + get_signer, +}; use tracing::info; use DelegationManager::OperatorDetails; @@ -45,8 +48,7 @@ impl ELChainWriter { delegationApprover: operator.has_delegation_approver_address(), stakerOptOutWindowBlocks: operator.has_staker_opt_out_window_blocks(), }; - let provider = get_signer(self.signer.clone(),&self.provider); - + let provider = get_signer(self.signer.clone(), &self.provider); let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); @@ -85,7 +87,7 @@ impl ELChainWriter { delegationApprover: operator.has_delegation_approver_address(), stakerOptOutWindowBlocks: operator.has_staker_opt_out_window_blocks(), }; - let provider = get_signer(self.signer.clone(),&self.provider); + let provider = get_signer(self.signer.clone(), &self.provider); let contract_delegation_manager = DelegationManager::new(self.delegation_manager, provider); @@ -118,7 +120,7 @@ impl ELChainWriter { .get_strategy_and_underlying_erc20_token(strategy_addr) .await?; let (_, underlying_token_contract, underlying_token) = tokens; - let provider = get_signer(self.signer.clone(),&self.provider); + let provider = get_signer(self.signer.clone(), &self.provider); let contract_underlying_token = IERC20::new(underlying_token_contract, &provider);