Skip to content

Commit

Permalink
feat(client): providers generic over oracles (#336)
Browse files Browse the repository at this point in the history
* merge generic oracle changes to the current head

* rm patch file

* fix preimage cargo toml

* cargo update

* add serde feature back to preimage crate

* linted, all features lint fails due to mutual exclusion

* rm mutual exclusion
  • Loading branch information
zobront authored Jul 23, 2024
1 parent a40244f commit 22585bc
Show file tree
Hide file tree
Showing 13 changed files with 252 additions and 134 deletions.
135 changes: 124 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 9 additions & 2 deletions bin/client/src/comms/caching_oracle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
//!
//! [OracleReader]: kona_preimage::OracleReader

use crate::ORACLE_READER;
use crate::{HINT_WRITER, ORACLE_READER};
use alloc::{boxed::Box, sync::Arc, vec::Vec};
use anyhow::Result;
use async_trait::async_trait;
use core::num::NonZeroUsize;
use kona_preimage::{PreimageKey, PreimageOracleClient};
use kona_preimage::{HintWriterClient, PreimageKey, PreimageOracleClient};
use lru::LruCache;
use spin::Mutex;

Expand Down Expand Up @@ -63,3 +63,10 @@ impl PreimageOracleClient for CachingOracle {
}
}
}

#[async_trait]
impl HintWriterClient for CachingOracle {
async fn write(&self, hint: &str) -> Result<()> {
HINT_WRITER.write(hint).await
}
}
12 changes: 7 additions & 5 deletions bin/client/src/kona.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use alloc::sync::Arc;
use alloy_consensus::Header;
use kona_client::{
l1::{DerivationDriver, OracleBlobProvider, OracleL1ChainProvider},
l2::{FPVMPrecompileOverride, OracleL2ChainProvider, TrieDBHintWriter},
l2::{FPVMPrecompileOverride, OracleL2ChainProvider},
BootInfo, CachingOracle,
};
use kona_common_proc::client_entry;
Expand Down Expand Up @@ -57,12 +57,14 @@ fn main() -> Result<()> {
.await?;
let L2AttributesWithParent { attributes, .. } = driver.produce_disputed_payload().await?;

let precompile_overrides =
FPVMPrecompileOverride::<OracleL2ChainProvider, TrieDBHintWriter>::default();
let precompile_overrides = FPVMPrecompileOverride::<
OracleL2ChainProvider<CachingOracle>,
OracleL2ChainProvider<CachingOracle>,
>::default();
let mut executor = StatelessL2BlockExecutor::builder(&boot.rollup_config)
.with_parent_header(driver.take_l2_safe_head_header())
.with_fetcher(l2_provider)
.with_hinter(TrieDBHintWriter)
.with_fetcher(l2_provider.clone())
.with_hinter(l2_provider)
.with_precompile_overrides(precompile_overrides)
.build()?;
let Header { number, .. } = *executor.execute_payload(attributes)?;
Expand Down
16 changes: 8 additions & 8 deletions bin/client/src/l1/blob_provider.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Contains the concrete implementation of the [BlobProvider] trait for the client program.

use crate::{CachingOracle, HintType, HINT_WRITER};
use crate::HintType;
use alloc::{boxed::Box, sync::Arc, vec::Vec};
use alloy_consensus::Blob;
use alloy_eips::eip4844::FIELD_ELEMENTS_PER_BLOB;
Expand All @@ -10,18 +10,18 @@ use kona_derive::{
traits::BlobProvider,
types::{BlobProviderError, IndexedBlobHash},
};
use kona_preimage::{HintWriterClient, PreimageKey, PreimageKeyType, PreimageOracleClient};
use kona_preimage::{CommsClient, PreimageKey, PreimageKeyType};
use kona_primitives::BlockInfo;

/// An oracle-backed blob provider.
#[derive(Debug, Clone)]
pub struct OracleBlobProvider {
oracle: Arc<CachingOracle>,
pub struct OracleBlobProvider<T: CommsClient> {
oracle: Arc<T>,
}

impl OracleBlobProvider {
impl<T: CommsClient> OracleBlobProvider<T> {
/// Constructs a new `OracleBlobProvider`.
pub fn new(oracle: Arc<CachingOracle>) -> Self {
pub fn new(oracle: Arc<T>) -> Self {
Self { oracle }
}

Expand All @@ -45,7 +45,7 @@ impl OracleBlobProvider {
blob_req_meta[40..48].copy_from_slice(block_ref.timestamp.to_be_bytes().as_ref());

// Send a hint for the blob commitment and field elements.
HINT_WRITER.write(&HintType::L1Blob.encode_with(&[blob_req_meta.as_ref()])).await?;
self.oracle.write(&HintType::L1Blob.encode_with(&[blob_req_meta.as_ref()])).await?;

// Fetch the blob commitment.
let mut commitment = [0u8; 48];
Expand Down Expand Up @@ -77,7 +77,7 @@ impl OracleBlobProvider {
}

#[async_trait]
impl BlobProvider for OracleBlobProvider {
impl<T: CommsClient + Sync + Send> BlobProvider for OracleBlobProvider<T> {
async fn get_blobs(
&mut self,
block_ref: &BlockInfo,
Expand Down
Loading

0 comments on commit 22585bc

Please sign in to comment.