Skip to content
Draft
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
f97f2c3
bls beefy verification
dharjeezy Jul 28, 2026
57aa8a8
verify beefy commitments signed with aggregate bls12-381
dharjeezy Aug 4, 2026
fc41d2a
accept aggregate bls beefy proofs through the abi submit path
dharjeezy Aug 4, 2026
45fe964
add the solidity hash to curve and prove the bls beefy path end to end
dharjeezy Aug 4, 2026
19e30ee
verify bls beefy proofs on the evm with a single pairing check
dharjeezy Aug 6, 2026
cca8087
prove the bls keyset commitment as an extra leaf of the authority set…
dharjeezy Aug 6, 2026
1ff1851
bind the g1 and g2 halves of the paired beefy keys with a pairing check
dharjeezy Aug 7, 2026
dcc7b2d
commit the relay chain's next beefy bls keys to a header digest
dharjeezy Aug 7, 2026
a7c9d6f
read the apk commitment out of a verified hyperbridge header
dharjeezy Aug 7, 2026
167d1a7
verify beefy consensus with an aggregate public key proof instead of …
dharjeezy Aug 7, 2026
e530d0c
decide the apk digest rotation step in a pure function so the restart…
dharjeezy Aug 7, 2026
4c99200
drop the per signer merkle path now that beefy bls consensus is verif…
dharjeezy Aug 8, 2026
7f6a2cf
nit
dharjeezy Aug 8, 2026
b3bc5d7
verify beefy consensus with an aggregate public key proof in the runt…
dharjeezy Aug 11, 2026
432e356
read paired and plain beefy keys from the wire rather than choosing a…
dharjeezy Aug 11, 2026
6b0612c
aggregate onto the circuit's seed point and order the key limbs the w…
dharjeezy Aug 12, 2026
274f172
read the destination's consensus state in the encoding it actually st…
dharjeezy Aug 12, 2026
c177da6
commit the apk bindings and proof fixtures the branch already builds …
dharjeezy Aug 12, 2026
d690d2a
charge the aggregate public key verification separately from the rest…
dharjeezy Aug 12, 2026
d2971de
run the apk prover as a separate process, since the circuit setup wed…
dharjeezy Aug 13, 2026
31afef3
publish the apk commitment in every header of a set and under each ne…
dharjeezy Aug 13, 2026
3834838
keep the apk prover alive between proofs so the circuit setup is paid…
dharjeezy Aug 13, 2026
5f716bb
prove finality inside a session so the client can learn the next set'…
dharjeezy Aug 14, 2026
d13e89d
pick the block that teaches a commitment by what its header carries, …
dharjeezy Aug 14, 2026
16d0fe5
take the apk contract without the cipher suite argument
dharjeezy Aug 14, 2026
c2580cc
take the apk contract reading its suite constant directly
dharjeezy Aug 16, 2026
c6fd858
pack three limbs into each field element the way the circuit now abso…
dharjeezy Aug 16, 2026
b34f16d
commit to a validator set in one block and republish an unchanged one
dharjeezy Aug 17, 2026
460becc
read the apk commitment only from hyperbridge's own header
dharjeezy Aug 17, 2026
92f99a0
take the digest from hyperbridge's header and return it as a struct
dharjeezy Aug 17, 2026
0a4c2fb
rebuild the apk fixtures against the packed circuit and clear a commi…
dharjeezy Aug 17, 2026
8b1f9b1
drop the duplicated hash to curve, consensus state and bitlist paddin…
dharjeezy Aug 17, 2026
37c8460
call the aggregate client BlsBeefy now the per signer one is gone
dharjeezy Aug 17, 2026
36a76f1
compile the aggregate verifier unconditionally now both runtimes acce…
dharjeezy Aug 17, 2026
3354b0d
take the apk contracts from the gnark submodule rather than a copy
dharjeezy Aug 17, 2026
e7acf04
lock the benchmark's hex literal dependency
dharjeezy Aug 17, 2026
abecb3d
take the incoming authority set from the header digest and ask the re…
dharjeezy Aug 17, 2026
225d695
rebuild the fixtures for the header carried authority set
dharjeezy Aug 17, 2026
07b1591
take the commitment from the circuit's own crate instead of keeping a…
dharjeezy Aug 18, 2026
c4420e4
check the batched pairing refuses a well formed point that is not the…
dharjeezy Aug 18, 2026
2619500
pin the gnark dependency to the merged commit
dharjeezy Aug 18, 2026
167baa7
hash whenever the relay's set id moves, and hand the caller the sets …
dharjeezy Aug 18, 2026
d6bfa41
keep one authority set holding both roots so either proof format can …
dharjeezy Aug 18, 2026
f794cbc
measure the commitment on the benchmarking machine
dharjeezy Aug 18, 2026
de87219
let the apk circuit be compiled into the relayer by proving sp1 on a …
dharjeezy Aug 20, 2026
b978fc1
rotate the apk client from the first justification inside the new ses…
dharjeezy Aug 21, 2026
6fb9d76
prove apk through the circuit compiled into the binary and delete the…
dharjeezy Aug 21, 2026
a8cbc83
point the commitment tests at the merged consensus state type
dharjeezy Aug 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
234 changes: 134 additions & 100 deletions Cargo.lock

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ members = [
"modules/consensus/sync-committee/prover",
"modules/consensus/sync-committee/verifier",
"modules/consensus/sync-committee/primitives",
"modules/consensus/beefy/apk-commitment",
"modules/consensus/beefy/primitives",
"modules/consensus/beefy/prover",
"modules/consensus/beefy/verifier",
Expand Down Expand Up @@ -73,6 +74,7 @@ members = [
"modules/ismp/state-machines/pharos",
"modules/pallets/consensus-incentives",
"modules/pallets/messaging-incentives",
"modules/pallets/beefy-apk-digest",
"modules/pallets/beefy-consensus-proofs",

# evm stuff
Expand Down Expand Up @@ -117,6 +119,7 @@ members = [
"tesseract/consensus/grandpa",
"tesseract/consensus/integration-tests",
"tesseract/consensus/beefy",
"tesseract/consensus/beefy/apk",
"tesseract/consensus/beefy/zk",
"tesseract/prover",
"tesseract/consensus/admin-relayer",
Expand Down Expand Up @@ -275,6 +278,7 @@ hyperclient = { path = "modules/hyperclient", default-features = false }
subxt-utils = { path = "modules/utils/subxt", default-features = false }

# consensus provers & verifiers
apk-commitment = { path = "./modules/consensus/beefy/apk-commitment", default-features = false }
beefy-verifier-primitives = { version = "0.1.1", path = "./modules/consensus/beefy/primitives", default-features = false }
beefy-prover = { path = "./modules/consensus/beefy/prover" }
beefy-verifier = { path = "./modules/consensus/beefy/verifier", default-features = false }
Expand Down Expand Up @@ -316,6 +320,7 @@ pallet-ismp-host-executive = { path = "modules/pallets/host-executive", default-
pallet-call-decompressor = { path = "modules/pallets/call-decompressor", default-features = false }
pallet-consensus-incentives = { path = "modules/pallets/consensus-incentives", default-features = false }
pallet-messaging-incentives = { path = "modules/pallets/messaging-incentives", default-features = false }
pallet-beefy-apk-digest = { path = "./modules/pallets/beefy-apk-digest", default-features = false }
pallet-beefy-consensus-proofs = { path = "modules/pallets/beefy-consensus-proofs", default-features = false }
pallet-collator-manager = { path = "modules/pallets/collator-manager", default-features = false }
pallet-state-coprocessor = { path = "modules/pallets/state-coprocessor", default-features = false }
Expand Down
7 changes: 7 additions & 0 deletions evm/foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ evm_version = "cancun"
via-ir = true
fs_permissions = [{ access = "read-write", path = "./"}]

# EIP-2537 (BLS12-381 precompiles) only exists from Prague, and the default profile is on cancun.
# Kept separate so the deployed contracts' bytecode is unaffected. SimplexPaymaster is skipped
# because its @openzeppelin/community-contracts dependency is not vendored.
[profile.bls]
evm_version = "prague"
skip = ["src/utils/SimplexPaymaster.sol"]

[profile.ci]

[lint]
Expand Down
Loading