Skip to content

Commit

Permalink
refactor: more dedicated modules for zksync-specific code (#891)
Browse files Browse the repository at this point in the history
* refactor(cast): move `ZkCast` to dedicated module

* refactor(compile): extract zksync methods

* chore: fmt

* feat(create): move zksync code to dedicated module

* chore: fmt

* chore: clippy

* chore: moar fmt
  • Loading branch information
Karrq authored Feb 3, 2025
1 parent 533df76 commit 5c61abd
Show file tree
Hide file tree
Showing 6 changed files with 825 additions and 759 deletions.
59 changes: 3 additions & 56 deletions crates/cast/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@ use alloy_rpc_types::{BlockId, BlockNumberOrTag, Filter, TransactionRequest};
use alloy_serde::WithOtherFields;
use alloy_sol_types::sol;
use alloy_transport::Transport;
use alloy_zksync::network::{
transaction_request::TransactionRequest as ZkTransactionRequest, Zksync,
};
use base::{Base, NumberWithBase, ToBase};
use chrono::DateTime;
use eyre::{Context, ContextCompat, Result};
Expand Down Expand Up @@ -59,6 +56,9 @@ mod rlp_converter;

use rlp_converter::Item;

pub mod zksync;
pub use zksync::*;

#[macro_use]
extern crate foundry_common;

Expand All @@ -72,59 +72,6 @@ sol! {
}
}

pub struct ZkCast<P, T, Z> {
provider: Z,
inner: Cast<P, T>,
}

impl<P, T, Z> AsRef<Cast<P, T>> for ZkCast<P, T, Z>
where
P: Provider<T, AnyNetwork>,
T: Transport + Clone,
Z: Provider<T, Zksync>,
{
fn as_ref(&self) -> &Cast<P, T> {
&self.inner
}
}

impl<P, T, Z> ZkCast<P, T, Z>
where
P: Provider<T, AnyNetwork>,
T: Transport + Clone,
Z: Provider<T, Zksync>,
{
/// Creates a new ZkCast instance from the provided client and Cast instance
///
/// # Example
///
/// ```
/// use alloy_provider::{network::AnyNetwork, ProviderBuilder, RootProvider};
/// use cast::Cast;
///
/// # async fn foo() -> eyre::Result<()> {
/// let provider =
/// ProviderBuilder::<_, _, AnyNetwork>::default().on_builtin("http://localhost:8545").await?;
/// let cast = Cast::new(provider);
/// let zk_provider =
/// ProviderBuilder::<_, _, Zksync>::default().on_builtin("http://localhost:8011").await?;
/// let zk_cast = ZkCast::new(provider, cast);
/// # Ok(())
/// # }
/// ```
pub fn new(provider: Z, cast: Cast<P, T>) -> Self {
Self { provider, inner: cast }
}

pub async fn send_zk(
&self,
tx: ZkTransactionRequest,
) -> Result<PendingTransactionBuilder<T, Zksync>> {
let res = self.provider.send_transaction(tx).await?;

Ok(res)
}
}
pub struct Cast<P, T> {
provider: P,
transport: PhantomData<T>,
Expand Down
65 changes: 65 additions & 0 deletions crates/cast/src/zksync.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
//! Contains zksync specific logic for foundry's `cast` functionality
use alloy_network::AnyNetwork;
use alloy_provider::{PendingTransactionBuilder, Provider};
use alloy_transport::Transport;
use alloy_zksync::network::{
transaction_request::TransactionRequest as ZkTransactionRequest, Zksync,
};
use eyre::Result;

use crate::Cast;

pub struct ZkCast<P, T, Z> {
provider: Z,
inner: Cast<P, T>,
}

impl<P, T, Z> AsRef<Cast<P, T>> for ZkCast<P, T, Z>
where
P: Provider<T, AnyNetwork>,
T: Transport + Clone,
Z: Provider<T, Zksync>,
{
fn as_ref(&self) -> &Cast<P, T> {
&self.inner
}
}

impl<P, T, Z> ZkCast<P, T, Z>
where
P: Provider<T, AnyNetwork>,
T: Transport + Clone,
Z: Provider<T, Zksync>,
{
/// Creates a new ZkCast instance from the provided client and Cast instance
///
/// # Example
///
/// ```
/// use alloy_provider::{network::AnyNetwork, ProviderBuilder, RootProvider};
/// use cast::Cast;
///
/// # async fn foo() -> eyre::Result<()> {
/// let provider =
/// ProviderBuilder::<_, _, AnyNetwork>::default().on_builtin("http://localhost:8545").await?;
/// let cast = Cast::new(provider);
/// let zk_provider =
/// ProviderBuilder::<_, _, Zksync>::default().on_builtin("http://localhost:8011").await?;
/// let zk_cast = ZkCast::new(provider, cast);
/// # Ok(())
/// # }
/// ```
pub fn new(provider: Z, cast: Cast<P, T>) -> Self {
Self { provider, inner: cast }
}

pub async fn send_zk(
&self,
tx: ZkTransactionRequest,
) -> Result<PendingTransactionBuilder<T, Zksync>> {
let res = self.provider.send_transaction(tx).await?;

Ok(res)
}
}
Loading

0 comments on commit 5c61abd

Please sign in to comment.