From 516dea214b672ca06611ddcfd3154e07b380e8bf Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 1 Nov 2024 09:48:21 +1100 Subject: [PATCH 1/5] Add comment --- packages/ciphernode/evm/src/helpers.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/ciphernode/evm/src/helpers.rs b/packages/ciphernode/evm/src/helpers.rs index 2bd89457..f8f6047f 100644 --- a/packages/ciphernode/evm/src/helpers.rs +++ b/packages/ciphernode/evm/src/helpers.rs @@ -66,6 +66,9 @@ pub async fn stream_from_evm( info!("Exiting stream loop"); } + +/// We need to cache the chainId so we can easily use it in a non-async situation +/// This wrapper just stores the chain_id with the Provider #[derive(Clone)] pub struct WithChainId

where From 14cfe86420d75c46e4c60a0f9aaddba55e3b6383 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 1 Nov 2024 10:01:17 +1100 Subject: [PATCH 2/5] Consolidate providers --- .../ciphernode/enclave_node/src/aggregator.rs | 16 ++++++++++++---- .../ciphernode/enclave_node/src/ciphernode.rs | 7 ++++--- .../evm/src/ciphernode_registry_sol.rs | 10 +++++----- .../ciphernode/evm/src/enclave_sol_reader.rs | 5 +++-- packages/ciphernode/evm/src/event_reader.rs | 9 ++++----- .../ciphernode/evm/src/registry_filter_sol.rs | 15 ++++++--------- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/packages/ciphernode/enclave_node/src/aggregator.rs b/packages/ciphernode/enclave_node/src/aggregator.rs index 533e1e32..9e102e95 100644 --- a/packages/ciphernode/enclave_node/src/aggregator.rs +++ b/packages/ciphernode/enclave_node/src/aggregator.rs @@ -4,7 +4,11 @@ use cipher::Cipher; use config::AppConfig; use enclave_core::EventBus; use evm::{ - helpers::get_signer_from_repository, CiphernodeRegistrySol, EnclaveSol, RegistryFilterSol, + helpers::{ + create_provider_with_signer, create_readonly_provider, ensure_http_rpc, ensure_ws_rpc, + get_signer_from_repository, + }, + CiphernodeRegistrySol, EnclaveSol, RegistryFilterSol, }; use logger::SimpleLogger; use p2p::P2p; @@ -35,15 +39,19 @@ pub async fn setup_aggregator( let sortition = Sortition::attach(&bus, repositories.sortition()); let cipher = Arc::new(Cipher::from_config(&config).await?); let signer = get_signer_from_repository(repositories.eth_private_key(), &cipher).await?; + for chain in config .chains() .iter() .filter(|chain| chain.enabled.unwrap_or(true)) { let rpc_url = &chain.rpc_url; - EnclaveSol::attach(&bus, rpc_url, &chain.contracts.enclave, &signer).await?; - RegistryFilterSol::attach(&bus, rpc_url, &chain.contracts.filter_registry, &signer).await?; - CiphernodeRegistrySol::attach(&bus, rpc_url, &chain.contracts.ciphernode_registry).await?; + let read_provider = create_readonly_provider(&ensure_ws_rpc(rpc_url)).await?; + let write_provider = create_provider_with_signer(&ensure_http_rpc(rpc_url), &signer).await?; + EnclaveSol::attach(&bus, &read_provider, &chain.contracts.enclave, &signer).await?; + RegistryFilterSol::attach(&bus, &write_provider, &chain.contracts.filter_registry).await?; + CiphernodeRegistrySol::attach(&bus, &read_provider, &chain.contracts.ciphernode_registry) + .await?; } E3RequestRouter::builder(&bus, store) diff --git a/packages/ciphernode/enclave_node/src/ciphernode.rs b/packages/ciphernode/enclave_node/src/ciphernode.rs index e947e896..74c00cdc 100644 --- a/packages/ciphernode/enclave_node/src/ciphernode.rs +++ b/packages/ciphernode/enclave_node/src/ciphernode.rs @@ -5,7 +5,7 @@ use cipher::Cipher; use config::AppConfig; use data::{DataStore, InMemStore, SledStore}; use enclave_core::EventBus; -use evm::{CiphernodeRegistrySol, EnclaveSolReader}; +use evm::{helpers::{create_readonly_provider, ensure_ws_rpc}, CiphernodeRegistrySol, EnclaveSolReader}; use logger::SimpleLogger; use p2p::P2p; use rand::SeedableRng; @@ -42,8 +42,9 @@ pub async fn setup_ciphernode( { let rpc_url = &chain.rpc_url; - EnclaveSolReader::attach(&bus, rpc_url, &chain.contracts.enclave).await?; - CiphernodeRegistrySol::attach(&bus, rpc_url, &chain.contracts.ciphernode_registry).await?; + let read_provider = create_readonly_provider(&ensure_ws_rpc(rpc_url)).await?; + EnclaveSolReader::attach(&bus, &read_provider, &chain.contracts.enclave).await?; + CiphernodeRegistrySol::attach(&bus, &read_provider, &chain.contracts.ciphernode_registry).await?; } E3RequestRouter::builder(&bus, store.clone()) diff --git a/packages/ciphernode/evm/src/ciphernode_registry_sol.rs b/packages/ciphernode/evm/src/ciphernode_registry_sol.rs index 2fd56359..08745653 100644 --- a/packages/ciphernode/evm/src/ciphernode_registry_sol.rs +++ b/packages/ciphernode/evm/src/ciphernode_registry_sol.rs @@ -1,4 +1,4 @@ -use crate::EvmEventReader; +use crate::{helpers::ReadonlyProvider, EvmEventReader}; use actix::Addr; use alloy::{ primitives::{LogData, B256}, @@ -97,18 +97,18 @@ pub struct CiphernodeRegistrySolReader; impl CiphernodeRegistrySolReader { pub async fn attach( bus: &Addr, - rpc_url: &str, + provider: &ReadonlyProvider, contract_address: &str, ) -> Result> { - let addr = EvmEventReader::attach(bus, rpc_url, extractor, contract_address).await?; + let addr = EvmEventReader::attach(bus, provider, extractor, contract_address).await?; Ok(addr) } } pub struct CiphernodeRegistrySol; impl CiphernodeRegistrySol { - pub async fn attach(bus: &Addr, rpc_url: &str, contract_address: &str) -> Result<()> { - CiphernodeRegistrySolReader::attach(bus, rpc_url, contract_address).await?; + pub async fn attach(bus: &Addr, provider: &ReadonlyProvider, contract_address: &str) -> Result<()> { + CiphernodeRegistrySolReader::attach(bus, provider, contract_address).await?; Ok(()) } } diff --git a/packages/ciphernode/evm/src/enclave_sol_reader.rs b/packages/ciphernode/evm/src/enclave_sol_reader.rs index 46c061d1..bef123e5 100644 --- a/packages/ciphernode/evm/src/enclave_sol_reader.rs +++ b/packages/ciphernode/evm/src/enclave_sol_reader.rs @@ -1,3 +1,4 @@ +use crate::helpers::ReadonlyProvider; use crate::EvmEventReader; use actix::Addr; use alloy::primitives::{LogData, B256}; @@ -82,10 +83,10 @@ pub struct EnclaveSolReader; impl EnclaveSolReader { pub async fn attach( bus: &Addr, - rpc_url: &str, + provider: &ReadonlyProvider, contract_address: &str, ) -> Result> { - let addr = EvmEventReader::attach(bus, rpc_url, extractor, contract_address).await?; + let addr = EvmEventReader::attach(bus, provider, extractor, contract_address).await?; Ok(addr) } } diff --git a/packages/ciphernode/evm/src/event_reader.rs b/packages/ciphernode/evm/src/event_reader.rs index 9b225df6..cdb11d0e 100644 --- a/packages/ciphernode/evm/src/event_reader.rs +++ b/packages/ciphernode/evm/src/event_reader.rs @@ -23,15 +23,14 @@ pub struct EvmEventReader { impl EvmEventReader { pub async fn new( bus: &Addr, - rpc_url: &str, + provider: &ReadonlyProvider, extractor: ExtractorFn, contract_address: Address, ) -> Result { let (shutdown_tx, shutdown_rx) = oneshot::channel(); - let provider = create_readonly_provider(&ensure_ws_rpc(rpc_url)).await?; Ok(Self { contract_address, - provider: Some(provider), + provider: Some(provider.clone()), extractor, bus: bus.clone().into(), shutdown_rx: Some(shutdown_rx), @@ -41,11 +40,11 @@ impl EvmEventReader { pub async fn attach( bus: &Addr, - rpc_url: &str, + provider: &ReadonlyProvider, extractor: ExtractorFn, contract_address: &str, ) -> Result> { - let addr = EvmEventReader::new(bus, rpc_url, extractor, contract_address.parse()?) + let addr = EvmEventReader::new(bus, provider, extractor, contract_address.parse()?) .await? .start(); diff --git a/packages/ciphernode/evm/src/registry_filter_sol.rs b/packages/ciphernode/evm/src/registry_filter_sol.rs index 2c64129a..f4f3fa03 100644 --- a/packages/ciphernode/evm/src/registry_filter_sol.rs +++ b/packages/ciphernode/evm/src/registry_filter_sol.rs @@ -29,12 +29,11 @@ pub struct RegistryFilterSolWriter { impl RegistryFilterSolWriter { pub async fn new( bus: &Addr, - rpc_url: &str, + provider: &SignerProvider, contract_address: Address, - signer: &Arc, ) -> Result { Ok(Self { - provider: create_provider_with_signer(&ensure_http_rpc(rpc_url), signer).await?, + provider: provider.clone(), contract_address, bus: bus.clone(), }) @@ -42,11 +41,10 @@ impl RegistryFilterSolWriter { pub async fn attach( bus: &Addr, - rpc_url: &str, + provider: &SignerProvider, contract_address: &str, - signer: &Arc, ) -> Result> { - let addr = RegistryFilterSolWriter::new(bus, rpc_url, contract_address.parse()?, signer) + let addr = RegistryFilterSolWriter::new(bus, provider, contract_address.parse()?) .await? .start(); let _ = bus @@ -132,11 +130,10 @@ pub struct RegistryFilterSol; impl RegistryFilterSol { pub async fn attach( bus: &Addr, - rpc_url: &str, + provider: &SignerProvider, contract_address: &str, - signer: &Arc, ) -> Result<()> { - RegistryFilterSolWriter::attach(bus, rpc_url, contract_address, signer).await?; + RegistryFilterSolWriter::attach(bus, provider, contract_address).await?; Ok(()) } } From 9977a694bbd0834cf54b72697a4e4ec0e003426e Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 1 Nov 2024 10:05:06 +1100 Subject: [PATCH 3/5] Fix bugs --- packages/ciphernode/enclave_node/src/aggregator.rs | 2 +- packages/ciphernode/evm/src/enclave_sol.rs | 13 +++++++++---- packages/ciphernode/evm/src/enclave_sol_writer.rs | 8 ++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/ciphernode/enclave_node/src/aggregator.rs b/packages/ciphernode/enclave_node/src/aggregator.rs index 9e102e95..b1a62239 100644 --- a/packages/ciphernode/enclave_node/src/aggregator.rs +++ b/packages/ciphernode/enclave_node/src/aggregator.rs @@ -48,7 +48,7 @@ pub async fn setup_aggregator( let rpc_url = &chain.rpc_url; let read_provider = create_readonly_provider(&ensure_ws_rpc(rpc_url)).await?; let write_provider = create_provider_with_signer(&ensure_http_rpc(rpc_url), &signer).await?; - EnclaveSol::attach(&bus, &read_provider, &chain.contracts.enclave, &signer).await?; + EnclaveSol::attach(&bus, &read_provider, &write_provider, &chain.contracts.enclave, &signer).await?; RegistryFilterSol::attach(&bus, &write_provider, &chain.contracts.filter_registry).await?; CiphernodeRegistrySol::attach(&bus, &read_provider, &chain.contracts.ciphernode_registry) .await?; diff --git a/packages/ciphernode/evm/src/enclave_sol.rs b/packages/ciphernode/evm/src/enclave_sol.rs index 12c67f90..b61734a3 100644 --- a/packages/ciphernode/evm/src/enclave_sol.rs +++ b/packages/ciphernode/evm/src/enclave_sol.rs @@ -1,6 +1,10 @@ use std::sync::Arc; -use crate::{enclave_sol_reader::EnclaveSolReader, enclave_sol_writer::EnclaveSolWriter}; +use crate::{ + enclave_sol_reader::EnclaveSolReader, + enclave_sol_writer::EnclaveSolWriter, + helpers::{ReadonlyProvider, SignerProvider}, +}; use actix::Addr; use alloy::signers::local::PrivateKeySigner; use anyhow::Result; @@ -10,12 +14,13 @@ pub struct EnclaveSol; impl EnclaveSol { pub async fn attach( bus: &Addr, - rpc_url: &str, + read_provider: &ReadonlyProvider, + write_provider: &SignerProvider, contract_address: &str, signer: &Arc, ) -> Result<()> { - EnclaveSolReader::attach(bus, rpc_url, contract_address).await?; - EnclaveSolWriter::attach(bus, rpc_url, contract_address, signer).await?; + EnclaveSolReader::attach(bus, read_provider, contract_address).await?; + EnclaveSolWriter::attach(bus, write_provider, contract_address, signer).await?; Ok(()) } } diff --git a/packages/ciphernode/evm/src/enclave_sol_writer.rs b/packages/ciphernode/evm/src/enclave_sol_writer.rs index ce7dfa03..78ef02c9 100644 --- a/packages/ciphernode/evm/src/enclave_sol_writer.rs +++ b/packages/ciphernode/evm/src/enclave_sol_writer.rs @@ -34,12 +34,12 @@ pub struct EnclaveSolWriter { impl EnclaveSolWriter { pub async fn new( bus: &Addr, - rpc_url: &str, + provider: &SignerProvider, contract_address: Address, signer: &Arc, ) -> Result { Ok(Self { - provider: create_provider_with_signer(&ensure_http_rpc(rpc_url), signer).await?, + provider: provider.clone(), contract_address, bus: bus.clone(), }) @@ -47,11 +47,11 @@ impl EnclaveSolWriter { pub async fn attach( bus: &Addr, - rpc_url: &str, + provider: &SignerProvider, contract_address: &str, signer: &Arc, ) -> Result> { - let addr = EnclaveSolWriter::new(bus, rpc_url, contract_address.parse()?, signer) + let addr = EnclaveSolWriter::new(bus, provider, contract_address.parse()?, signer) .await? .start(); bus.send(Subscribe::new("PlaintextAggregated", addr.clone().into())) From edea81fee0a679508eb107d48837c0eefa571646 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 1 Nov 2024 10:06:24 +1100 Subject: [PATCH 4/5] Formatting --- packages/ciphernode/enclave_node/src/aggregator.rs | 12 ++++++++++-- packages/ciphernode/enclave_node/src/ciphernode.rs | 8 ++++++-- .../ciphernode/evm/src/ciphernode_registry_sol.rs | 6 +++++- packages/ciphernode/evm/src/helpers.rs | 1 - 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/ciphernode/enclave_node/src/aggregator.rs b/packages/ciphernode/enclave_node/src/aggregator.rs index b1a62239..94f3c19e 100644 --- a/packages/ciphernode/enclave_node/src/aggregator.rs +++ b/packages/ciphernode/enclave_node/src/aggregator.rs @@ -47,8 +47,16 @@ pub async fn setup_aggregator( { let rpc_url = &chain.rpc_url; let read_provider = create_readonly_provider(&ensure_ws_rpc(rpc_url)).await?; - let write_provider = create_provider_with_signer(&ensure_http_rpc(rpc_url), &signer).await?; - EnclaveSol::attach(&bus, &read_provider, &write_provider, &chain.contracts.enclave, &signer).await?; + let write_provider = + create_provider_with_signer(&ensure_http_rpc(rpc_url), &signer).await?; + EnclaveSol::attach( + &bus, + &read_provider, + &write_provider, + &chain.contracts.enclave, + &signer, + ) + .await?; RegistryFilterSol::attach(&bus, &write_provider, &chain.contracts.filter_registry).await?; CiphernodeRegistrySol::attach(&bus, &read_provider, &chain.contracts.ciphernode_registry) .await?; diff --git a/packages/ciphernode/enclave_node/src/ciphernode.rs b/packages/ciphernode/enclave_node/src/ciphernode.rs index 74c00cdc..2840429e 100644 --- a/packages/ciphernode/enclave_node/src/ciphernode.rs +++ b/packages/ciphernode/enclave_node/src/ciphernode.rs @@ -5,7 +5,10 @@ use cipher::Cipher; use config::AppConfig; use data::{DataStore, InMemStore, SledStore}; use enclave_core::EventBus; -use evm::{helpers::{create_readonly_provider, ensure_ws_rpc}, CiphernodeRegistrySol, EnclaveSolReader}; +use evm::{ + helpers::{create_readonly_provider, ensure_ws_rpc}, + CiphernodeRegistrySol, EnclaveSolReader, +}; use logger::SimpleLogger; use p2p::P2p; use rand::SeedableRng; @@ -44,7 +47,8 @@ pub async fn setup_ciphernode( let read_provider = create_readonly_provider(&ensure_ws_rpc(rpc_url)).await?; EnclaveSolReader::attach(&bus, &read_provider, &chain.contracts.enclave).await?; - CiphernodeRegistrySol::attach(&bus, &read_provider, &chain.contracts.ciphernode_registry).await?; + CiphernodeRegistrySol::attach(&bus, &read_provider, &chain.contracts.ciphernode_registry) + .await?; } E3RequestRouter::builder(&bus, store.clone()) diff --git a/packages/ciphernode/evm/src/ciphernode_registry_sol.rs b/packages/ciphernode/evm/src/ciphernode_registry_sol.rs index 08745653..b4980398 100644 --- a/packages/ciphernode/evm/src/ciphernode_registry_sol.rs +++ b/packages/ciphernode/evm/src/ciphernode_registry_sol.rs @@ -107,7 +107,11 @@ impl CiphernodeRegistrySolReader { pub struct CiphernodeRegistrySol; impl CiphernodeRegistrySol { - pub async fn attach(bus: &Addr, provider: &ReadonlyProvider, contract_address: &str) -> Result<()> { + pub async fn attach( + bus: &Addr, + provider: &ReadonlyProvider, + contract_address: &str, + ) -> Result<()> { CiphernodeRegistrySolReader::attach(bus, provider, contract_address).await?; Ok(()) } diff --git a/packages/ciphernode/evm/src/helpers.rs b/packages/ciphernode/evm/src/helpers.rs index f8f6047f..36a5d6f1 100644 --- a/packages/ciphernode/evm/src/helpers.rs +++ b/packages/ciphernode/evm/src/helpers.rs @@ -66,7 +66,6 @@ pub async fn stream_from_evm( info!("Exiting stream loop"); } - /// We need to cache the chainId so we can easily use it in a non-async situation /// This wrapper just stores the chain_id with the Provider #[derive(Clone)] From d5a90a9b7c43e63cf8994398393eb320503f9d23 Mon Sep 17 00:00:00 2001 From: ryardley Date: Fri, 1 Nov 2024 16:47:46 +0700 Subject: [PATCH 5/5] Remove redundant params --- packages/ciphernode/enclave_node/src/aggregator.rs | 1 - packages/ciphernode/evm/src/enclave_sol.rs | 6 +----- packages/ciphernode/evm/src/enclave_sol_writer.rs | 10 +--------- packages/ciphernode/evm/src/registry_filter_sol.rs | 4 +--- 4 files changed, 3 insertions(+), 18 deletions(-) diff --git a/packages/ciphernode/enclave_node/src/aggregator.rs b/packages/ciphernode/enclave_node/src/aggregator.rs index 94f3c19e..18d47c24 100644 --- a/packages/ciphernode/enclave_node/src/aggregator.rs +++ b/packages/ciphernode/enclave_node/src/aggregator.rs @@ -54,7 +54,6 @@ pub async fn setup_aggregator( &read_provider, &write_provider, &chain.contracts.enclave, - &signer, ) .await?; RegistryFilterSol::attach(&bus, &write_provider, &chain.contracts.filter_registry).await?; diff --git a/packages/ciphernode/evm/src/enclave_sol.rs b/packages/ciphernode/evm/src/enclave_sol.rs index b61734a3..123bc5ed 100644 --- a/packages/ciphernode/evm/src/enclave_sol.rs +++ b/packages/ciphernode/evm/src/enclave_sol.rs @@ -1,12 +1,9 @@ -use std::sync::Arc; - use crate::{ enclave_sol_reader::EnclaveSolReader, enclave_sol_writer::EnclaveSolWriter, helpers::{ReadonlyProvider, SignerProvider}, }; use actix::Addr; -use alloy::signers::local::PrivateKeySigner; use anyhow::Result; use enclave_core::EventBus; @@ -17,10 +14,9 @@ impl EnclaveSol { read_provider: &ReadonlyProvider, write_provider: &SignerProvider, contract_address: &str, - signer: &Arc, ) -> Result<()> { EnclaveSolReader::attach(bus, read_provider, contract_address).await?; - EnclaveSolWriter::attach(bus, write_provider, contract_address, signer).await?; + EnclaveSolWriter::attach(bus, write_provider, contract_address).await?; Ok(()) } } diff --git a/packages/ciphernode/evm/src/enclave_sol_writer.rs b/packages/ciphernode/evm/src/enclave_sol_writer.rs index 78ef02c9..474e1134 100644 --- a/packages/ciphernode/evm/src/enclave_sol_writer.rs +++ b/packages/ciphernode/evm/src/enclave_sol_writer.rs @@ -1,18 +1,12 @@ -use std::sync::Arc; - -use crate::helpers::create_provider_with_signer; -use crate::helpers::ensure_http_rpc; use crate::helpers::SignerProvider; use actix::prelude::*; use actix::Addr; -use alloy::signers::local::PrivateKeySigner; use alloy::{primitives::Address, sol}; use alloy::{ primitives::{Bytes, U256}, rpc::types::TransactionReceipt, }; use anyhow::Result; -use data::DataStore; use enclave_core::Shutdown; use enclave_core::{BusError, E3id, EnclaveErrorType, PlaintextAggregated, Subscribe}; use enclave_core::{EnclaveEvent, EventBus}; @@ -36,7 +30,6 @@ impl EnclaveSolWriter { bus: &Addr, provider: &SignerProvider, contract_address: Address, - signer: &Arc, ) -> Result { Ok(Self { provider: provider.clone(), @@ -49,9 +42,8 @@ impl EnclaveSolWriter { bus: &Addr, provider: &SignerProvider, contract_address: &str, - signer: &Arc, ) -> Result> { - let addr = EnclaveSolWriter::new(bus, provider, contract_address.parse()?, signer) + let addr = EnclaveSolWriter::new(bus, provider, contract_address.parse()?) .await? .start(); bus.send(Subscribe::new("PlaintextAggregated", addr.clone().into())) diff --git a/packages/ciphernode/evm/src/registry_filter_sol.rs b/packages/ciphernode/evm/src/registry_filter_sol.rs index f4f3fa03..c62ce44c 100644 --- a/packages/ciphernode/evm/src/registry_filter_sol.rs +++ b/packages/ciphernode/evm/src/registry_filter_sol.rs @@ -1,9 +1,8 @@ -use crate::helpers::{create_provider_with_signer, ensure_http_rpc, SignerProvider}; +use crate::helpers::SignerProvider; use actix::prelude::*; use alloy::{ primitives::{Address, Bytes, U256}, rpc::types::TransactionReceipt, - signers::local::PrivateKeySigner, sol, }; use anyhow::Result; @@ -11,7 +10,6 @@ use enclave_core::{ BusError, E3id, EnclaveErrorType, EnclaveEvent, EventBus, OrderedSet, PublicKeyAggregated, Shutdown, Subscribe, }; -use std::sync::Arc; use tracing::info; sol!(