MCPcopy Create free account
hub / github.com/BitVM/BitVM / stark_to_succinct

Function stark_to_succinct

prover/src/docker.rs:19–166  ·  view source on GitHub ↗
(
    succinct_receipt: SuccinctReceipt<ReceiptClaim>,
    journal: &[u8],
)

Source from the content-addressed store, hash-verified

17use tempfile::tempdir;
18
19pub fn stark_to_succinct(
20 succinct_receipt: SuccinctReceipt<ReceiptClaim>,
21 journal: &[u8],
22) -> (Seal, [u8; 31]) {
23 let ident_receipt = risc0_zkvm::recursion::identity_p254(&succinct_receipt).unwrap();
24 let identity_p254_seal_bytes = ident_receipt.get_seal_bytes();
25 let receipt_claim = succinct_receipt.claim.value().unwrap();
26
27 // This part is from risc0-groth16
28 if !is_x86_architecture() {
29 panic!("stark_to_snark is only supported on x86 architecture.")
30 }
31 if !is_docker_installed() {
32 panic!("Please install docker first.")
33 }
34
35 let tmp_dir = tempdir().unwrap();
36 let work_dir = std::env::var("RISC0_WORK_DIR");
37 let work_dir = work_dir.as_ref().map(Path::new).unwrap_or(tmp_dir.path());
38 println!("work_dir: {:?}", work_dir);
39 std::fs::write(work_dir.join("seal.r0"), identity_p254_seal_bytes.clone()).unwrap();
40 let seal_path = work_dir.join("input.json");
41 let proof_path = work_dir.join("proof.json");
42 let output_path = work_dir.join("public.json");
43 let mut seal_json = Vec::new();
44 to_json(&*identity_p254_seal_bytes, &mut seal_json).unwrap();
45 std::fs::write(seal_path.clone(), seal_json).unwrap();
46
47 let pre_state: risc0_zkvm::MaybePruned<SystemState> = receipt_claim.clone().pre;
48 println!("pre_state: {:?}", pre_state);
49 let pre_state_digest: Digest = pre_state.clone().digest();
50 println!("pre_state_digest: {:?}", pre_state_digest);
51 let pre_state_digest_bits: Vec<String> = pre_state_digest
52 .as_bytes()
53 .iter()
54 .flat_map(|&byte| (0..8).rev().map(move |i| ((byte >> i) & 1).to_string()))
55 .collect();
56 println!("pre_state_digest_bits: {:?}", pre_state_digest_bits);
57 let post_state: risc0_zkvm::MaybePruned<SystemState> = receipt_claim.clone().post;
58 println!("post_state: {:?}", post_state);
59 let post_state_digest: Digest = post_state.clone().digest();
60 let post_state_digest_bits: Vec<String> = post_state_digest
61 .as_bytes()
62 .iter()
63 .flat_map(|&byte| (0..8).rev().map(move |i| ((byte >> i) & 1).to_string()))
64 .collect();
65 println!("post_state_digest_bits: {:?}", post_state_digest_bits);
66
67 let mut journal_bits = Vec::new();
68 for byte in journal {
69 for i in 0..8 {
70 journal_bits.push((byte >> (7 - i)) & 1);
71 }
72 }
73 println!("journal_bits len: {:?}", journal_bits.len());
74
75 let succinct_verifier_params = SuccinctReceiptVerifierParameters::default();
76 println!("Succinct verifier params: {:?}", succinct_verifier_params);

Callers 1

test_final_circuitFunction · 0.85

Calls 8

is_x86_architectureFunction · 0.85
is_docker_installedFunction · 0.85
to_decimalFunction · 0.85
as_refMethod · 0.80
cloneMethod · 0.80
lenMethod · 0.80
pushMethod · 0.45
intoMethod · 0.45

Tested by 1

test_final_circuitFunction · 0.68