Skip to content

Commit

Permalink
use trait object
Browse files Browse the repository at this point in the history
  • Loading branch information
juan518munoz committed Dec 18, 2024
1 parent c67eb25 commit 8cbfad2
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 16 deletions.
16 changes: 9 additions & 7 deletions core/node/da_clients/src/eigen/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,23 @@ use super::sdk::RawEigenClient;
use crate::utils::to_retriable_da_error;

#[async_trait]
pub trait GetBlobData: Clone + std::fmt::Debug + Send + Sync {
pub trait GetBlobData: std::fmt::Debug + Send + Sync {
async fn get_blob_data(&self, input: &str) -> anyhow::Result<Option<Vec<u8>>>;

fn clone_boxed(&self) -> Box<dyn GetBlobData>;
}

/// EigenClient is a client for the Eigen DA service.
#[derive(Debug, Clone)]
pub struct EigenClient<T: GetBlobData> {
pub(crate) client: Arc<RawEigenClient<T>>,
pub struct EigenClient {
pub(crate) client: Arc<RawEigenClient>,
}

impl<T: GetBlobData> EigenClient<T> {
impl EigenClient {
pub async fn new(
config: EigenConfig,
secrets: EigenSecrets,
get_blob_data: Box<T>,
get_blob_data: Box<dyn GetBlobData>,
) -> anyhow::Result<Self> {
let private_key = SecretKey::from_str(secrets.private_key.0.expose_secret().as_str())
.map_err(|e| anyhow::anyhow!("Failed to parse private key: {}", e))?;
Expand All @@ -40,7 +42,7 @@ impl<T: GetBlobData> EigenClient<T> {
}

#[async_trait]
impl<T: GetBlobData + 'static> DataAvailabilityClient for EigenClient<T> {
impl DataAvailabilityClient for EigenClient {
async fn dispatch_blob(
&self,
_: u32, // batch number
Expand Down Expand Up @@ -75,6 +77,6 @@ impl<T: GetBlobData + 'static> DataAvailabilityClient for EigenClient<T> {
}

fn blob_size_limit(&self) -> Option<usize> {
Some(RawEigenClient::<T>::blob_size_limit())
Some(RawEigenClient::blob_size_limit())
}
}
10 changes: 7 additions & 3 deletions core/node/da_clients/src/eigen/client_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ mod tests {

use crate::eigen::{blob_info::BlobInfo, EigenClient, GetBlobData};

impl<T: GetBlobData> EigenClient<T> {
impl EigenClient {
pub async fn get_blob_data(
&self,
blob_id: BlobInfo,
Expand All @@ -32,8 +32,8 @@ mod tests {
const STATUS_QUERY_TIMEOUT: u64 = 1800000; // 30 minutes
const STATUS_QUERY_INTERVAL: u64 = 5; // 5 ms

async fn get_blob_info<T: GetBlobData>(
client: &EigenClient<T>,
async fn get_blob_info(
client: &EigenClient,
result: &DispatchResponse,
) -> anyhow::Result<BlobInfo> {
let blob_info = (|| async {
Expand Down Expand Up @@ -62,6 +62,10 @@ mod tests {
async fn get_blob_data(&self, _input: &'_ str) -> anyhow::Result<Option<Vec<u8>>> {
Ok(None)
}

fn clone_boxed(&self) -> Box<dyn GetBlobData> {
Box::new(self.clone())
}
}

#[ignore = "depends on external RPC"]
Expand Down
22 changes: 17 additions & 5 deletions core/node/da_clients/src/eigen/sdk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,24 +30,36 @@ use crate::eigen::{
verifier::VerificationError,
};

#[derive(Debug, Clone)]
pub(crate) struct RawEigenClient<T: GetBlobData> {
#[derive(Debug)]
pub(crate) struct RawEigenClient {
client: Arc<Mutex<DisperserClient<Channel>>>,
private_key: SecretKey,
pub config: EigenConfig,
verifier: Verifier,
get_blob_data: Box<T>,
get_blob_data: Box<dyn GetBlobData>,
}

impl Clone for RawEigenClient {
fn clone(&self) -> Self {
Self {
client: self.client.clone(),
private_key: self.private_key.clone(),
config: self.config.clone(),
verifier: self.verifier.clone(),
get_blob_data: self.get_blob_data.clone_boxed(),
}
}
}

pub(crate) const DATA_CHUNK_SIZE: usize = 32;

impl<T: GetBlobData> RawEigenClient<T> {
impl RawEigenClient {
const BLOB_SIZE_LIMIT: usize = 1024 * 1024 * 2; // 2 MB

pub async fn new(
private_key: SecretKey,
config: EigenConfig,
get_blob_data: Box<T>,
get_blob_data: Box<dyn GetBlobData>,
) -> anyhow::Result<Self> {
let endpoint =
Endpoint::from_str(config.disperser_rpc.as_str())?.tls_config(ClientTlsConfig::new())?;
Expand Down
5 changes: 4 additions & 1 deletion core/node/da_clients/src/eigen/verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,10 @@ impl Verifier {
.map_err(|_| VerificationError::ServiceManagerError)?
.as_u64();

let depth = self.cfg.settlement_layer_confirmation_depth.saturating_sub(1);
let depth = self
.cfg
.settlement_layer_confirmation_depth
.saturating_sub(1);
let block_to_return = latest - depth as u64;
Ok(block_to_return)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,8 @@ impl GetBlobData for GetBlobFromDB {
.await?;
Ok(batch.map(|b| b.pubdata))
}

fn clone_boxed(&self) -> Box<dyn GetBlobData> {
Box::new(self.clone())
}
}

0 comments on commit 8cbfad2

Please sign in to comment.