Skip to content

Commit 12d78a2

Browse files
Merge branch 'staging' into feataggmode/separate-pollet-http-server
2 parents ef19e3d + 585fad0 commit 12d78a2

39 files changed

+788
-595
lines changed

Makefile

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -336,14 +336,10 @@ agg_mode_gateway_send_payment:
336336
--private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
337337

338338
agg_mode_gateway_send_sp1_proof:
339-
@NONCE=$$(curl -s http://127.0.0.1:8089/nonce/0x70997970C51812dc3A010C7d01b50e0d17dc79C8 | jq -r '.data.nonce'); \
340-
curl -X POST \
341-
-H "Content-Type: multipart/form-data" \
342-
-F "nonce=$${NONCE}" \
343-
-F "proof=@scripts/test_files/sp1/sp1_fibonacci_5_0_0.proof" \
344-
-F "program_vk=@scripts/test_files/sp1/sp1_fibonacci_5_0_0_vk.bin" \
345-
-F "_signature_hex=0x0" \
346-
http://127.0.0.1:8089/proof/sp1
339+
@cargo run --manifest-path aggregation_mode/cli/Cargo.toml -- submit sp1 \
340+
--proof scripts/test_files/sp1/sp1_fibonacci_5_0_0.proof \
341+
--vk scripts/test_files/sp1/sp1_fibonacci_5_0_0_vk.bin \
342+
--private-key "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d"
347343

348344
__AGGREGATOR__: ## ____
349345

aggregation_mode/Cargo.lock

Lines changed: 51 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

aggregation_mode/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[workspace]
22
resolver = "2"
3-
members = ["./gateway", "./proof_aggregator", "./db", "./payments_poller"]
3+
members = ["./gateway", "./proof_aggregator", "./db", "./payments_poller", "./sdk", "./cli"]
44

55
[workspace.package]
66
version = "0.1.0"
@@ -13,6 +13,7 @@ serde_yaml = "0.9"
1313
alloy = { version = "1.1.1", features = ["default", "signer-keystore", "kzg"] }
1414
bincode = "1.3.3"
1515
aligned-sdk = { path = "../crates/sdk/" }
16+
db = { path = "./db" }
1617
sp1-sdk = "5.0.0"
1718
risc0-zkvm = { version = "3.0.3" }
1819

aggregation_mode/cli/Cargo.toml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[package]
2+
name = "agg_mode_cli"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[dependencies]
7+
serde = { workspace = true }
8+
tracing = { version = "0.1", features = ["log"] }
9+
tracing-subscriber = { version = "0.3.0", features = ["env-filter"] }
10+
bincode = "1.3.3"
11+
tokio = { version = "1", features = ["macros", "rt-multi-thread", "time"] }
12+
alloy = { workspace = true }
13+
agg_mode_sdk = { path = "../sdk"}
14+
sp1-sdk = "5.0.0"
15+
clap = { version = "4.5.4", features = ["derive"] }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod submit;
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use agg_mode_sdk::{gateway::provider::AggregationModeGatewayProvider, types::Network};
2+
use alloy::signers::local::LocalSigner;
3+
use clap::{command, Args, Subcommand};
4+
use sp1_sdk::{SP1ProofWithPublicValues, SP1VerifyingKey};
5+
use std::{path::PathBuf, str::FromStr};
6+
7+
#[derive(Debug, Subcommand)]
8+
pub enum SubmitCommand {
9+
#[command(name = "sp1")]
10+
SP1(SubmitSP1Args),
11+
}
12+
13+
#[derive(Debug, Clone, Args)]
14+
pub struct SubmitSP1Args {
15+
#[arg(short = 'p', long = "proof")]
16+
proof_path: PathBuf,
17+
#[arg(long = "vk")]
18+
verifying_key_path: PathBuf,
19+
#[arg(long = "private-key")]
20+
private_key: String,
21+
#[arg(short = 'n', long = "network", default_value = "devnet", value_parser = parse_network)]
22+
network: Network,
23+
}
24+
25+
fn parse_network(value: &str) -> Result<Network, String> {
26+
Network::from_str(value).map_err(|_| format!("unsupported network supplied: {value}"))
27+
}
28+
29+
pub async fn run(args: SubmitSP1Args) {
30+
tracing::info!("Submitting SP1 proof to {:?} ", args.network);
31+
32+
let proof = load_proof(&args.proof_path).expect("Valid proof");
33+
let vk = load_vk(&args.verifying_key_path).expect("Valid vk");
34+
35+
let signer =
36+
LocalSigner::from_str(args.private_key.trim()).expect("failed to parse private key: {e}");
37+
38+
let provider = AggregationModeGatewayProvider::new_with_signer(args.network.clone(), signer)
39+
.expect("failed to initialize gateway client: {e:?}");
40+
41+
let response = provider
42+
.submit_sp1_proof(&proof, &vk)
43+
.await
44+
.expect("failed to submit proof: {e:?}");
45+
46+
tracing::info!(
47+
"Proof submitted successfully. Task ID: {}",
48+
response.data.task_id
49+
);
50+
}
51+
52+
fn load_proof(path: &PathBuf) -> Result<SP1ProofWithPublicValues, String> {
53+
let bytes = std::fs::read(path)
54+
.map_err(|e| format!("failed to read proof from {}: {e}", path.display()))?;
55+
56+
bincode::deserialize(&bytes)
57+
.map_err(|e| format!("failed to deserialize proof {}: {e}", path.display()))
58+
}
59+
60+
fn load_vk(path: &PathBuf) -> Result<SP1VerifyingKey, String> {
61+
let bytes = std::fs::read(path)
62+
.map_err(|e| format!("failed to read verifying key from {}: {e}", path.display()))?;
63+
64+
bincode::deserialize(&bytes).map_err(|e| {
65+
format!(
66+
"failed to deserialize verifying key {}: {e}",
67+
path.display()
68+
)
69+
})
70+
}

aggregation_mode/cli/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod commands;

aggregation_mode/cli/src/main.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use agg_mode_cli::commands::{self, submit::SubmitCommand};
2+
use clap::{Parser, Subcommand};
3+
use tracing_subscriber::{EnvFilter, FmtSubscriber};
4+
5+
#[derive(Debug, Parser)]
6+
struct Cli {
7+
#[command(subcommand)]
8+
command: Command,
9+
}
10+
11+
#[derive(Debug, Subcommand)]
12+
enum Command {
13+
#[command(subcommand)]
14+
Submit(SubmitCommand),
15+
}
16+
17+
#[tokio::main]
18+
async fn main() {
19+
let filter = EnvFilter::new("info");
20+
let subscriber = FmtSubscriber::builder().with_env_filter(filter).finish();
21+
tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed");
22+
23+
let cli = Cli::parse();
24+
25+
match cli.command {
26+
Command::Submit(subcommand) => match subcommand {
27+
SubmitCommand::SP1(args) => commands::submit::run(args).await,
28+
},
29+
};
30+
}

aggregation_mode/db/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[package]
2-
name = "agg_mode_db"
2+
name = "db"
33
version = "0.1.0"
44
edition = "2021"
55

aggregation_mode/db/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod types;

0 commit comments

Comments
 (0)