WHEN IT FAILS
What will not work
A constant mapping key, an inherited write with no guard, a contract you cannot redeploy.
The loop in First hour is real. Purse in this repo is the proof that an ordinary mapping survives it. The cases below are the ones that path does not forgive.
- A constant mapping key
- balances[HOUSE] where HOUSE is address constant lets the optimizer fold keccak256(HOUSE, slot) into a literal. No hash runs, the node cannot see the entry, the write is refused. Make the key immutable.
- An inherited OpenZeppelin write
- _transfer has no whenNotDelegated. If it writes a slot the node also holds, the next commit fails on oldValue and the session stalls until forceClose. Every write path is yours to audit.
- A contract that cannot be redeployed
- Delegated storage is declared at construction. An immutable live contract cannot be adopted. That is a property of the EVM, not of this implementation.
- A delegated value as an oracle
- A getter called on Monad while the partition is live returns the last committed value, with no revert. Delegated.isStale exists; nothing forces a caller to check it. If another protocol must read the live value, that slot belongs on the base chain.
- Two partitions in one call
- pass that debits A and credits B needs both entries in the same partition. That is @custom:interlude global on the mapping, not per-key.
The bond is live
The challenge window and slashing are on-chain. A watcher can replay a batch. The commit posts the log that hashes to `txRoot`. A confirmed slash walks the applied diffs backwards.
The first-hour commands as a single page are on First hour.
