Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
307 commits
Select commit Hold shift + click to select a range
2589f20
accept all seismic diffs
cdrappi Feb 6, 2025
58c31de
clean diff
cdrappi Feb 6, 2025
bca0edb
Pretty diff (#78)
cdrappi Feb 6, 2025
2efff3d
set @phexyz as codeowner (#80)
cdrappi Feb 7, 2025
b49a401
Fixed `Cargo test --workspace` (#77)
phexyz Feb 7, 2025
9812a57
Change book and readme (#81)
phexyz Feb 10, 2025
755d744
if input is 0 for encrypt/decrypt, immediately return 0 (#83)
cdrappi Feb 10, 2025
f2c25c1
change a bunch of urls to seismic's github (#84)
cdrappi Feb 11, 2025
4b971c4
Update README.md (#82)
phexyz Feb 11, 2025
57e425b
Cargo.toml: fix indentation of [workspace], add newline (#86)
cdrappi Feb 11, 2025
62796a3
Rename tee service => enclave (#88)
cdrappi Feb 11, 2025
74285b1
update patch.crates-io urls to seismic's github (#85)
cdrappi Feb 12, 2025
0ce0b98
update cargo.lock with new commits to seismic deps (#90)
cdrappi Feb 12, 2025
872aa3a
Remove ssh from ci (#91)
cdrappi Feb 12, 2025
6ca91bc
Fix test warnings (#92)
cdrappi Feb 12, 2025
109ee4a
Integrating the new Enclave change (#93)
phexyz Feb 19, 2025
ed13806
Fixing EthEvmConfig args wiring for EthereumExecutorBuilder (#94)
phexyz Feb 19, 2025
7ed6194
Use enclave server in `seismic_getTeePublicKey` (#95)
phexyz Feb 19, 2025
e65a29f
Remove print statements that clog logs (#97)
cdrappi Feb 26, 2025
c34c11e
Integrate changes from seismic-alloy `TxSeismicElements` (#102)
phexyz Mar 12, 2025
2735d46
Deleted enclave synchronous code and abstract encryption and decrypti…
phexyz Mar 13, 2025
e41be6e
Bumping versions (#110)
phexyz Mar 13, 2025
6f445da
Include error info in EphRngKeypairGenerationError (#112)
cdrappi Mar 14, 2025
52232b0
Version bump from alloy & clean up integration test (#115)
phexyz Mar 18, 2025
5d2852d
Requests to enclave should timeout after 5 seconds (#116)
cdrappi Mar 18, 2025
dfcf389
update alloy: typed data requests expect u96 encryption nonce (#117)
cdrappi Mar 19, 2025
48fb927
run viem tests vs reth (#118)
cdrappi Mar 19, 2025
14488ab
Remove unnecessary debug statements across multiple files to clea…
phexyz Mar 24, 2025
8869f95
Viem CI: correctly await async tests (#125)
cdrappi Mar 25, 2025
3e1c57c
RPC: remove trace inputs from debug api (#124)
cdrappi Mar 25, 2025
4b44d33
RPC tracing: Set tx type in txenv for Geth call tracer (#126)
cdrappi Mar 26, 2025
fb24e8c
Disable back up (#127)
phexyz Mar 26, 2025
ea3d0cf
FEAT: Support `simulate_v1` end point for encrypted transaction (#128)
phexyz Mar 28, 2025
0dc32eb
Chore: Move all `eth_call` and `eth_send_raw_transaction` to seismic …
phexyz Apr 3, 2025
59333ec
Good state
phexyz Apr 15, 2025
0782620
Trie Private Leaf Flag (#132)
ssolit Apr 24, 2025
3b6e1b3
Add rust toolchain file (#133)
cdrappi Apr 24, 2025
b336ce4
nightly fmt
ssolit Apr 24, 2025
2916dfe
update enclave commit after merging branch into main
ssolit Apr 28, 2025
53572c9
use alloy-trie branch with generics trick to make things compile
ssolit Apr 29, 2025
b5a88d5
SeismicEvm + SeismicNode (#142)
ssolit May 8, 2025
f3695f6
Merge compiled eth_call end point to upstream-merge (#144)
phexyz May 8, 2025
556332a
Santi/morning workout (#145)
sfyll May 9, 2025
2f48f19
eth_call functional
phexyz May 9, 2025
cafd563
decrypting block builder (#148)
ssolit May 13, 2025
91128df
rm unused evm mod
ssolit May 13, 2025
aad6865
seismic evm wiring test (#149)
ssolit May 13, 2025
d393ae5
moving error as optimism
sfyll May 14, 2025
74b7048
default for Tx Hash
sfyll May 14, 2025
9b9add2
correct wordings
sfyll May 14, 2025
dc1d6a8
re-export errors
sfyll May 14, 2025
93513fb
nuke
sfyll May 14, 2025
e45440a
Send raw transaction (#150)
sfyll May 14, 2025
040b1d4
Merge remote-tracking branch 'origin/upstream-merge' into clean-upstr…
sfyll May 14, 2025
2a1808e
nuke aa / interop
sfyll May 14, 2025
8ec6488
fix compile issue with dev deps
ssolit May 14, 2025
08b91c7
Merge branch 'upstream-merge' into clean-upstream-merge
ssolit May 14, 2025
1abefcc
fix
ssolit May 14, 2025
75f223f
Spencer/txpool cleaning (#152)
ssolit May 14, 2025
7348f81
fixed get_unsigned_seismic_tx_request
ssolit May 14, 2025
c4acae6
integration test compiled (#153)
phexyz May 14, 2025
ad56c21
trying on get_signed_seismic_tx_typed_data
ssolit May 14, 2025
02cf367
Merge branch 'upstream-merge' into clean-upstream-merge
ssolit May 14, 2025
e353a3c
cargo test runs
sfyll May 15, 2025
43cd6ea
seismic tx test utils (#156)
ssolit May 15, 2025
82e5f12
primitives alloy compat (#157)
ssolit May 15, 2025
4eeba70
Added 2718 round trip for transaction signed
phexyz May 15, 2025
dd17781
Primitives Receipt Test (#159)
ssolit May 15, 2025
4caa66f
nuke chain registry
ssolit May 15, 2025
117a7e7
Hardfork (#164)
ssolit May 16, 2025
1bed9dd
Fixed SeismicBlockBuilder logic (#165)
phexyz May 16, 2025
c927289
evm execute tests (#166)
ssolit May 16, 2025
db6f365
Evm config (#167)
ssolit May 16, 2025
637abf3
payload nuke - config, error, and validator (#168)
ssolit May 16, 2025
def281b
wip
sfyll May 16, 2025
27bc2d8
Txpool (#169)
sfyll May 19, 2025
2a767dc
misc warnings cleanup
ssolit May 19, 2025
5532a8a
module comment for reh-seismic-payload-builder
ssolit May 19, 2025
675468d
clean reth-evm-ethereum
ssolit May 19, 2025
952ac7e
fix storage warnings for Storage value
ssolit May 19, 2025
d006303
chainspec correct genesis hash
ssolit May 19, 2025
49e6ce2
chainspec set deposit addr to default. reasonable until we set up con…
ssolit May 19, 2025
b93f34b
added a comment to clarify how randao works with seismic specs
ssolit May 19, 2025
37d4899
fixed payload builder test regression
ssolit May 19, 2025
ca25169
remove rpc receipt tests. our code is too similar to eth to need them…
ssolit May 19, 2025
71b01f0
SeismicEthApiError refactor and general rpc crate cleaning
ssolit May 19, 2025
27473b2
no blobs for evm
ssolit May 20, 2025
d90d847
organize cargo.toml
ssolit May 20, 2025
c6aaf90
clear reth-seismic-node build warnings
ssolit May 20, 2025
b24786e
fix integration test compile
ssolit May 20, 2025
4e0e4ba
bad change in rpc-eth-types
ssolit May 20, 2025
d3a04fc
Revert "no blobs for evm"
ssolit May 20, 2025
fe3274b
cleaned up remaining warning from txpool
ssolit May 20, 2025
95fa251
suppress remaining warning in reth-seismic-payload-builder with a com…
ssolit May 20, 2025
05d3c1c
chore: fix typo in EnclaveError enum (#171)
cdrappi May 21, 2025
f377d81
github/codeowners: remove @phexyz, add @ssolit, @sfyll, @cdrappi (#172)
cdrappi May 21, 2025
05971d3
Merge branch 'seismic' of github.com:SeismicSystems/seismic-reth into…
cdrappi May 21, 2025
94c98f4
Upstream merge: Update codeowners; fix typo in EnclaveError enum (#173)
cdrappi May 21, 2025
0a9dc27
bump types after alloy storage change
ssolit May 22, 2025
06894d6
Alloy evm executor (#176)
ssolit May 23, 2025
cf6b72b
Draft simulate_v1 (#177)
ssolit May 27, 2025
79a84b5
Clean Cli Cargo Deps (#178)
ssolit May 27, 2025
d3b1a4e
bump seismic-op-alloy commit
ssolit May 28, 2025
7fcf6a5
Integration test 1 passes (#179)
ssolit May 28, 2025
8e812f7
bump seismic evm (#180)
ssolit May 28, 2025
f2a6b02
cleaned node it
ssolit May 28, 2025
fddb3ef
test_seismic_reth_rpc progress (#181)
ssolit May 28, 2025
00e786f
comment
ssolit May 29, 2025
3a3cdf5
bump seismic-op-alloy
ssolit May 29, 2025
05792d7
Decryption for Estimate Gas (#182)
ssolit May 30, 2025
4d1faf4
test_seismic_reth_rpc_with_typed_data passes (#183)
ssolit May 30, 2025
4dd708d
test_seismic_reth_rpc_simulate_block passes (#185)
ssolit May 30, 2025
0d329af
comment
ssolit May 30, 2025
754737f
Integration rust client test (#184)
cdrappi Jun 3, 2025
5d49ef3
Precompiles Integration Test (#186)
ssolit Jun 5, 2025
77d3a3c
Viem Tests pass (#187)
ssolit Jun 5, 2025
7be2db9
Change dev genesis json (#189)
ssolit Jun 9, 2025
6e91dad
cargo +nightly fmt seismic crates
ssolit Jun 9, 2025
f28f1a8
remove Decodable712 from Transaction trait (#190)
ssolit Jun 9, 2025
8ebcd1d
Workspace builds (#191)
ssolit Jun 9, 2025
58eaec4
CI runner Integration and Viem tests pass (#192)
ssolit Jun 9, 2025
32300af
minor cleaning (#193)
ssolit Jun 9, 2025
543cceb
integration test harness improvement (#194)
ssolit Jun 10, 2025
3adc47a
alloy url change (#196)
ssolit Jun 11, 2025
668674f
remove all merge conflicts, build still broken
ssolit Jun 11, 2025
a61750e
Alloy 1 merge: squash all of our commits (#205)
cdrappi Jun 25, 2025
6f14720
bump deps
ssolit Jun 19, 2025
bbbb4ce
bump alloy-core
ssolit Jun 20, 2025
d1b9025
bump deps to seismic branch
ssolit Jun 20, 2025
c8960cc
fixed partial eq thing with into
ssolit Jun 20, 2025
52156b3
Alloy 1: cherry pick extra commits after alloy 1 => upstream merge (#…
cdrappi Jun 25, 2025
424f6b0
Pre alloy 1: clean upstream merge (#209)
cdrappi Jun 25, 2025
1d4e80b
Merge branch 'alloy-1-squash' of github.com:SeismicSystems/seismic-re…
cdrappi Jun 25, 2025
29bb230
merge og-upstream-merge into alloy-1-squash by choosing all of alloy-…
cdrappi Jun 25, 2025
acc7f54
remove payload builder that got added
cdrappi Jun 25, 2025
a1c034b
Alloy 1 => squashed "clean_upstream_merge" (#210)
cdrappi Jun 25, 2025
97f43fc
deps: Upstream merge through commit `b76d4f661` (#211)
cdrappi Jun 25, 2025
8c04ef3
deps: enclave get_purpose_key (#202)
ssolit Jun 25, 2025
4988f57
Trie/sparse benches: test data should use flagged storage (#213)
cdrappi Jun 27, 2025
240eb76
Allow passing in --chain dev-old to use pre-alloy-1 genesis hash (#214)
cdrappi Jun 27, 2025
88b8cf0
Revert "deps: enclave get_purpose_key" (#217)
cdrappi Jun 27, 2025
cb55c9f
deps: bump seismic fork commits + update enclave repo (#220)
cdrappi Jul 3, 2025
be09edc
Typed data transactions should hash the same way on recovery vs. sign…
cdrappi Jul 8, 2025
9cb6c50
bump enclave (#223)
ssolit Jul 14, 2025
b1ea72d
Genesis upgrades contract (#224)
ssolit Jul 14, 2025
be749ad
Seismic genesis account (#226)
ssolit Jul 23, 2025
a8abc46
Turn off 4844 case for seismic compact test (#228)
ssolit Jul 24, 2025
452b6f1
modify start up test to use a random port (#229)
ssolit Jul 25, 2025
29bdae5
Update revm commit: correctly calculate state diffs with non-public F…
cdrappi Jul 29, 2025
2072d1c
Reth's storage entry should have FlaggedStorage (#236)
cdrappi Aug 14, 2025
6ca2308
feat: fetch live RNG key and inject it into EVM config (#243)
matthias-wright Aug 22, 2025
b34c2ed
resolve merge conflicts; build broken
cdrappi Sep 22, 2025
bfe61d0
include alloy-genesis
cdrappi Sep 22, 2025
262cb02
deps
cdrappi Sep 22, 2025
87f24b4
fix cargo eth
cdrappi Sep 22, 2025
a0c6971
more fixing
cdrappi Sep 22, 2025
a91ee88
more
cdrappi Sep 22, 2025
ec248f5
Upstream merge fixes (#244)
cdrappi Sep 30, 2025
e046006
update commits to seismic repos
cdrappi Sep 30, 2025
7227e79
only run CI vs seismic branch
cdrappi Sep 30, 2025
3941eab
add TODO(audit)
cdrappi Sep 30, 2025
9a025eb
Upstream merge through 1.7.0 @ `394a53d` (#245)
cdrappi Sep 30, 2025
be7af64
deps: update revm commit (#247)
cdrappi Oct 1, 2025
8cafa28
update genesis
daltoncoder Oct 6, 2025
81518f9
Revert "update genesis"
daltoncoder Oct 6, 2025
34c5595
Block execution: don't halt chain on seismix tx with bad encryption (…
cdrappi Oct 6, 2025
18c80ad
Add timestamp-in-seconds feature flag; w/o it everything but revm/blo…
cdrappi Oct 8, 2025
d7456d5
Enclave keys: fetch them on boot & never make request to client again…
cdrappi Oct 10, 2025
f6965ce
remove print statements that show header timestamps (#253)
cdrappi Oct 21, 2025
f5e8be3
update enclave bytecode (#254)
daltoncoder Oct 21, 2025
7c2fe96
Update genesis bytecode (#255)
daltoncoder Oct 22, 2025
d9010bb
Update commit to seismic-revm-inspectors (#257)
cdrappi Oct 22, 2025
f78dd4e
boot: try 6 times to start reth with exp backoff of 5 * 2**n (#258)
cdrappi Oct 22, 2025
0981f14
boot: break on Ok instead of continue; don't exponential backoff; sle…
cdrappi Oct 22, 2025
e0ebd6a
enclave v2 support (#265)
daltoncoder Nov 11, 2025
ff117aa
Fix timestamp validation (#267)
daltoncoder Nov 18, 2025
d70fa11
reth binary: add retries/sleep for getting purpose keys (#266)
cdrappi Nov 18, 2025
d04bbe4
add genesis contracts (#268)
daltoncoder Nov 20, 2025
5b0841b
Genesis: give one address 2**253 wei and anvil-1 1M ETH (#269)
cdrappi Nov 24, 2025
7778944
[deps] update cargo.toml with most recent commits (#270)
cdrappi Nov 25, 2025
7f74445
feat: genesis contract builder (#261)
ameya-deshmukh Dec 4, 2025
4141f74
change persistance threshold default (#275)
daltoncoder Dec 16, 2025
04d6d9e
remove unused import from net nat (#276)
cdrappi Dec 29, 2025
3224cab
Default seismic-contracts to main branch
cdrappi Dec 29, 2025
62834bd
remove eth66 getNodeData message (#277)
cdrappi Dec 31, 2025
b2378d7
WIP: fix failing EIP-4844 test (#262)
ameya-deshmukh Jan 6, 2026
49d8b34
feat: `eth_getFlaggedStorageAt` (#274)
ameya-deshmukh Jan 6, 2026
08c87b3
feat: explicit flag for enabling storage APIs (#278)
ameya-deshmukh Jan 6, 2026
11bd7b8
feat: Seismic `clippy` audit remediation with panic-safety improvemen…
ameya-deshmukh Jan 12, 2026
3ebd6d2
Seismic tx: encrypt with AEAD for replay protection (#281)
cdrappi Jan 13, 2026
8cffa35
feat: `cargo clippy` for Seismic crates in CI to check for `panic`s, …
ameya-deshmukh Jan 13, 2026
3d41ce9
fix: more `clippy` warnings (#284)
ameya-deshmukh Jan 13, 2026
c6e7c90
update revm commit
cdrappi Jan 15, 2026
97733e8
EnclaveArgs: remove duplicate definitions; move enclave booter to sep…
cdrappi Jan 15, 2026
30c6b39
Reth unwind: a small diff with no slop (#289)
cdrappi Jan 15, 2026
3988fa0
feat: flagged storage tests (#292)
ameya-deshmukh Jan 20, 2026
542663a
perf(hashing_storage): allocate correct vec capacity (#293)
samlaf Jan 21, 2026
d0ca05a
chore: update seismic-evm (#294)
matthias-wright Jan 23, 2026
8383f0e
chore: add more addresses to dev genesis (#296)
matthias-wright Jan 26, 2026
8c117fa
chore: add forkdiff (#295)
samlaf Jan 28, 2026
c77a5a6
ci(gh-pages): set fetch-depth to 0 (#297)
samlaf Jan 28, 2026
f16222b
docs: add forkdiff badge/link to readme (#298)
samlaf Jan 28, 2026
afca0e5
fix: don't error out when not overwriting an address in `dev.json` (#…
ameya-deshmukh Jan 29, 2026
e963e97
fix: storage, nonce and balance fields for contracts in genesis build…
ameya-deshmukh Jan 29, 2026
6a79a83
update precompiles (#300)
daltoncoder Jan 29, 2026
22816a5
chore(cargo.toml): update seismic-evm patch commit (no-op) (#302)
samlaf Feb 4, 2026
639e560
chore(vscode): commit settings.json with nightly rustfmt (#310)
samlaf Feb 10, 2026
8b65fa4
docs: move and update docs/seismic/features.md (#311)
samlaf Feb 10, 2026
dae79d5
fix(eip1186): eth_getProof shouldnt return private slot info (#304)
samlaf Feb 11, 2026
cd7277f
fix(genesis-builder): point to monorepo contracts + lexicographically…
samlaf Feb 13, 2026
df01ee7
fix: Peer discovery (#313)
HenryMBaldwin Feb 17, 2026
d8a1937
feat(txpool): add RecentBlockCache for O(1) block hash lookup
cdrappi Feb 19, 2026
8066a0e
fix(txpool): use RecentBlockCache to fix race condition in block hash…
cdrappi Feb 19, 2026
5b1dc50
feat: add adversarial fuzzing for shielded transactions + operations …
ameya-deshmukh Feb 20, 2026
72c3d1c
fix: include EIP-4844 transactions in fuzz tests (#317)
ameya-deshmukh Feb 23, 2026
72e18b6
chore: bump seismic-enclave commit (#319)
samlaf Feb 25, 2026
c54fc81
ci: add Claude Code PR review action (#320)
ameya-deshmukh Feb 26, 2026
7ea95fa
ci: fix Claude PR review loop with exhaustive initial + incremental r…
ameya-deshmukh Feb 27, 2026
48b7d3f
fix: reorder imports to satisfy nightly rustfmt (#325)
drappi-ai Mar 2, 2026
3ce39c2
refactor(optimism): minimize diff with main branch (upstream) (#326)
samlaf Mar 2, 2026
1ea6a8a
fix(cargo): patch alloy-tx-macros to fix build (#327)
samlaf Mar 4, 2026
757b248
chore: add consensus state root contract for EIP-4788 (#329)
matthias-wright Mar 9, 2026
f42f892
fix(chain-state): make revm-state optional like upstream (#330)
samlaf Mar 10, 2026
9ca1361
refactor(seismic-primitive): delete unused alloy-compat code/feature …
samlaf Mar 17, 2026
6297561
test: fix seismic integration failure lifecycle (#336)
samlaf Mar 17, 2026
b410fb4
chore(ci): sticky-comment claude PR review workflow (#337)
ameya-deshmukh Mar 18, 2026
be1e205
ci: re-enable 8 nextest-filtered tests that pass (#334)
ameya-deshmukh Mar 18, 2026
256c081
chore: bump revm/evm to veridise-audit branch (#340)
samlaf Mar 18, 2026
05753a5
feat(seismic): wire eth_config RPC (EIP-7910) and add hardfork config…
ameya-deshmukh Mar 19, 2026
7990607
test(seismic): re-enable E2E testsuite module (#339)
ameya-deshmukh Mar 23, 2026
f3a05fb
test(seismic): re-enable E2E p2p module (#341)
ameya-deshmukh Mar 23, 2026
5fab222
chore: improve Claude PR review to catch semantic correctness issues …
ameya-deshmukh Mar 24, 2026
0b936c3
ci: add workspace-wide cargo check and clippy jobs (#342)
ameya-deshmukh Mar 24, 2026
86b6dfd
refactor(primitives): simplify FromRecoveredTx by delegating to from_…
samlaf Mar 25, 2026
2e42bac
fix(e2e): make chain import generic and regenerate RPC compat test da…
ameya-deshmukh Apr 1, 2026
6bdeb50
fix(trie): encode FlaggedStorage in StorageProof::verify
ameya-deshmukh Apr 1, 2026
9efef55
chore: Bump and respect seismic deps and remove viem tests (#353)
HenryMBaldwin Apr 1, 2026
ebddab5
refactor(seismic): migrate e2e integration tests to in-process node (…
ameya-deshmukh Apr 3, 2026
9382370
refactor: add SeismicFullNode trait alias to reduce verbose bounds (#…
ameya-deshmukh Apr 6, 2026
f3527de
chore: decouple optimism crates from workspace build (#359)
samlaf Apr 6, 2026
dc70304
refactor(chainspec): use stock alloy_genesis::Genesis in ChainSpec (#…
samlaf Apr 7, 2026
4917b46
feat: sanitize traces at rpc layer (#354)
samlaf Apr 7, 2026
8110442
feat: e2e fuzz tests (#318)
ameya-deshmukh Apr 7, 2026
20350b1
feat!(seismic-tx): add auth_list to TxSeismic + bump deps (#332)
samlaf Apr 8, 2026
525343f
fix: decouple rpc_compat test from SEISMIC_DEV chainspec (#368)
ameya-deshmukh Apr 8, 2026
d2658c3
fix(rpc)!: sanitize `from` in eth_estimateGas to prevent leaks via ca…
HenryMBaldwin Apr 8, 2026
2307d35
feat: add authenticated getStorageAt endpoint (#369)
matthias-wright Apr 8, 2026
f2d9fca
chore: bump deps (#371)
HenryMBaldwin Apr 9, 2026
04e7dea
chore: add lefthook configuration (#377)
HenryMBaldwin Apr 14, 2026
4bbc650
stablecoin gas (#378)
daltoncoder Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
265 changes: 265 additions & 0 deletions .claude/prompts/claude-pr-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
# Claude PR Review Guidelines

You're a code reviewer helping engineers ship better code on seismic-reth, a privacy-enabled fork of reth. Your feedback should be high-signal: every comment should prevent a bug, improve safety, or teach something valuable.

Output your review as plain text. Do NOT use `gh pr comment` or any other tool to post comments — the action handles posting.

**Important:** Your ENTIRE text output becomes the PR comment body. Do not include conversational preamble like "I'll review this PR" or "Let me get the diff." Start directly with your one-line summary of what the PR does.

## Review Philosophy

**When in doubt, approve.** Your default is to approve. Only request changes when you are certain something will break.

**Review the code, not the coder.** Focus on patterns and behavior, not style.

**Teach through specifics.** Concrete examples beat abstract advice. But only teach when there's a genuine gap — don't explain things the author already knows.

**Balance teaching with shipping.** Idealism is nice; working software ships.

## Seismic-Reth Domain Context

This is a privacy-focused Ethereum execution client forked from reth. The codebase adds confidential transactions, encrypted storage, TEE integration, and custom precompiles. Seismic-specific code lives primarily in `crates/seismic/` with subcrates: `evm`, `primitives`, `rpc`, `txpool`, `payload`, `node`, `cli`, `chainspec`, `hardforks`, `fuzz`.

### Confidential Transactions (type 0x4a)

`TxSeismic` is defined in `crates/seismic/primitives/src/transaction/signed.rs`. Each transaction carries `seismic_elements`:
- `encryption_pubkey` (33-byte compressed secp256k1 public key)
- `encryption_nonce` (U96)
- `message_version` (0 or 2)
- `recent_block_hash` (freshness check against `RecentBlockCache`)
- `expires_at_block` (block expiration)
- `signed_read` (bool — whether this is a read authorization)

Compact codec lives in `crates/storage/codecs/src/alloy/transaction/seismic.rs`. The `to_compact()`/`from_compact()` methods serialize these fields with defensive indexing — codec changes can break backward compatibility with existing stored data.

RPC conversion from JSON to `TxSeismic` is in `crates/seismic/primitives/src/alloy_compat.rs`.

### Enclave/TEE & Purpose Keys

Purpose keys are fetched once at boot from the TEE enclave (`crates/seismic/node/src/enclave.rs`). The `boot_enclave_and_fetch_keys()` function has two modes:
- **Real enclave:** HTTP client connects to the configured endpoint (default `127.0.0.1:7878`)
- **Mock server:** Started via `seismic_enclave::start_mock_server()`, gated behind `--enclave.mock-server` CLI flag (`crates/node/core/src/args/enclave.rs:29`)

Keys are stored in a global `OnceLock` in `crates/seismic/node/src/purpose_keys.rs` and accessed via `get_purpose_keys()`. The `GetPurposeKeysResponse` contains:
- `tx_io_sk` — **SECRET KEY**, must never be logged or serialized
- `tx_io_pk` — public key, exposed via `seismic_getTeePublicKey` RPC endpoint
- `snapshot_key_bytes` — 32-byte key
- `rng_keypair` — Schnorrkel keypair for RNG precompile

**Known leak risk:** `SeismicApi` and `EthApiExt` structs (`crates/seismic/rpc/src/eth/ext.rs:53-56, 133-137`) both `#[derive(Debug)]` and hold `GetPurposeKeysResponse` with the secret key. Any `debug!()` or `{:?}` formatting of these structs would leak `tx_io_sk`. Watch for new Debug logging added to these types.

### Flagged Storage (CLOAD/CSTORE)

Custom opcodes enforce privacy boundaries:
- `CLOAD` (0xB0): Load from **private** storage only
- `CSTORE` (0xB1): Store to **private** storage only
- Standard `SLOAD`/`SSTORE`: **Public** storage only

Cross-boundary access fails: SLOAD on a private slot or CLOAD on a public slot returns an error ("invalid private storage access"). This is enforced in seismic-revm (external dep) and tested end-to-end in `crates/seismic/node/tests/e2e/integration.rs:858-1184` with a dedicated test contract.

### Seismic Precompiles (addresses 100–105)

All precompiles have signature `fn(&[u8], u64) -> PrecompileResult` and are registered via `SeismicEvmFactory::new_with_purpose_keys()` in `crates/seismic/evm/src/lib.rs:63`.

| Address | Function | Min Input | Key Edge Case |
|---------|----------|-----------|---------------|
| 100 | RNG | — | Stateful (uses rng_keypair), unlike others |
| 101 | ECDH (`derive_symmetric_key`) | 65 bytes (32B sk + 33B pk) | `.expect("must be 32 bytes")` guarded by length check |
| 102 | AES-GCM encrypt | 44 bytes | `.expect("must be 12 bytes")` guarded by `validate_nonce_length` |
| 103 | AES-GCM decrypt | 60 bytes | Same nonce validation |
| 104 | HKDF | 0 bytes | No minimum; variable length |
| 105 | secp256k1 sign | 64 bytes (32B sk + 32B msg) | `.try_into().unwrap()` guarded by length check |

Boundary input validation is fuzzed in `crates/seismic/fuzz/tests/precompiles.rs`.

### Hardforks

Defined in `crates/seismic/hardforks/src/lib.rs`. All standard Ethereum forks (Frontier through Prague) activate at **Block 0** or **Timestamp 0**. Seismic's `Mercury` hardfork activates at **Timestamp 0**. Chain IDs: mainnet=5123, dev=5124 (see `crates/seismic/chainspec/src/lib.rs`).

### TxPool Validation

`RecentBlockCache` (`crates/seismic/txpool/src/recent_block_cache.rs`) stores recent block hashes in a `HashSet` + `VecDeque` with FIFO eviction. The cache is wrapped in `RwLock` in `crates/seismic/txpool/src/validator.rs:28`.

Lock recovery pattern: `self.recent_blocks.write().unwrap_or_else(|e| e.into_inner())` — handles poisoned locks from prior panics. `on_new_head_block()` writes; `validate_recent_block_hash()` reads.

### RPC

Key seismic-specific endpoints in `crates/seismic/rpc/src/eth/ext.rs`:
- `seismic_getTeePublicKey` (line 41-50) — returns `tx_io_pk`
- `eth_call` override (line 108) — decrypts signed reads via `signed_read_to_plaintext_tx()`, executes, re-encrypts
- `eth_sendRawTransaction` override (line 118) — accepts `SeismicRawTxRequest` (encrypted bytes or typed data), kept encrypted in pool
- `eth_estimateGas` override (line 123) — decrypts if seismic, estimates
- `eth_simulateV1` override (line 100) — decrypt/simulate/re-encrypt

`signed_read_to_plaintext_tx()` lives in `crates/seismic/rpc/src/eth/utils.rs:86-105` — conditionally decrypts using `tx_io_sk`. Errors propagate through `EthApiError`.

### Clippy Strictness

Seismic CI enforces `clippy::unwrap_used`, `clippy::expect_used`, `clippy::panic`, `clippy::unreachable`, `clippy::todo` as **errors** in non-test code. Existing `expect()`/`panic!()` calls in production code use explicit `#[allow(...)]` with documented justifications (startup panics in enclave.rs, genesis deserialization in chainspec). New code must follow this pattern.

## Known Antipatterns

These patterns are always bugs in Seismic code. Flag them immediately:

- `ChainSpecBuilder::default()...cancun_activated()` used with `SeismicNode` — must use `SEISMIC_DEV` or `SEISMIC_MAINNET`
- `MAINNET` chain ID in Seismic test code — Seismic has its own chain IDs (mainnet=5123, dev=5124)
- Raw `timestamp` in payload attributes without multiplying by `SEISMIC_TIMESTAMP_MULTIPLIER` (1000) — Seismic uses millisecond timestamps
- Duplicated `ensure_mock_purpose_keys()` — should use the shared helper from `utils.rs`
- `EthereumNode` used where `SeismicNode` is expected in Seismic E2E tests

## Review Priorities

### Phase 1: Critical Issues

Problems that would cause immediate harm:

- Bugs or logic errors that will hit production
- Security vulnerabilities (injection, auth bypass, secret leakage)
- **Plaintext leaks of shielded values** in logs, errors, Display impls, or RPC responses — especially `debug!()` calls on types containing `seismic_elements` or `purpose_keys`
- **Purpose key exposure** — `tx_io_sk` logged, serialized, or returned via RPC
- **Confidential tx field mishandling** — wrong encryption_nonce, missing pubkey validation, message_version mismatch
- **Flagged storage boundary violations** — SLOAD/SSTORE used where CLOAD/CSTORE is required, or vice versa
- Data corruption or loss risks (especially codec backward compatibility)
- Race conditions in `RwLock<RecentBlockCache>` or other shared state
- Breaking API changes not flagged in the PR description
- **Mock enclave accessible in production** — `--enclave.mock-server` path reachable without the flag
- **Wrong chain spec for node type** — `ChainSpecBuilder::default()...cancun_activated()` or `MAINNET` used with `SeismicNode`. Seismic nodes must use `SEISMIC_DEV` or `SEISMIC_MAINNET` chain specs.
- **Missing timestamp multiplier** — Seismic uses millisecond timestamps. Payload attributes must multiply timestamps by 1000 (use `SEISMIC_TIMESTAMP_MULTIPLIER`).
- **Semantic mismatch** — code that claims to test or set up Seismic functionality but actually uses vanilla Ethereum configuration (wrong chain spec, wrong node type, missing Seismic-specific parameters)

### Phase 2: Patterns & Principles

Improvements to maintainability (flag these, but they're rarely blockers):

- Error handling gaps at system boundaries
- Performance problems with measurable impact
- Hidden dependencies or surprising behaviors
- Missing validation of external input
- Upstream merge friction (unnecessary renames, deleted code that creates conflicts when merging from upstream reth)
- `unwrap()`/`expect()`/`panic!()` in non-test code without `#[allow(...)]` and justification (CI will reject)
- Precompile input validation gaps (missing length checks before `.expect()` or `.unwrap()`)

### Phase 3: Polish

Nice-to-haves — mention only if the win is obvious:

- Dead code, unused imports
- Naming that actively misleads
- A simpler way to express the same logic

**Ignore:** style preferences covered by formatters/linters (`rustfmt`, `clippy`), missing docs on internal code, test coverage opinions, "consider using X library" suggestions.

## Decision Framework

**Request Changes** — Only when you're certain something will break:

- Bugs that will hit production
- Security vulnerabilities with clear exploit paths
- Data loss or corruption risks
- Plaintext leakage of confidential transaction data or purpose keys

If you're not 100% certain, don't request changes.

**Approve** — Your default. Use it when:

- The code works
- You have suggestions but they're improvements, not blockers
- You're uncertain whether something is actually a problem

Approve with comments beats comment-only reviews. If it's not worth blocking, it's worth approving.

## Weighing Existing Context

Before commenting, check the PR description and existing discussion:

- **Resolved threads**: Don't re-raise them.
- **Engineer responses**: If they explained why something is intentional, accept it. They have context you don't.
- **Prior approvals**: Your bar for requesting changes should be even higher.

When engineers push back on feedback, assume they have context you're missing. Don't repeat the same point.

## Writing Comments

Be direct and brief. One issue, one to two lines. Include file path and line number.

**Good:**

> `crates/seismic/rpc/src/eth/ext.rs:203` — `signed_read_to_plaintext_tx` passes `self.purpose_keys.tx_io_sk` directly. If `plaintext_copy()` errors, the error chain should not include the secret key bytes in its Display impl.

**Good:**

> `crates/seismic/rpc/src/eth/transaction.rs:37` — `?recovered` in `debug!()` logs the full `Recovered<SeismicTransactionSigned>`, which includes `seismic_elements` (encryption_pubkey, nonce). Use a custom formatter or log only the tx hash.

**Good:**

> `crates/seismic/txpool/src/validator.rs:166` — `on_new_head_block()` takes a write lock on `RecentBlockCache` and calls `self.inner.client().header_by_number()` inside the lock. If that client call blocks, readers in `validate_recent_block_hash()` will starve.

**Good:**

> `crates/storage/codecs/src/alloy/transaction/seismic.rs:110` — `from_compact()` changed the field order. Existing encoded data in MDBX uses the old order — this will silently deserialize with swapped fields.

**Good:**

> `crates/seismic/payload/src/builder.rs:244` — `.expect("fee is always valid; execution succeeded")` is fine here — matches the existing pattern with `#[allow(clippy::expect_used)]` and documented justification.

**Too much:**

> Issue 1: Database Error Handling (Blocking)
> The writer module is using unwrap() on database operations which could... Why this matters: In production, database operations can fail due to...

Skip headers, emojis, and "Why this matters" sections unless it's genuinely non-obvious.

## Avoid

- Filler words: "robust," "comprehensive," "excellent," "well-structured," "solid"
- Summarizing what the PR description already says
- Hedging: "Maybe you could...", "Consider perhaps..."
- Starting with generic praise: "Great job!", "Nice work!"
- Long reviews — if it's more than a few focused paragraphs, you're not sure what actually matters

## Output Format

Start with a one-line summary of what the PR does (your own words).

Then list issues by priority phase. Only include phases that have items:

```
Adds encrypted calldata relay for confidential transactions in the payload builder.

**Phase 1**
- `crates/seismic/payload/src/builder.rs:202` — `debug!("default_seismic_payload: tx: {:?}", tx)` logs the full SeismicTransactionSigned with Debug derive, exposing seismic_elements (encryption_pubkey, nonce) in plaintext.
- `crates/seismic/rpc/src/eth/ext.rs:70` — `seismic_getTeePublicKey` returns `tx_io_pk` unconditionally. If seismic mode is disabled, this should return an error instead of a valid-looking key.

**Phase 2**
- `crates/storage/codecs/src/alloy/transaction/seismic.rs:85` — New field added to TxSeismicElements compact encoding but `from_compact()` doesn't handle the old format without it. Existing MDBX data will fail to decode.
- `crates/seismic/evm/src/lib.rs:140` — `header.base_fee_per_gas().unwrap_or_default()` is fine (safe fallback), but the new `gas_limit` field uses bare `.unwrap()` without clippy allow.

**Phase 3**
- `crates/seismic/evm/src/lib.rs:30` — unused import `secp256k1::SecretKey` after refactor.
```

If there are no issues worth mentioning, just say "LGTM" and stop.

## Key Files Reference

When reviewing changes to these files, pay extra attention:

| File | Why it's sensitive |
|------|-------------------|
| `crates/seismic/rpc/src/eth/ext.rs` | Holds `tx_io_sk`, derives Debug, all custom RPC endpoints |
| `crates/seismic/rpc/src/eth/utils.rs` | `signed_read_to_plaintext_tx` decryption path |
| `crates/seismic/node/src/enclave.rs` | Mock server gating, purpose key fetch |
| `crates/seismic/node/src/purpose_keys.rs` | Global secret key storage |
| `crates/seismic/payload/src/builder.rs` | Tx logging, fee handling with expect |
| `crates/seismic/primitives/src/transaction/signed.rs` | TxSeismic structure, encoding |
| `crates/storage/codecs/src/alloy/transaction/seismic.rs` | Compact codec, backward compat |
| `crates/seismic/txpool/src/validator.rs` | RwLock on RecentBlockCache |
| `crates/seismic/hardforks/src/lib.rs` | Fork activation, Mercury |
| `crates/seismic/evm/src/lib.rs` | EVM config, precompile registration, purpose keys |
| `crates/storage/libmdbx-rs/mdbx-sys/libmdbx/` | **NEVER modify** — vendored third-party code |

## Remember

Your job is to catch real problems and help engineers ship safely. A short review that approves working code is better than a thorough essay that blocks it for theoretical improvements.

When in doubt, approve.
9 changes: 5 additions & 4 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[profile.default]
retries = { backoff = "exponential", count = 2, delay = "2s", jitter = true }
slow-timeout = { period = "30s", terminate-after = 4 }
retries = { backoff = "exponential", count = 3, delay = "5s", jitter = true, max-delay = "30s" }
slow-timeout = { period = "300s", terminate-after = 6 }

[[profile.default.overrides]]
filter = "test(general_state_tests)"
slow-timeout = { period = "1m", terminate-after = 10 }
filter = 'test(general_state_tests)'
slow-timeout = { period = "2m", terminate-after = 15 }

[[profile.default.overrides]]
filter = "test(eest_fixtures)"
Expand All @@ -15,3 +15,4 @@ slow-timeout = { period = "2m", terminate-after = 10 }
[[profile.default.overrides]]
filter = "binary(e2e_testsuite)"
slow-timeout = { period = "2m", terminate-after = 3 }

46 changes: 1 addition & 45 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,45 +1 @@
* @gakonst
crates/blockchain-tree-api/ @rakita @rkrasiuk @mattsse @Rjected
crates/blockchain-tree/ @rakita @rkrasiuk @mattsse @Rjected
crates/chain-state/ @fgimenez @mattsse @rkrasiuk
crates/chainspec/ @Rjected @joshieDo @mattsse
crates/cli/ @mattsse
crates/consensus/ @rkrasiuk @mattsse @Rjected
crates/e2e-test-utils/ @mattsse @Rjected
crates/engine @rkrasiuk @mattsse @Rjected
crates/engine/ @rkrasiuk @mattsse @Rjected @fgimenez
crates/era/ @mattsse @RomanHodulak
crates/errors/ @mattsse
crates/ethereum-forks/ @mattsse @Rjected
crates/ethereum/ @mattsse @Rjected
crates/etl/ @joshieDo @shekhirin
crates/evm/ @rakita @mattsse @Rjected
crates/exex/ @shekhirin
crates/net/ @mattsse @Rjected
crates/net/downloaders/ @rkrasiuk
crates/node/ @mattsse @Rjected @klkvr
crates/optimism/ @mattsse @Rjected @fgimenez
crates/payload/ @mattsse @Rjected
crates/primitives-traits/ @Rjected @RomanHodulak @mattsse @klkvr
crates/primitives/ @Rjected @mattsse @klkvr
crates/prune/ @shekhirin @joshieDo
crates/ress @rkrasiuk
crates/revm/ @mattsse @rakita
crates/rpc/ @mattsse @Rjected @RomanHodulak
crates/stages/ @rkrasiuk @shekhirin
crates/static-file/ @joshieDo @shekhirin
crates/storage/codecs/ @joshieDo
crates/storage/db-api/ @joshieDo @rakita
crates/storage/db-common/ @Rjected
crates/storage/db/ @joshieDo @rakita
crates/storage/errors/ @rakita
crates/storage/libmdbx-rs/ @rakita @shekhirin
crates/storage/nippy-jar/ @joshieDo @shekhirin
crates/storage/provider/ @rakita @joshieDo @shekhirin
crates/storage/storage-api/ @joshieDo @rkrasiuk
crates/tasks/ @mattsse
crates/tokio-util/ @fgimenez
crates/transaction-pool/ @mattsse
crates/trie/ @rkrasiuk @Rjected @shekhirin @mediocregopher
etc/ @Rjected @shekhirin
.github/ @gakonst @DaniPopes
* @cdrappi
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ body:
id: terms
attributes:
label: Code of Conduct
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/paradigmxyz/reth/blob/main/CONTRIBUTING.md#code-of-conduct)
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/SeismicSystems/seismic-reth/blob/main/CONTRIBUTING.md#code-of-conduct)
options:
- label: I agree to follow the Code of Conduct
required: true
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: GitHub Discussions
url: https://github.com/paradigmxyz/reth/discussions
url: https://github.com/SeismicSystems/seismic-reth/discussions
about: Please ask and answer questions here to keep the issue tracker clean.
1 change: 1 addition & 0 deletions .github/assets/kurtosis_network_params.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ participants:
- el_type: geth
cl_type: lighthouse
- el_type: reth
# TODO: add for seismic
el_image: "ghcr.io/paradigmxyz/reth:kurtosis-ci"
cl_type: teku
additional_services:
Expand Down
Loading
Loading