Skip to content

Commit dca81e0

Browse files
PatStilesentropidelicuri-99
authored
fix(batcher): Update Lambdaworks Merkle Trees + Update merkle leaves length check in batcher (#1067)
Co-authored-by: Mariano Nicolini <[email protected]> Co-authored-by: Urix <[email protected]>
1 parent 0023a7b commit dca81e0

File tree

10 files changed

+535
-478
lines changed

10 files changed

+535
-478
lines changed

batcher/Cargo.lock

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

batcher/aligned-batcher/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ ethers = { tag = "v2.0.15-fix-reconnections", features = [
2323
"ws",
2424
"rustls",
2525
], git = "https://github.com/yetanotherco/ethers-rs.git" }
26-
lambdaworks-crypto = { version = "0.7.0", features = ["serde"] }
26+
lambdaworks-crypto = { git = "https://github.com/lambdaclass/lambdaworks.git", rev = "efd46f0b0aea3aa95d94bba7de86cb96611b40d3", features = ["serde"] }
2727
serde_yaml = "0.9.34"
2828
sp1-sdk = { git = "https://github.com/succinctlabs/sp1.git", rev = "v1.0.1" }
2929
risc0-zkvm = { git = "https://github.com/risc0/risc0", tag = "v1.0.1" }

batcher/aligned-batcher/src/lib.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -754,19 +754,17 @@ impl Batcher {
754754
let current_batch_len = batch_state_lock.batch_queue.len();
755755
let last_uploaded_batch_block_lock = self.last_uploaded_batch_block.lock().await;
756756

757-
// FIXME(marian): This condition should be changed to current_batch_size == 0
758-
// once the bug in Lambdaworks merkle tree is fixed.
759-
if current_batch_len < 2 {
760-
info!("Current batch is empty or length 1. Waiting for more proofs...");
757+
if current_batch_len == 0 {
758+
info!("Current batch is empty. Waiting for more proofs...");
761759
return None;
762760
}
763761

764-
if current_batch_len < self.min_batch_len
762+
if batch_state_lock.batch_queue.len() < self.min_batch_len
765763
&& block_number < *last_uploaded_batch_block_lock + self.max_block_interval
766764
{
767765
info!(
768766
"Current batch not ready to be posted. Current block: {} - Last uploaded block: {}. Current batch length: {} - Minimum batch length: {}",
769-
block_number, *last_uploaded_batch_block_lock, current_batch_len, self.min_batch_len
767+
block_number, *last_uploaded_batch_block_lock, batch_state_lock.batch_queue.len(), self.min_batch_len
770768
);
771769
return None;
772770
}
@@ -853,7 +851,11 @@ impl Batcher {
853851
.collect();
854852

855853
let batch_merkle_tree: MerkleTree<VerificationCommitmentBatch> =
856-
MerkleTree::build(&batch_data_comm);
854+
MerkleTree::build(&batch_data_comm).ok_or_else(|| {
855+
BatcherError::TaskCreationError(
856+
"Failed to Build Merkle Tree: Empty Batch".to_string(),
857+
)
858+
})?;
857859

858860
{
859861
let mut last_uploaded_batch_block = self.last_uploaded_batch_block.lock().await;

batcher/aligned-sdk/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ tokio = { version = "1.37.0", features = [
2121
"rt-multi-thread",
2222
"sync",
2323
] }
24-
lambdaworks-crypto = { version = "0.7.0", features = ["serde"] }
24+
lambdaworks-crypto = { git = "https://github.com/lambdaclass/lambdaworks.git", rev = "efd46f0b0aea3aa95d94bba7de86cb96611b40d3", features = ["serde"] }
2525
serde = { version = "1.0.201", features = ["derive"] }
2626
sha3 = { version = "0.10.8" }
2727
url = "2.5.0"

batcher/aligned/Cargo.toml

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,27 @@ edition = "2021"
77
serde = { version = "1.0.201", features = ["derive"] }
88
serde_json = "1.0.117"
99
futures-util = "0.3.30"
10-
tokio = { version = "1.37.0", features = ["io-std", "time", "macros", "rt", "rt-multi-thread", "sync"] }
11-
tokio-tungstenite = { version = "0.23.1", features = ["rustls-tls-webpki-roots", "native-tls"] }
10+
tokio = { version = "1.37.0", features = [
11+
"io-std",
12+
"time",
13+
"macros",
14+
"rt",
15+
"rt-multi-thread",
16+
"sync",
17+
] }
18+
tokio-tungstenite = { version = "0.23.1", features = [
19+
"rustls-tls-webpki-roots",
20+
"native-tls",
21+
] }
1222
url = "2.5.0"
1323
log = "0.4.21"
1424
env_logger = "0.11.3"
1525
clap = { version = "4.5.4", features = ["derive"] }
16-
lambdaworks-crypto = { version = "0.7.0", features = ["serde"] }
17-
ethers = { tag = "v2.0.15-fix-reconnections", features = ["ws", "rustls"], git = "https://github.com/yetanotherco/ethers-rs.git" }
18-
aligned-sdk = { path = "../aligned-sdk"}
26+
lambdaworks-crypto = { git = "https://github.com/lambdaclass/lambdaworks.git", rev = "efd46f0b0aea3aa95d94bba7de86cb96611b40d3", features = ["serde"] }
27+
ethers = { tag = "v2.0.15-fix-reconnections", features = [
28+
"ws",
29+
"rustls",
30+
], git = "https://github.com/yetanotherco/ethers-rs.git" }
31+
aligned-sdk = { path = "../aligned-sdk" }
1932
rpassword = "7.3.1"
20-
sha3 = { version = "0.10.8"}
33+
sha3 = { version = "0.10.8" }

operator/merkle_tree/lib/Cargo.lock

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

operator/merkle_tree/lib/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ edition = "2021"
77
serde = { version = "1.0.201", features = ["derive"] }
88
serde_json = "1.0.117"
99
bincode = "1.3.3"
10-
lambdaworks-crypto = { version = "0.7.0", features = ["serde"] }
10+
lambdaworks-crypto = { git = "https://github.com/lambdaclass/lambdaworks.git", rev = "efd46f0b0aea3aa95d94bba7de86cb96611b40d3", features = ["serde"] }
1111
hex = "0.4.3"
1212
sha3 = "0.10.8"
1313
aligned-sdk = { path = "../../../batcher/aligned-sdk" }

operator/merkle_tree/lib/src/lib.rs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,12 @@ pub extern "C" fn verify_merkle_tree_batch_ffi(
4343
let batch_data_comm: Vec<VerificationDataCommitment> =
4444
batch.into_iter().map(|v| v.into()).collect();
4545

46-
let computed_batch_merkle_tree: MerkleTree<VerificationCommitmentBatch> =
47-
MerkleTree::build(&batch_data_comm);
46+
let Some(computed_batch_merkle_tree) =
47+
MerkleTree::<VerificationCommitmentBatch>::build(&batch_data_comm)
48+
else {
49+
error!("Failed to build merkle tree, batch data commitment is empty");
50+
return false;
51+
};
4852

4953
computed_batch_merkle_tree.root == *merkle_root
5054
}
@@ -66,10 +70,7 @@ mod tests {
6670
merkle_root_file.read_to_end(&mut root_vec).unwrap();
6771

6872
let mut merkle_root = [0; 32];
69-
merkle_root.copy_from_slice(
70-
&hex::decode(&root_vec)
71-
.unwrap(),
72-
);
73+
merkle_root.copy_from_slice(&hex::decode(&root_vec).unwrap());
7374

7475
let result =
7576
verify_merkle_tree_batch_ffi(bytes_vec.as_ptr(), bytes_vec.len(), &merkle_root);
@@ -86,10 +87,7 @@ mod tests {
8687
merkle_root_file.read_to_end(&mut root_vec).unwrap();
8788

8889
let mut merkle_root = [0; 32];
89-
merkle_root.copy_from_slice(
90-
&hex::decode(&root_vec)
91-
.unwrap(),
92-
);
90+
merkle_root.copy_from_slice(&hex::decode(&root_vec).unwrap());
9391

9492
let result =
9593
verify_merkle_tree_batch_ffi(bytes_vec.as_ptr(), bytes_vec.len(), &merkle_root);
@@ -106,10 +104,7 @@ mod tests {
106104
merkle_root_file.read_to_end(&mut root_vec).unwrap();
107105

108106
let mut merkle_root = [0; 32];
109-
merkle_root.copy_from_slice(
110-
&hex::decode(&root_vec)
111-
.unwrap(),
112-
);
107+
merkle_root.copy_from_slice(&hex::decode(&root_vec).unwrap());
113108

114109
let result =
115110
verify_merkle_tree_batch_ffi(bytes_vec.as_ptr(), bytes_vec.len(), &merkle_root);
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
715181f01c095618472a72cd06e384d92f02eadc4ea28bf097181b17fdc57f28
1+
d8f7329e4f522a871373c6251aa3c39be8b89766e54174c9e6457fcd491cd86d
205 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)