From 5e39d8d49b3d44a08c237ddd4febf12137347e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Mon, 1 Jun 2026 14:11:01 -0300 Subject: [PATCH 01/11] chore: bump leanMultisig to 8fcbd77 --- Cargo.lock | 44 ++++++++++++++++----------------- Cargo.toml | 1 - crates/common/crypto/Cargo.toml | 4 +-- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 871a392c..a2ffd55b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -652,7 +652,7 @@ dependencies = [ [[package]] name = "backend" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-air", "mt-fiat-shamir", @@ -3664,7 +3664,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lean-multisig" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "clap", @@ -3682,7 +3682,7 @@ dependencies = [ [[package]] name = "lean_compiler" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "include_dir", @@ -3698,7 +3698,7 @@ dependencies = [ [[package]] name = "lean_prover" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "itertools 0.14.0", @@ -3716,7 +3716,7 @@ dependencies = [ [[package]] name = "lean_vm" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "itertools 0.14.0", @@ -3772,7 +3772,7 @@ dependencies = [ [[package]] name = "leansig_wrapper" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "ethereum_ssz", @@ -4807,7 +4807,7 @@ dependencies = [ [[package]] name = "mt-air" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-field", "mt-poly", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "mt-fiat-shamir" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-field", "mt-koala-bear", @@ -4830,11 +4830,11 @@ dependencies = [ [[package]] name = "mt-field" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-utils", - "num-bigint 0.4.6", + "num-bigint 0.3.3", "paste", "rand 0.10.1", "rayon", @@ -4845,12 +4845,12 @@ dependencies = [ [[package]] name = "mt-koala-bear" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-field", "mt-utils", - "num-bigint 0.4.6", + "num-bigint 0.3.3", "paste", "rand 0.10.1", "rayon", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "mt-poly" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-field", @@ -4875,7 +4875,7 @@ dependencies = [ [[package]] name = "mt-sumcheck" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-air", "mt-fiat-shamir", @@ -4888,7 +4888,7 @@ dependencies = [ [[package]] name = "mt-symetric" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-field", "mt-koala-bear", @@ -4898,7 +4898,7 @@ dependencies = [ [[package]] name = "mt-utils" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "serde", ] @@ -4906,7 +4906,7 @@ dependencies = [ [[package]] name = "mt-whir" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-fiat-shamir", @@ -6379,7 +6379,7 @@ dependencies = [ [[package]] name = "rec_aggregation" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "include_dir", @@ -7428,7 +7428,7 @@ dependencies = [ [[package]] name = "sub_protocols" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "lean_vm", @@ -7522,7 +7522,7 @@ dependencies = [ [[package]] name = "system-info" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "libc", "rayon", @@ -8072,7 +8072,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utils" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "tracing", @@ -9038,7 +9038,7 @@ dependencies = [ [[package]] name = "zk-alloc" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=0242c909#0242c909260c9e16893baae3004667230429808d" +source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "libc", "system-info", diff --git a/Cargo.toml b/Cargo.toml index a6d37b86..016ccbb4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,4 +76,3 @@ eyre = "0.6" # Allocator + heap profiling tikv-jemallocator = { version = "0.6", features = ["stats", "unprefixed_malloc_on_supported_platforms", "profiling"] } jemalloc_pprof = { version = "0.8", features = ["flamegraph"] } - diff --git a/crates/common/crypto/Cargo.toml b/crates/common/crypto/Cargo.toml index dc5ba718..05bf717c 100644 --- a/crates/common/crypto/Cargo.toml +++ b/crates/common/crypto/Cargo.toml @@ -12,9 +12,9 @@ version.workspace = true [dependencies] ethlambda-types.workspace = true -lean-multisig = { git = "https://github.com/leanEthereum/leanMultisig.git", rev = "0242c909" } +lean-multisig = { git = "https://github.com/leanEthereum/leanMultisig.git", rev = "8fcbd77" } # leansig_wrapper provides XmssPublicKey/XmssSignature types used by lean-multisig's public API -leansig_wrapper = { git = "https://github.com/leanEthereum/leanMultisig.git", rev = "0242c909" } +leansig_wrapper = { git = "https://github.com/leanEthereum/leanMultisig.git", rev = "8fcbd77" } leansig.workspace = true thiserror.workspace = true From 662261fe11b13c3aab63521b6ff4d839a0b918d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:14:26 -0300 Subject: [PATCH 02/11] chore: bump leanVM to 0520822 Bump the multisig dependency to commit 0520822 and switch the git remote from the renamed leanMultisig repo to leanVM. Pin transitive Plonky3 to 3f67d136 (the rev leanVM 0520822 locks against); the floating Plonky3 HEAD pulled in a newer rev that requires the unstable maybe_uninit_slice feature and fails to build on stable. --- Cargo.lock | 77 ++++++++++++++++----------------- crates/common/crypto/Cargo.toml | 4 +- crates/common/crypto/src/lib.rs | 2 +- 3 files changed, 41 insertions(+), 42 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a2ffd55b..095b5f03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -652,7 +652,7 @@ dependencies = [ [[package]] name = "backend" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "mt-air", "mt-fiat-shamir", @@ -3664,7 +3664,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lean-multisig" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "clap", @@ -3682,7 +3682,7 @@ dependencies = [ [[package]] name = "lean_compiler" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "include_dir", @@ -3698,7 +3698,7 @@ dependencies = [ [[package]] name = "lean_prover" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "itertools 0.14.0", @@ -3716,7 +3716,7 @@ dependencies = [ [[package]] name = "lean_vm" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "itertools 0.14.0", @@ -3772,7 +3772,7 @@ dependencies = [ [[package]] name = "leansig_wrapper" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "ethereum_ssz", @@ -4807,7 +4807,7 @@ dependencies = [ [[package]] name = "mt-air" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "mt-field", "mt-poly", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "mt-fiat-shamir" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "mt-field", "mt-koala-bear", @@ -4830,7 +4830,7 @@ dependencies = [ [[package]] name = "mt-field" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "itertools 0.14.0", "mt-utils", @@ -4845,7 +4845,7 @@ dependencies = [ [[package]] name = "mt-koala-bear" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "itertools 0.14.0", "mt-field", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "mt-poly" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "itertools 0.14.0", "mt-field", @@ -4875,7 +4875,7 @@ dependencies = [ [[package]] name = "mt-sumcheck" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "mt-air", "mt-fiat-shamir", @@ -4888,7 +4888,7 @@ dependencies = [ [[package]] name = "mt-symetric" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "mt-field", "mt-koala-bear", @@ -4898,7 +4898,7 @@ dependencies = [ [[package]] name = "mt-utils" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "serde", ] @@ -4906,7 +4906,7 @@ dependencies = [ [[package]] name = "mt-whir" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "itertools 0.14.0", "mt-fiat-shamir", @@ -5302,7 +5302,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "p3-challenger 0.5.1", "p3-field 0.5.1", @@ -5346,7 +5346,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "p3-field 0.5.1", "p3-maybe-rayon 0.5.1", @@ -5372,14 +5372,14 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "itertools 0.14.0", "p3-field 0.5.1", "p3-matrix 0.5.1", "p3-maybe-rayon 0.5.1", "p3-util 0.5.1", - "spin 0.11.0", + "spin 0.10.0", "tracing", ] @@ -5400,7 +5400,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", @@ -5432,7 +5432,7 @@ dependencies = [ [[package]] name = "p3-koala-bear" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "p3-challenger 0.5.1", "p3-field 0.5.1", @@ -5462,7 +5462,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "itertools 0.14.0", "p3-field 0.5.1", @@ -5482,7 +5482,7 @@ checksum = "55ac1d2f102cf8c71dba1b449575c99697781fcc028831e83d2245787bd7a650" [[package]] name = "p3-maybe-rayon" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" [[package]] name = "p3-mds" @@ -5502,7 +5502,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "p3-dft 0.5.1", "p3-field 0.5.1", @@ -5514,7 +5514,7 @@ dependencies = [ [[package]] name = "p3-monty-31" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", @@ -5530,17 +5530,16 @@ dependencies = [ "paste", "rand 0.10.1", "serde", - "spin 0.11.0", + "spin 0.10.0", "tracing", ] [[package]] name = "p3-poseidon1" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "p3-field 0.5.1", - "p3-mds 0.5.1", "p3-symmetric 0.5.1", "rand 0.10.1", ] @@ -5562,7 +5561,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "p3-field 0.5.1", "p3-mds 0.5.1", @@ -5585,7 +5584,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "itertools 0.14.0", "p3-field 0.5.1", @@ -5605,7 +5604,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.5.1" -source = "git+https://github.com/Plonky3/Plonky3.git#2aeaa17557e7f54b0caa0add42e7d5b9aec4f564" +source = "git+https://github.com/Plonky3/Plonky3.git#3f67d136c71bec40f180c85d0bb2b654acddef22" dependencies = [ "serde", "transpose", @@ -6379,7 +6378,7 @@ dependencies = [ [[package]] name = "rec_aggregation" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "include_dir", @@ -7357,9 +7356,9 @@ dependencies = [ [[package]] name = "spin" -version = "0.11.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "783f3f6f6b01e295a669edfc402133a5f2553d1f0e81284b3ba4594e80bdd4a2" +checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" dependencies = [ "lock_api", ] @@ -7428,7 +7427,7 @@ dependencies = [ [[package]] name = "sub_protocols" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "lean_vm", @@ -7522,7 +7521,7 @@ dependencies = [ [[package]] name = "system-info" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "libc", "rayon", @@ -7547,7 +7546,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.4.2", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.52.0", @@ -8072,7 +8071,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utils" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "backend", "tracing", @@ -9038,7 +9037,7 @@ dependencies = [ [[package]] name = "zk-alloc" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanMultisig.git?rev=8fcbd77#8fcbd77958a58666e828315de2d6ce7c93297117" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" dependencies = [ "libc", "system-info", diff --git a/crates/common/crypto/Cargo.toml b/crates/common/crypto/Cargo.toml index 05bf717c..abcb76fe 100644 --- a/crates/common/crypto/Cargo.toml +++ b/crates/common/crypto/Cargo.toml @@ -12,9 +12,9 @@ version.workspace = true [dependencies] ethlambda-types.workspace = true -lean-multisig = { git = "https://github.com/leanEthereum/leanMultisig.git", rev = "8fcbd77" } +lean-multisig = { git = "https://github.com/leanEthereum/leanVM.git", rev = "0520822" } # leansig_wrapper provides XmssPublicKey/XmssSignature types used by lean-multisig's public API -leansig_wrapper = { git = "https://github.com/leanEthereum/leanMultisig.git", rev = "8fcbd77" } +leansig_wrapper = { git = "https://github.com/leanEthereum/leanVM.git", rev = "0520822" } leansig.workspace = true thiserror.workspace = true diff --git a/crates/common/crypto/src/lib.rs b/crates/common/crypto/src/lib.rs index bb37aa2b..953fc7a8 100644 --- a/crates/common/crypto/src/lib.rs +++ b/crates/common/crypto/src/lib.rs @@ -15,7 +15,7 @@ use thiserror::Error; /// log(1/rate) for the WHIR commitment scheme used inside lean-multisig. /// 2 matches the devnet-4 cross-client convention (zeam, ream, grandine, lantern -/// all use 2); the leanMultisig devnet5 examples also use 2 for recursion. +/// all use 2); the leanVM devnet5 examples also use 2 for recursion. const LOG_INV_RATE: usize = 2; // Lazy initialization for prover and verifier setup From d3d59a319da0ca5e64181585034179a9a03ea16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:16:30 -0300 Subject: [PATCH 03/11] chore: pin leanVM to 8fcbd779, the rev leanSpec locks via lean-multisig-py --- Cargo.lock | 56 ++++++++++++++++----------------- crates/common/crypto/Cargo.toml | 4 +-- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 095b5f03..547c2bff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -174,7 +174,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -185,7 +185,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -652,7 +652,7 @@ dependencies = [ [[package]] name = "backend" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-air", "mt-fiat-shamir", @@ -1940,7 +1940,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3664,7 +3664,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lean-multisig" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "clap", @@ -3682,7 +3682,7 @@ dependencies = [ [[package]] name = "lean_compiler" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "include_dir", @@ -3698,7 +3698,7 @@ dependencies = [ [[package]] name = "lean_prover" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "itertools 0.14.0", @@ -3716,7 +3716,7 @@ dependencies = [ [[package]] name = "lean_vm" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "itertools 0.14.0", @@ -3772,7 +3772,7 @@ dependencies = [ [[package]] name = "leansig_wrapper" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "ethereum_ssz", @@ -4807,7 +4807,7 @@ dependencies = [ [[package]] name = "mt-air" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-field", "mt-poly", @@ -4816,7 +4816,7 @@ dependencies = [ [[package]] name = "mt-fiat-shamir" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-field", "mt-koala-bear", @@ -4830,7 +4830,7 @@ dependencies = [ [[package]] name = "mt-field" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-utils", @@ -4845,7 +4845,7 @@ dependencies = [ [[package]] name = "mt-koala-bear" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-field", @@ -4861,7 +4861,7 @@ dependencies = [ [[package]] name = "mt-poly" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-field", @@ -4875,7 +4875,7 @@ dependencies = [ [[package]] name = "mt-sumcheck" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-air", "mt-fiat-shamir", @@ -4888,7 +4888,7 @@ dependencies = [ [[package]] name = "mt-symetric" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "mt-field", "mt-koala-bear", @@ -4898,7 +4898,7 @@ dependencies = [ [[package]] name = "mt-utils" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "serde", ] @@ -4906,7 +4906,7 @@ dependencies = [ [[package]] name = "mt-whir" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "itertools 0.14.0", "mt-fiat-shamir", @@ -5099,7 +5099,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -6378,7 +6378,7 @@ dependencies = [ [[package]] name = "rec_aggregation" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "include_dir", @@ -6699,7 +6699,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -7211,7 +7211,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -7427,7 +7427,7 @@ dependencies = [ [[package]] name = "sub_protocols" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "lean_vm", @@ -7521,7 +7521,7 @@ dependencies = [ [[package]] name = "system-info" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "libc", "rayon", @@ -7549,7 +7549,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -8071,7 +8071,7 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "utils" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "backend", "tracing", @@ -8370,7 +8370,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -9037,7 +9037,7 @@ dependencies = [ [[package]] name = "zk-alloc" version = "0.1.0" -source = "git+https://github.com/leanEthereum/leanVM.git?rev=0520822#0520822dc64df67886f4a053b60b4de14b181348" +source = "git+https://github.com/leanEthereum/leanVM.git?rev=8fcbd779#8fcbd77958a58666e828315de2d6ce7c93297117" dependencies = [ "libc", "system-info", diff --git a/crates/common/crypto/Cargo.toml b/crates/common/crypto/Cargo.toml index abcb76fe..e92ab3bb 100644 --- a/crates/common/crypto/Cargo.toml +++ b/crates/common/crypto/Cargo.toml @@ -12,9 +12,9 @@ version.workspace = true [dependencies] ethlambda-types.workspace = true -lean-multisig = { git = "https://github.com/leanEthereum/leanVM.git", rev = "0520822" } +lean-multisig = { git = "https://github.com/leanEthereum/leanVM.git", rev = "8fcbd779" } # leansig_wrapper provides XmssPublicKey/XmssSignature types used by lean-multisig's public API -leansig_wrapper = { git = "https://github.com/leanEthereum/leanVM.git", rev = "0520822" } +leansig_wrapper = { git = "https://github.com/leanEthereum/leanVM.git", rev = "8fcbd779" } leansig.workspace = true thiserror.workspace = true From fb57120f98e410ef11e6ce729b292b3db1ecab88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:16:30 -0300 Subject: [PATCH 04/11] chore: bump leanSpec pin to latest main (30ffb6ca) --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8568d137..fe68b374 100644 --- a/Makefile +++ b/Makefile @@ -24,8 +24,8 @@ docker-build: ## 🐳 Build the Docker image -t ghcr.io/lambdaclass/ethlambda:$(DOCKER_TAG) . @echo -# 2026-05-21 -LEAN_SPEC_COMMIT_HASH:=825bec6bf278920cfc56730d64a7c90522a0bb6c +# 2026-06-03 +LEAN_SPEC_COMMIT_HASH:=30ffb6cab54ca6d2e2e1c82e8e2713ebb9a8fa3f leanSpec: git clone https://github.com/leanEthereum/leanSpec.git --single-branch From 1d3a53ac9e45276843d0df137440b9aa947fd77b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Wed, 3 Jun 2026 17:53:15 -0300 Subject: [PATCH 05/11] fix(test-fixtures): adapt to leanSpec fixture schema changes leanSpec main renamed fixture fields and typed the block proof: - Validator pubkey fields: attestationPubkey/proposalPubkey -> attestationPublicKey/proposalPublicKey - Attestation validatorId -> validatorIndex (steps and SSZ vectors) - signedBlock.proof is now a typed container (leanSpec #799) nesting the raw lean-multisig Type-2 wire one level deeper; re-wrap it into the SSZ-envelope form SignedBlock.proof stores. The flat shape is still accepted for older spec-assets simulators (Hive). --- crates/common/test-fixtures/src/common.rs | 4 +-- .../common/test-fixtures/src/fork_choice.rs | 2 +- .../test-fixtures/src/verify_signatures.rs | 36 +++++++++++++++++-- crates/common/types/tests/ssz_types.rs | 4 +-- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/crates/common/test-fixtures/src/common.rs b/crates/common/test-fixtures/src/common.rs index b3ce4b7e..54c4c31b 100644 --- a/crates/common/test-fixtures/src/common.rs +++ b/crates/common/test-fixtures/src/common.rs @@ -98,10 +98,10 @@ impl From for ethlambda_types::block::BlockHeader { #[derive(Debug, Clone, Deserialize)] pub struct Validator { index: u64, - #[serde(rename = "attestationPubkey")] + #[serde(rename = "attestationPublicKey")] #[serde(deserialize_with = "deser_pubkey_hex")] attestation_pubkey: ValidatorPubkeyBytes, - #[serde(rename = "proposalPubkey")] + #[serde(rename = "proposalPublicKey")] #[serde(deserialize_with = "deser_pubkey_hex")] proposal_pubkey: ValidatorPubkeyBytes, } diff --git a/crates/common/test-fixtures/src/fork_choice.rs b/crates/common/test-fixtures/src/fork_choice.rs index c31387ad..19546a77 100644 --- a/crates/common/test-fixtures/src/fork_choice.rs +++ b/crates/common/test-fixtures/src/fork_choice.rs @@ -84,7 +84,7 @@ fn default_true() -> bool { #[derive(Debug, Clone, Deserialize)] pub struct AttestationStepData { - #[serde(rename = "validatorId")] + #[serde(rename = "validatorIndex")] pub validator_id: Option, pub data: AttestationData, #[serde(default, deserialize_with = "deser_opt_xmss_hex")] diff --git a/crates/common/test-fixtures/src/verify_signatures.rs b/crates/common/test-fixtures/src/verify_signatures.rs index f374c590..703b88a4 100644 --- a/crates/common/test-fixtures/src/verify_signatures.rs +++ b/crates/common/test-fixtures/src/verify_signatures.rs @@ -56,7 +56,29 @@ pub struct VerifySignaturesTest { pub struct TestSignedBlock { #[serde(alias = "message")] pub block: Block, - pub proof: HexBytes, + pub proof: ProofField, +} + +/// Merged Type-2 proof bytes, in either fixture shape. +/// +/// leanSpec PR #799 typed `SignedBlock.proof` as a multi-signature container, +/// nesting the bytes one level deeper: `{ "proof": { "data": "0x..." } }`. +/// The flat `{ "data": "0x..." }` shape (PR #717) is still accepted since the +/// Hive test driver receives the same JSON from older spec-assets simulators. +#[derive(Debug, Clone, Deserialize)] +#[serde(untagged)] +pub enum ProofField { + Typed { proof: HexBytes }, + Flat(HexBytes), +} + +impl ProofField { + pub fn decode(&self) -> Result, hex::FromHexError> { + match self { + Self::Typed { proof } => proof.decode(), + Self::Flat(bytes) => bytes.decode(), + } + } } /// `{ "data": "0x..." }` wrapper used by leanSpec fixtures for byte fields. @@ -107,14 +129,22 @@ impl From for SignedBlock { impl TestSignedBlock { /// Materialize a `SignedBlock` preserving the fixture-supplied merged /// Type-2 proof bytes verbatim. + /// + /// The typed shape carries the raw lean-multisig wire, so it gets wrapped + /// into the SSZ-container envelope `SignedBlock.proof` stores. The flat + /// shape already includes that envelope and passes through unchanged. pub fn try_into_signed_block_with_proofs(self) -> Result { let bytes = self .proof .decode() .map_err(|err| SignedBlockConvertError::InvalidProofHex(err.to_string()))?; let len = bytes.len(); - let proof = ByteList512KiB::try_from(bytes) - .map_err(|_| SignedBlockConvertError::ProofTooLarge(len))?; + let proof = match self.proof { + ProofField::Typed { .. } => SignedBlock::wrap_merged_proof(&bytes) + .map_err(|_| SignedBlockConvertError::ProofTooLarge(len))?, + ProofField::Flat(_) => ByteList512KiB::try_from(bytes) + .map_err(|_| SignedBlockConvertError::ProofTooLarge(len))?, + }; Ok(SignedBlock { message: self.block.into(), proof, diff --git a/crates/common/types/tests/ssz_types.rs b/crates/common/types/tests/ssz_types.rs index c825eaa7..e26cf343 100644 --- a/crates/common/types/tests/ssz_types.rs +++ b/crates/common/types/tests/ssz_types.rs @@ -74,7 +74,7 @@ pub fn decode_hex_h256(hex_str: &str) -> Result #[derive(Debug, Clone, Deserialize)] pub struct Attestation { - #[serde(rename = "validatorId")] + #[serde(rename = "validatorIndex")] pub validator_id: u64, pub data: AttestationData, } @@ -107,7 +107,7 @@ where #[derive(Debug, Clone, Deserialize)] pub struct SignedAttestation { - #[serde(rename = "validatorId")] + #[serde(rename = "validatorIndex")] pub validator_id: u64, pub data: AttestationData, #[serde(deserialize_with = "deser_signature_hex")] From efdf01fd868e370f58ff32225a900b67c6970ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Thu, 4 Jun 2026 16:53:44 -0300 Subject: [PATCH 06/11] ci: cap fixture-generation provers at -n 2 to avoid runner OOM The leanSpec bump moved the proof backend from the devnet-4 prover to devnet5 (8fcbd779), which peaks at ~4-5 GiB per proof. `-n auto` on the 4-vCPU/16 GiB GitHub runner spawns 4 concurrent provers (~18 GiB) and nondeterministically OOM-kills the runner mid-generation. Proving is core-bound (rayon saturates all cores per proof), so capping to 2 workers barely affects wall-time while keeping peak memory under the limit. The Makefile keeps -n auto for local machines with more memory. --- .github/workflows/ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 770aa3b0..3c63f82c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,10 +117,16 @@ jobs: path: leanSpec/packages/testing/src/consensus_testing/test_keys/prod_scheme key: ${{ steps.cache-prod-keys.outputs.cache-primary-key }} + # `-n 2` (not `-n auto`) caps the number of concurrent leanVM provers. + # The devnet5 prover peaks at ~4-5 GiB per proof; `-n auto` on the + # 4-vCPU/16 GiB GitHub runner spawns 4 provers (~18 GiB) and OOM-kills + # the runner mid-generation. Proving is core-bound (rayon saturates all + # cores per proof), so fewer workers barely affects wall-time. The + # Makefile keeps `-n auto` for local machines with more memory. - name: Generate test fixtures if: steps.cache-fixtures.outputs.cache-hit != 'true' working-directory: leanSpec - run: uv run fill --fork Lstar -n auto --scheme prod -o fixtures + run: uv run fill --fork Lstar -n 2 --scheme prod -o fixtures # Save fixtures even if a later step fails, so a re-run does not # have to regenerate them. See: https://github.com/actions/cache/tree/main/save#always-save-cache From 269646ce95170b8094d92f4ad886943c63c9aead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 5 Jun 2026 12:46:02 -0300 Subject: [PATCH 07/11] ci: drop fixture-gen to -n 1 + add memory sampler -n 2 cleared the hard OOM (no more 'shutdown signal') but the runner still thrashed and lost its heartbeat at ~1h23m, so GitHub cancelled the job. Drop to a single prover (~4.5 GiB, well under the 16 GiB runner) and add a 15s free -m sampler to confirm memory is the cause and tune the worker count. The sampler is temporary. --- .github/workflows/ci.yml | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c63f82c..ddcbff94 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,16 +117,26 @@ jobs: path: leanSpec/packages/testing/src/consensus_testing/test_keys/prod_scheme key: ${{ steps.cache-prod-keys.outputs.cache-primary-key }} - # `-n 2` (not `-n auto`) caps the number of concurrent leanVM provers. - # The devnet5 prover peaks at ~4-5 GiB per proof; `-n auto` on the - # 4-vCPU/16 GiB GitHub runner spawns 4 provers (~18 GiB) and OOM-kills - # the runner mid-generation. Proving is core-bound (rayon saturates all - # cores per proof), so fewer workers barely affects wall-time. The - # Makefile keeps `-n auto` for local machines with more memory. + # `-n 1` (not `-n auto`) runs a single leanVM prover at a time. The + # devnet5 prover peaks at ~4-5 GiB per proof; more workers multiply that + # past the 4-vCPU/16 GiB runner's RAM. `-n auto` (4 provers) OOM-killed + # the runner outright; `-n 2` (2 provers) thrashed and lost its heartbeat + # mid-generation, so GitHub cancelled the job. One prover (~4.5 GiB) + # should stay responsive. The Makefile keeps `-n auto` for local machines. + # + # The background sampler logs RAM/swap every 15s so we can confirm memory + # is the cause and tune the worker count. Remove once generation is green. - name: Generate test fixtures if: steps.cache-fixtures.outputs.cache-hit != 'true' working-directory: leanSpec - run: uv run fill --fork Lstar -n 2 --scheme prod -o fixtures + run: | + ( while true; do + echo "[mem $(date -u +%H:%M:%S)] $(free -m | awk 'NR==2{m=sprintf("mem_used=%sMiB avail=%sMiB",$3,$7)} NR==3{s=sprintf("swap_used=%sMiB",$3)} END{print m, s}')" + sleep 15 + done ) & + MON=$! + trap "kill $MON 2>/dev/null" EXIT + uv run fill --fork Lstar -n 1 --scheme prod -o fixtures # Save fixtures even if a later step fails, so a re-run does not # have to regenerate them. See: https://github.com/actions/cache/tree/main/save#always-save-cache From 6e3f034e9b40a9f64d88471c0398e895da690cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 5 Jun 2026 13:05:37 -0300 Subject: [PATCH 08/11] ci: single-quote trap to satisfy actionlint SC2064 The memory-sampler trap expanded $MON at definition time (double quotes), which shellcheck flags as SC2064. Single-quote it so it expands when the trap fires; MON is still in scope then. No behavior change. --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ddcbff94..ca3cec07 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -135,7 +135,7 @@ jobs: sleep 15 done ) & MON=$! - trap "kill $MON 2>/dev/null" EXIT + trap 'kill "$MON" 2>/dev/null' EXIT uv run fill --fork Lstar -n 1 --scheme prod -o fixtures # Save fixtures even if a later step fails, so a re-run does not From 44f2c81b99db622c8a6ebe29dcc075622e0ad43b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 5 Jun 2026 14:25:14 -0300 Subject: [PATCH 09/11] ci: only cache fixtures when generation succeeds The fixtures cache save used a bare always(), so when generation was cancelled or OOM-killed mid-run it still saved the empty fixtures dir under leanspec-fixtures-. Later runs hit that empty cache, skipped generation, and the Rust tests failed with no fixtures present. Gate the save on the generate step's outcome == 'success' so a partial or aborted generation never poisons the cache. The pre-existing poisoned cache entry was deleted manually. --- .github/workflows/ci.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ca3cec07..eb2370d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -127,6 +127,7 @@ jobs: # The background sampler logs RAM/swap every 15s so we can confirm memory # is the cause and tune the worker count. Remove once generation is green. - name: Generate test fixtures + id: generate-fixtures if: steps.cache-fixtures.outputs.cache-hit != 'true' working-directory: leanSpec run: | @@ -138,10 +139,18 @@ jobs: trap 'kill "$MON" 2>/dev/null' EXIT uv run fill --fork Lstar -n 1 --scheme prod -o fixtures - # Save fixtures even if a later step fails, so a re-run does not - # have to regenerate them. See: https://github.com/actions/cache/tree/main/save#always-save-cache + # Save fixtures only when generation actually SUCCEEDED. A bare + # `always()` here previously saved the (empty) fixtures dir when + # generation was cancelled or OOM-killed mid-run, poisoning the cache: + # later runs hit the empty cache, skipped generation, and the Rust tests + # failed with no fixtures. Gating on the generate step's outcome keeps + # the "save even if the later Rust test step fails" intent without ever + # persisting a partial fixture set. - name: Save test fixtures cache - if: always() && steps.cache-fixtures.outputs.cache-hit != 'true' + if: >- + always() + && steps.cache-fixtures.outputs.cache-hit != 'true' + && steps.generate-fixtures.outcome == 'success' uses: actions/cache/save@v5 with: path: leanSpec/fixtures From 94434068db401db6d565dbedaeccc7c12ee1bc85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:41:42 -0300 Subject: [PATCH 10/11] ci: remove temporary fixture-gen memory sampler Memory was confirmed as the cause: a single devnet5 prover peaks ~12 GiB, so only -n 1 fits the 16 GiB runner. Drop the free -m sampler now that the finding is recorded; keep -n 1 and the success-gated cache save. --- .github/workflows/ci.yml | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb2370d7..0b4da37f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -118,26 +118,16 @@ jobs: key: ${{ steps.cache-prod-keys.outputs.cache-primary-key }} # `-n 1` (not `-n auto`) runs a single leanVM prover at a time. The - # devnet5 prover peaks at ~4-5 GiB per proof; more workers multiply that - # past the 4-vCPU/16 GiB runner's RAM. `-n auto` (4 provers) OOM-killed - # the runner outright; `-n 2` (2 provers) thrashed and lost its heartbeat - # mid-generation, so GitHub cancelled the job. One prover (~4.5 GiB) - # should stay responsive. The Makefile keeps `-n auto` for local machines. - # - # The background sampler logs RAM/swap every 15s so we can confirm memory - # is the cause and tune the worker count. Remove once generation is green. + # devnet5 prover peaks at ~12 GiB per proof (measured), so more workers + # blow past the 4-vCPU/16 GiB runner's RAM: `-n auto` (4 provers) hard + # OOM-killed the runner, `-n 2` thrashed and lost its heartbeat so GitHub + # cancelled the job. One prover peaks ~12.4 GiB with 0 swap and completes + # in ~2h36m. The Makefile keeps `-n auto` for local machines with more RAM. - name: Generate test fixtures id: generate-fixtures if: steps.cache-fixtures.outputs.cache-hit != 'true' working-directory: leanSpec - run: | - ( while true; do - echo "[mem $(date -u +%H:%M:%S)] $(free -m | awk 'NR==2{m=sprintf("mem_used=%sMiB avail=%sMiB",$3,$7)} NR==3{s=sprintf("swap_used=%sMiB",$3)} END{print m, s}')" - sleep 15 - done ) & - MON=$! - trap 'kill "$MON" 2>/dev/null' EXIT - uv run fill --fork Lstar -n 1 --scheme prod -o fixtures + run: uv run fill --fork Lstar -n 1 --scheme prod -o fixtures # Save fixtures only when generation actually SUCCEEDED. A bare # `always()` here previously saved the (empty) fixtures dir when From 799ea1953324d0ca5fd2c99aea957bc0bb771dfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Gr=C3=BCner?= <47506558+MegaRedHand@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:55:14 -0300 Subject: [PATCH 11/11] test-fixtures: drop legacy flat ProofField decode path SignedBlock.proof fixtures have used the nested PR #799 container shape ({ proof: { data: "0x..." } }) since the current leanSpec pin. The flat PR #717 shape ({ data: "0x..." }) was only kept for older Hive spec-asset simulators; those will move to the new format too. Replace the untagged ProofField enum with a single MergedProof struct so there is one decode path, and update the verify_signatures e2e payload to the nested shape. The Hive test-driver verify_signatures endpoint now accepts only the nested format. --- .../test-fixtures/src/verify_signatures.rs | 44 +++++++------------ crates/net/rpc/tests/test_driver_e2e.rs | 2 +- 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/crates/common/test-fixtures/src/verify_signatures.rs b/crates/common/test-fixtures/src/verify_signatures.rs index 703b88a4..5b20d696 100644 --- a/crates/common/test-fixtures/src/verify_signatures.rs +++ b/crates/common/test-fixtures/src/verify_signatures.rs @@ -1,17 +1,17 @@ -//! Signature-verification test fixture types (leanSpec PR #717 schema). +//! Signature-verification test fixture types (leanSpec PR #799 schema). //! //! Used both by the offline spec-test runner and the Hive //! `/lean/v0/test_driver/verify_signatures/run` endpoint, which receive the //! same JSON shapes from the lean spec-assets simulator. //! -//! Fixture shape after PR #717: +//! Fixture shape after PR #799: //! //! signedBlock: //! block: {...standard block fields...} -//! proof: { data: "0x" } +//! proof: { proof: { data: "0x" } } use crate::{Block, TestInfo, TestState}; -use ethlambda_types::block::{ByteList512KiB, SignedBlock}; +use ethlambda_types::block::SignedBlock; use serde::Deserialize; use std::collections::HashMap; use std::fmt; @@ -56,28 +56,21 @@ pub struct VerifySignaturesTest { pub struct TestSignedBlock { #[serde(alias = "message")] pub block: Block, - pub proof: ProofField, + pub proof: MergedProof, } -/// Merged Type-2 proof bytes, in either fixture shape. +/// Merged Type-2 proof container for `SignedBlock.proof` (leanSpec PR #799). /// -/// leanSpec PR #799 typed `SignedBlock.proof` as a multi-signature container, -/// nesting the bytes one level deeper: `{ "proof": { "data": "0x..." } }`. -/// The flat `{ "data": "0x..." }` shape (PR #717) is still accepted since the -/// Hive test driver receives the same JSON from older spec-assets simulators. +/// The multi-signature container nests the raw lean-multisig wire one level +/// deep: `{ "proof": { "data": "0x..." } }`. #[derive(Debug, Clone, Deserialize)] -#[serde(untagged)] -pub enum ProofField { - Typed { proof: HexBytes }, - Flat(HexBytes), +pub struct MergedProof { + pub proof: HexBytes, } -impl ProofField { +impl MergedProof { pub fn decode(&self) -> Result, hex::FromHexError> { - match self { - Self::Typed { proof } => proof.decode(), - Self::Flat(bytes) => bytes.decode(), - } + self.proof.decode() } } @@ -130,21 +123,16 @@ impl TestSignedBlock { /// Materialize a `SignedBlock` preserving the fixture-supplied merged /// Type-2 proof bytes verbatim. /// - /// The typed shape carries the raw lean-multisig wire, so it gets wrapped - /// into the SSZ-container envelope `SignedBlock.proof` stores. The flat - /// shape already includes that envelope and passes through unchanged. + /// The container carries the raw lean-multisig wire, so it gets wrapped + /// into the SSZ-container envelope that `SignedBlock.proof` stores. pub fn try_into_signed_block_with_proofs(self) -> Result { let bytes = self .proof .decode() .map_err(|err| SignedBlockConvertError::InvalidProofHex(err.to_string()))?; let len = bytes.len(); - let proof = match self.proof { - ProofField::Typed { .. } => SignedBlock::wrap_merged_proof(&bytes) - .map_err(|_| SignedBlockConvertError::ProofTooLarge(len))?, - ProofField::Flat(_) => ByteList512KiB::try_from(bytes) - .map_err(|_| SignedBlockConvertError::ProofTooLarge(len))?, - }; + let proof = SignedBlock::wrap_merged_proof(&bytes) + .map_err(|_| SignedBlockConvertError::ProofTooLarge(len))?; Ok(SignedBlock { message: self.block.into(), proof, diff --git a/crates/net/rpc/tests/test_driver_e2e.rs b/crates/net/rpc/tests/test_driver_e2e.rs index 5051741e..5591b47b 100644 --- a/crates/net/rpc/tests/test_driver_e2e.rs +++ b/crates/net/rpc/tests/test_driver_e2e.rs @@ -261,7 +261,7 @@ async fn verify_signatures_with_empty_validator_set_fails_cleanly() { "stateRoot": ZERO_ROOT, "body": {"attestations": {"data": []}}, }, - "proof": {"data": "0x"}, + "proof": {"proof": {"data": "0x"}}, }); let body = json!({