evm: say why the atomic rule lives outside execution

The comment explained the placement by recounting what a node hit when the rule
was enforced during execution. The reason it belongs here does not depend on
that having happened: execution has to be a function of the block alone, and
reading an object out of shared memory while the matching Remove lands at accept
makes it a function of when the block is executed instead.

Behaviour unchanged; comment only.

Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
2026-08-26 13:19:49 -07:00
co-authored by Hanzo Dev
parent 393d05d3c4
commit 5038e01344
+6 -6
View File
@@ -14,12 +14,12 @@ import (
// a C balance can be credited by a cross-chain settlement ONLY by consuming a real
// atomic object the peer chain exported.
//
// WHY IT LIVES HERE AND NOT IN EXECUTION. The rule used to be enforced inside EVM
// execution, by reading the object out of shared memory while the matching Remove
// landed at block accept. Those two facts cannot both hold: a node re-executing that
// block afterwards — bootstrapping, state-syncing, re-tracing an archive call —
// found the object already consumed, computed a reverted receipt where the network
// had computed a successful one, and died with `invalid receipt root hash`. The seam
// WHY IT LIVES HERE AND NOT IN EXECUTION. Enforcing it inside EVM execution would mean
// reading the object out of shared memory while the matching Remove lands at block
// accept, and those two cannot both hold: execution has to be a function of the block
// alone, or a node re-executing it later — bootstrapping, state-syncing, re-tracing an
// archive call — finds the object already consumed and computes a different receipt
// from the one the network agreed. The seam
// settled live and wedged every node that tried to sync past it.
//
// So execution now binds value to the object bytes the TRANSACTION carried (a pure