diff --git a/core/src/lib.rs b/core/src/lib.rs
index 54d51410c..7ded46377 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -1,4 +1,9 @@
-use alloy_primitives::{Address, FixedBytes};
+use crate::{
+ interfaces::{ProofRequest, RaikoError, RaikoResult},
+ preflight::preflight,
+ provider::BlockDataProvider,
+};
+use alloy_primitives::{Address, B256};
use alloy_rpc_types::EIP1186AccountProofResponse;
use raiko_lib::{
builder::{BlockBuilderStrategy, TaikoStrategy},
@@ -9,7 +14,7 @@ use raiko_lib::{
utils::HeaderHasher,
};
use serde_json::Value;
-use std::collections::HashMap;
+use std::{collections::HashMap, hint::black_box};
use tracing::{debug, error, info, warn};
pub mod interfaces;
@@ -17,12 +22,6 @@ pub mod preflight;
pub mod prover;
pub mod provider;
-use crate::{
- interfaces::{ProofRequest, RaikoError, RaikoResult},
- preflight::preflight,
- provider::BlockDataProvider,
-};
-
pub type MerkleProof = HashMap
;
pub struct Raiko {
@@ -51,8 +50,8 @@ impl Raiko {
preflight(
provider,
self.request.block_number,
- self.l1_chain_spec.clone(),
- self.taiko_chain_spec.clone(),
+ self.l1_chain_spec.to_owned(),
+ self.taiko_chain_spec.to_owned(),
TaikoProverData {
graffiti: self.request.graffiti,
prover: self.request.prover,
@@ -111,19 +110,15 @@ impl Raiko {
&header.parent_beacon_block_root,
"parent_beacon_block_root",
);
- check_eq(
- &exp.extra_data.clone(),
- &header.extra_data.clone(),
- "extra_data",
- );
+ check_eq(&exp.extra_data, &header.extra_data, "extra_data");
// Make sure the blockhash from the node matches the one from the builder
- assert_eq!(
- Into::>::into(header.hash().0),
- input.block_hash_reference,
- "block hash unexpected for block {}",
- input.block_number,
- );
+ require_eq(
+ &B256::from(header.hash().0),
+ &input.block_hash_reference,
+ "block hash unexpected",
+ )?;
+
let output = GuestOutput::Success { header, hash: pi };
Ok(output)
@@ -138,21 +133,32 @@ impl Raiko {
}
pub async fn prove(&self, input: GuestInput, output: &GuestOutput) -> RaikoResult {
+ let data = serde_json::to_value(&self.request)?;
self.request
.proof_type
- .run_prover(
- input.clone(),
- output,
- &serde_json::to_value(self.request.clone())?,
- )
+ .run_prover(input, output, &data)
.await
}
}
fn check_eq(expected: &T, actual: &T, message: &str) {
+ // printing out error, if any, but ignoring the result
+ // making sure it's not optimized out
+ let _ = black_box(require_eq(expected, actual, message));
+}
+
+fn require_eq(
+ expected: &T,
+ actual: &T,
+ message: &str,
+) -> RaikoResult<()> {
if expected != actual {
- error!("Assertion failed: {message} - Expected: {expected:?}, Found: {actual:?}");
+ let msg =
+ format!("Assertion failed: {message} - Expected: {expected:?}, Found: {actual:?}",);
+ error!("{}", msg);
+ return Err(anyhow::Error::msg(msg).into());
}
+ Ok(())
}
/// Merges two json's together, overwriting `a` with the values of `b`
@@ -160,10 +166,10 @@ pub fn merge(a: &mut Value, b: &Value) {
match (a, b) {
(Value::Object(a), Value::Object(b)) => {
for (k, v) in b {
- merge(a.entry(k.clone()).or_insert(Value::Null), v);
+ merge(a.entry(k).or_insert(Value::Null), v);
}
}
- (a, b) if !b.is_null() => *a = b.clone(),
+ (a, b) if !b.is_null() => *a = b.to_owned(),
// If b is null, just keep a (which means do nothing).
_ => {}
}
@@ -230,12 +236,13 @@ mod tests {
let provider =
RpcBlockDataProvider::new(&taiko_chain_spec.rpc, proof_request.block_number - 1)
.expect("Could not create RpcBlockDataProvider");
- let raiko = Raiko::new(l1_chain_spec, taiko_chain_spec, proof_request.clone());
+ let proof_type = proof_request.proof_type.to_owned();
+ let raiko = Raiko::new(l1_chain_spec, taiko_chain_spec, proof_request);
let mut input = raiko
.generate_input(provider)
.await
.expect("input generation failed");
- if is_ci() && proof_request.proof_type == ProofType::Sp1 {
+ if is_ci() && proof_type == ProofType::Sp1 {
input.taiko.skip_verify_blob = true;
}
let output = raiko.get_output(&input).expect("output generation failed");
diff --git a/provers/risc0/guest/Cargo.lock b/provers/risc0/guest/Cargo.lock
index 6e93e10cc..07ab5ec72 100644
--- a/provers/risc0/guest/Cargo.lock
+++ b/provers/risc0/guest/Cargo.lock
@@ -1736,6 +1736,7 @@ dependencies = [
"sha3",
"thiserror",
"thiserror-no-std",
+ "tracing",
"url",
]
diff --git a/provers/sp1/guest/elf/bn254-add b/provers/sp1/guest/elf/bn254-add
index cdf078e91..618c32738 100755
Binary files a/provers/sp1/guest/elf/bn254-add and b/provers/sp1/guest/elf/bn254-add differ
diff --git a/provers/sp1/guest/elf/bn254-mul b/provers/sp1/guest/elf/bn254-mul
index f19295aa3..2e70042ff 100755
Binary files a/provers/sp1/guest/elf/bn254-mul and b/provers/sp1/guest/elf/bn254-mul differ
diff --git a/provers/sp1/guest/elf/ecdsa b/provers/sp1/guest/elf/ecdsa
index 542134874..c3aacde27 100755
Binary files a/provers/sp1/guest/elf/ecdsa and b/provers/sp1/guest/elf/ecdsa differ
diff --git a/provers/sp1/guest/elf/sha256 b/provers/sp1/guest/elf/sha256
index 43d67ff8a..c60b6702b 100755
Binary files a/provers/sp1/guest/elf/sha256 and b/provers/sp1/guest/elf/sha256 differ
diff --git a/provers/sp1/guest/elf/sp1-guest b/provers/sp1/guest/elf/sp1-guest
index ff0ae0381..611a80bd6 100755
Binary files a/provers/sp1/guest/elf/sp1-guest and b/provers/sp1/guest/elf/sp1-guest differ
diff --git a/provers/sp1/guest/elf/test-sp1-guest b/provers/sp1/guest/elf/test-sp1-guest
index 0d3c328b6..9f9cc645e 100755
Binary files a/provers/sp1/guest/elf/test-sp1-guest and b/provers/sp1/guest/elf/test-sp1-guest differ
diff --git a/provers/sp1/guest/src/zk_op.rs b/provers/sp1/guest/src/zk_op.rs
index 70dcfcf36..2a55859a9 100644
--- a/provers/sp1/guest/src/zk_op.rs
+++ b/provers/sp1/guest/src/zk_op.rs
@@ -27,7 +27,9 @@ impl ZkvmOperator for Sp1Operator {
.map(|chunk| u32::from_le_bytes(chunk.try_into().unwrap()))
.collect::>()
.try_into()
- .map_err(|e| Error::ZkvmOperation("Input point processing failed".to_string()))?;
+ .map_err(|e| {
+ Error::ZkvmOperation(format!("Input point processing failed. Details: {:?}", e))
+ })?;
p.mul_assign(&k);
Ok(point_to_be_bytes(p))
@@ -98,7 +100,6 @@ fn point_to_be_bytes(p: AffinePoint) -> [u8; 64] {
([x, y]).concat().try_into().unwrap()
}
-
harness::zk_suits!(
pub mod tests {
use revm_precompile::bn128;