Skip to content

Commit 5f3738c

Browse files
committed
Trace gen endpoint
1 parent f3de455 commit 5f3738c

File tree

16 files changed

+182
-111
lines changed

16 files changed

+182
-111
lines changed

bin/prover-cli/src/prove.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::path::PathBuf;
44
use clap::Parser;
55
use prover_sdk::{
66
access_key::ProverAccessKey, sdk::ProverSDK, Cairo0ProverInput, CairoCompiledProgram,
7-
CairoProverInput, JobResult, Layout, ProverResult,
7+
CairoProverInput, JobResult, Layout, ProverResult, RunMode,
88
};
99
use serde_json::Value;
1010
use url::Url;
@@ -39,15 +39,15 @@ pub struct Prove {
3939
pub n_queries: Option<u32>,
4040
#[arg(long, env)]
4141
pub pow_bits: Option<u32>,
42-
#[arg(long, env, default_value = "false")]
43-
pub bootload: bool,
42+
#[arg(long, env, default_value = "trace")]
43+
pub run_mode: RunMode,
4444
#[arg(long, env, default_value = "false")]
4545
pub full_output: bool,
4646
}
4747
impl Prove {
4848
pub async fn run(self) {
4949
let access_key = ProverAccessKey::from_hex_string(&self.prover_access_key.clone()).unwrap();
50-
if self.bootload {
50+
if matches!(self.run_mode, RunMode::Bootload) {
5151
assert!(self.layout.is_bootloadable(),"Invalid layout for bootloading, supported layouts for bootloader: recursive, recursive_with_poseidon, starknet, starknet_with_keccak")
5252
}
5353
let sdk = ProverSDK::new(self.prover_url.clone(), access_key)
@@ -94,7 +94,7 @@ pub async fn prove(args: Prove, sdk: ProverSDK) -> u64 {
9494
program_input,
9595
pow_bits: args.pow_bits,
9696
n_queries: args.n_queries,
97-
bootload: args.bootload,
97+
run_mode: args.run_mode,
9898
};
9999
sdk.prove_cairo0(data).await.unwrap()
100100
}
@@ -109,7 +109,7 @@ pub async fn prove(args: Prove, sdk: ProverSDK) -> u64 {
109109
program_input: input,
110110
pow_bits: args.pow_bits,
111111
n_queries: args.n_queries,
112-
bootload: args.bootload,
112+
run_mode: args.run_mode,
113113
};
114114
sdk.prove_cairo(data).await.unwrap()
115115
}

bin/prover-cli/src/run.rs

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::path::PathBuf;
33
use clap::Parser;
44
use prover_sdk::{
55
access_key::ProverAccessKey, sdk::ProverSDK, Cairo0ProverInput, CairoCompiledProgram,
6-
CairoProverInput, JobResult, Layout, RunResult,
6+
CairoProverInput, JobResult, Layout, RunMode, RunResult,
77
};
88
use serde_json::Value;
99
use tokio::fs;
@@ -35,8 +35,8 @@ pub struct CairoRunner {
3535
pub sse: bool,
3636
#[arg(long, env)]
3737
pub proof_dir: PathBuf,
38-
#[arg(long, env, default_value = "false")]
39-
pub bootload: bool,
38+
#[arg(long, env, default_value = "trace")]
39+
pub run_mode: RunMode,
4040
}
4141
impl CairoRunner {
4242
pub async fn run(self) {
@@ -55,33 +55,44 @@ impl CairoRunner {
5555
if !(self.proof_dir).exists() {
5656
fs::create_dir(&self.proof_dir).await.unwrap();
5757
}
58-
let path: std::path::PathBuf = self.proof_dir;
58+
match result {
59+
RunResult::Pie(pie) => {
60+
fs::write("pie.zip", pie).await.unwrap();
61+
}
62+
RunResult::Trace(trace_files) => {
63+
let path: std::path::PathBuf = self.proof_dir;
5964

60-
let trace_path = path.join("trace");
61-
let memory_path = path.join("memory");
62-
fs::write(trace_path.clone(), result.trace).await.unwrap();
63-
fs::write(memory_path.clone(), result.memory).await.unwrap();
65+
let trace_path = path.join("trace");
66+
let memory_path = path.join("memory");
67+
fs::write(trace_path.clone(), trace_files.trace)
68+
.await
69+
.unwrap();
70+
fs::write(memory_path.clone(), trace_files.memory)
71+
.await
72+
.unwrap();
6473

65-
let canonical_trace_path = fs::canonicalize(&trace_path).await.unwrap();
66-
let canonical_memory_path = fs::canonicalize(&memory_path).await.unwrap();
74+
let canonical_trace_path = fs::canonicalize(&trace_path).await.unwrap();
75+
let canonical_memory_path = fs::canonicalize(&memory_path).await.unwrap();
6776

68-
let public_inputs_path = path.join("public_inputs");
69-
let private_inputs_path = path.join("private_inputs");
77+
let public_inputs_path = path.join("public_inputs");
78+
let private_inputs_path = path.join("private_inputs");
7079

71-
fs::write(public_inputs_path, result.public_input)
72-
.await
73-
.unwrap();
74-
fs::write(private_inputs_path, result.private_input)
75-
.await
76-
.unwrap();
80+
fs::write(public_inputs_path, trace_files.public_input)
81+
.await
82+
.unwrap();
83+
fs::write(private_inputs_path, trace_files.private_input)
84+
.await
85+
.unwrap();
7786

78-
println!(
79-
"Proof files are saved, change the paths in private input for those:
80-
trace: {}
81-
memory: {}",
82-
canonical_trace_path.to_str().unwrap(),
83-
canonical_memory_path.to_str().unwrap()
84-
);
87+
println!(
88+
"Proof files are saved, change the paths in private input for those:
89+
trace: {}
90+
memory: {}",
91+
canonical_trace_path.to_str().unwrap(),
92+
canonical_memory_path.to_str().unwrap()
93+
);
94+
}
95+
}
8596
}
8697
}
8798
}
@@ -98,7 +109,7 @@ pub async fn cairo_runner(args: CairoRunner, sdk: ProverSDK) -> u64 {
98109
program_input,
99110
pow_bits: None,
100111
n_queries: None,
101-
bootload: args.bootload,
112+
run_mode: args.run_mode,
102113
};
103114
sdk.run_cairo0(data).await.unwrap()
104115
}
@@ -113,7 +124,7 @@ pub async fn cairo_runner(args: CairoRunner, sdk: ProverSDK) -> u64 {
113124
program_input: input,
114125
pow_bits: None,
115126
n_queries: None,
116-
bootload: args.bootload,
127+
run_mode: args.run_mode,
117128
};
118129
sdk.run_cairo(data).await.unwrap()
119130
}

common/src/models.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,18 @@ pub struct ProverResult {
2929
pub program_output_hash: Felt,
3030
}
3131
#[derive(Debug, Clone, Serialize, Deserialize)]
32-
pub struct RunResult {
32+
pub struct TraceFiles {
3333
pub private_input: String,
3434
pub public_input: String,
3535
pub memory: Vec<u8>,
3636
pub trace: Vec<u8>,
37-
pub pie: Option<String>,
37+
}
38+
39+
#[derive(Debug, Serialize, Deserialize)]
40+
#[serde(untagged)]
41+
pub enum RunResult {
42+
Pie(Vec<u8>),
43+
Trace(TraceFiles),
3844
}
3945
#[derive(Serialize, Deserialize)]
4046
#[serde(untagged)]

common/src/prover_input/cairo.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
use serde::{Deserialize, Serialize};
22
use starknet_types_core::felt::Felt;
33

4+
use super::RunMode;
5+
46
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
57
pub struct CairoProverInput {
68
pub program: CairoCompiledProgram,
79
pub program_input: Vec<Felt>,
810
pub layout: super::Layout,
911
pub n_queries: Option<u32>,
1012
pub pow_bits: Option<u32>,
11-
pub bootload: bool,
13+
pub run_mode: RunMode,
1214
}
1315

1416
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]

common/src/prover_input/cairo0.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::Layout;
1+
use super::{Layout, RunMode};
22
use serde::{Deserialize, Serialize};
33

44
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
@@ -8,7 +8,7 @@ pub struct Cairo0ProverInput {
88
pub layout: Layout,
99
pub n_queries: Option<u32>,
1010
pub pow_bits: Option<u32>,
11-
pub bootload: bool,
11+
pub run_mode: RunMode,
1212
}
1313

1414
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]

common/src/prover_input/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ pub enum ProverInput {
1515
Cairo(CairoProverInput),
1616
}
1717
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ValueEnum)]
18-
pub enum LayoutBridgeOrBootload {
18+
pub enum RunMode {
1919
Bootload,
20-
LayoutBridge,
21-
None,
20+
Pie,
21+
Trace,
2222
}
2323

2424
impl ProverInput {

k8s/prover.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ spec:
1717
containers:
1818
- name: http-prover
1919
# image: docker.io/chudas/http-prover:v0.4
20-
image: docker.io/chudas/http-prover:v0.5.2
20+
image: docker.io/chudas/http-prover:v0.5.5
2121
ports:
2222
- containerPort: 3000
2323
envFrom:

prover-sdk/src/sdk.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,19 @@ impl ProverSDK {
4646
}
4747

4848
pub async fn prove_cairo0(&self, data: Cairo0ProverInput) -> Result<u64, SdkErrors> {
49-
if !data.layout.is_bootloadable() && data.bootload {
49+
if !data.layout.is_bootloadable()
50+
&& matches!(data.run_mode, common::prover_input::RunMode::Bootload)
51+
{
5052
return Err(SdkErrors::BootloaderError);
5153
}
5254
self.prove(ProverInput::Cairo0(data), self.prover_cairo0.clone())
5355
.await
5456
}
5557

5658
pub async fn prove_cairo(&self, data: CairoProverInput) -> Result<u64, SdkErrors> {
57-
if !data.layout.is_bootloadable() && data.bootload {
59+
if !data.layout.is_bootloadable()
60+
&& matches!(data.run_mode, common::prover_input::RunMode::Bootload)
61+
{
5862
return Err(SdkErrors::BootloaderError);
5963
}
6064
self.prove(ProverInput::Cairo(data), self.prover_cairo.clone())
@@ -79,15 +83,19 @@ impl ProverSDK {
7983
Ok(job.job_id)
8084
}
8185
pub async fn run_cairo0(&self, data: Cairo0ProverInput) -> Result<u64, SdkErrors> {
82-
if !data.layout.is_bootloadable() && data.bootload {
86+
if !data.layout.is_bootloadable()
87+
&& matches!(data.run_mode, common::prover_input::RunMode::Bootload)
88+
{
8389
return Err(SdkErrors::BootloaderError);
8490
}
8591
self.run(ProverInput::Cairo0(data), self.run_cairo0.clone())
8692
.await
8793
}
8894

8995
pub async fn run_cairo(&self, data: CairoProverInput) -> Result<u64, SdkErrors> {
90-
if !data.layout.is_bootloadable() && data.bootload {
96+
if !data.layout.is_bootloadable()
97+
&& matches!(data.run_mode, common::prover_input::RunMode::Bootload)
98+
{
9199
return Err(SdkErrors::BootloaderError);
92100
}
93101
self.prove(ProverInput::Cairo(data), self.run_cairo.clone())

prover-sdk/tests/prove_test.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ async fn test_cairo_prove_bootloader() {
2929
program_input,
3030
n_queries: Some(16),
3131
pow_bits: Some(20),
32-
bootload: true,
32+
run_mode: RunMode::Bootload,
3333
};
3434
let job = sdk.prove_cairo(data).await.unwrap();
3535
let result = fetch_job(sdk.clone(), job).await;
@@ -75,7 +75,7 @@ async fn test_cairo_prove() {
7575
program_input,
7676
n_queries: Some(16),
7777
pow_bits: Some(20),
78-
bootload: false,
78+
run_mode: RunMode::Trace,
7979
};
8080
let job = sdk.prove_cairo(data).await.unwrap();
8181
let result = fetch_job(sdk.clone(), job).await;
@@ -116,7 +116,7 @@ async fn test_cairo0_prove_bootloader() {
116116
program_input,
117117
n_queries: Some(16),
118118
pow_bits: Some(20),
119-
bootload: true,
119+
run_mode: RunMode::Bootload,
120120
};
121121
let job = sdk.prove_cairo0(data).await.unwrap();
122122
let result = fetch_job(sdk.clone(), job).await;
@@ -157,7 +157,7 @@ async fn test_cairo0_prove() {
157157
program_input,
158158
n_queries: Some(16),
159159
pow_bits: Some(20),
160-
bootload: false,
160+
run_mode: RunMode::Trace,
161161
};
162162
let job = sdk.prove_cairo0(data).await.unwrap();
163163
let result = fetch_job(sdk.clone(), job).await;
@@ -203,7 +203,7 @@ async fn test_cairo_multi_prove() {
203203
program_input,
204204
n_queries: Some(16),
205205
pow_bits: Some(20),
206-
bootload: false,
206+
run_mode: RunMode::Trace,
207207
};
208208
let job1 = sdk.prove_cairo(data.clone()).await.unwrap();
209209
let job2 = sdk.prove_cairo(data.clone()).await.unwrap();

prover-sdk/tests/run_test.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use common::models::JobResult;
44
use helpers::fetch_job;
55
use prover_sdk::{
66
access_key::ProverAccessKey, sdk::ProverSDK, CairoCompiledProgram, CairoProverInput, Layout,
7+
RunResult,
78
};
89
use starknet_types_core::felt::Felt;
910
use url::Url;
@@ -29,7 +30,7 @@ async fn test_cairo_run() {
2930
program_input,
3031
n_queries: Some(16),
3132
pow_bits: Some(20),
32-
bootload: false,
33+
run_mode: prover_sdk::RunMode::Trace,
3334
};
3435
let job = sdk.run_cairo(data).await.unwrap();
3536
let result = fetch_job(sdk.clone(), job).await;
@@ -40,18 +41,21 @@ async fn test_cairo_run() {
4041
panic!("Expected run result, got prove result");
4142
}
4243
JobResult::Run(run_result) => {
43-
// Validate private input
44-
assert!(
45-
!run_result.private_input.is_empty(),
46-
"Private input is empty"
47-
);
48-
// Validate public input
49-
assert!(!run_result.public_input.is_empty(), "Public input is empty");
44+
match run_result {
45+
RunResult::Pie(_pie) => {
46+
panic!("Expected run result, got pie");
47+
}
48+
RunResult::Trace(trace) => {
49+
assert!(!trace.private_input.is_empty(), "Private input is empty");
50+
// Validate public input
51+
assert!(!trace.public_input.is_empty(), "Public input is empty");
5052

51-
// Validate memory
52-
assert!(!run_result.memory.is_empty(), "Memory is empty");
53-
// Validate trace
54-
assert!(!run_result.trace.is_empty(), "Trace is empty");
53+
// Validate memory
54+
assert!(!trace.memory.is_empty(), "Memory is empty");
55+
// Validate trace
56+
assert!(!trace.trace.is_empty(), "Trace is empty");
57+
}
58+
}
5559
}
5660
}
5761
}

0 commit comments

Comments
 (0)