diff --git a/Cargo.lock b/Cargo.lock index 2375e0ff3..faa0548fd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2890,9 +2890,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.166" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" [[package]] name = "libgit2-sys" @@ -4856,9 +4856,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.32.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ae3f4f7d64646c46c4cae4e3f01d1c5d255c7406fdd7c7f999a94e488791" +checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" dependencies = [ "core-foundation-sys", "libc", diff --git a/scripts/prove_stdio.rs b/scripts/prove_stdio.rs new file mode 100644 index 000000000..62d03ea30 --- /dev/null +++ b/scripts/prove_stdio.rs @@ -0,0 +1,54 @@ +use std::{env::set_var, fmt::Display, fs::create_dir_all, path::PathBuf, process::Command}; + +use alloy::{eips::BlockId, transports::http::reqwest::Url}; +use anyhow::{ensure, Ok}; +use clap::{arg, Args, ValueEnum, ValueHint}; + +#[derive(ValueEnum, Copy, Clone)] +enum RunMode { + /// Dummy proof is generated. Useful for quickly testing decoding and + /// all other non-proving logic. + Test, + /// The proof is generated and verified. + Verify, +} + +#[derive(Args)] +pub struct ProveStdioArgs { + /// Whether to generate a proof and verify it or not. + mode: RunMode, + /// JSON file containing the witness data. + #[arg(value_hint = ValueHint::DirPath)] + input_witness_file: PathBuf, + /// The end of the block range to prove. If None, start_block-1 is used. + #[arg(long, default_value_t = false)] + use_test_config: bool, +} + +pub fn prove_via_stdio(args: ProveStdioArgs) -> anyhow::Result<()> { + // Set rustc environment variables. + set_var("RUST_MIN_STACK", "33554432"); + set_var("RUST_BACKTRACE", "full"); + set_var("RUST_LOG", "info"); + // Script users are running locally, and might benefit from extra perf. + // See also .cargo/config.toml. + set_var("RUSTFLAGS", "-C target-cpu=native -Zlinker-features=-lld"); + + match args.mode { + RunMode::Test => { + let witness_filename = args + .input_witness_file + .to_str() + .ok_or(anyhow::anyhow!("Invalid witness file path"))?; + if witness_filename.contains("witness_b19807080") { + } else if witness_filename.contains("witness_b3_b6") { + } else { + } + todo!("Test mode"); + } + RunMode::Verify => { + todo!("Verify mode"); + } + } + Ok(()) +} diff --git a/scripts/xtask.rs b/scripts/xtask.rs index 0a28d5ef0..616343183 100644 --- a/scripts/xtask.rs +++ b/scripts/xtask.rs @@ -2,11 +2,13 @@ mod outdated; mod prove_rpc; +mod prove_stdio; use anyhow::Result; use clap::Parser; use outdated::list_outdated_deps; use prove_rpc::{prove_via_rpc, ProveRpcArgs}; +use prove_stdio::{prove_via_stdio, ProveStdioArgs}; #[derive(Parser)] enum Args { @@ -20,11 +22,14 @@ enum Args { Outdated, /// Execute proving via RPC endpoint. ProveRpc(Box), + /// Execute proving via stdin. + ProveStdio(ProveStdioArgs), } fn main() -> Result<()> { match Args::parse() { Args::Outdated => list_outdated_deps(), Args::ProveRpc(args) => prove_via_rpc(*args), + Args::ProveStdio(args) => prove_via_stdio(args), } }