From abeb4421cf24b6f5ecaf1ecccab6880fa4814f53 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Sat, 6 Apr 2024 13:31:32 +0400 Subject: [PATCH 1/5] feat: helpers for AnyNetwork --- crates/network/src/any/mod.rs | 9 ++++- crates/network/src/any/signer.rs | 66 ++++++++++++++++++++++++++++++++ crates/network/src/lib.rs | 2 +- 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 crates/network/src/any/signer.rs diff --git a/crates/network/src/any/mod.rs b/crates/network/src/any/mod.rs index f815f452211..09726674abe 100644 --- a/crates/network/src/any/mod.rs +++ b/crates/network/src/any/mod.rs @@ -5,6 +5,11 @@ use alloy_rpc_types::{ }; mod builder; +mod signer; +pub use signer::AnyNetworkSigner; + +/// Alias for a catch-all receipt type. +pub type AnyReceipt = WithOtherFields>>; /// Types for a catch-all network. /// @@ -29,12 +34,12 @@ impl Network for AnyNetwork { type TransactionResponse = WithOtherFields; - type ReceiptResponse = WithOtherFields>>; + type ReceiptResponse = AnyReceipt; type HeaderResponse = WithOtherFields
; } -impl ReceiptResponse for WithOtherFields>> { +impl ReceiptResponse for AnyReceipt { fn contract_address(&self) -> Option { self.contract_address } diff --git a/crates/network/src/any/signer.rs b/crates/network/src/any/signer.rs new file mode 100644 index 00000000000..96732a79464 --- /dev/null +++ b/crates/network/src/any/signer.rs @@ -0,0 +1,66 @@ +use crate::{AnyNetwork, NetworkSigner, TxSigner}; +use alloy_consensus::{SignableTransaction, TxEnvelope, TypedTransaction}; +use async_trait::async_trait; +use alloy_signer::Signature; +use std::sync::Arc; + +/// A signer capable of signing any transaction for the [AnyNetwork] network. +#[derive(Clone)] +pub struct AnyNetworkSigner(Arc + Send + Sync>); + +impl std::fmt::Debug for AnyNetworkSigner { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_tuple("AnyNetworkSigner").finish() + } +} + +impl From for AnyNetworkSigner +where + S: TxSigner + Send + Sync + 'static, +{ + fn from(signer: S) -> Self { + Self::new(signer) + } +} + +impl AnyNetworkSigner { + /// Create a new AnyNetwork signer. + pub fn new(signer: S) -> Self + where + S: TxSigner + Send + Sync + 'static, + { + Self(Arc::new(signer)) + } + + async fn sign_transaction( + &self, + tx: &mut dyn SignableTransaction, + ) -> alloy_signer::Result { + self.0.sign_transaction(tx).await + } +} + +#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] +#[cfg_attr(not(target_arch = "wasm32"), async_trait)] +impl NetworkSigner for AnyNetworkSigner { + async fn sign_transaction(&self, tx: TypedTransaction) -> alloy_signer::Result { + match tx { + TypedTransaction::Legacy(mut t) => { + let sig = self.sign_transaction(&mut t).await?; + Ok(t.into_signed(sig).into()) + } + TypedTransaction::Eip2930(mut t) => { + let sig = self.sign_transaction(&mut t).await?; + Ok(t.into_signed(sig).into()) + } + TypedTransaction::Eip1559(mut t) => { + let sig = self.sign_transaction(&mut t).await?; + Ok(t.into_signed(sig).into()) + } + TypedTransaction::Eip4844(mut t) => { + let sig = self.sign_transaction(&mut t).await?; + Ok(t.into_signed(sig).into()) + } + } + } +} diff --git a/crates/network/src/lib.rs b/crates/network/src/lib.rs index adb861f1bf1..3e0013fffb6 100644 --- a/crates/network/src/lib.rs +++ b/crates/network/src/lib.rs @@ -29,7 +29,7 @@ mod ethereum; pub use ethereum::{Ethereum, EthereumSigner}; mod any; -pub use any::AnyNetwork; +pub use any::{AnyNetwork, AnyReceipt, AnyNetworkSigner}; pub use alloy_eips::eip2718; From 752e203871ff2762f2f893fd6488388272684ffd Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Sat, 6 Apr 2024 15:06:29 +0400 Subject: [PATCH 2/5] fmt --- crates/network/src/any/signer.rs | 2 +- crates/network/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/network/src/any/signer.rs b/crates/network/src/any/signer.rs index 96732a79464..890a71cd00d 100644 --- a/crates/network/src/any/signer.rs +++ b/crates/network/src/any/signer.rs @@ -1,7 +1,7 @@ use crate::{AnyNetwork, NetworkSigner, TxSigner}; use alloy_consensus::{SignableTransaction, TxEnvelope, TypedTransaction}; -use async_trait::async_trait; use alloy_signer::Signature; +use async_trait::async_trait; use std::sync::Arc; /// A signer capable of signing any transaction for the [AnyNetwork] network. diff --git a/crates/network/src/lib.rs b/crates/network/src/lib.rs index 3e0013fffb6..1001d30e401 100644 --- a/crates/network/src/lib.rs +++ b/crates/network/src/lib.rs @@ -29,7 +29,7 @@ mod ethereum; pub use ethereum::{Ethereum, EthereumSigner}; mod any; -pub use any::{AnyNetwork, AnyReceipt, AnyNetworkSigner}; +pub use any::{AnyNetwork, AnyNetworkSigner, AnyReceipt}; pub use alloy_eips::eip2718; From 056984935bd1e19fafe98e0fcbfedf59797f026b Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Sun, 7 Apr 2024 07:23:39 +0400 Subject: [PATCH 3/5] Fixes --- crates/network/src/any/mod.rs | 12 +--- crates/network/src/any/signer.rs | 66 ------------------- crates/network/src/ethereum/signer.rs | 8 +-- crates/network/src/lib.rs | 2 +- crates/rpc-types/src/eth/transaction/mod.rs | 2 +- .../rpc-types/src/eth/transaction/receipt.rs | 7 +- 6 files changed, 14 insertions(+), 83 deletions(-) delete mode 100644 crates/network/src/any/signer.rs diff --git a/crates/network/src/any/mod.rs b/crates/network/src/any/mod.rs index 09726674abe..c98309de3dc 100644 --- a/crates/network/src/any/mod.rs +++ b/crates/network/src/any/mod.rs @@ -1,15 +1,9 @@ use crate::{Network, ReceiptResponse}; -use alloy_consensus::AnyReceiptEnvelope; use alloy_rpc_types::{ - Header, Log, Transaction, TransactionReceipt, TransactionRequest, WithOtherFields, + AnyTransactionReceipt, Header, Transaction, TransactionRequest, WithOtherFields }; mod builder; -mod signer; -pub use signer::AnyNetworkSigner; - -/// Alias for a catch-all receipt type. -pub type AnyReceipt = WithOtherFields>>; /// Types for a catch-all network. /// @@ -34,12 +28,12 @@ impl Network for AnyNetwork { type TransactionResponse = WithOtherFields; - type ReceiptResponse = AnyReceipt; + type ReceiptResponse = AnyTransactionReceipt; type HeaderResponse = WithOtherFields
; } -impl ReceiptResponse for AnyReceipt { +impl ReceiptResponse for AnyTransactionReceipt { fn contract_address(&self) -> Option { self.contract_address } diff --git a/crates/network/src/any/signer.rs b/crates/network/src/any/signer.rs deleted file mode 100644 index 890a71cd00d..00000000000 --- a/crates/network/src/any/signer.rs +++ /dev/null @@ -1,66 +0,0 @@ -use crate::{AnyNetwork, NetworkSigner, TxSigner}; -use alloy_consensus::{SignableTransaction, TxEnvelope, TypedTransaction}; -use alloy_signer::Signature; -use async_trait::async_trait; -use std::sync::Arc; - -/// A signer capable of signing any transaction for the [AnyNetwork] network. -#[derive(Clone)] -pub struct AnyNetworkSigner(Arc + Send + Sync>); - -impl std::fmt::Debug for AnyNetworkSigner { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_tuple("AnyNetworkSigner").finish() - } -} - -impl From for AnyNetworkSigner -where - S: TxSigner + Send + Sync + 'static, -{ - fn from(signer: S) -> Self { - Self::new(signer) - } -} - -impl AnyNetworkSigner { - /// Create a new AnyNetwork signer. - pub fn new(signer: S) -> Self - where - S: TxSigner + Send + Sync + 'static, - { - Self(Arc::new(signer)) - } - - async fn sign_transaction( - &self, - tx: &mut dyn SignableTransaction, - ) -> alloy_signer::Result { - self.0.sign_transaction(tx).await - } -} - -#[cfg_attr(target_arch = "wasm32", async_trait(?Send))] -#[cfg_attr(not(target_arch = "wasm32"), async_trait)] -impl NetworkSigner for AnyNetworkSigner { - async fn sign_transaction(&self, tx: TypedTransaction) -> alloy_signer::Result { - match tx { - TypedTransaction::Legacy(mut t) => { - let sig = self.sign_transaction(&mut t).await?; - Ok(t.into_signed(sig).into()) - } - TypedTransaction::Eip2930(mut t) => { - let sig = self.sign_transaction(&mut t).await?; - Ok(t.into_signed(sig).into()) - } - TypedTransaction::Eip1559(mut t) => { - let sig = self.sign_transaction(&mut t).await?; - Ok(t.into_signed(sig).into()) - } - TypedTransaction::Eip4844(mut t) => { - let sig = self.sign_transaction(&mut t).await?; - Ok(t.into_signed(sig).into()) - } - } - } -} diff --git a/crates/network/src/ethereum/signer.rs b/crates/network/src/ethereum/signer.rs index 05a818971a7..5771553f2a8 100644 --- a/crates/network/src/ethereum/signer.rs +++ b/crates/network/src/ethereum/signer.rs @@ -1,5 +1,4 @@ -use super::Ethereum; -use crate::{NetworkSigner, TxSigner}; +use crate::{Network, NetworkSigner, TxSigner}; use alloy_consensus::{SignableTransaction, TxEnvelope, TypedTransaction}; use alloy_signer::Signature; use async_trait::async_trait; @@ -43,7 +42,8 @@ impl EthereumSigner { #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait)] -impl NetworkSigner for EthereumSigner { +impl NetworkSigner for EthereumSigner + where N: Network { async fn sign_transaction(&self, tx: TypedTransaction) -> alloy_signer::Result { match tx { TypedTransaction::Legacy(mut t) => { @@ -64,4 +64,4 @@ impl NetworkSigner for EthereumSigner { } } } -} +} \ No newline at end of file diff --git a/crates/network/src/lib.rs b/crates/network/src/lib.rs index 1001d30e401..a5464936b7c 100644 --- a/crates/network/src/lib.rs +++ b/crates/network/src/lib.rs @@ -29,7 +29,7 @@ mod ethereum; pub use ethereum::{Ethereum, EthereumSigner}; mod any; -pub use any::{AnyNetwork, AnyNetworkSigner, AnyReceipt}; +pub use any::{AnyNetwork, AnyNetworkSigner}; pub use alloy_eips::eip2718; diff --git a/crates/rpc-types/src/eth/transaction/mod.rs b/crates/rpc-types/src/eth/transaction/mod.rs index c9a3a1d9f75..8eed1e5b335 100644 --- a/crates/rpc-types/src/eth/transaction/mod.rs +++ b/crates/rpc-types/src/eth/transaction/mod.rs @@ -22,7 +22,7 @@ pub use optimism::OptimismTransactionReceiptFields; mod receipt; pub use alloy_consensus::{AnyReceiptEnvelope, Receipt, ReceiptEnvelope, ReceiptWithBloom}; -pub use receipt::TransactionReceipt; +pub use receipt::{TransactionReceipt, AnyTransactionReceipt}; pub mod request; pub use request::{TransactionInput, TransactionRequest}; diff --git a/crates/rpc-types/src/eth/transaction/receipt.rs b/crates/rpc-types/src/eth/transaction/receipt.rs index 1ed7effd97f..b055ff56e8f 100644 --- a/crates/rpc-types/src/eth/transaction/receipt.rs +++ b/crates/rpc-types/src/eth/transaction/receipt.rs @@ -1,5 +1,5 @@ -use crate::Log; -use alloy_consensus::{ReceiptEnvelope, TxType}; +use crate::{Log, WithOtherFields}; +use alloy_consensus::{AnyReceiptEnvelope, ReceiptEnvelope, TxType}; use alloy_primitives::{Address, B256}; use serde::{Deserialize, Serialize}; @@ -115,6 +115,9 @@ impl TransactionReceipt { } } +/// Alias for a catch-all receipt type. +pub type AnyTransactionReceipt = WithOtherFields>>; + #[cfg(test)] mod test { use super::*; From 05a084f96aba0531c02cd54ee4c007d0314ae0cc Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Sun, 7 Apr 2024 07:26:33 +0400 Subject: [PATCH 4/5] fix --- crates/network/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/network/src/lib.rs b/crates/network/src/lib.rs index a5464936b7c..adb861f1bf1 100644 --- a/crates/network/src/lib.rs +++ b/crates/network/src/lib.rs @@ -29,7 +29,7 @@ mod ethereum; pub use ethereum::{Ethereum, EthereumSigner}; mod any; -pub use any::{AnyNetwork, AnyNetworkSigner}; +pub use any::AnyNetwork; pub use alloy_eips::eip2718; From af2eef360b60c2d97d533e7fe03bf1102d3d4db6 Mon Sep 17 00:00:00 2001 From: Arsenii Kulikov Date: Sun, 7 Apr 2024 07:27:34 +0400 Subject: [PATCH 5/5] fmt --- crates/network/src/any/mod.rs | 2 +- crates/network/src/ethereum/signer.rs | 6 ++++-- crates/rpc-types/src/eth/transaction/mod.rs | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/network/src/any/mod.rs b/crates/network/src/any/mod.rs index c98309de3dc..488988cd48a 100644 --- a/crates/network/src/any/mod.rs +++ b/crates/network/src/any/mod.rs @@ -1,6 +1,6 @@ use crate::{Network, ReceiptResponse}; use alloy_rpc_types::{ - AnyTransactionReceipt, Header, Transaction, TransactionRequest, WithOtherFields + AnyTransactionReceipt, Header, Transaction, TransactionRequest, WithOtherFields, }; mod builder; diff --git a/crates/network/src/ethereum/signer.rs b/crates/network/src/ethereum/signer.rs index 5771553f2a8..9197d047527 100644 --- a/crates/network/src/ethereum/signer.rs +++ b/crates/network/src/ethereum/signer.rs @@ -43,7 +43,9 @@ impl EthereumSigner { #[cfg_attr(target_arch = "wasm32", async_trait(?Send))] #[cfg_attr(not(target_arch = "wasm32"), async_trait)] impl NetworkSigner for EthereumSigner - where N: Network { +where + N: Network, +{ async fn sign_transaction(&self, tx: TypedTransaction) -> alloy_signer::Result { match tx { TypedTransaction::Legacy(mut t) => { @@ -64,4 +66,4 @@ impl NetworkSigner for EthereumSigner } } } -} \ No newline at end of file +} diff --git a/crates/rpc-types/src/eth/transaction/mod.rs b/crates/rpc-types/src/eth/transaction/mod.rs index 8eed1e5b335..660d96aac36 100644 --- a/crates/rpc-types/src/eth/transaction/mod.rs +++ b/crates/rpc-types/src/eth/transaction/mod.rs @@ -22,7 +22,7 @@ pub use optimism::OptimismTransactionReceiptFields; mod receipt; pub use alloy_consensus::{AnyReceiptEnvelope, Receipt, ReceiptEnvelope, ReceiptWithBloom}; -pub use receipt::{TransactionReceipt, AnyTransactionReceipt}; +pub use receipt::{AnyTransactionReceipt, TransactionReceipt}; pub mod request; pub use request::{TransactionInput, TransactionRequest};