diff --git a/components/research/EntryPointGuarantee.jsx b/components/research/EntryPointGuarantee.jsx new file mode 100644 index 0000000..d271f4a --- /dev/null +++ b/components/research/EntryPointGuarantee.jsx @@ -0,0 +1,86 @@ +import { useState, useEffect, useRef } from 'react' + +const FORMAL_INVARIANTS = [ + 'attemptExecute(i) → validated(i)', + 'validated(i) → attemptExecute(i)', + 'handleOps reverts → no attemptExecute(i)' +] + +export default function EntryPointGuarantee() { + const [showEnglish, setShowEnglish] = useState(true) + const timerRef = useRef(null) + + useEffect(() => { + timerRef.current = setTimeout(() => setShowEnglish(false), 5000) + return () => clearTimeout(timerRef.current) + }, []) + + const handleToggle = () => { + if (timerRef.current) { + clearTimeout(timerRef.current) + timerRef.current = null + } + setShowEnglish((prev) => !prev) + } + + return ( +
+ {formal}
+
+ ))}
+ + In the modeled handleOps control flow, EntryPoint reaches a user + operation's execution path if and only if that same operation + successfully passed validation. +
+
+ ERC-4337 adds account abstraction without changing Ethereum
+ consensus. Users submit{' '}
+ UserOperations,
+ bundlers collect them, and a singleton{' '}
+
+ EntryPoint is the trusted router in that flow. For every + operation, it may deploy the account, call account validation, + call paymaster validation, account for gas, execute the account + call, run post-operation accounting, and compensate the bundler. + The security-critical question is simple to say and hard to + prove in full: can an operation reach execution unless that same + operation passed validation? +
++ ERC-4337 accounts and paymasters are arbitrary contracts. The + full theorem engineers want would quantify over all of that EVM + behavior. This benchmark proves a narrower, useful slice: the + two-loop EntryPoint control flow that gates the operation + execution path on successful validation. +
+
+ The proof tracks validation outcomes and execution-path
+ attempts for each operation index in a call to{' '}
+ handleOps.
+
i unless
+ validation for that same operation succeeded in the model.
+ handleOps{' '}
+ reverts, no execution-path attempt is recorded.
+
+ The model records reaching _executeUserOp,
+ not successful account execution. It intentionally elides the
+ callData.length > 0{' '}
+ branch, gas accounting, and arbitrary account/paymaster
+ internals.
+
+ The Verity model follows the selected Solidity{' '}
+
+ The proof is written in Lean 4 over the Verity model. The main + theorem decomposes the English statement into safety, liveness, + all-validated-on-success, all-executed-on-success, and + no-execution-on-revert lemmas, then combines the first two into + the biconditional. +
+
+ The benchmark case lives in{' '}
+
+ If the build succeeds, Lean has checked every proof term.{' '}
+
+ The case proves the selected EntryPoint control-flow invariant
+ and supporting properties.{' '}
+ sorry-free.
+
| Property | +Meaning | +Status | +
|---|---|---|
| execution_implies_validation | +no execution-path attempt without validation | +proven | +
| validation_implies_execution | +validated operations reach the execution path | +proven | +
| all_validated_on_success | +a successful modeled batch has all validations true | +proven | +
| all_executed_on_success | +a successful modeled batch attempts every execution path | +proven | +
| no_execution_on_revert | +validation failure records no execution attempts | +proven | +
+ The proof does not establish full arbitrary account/paymaster EVM + correctness. The remaining assumptions are explicit: the selected + Solidity control-flow slice, Verity's semantics for the modeled + constructs, and the abstraction from concrete calls and calldata + to per-index validation and execution-path outcomes. +
+
+
+
+
+ + What is a formal proof? + {' '} + A short explanation for non-specialists. +
+