Skip to content

Commit 22585bc

Browse files
authored
feat(client): providers generic over oracles (op-rs#336)
* 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
1 parent a40244f commit 22585bc

File tree

13 files changed

+252
-134
lines changed

13 files changed

+252
-134
lines changed

Diff for: Cargo.lock

+124-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: bin/client/src/comms/caching_oracle.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
//!
44
//! [OracleReader]: kona_preimage::OracleReader
55
6-
use crate::ORACLE_READER;
6+
use crate::{HINT_WRITER, ORACLE_READER};
77
use alloc::{boxed::Box, sync::Arc, vec::Vec};
88
use anyhow::Result;
99
use async_trait::async_trait;
1010
use core::num::NonZeroUsize;
11-
use kona_preimage::{PreimageKey, PreimageOracleClient};
11+
use kona_preimage::{HintWriterClient, PreimageKey, PreimageOracleClient};
1212
use lru::LruCache;
1313
use spin::Mutex;
1414

@@ -63,3 +63,10 @@ impl PreimageOracleClient for CachingOracle {
6363
}
6464
}
6565
}
66+
67+
#[async_trait]
68+
impl HintWriterClient for CachingOracle {
69+
async fn write(&self, hint: &str) -> Result<()> {
70+
HINT_WRITER.write(hint).await
71+
}
72+
}

Diff for: bin/client/src/kona.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use alloc::sync::Arc;
99
use alloy_consensus::Header;
1010
use kona_client::{
1111
l1::{DerivationDriver, OracleBlobProvider, OracleL1ChainProvider},
12-
l2::{FPVMPrecompileOverride, OracleL2ChainProvider, TrieDBHintWriter},
12+
l2::{FPVMPrecompileOverride, OracleL2ChainProvider},
1313
BootInfo, CachingOracle,
1414
};
1515
use kona_common_proc::client_entry;
@@ -57,12 +57,14 @@ fn main() -> Result<()> {
5757
.await?;
5858
let L2AttributesWithParent { attributes, .. } = driver.produce_disputed_payload().await?;
5959

60-
let precompile_overrides =
61-
FPVMPrecompileOverride::<OracleL2ChainProvider, TrieDBHintWriter>::default();
60+
let precompile_overrides = FPVMPrecompileOverride::<
61+
OracleL2ChainProvider<CachingOracle>,
62+
OracleL2ChainProvider<CachingOracle>,
63+
>::default();
6264
let mut executor = StatelessL2BlockExecutor::builder(&boot.rollup_config)
6365
.with_parent_header(driver.take_l2_safe_head_header())
64-
.with_fetcher(l2_provider)
65-
.with_hinter(TrieDBHintWriter)
66+
.with_fetcher(l2_provider.clone())
67+
.with_hinter(l2_provider)
6668
.with_precompile_overrides(precompile_overrides)
6769
.build()?;
6870
let Header { number, .. } = *executor.execute_payload(attributes)?;

Diff for: bin/client/src/l1/blob_provider.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Contains the concrete implementation of the [BlobProvider] trait for the client program.
22
3-
use crate::{CachingOracle, HintType, HINT_WRITER};
3+
use crate::HintType;
44
use alloc::{boxed::Box, sync::Arc, vec::Vec};
55
use alloy_consensus::Blob;
66
use alloy_eips::eip4844::FIELD_ELEMENTS_PER_BLOB;
@@ -10,18 +10,18 @@ use kona_derive::{
1010
traits::BlobProvider,
1111
types::{BlobProviderError, IndexedBlobHash},
1212
};
13-
use kona_preimage::{HintWriterClient, PreimageKey, PreimageKeyType, PreimageOracleClient};
13+
use kona_preimage::{CommsClient, PreimageKey, PreimageKeyType};
1414
use kona_primitives::BlockInfo;
1515

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

22-
impl OracleBlobProvider {
22+
impl<T: CommsClient> OracleBlobProvider<T> {
2323
/// Constructs a new `OracleBlobProvider`.
24-
pub fn new(oracle: Arc<CachingOracle>) -> Self {
24+
pub fn new(oracle: Arc<T>) -> Self {
2525
Self { oracle }
2626
}
2727

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

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

5050
// Fetch the blob commitment.
5151
let mut commitment = [0u8; 48];
@@ -77,7 +77,7 @@ impl OracleBlobProvider {
7777
}
7878

7979
#[async_trait]
80-
impl BlobProvider for OracleBlobProvider {
80+
impl<T: CommsClient + Sync + Send> BlobProvider for OracleBlobProvider<T> {
8181
async fn get_blobs(
8282
&mut self,
8383
block_ref: &BlockInfo,

0 commit comments

Comments
 (0)