ERC-8354, Confidential Agent Policy Verdicts
Formally tracked Draft ERC, merged into the canonical ethereum/ERCs repository on 25 August 2026 at commit 9ddae72d666c22a923e78fb923844d1e0494bf1, created 16 July 2026 by the draft's own record and opened for public discussion on Ethereum Magicians on 24 July 2026.
- Verified in artifacts10
- Documented design1
- Unknown1
ERC-8354 lets a Guard verify a committed policy evaluated one exact action and returned allow, without disclosing the policy itself. The specification states plainly that this proves the interpreter ran faithfully, not that the underlying ruleset was ever legitimately constituted.
View evidence (12 properties, 3 sources)
- Verified in artifactsERC-8354 is a formally tracked Draft ERC with no Final, adopted standard or industry consensus status, and no production adoption was found. Read directly from the frontmatter of the posted specification text at the exact merge commit: status Draft, created 16 July 2026. This record does not describe ERC-8354 as a finalized Ethereum standard, an adopted protocol or production infrastructure, and represents production adoption, independent implementation and independent security audit as searched for and not established.
- Verified in artifactsThe Verdict struct carries exactly nine fields, agentId, domainId, policyRoot, actionCommitment, executor, expiry, nullifier, decision and policyKind, each required as a public input to the proving program. Read directly from the posted specification text. Requiring every field as a public input, rather than a value checked only after the fact on chain, is what lets the Guard bind its own on chain checks to exactly what the proof itself committed to, not to a value substituted afterward.
- Verified in artifactsA Policy Domain is defined narrowly as an entity that maintains a ruleset and operates a policy engine, identified by a domainId, not as the ultimate legitimate authority over the resource it governs. Read directly from the posted specification text. This record represents a Policy Domain as the immediate technical authority a verdict is bound to. Nothing in the specification documents who is entitled to stand up a Policy Domain, register it or claim jurisdiction over the resource its policy governs, the same gap this dataset has found in every delegated or approval authority claim it evaluates.
- Verified in artifactsThe specification states the Guard MUST recompute actionCommitment from the action it is about to execute and MUST NOT accept one supplied by the caller. Read directly from the posted specification text, quoted without alteration. actionCommitment is the keccak256 of block.chainid, domainId, agentId, target, value, keccak256 of the call data and a strictly increasing actionNonce. This proves the exact chain, domain, agent, target, value and call data a policy evaluated. It does not prove those encoded fields faithfully represent whatever a human or an organization actually meant by the underlying task, a distinction this record keeps separate.
- Verified in artifactspolicyKind and decision are paired on a fixed table distinguishing ALLOWED, DENIED, NOT_PERMITTED and COULD_NOT_EVALUATE, and a mismatch between the two fields is rejected before any other check runs. Read directly from the posted specification text. DENIED is a rule that explicitly examined and refused the action. NOT_PERMITTED is the absence of any rule that authorized it. COULD_NOT_EVALUATE is the policy engine failing to reach a verdict. This record does not collapse those three into one generic deny state, since a rule that refused an action and the absence of any granted authority are different facts about Authority Provenance.
- Verified in artifactsThe nullifier is derived inside the proving circuit from domainId, agentId, actionCommitment and actionNonce, and the specification states directly that a supplied nullifier would let a domain mint many for one action, defeating single use. Read directly from the posted specification text. Consumed once, a nullifier burns permanently for that domain. This record reads single use verdict consumption inside the guarded call as distinct from an exactly once external effect: what a downstream system does with the effect an action produces, including its own retry or failure semantics, sits outside what this design claims.
- Verified in artifactsA verdict is consumed either directly by v.executor or by any relayer carrying an EIP-712 signature by v.executor over the verdict digest, and the specification forbids using tx.origin for executor validation. Read directly from the posted specification text. executor itself is a required public input to the proving program, not only a value checked on chain, because the specification states a verdict transits a public mempool before it lands and an observer could otherwise lift and front run its consumption. This record keeps the executor distinct from whoever actually constituted the underlying policy; the specification does not claim they are the same party.
- Verified in artifactsA superseded policy root stays acceptable for maxRootAge seconds, and the specification states the tradeoff directly: a low setting risks liveness gaps during cross chain synchronization, a high setting extends how long a removed rule keeps authorizing actions. Read directly from the posted specification text. DomainRevoked provides immediate, universal revocation outside that aging schedule. A separate, named risk is silent verifier or program key rotation, DomainProgramUpdated, which the specification advises treating as a revocation when unannounced rather than assuming continuity.
- Verified in artifactsThe specification distinguishes action level integrity, that the committed interpreter was evaluated over this action and returned ALLOW, from interpreter level fidelity, that the interpreter actually implements the policy the domain claims, and states plainly that this ERC does not prove the second. Read directly from the posted specification text, quoted without alteration. A consistently wrong or malicious interpreter can produce valid proofs against its own committed policy root. The specification's own remedy is out of band, provenance disclosure or review attestations, not zero knowledge verification. This is the clearest limitation this record found in the entire design, stated by the specification itself rather than inferred.
- Verified in artifactsThe specification states directly that a rejected agent cannot see why it was rejected, and cannot distinguish a correct application of a harsh rule from an incorrect application of a fair one, naming this an inherent cost of the design. Read directly from the posted specification text. The commitment is deliberately not blinded so a domain retains an optional, off protocol path to disclose the actual ruleset to an auditor or regulator, checked against the same committed hash a verdict already proves was used. Nothing requires a domain to exercise that path, and this record does not assume any given domain does.
- Documented designThe reference implementation's Solidity test suite runs against MockVerifier.sol rather than a live proof, while a separate Noir circuit is proven with Barretenberg and UltraHonk and the specification states it passes nargo test. Verified directly against the merge commit's own eighteen file, 2173 line change set. This record reads circuit level zero knowledge proving as real and demonstrated by the specification's own account, and the Solidity Guard's own unit tests as run against a mock verifier standing in for a live proof. No test combining real proof generation with on chain verification in one run was found, and this record does not claim one exists. The full suite is author run and not independently reproduced.
- UnknownWhether whoever operates a Policy Domain was entitled to govern the resource its policy protects, as distinct from technically operating a policy engine, is not established by the specification. Nothing this session read in the specification documents an organizational entitlement, a resource ownership rule, a contract or a governance basis for who may stand up and operate a Policy Domain. A valid policyRoot proves a ruleset existed at a specific committed state. It does not prove that ruleset was legitimately constituted, the same gap this dataset has found in Nuggets' Authority Control Plane, Britive's on behalf of binding and the EP Authorization Receipts draft's enrolled approver key.
- Confidential Agent Policy VerdictsEthereum ERCs (ercs.ethereum.org), 25 August 2026
- ERCS/erc-8354.md at commit 9ddae72d666c22a923e78fb923844d1e0494bf1, Confidential Agent Policy Verdictsethereum/ERCs (GitHub, raw posted text at the canonical merge commit), 25 August 2026
- Add ERC: Confidential Agent Policy Verdictsethereum/ERCs (GitHub), 25 August 2026
