cmd/hivechain: add calltree contract and tx mods for callTracer testing - #1587
Merged
Merged
Conversation
One tx-calltree invocation produces every callTracer frame type; see contracts/calltree.eas. tx-callrevert adds a whole-tx revert with a decodable reason.
lightclient
added a commit
to MysticRyuujin/hive
that referenced
this pull request
Aug 24, 2026
The calltree contract and tx mods landed upstream in ethereum#1587 (with mod_calltree renamed to mod_tracetest); keep only the test that guards the coupling between the callee address constants in genesis.go and the addresses compiled into bytecode/calltree.bin.
lightclient
added a commit
that referenced
this pull request
Aug 24, 2026
* cmd/hivechain: add test guarding calltree callee addresses The calltree contract and tx mods landed upstream in #1587 (with mod_calltree renamed to mod_tracetest); keep only the test that guards the coupling between the callee address constants in genesis.go and the addresses compiled into bytecode/calltree.bin. * simulators/ethereum/rpc-compat: tracer-aware schema selection for speconly tests Validate speconly debug_trace* responses against the anyOf branch matching the tracer the test requested. The whole-schema validation was vacuous: the unconstrained named-tracer branch accepts any value. A known tracer with no matching branch is an error, not a fallback. * cmd/hivechain: generate Glamsterdam blocks * go: tidy Glamsterdam geth dependencies * cmd/hivechain: hex-encode Engine API requests * clients: declare BPO blob schedules only for scheduled forks The bpo1-bpo5 blobSchedule entries were emitted unconditionally with hardcoded fallback values, while the matching bpoNTime fields are dropped by remove_empty when their HIVE_BPON_TIMESTAMP is unset. On a chain whose last fork is Amsterdam, geth then resolved the active fork's blob schedule to the phantom bpo5 entry (target 9, max 14) rather than bpo2 (target 14, max 21), so eth_config reported blob parameters that did not match the chain and the rpc-compat eth_config test failed. Gate each entry on its HIVE_BPON_TIMESTAMP so an unscheduled BPO is omitted from the generated genesis entirely. * hivechain: Add block-level access list output * hivechain: EIP-7997 contract to genesis * go: bump go-ethereum to glamsterdam-devnet-8 * go: bump go-ethereum to glamsterdam-devnet-8 tip * cmd/hivechain: fix -outputs all expansion The expanded output list was unconditionally overwritten by splitAndTrim("all") right below, so -outputs all failed with an unknown output name ever since the flag was introduced in #909. --------- Co-authored-by: lightclient <lightclient@protonmail.com> Co-authored-by: Mario Vega <marioevz@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds a
calltreecontract (geas) plus fixed-address predeploys of the existingcallme/callenv/callrevertcontracts, and two block modifiers:tx-calltree— one invocation produces every callTracer frame type: nested CALL (success with value / innerError(string)revert), STATICCALL (success / write-protection failure), DELEGATECALL emitting a depth-2 log, CALLCODE, a precompile call, CREATE of a child that logs and self-destructs, and a top-level LOG1.tx-callrevert— a whole-transaction revert with a decodable revert reason ("user error").Why
The execution-apis test chain currently contains no CALL-family opcodes, inner reverts, CREATE-opcode frames, or SELFDESTRUCTs, so
debug_trace*fixtures cannot exercise nested call trees. This unblocks the callTracer standardization spec (execution-apis PR to follow).Predeploy addresses (
0x9dcd…27d0–d3) are hardcoded incalltree.eas, mirrored ingenesis.go, and guarded by a test asserting the constants appear in the compiled bytecode. The callees are predeployed (rather than reusing the deploy-* mods' instances) because deployment addresses depend on modifier scheduling and cannot be baked into committed bytecode.