[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-ethereum-state-actor":3,"mdc-qe4tfn-key":27,"related-org-ethereum-state-actor":3099,"related-repo-ethereum-state-actor":3106},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":17,"repoUrl":18,"updatedAt":19,"license":20,"forks":21,"topics":22,"repo":23,"sourceUrl":25,"mdContent":26},"state-actor","generate and verify Ethereum databases","Use this skill when a user wants to generate, boot, verify, or extend a state-actor-produced Ethereum database. Covers --client, --spec, --target-size, per-client boot recipes (geth \u002F reth \u002F besu \u002F nethermind \u002F ethrex \u002F erigon), and the canonical 29-entity spec fixture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"ethereum","Ethereum","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fethereum.png",[12,16],{"name":13,"slug":14,"type":15},"Database","database","tag",{"name":9,"slug":8,"type":15},10,"https:\u002F\u002Fgithub.com\u002Fethereum\u002Fstate-actor","2026-07-22T05:38:39.481442",null,8,[],{"repoUrl":18,"stars":17,"forks":21,"topics":24,"description":20},[],"https:\u002F\u002Fgithub.com\u002Fethereum\u002Fstate-actor\u002Ftree\u002FHEAD\u002Fdocs","---\nname: state-actor\ndescription: Use this skill when a user wants to generate, boot, verify, or extend a state-actor-produced Ethereum database. Covers --client, --spec, --target-size, per-client boot recipes (geth \u002F reth \u002F besu \u002F nethermind \u002F ethrex \u002F erigon), and the canonical 29-entity spec fixture.\n---\n\n# SKILL.md — how to use state-actor\n\nThis is the canonical \"how to use this lib\" doc for agents. The root [`AGENTS.md`](..\u002FAGENTS.md) is a pointer that points here.\n\nstate-actor generates client-ready Ethereum databases for geth, reth, besu, nethermind, ethrex, and erigon without going through each client's `init` path. You point it at a `--db` path, choose a `--client`, optionally pass a `--spec` declaring concrete entities, and it writes a database the client can boot against directly.\n\n## Read these first\n\nRead these in this order. The first one is load-bearing — read it before you read any prose about specs.\n\n1. [`examples\u002Ffull-matrix-spec-feature.yaml`](..\u002Fexamples\u002Ffull-matrix-spec-feature.yaml) — **the canonical syntax reference for `--spec`**. CI-pinned, 29 entities, every feature. Read this file before reading any other doc about specs; see the [Canonical spec reference](#canonical-spec-reference) section below for an intent → entity-# index.\n2. [`SPEC.md`](SPEC.md) — the schema reference (parser rules, validation errors, address-resolution algorithm, `approximate_size_bytes` semantics). Read alongside the fixture.\n3. [`RUNBOOK.md`](RUNBOOK.md) — per-client boot recipes (geth \u002F reth \u002F besu \u002F nethermind \u002F ethrex \u002F erigon).\n4. [`ARCHITECTURE.md`](ARCHITECTURE.md) — internal architecture; cross-client determinism; per-client writer differences.\n\n## Three load-bearing flags\n\n| Flag | What it controls |\n|---|---|\n| `--client` | Which client format to write (`geth`, `reth`, `besu`, `nethermind`, `ethrex`, `erigon`) |\n| `--spec` | Path to a YAML file declaring concrete entities (EOAs, contracts, ERC-20s, EIP-7702 delegations) |\n| `--target-size` | Advisory budget that sizes the auto-fill of synthetic state. Not a hard on-disk cap — actual size may vary per client. |\n\nEverything else has a sane default. Run `state-actor --help` for the full list (22 flags).\n\n## Canonical spec reference\n\n**The single source of truth for what a `--spec` YAML can express is [`examples\u002Ffull-matrix-spec-feature.yaml`](..\u002Fexamples\u002Ffull-matrix-spec-feature.yaml).** Read that file before reading anything else about specs. It is exhaustive (29 entities, every feature), self-documenting (six section banners + per-entity comments), and CI keeps it correct.\n\nThe CI guarantees that hold this file as the canonical reference:\n\n- [`internal\u002Fspecbuild\u002Ffull_matrix_test.go`](..\u002Finternal\u002Fspecbuild\u002Ffull_matrix_test.go) (`TestBuildFullMatrix`) pins the entity count at 29 and asserts the cross-client `PreAlloc` count equality. The unit-level drift gate — byte-identity is enforced downstream by the cross-client-genesis-root aggregator job.\n- [`internal\u002Fe2e_testing\u002Fspec_setup.go`](..\u002Finternal\u002Fe2e_testing\u002Fspec_setup.go) (`LoadCISpec`) loads the fixture with `seed=0` + `sizecal.NewFixed(64)` so every client sees the same input.\n- Per-client `TestE2ESuite` (in [`client\u002Fgeth\u002Fe2e_test.go`](..\u002Fclient\u002Fgeth\u002Fe2e_test.go), [`client\u002Fbesu\u002Fe2e_test.go`](..\u002Fclient\u002Fbesu\u002Fe2e_test.go), [`client\u002Fnethermind\u002Fe2e_test.go`](..\u002Fclient\u002Fnethermind\u002Fe2e_test.go), [`client\u002Freth\u002Foracle_test.go`](..\u002Fclient\u002Freth\u002Foracle_test.go) for reth, [`client\u002Fethrex\u002Fe2e_test.go`](..\u002Fclient\u002Fethrex\u002Fe2e_test.go) for ethrex, and [`client\u002Ferigon\u002Fe2e_test.go`](..\u002Fclient\u002Ferigon\u002Fe2e_test.go) for erigon) boots a real client against state-actor's output, runs spamoor, and verifies every entity via the Go oracle.\n- The `cross-client · genesis state-root invariant` aggregator job in [`.github\u002Fworkflows\u002Fci.yml`](..\u002F.github\u002Fworkflows\u002Fci.yml) refuses to merge a PR whose four clients produce different genesis roots from this fixture.\n\nThe fixture is organised into six labelled sections; each one pins a feature cluster:\n\n| Section banner (in the YAML) | Entities | Feature pinned |\n|---|---|---|\n| `1. Spamoor sender` | 1 | Anvil dev-account-0 EOA with high balance |\n| `2-7. ERC-20 flavor coverage` | 2-7 | All three address modes × bulk-fill × storage-bloat × nonce override × skeleton |\n| `8-9. Explicit-owners + allowances coverage` | 8-9 | Granular `owners` list, explicit + bulk `allowances` |\n| `10-12. Raw bytecode flavors` | 10-12 | `kind: contract` + `code:` (no template); large code; storage synth |\n| `13-15. EIP-7702 EOA flavors` | 13-15 | `0xef0100\u003Cdelegate>` delegation marker × address modes × storage bloat |\n| `16-22. Plain EOA flavors` | 16-22 | All address modes, zero balance, hex-form balance, default-nonce, storage on EOA |\n\n### Intent → entity-# index\n\n| To declare … | Look at fixture entity # | Section |\n|---|---|---|\n| Plain EOA at explicit address | 1, 16 | Spamoor sender \u002F Plain EOA flavors |\n| Plain EOA, name-derived address | 17 | Plain EOA flavors |\n| Plain EOA, position-derived address | 18 | Plain EOA flavors |\n| Zero-balance or hex-form balance EOA | 20, 21 | Plain EOA flavors |\n| Plain EOA with synthesized storage | 19 | Plain EOA flavors |\n| EIP-7702 delegating EOA | 13, 14, 15 | EIP-7702 EOA flavors |\n| EIP-7702 EOA + storage bloat | 14 (`bloated-validator`) | EIP-7702 EOA flavors |\n| ERC-20 at explicit address with bulk fill | 2 | ERC-20 flavor coverage |\n| ERC-20 name-derived | 3 | ERC-20 flavor coverage |\n| ERC-20 position-derived | 4 | ERC-20 flavor coverage |\n| ERC-20 skeleton (no holders) | 5 | ERC-20 flavor coverage |\n| ERC-20 with explicit `nonce` override | 6 | ERC-20 flavor coverage |\n| ERC-20 with `approximate_size_bytes` (template + bloat) | 7 | ERC-20 flavor coverage |\n| ERC-20 with explicit `owners` and `allowances` | 8 | Explicit-owners + allowances |\n| ERC-20 explicit + bulk combined | 9 | Explicit-owners + allowances |\n| Raw bytecode contract | 10, 11, 12 | Raw bytecode flavors |\n| Plain EOA with omitted-nonce default (0) | 22 | Plain EOA flavors |\n\n### How to adapt the fixture to a new spec\n\n1. **Find the entity that matches your intent** using the index above; jump to that entity in [`examples\u002Ffull-matrix-spec-feature.yaml`](..\u002Fexamples\u002Ffull-matrix-spec-feature.yaml).\n2. **Copy the entity block** into your new YAML.\n3. **Edit the load-bearing fields** for your case — addresses, balances, template parameters, `approximate_size_bytes`. The field-by-field cheatsheet in [`examples\u002FREADME.md`](..\u002Fexamples\u002FREADME.md#field-by-field-cheatsheet) lists exactly which fields control what and what the constraints are (e.g. `decimals` must be 18 for the `erc20` template).\n4. **Address mode**: explicit (`address:` is set), name-derived (`name:` only), or position-derived (neither). The mode determines stability of the resulting address; see [`SPEC.md` § Address resolution](SPEC.md#address-resolution-three-deterministic-modes) for the algorithm.\n5. **Omit `--target-size`** when running `--spec` alone — that way no auto-fill runs on top, eliminating the collision risk between random EOAs and spec-derived addresses. Set `--target-size` only when you intentionally want auto-fill to pad the headroom.\n6. **Verify the entities landed** at the addresses you expect: `cast code 0x\u003Cderived-address>` returns the bytecode (contracts) or `0x` plus the delegation marker (7702 EOAs); `cast balance 0x\u003Caddress>` returns the spec's balance.\n\nFor the schema-level details the fixture's per-entity comments don't cover — parser rules, validation errors, the address-derivation algorithm, `approximate_size_bytes` resolution semantics — read [`SPEC.md`](SPEC.md). It's the schema reference; the fixture is the syntax reference; you typically need both. Internal references: [`internal\u002Fspec\u002Fdoc.go`](..\u002Finternal\u002Fspec\u002Fdoc.go) (parser + validator), [`internal\u002Fspecbuild\u002Fdoc.go`](..\u002Finternal\u002Fspecbuild\u002Fdoc.go) (entity resolution), [`internal\u002Ftemplates\u002Fdoc.go`](..\u002Finternal\u002Ftemplates\u002Fdoc.go) (template registry).\n\n## Common tasks\n\n### Generate a geth DB\n\n```bash\ngo run . --db=\u002Ftmp\u002Fsa-geth\u002Fgeth\u002Fchaindata --client=geth --target-size=100MB\n```\n\nAuto-fill emits mainnet-shaped state (20 % account-trie \u002F 10 % bytecode \u002F 70 % contract storage) up to the `--target-size` cap, with a deterministic seed. Output is a Pebble database geth can boot with `--db.engine=pebble`. The `\u002Fgeth\u002Fchaindata` suffix is mandatory — geth appends it to `--datadir`.\n\nSee [`RUNBOOK.md#geth`](RUNBOOK.md#geth) for the boot command, and [`client\u002Fgeth\u002Fdoc.go`](..\u002Fclient\u002Fgeth\u002Fdoc.go) for the on-disk layout and writer details.\n\n### Generate a DB for a specific client\n\n```bash\ngo run . --db=\u002Ftmp\u002Fsa-reth --client=reth --target-size=100MB        # MDBX + RocksDB + static files\ngo run . --db=\u002Ftmp\u002Fsa-besu --client=besu --target-size=100MB        # single RocksDB, 8 Bonsai CFs\ngo run . --db=\u002Ftmp\u002Fsa-neth --client=nethermind --target-size=100MB  # 7 RocksDB + flat column DB\ngo run . --db=\u002Ftmp\u002Fsa-ethrex --client=ethrex --target-size=100MB   # single RocksDB, 20 CFs\ngo run . --db=\u002Ftmp\u002Fsa-erigon --client=erigon --target-size=100MB   # Erigon v3 flat .kv snapshots + minimal MDBX\n```\n\n`besu`, `nethermind`, `reth`, `ethrex`, and `erigon` require cgo (RocksDB \u002F MDBX bindings). On macOS, build via Docker — the repo ships per-client Dockerfiles. The per-client on-disk layout and pinned upstream version live in [`client\u002Freth\u002Fdoc.go`](..\u002Fclient\u002Freth\u002Fdoc.go), [`client\u002Fbesu\u002Fdoc.go`](..\u002Fclient\u002Fbesu\u002Fdoc.go), [`client\u002Fnethermind\u002Fdoc.go`](..\u002Fclient\u002Fnethermind\u002Fdoc.go), [`client\u002Fethrex\u002Fdoc.go`](..\u002Fclient\u002Fethrex\u002Fdoc.go), [`client\u002Ferigon\u002Fdoc.go`](..\u002Fclient\u002Ferigon\u002Fdoc.go).\n\n### Boot a generated DB on a client\n\nRecipes (state-actor invocation + docker boot command + verification) live in [`RUNBOOK.md`](RUNBOOK.md), one section per client.\n\n### Verify a generated DB\n\n**Recommended**: run the per-client end-to-end suite. The Go oracle exercises `CheckChainID`, `CheckCanonicalSyscontracts`, `CheckChainAdvanced`, `CheckBeaconRootsRingBuffer`, and `CheckInjections` (see [`internal\u002Fe2e_testing\u002F`](..\u002Finternal\u002Fe2e_testing\u002F)):\n\n```bash\ngo test .\u002Fclient\u002Fgeth\u002F...        # or .\u002Fclient\u002Freth\u002F... .\u002Fclient\u002Fbesu\u002F... .\u002Fclient\u002Fnethermind\u002F...\n```\n\n**Manual**: boot the client per [`RUNBOOK.md`](RUNBOOK.md), then:\n\n```bash\ncast chain-id --rpc-url http:\u002F\u002Flocalhost:8545     # → 0x539 (1337)\ncast balance 0x\u003Ca-known-spec-address> --rpc-url ... # → the spec's balance\ncast code    0x\u003Ca-known-spec-contract> --rpc-url ... # → the spec's bytecode\n```\n\n### Reproduce a run from its manifest\n\nEvery run drops a `state-actor-manifest.json` at the datadir root (two levels up from `--db` for geth; the `--db` dir itself for the other clients) recording everything needed to reproduce it: the resolved flags — note the **resolved** seed (`--seed=0` expands to a wall-clock seed) and the **resolved** fork (empty `--fork` resolves to the client's max) — the build version + git revision, the run's state root, and, when `--spec` is used, a content-addressed `state-actor-spec-\u003Csha256>.yaml` sidecar written alongside it.\n\nRe-run it into a fresh directory with the `reproduce` subcommand:\n\n```bash\ngo run . reproduce --manifest \u002Ftmp\u002Fsa-geth\u002Fstate-actor-manifest.json --db \u002Ftmp\u002Fsa-geth-repro\u002Fgeth\u002Fchaindata\n```\n\nIt replays the manifest's resolved flags (reading any spec from the sidecar — whose sha256 is verified first — not the original path), regenerates into `--db` (which must be a **fresh, empty or nonexistent** directory, distinct from the original), and verifies the new state root against the recorded one — exiting non-zero on mismatch. This works even for runs created with `--seed=0`, since the manifest captured the concrete seed. The reproduced datadir gets its own manifest too, with a `reproduced_from` field pointing back at the source manifest.\n\n### Reproduce a CI failure locally\n\nCI loads `examples\u002Ffull-matrix-spec-feature.yaml` on top of `--seed=42 --target-size=100MB` (mirrored across all five `TestE2ESuite` constants). The auto-fill (mainnet-shaped 20 \u002F 10 \u002F 70 split) emits synthetic state to fill the headroom between the spec's projected cost and `--target-size` — the spec entities are written first, the auto-fill fills the gap. Re-run:\n\n```bash\ngo test -run TestE2ESuite .\u002Fclient\u002F\u003Cclient>\u002F... -v\n```\n\n### Diagnose \"wrong state root\"\n\nThe cross-client genesis-root invariant says: same `--seed`, same spec, same client-policy → identical state root across all six MPT clients. If it diverges, see [`ARCHITECTURE.md#cross-client-determinism`](ARCHITECTURE.md#cross-client-determinism) for the full check-list (per-client calibration in [`internal\u002Fsizecal\u002Fdoc.go`](..\u002Finternal\u002Fsizecal\u002Fdoc.go); canonical syscontract preamble; CI keystone job).\n\n## Constraints & gotchas\n\n- **Besu \u002F reth \u002F nethermind \u002F ethrex \u002F erigon require Docker** for the writer side (cgo dependencies; no native build on macOS). Only geth has a pure-Go writer.\n- **`--seed=0` is a footgun**: `main.go` rewrites it to `time.Now().UnixNano()`, i.e. randomises. For determinism use any non-zero seed. Bench convention is `--seed=42`.\n- **`--target-size` is required when `--spec` is not set**: drives the mainnet-shaped auto-fill (20 % account-trie \u002F 10 % bytecode \u002F 70 % storage) over the whole budget. With `--spec`, spec entities count first; the auto-fill fills the headroom on top. If the spec alone exceeds the budget, `internal\u002Fspecbuild` truncates the entity list to the longest prefix that fits and emits a `--target-size … truncated spec at entity[N]` warning to stderr; no auto-fill runs in that case.\n- **`--archive` is geth\u002Freth only**: rejected for besu, nethermind, and ethrex; accepted but a no-op for erigon.\n- **`--binary-trie` is geth-only** (EIP-7864).\n- **When using `--spec` alone, omit `--target-size`** — that way no auto-fill runs on top and random EOAs can't collide with spec-derived addresses. Set both only when you want the auto-fill to pad the headroom.\n- **Nethermind boot needs a JSON `boot.cfg`** pointing at the chainspec + datadir (see `client\u002Fnethermind\u002Fe2e_test.go`'s `nethermindE2EConfigTemplate`). The other clients accept boot flags directly.\n\n## Testing\n\n```bash\ngo test .\u002F...                          # full suite\ngo test -run TestE2ESuite .\u002Fclient\u002F... # per-client end-to-end\ngo test -short .\u002F...                   # skip the e2e suites\n```\n\nCI matrix lives in `.github\u002Fworkflows\u002Fci.yml`.\n\n## When asked to extend state-actor\n\nThe entry points cluster by the kind of extension:\n\n| Extension | Read first | Pattern |\n|---|---|---|\n| New spec template | [`internal\u002Ftemplates\u002Fdoc.go`](..\u002Finternal\u002Ftemplates\u002Fdoc.go) | Implement `Template` in a new file in `internal\u002Ftemplates\u002F`; `Register(yourTemplate)` in `init()`; add a section to [`SPEC.md`](SPEC.md); add a covering entity to [`examples\u002Ffull-matrix-spec-feature.yaml`](..\u002Fexamples\u002Ffull-matrix-spec-feature.yaml) so CI exercises it. Mirror `erc20.go`'s shape. |\n| Change how spec entities resolve | [`internal\u002Fspecbuild\u002Fdoc.go`](..\u002Finternal\u002Fspecbuild\u002Fdoc.go) | This is the seam between the YAML schema (parsed by `internal\u002Fspec`) and the writer-facing `[]PreAllocEntity` slice. Address modes live in `derive.go`. |\n| Touch the YAML schema | [`internal\u002Fspec\u002Fdoc.go`](..\u002Finternal\u002Fspec\u002Fdoc.go) | Pure data + parse + schema-time validation. Keep import-cycle-free with `internal\u002Ftemplates`. |\n| Touch sizing \u002F calibration | [`internal\u002Fsizecal\u002Fdoc.go`](..\u002Finternal\u002Fsizecal\u002Fdoc.go) | One global `bytesPerSlot` constant per client; the CI invariance gate uses `NewFixed(64)` so test sizing can't mask a `Default()` drift. |\n| Add or modify a client target | [`client\u002Fgeth\u002Fdoc.go`](..\u002Fclient\u002Fgeth\u002Fdoc.go) (template), [`client\u002Freth\u002Fdoc.go`](..\u002Fclient\u002Freth\u002Fdoc.go), [`client\u002Fbesu\u002Fdoc.go`](..\u002Fclient\u002Fbesu\u002Fdoc.go), [`client\u002Fnethermind\u002Fdoc.go`](..\u002Fclient\u002Fnethermind\u002Fdoc.go), [`client\u002Fethrex\u002Fdoc.go`](..\u002Fclient\u002Fethrex\u002Fdoc.go), [`client\u002Ferigon\u002Fdoc.go`](..\u002Fclient\u002Ferigon\u002Fdoc.go) | Add `client\u002F\u003Cname>\u002F` with a `Run` (or `RunCgo`) entry point, a `doc.go` documenting on-disk layout + pinned upstream version, and a `TestE2ESuite` driving Docker boot + the shared `e2e.RunSuitePhases` oracle. Wire into `internal\u002Fclientpolicy\u002Fpolicy.go`. |\n| Work on the reth codec | [`internal\u002Freth\u002Fdoc.go`](..\u002Finternal\u002Freth\u002Fdoc.go) | Byte-exact mirror of reth's MDBX schema + Compact codec. Pinned to a specific reth commit; updating requires regenerating `testdata\u002Ffixtures.json`. |\n| Add a CLI flag | `main.go` + [`ARCHITECTURE.md`](ARCHITECTURE.md) | Declare in `main.go`, document in `--help` text, refresh the compact flag table in [`README.md`](..\u002FREADME.md). |\n",{"data":28,"body":29},{"name":4,"description":6},{"type":30,"children":31},"root",[32,41,61,98,105,110,201,207,328,341,346,373,378,558,563,755,762,1117,1123,1302,1360,1366,1372,1421,1456,1484,1490,1673,1763,1769,1784,1790,1848,1877,1897,2033,2039,2110,2123,2170,2204,2210,2244,2304,2310,2346,2352,2533,2539,2621,2632,2638,2643,3093],{"type":33,"tag":34,"props":35,"children":37},"element","h1",{"id":36},"skillmd-how-to-use-state-actor",[38],{"type":39,"value":40},"text","SKILL.md — how to use state-actor",{"type":33,"tag":42,"props":43,"children":44},"p",{},[45,47,59],{"type":39,"value":46},"This is the canonical \"how to use this lib\" doc for agents. The root ",{"type":33,"tag":48,"props":49,"children":51},"a",{"href":50},"..\u002FAGENTS.md",[52],{"type":33,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":39,"value":58},"AGENTS.md",{"type":39,"value":60}," is a pointer that points here.",{"type":33,"tag":42,"props":62,"children":63},{},[64,66,72,74,80,82,88,90,96],{"type":39,"value":65},"state-actor generates client-ready Ethereum databases for geth, reth, besu, nethermind, ethrex, and erigon without going through each client's ",{"type":33,"tag":53,"props":67,"children":69},{"className":68},[],[70],{"type":39,"value":71},"init",{"type":39,"value":73}," path. You point it at a ",{"type":33,"tag":53,"props":75,"children":77},{"className":76},[],[78],{"type":39,"value":79},"--db",{"type":39,"value":81}," path, choose a ",{"type":33,"tag":53,"props":83,"children":85},{"className":84},[],[86],{"type":39,"value":87},"--client",{"type":39,"value":89},", optionally pass a ",{"type":33,"tag":53,"props":91,"children":93},{"className":92},[],[94],{"type":39,"value":95},"--spec",{"type":39,"value":97}," declaring concrete entities, and it writes a database the client can boot against directly.",{"type":33,"tag":99,"props":100,"children":102},"h2",{"id":101},"read-these-first",[103],{"type":39,"value":104},"Read these first",{"type":33,"tag":42,"props":106,"children":107},{},[108],{"type":39,"value":109},"Read these in this order. The first one is load-bearing — read it before you read any prose about specs.",{"type":33,"tag":111,"props":112,"children":113},"ol",{},[114,151,173,187],{"type":33,"tag":115,"props":116,"children":117},"li",{},[118,128,130,141,143,149],{"type":33,"tag":48,"props":119,"children":121},{"href":120},"..\u002Fexamples\u002Ffull-matrix-spec-feature.yaml",[122],{"type":33,"tag":53,"props":123,"children":125},{"className":124},[],[126],{"type":39,"value":127},"examples\u002Ffull-matrix-spec-feature.yaml",{"type":39,"value":129}," — ",{"type":33,"tag":131,"props":132,"children":133},"strong",{},[134,136],{"type":39,"value":135},"the canonical syntax reference for ",{"type":33,"tag":53,"props":137,"children":139},{"className":138},[],[140],{"type":39,"value":95},{"type":39,"value":142},". CI-pinned, 29 entities, every feature. Read this file before reading any other doc about specs; see the ",{"type":33,"tag":48,"props":144,"children":146},{"href":145},"#canonical-spec-reference",[147],{"type":39,"value":148},"Canonical spec reference",{"type":39,"value":150}," section below for an intent → entity-# index.",{"type":33,"tag":115,"props":152,"children":153},{},[154,163,165,171],{"type":33,"tag":48,"props":155,"children":157},{"href":156},"SPEC.md",[158],{"type":33,"tag":53,"props":159,"children":161},{"className":160},[],[162],{"type":39,"value":156},{"type":39,"value":164}," — the schema reference (parser rules, validation errors, address-resolution algorithm, ",{"type":33,"tag":53,"props":166,"children":168},{"className":167},[],[169],{"type":39,"value":170},"approximate_size_bytes",{"type":39,"value":172}," semantics). Read alongside the fixture.",{"type":33,"tag":115,"props":174,"children":175},{},[176,185],{"type":33,"tag":48,"props":177,"children":179},{"href":178},"RUNBOOK.md",[180],{"type":33,"tag":53,"props":181,"children":183},{"className":182},[],[184],{"type":39,"value":178},{"type":39,"value":186}," — per-client boot recipes (geth \u002F reth \u002F besu \u002F nethermind \u002F ethrex \u002F erigon).",{"type":33,"tag":115,"props":188,"children":189},{},[190,199],{"type":33,"tag":48,"props":191,"children":193},{"href":192},"ARCHITECTURE.md",[194],{"type":33,"tag":53,"props":195,"children":197},{"className":196},[],[198],{"type":39,"value":192},{"type":39,"value":200}," — internal architecture; cross-client determinism; per-client writer differences.",{"type":33,"tag":99,"props":202,"children":204},{"id":203},"three-load-bearing-flags",[205],{"type":39,"value":206},"Three load-bearing flags",{"type":33,"tag":208,"props":209,"children":210},"table",{},[211,230],{"type":33,"tag":212,"props":213,"children":214},"thead",{},[215],{"type":33,"tag":216,"props":217,"children":218},"tr",{},[219,225],{"type":33,"tag":220,"props":221,"children":222},"th",{},[223],{"type":39,"value":224},"Flag",{"type":33,"tag":220,"props":226,"children":227},{},[228],{"type":39,"value":229},"What it controls",{"type":33,"tag":231,"props":232,"children":233},"tbody",{},[234,295,311],{"type":33,"tag":216,"props":235,"children":236},{},[237,246],{"type":33,"tag":238,"props":239,"children":240},"td",{},[241],{"type":33,"tag":53,"props":242,"children":244},{"className":243},[],[245],{"type":39,"value":87},{"type":33,"tag":238,"props":247,"children":248},{},[249,251,257,259,265,266,272,273,279,280,286,287,293],{"type":39,"value":250},"Which client format to write (",{"type":33,"tag":53,"props":252,"children":254},{"className":253},[],[255],{"type":39,"value":256},"geth",{"type":39,"value":258},", ",{"type":33,"tag":53,"props":260,"children":262},{"className":261},[],[263],{"type":39,"value":264},"reth",{"type":39,"value":258},{"type":33,"tag":53,"props":267,"children":269},{"className":268},[],[270],{"type":39,"value":271},"besu",{"type":39,"value":258},{"type":33,"tag":53,"props":274,"children":276},{"className":275},[],[277],{"type":39,"value":278},"nethermind",{"type":39,"value":258},{"type":33,"tag":53,"props":281,"children":283},{"className":282},[],[284],{"type":39,"value":285},"ethrex",{"type":39,"value":258},{"type":33,"tag":53,"props":288,"children":290},{"className":289},[],[291],{"type":39,"value":292},"erigon",{"type":39,"value":294},")",{"type":33,"tag":216,"props":296,"children":297},{},[298,306],{"type":33,"tag":238,"props":299,"children":300},{},[301],{"type":33,"tag":53,"props":302,"children":304},{"className":303},[],[305],{"type":39,"value":95},{"type":33,"tag":238,"props":307,"children":308},{},[309],{"type":39,"value":310},"Path to a YAML file declaring concrete entities (EOAs, contracts, ERC-20s, EIP-7702 delegations)",{"type":33,"tag":216,"props":312,"children":313},{},[314,323],{"type":33,"tag":238,"props":315,"children":316},{},[317],{"type":33,"tag":53,"props":318,"children":320},{"className":319},[],[321],{"type":39,"value":322},"--target-size",{"type":33,"tag":238,"props":324,"children":325},{},[326],{"type":39,"value":327},"Advisory budget that sizes the auto-fill of synthetic state. Not a hard on-disk cap — actual size may vary per client.",{"type":33,"tag":42,"props":329,"children":330},{},[331,333,339],{"type":39,"value":332},"Everything else has a sane default. Run ",{"type":33,"tag":53,"props":334,"children":336},{"className":335},[],[337],{"type":39,"value":338},"state-actor --help",{"type":39,"value":340}," for the full list (22 flags).",{"type":33,"tag":99,"props":342,"children":344},{"id":343},"canonical-spec-reference",[345],{"type":39,"value":148},{"type":33,"tag":42,"props":347,"children":348},{},[349,371],{"type":33,"tag":131,"props":350,"children":351},{},[352,354,359,361,369],{"type":39,"value":353},"The single source of truth for what a ",{"type":33,"tag":53,"props":355,"children":357},{"className":356},[],[358],{"type":39,"value":95},{"type":39,"value":360}," YAML can express is ",{"type":33,"tag":48,"props":362,"children":363},{"href":120},[364],{"type":33,"tag":53,"props":365,"children":367},{"className":366},[],[368],{"type":39,"value":127},{"type":39,"value":370},".",{"type":39,"value":372}," Read that file before reading anything else about specs. It is exhaustive (29 entities, every feature), self-documenting (six section banners + per-entity comments), and CI keeps it correct.",{"type":33,"tag":42,"props":374,"children":375},{},[376],{"type":39,"value":377},"The CI guarantees that hold this file as the canonical reference:",{"type":33,"tag":379,"props":380,"children":381},"ul",{},[382,413,451,533],{"type":33,"tag":115,"props":383,"children":384},{},[385,395,397,403,405,411],{"type":33,"tag":48,"props":386,"children":388},{"href":387},"..\u002Finternal\u002Fspecbuild\u002Ffull_matrix_test.go",[389],{"type":33,"tag":53,"props":390,"children":392},{"className":391},[],[393],{"type":39,"value":394},"internal\u002Fspecbuild\u002Ffull_matrix_test.go",{"type":39,"value":396}," (",{"type":33,"tag":53,"props":398,"children":400},{"className":399},[],[401],{"type":39,"value":402},"TestBuildFullMatrix",{"type":39,"value":404},") pins the entity count at 29 and asserts the cross-client ",{"type":33,"tag":53,"props":406,"children":408},{"className":407},[],[409],{"type":39,"value":410},"PreAlloc",{"type":39,"value":412}," count equality. The unit-level drift gate — byte-identity is enforced downstream by the cross-client-genesis-root aggregator job.",{"type":33,"tag":115,"props":414,"children":415},{},[416,426,427,433,435,441,443,449],{"type":33,"tag":48,"props":417,"children":419},{"href":418},"..\u002Finternal\u002Fe2e_testing\u002Fspec_setup.go",[420],{"type":33,"tag":53,"props":421,"children":423},{"className":422},[],[424],{"type":39,"value":425},"internal\u002Fe2e_testing\u002Fspec_setup.go",{"type":39,"value":396},{"type":33,"tag":53,"props":428,"children":430},{"className":429},[],[431],{"type":39,"value":432},"LoadCISpec",{"type":39,"value":434},") loads the fixture with ",{"type":33,"tag":53,"props":436,"children":438},{"className":437},[],[439],{"type":39,"value":440},"seed=0",{"type":39,"value":442}," + ",{"type":33,"tag":53,"props":444,"children":446},{"className":445},[],[447],{"type":39,"value":448},"sizecal.NewFixed(64)",{"type":39,"value":450}," so every client sees the same input.",{"type":33,"tag":115,"props":452,"children":453},{},[454,456,462,464,474,475,485,486,496,497,507,509,519,521,531],{"type":39,"value":455},"Per-client ",{"type":33,"tag":53,"props":457,"children":459},{"className":458},[],[460],{"type":39,"value":461},"TestE2ESuite",{"type":39,"value":463}," (in ",{"type":33,"tag":48,"props":465,"children":467},{"href":466},"..\u002Fclient\u002Fgeth\u002Fe2e_test.go",[468],{"type":33,"tag":53,"props":469,"children":471},{"className":470},[],[472],{"type":39,"value":473},"client\u002Fgeth\u002Fe2e_test.go",{"type":39,"value":258},{"type":33,"tag":48,"props":476,"children":478},{"href":477},"..\u002Fclient\u002Fbesu\u002Fe2e_test.go",[479],{"type":33,"tag":53,"props":480,"children":482},{"className":481},[],[483],{"type":39,"value":484},"client\u002Fbesu\u002Fe2e_test.go",{"type":39,"value":258},{"type":33,"tag":48,"props":487,"children":489},{"href":488},"..\u002Fclient\u002Fnethermind\u002Fe2e_test.go",[490],{"type":33,"tag":53,"props":491,"children":493},{"className":492},[],[494],{"type":39,"value":495},"client\u002Fnethermind\u002Fe2e_test.go",{"type":39,"value":258},{"type":33,"tag":48,"props":498,"children":500},{"href":499},"..\u002Fclient\u002Freth\u002Foracle_test.go",[501],{"type":33,"tag":53,"props":502,"children":504},{"className":503},[],[505],{"type":39,"value":506},"client\u002Freth\u002Foracle_test.go",{"type":39,"value":508}," for reth, ",{"type":33,"tag":48,"props":510,"children":512},{"href":511},"..\u002Fclient\u002Fethrex\u002Fe2e_test.go",[513],{"type":33,"tag":53,"props":514,"children":516},{"className":515},[],[517],{"type":39,"value":518},"client\u002Fethrex\u002Fe2e_test.go",{"type":39,"value":520}," for ethrex, and ",{"type":33,"tag":48,"props":522,"children":524},{"href":523},"..\u002Fclient\u002Ferigon\u002Fe2e_test.go",[525],{"type":33,"tag":53,"props":526,"children":528},{"className":527},[],[529],{"type":39,"value":530},"client\u002Ferigon\u002Fe2e_test.go",{"type":39,"value":532}," for erigon) boots a real client against state-actor's output, runs spamoor, and verifies every entity via the Go oracle.",{"type":33,"tag":115,"props":534,"children":535},{},[536,538,544,546,556],{"type":39,"value":537},"The ",{"type":33,"tag":53,"props":539,"children":541},{"className":540},[],[542],{"type":39,"value":543},"cross-client · genesis state-root invariant",{"type":39,"value":545}," aggregator job in ",{"type":33,"tag":48,"props":547,"children":549},{"href":548},"..\u002F.github\u002Fworkflows\u002Fci.yml",[550],{"type":33,"tag":53,"props":551,"children":553},{"className":552},[],[554],{"type":39,"value":555},".github\u002Fworkflows\u002Fci.yml",{"type":39,"value":557}," refuses to merge a PR whose four clients produce different genesis roots from this fixture.",{"type":33,"tag":42,"props":559,"children":560},{},[561],{"type":39,"value":562},"The fixture is organised into six labelled sections; each one pins a feature cluster:",{"type":33,"tag":208,"props":564,"children":565},{},[566,587],{"type":33,"tag":212,"props":567,"children":568},{},[569],{"type":33,"tag":216,"props":570,"children":571},{},[572,577,582],{"type":33,"tag":220,"props":573,"children":574},{},[575],{"type":39,"value":576},"Section banner (in the YAML)",{"type":33,"tag":220,"props":578,"children":579},{},[580],{"type":39,"value":581},"Entities",{"type":33,"tag":220,"props":583,"children":584},{},[585],{"type":39,"value":586},"Feature pinned",{"type":33,"tag":231,"props":588,"children":589},{},[590,612,634,670,705,733],{"type":33,"tag":216,"props":591,"children":592},{},[593,602,607],{"type":33,"tag":238,"props":594,"children":595},{},[596],{"type":33,"tag":53,"props":597,"children":599},{"className":598},[],[600],{"type":39,"value":601},"1. Spamoor sender",{"type":33,"tag":238,"props":603,"children":604},{},[605],{"type":39,"value":606},"1",{"type":33,"tag":238,"props":608,"children":609},{},[610],{"type":39,"value":611},"Anvil dev-account-0 EOA with high balance",{"type":33,"tag":216,"props":613,"children":614},{},[615,624,629],{"type":33,"tag":238,"props":616,"children":617},{},[618],{"type":33,"tag":53,"props":619,"children":621},{"className":620},[],[622],{"type":39,"value":623},"2-7. ERC-20 flavor coverage",{"type":33,"tag":238,"props":625,"children":626},{},[627],{"type":39,"value":628},"2-7",{"type":33,"tag":238,"props":630,"children":631},{},[632],{"type":39,"value":633},"All three address modes × bulk-fill × storage-bloat × nonce override × skeleton",{"type":33,"tag":216,"props":635,"children":636},{},[637,646,651],{"type":33,"tag":238,"props":638,"children":639},{},[640],{"type":33,"tag":53,"props":641,"children":643},{"className":642},[],[644],{"type":39,"value":645},"8-9. Explicit-owners + allowances coverage",{"type":33,"tag":238,"props":647,"children":648},{},[649],{"type":39,"value":650},"8-9",{"type":33,"tag":238,"props":652,"children":653},{},[654,656,662,664],{"type":39,"value":655},"Granular ",{"type":33,"tag":53,"props":657,"children":659},{"className":658},[],[660],{"type":39,"value":661},"owners",{"type":39,"value":663}," list, explicit + bulk ",{"type":33,"tag":53,"props":665,"children":667},{"className":666},[],[668],{"type":39,"value":669},"allowances",{"type":33,"tag":216,"props":671,"children":672},{},[673,682,687],{"type":33,"tag":238,"props":674,"children":675},{},[676],{"type":33,"tag":53,"props":677,"children":679},{"className":678},[],[680],{"type":39,"value":681},"10-12. Raw bytecode flavors",{"type":33,"tag":238,"props":683,"children":684},{},[685],{"type":39,"value":686},"10-12",{"type":33,"tag":238,"props":688,"children":689},{},[690,696,697,703],{"type":33,"tag":53,"props":691,"children":693},{"className":692},[],[694],{"type":39,"value":695},"kind: contract",{"type":39,"value":442},{"type":33,"tag":53,"props":698,"children":700},{"className":699},[],[701],{"type":39,"value":702},"code:",{"type":39,"value":704}," (no template); large code; storage synth",{"type":33,"tag":216,"props":706,"children":707},{},[708,717,722],{"type":33,"tag":238,"props":709,"children":710},{},[711],{"type":33,"tag":53,"props":712,"children":714},{"className":713},[],[715],{"type":39,"value":716},"13-15. EIP-7702 EOA flavors",{"type":33,"tag":238,"props":718,"children":719},{},[720],{"type":39,"value":721},"13-15",{"type":33,"tag":238,"props":723,"children":724},{},[725,731],{"type":33,"tag":53,"props":726,"children":728},{"className":727},[],[729],{"type":39,"value":730},"0xef0100\u003Cdelegate>",{"type":39,"value":732}," delegation marker × address modes × storage bloat",{"type":33,"tag":216,"props":734,"children":735},{},[736,745,750],{"type":33,"tag":238,"props":737,"children":738},{},[739],{"type":33,"tag":53,"props":740,"children":742},{"className":741},[],[743],{"type":39,"value":744},"16-22. Plain EOA flavors",{"type":33,"tag":238,"props":746,"children":747},{},[748],{"type":39,"value":749},"16-22",{"type":33,"tag":238,"props":751,"children":752},{},[753],{"type":39,"value":754},"All address modes, zero balance, hex-form balance, default-nonce, storage on EOA",{"type":33,"tag":756,"props":757,"children":759},"h3",{"id":758},"intent-entity-index",[760],{"type":39,"value":761},"Intent → entity-# index",{"type":33,"tag":208,"props":763,"children":764},{},[765,786],{"type":33,"tag":212,"props":766,"children":767},{},[768],{"type":33,"tag":216,"props":769,"children":770},{},[771,776,781],{"type":33,"tag":220,"props":772,"children":773},{},[774],{"type":39,"value":775},"To declare …",{"type":33,"tag":220,"props":777,"children":778},{},[779],{"type":39,"value":780},"Look at fixture entity #",{"type":33,"tag":220,"props":782,"children":783},{},[784],{"type":39,"value":785},"Section",{"type":33,"tag":231,"props":787,"children":788},{},[789,807,825,842,859,876,894,918,936,953,970,987,1012,1036,1065,1082,1100],{"type":33,"tag":216,"props":790,"children":791},{},[792,797,802],{"type":33,"tag":238,"props":793,"children":794},{},[795],{"type":39,"value":796},"Plain EOA at explicit address",{"type":33,"tag":238,"props":798,"children":799},{},[800],{"type":39,"value":801},"1, 16",{"type":33,"tag":238,"props":803,"children":804},{},[805],{"type":39,"value":806},"Spamoor sender \u002F Plain EOA flavors",{"type":33,"tag":216,"props":808,"children":809},{},[810,815,820],{"type":33,"tag":238,"props":811,"children":812},{},[813],{"type":39,"value":814},"Plain EOA, name-derived address",{"type":33,"tag":238,"props":816,"children":817},{},[818],{"type":39,"value":819},"17",{"type":33,"tag":238,"props":821,"children":822},{},[823],{"type":39,"value":824},"Plain EOA flavors",{"type":33,"tag":216,"props":826,"children":827},{},[828,833,838],{"type":33,"tag":238,"props":829,"children":830},{},[831],{"type":39,"value":832},"Plain EOA, position-derived address",{"type":33,"tag":238,"props":834,"children":835},{},[836],{"type":39,"value":837},"18",{"type":33,"tag":238,"props":839,"children":840},{},[841],{"type":39,"value":824},{"type":33,"tag":216,"props":843,"children":844},{},[845,850,855],{"type":33,"tag":238,"props":846,"children":847},{},[848],{"type":39,"value":849},"Zero-balance or hex-form balance EOA",{"type":33,"tag":238,"props":851,"children":852},{},[853],{"type":39,"value":854},"20, 21",{"type":33,"tag":238,"props":856,"children":857},{},[858],{"type":39,"value":824},{"type":33,"tag":216,"props":860,"children":861},{},[862,867,872],{"type":33,"tag":238,"props":863,"children":864},{},[865],{"type":39,"value":866},"Plain EOA with synthesized storage",{"type":33,"tag":238,"props":868,"children":869},{},[870],{"type":39,"value":871},"19",{"type":33,"tag":238,"props":873,"children":874},{},[875],{"type":39,"value":824},{"type":33,"tag":216,"props":877,"children":878},{},[879,884,889],{"type":33,"tag":238,"props":880,"children":881},{},[882],{"type":39,"value":883},"EIP-7702 delegating EOA",{"type":33,"tag":238,"props":885,"children":886},{},[887],{"type":39,"value":888},"13, 14, 15",{"type":33,"tag":238,"props":890,"children":891},{},[892],{"type":39,"value":893},"EIP-7702 EOA flavors",{"type":33,"tag":216,"props":895,"children":896},{},[897,902,914],{"type":33,"tag":238,"props":898,"children":899},{},[900],{"type":39,"value":901},"EIP-7702 EOA + storage bloat",{"type":33,"tag":238,"props":903,"children":904},{},[905,907,913],{"type":39,"value":906},"14 (",{"type":33,"tag":53,"props":908,"children":910},{"className":909},[],[911],{"type":39,"value":912},"bloated-validator",{"type":39,"value":294},{"type":33,"tag":238,"props":915,"children":916},{},[917],{"type":39,"value":893},{"type":33,"tag":216,"props":919,"children":920},{},[921,926,931],{"type":33,"tag":238,"props":922,"children":923},{},[924],{"type":39,"value":925},"ERC-20 at explicit address with bulk fill",{"type":33,"tag":238,"props":927,"children":928},{},[929],{"type":39,"value":930},"2",{"type":33,"tag":238,"props":932,"children":933},{},[934],{"type":39,"value":935},"ERC-20 flavor coverage",{"type":33,"tag":216,"props":937,"children":938},{},[939,944,949],{"type":33,"tag":238,"props":940,"children":941},{},[942],{"type":39,"value":943},"ERC-20 name-derived",{"type":33,"tag":238,"props":945,"children":946},{},[947],{"type":39,"value":948},"3",{"type":33,"tag":238,"props":950,"children":951},{},[952],{"type":39,"value":935},{"type":33,"tag":216,"props":954,"children":955},{},[956,961,966],{"type":33,"tag":238,"props":957,"children":958},{},[959],{"type":39,"value":960},"ERC-20 position-derived",{"type":33,"tag":238,"props":962,"children":963},{},[964],{"type":39,"value":965},"4",{"type":33,"tag":238,"props":967,"children":968},{},[969],{"type":39,"value":935},{"type":33,"tag":216,"props":971,"children":972},{},[973,978,983],{"type":33,"tag":238,"props":974,"children":975},{},[976],{"type":39,"value":977},"ERC-20 skeleton (no holders)",{"type":33,"tag":238,"props":979,"children":980},{},[981],{"type":39,"value":982},"5",{"type":33,"tag":238,"props":984,"children":985},{},[986],{"type":39,"value":935},{"type":33,"tag":216,"props":988,"children":989},{},[990,1003,1008],{"type":33,"tag":238,"props":991,"children":992},{},[993,995,1001],{"type":39,"value":994},"ERC-20 with explicit ",{"type":33,"tag":53,"props":996,"children":998},{"className":997},[],[999],{"type":39,"value":1000},"nonce",{"type":39,"value":1002}," override",{"type":33,"tag":238,"props":1004,"children":1005},{},[1006],{"type":39,"value":1007},"6",{"type":33,"tag":238,"props":1009,"children":1010},{},[1011],{"type":39,"value":935},{"type":33,"tag":216,"props":1013,"children":1014},{},[1015,1027,1032],{"type":33,"tag":238,"props":1016,"children":1017},{},[1018,1020,1025],{"type":39,"value":1019},"ERC-20 with ",{"type":33,"tag":53,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":39,"value":170},{"type":39,"value":1026}," (template + bloat)",{"type":33,"tag":238,"props":1028,"children":1029},{},[1030],{"type":39,"value":1031},"7",{"type":33,"tag":238,"props":1033,"children":1034},{},[1035],{"type":39,"value":935},{"type":33,"tag":216,"props":1037,"children":1038},{},[1039,1055,1060],{"type":33,"tag":238,"props":1040,"children":1041},{},[1042,1043,1048,1050],{"type":39,"value":994},{"type":33,"tag":53,"props":1044,"children":1046},{"className":1045},[],[1047],{"type":39,"value":661},{"type":39,"value":1049}," and ",{"type":33,"tag":53,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":39,"value":669},{"type":33,"tag":238,"props":1056,"children":1057},{},[1058],{"type":39,"value":1059},"8",{"type":33,"tag":238,"props":1061,"children":1062},{},[1063],{"type":39,"value":1064},"Explicit-owners + allowances",{"type":33,"tag":216,"props":1066,"children":1067},{},[1068,1073,1078],{"type":33,"tag":238,"props":1069,"children":1070},{},[1071],{"type":39,"value":1072},"ERC-20 explicit + bulk combined",{"type":33,"tag":238,"props":1074,"children":1075},{},[1076],{"type":39,"value":1077},"9",{"type":33,"tag":238,"props":1079,"children":1080},{},[1081],{"type":39,"value":1064},{"type":33,"tag":216,"props":1083,"children":1084},{},[1085,1090,1095],{"type":33,"tag":238,"props":1086,"children":1087},{},[1088],{"type":39,"value":1089},"Raw bytecode contract",{"type":33,"tag":238,"props":1091,"children":1092},{},[1093],{"type":39,"value":1094},"10, 11, 12",{"type":33,"tag":238,"props":1096,"children":1097},{},[1098],{"type":39,"value":1099},"Raw bytecode flavors",{"type":33,"tag":216,"props":1101,"children":1102},{},[1103,1108,1113],{"type":33,"tag":238,"props":1104,"children":1105},{},[1106],{"type":39,"value":1107},"Plain EOA with omitted-nonce default (0)",{"type":33,"tag":238,"props":1109,"children":1110},{},[1111],{"type":39,"value":1112},"22",{"type":33,"tag":238,"props":1114,"children":1115},{},[1116],{"type":39,"value":824},{"type":33,"tag":756,"props":1118,"children":1120},{"id":1119},"how-to-adapt-the-fixture-to-a-new-spec",[1121],{"type":39,"value":1122},"How to adapt the fixture to a new spec",{"type":33,"tag":111,"props":1124,"children":1125},{},[1126,1145,1155,1200,1239,1268],{"type":33,"tag":115,"props":1127,"children":1128},{},[1129,1134,1136,1144],{"type":33,"tag":131,"props":1130,"children":1131},{},[1132],{"type":39,"value":1133},"Find the entity that matches your intent",{"type":39,"value":1135}," using the index above; jump to that entity in ",{"type":33,"tag":48,"props":1137,"children":1138},{"href":120},[1139],{"type":33,"tag":53,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":39,"value":127},{"type":39,"value":370},{"type":33,"tag":115,"props":1146,"children":1147},{},[1148,1153],{"type":33,"tag":131,"props":1149,"children":1150},{},[1151],{"type":39,"value":1152},"Copy the entity block",{"type":39,"value":1154}," into your new YAML.",{"type":33,"tag":115,"props":1156,"children":1157},{},[1158,1163,1165,1170,1172,1182,1184,1190,1192,1198],{"type":33,"tag":131,"props":1159,"children":1160},{},[1161],{"type":39,"value":1162},"Edit the load-bearing fields",{"type":39,"value":1164}," for your case — addresses, balances, template parameters, ",{"type":33,"tag":53,"props":1166,"children":1168},{"className":1167},[],[1169],{"type":39,"value":170},{"type":39,"value":1171},". The field-by-field cheatsheet in ",{"type":33,"tag":48,"props":1173,"children":1175},{"href":1174},"..\u002Fexamples\u002FREADME.md#field-by-field-cheatsheet",[1176],{"type":33,"tag":53,"props":1177,"children":1179},{"className":1178},[],[1180],{"type":39,"value":1181},"examples\u002FREADME.md",{"type":39,"value":1183}," lists exactly which fields control what and what the constraints are (e.g. ",{"type":33,"tag":53,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":39,"value":1189},"decimals",{"type":39,"value":1191}," must be 18 for the ",{"type":33,"tag":53,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":39,"value":1197},"erc20",{"type":39,"value":1199}," template).",{"type":33,"tag":115,"props":1201,"children":1202},{},[1203,1208,1210,1216,1218,1224,1226,1237],{"type":33,"tag":131,"props":1204,"children":1205},{},[1206],{"type":39,"value":1207},"Address mode",{"type":39,"value":1209},": explicit (",{"type":33,"tag":53,"props":1211,"children":1213},{"className":1212},[],[1214],{"type":39,"value":1215},"address:",{"type":39,"value":1217}," is set), name-derived (",{"type":33,"tag":53,"props":1219,"children":1221},{"className":1220},[],[1222],{"type":39,"value":1223},"name:",{"type":39,"value":1225}," only), or position-derived (neither). The mode determines stability of the resulting address; see ",{"type":33,"tag":48,"props":1227,"children":1229},{"href":1228},"SPEC.md#address-resolution-three-deterministic-modes",[1230,1235],{"type":33,"tag":53,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":39,"value":156},{"type":39,"value":1236}," § Address resolution",{"type":39,"value":1238}," for the algorithm.",{"type":33,"tag":115,"props":1240,"children":1241},{},[1242,1252,1254,1259,1261,1266],{"type":33,"tag":131,"props":1243,"children":1244},{},[1245,1247],{"type":39,"value":1246},"Omit ",{"type":33,"tag":53,"props":1248,"children":1250},{"className":1249},[],[1251],{"type":39,"value":322},{"type":39,"value":1253}," when running ",{"type":33,"tag":53,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":39,"value":95},{"type":39,"value":1260}," alone — that way no auto-fill runs on top, eliminating the collision risk between random EOAs and spec-derived addresses. Set ",{"type":33,"tag":53,"props":1262,"children":1264},{"className":1263},[],[1265],{"type":39,"value":322},{"type":39,"value":1267}," only when you intentionally want auto-fill to pad the headroom.",{"type":33,"tag":115,"props":1269,"children":1270},{},[1271,1276,1278,1284,1286,1292,1294,1300],{"type":33,"tag":131,"props":1272,"children":1273},{},[1274],{"type":39,"value":1275},"Verify the entities landed",{"type":39,"value":1277}," at the addresses you expect: ",{"type":33,"tag":53,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":39,"value":1283},"cast code 0x\u003Cderived-address>",{"type":39,"value":1285}," returns the bytecode (contracts) or ",{"type":33,"tag":53,"props":1287,"children":1289},{"className":1288},[],[1290],{"type":39,"value":1291},"0x",{"type":39,"value":1293}," plus the delegation marker (7702 EOAs); ",{"type":33,"tag":53,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":39,"value":1299},"cast balance 0x\u003Caddress>",{"type":39,"value":1301}," returns the spec's balance.",{"type":33,"tag":42,"props":1303,"children":1304},{},[1305,1307,1312,1314,1322,1324,1334,1336,1346,1348,1358],{"type":39,"value":1306},"For the schema-level details the fixture's per-entity comments don't cover — parser rules, validation errors, the address-derivation algorithm, ",{"type":33,"tag":53,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":39,"value":170},{"type":39,"value":1313}," resolution semantics — read ",{"type":33,"tag":48,"props":1315,"children":1316},{"href":156},[1317],{"type":33,"tag":53,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":39,"value":156},{"type":39,"value":1323},". It's the schema reference; the fixture is the syntax reference; you typically need both. Internal references: ",{"type":33,"tag":48,"props":1325,"children":1327},{"href":1326},"..\u002Finternal\u002Fspec\u002Fdoc.go",[1328],{"type":33,"tag":53,"props":1329,"children":1331},{"className":1330},[],[1332],{"type":39,"value":1333},"internal\u002Fspec\u002Fdoc.go",{"type":39,"value":1335}," (parser + validator), ",{"type":33,"tag":48,"props":1337,"children":1339},{"href":1338},"..\u002Finternal\u002Fspecbuild\u002Fdoc.go",[1340],{"type":33,"tag":53,"props":1341,"children":1343},{"className":1342},[],[1344],{"type":39,"value":1345},"internal\u002Fspecbuild\u002Fdoc.go",{"type":39,"value":1347}," (entity resolution), ",{"type":33,"tag":48,"props":1349,"children":1351},{"href":1350},"..\u002Finternal\u002Ftemplates\u002Fdoc.go",[1352],{"type":33,"tag":53,"props":1353,"children":1355},{"className":1354},[],[1356],{"type":39,"value":1357},"internal\u002Ftemplates\u002Fdoc.go",{"type":39,"value":1359}," (template registry).",{"type":33,"tag":99,"props":1361,"children":1363},{"id":1362},"common-tasks",[1364],{"type":39,"value":1365},"Common tasks",{"type":33,"tag":756,"props":1367,"children":1369},{"id":1368},"generate-a-geth-db",[1370],{"type":39,"value":1371},"Generate a geth DB",{"type":33,"tag":1373,"props":1374,"children":1379},"pre",{"className":1375,"code":1376,"language":1377,"meta":1378,"style":1378},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go run . --db=\u002Ftmp\u002Fsa-geth\u002Fgeth\u002Fchaindata --client=geth --target-size=100MB\n","bash","",[1380],{"type":33,"tag":53,"props":1381,"children":1382},{"__ignoreMap":1378},[1383],{"type":33,"tag":1384,"props":1385,"children":1388},"span",{"class":1386,"line":1387},"line",1,[1389,1395,1401,1406,1411,1416],{"type":33,"tag":1384,"props":1390,"children":1392},{"style":1391},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1393],{"type":39,"value":1394},"go",{"type":33,"tag":1384,"props":1396,"children":1398},{"style":1397},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1399],{"type":39,"value":1400}," run",{"type":33,"tag":1384,"props":1402,"children":1403},{"style":1397},[1404],{"type":39,"value":1405}," .",{"type":33,"tag":1384,"props":1407,"children":1408},{"style":1397},[1409],{"type":39,"value":1410}," --db=\u002Ftmp\u002Fsa-geth\u002Fgeth\u002Fchaindata",{"type":33,"tag":1384,"props":1412,"children":1413},{"style":1397},[1414],{"type":39,"value":1415}," --client=geth",{"type":33,"tag":1384,"props":1417,"children":1418},{"style":1397},[1419],{"type":39,"value":1420}," --target-size=100MB\n",{"type":33,"tag":42,"props":1422,"children":1423},{},[1424,1426,1431,1433,1439,1441,1447,1449,1455],{"type":39,"value":1425},"Auto-fill emits mainnet-shaped state (20 % account-trie \u002F 10 % bytecode \u002F 70 % contract storage) up to the ",{"type":33,"tag":53,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":39,"value":322},{"type":39,"value":1432}," cap, with a deterministic seed. Output is a Pebble database geth can boot with ",{"type":33,"tag":53,"props":1434,"children":1436},{"className":1435},[],[1437],{"type":39,"value":1438},"--db.engine=pebble",{"type":39,"value":1440},". The ",{"type":33,"tag":53,"props":1442,"children":1444},{"className":1443},[],[1445],{"type":39,"value":1446},"\u002Fgeth\u002Fchaindata",{"type":39,"value":1448}," suffix is mandatory — geth appends it to ",{"type":33,"tag":53,"props":1450,"children":1452},{"className":1451},[],[1453],{"type":39,"value":1454},"--datadir",{"type":39,"value":370},{"type":33,"tag":42,"props":1457,"children":1458},{},[1459,1461,1470,1472,1482],{"type":39,"value":1460},"See ",{"type":33,"tag":48,"props":1462,"children":1464},{"href":1463},"RUNBOOK.md#geth",[1465],{"type":33,"tag":53,"props":1466,"children":1468},{"className":1467},[],[1469],{"type":39,"value":1463},{"type":39,"value":1471}," for the boot command, and ",{"type":33,"tag":48,"props":1473,"children":1475},{"href":1474},"..\u002Fclient\u002Fgeth\u002Fdoc.go",[1476],{"type":33,"tag":53,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":39,"value":1481},"client\u002Fgeth\u002Fdoc.go",{"type":39,"value":1483}," for the on-disk layout and writer details.",{"type":33,"tag":756,"props":1485,"children":1487},{"id":1486},"generate-a-db-for-a-specific-client",[1488],{"type":39,"value":1489},"Generate a DB for a specific client",{"type":33,"tag":1373,"props":1491,"children":1493},{"className":1375,"code":1492,"language":1377,"meta":1378,"style":1378},"go run . --db=\u002Ftmp\u002Fsa-reth --client=reth --target-size=100MB        # MDBX + RocksDB + static files\ngo run . --db=\u002Ftmp\u002Fsa-besu --client=besu --target-size=100MB        # single RocksDB, 8 Bonsai CFs\ngo run . --db=\u002Ftmp\u002Fsa-neth --client=nethermind --target-size=100MB  # 7 RocksDB + flat column DB\ngo run . --db=\u002Ftmp\u002Fsa-ethrex --client=ethrex --target-size=100MB   # single RocksDB, 20 CFs\ngo run . --db=\u002Ftmp\u002Fsa-erigon --client=erigon --target-size=100MB   # Erigon v3 flat .kv snapshots + minimal MDBX\n",[1494],{"type":33,"tag":53,"props":1495,"children":1496},{"__ignoreMap":1378},[1497,1533,1568,1603,1638],{"type":33,"tag":1384,"props":1498,"children":1499},{"class":1386,"line":1387},[1500,1504,1508,1512,1517,1522,1527],{"type":33,"tag":1384,"props":1501,"children":1502},{"style":1391},[1503],{"type":39,"value":1394},{"type":33,"tag":1384,"props":1505,"children":1506},{"style":1397},[1507],{"type":39,"value":1400},{"type":33,"tag":1384,"props":1509,"children":1510},{"style":1397},[1511],{"type":39,"value":1405},{"type":33,"tag":1384,"props":1513,"children":1514},{"style":1397},[1515],{"type":39,"value":1516}," --db=\u002Ftmp\u002Fsa-reth",{"type":33,"tag":1384,"props":1518,"children":1519},{"style":1397},[1520],{"type":39,"value":1521}," --client=reth",{"type":33,"tag":1384,"props":1523,"children":1524},{"style":1397},[1525],{"type":39,"value":1526}," --target-size=100MB",{"type":33,"tag":1384,"props":1528,"children":1530},{"style":1529},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1531],{"type":39,"value":1532},"        # MDBX + RocksDB + static files\n",{"type":33,"tag":1384,"props":1534,"children":1536},{"class":1386,"line":1535},2,[1537,1541,1545,1549,1554,1559,1563],{"type":33,"tag":1384,"props":1538,"children":1539},{"style":1391},[1540],{"type":39,"value":1394},{"type":33,"tag":1384,"props":1542,"children":1543},{"style":1397},[1544],{"type":39,"value":1400},{"type":33,"tag":1384,"props":1546,"children":1547},{"style":1397},[1548],{"type":39,"value":1405},{"type":33,"tag":1384,"props":1550,"children":1551},{"style":1397},[1552],{"type":39,"value":1553}," --db=\u002Ftmp\u002Fsa-besu",{"type":33,"tag":1384,"props":1555,"children":1556},{"style":1397},[1557],{"type":39,"value":1558}," --client=besu",{"type":33,"tag":1384,"props":1560,"children":1561},{"style":1397},[1562],{"type":39,"value":1526},{"type":33,"tag":1384,"props":1564,"children":1565},{"style":1529},[1566],{"type":39,"value":1567},"        # single RocksDB, 8 Bonsai CFs\n",{"type":33,"tag":1384,"props":1569,"children":1571},{"class":1386,"line":1570},3,[1572,1576,1580,1584,1589,1594,1598],{"type":33,"tag":1384,"props":1573,"children":1574},{"style":1391},[1575],{"type":39,"value":1394},{"type":33,"tag":1384,"props":1577,"children":1578},{"style":1397},[1579],{"type":39,"value":1400},{"type":33,"tag":1384,"props":1581,"children":1582},{"style":1397},[1583],{"type":39,"value":1405},{"type":33,"tag":1384,"props":1585,"children":1586},{"style":1397},[1587],{"type":39,"value":1588}," --db=\u002Ftmp\u002Fsa-neth",{"type":33,"tag":1384,"props":1590,"children":1591},{"style":1397},[1592],{"type":39,"value":1593}," --client=nethermind",{"type":33,"tag":1384,"props":1595,"children":1596},{"style":1397},[1597],{"type":39,"value":1526},{"type":33,"tag":1384,"props":1599,"children":1600},{"style":1529},[1601],{"type":39,"value":1602},"  # 7 RocksDB + flat column DB\n",{"type":33,"tag":1384,"props":1604,"children":1606},{"class":1386,"line":1605},4,[1607,1611,1615,1619,1624,1629,1633],{"type":33,"tag":1384,"props":1608,"children":1609},{"style":1391},[1610],{"type":39,"value":1394},{"type":33,"tag":1384,"props":1612,"children":1613},{"style":1397},[1614],{"type":39,"value":1400},{"type":33,"tag":1384,"props":1616,"children":1617},{"style":1397},[1618],{"type":39,"value":1405},{"type":33,"tag":1384,"props":1620,"children":1621},{"style":1397},[1622],{"type":39,"value":1623}," --db=\u002Ftmp\u002Fsa-ethrex",{"type":33,"tag":1384,"props":1625,"children":1626},{"style":1397},[1627],{"type":39,"value":1628}," --client=ethrex",{"type":33,"tag":1384,"props":1630,"children":1631},{"style":1397},[1632],{"type":39,"value":1526},{"type":33,"tag":1384,"props":1634,"children":1635},{"style":1529},[1636],{"type":39,"value":1637},"   # single RocksDB, 20 CFs\n",{"type":33,"tag":1384,"props":1639,"children":1641},{"class":1386,"line":1640},5,[1642,1646,1650,1654,1659,1664,1668],{"type":33,"tag":1384,"props":1643,"children":1644},{"style":1391},[1645],{"type":39,"value":1394},{"type":33,"tag":1384,"props":1647,"children":1648},{"style":1397},[1649],{"type":39,"value":1400},{"type":33,"tag":1384,"props":1651,"children":1652},{"style":1397},[1653],{"type":39,"value":1405},{"type":33,"tag":1384,"props":1655,"children":1656},{"style":1397},[1657],{"type":39,"value":1658}," --db=\u002Ftmp\u002Fsa-erigon",{"type":33,"tag":1384,"props":1660,"children":1661},{"style":1397},[1662],{"type":39,"value":1663}," --client=erigon",{"type":33,"tag":1384,"props":1665,"children":1666},{"style":1397},[1667],{"type":39,"value":1526},{"type":33,"tag":1384,"props":1669,"children":1670},{"style":1529},[1671],{"type":39,"value":1672},"   # Erigon v3 flat .kv snapshots + minimal MDBX\n",{"type":33,"tag":42,"props":1674,"children":1675},{},[1676,1681,1682,1687,1688,1693,1694,1699,1701,1706,1708,1718,1719,1729,1730,1740,1741,1751,1752,1762],{"type":33,"tag":53,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":39,"value":271},{"type":39,"value":258},{"type":33,"tag":53,"props":1683,"children":1685},{"className":1684},[],[1686],{"type":39,"value":278},{"type":39,"value":258},{"type":33,"tag":53,"props":1689,"children":1691},{"className":1690},[],[1692],{"type":39,"value":264},{"type":39,"value":258},{"type":33,"tag":53,"props":1695,"children":1697},{"className":1696},[],[1698],{"type":39,"value":285},{"type":39,"value":1700},", and ",{"type":33,"tag":53,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":39,"value":292},{"type":39,"value":1707}," require cgo (RocksDB \u002F MDBX bindings). On macOS, build via Docker — the repo ships per-client Dockerfiles. The per-client on-disk layout and pinned upstream version live in ",{"type":33,"tag":48,"props":1709,"children":1711},{"href":1710},"..\u002Fclient\u002Freth\u002Fdoc.go",[1712],{"type":33,"tag":53,"props":1713,"children":1715},{"className":1714},[],[1716],{"type":39,"value":1717},"client\u002Freth\u002Fdoc.go",{"type":39,"value":258},{"type":33,"tag":48,"props":1720,"children":1722},{"href":1721},"..\u002Fclient\u002Fbesu\u002Fdoc.go",[1723],{"type":33,"tag":53,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":39,"value":1728},"client\u002Fbesu\u002Fdoc.go",{"type":39,"value":258},{"type":33,"tag":48,"props":1731,"children":1733},{"href":1732},"..\u002Fclient\u002Fnethermind\u002Fdoc.go",[1734],{"type":33,"tag":53,"props":1735,"children":1737},{"className":1736},[],[1738],{"type":39,"value":1739},"client\u002Fnethermind\u002Fdoc.go",{"type":39,"value":258},{"type":33,"tag":48,"props":1742,"children":1744},{"href":1743},"..\u002Fclient\u002Fethrex\u002Fdoc.go",[1745],{"type":33,"tag":53,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":39,"value":1750},"client\u002Fethrex\u002Fdoc.go",{"type":39,"value":258},{"type":33,"tag":48,"props":1753,"children":1755},{"href":1754},"..\u002Fclient\u002Ferigon\u002Fdoc.go",[1756],{"type":33,"tag":53,"props":1757,"children":1759},{"className":1758},[],[1760],{"type":39,"value":1761},"client\u002Ferigon\u002Fdoc.go",{"type":39,"value":370},{"type":33,"tag":756,"props":1764,"children":1766},{"id":1765},"boot-a-generated-db-on-a-client",[1767],{"type":39,"value":1768},"Boot a generated DB on a client",{"type":33,"tag":42,"props":1770,"children":1771},{},[1772,1774,1782],{"type":39,"value":1773},"Recipes (state-actor invocation + docker boot command + verification) live in ",{"type":33,"tag":48,"props":1775,"children":1776},{"href":178},[1777],{"type":33,"tag":53,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":39,"value":178},{"type":39,"value":1783},", one section per client.",{"type":33,"tag":756,"props":1785,"children":1787},{"id":1786},"verify-a-generated-db",[1788],{"type":39,"value":1789},"Verify a generated DB",{"type":33,"tag":42,"props":1791,"children":1792},{},[1793,1798,1800,1806,1807,1813,1814,1820,1821,1827,1828,1834,1836,1846],{"type":33,"tag":131,"props":1794,"children":1795},{},[1796],{"type":39,"value":1797},"Recommended",{"type":39,"value":1799},": run the per-client end-to-end suite. The Go oracle exercises ",{"type":33,"tag":53,"props":1801,"children":1803},{"className":1802},[],[1804],{"type":39,"value":1805},"CheckChainID",{"type":39,"value":258},{"type":33,"tag":53,"props":1808,"children":1810},{"className":1809},[],[1811],{"type":39,"value":1812},"CheckCanonicalSyscontracts",{"type":39,"value":258},{"type":33,"tag":53,"props":1815,"children":1817},{"className":1816},[],[1818],{"type":39,"value":1819},"CheckChainAdvanced",{"type":39,"value":258},{"type":33,"tag":53,"props":1822,"children":1824},{"className":1823},[],[1825],{"type":39,"value":1826},"CheckBeaconRootsRingBuffer",{"type":39,"value":1700},{"type":33,"tag":53,"props":1829,"children":1831},{"className":1830},[],[1832],{"type":39,"value":1833},"CheckInjections",{"type":39,"value":1835}," (see ",{"type":33,"tag":48,"props":1837,"children":1839},{"href":1838},"..\u002Finternal\u002Fe2e_testing\u002F",[1840],{"type":33,"tag":53,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":39,"value":1845},"internal\u002Fe2e_testing\u002F",{"type":39,"value":1847},"):",{"type":33,"tag":1373,"props":1849,"children":1851},{"className":1375,"code":1850,"language":1377,"meta":1378,"style":1378},"go test .\u002Fclient\u002Fgeth\u002F...        # or .\u002Fclient\u002Freth\u002F... .\u002Fclient\u002Fbesu\u002F... .\u002Fclient\u002Fnethermind\u002F...\n",[1852],{"type":33,"tag":53,"props":1853,"children":1854},{"__ignoreMap":1378},[1855],{"type":33,"tag":1384,"props":1856,"children":1857},{"class":1386,"line":1387},[1858,1862,1867,1872],{"type":33,"tag":1384,"props":1859,"children":1860},{"style":1391},[1861],{"type":39,"value":1394},{"type":33,"tag":1384,"props":1863,"children":1864},{"style":1397},[1865],{"type":39,"value":1866}," test",{"type":33,"tag":1384,"props":1868,"children":1869},{"style":1397},[1870],{"type":39,"value":1871}," .\u002Fclient\u002Fgeth\u002F...",{"type":33,"tag":1384,"props":1873,"children":1874},{"style":1529},[1875],{"type":39,"value":1876},"        # or .\u002Fclient\u002Freth\u002F... .\u002Fclient\u002Fbesu\u002F... .\u002Fclient\u002Fnethermind\u002F...\n",{"type":33,"tag":42,"props":1878,"children":1879},{},[1880,1885,1887,1895],{"type":33,"tag":131,"props":1881,"children":1882},{},[1883],{"type":39,"value":1884},"Manual",{"type":39,"value":1886},": boot the client per ",{"type":33,"tag":48,"props":1888,"children":1889},{"href":178},[1890],{"type":33,"tag":53,"props":1891,"children":1893},{"className":1892},[],[1894],{"type":39,"value":178},{"type":39,"value":1896},", then:",{"type":33,"tag":1373,"props":1898,"children":1900},{"className":1375,"code":1899,"language":1377,"meta":1378,"style":1378},"cast chain-id --rpc-url http:\u002F\u002Flocalhost:8545     # → 0x539 (1337)\ncast balance 0x\u003Ca-known-spec-address> --rpc-url ... # → the spec's balance\ncast code    0x\u003Ca-known-spec-contract> --rpc-url ... # → the spec's bytecode\n",[1901],{"type":33,"tag":53,"props":1902,"children":1903},{"__ignoreMap":1378},[1904,1932,1985],{"type":33,"tag":1384,"props":1905,"children":1906},{"class":1386,"line":1387},[1907,1912,1917,1922,1927],{"type":33,"tag":1384,"props":1908,"children":1909},{"style":1391},[1910],{"type":39,"value":1911},"cast",{"type":33,"tag":1384,"props":1913,"children":1914},{"style":1397},[1915],{"type":39,"value":1916}," chain-id",{"type":33,"tag":1384,"props":1918,"children":1919},{"style":1397},[1920],{"type":39,"value":1921}," --rpc-url",{"type":33,"tag":1384,"props":1923,"children":1924},{"style":1397},[1925],{"type":39,"value":1926}," http:\u002F\u002Flocalhost:8545",{"type":33,"tag":1384,"props":1928,"children":1929},{"style":1529},[1930],{"type":39,"value":1931},"     # → 0x539 (1337)\n",{"type":33,"tag":1384,"props":1933,"children":1934},{"class":1386,"line":1535},[1935,1939,1944,1949,1955,1960,1966,1971,1975,1980],{"type":33,"tag":1384,"props":1936,"children":1937},{"style":1391},[1938],{"type":39,"value":1911},{"type":33,"tag":1384,"props":1940,"children":1941},{"style":1397},[1942],{"type":39,"value":1943}," balance",{"type":33,"tag":1384,"props":1945,"children":1946},{"style":1397},[1947],{"type":39,"value":1948}," 0x",{"type":33,"tag":1384,"props":1950,"children":1952},{"style":1951},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1953],{"type":39,"value":1954},"\u003C",{"type":33,"tag":1384,"props":1956,"children":1957},{"style":1397},[1958],{"type":39,"value":1959},"a-known-spec-addres",{"type":33,"tag":1384,"props":1961,"children":1963},{"style":1962},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1964],{"type":39,"value":1965},"s",{"type":33,"tag":1384,"props":1967,"children":1968},{"style":1951},[1969],{"type":39,"value":1970},">",{"type":33,"tag":1384,"props":1972,"children":1973},{"style":1397},[1974],{"type":39,"value":1921},{"type":33,"tag":1384,"props":1976,"children":1977},{"style":1397},[1978],{"type":39,"value":1979}," ...",{"type":33,"tag":1384,"props":1981,"children":1982},{"style":1529},[1983],{"type":39,"value":1984}," # → the spec's balance\n",{"type":33,"tag":1384,"props":1986,"children":1987},{"class":1386,"line":1570},[1988,1992,1997,2002,2006,2011,2016,2020,2024,2028],{"type":33,"tag":1384,"props":1989,"children":1990},{"style":1391},[1991],{"type":39,"value":1911},{"type":33,"tag":1384,"props":1993,"children":1994},{"style":1397},[1995],{"type":39,"value":1996}," code",{"type":33,"tag":1384,"props":1998,"children":1999},{"style":1397},[2000],{"type":39,"value":2001},"    0x",{"type":33,"tag":1384,"props":2003,"children":2004},{"style":1951},[2005],{"type":39,"value":1954},{"type":33,"tag":1384,"props":2007,"children":2008},{"style":1397},[2009],{"type":39,"value":2010},"a-known-spec-contrac",{"type":33,"tag":1384,"props":2012,"children":2013},{"style":1962},[2014],{"type":39,"value":2015},"t",{"type":33,"tag":1384,"props":2017,"children":2018},{"style":1951},[2019],{"type":39,"value":1970},{"type":33,"tag":1384,"props":2021,"children":2022},{"style":1397},[2023],{"type":39,"value":1921},{"type":33,"tag":1384,"props":2025,"children":2026},{"style":1397},[2027],{"type":39,"value":1979},{"type":33,"tag":1384,"props":2029,"children":2030},{"style":1529},[2031],{"type":39,"value":2032}," # → the spec's bytecode\n",{"type":33,"tag":756,"props":2034,"children":2036},{"id":2035},"reproduce-a-run-from-its-manifest",[2037],{"type":39,"value":2038},"Reproduce a run from its manifest",{"type":33,"tag":42,"props":2040,"children":2041},{},[2042,2044,2050,2052,2057,2059,2064,2066,2071,2073,2079,2081,2085,2087,2093,2095,2100,2102,2108],{"type":39,"value":2043},"Every run drops a ",{"type":33,"tag":53,"props":2045,"children":2047},{"className":2046},[],[2048],{"type":39,"value":2049},"state-actor-manifest.json",{"type":39,"value":2051}," at the datadir root (two levels up from ",{"type":33,"tag":53,"props":2053,"children":2055},{"className":2054},[],[2056],{"type":39,"value":79},{"type":39,"value":2058}," for geth; the ",{"type":33,"tag":53,"props":2060,"children":2062},{"className":2061},[],[2063],{"type":39,"value":79},{"type":39,"value":2065}," dir itself for the other clients) recording everything needed to reproduce it: the resolved flags — note the ",{"type":33,"tag":131,"props":2067,"children":2068},{},[2069],{"type":39,"value":2070},"resolved",{"type":39,"value":2072}," seed (",{"type":33,"tag":53,"props":2074,"children":2076},{"className":2075},[],[2077],{"type":39,"value":2078},"--seed=0",{"type":39,"value":2080}," expands to a wall-clock seed) and the ",{"type":33,"tag":131,"props":2082,"children":2083},{},[2084],{"type":39,"value":2070},{"type":39,"value":2086}," fork (empty ",{"type":33,"tag":53,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":39,"value":2092},"--fork",{"type":39,"value":2094}," resolves to the client's max) — the build version + git revision, the run's state root, and, when ",{"type":33,"tag":53,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":39,"value":95},{"type":39,"value":2101}," is used, a content-addressed ",{"type":33,"tag":53,"props":2103,"children":2105},{"className":2104},[],[2106],{"type":39,"value":2107},"state-actor-spec-\u003Csha256>.yaml",{"type":39,"value":2109}," sidecar written alongside it.",{"type":33,"tag":42,"props":2111,"children":2112},{},[2113,2115,2121],{"type":39,"value":2114},"Re-run it into a fresh directory with the ",{"type":33,"tag":53,"props":2116,"children":2118},{"className":2117},[],[2119],{"type":39,"value":2120},"reproduce",{"type":39,"value":2122}," subcommand:",{"type":33,"tag":1373,"props":2124,"children":2126},{"className":1375,"code":2125,"language":1377,"meta":1378,"style":1378},"go run . reproduce --manifest \u002Ftmp\u002Fsa-geth\u002Fstate-actor-manifest.json --db \u002Ftmp\u002Fsa-geth-repro\u002Fgeth\u002Fchaindata\n",[2127],{"type":33,"tag":53,"props":2128,"children":2129},{"__ignoreMap":1378},[2130],{"type":33,"tag":1384,"props":2131,"children":2132},{"class":1386,"line":1387},[2133,2137,2141,2145,2150,2155,2160,2165],{"type":33,"tag":1384,"props":2134,"children":2135},{"style":1391},[2136],{"type":39,"value":1394},{"type":33,"tag":1384,"props":2138,"children":2139},{"style":1397},[2140],{"type":39,"value":1400},{"type":33,"tag":1384,"props":2142,"children":2143},{"style":1397},[2144],{"type":39,"value":1405},{"type":33,"tag":1384,"props":2146,"children":2147},{"style":1397},[2148],{"type":39,"value":2149}," reproduce",{"type":33,"tag":1384,"props":2151,"children":2152},{"style":1397},[2153],{"type":39,"value":2154}," --manifest",{"type":33,"tag":1384,"props":2156,"children":2157},{"style":1397},[2158],{"type":39,"value":2159}," \u002Ftmp\u002Fsa-geth\u002Fstate-actor-manifest.json",{"type":33,"tag":1384,"props":2161,"children":2162},{"style":1397},[2163],{"type":39,"value":2164}," --db",{"type":33,"tag":1384,"props":2166,"children":2167},{"style":1397},[2168],{"type":39,"value":2169}," \u002Ftmp\u002Fsa-geth-repro\u002Fgeth\u002Fchaindata\n",{"type":33,"tag":42,"props":2171,"children":2172},{},[2173,2175,2180,2182,2187,2189,2194,2196,2202],{"type":39,"value":2174},"It replays the manifest's resolved flags (reading any spec from the sidecar — whose sha256 is verified first — not the original path), regenerates into ",{"type":33,"tag":53,"props":2176,"children":2178},{"className":2177},[],[2179],{"type":39,"value":79},{"type":39,"value":2181}," (which must be a ",{"type":33,"tag":131,"props":2183,"children":2184},{},[2185],{"type":39,"value":2186},"fresh, empty or nonexistent",{"type":39,"value":2188}," directory, distinct from the original), and verifies the new state root against the recorded one — exiting non-zero on mismatch. This works even for runs created with ",{"type":33,"tag":53,"props":2190,"children":2192},{"className":2191},[],[2193],{"type":39,"value":2078},{"type":39,"value":2195},", since the manifest captured the concrete seed. The reproduced datadir gets its own manifest too, with a ",{"type":33,"tag":53,"props":2197,"children":2199},{"className":2198},[],[2200],{"type":39,"value":2201},"reproduced_from",{"type":39,"value":2203}," field pointing back at the source manifest.",{"type":33,"tag":756,"props":2205,"children":2207},{"id":2206},"reproduce-a-ci-failure-locally",[2208],{"type":39,"value":2209},"Reproduce a CI failure locally",{"type":33,"tag":42,"props":2211,"children":2212},{},[2213,2215,2220,2222,2228,2230,2235,2237,2242],{"type":39,"value":2214},"CI loads ",{"type":33,"tag":53,"props":2216,"children":2218},{"className":2217},[],[2219],{"type":39,"value":127},{"type":39,"value":2221}," on top of ",{"type":33,"tag":53,"props":2223,"children":2225},{"className":2224},[],[2226],{"type":39,"value":2227},"--seed=42 --target-size=100MB",{"type":39,"value":2229}," (mirrored across all five ",{"type":33,"tag":53,"props":2231,"children":2233},{"className":2232},[],[2234],{"type":39,"value":461},{"type":39,"value":2236}," constants). The auto-fill (mainnet-shaped 20 \u002F 10 \u002F 70 split) emits synthetic state to fill the headroom between the spec's projected cost and ",{"type":33,"tag":53,"props":2238,"children":2240},{"className":2239},[],[2241],{"type":39,"value":322},{"type":39,"value":2243}," — the spec entities are written first, the auto-fill fills the gap. Re-run:",{"type":33,"tag":1373,"props":2245,"children":2247},{"className":1375,"code":2246,"language":1377,"meta":1378,"style":1378},"go test -run TestE2ESuite .\u002Fclient\u002F\u003Cclient>\u002F... -v\n",[2248],{"type":33,"tag":53,"props":2249,"children":2250},{"__ignoreMap":1378},[2251],{"type":33,"tag":1384,"props":2252,"children":2253},{"class":1386,"line":1387},[2254,2258,2262,2267,2272,2277,2281,2286,2290,2294,2299],{"type":33,"tag":1384,"props":2255,"children":2256},{"style":1391},[2257],{"type":39,"value":1394},{"type":33,"tag":1384,"props":2259,"children":2260},{"style":1397},[2261],{"type":39,"value":1866},{"type":33,"tag":1384,"props":2263,"children":2264},{"style":1397},[2265],{"type":39,"value":2266}," -run",{"type":33,"tag":1384,"props":2268,"children":2269},{"style":1397},[2270],{"type":39,"value":2271}," TestE2ESuite",{"type":33,"tag":1384,"props":2273,"children":2274},{"style":1397},[2275],{"type":39,"value":2276}," .\u002Fclient\u002F",{"type":33,"tag":1384,"props":2278,"children":2279},{"style":1951},[2280],{"type":39,"value":1954},{"type":33,"tag":1384,"props":2282,"children":2283},{"style":1397},[2284],{"type":39,"value":2285},"clien",{"type":33,"tag":1384,"props":2287,"children":2288},{"style":1962},[2289],{"type":39,"value":2015},{"type":33,"tag":1384,"props":2291,"children":2292},{"style":1951},[2293],{"type":39,"value":1970},{"type":33,"tag":1384,"props":2295,"children":2296},{"style":1397},[2297],{"type":39,"value":2298},"\u002F...",{"type":33,"tag":1384,"props":2300,"children":2301},{"style":1397},[2302],{"type":39,"value":2303}," -v\n",{"type":33,"tag":756,"props":2305,"children":2307},{"id":2306},"diagnose-wrong-state-root",[2308],{"type":39,"value":2309},"Diagnose \"wrong state root\"",{"type":33,"tag":42,"props":2311,"children":2312},{},[2313,2315,2321,2323,2332,2334,2344],{"type":39,"value":2314},"The cross-client genesis-root invariant says: same ",{"type":33,"tag":53,"props":2316,"children":2318},{"className":2317},[],[2319],{"type":39,"value":2320},"--seed",{"type":39,"value":2322},", same spec, same client-policy → identical state root across all six MPT clients. If it diverges, see ",{"type":33,"tag":48,"props":2324,"children":2326},{"href":2325},"ARCHITECTURE.md#cross-client-determinism",[2327],{"type":33,"tag":53,"props":2328,"children":2330},{"className":2329},[],[2331],{"type":39,"value":2325},{"type":39,"value":2333}," for the full check-list (per-client calibration in ",{"type":33,"tag":48,"props":2335,"children":2337},{"href":2336},"..\u002Finternal\u002Fsizecal\u002Fdoc.go",[2338],{"type":33,"tag":53,"props":2339,"children":2341},{"className":2340},[],[2342],{"type":39,"value":2343},"internal\u002Fsizecal\u002Fdoc.go",{"type":39,"value":2345},"; canonical syscontract preamble; CI keystone job).",{"type":33,"tag":99,"props":2347,"children":2349},{"id":2348},"constraints-gotchas",[2350],{"type":39,"value":2351},"Constraints & gotchas",{"type":33,"tag":379,"props":2353,"children":2354},{},[2355,2365,2403,2448,2464,2480,2502],{"type":33,"tag":115,"props":2356,"children":2357},{},[2358,2363],{"type":33,"tag":131,"props":2359,"children":2360},{},[2361],{"type":39,"value":2362},"Besu \u002F reth \u002F nethermind \u002F ethrex \u002F erigon require Docker",{"type":39,"value":2364}," for the writer side (cgo dependencies; no native build on macOS). Only geth has a pure-Go writer.",{"type":33,"tag":115,"props":2366,"children":2367},{},[2368,2378,2380,2386,2388,2394,2396,2402],{"type":33,"tag":131,"props":2369,"children":2370},{},[2371,2376],{"type":33,"tag":53,"props":2372,"children":2374},{"className":2373},[],[2375],{"type":39,"value":2078},{"type":39,"value":2377}," is a footgun",{"type":39,"value":2379},": ",{"type":33,"tag":53,"props":2381,"children":2383},{"className":2382},[],[2384],{"type":39,"value":2385},"main.go",{"type":39,"value":2387}," rewrites it to ",{"type":33,"tag":53,"props":2389,"children":2391},{"className":2390},[],[2392],{"type":39,"value":2393},"time.Now().UnixNano()",{"type":39,"value":2395},", i.e. randomises. For determinism use any non-zero seed. Bench convention is ",{"type":33,"tag":53,"props":2397,"children":2399},{"className":2398},[],[2400],{"type":39,"value":2401},"--seed=42",{"type":39,"value":370},{"type":33,"tag":115,"props":2404,"children":2405},{},[2406,2423,2425,2430,2432,2438,2440,2446],{"type":33,"tag":131,"props":2407,"children":2408},{},[2409,2414,2416,2421],{"type":33,"tag":53,"props":2410,"children":2412},{"className":2411},[],[2413],{"type":39,"value":322},{"type":39,"value":2415}," is required when ",{"type":33,"tag":53,"props":2417,"children":2419},{"className":2418},[],[2420],{"type":39,"value":95},{"type":39,"value":2422}," is not set",{"type":39,"value":2424},": drives the mainnet-shaped auto-fill (20 % account-trie \u002F 10 % bytecode \u002F 70 % storage) over the whole budget. With ",{"type":33,"tag":53,"props":2426,"children":2428},{"className":2427},[],[2429],{"type":39,"value":95},{"type":39,"value":2431},", spec entities count first; the auto-fill fills the headroom on top. If the spec alone exceeds the budget, ",{"type":33,"tag":53,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":39,"value":2437},"internal\u002Fspecbuild",{"type":39,"value":2439}," truncates the entity list to the longest prefix that fits and emits a ",{"type":33,"tag":53,"props":2441,"children":2443},{"className":2442},[],[2444],{"type":39,"value":2445},"--target-size … truncated spec at entity[N]",{"type":39,"value":2447}," warning to stderr; no auto-fill runs in that case.",{"type":33,"tag":115,"props":2449,"children":2450},{},[2451,2462],{"type":33,"tag":131,"props":2452,"children":2453},{},[2454,2460],{"type":33,"tag":53,"props":2455,"children":2457},{"className":2456},[],[2458],{"type":39,"value":2459},"--archive",{"type":39,"value":2461}," is geth\u002Freth only",{"type":39,"value":2463},": rejected for besu, nethermind, and ethrex; accepted but a no-op for erigon.",{"type":33,"tag":115,"props":2465,"children":2466},{},[2467,2478],{"type":33,"tag":131,"props":2468,"children":2469},{},[2470,2476],{"type":33,"tag":53,"props":2471,"children":2473},{"className":2472},[],[2474],{"type":39,"value":2475},"--binary-trie",{"type":39,"value":2477}," is geth-only",{"type":39,"value":2479}," (EIP-7864).",{"type":33,"tag":115,"props":2481,"children":2482},{},[2483,2500],{"type":33,"tag":131,"props":2484,"children":2485},{},[2486,2488,2493,2495],{"type":39,"value":2487},"When using ",{"type":33,"tag":53,"props":2489,"children":2491},{"className":2490},[],[2492],{"type":39,"value":95},{"type":39,"value":2494}," alone, omit ",{"type":33,"tag":53,"props":2496,"children":2498},{"className":2497},[],[2499],{"type":39,"value":322},{"type":39,"value":2501}," — that way no auto-fill runs on top and random EOAs can't collide with spec-derived addresses. Set both only when you want the auto-fill to pad the headroom.",{"type":33,"tag":115,"props":2503,"children":2504},{},[2505,2516,2518,2523,2525,2531],{"type":33,"tag":131,"props":2506,"children":2507},{},[2508,2510],{"type":39,"value":2509},"Nethermind boot needs a JSON ",{"type":33,"tag":53,"props":2511,"children":2513},{"className":2512},[],[2514],{"type":39,"value":2515},"boot.cfg",{"type":39,"value":2517}," pointing at the chainspec + datadir (see ",{"type":33,"tag":53,"props":2519,"children":2521},{"className":2520},[],[2522],{"type":39,"value":495},{"type":39,"value":2524},"'s ",{"type":33,"tag":53,"props":2526,"children":2528},{"className":2527},[],[2529],{"type":39,"value":2530},"nethermindE2EConfigTemplate",{"type":39,"value":2532},"). The other clients accept boot flags directly.",{"type":33,"tag":99,"props":2534,"children":2536},{"id":2535},"testing",[2537],{"type":39,"value":2538},"Testing",{"type":33,"tag":1373,"props":2540,"children":2542},{"className":1375,"code":2541,"language":1377,"meta":1378,"style":1378},"go test .\u002F...                          # full suite\ngo test -run TestE2ESuite .\u002Fclient\u002F... # per-client end-to-end\ngo test -short .\u002F...                   # skip the e2e suites\n",[2543],{"type":33,"tag":53,"props":2544,"children":2545},{"__ignoreMap":1378},[2546,2567,2596],{"type":33,"tag":1384,"props":2547,"children":2548},{"class":1386,"line":1387},[2549,2553,2557,2562],{"type":33,"tag":1384,"props":2550,"children":2551},{"style":1391},[2552],{"type":39,"value":1394},{"type":33,"tag":1384,"props":2554,"children":2555},{"style":1397},[2556],{"type":39,"value":1866},{"type":33,"tag":1384,"props":2558,"children":2559},{"style":1397},[2560],{"type":39,"value":2561}," .\u002F...",{"type":33,"tag":1384,"props":2563,"children":2564},{"style":1529},[2565],{"type":39,"value":2566},"                          # full suite\n",{"type":33,"tag":1384,"props":2568,"children":2569},{"class":1386,"line":1535},[2570,2574,2578,2582,2586,2591],{"type":33,"tag":1384,"props":2571,"children":2572},{"style":1391},[2573],{"type":39,"value":1394},{"type":33,"tag":1384,"props":2575,"children":2576},{"style":1397},[2577],{"type":39,"value":1866},{"type":33,"tag":1384,"props":2579,"children":2580},{"style":1397},[2581],{"type":39,"value":2266},{"type":33,"tag":1384,"props":2583,"children":2584},{"style":1397},[2585],{"type":39,"value":2271},{"type":33,"tag":1384,"props":2587,"children":2588},{"style":1397},[2589],{"type":39,"value":2590}," .\u002Fclient\u002F...",{"type":33,"tag":1384,"props":2592,"children":2593},{"style":1529},[2594],{"type":39,"value":2595}," # per-client end-to-end\n",{"type":33,"tag":1384,"props":2597,"children":2598},{"class":1386,"line":1570},[2599,2603,2607,2612,2616],{"type":33,"tag":1384,"props":2600,"children":2601},{"style":1391},[2602],{"type":39,"value":1394},{"type":33,"tag":1384,"props":2604,"children":2605},{"style":1397},[2606],{"type":39,"value":1866},{"type":33,"tag":1384,"props":2608,"children":2609},{"style":1397},[2610],{"type":39,"value":2611}," -short",{"type":33,"tag":1384,"props":2613,"children":2614},{"style":1397},[2615],{"type":39,"value":2561},{"type":33,"tag":1384,"props":2617,"children":2618},{"style":1529},[2619],{"type":39,"value":2620},"                   # skip the e2e suites\n",{"type":33,"tag":42,"props":2622,"children":2623},{},[2624,2626,2631],{"type":39,"value":2625},"CI matrix lives in ",{"type":33,"tag":53,"props":2627,"children":2629},{"className":2628},[],[2630],{"type":39,"value":555},{"type":39,"value":370},{"type":33,"tag":99,"props":2633,"children":2635},{"id":2634},"when-asked-to-extend-state-actor",[2636],{"type":39,"value":2637},"When asked to extend state-actor",{"type":33,"tag":42,"props":2639,"children":2640},{},[2641],{"type":39,"value":2642},"The entry points cluster by the kind of extension:",{"type":33,"tag":208,"props":2644,"children":2645},{},[2646,2667],{"type":33,"tag":212,"props":2647,"children":2648},{},[2649],{"type":33,"tag":216,"props":2650,"children":2651},{},[2652,2657,2662],{"type":33,"tag":220,"props":2653,"children":2654},{},[2655],{"type":39,"value":2656},"Extension",{"type":33,"tag":220,"props":2658,"children":2659},{},[2660],{"type":39,"value":2661},"Read first",{"type":33,"tag":220,"props":2663,"children":2664},{},[2665],{"type":39,"value":2666},"Pattern",{"type":33,"tag":231,"props":2668,"children":2669},{},[2670,2754,2801,2832,2880,3004,3037],{"type":33,"tag":216,"props":2671,"children":2672},{},[2673,2678,2689],{"type":33,"tag":238,"props":2674,"children":2675},{},[2676],{"type":39,"value":2677},"New spec template",{"type":33,"tag":238,"props":2679,"children":2680},{},[2681],{"type":33,"tag":48,"props":2682,"children":2683},{"href":1350},[2684],{"type":33,"tag":53,"props":2685,"children":2687},{"className":2686},[],[2688],{"type":39,"value":1357},{"type":33,"tag":238,"props":2690,"children":2691},{},[2692,2694,2700,2702,2708,2710,2716,2718,2724,2726,2734,2736,2744,2746,2752],{"type":39,"value":2693},"Implement ",{"type":33,"tag":53,"props":2695,"children":2697},{"className":2696},[],[2698],{"type":39,"value":2699},"Template",{"type":39,"value":2701}," in a new file in ",{"type":33,"tag":53,"props":2703,"children":2705},{"className":2704},[],[2706],{"type":39,"value":2707},"internal\u002Ftemplates\u002F",{"type":39,"value":2709},"; ",{"type":33,"tag":53,"props":2711,"children":2713},{"className":2712},[],[2714],{"type":39,"value":2715},"Register(yourTemplate)",{"type":39,"value":2717}," in ",{"type":33,"tag":53,"props":2719,"children":2721},{"className":2720},[],[2722],{"type":39,"value":2723},"init()",{"type":39,"value":2725},"; add a section to ",{"type":33,"tag":48,"props":2727,"children":2728},{"href":156},[2729],{"type":33,"tag":53,"props":2730,"children":2732},{"className":2731},[],[2733],{"type":39,"value":156},{"type":39,"value":2735},"; add a covering entity to ",{"type":33,"tag":48,"props":2737,"children":2738},{"href":120},[2739],{"type":33,"tag":53,"props":2740,"children":2742},{"className":2741},[],[2743],{"type":39,"value":127},{"type":39,"value":2745}," so CI exercises it. Mirror ",{"type":33,"tag":53,"props":2747,"children":2749},{"className":2748},[],[2750],{"type":39,"value":2751},"erc20.go",{"type":39,"value":2753},"'s shape.",{"type":33,"tag":216,"props":2755,"children":2756},{},[2757,2762,2773],{"type":33,"tag":238,"props":2758,"children":2759},{},[2760],{"type":39,"value":2761},"Change how spec entities resolve",{"type":33,"tag":238,"props":2763,"children":2764},{},[2765],{"type":33,"tag":48,"props":2766,"children":2767},{"href":1338},[2768],{"type":33,"tag":53,"props":2769,"children":2771},{"className":2770},[],[2772],{"type":39,"value":1345},{"type":33,"tag":238,"props":2774,"children":2775},{},[2776,2778,2784,2786,2792,2794,2800],{"type":39,"value":2777},"This is the seam between the YAML schema (parsed by ",{"type":33,"tag":53,"props":2779,"children":2781},{"className":2780},[],[2782],{"type":39,"value":2783},"internal\u002Fspec",{"type":39,"value":2785},") and the writer-facing ",{"type":33,"tag":53,"props":2787,"children":2789},{"className":2788},[],[2790],{"type":39,"value":2791},"[]PreAllocEntity",{"type":39,"value":2793}," slice. Address modes live in ",{"type":33,"tag":53,"props":2795,"children":2797},{"className":2796},[],[2798],{"type":39,"value":2799},"derive.go",{"type":39,"value":370},{"type":33,"tag":216,"props":2802,"children":2803},{},[2804,2809,2820],{"type":33,"tag":238,"props":2805,"children":2806},{},[2807],{"type":39,"value":2808},"Touch the YAML schema",{"type":33,"tag":238,"props":2810,"children":2811},{},[2812],{"type":33,"tag":48,"props":2813,"children":2814},{"href":1326},[2815],{"type":33,"tag":53,"props":2816,"children":2818},{"className":2817},[],[2819],{"type":39,"value":1333},{"type":33,"tag":238,"props":2821,"children":2822},{},[2823,2825,2831],{"type":39,"value":2824},"Pure data + parse + schema-time validation. Keep import-cycle-free with ",{"type":33,"tag":53,"props":2826,"children":2828},{"className":2827},[],[2829],{"type":39,"value":2830},"internal\u002Ftemplates",{"type":39,"value":370},{"type":33,"tag":216,"props":2833,"children":2834},{},[2835,2840,2851],{"type":33,"tag":238,"props":2836,"children":2837},{},[2838],{"type":39,"value":2839},"Touch sizing \u002F calibration",{"type":33,"tag":238,"props":2841,"children":2842},{},[2843],{"type":33,"tag":48,"props":2844,"children":2845},{"href":2336},[2846],{"type":33,"tag":53,"props":2847,"children":2849},{"className":2848},[],[2850],{"type":39,"value":2343},{"type":33,"tag":238,"props":2852,"children":2853},{},[2854,2856,2862,2864,2870,2872,2878],{"type":39,"value":2855},"One global ",{"type":33,"tag":53,"props":2857,"children":2859},{"className":2858},[],[2860],{"type":39,"value":2861},"bytesPerSlot",{"type":39,"value":2863}," constant per client; the CI invariance gate uses ",{"type":33,"tag":53,"props":2865,"children":2867},{"className":2866},[],[2868],{"type":39,"value":2869},"NewFixed(64)",{"type":39,"value":2871}," so test sizing can't mask a ",{"type":33,"tag":53,"props":2873,"children":2875},{"className":2874},[],[2876],{"type":39,"value":2877},"Default()",{"type":39,"value":2879}," drift.",{"type":33,"tag":216,"props":2881,"children":2882},{},[2883,2888,2945],{"type":33,"tag":238,"props":2884,"children":2885},{},[2886],{"type":39,"value":2887},"Add or modify a client target",{"type":33,"tag":238,"props":2889,"children":2890},{},[2891,2899,2901,2909,2910,2918,2919,2927,2928,2936,2937],{"type":33,"tag":48,"props":2892,"children":2893},{"href":1474},[2894],{"type":33,"tag":53,"props":2895,"children":2897},{"className":2896},[],[2898],{"type":39,"value":1481},{"type":39,"value":2900}," (template), ",{"type":33,"tag":48,"props":2902,"children":2903},{"href":1710},[2904],{"type":33,"tag":53,"props":2905,"children":2907},{"className":2906},[],[2908],{"type":39,"value":1717},{"type":39,"value":258},{"type":33,"tag":48,"props":2911,"children":2912},{"href":1721},[2913],{"type":33,"tag":53,"props":2914,"children":2916},{"className":2915},[],[2917],{"type":39,"value":1728},{"type":39,"value":258},{"type":33,"tag":48,"props":2920,"children":2921},{"href":1732},[2922],{"type":33,"tag":53,"props":2923,"children":2925},{"className":2924},[],[2926],{"type":39,"value":1739},{"type":39,"value":258},{"type":33,"tag":48,"props":2929,"children":2930},{"href":1743},[2931],{"type":33,"tag":53,"props":2932,"children":2934},{"className":2933},[],[2935],{"type":39,"value":1750},{"type":39,"value":258},{"type":33,"tag":48,"props":2938,"children":2939},{"href":1754},[2940],{"type":33,"tag":53,"props":2941,"children":2943},{"className":2942},[],[2944],{"type":39,"value":1761},{"type":33,"tag":238,"props":2946,"children":2947},{},[2948,2950,2956,2958,2964,2966,2972,2974,2980,2982,2987,2989,2995,2997,3003],{"type":39,"value":2949},"Add ",{"type":33,"tag":53,"props":2951,"children":2953},{"className":2952},[],[2954],{"type":39,"value":2955},"client\u002F\u003Cname>\u002F",{"type":39,"value":2957}," with a ",{"type":33,"tag":53,"props":2959,"children":2961},{"className":2960},[],[2962],{"type":39,"value":2963},"Run",{"type":39,"value":2965}," (or ",{"type":33,"tag":53,"props":2967,"children":2969},{"className":2968},[],[2970],{"type":39,"value":2971},"RunCgo",{"type":39,"value":2973},") entry point, a ",{"type":33,"tag":53,"props":2975,"children":2977},{"className":2976},[],[2978],{"type":39,"value":2979},"doc.go",{"type":39,"value":2981}," documenting on-disk layout + pinned upstream version, and a ",{"type":33,"tag":53,"props":2983,"children":2985},{"className":2984},[],[2986],{"type":39,"value":461},{"type":39,"value":2988}," driving Docker boot + the shared ",{"type":33,"tag":53,"props":2990,"children":2992},{"className":2991},[],[2993],{"type":39,"value":2994},"e2e.RunSuitePhases",{"type":39,"value":2996}," oracle. Wire into ",{"type":33,"tag":53,"props":2998,"children":3000},{"className":2999},[],[3001],{"type":39,"value":3002},"internal\u002Fclientpolicy\u002Fpolicy.go",{"type":39,"value":370},{"type":33,"tag":216,"props":3005,"children":3006},{},[3007,3012,3025],{"type":33,"tag":238,"props":3008,"children":3009},{},[3010],{"type":39,"value":3011},"Work on the reth codec",{"type":33,"tag":238,"props":3013,"children":3014},{},[3015],{"type":33,"tag":48,"props":3016,"children":3018},{"href":3017},"..\u002Finternal\u002Freth\u002Fdoc.go",[3019],{"type":33,"tag":53,"props":3020,"children":3022},{"className":3021},[],[3023],{"type":39,"value":3024},"internal\u002Freth\u002Fdoc.go",{"type":33,"tag":238,"props":3026,"children":3027},{},[3028,3030,3036],{"type":39,"value":3029},"Byte-exact mirror of reth's MDBX schema + Compact codec. Pinned to a specific reth commit; updating requires regenerating ",{"type":33,"tag":53,"props":3031,"children":3033},{"className":3032},[],[3034],{"type":39,"value":3035},"testdata\u002Ffixtures.json",{"type":39,"value":370},{"type":33,"tag":216,"props":3038,"children":3039},{},[3040,3045,3062],{"type":33,"tag":238,"props":3041,"children":3042},{},[3043],{"type":39,"value":3044},"Add a CLI flag",{"type":33,"tag":238,"props":3046,"children":3047},{},[3048,3053,3054],{"type":33,"tag":53,"props":3049,"children":3051},{"className":3050},[],[3052],{"type":39,"value":2385},{"type":39,"value":442},{"type":33,"tag":48,"props":3055,"children":3056},{"href":192},[3057],{"type":33,"tag":53,"props":3058,"children":3060},{"className":3059},[],[3061],{"type":39,"value":192},{"type":33,"tag":238,"props":3063,"children":3064},{},[3065,3067,3072,3074,3080,3082,3092],{"type":39,"value":3066},"Declare in ",{"type":33,"tag":53,"props":3068,"children":3070},{"className":3069},[],[3071],{"type":39,"value":2385},{"type":39,"value":3073},", document in ",{"type":33,"tag":53,"props":3075,"children":3077},{"className":3076},[],[3078],{"type":39,"value":3079},"--help",{"type":39,"value":3081}," text, refresh the compact flag table in ",{"type":33,"tag":48,"props":3083,"children":3085},{"href":3084},"..\u002FREADME.md",[3086],{"type":33,"tag":53,"props":3087,"children":3089},{"className":3088},[],[3090],{"type":39,"value":3091},"README.md",{"type":39,"value":370},{"type":33,"tag":3094,"props":3095,"children":3096},"style",{},[3097],{"type":39,"value":3098},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3100,"total":1387},[3101],{"slug":4,"name":4,"fn":5,"description":6,"org":3102,"tags":3103,"stars":17,"repoUrl":18,"updatedAt":19},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3104,3105],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15},{"items":3107,"total":1387},[3108],{"slug":4,"name":4,"fn":5,"description":6,"org":3109,"tags":3110,"stars":17,"repoUrl":18,"updatedAt":19},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3111,3112],{"name":13,"slug":14,"type":15},{"name":9,"slug":8,"type":15}]