eth: specify eth_simulateV1 block identity after Amsterdam - #881
MysticRyuujin wants to merge 4 commits into
Conversation
Simulated blocks carry slotNumber and blockAccessListHash. Define the block access list of a simulated block and the traceTransfers behavior when EIP-7708 is active. Add slotNumber to the Block schema.
Can you please tell me if this is included as an empty AccountChange always or is omitted with validation off or some specific cases? |
|
@Soubhik-10 do you have a preference or argument for either? |
If it's accessed we should include anyway ig? |
|
go-ethereum implementation of this text, for tracking: ethereum/go-ethereum#35668 (draft until this PR has agreement). |
|
Always included as an entry with empty change lists, as long as the block has at least one call, with or without validation. A balance change appears only when the fee is not zero. A block with no calls does not include it, same as an empty real block. I tightened the wording in the notes. The go-ethereum draft linked above does exactly this. |
… spec Simulated blocks now carry the slot number (parent + 1, omitted when the parent has none), the coinbase is accessed at zero fee so it enters the block access list like in a real block, and traceTransfers adds no synthetic logs in blocks where EIP-7708 emits the protocol transfer log. Implements ethereum/execution-apis#881.
… spec Simulated blocks now carry the slot number (parent + 1, omitted when the parent has none), the coinbase is accessed at zero fee so it enters the block access list like in a real block, and traceTransfers adds no synthetic logs in blocks where EIP-7708 emits the protocol transfer log. Implements ethereum/execution-apis#881.
|
Needs ethereum/go-ethereum#35617 too |
… warm set Define the default call gas and the global gas limit use under EIP-8037, the EIP-2681 nonce limit in both validation modes, logIndex numbering that matches receipts, and the warm set after movePrecompileToAddress. Deprecate traceTransfers for EIP-7708 blocks.
|
I added four rules in 05677f4. A hive run on the Amsterdam chain showed that clients differ on each one, and the notes did not say which behavior is correct. Please comment if your client should not follow a rule.
I also marked |
Name the request-level error for the nonce limit, exclude logs of reverted inner frames from the log index, note that traceTransfers logs are not in receipts, and use the EIP-8037 terms for the gas defaults.
|
c485b46 tightens the wording from review:
The |
|
go-ethereum drafts for the two rules that change geth: ethereum/go-ethereum#35841 ( |
eth_simulateV1 does not say what a simulated block looks like after Amsterdam, so every client answers differently (#868). This PR specifies it.
Header fields: a simulated block carries every header field that a real block at that fork carries. After Amsterdam that is
blockAccessListHashandslotNumber.slotNumberdefaults to the parent's slot number plus one and is omitted when the parent has none. TheBlockschema gainsslotNumberasuint64. This supersedes #806.Block access list: the hash is computed with the EIP-7928 rules over the execution that the simulation performs. State overrides and
movePrecompileToAddressare pre-state and are not recorded. System calls, calls and withdrawals use the same block access indices as a real block. Fees use the gas price fields that the simulation uses, so with validation off the coinbase is accessed but gets no balance change. The sender nonce increment is recorded whether or not validation is on.traceTransfers: in blocks where EIP-7708 is active, no synthetic
0xeeee...logs are added. The protocol logs from0xffff...fffecover the same transfers. The flag still works for blocks before Amsterdam.Fixtures are not touched. They are generated from go-ethereum and follow once geth implements
slotNumberand the coinbase read, on top of #867.Closes #868.