diff --git a/Cargo.lock b/Cargo.lock index e7724ccc..d6a2c3ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4181,6 +4181,7 @@ dependencies = [ "op-succinct-build-utils", "op-succinct-client-utils", "op-succinct-host-utils", + "rand 0.8.5", "serde", "serde_json", "serde_repr", diff --git a/Cargo.toml b/Cargo.toml index a5b0e59b..8cfe8398 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -114,6 +114,8 @@ sp1-zkvm = { version = "4.0.0", features = ["verify", "embedded"] } # TODO: Switch back to version tag once the Docker workspace directory change is merged. sp1-build = { git = "https://github.com/succinctlabs/sp1", branch = "dev" } +rand = { version = "0.8.5", default-features = false } + [profile.release-client-lto] inherits = "release" panic = "abort" diff --git a/elf/range-elf b/elf/range-elf index 7e497dfe..f4d7074d 100755 Binary files a/elf/range-elf and b/elf/range-elf differ diff --git a/proposer/succinct/Cargo.toml b/proposer/succinct/Cargo.toml index 33b62d8b..a9d29656 100644 --- a/proposer/succinct/Cargo.toml +++ b/proposer/succinct/Cargo.toml @@ -22,6 +22,7 @@ op-succinct-host-utils.workspace = true # sp1 sp1-sdk.workspace = true +rand.workspace = true anyhow.workspace = true dotenv.workspace = true diff --git a/proposer/succinct/bin/server.rs b/proposer/succinct/bin/server.rs index 5b690b1c..942ff48a 100644 --- a/proposer/succinct/bin/server.rs +++ b/proposer/succinct/bin/server.rs @@ -22,6 +22,7 @@ use op_succinct_proposer::{ AggProofRequest, ProofResponse, ProofStatus, SpanProofRequest, SuccinctProposerConfig, ValidateConfigRequest, ValidateConfigResponse, }; +use rand::Rng; use sp1_sdk::{ network::{ proto::network::{ExecutionStatus, FulfillmentStatus}, @@ -182,7 +183,21 @@ async fn request_span_proof( } }; - let client = ProverClient::builder().network().build(); + let cluster_1_weight = env::var("CLUSTER_1_WEIGHT") + .unwrap_or_else(|_| "50".to_string()) + .parse::() + .unwrap_or(50); + + let private_key = if rand::thread_rng().gen_range(0..100) < cluster_1_weight { + env::var("NETWORK_PRIVATE_KEY_1").unwrap() + } else { + env::var("NETWORK_PRIVATE_KEY_2").unwrap() + }; + let client = ProverClient::builder() + .network() + .private_key(&private_key) + .build(); + let proof_id = client .prove(&state.range_pk, &sp1_stdin) .compressed()