Skip to content

Commit

Permalink
clean
Browse files Browse the repository at this point in the history
  • Loading branch information
clabby committed Sep 18, 2024
1 parent 178221e commit 20825f2
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 32 deletions.
69 changes: 60 additions & 9 deletions bin/host/src/cli/mod.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
//! This module contains all CLI-specific code for the host binary.

use crate::kv::{
use crate::{kv::{
DiskKeyValueStore, LocalKeyValueStore, MemoryKeyValueStore, SharedKeyValueStore,
SplitKeyValueStore,
};
}, util};
use alloy_primitives::B256;
use alloy_provider::ReqwestProvider;
use anyhow::{anyhow, Result};
use clap::{ArgAction, Parser};
use kona_derive::online::{OnlineBeaconClient, OnlineBlobProvider, SimpleSlotDerivation};
use op_alloy_genesis::RollupConfig;
use serde::Serialize;
use std::{path::PathBuf, sync::Arc};
Expand Down Expand Up @@ -40,13 +42,13 @@ pub struct HostCli {
#[clap(long)]
pub l2_block_number: u64,
/// Address of L2 JSON-RPC endpoint to use (eth and debug namespace required).
#[clap(long)]
#[clap(long, requires = "l1_node_address", requires = "l1_beacon_address")]
pub l2_node_address: Option<String>,
/// Address of L1 JSON-RPC endpoint to use (eth namespace required)
#[clap(long)]
#[clap(long, requires = "l2_node_address", requires = "l1_beacon_address")]
pub l1_node_address: Option<String>,
/// Address of the L1 Beacon API endpoint to use.
#[clap(long)]
#[clap(long, requires = "l1_node_address", requires = "l2_node_address")]
pub l1_beacon_address: Option<String>,
/// The Data Directory for preimage data storage. Default uses in-memory storage.
#[clap(long)]
Expand Down Expand Up @@ -75,9 +77,40 @@ pub struct HostCli {
impl HostCli {
/// Returns `true` if the host is running in offline mode.
pub fn is_offline(&self) -> bool {
self.l1_node_address.is_none() ||
self.l2_node_address.is_none() ||
self.l1_beacon_address.is_none()
self.l1_node_address.is_none()
&& self.l2_node_address.is_none()
&& self.l1_beacon_address.is_none()
}

/// Creates the providers associated with the [HostCli] configuration.
///
/// ## Returns
/// - A [ReqwestProvider] for the L1 node.
/// - An [OnlineBlobProvider] for the L1 beacon node.
/// - A [ReqwestProvider] for the L2 node.
pub async fn create_providers(
&self,
) -> Result<(
ReqwestProvider,
OnlineBlobProvider<OnlineBeaconClient, SimpleSlotDerivation>,
ReqwestProvider,
)> {
let beacon_client = OnlineBeaconClient::new_http(
self.l1_beacon_address.clone().ok_or(anyhow!("Beacon API URL must be set"))?,
);
let mut blob_provider = OnlineBlobProvider::new(beacon_client, None, None);
blob_provider
.load_configs()
.await
.map_err(|e| anyhow!("Failed to load blob provider configuration: {e}"))?;
let l1_provider = util::http_provider(
self.l1_node_address.as_ref().ok_or(anyhow!("Provider must be set"))?,
);
let l2_provider = util::http_provider(
self.l2_node_address.as_ref().ok_or(anyhow!("L2 node address must be set"))?,
);

Ok((l1_provider, blob_provider, l2_provider))
}

/// Parses the CLI arguments and returns a new instance of a [SharedKeyValueStore], as it is
Expand Down Expand Up @@ -123,7 +156,7 @@ mod test {
use clap::Parser;

#[test]
fn test_exclusive_flags() {
fn test_flags() {
let zero_hash_str = &B256::ZERO.to_string();
let default_flags = [
"host",
Expand All @@ -145,13 +178,31 @@ mod test {
(["--server", "--rollup-config-path", "dummy"].as_slice(), true),
(["--exec", "dummy", "--l2-chain-id", "0"].as_slice(), true),
(["--exec", "dummy", "--rollup-config-path", "dummy"].as_slice(), true),
(
[
"--l1-node-address",
"dummy",
"--l2-node-address",
"dummy",
"--l1-beacon-address",
"dummy",
"--server",
"--l2-chain-id",
"0",
]
.as_slice(),
true,
),
// invalid
(["--server", "--exec", "dummy", "--l2-chain-id", "0"].as_slice(), false),
(["--l2-chain-id", "0", "--rollup-config-path", "dummy", "--server"].as_slice(), false),
(["--server"].as_slice(), false),
(["--exec", "dummy"].as_slice(), false),
(["--rollup-config-path", "dummy"].as_slice(), false),
(["--l2-chain-id", "0"].as_slice(), false),
(["--l1-node-address", "dummy", "--server", "--l2-chain-id", "0"].as_slice(), false),
(["--l2-node-address", "dummy", "--server", "--l2-chain-id", "0"].as_slice(), false),
(["--l1-beacon-address", "dummy", "--server", "--l2-chain-id", "0"].as_slice(), false),
([].as_slice(), false),
];

Expand Down
25 changes: 2 additions & 23 deletions bin/host/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ use anyhow::{anyhow, bail, Result};
use command_fds::{CommandFdExt, FdMapping};
use futures::FutureExt;
use kona_common::FileDescriptor;
use kona_derive::online::{OnlineBeaconClient, OnlineBlobProvider};
use kona_preimage::{HintReader, OracleServer, PipeHandle};
use kv::KeyValueStore;
use std::{
Expand All @@ -45,16 +44,7 @@ pub async fn start_server(cfg: HostCli) -> Result<()> {
let kv_store = cfg.construct_kv_store();

let fetcher = if !cfg.is_offline() {
let beacon_client = OnlineBeaconClient::new_http(
cfg.l1_beacon_address.clone().expect("Beacon API URL must be set"),
);
let mut blob_provider = OnlineBlobProvider::new(beacon_client, None, None);
blob_provider
.load_configs()
.await
.map_err(|e| anyhow!("Failed to load blob provider configuration: {e}"))?;
let l1_provider = util::http_provider(&cfg.l1_node_address.expect("Provider must be set"));
let l2_provider = util::http_provider(&cfg.l2_node_address.expect("Provider must be set"));
let (l1_provider, blob_provider, l2_provider) = cfg.create_providers().await?;
Some(Arc::new(RwLock::new(Fetcher::new(
kv_store.clone(),
l1_provider,
Expand Down Expand Up @@ -92,18 +82,7 @@ pub async fn start_server_and_native_client(cfg: HostCli) -> Result<i32> {
let kv_store = cfg.construct_kv_store();

let fetcher = if !cfg.is_offline() {
let beacon_client = OnlineBeaconClient::new_http(
cfg.l1_beacon_address.clone().expect("Beacon API URL must be set"),
);
let mut blob_provider = OnlineBlobProvider::new(beacon_client, None, None);
blob_provider
.load_configs()
.await
.map_err(|e| anyhow!("Failed to load blob provider configuration: {e}"))?;
let l1_provider =
util::http_provider(cfg.l1_node_address.as_ref().expect("Provider must be set"));
let l2_provider =
util::http_provider(cfg.l2_node_address.as_ref().expect("Provider must be set"));
let (l1_provider, blob_provider, l2_provider) = cfg.create_providers().await?;
Some(Arc::new(RwLock::new(Fetcher::new(
kv_store.clone(),
l1_provider,
Expand Down

0 comments on commit 20825f2

Please sign in to comment.