Repository navigation
chore(deps): bump taiko client protocol to v2.3.0 - #268
Conversation
There was a problem hiding this comment.
Copilot review overview
🔵 Needs a closer look
Consensus-relevant protocol and zkVM artifacts require final human review.
Review effort: Lite
Findings: None
What changed in this PR
Updates taiko-client-protocol to v2.3.0 with manifest-decoding fixes, refreshed dependencies, and regenerated guest artifact provenance.
Changes:
- Pins workspace and guest dependencies to v2.3.0.
- Removes obsolete Alethia Reth v1.3 lockfile entries.
- Updates RISC0/SP1 artifact provenance.
| File | Description |
|---|---|
guests/sp1/Cargo.lock |
Refreshes SP1 guest dependencies. |
guests/risc0/Cargo.lock |
Refreshes RISC0 guest dependencies. |
crates/guests/elf/sp1.provenance.json |
Records regenerated SP1 artifact hashes. |
crates/guests/elf/risc0.provenance.json |
Records regenerated RISC0 artifact hashes. |
Cargo.toml |
Updates the protocol revision. |
Cargo.lock |
Refreshes workspace dependencies. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
davidtaikocha
left a comment
There was a problem hiding this comment.
Approving at c3a07108. Nothing blocks the merge. Items 1–4 below must be done before v0.9.0 is trusted on-chain.
What was verified
- Pin.
06bd6b0eis thetaiko-alethia-client-rs-v2.3.0tag commit, and its only parent isaa3a24f5(taiko-mono#22173).- In
170f50bb..06bd6b0e, #22173 is the only change that affects derivation. The Masaya removal, the upstream security bumps andbindings(version line only) don't change anything in raiko2. - Each lockfile graph now has a single alethia-reth 1.4.1 set.
- Guest artifacts.
- A forced docker rebuild of the PR source reproduced all 12 artifacts byte-for-byte: 2 RISC0 ELFs (
r0.1.91.1image), and 5 SP1 ELFs plus 5 VKs (v6.8.1image). xtask-build-guest all --checkpasses, and the SP1 VKs re-derive from their ELFs.- The
providers.tomlcommit touches no guest input.
- A forced docker rebuild of the PR source reproduced all 12 artifacts byte-for-byte: 2 RISC0 ELFs (
- Decoding.
- All 136 upstream vectors (
testdata/derivation_vectors/manifest_cases.json@06bd6b0e) were blob-encoded with real KZG versioned hashes and replayed through:- the protocol crate;
decode_blob_backed_manifest;prepare_source_manifest_with_max_blocks(normal and forced-inclusion);- the guest's
derive_expected_shasta_blocksand tx reconstruction; - host preflight;
- alethia-reth's engine tx decoder.
- The PR matches the expected result on 136/136 at every layer.
- Main differs on 27 (18 framing, 6 zlib, 3 blob-sidecar), which is the intended alignment.
- On no vector does one side hard-error while the other falls back to the default manifest.
- Both proposal ELFs link C zlib (libz-sys), which the new decoder requires.
- All 136 upstream vectors (
- gaiko2 pin
a88ae8b(taikoxyz/gaiko2#60).- The same corpus gives 0/136 mismatches against the expected results and against new raiko2, on both the direct decode path and the blob-backed path.
- Its corpus copy is byte-identical to upstream's.
validateManifestTransactionsis semantically identical to taiko-client @aa3a24f5, runs on every decoded source before any per-tx filtering, and falls back to the default source on failure.- The taiko-geth bump
4e001283 → 8e98046bis the singlerelease 2.7.0changelog commit. - raiko2 and gaiko2 go from 37 disagreeing vectors to 0.
- CI: all 14 checks are green at
c3a07108.
Owed before v0.9.0
-
Re-pin gaiko2 after gaiko2#60 merges.
- gaiko2 squash-merges, so
a88ae8bwill never be on gaiko2 main. release-tee-providersdoesgit clonethengit checkout <sha>(xtask/src/release_tee_providers.rs:434-450), so it only finds the commit whilefix/align-manifest-decodingexists.- Once #60 has a human review and merges, re-pin to its main commit, as #266 did for #59.
- gaiko2 squash-merges, so
-
Cutover ordering. #22173 has no fork gate: the new rules apply to every proposal as soon as the new code runs.
- Trust the new identifiers only once the L2 drivers run #22173. That means taiko-client-rs ≥ v2.3.0, and a Go taiko-client release that contains it (v2.6.0 does not; 2.7.0 is unreleased).
- Rotate all of these in one on-chain action and untrust the old ones: RISC0 image IDs, SP1 VKs, the SGX-RETH MRENCLAVE (sgx-runtime links
protocol), and gaiko2's new SGX-GETH MRENCLAVE. While old and new are both trusted, a proposal in one of the 27 changed classes has two provable transitions: RISC0+SP1 alone satisfiesZkRequiredVerifier. - Before the cutover, re-derive all Shasta proposals on mainnet and hoodi with both decoders and confirm none hits a changed class. Forced inclusion is permissionless, so anyone could have created one.
-
Identifiers to register (computed with
guest-digestsat this head):Object Digest RISC0 proposal image_id 0x88712dad7dc78126ee7bb592282d3102569c706f1b9db80580a582e5ffd1dfb0RISC0 aggregation image_id 0x04480b22e244d60165f3d0898bc61ea084d9c76221464a8a3c3343c74889040aSP1 proposal vk_bn254 0x0012b97234e59f2319d44202c7b093fed9c9a51b2068e38d26625c139d668c97SP1 aggregation vk_bn254 0x0017912dfd72308e2e2cd4211b05ed73a97eb7f576816adec2606a37507de51e -
zkGas model pins.
crates/prover/models/risc0-zkgas.jsonandestimation.rsnow lag 3 rebuilds (proposal) and 2 (aggregation). Recalibrate before anystrategy = "estimated"cutover.
Nit (fine to fold into the next dependency PR)
cargo update -p protocolre-pointed 7 ranged edges in the rootCargo.lockat older versions already in the lock:- hyper-util, quinn and quinn-udp → socket2 0.5.10;
- prost-build and prost-derive → itertools 0.11.0;
- winapi-util → windows-sys 0.48.0.
- This is harmless: no crate version was added or removed, no advisories apply, and the root lock is not a guest build input. It is still not minimal.
git checkout origin/main -- Cargo.lock && cargo metadata --format-version 1 >/dev/nullproduces the minimal lock.


Summary
taiko-client-protocoltotaiko-alethia-client-rs-v2.3.0(taikoxyz/taiko-mono@06bd6b0e)taikoxyz/taiko-mono#22173(aa3a24f5, a direct parent of the v2.3.0 release commit)taikoxyz/gaiko2#60heada88ae8b4, which applies the same decoding rules and taiko-geth v2.7.0The regenerated image IDs / verifying keys and the new gaiko2 enclave measurement must be registered as part of the eventual v0.9.0 release. This PR does not build the TEE image, deploy, or register anything.
Validation
cargo test -p raiko2-protocol-shasta -p raiko2-guest-common— passed, 128 testsjust build-guest risc0— passedjust build-guest sp1— passedxtask-build-guest all --check— passed; both provenance manifests and all committed ELF/VK hashes are currentcargo fmt --all --check— passedgit diff --check— passedproviders.gaiko2.commitchanged and it matches gaiko2 PR fix(risc0): consolidate Shasta aggregation guest #60 exactlycargo clippy --workspace -- -D warningsreached the updatedprotocol v2.3.0and project crates but could not finish because therisc0-circuit-recursion v4.0.4build script received HTTP 400 while downloading its upstream ZKR artifact from RISC0 S3. No lint or source compilation error was reported before that external download failure.The previous PR head passed every GitHub CI lane, including clippy, all Rust test groups, and xtask. The provider-pin follow-up has triggered a new CI run.
Note
High Risk
Changes protocol decoding and zkVM guest binaries/verification keys, which can break proof compatibility until new image IDs/VKs are registered; gaiko2 release pin also shifts TEE build provenance.
Overview
Pins
taiko-client-protocolto v2.3.0 (taikoxyz/taiko-mono@06bd6b0e), picking up manifest decoding fixes from the upstream release line. Workspace and guestCargo.lockfiles are refreshed soprotocol/bindings2.3.0 replace 2.2.0 and the stale indirect alethia-reth 1.3 crate entries are dropped in favor of a single 1.4.1 dependency graph.RISC Zero and SP1 Shasta (and lab) guest ELF/VK artifacts are rebuilt and their
risc0.provenance.json/sp1.provenance.jsonhashes updated so committed zkVM images match the new protocol revision (on-chain image ID / VK registration is explicitly left for a later release).Also bumps the pinned
gaiko2TEE provider commit inrelease/providers.tomltoa88ae8b4for release provenance alignment with the dependency refresh.Reviewed by Cursor Bugbot for commit c3a0710. Bugbot is set up for automated code reviews on this repo. Configure here.