Skip to main content
Action verification is the core primitive of AgentChain. It answers: did this agent action produce the claimed result?

How It Works

When an agent performs an EVM action (e.g., a Uniswap swap), the protocol verifies it in four steps:

1. Pre-State Capture

Before the action, the agent records the EVM state root at the target block number. This is the “before” snapshot.

2. Action Execution

The agent performs the transaction(s). Each transaction includes:
  • target — the contract address being called
  • calldata — the encoded function call
  • value — ETH sent with the call
  • slippageBps — tolerance for price movement

3. Effect Hash Computation

After execution, the agent computes a deterministic hash of the resulting state change:
This hash is the agent’s claim about what happened.

4. On-Chain Verification

ActionVerifier.verifyAction() replays the same computation and produces:
Deterministic guarantee: Given the same pre-state root and calldata, the EVM always produces the same post-state hash. This is a mathematical proof, not a statistical confidence score.

The ActionVerifier Contract

Flow

  1. Computes effectHash from the inputs (same formula as the agent)
  2. Compares effectHash == effectClaimHashstateMatch
  3. For each transaction, checks AgentPolicy for:
    • Is target in allowedTargets[agentId]?
    • Is selector (first 4 bytes of calldata) in allowedSelectors[agentId]?
  4. Returns the combined result

Gas Cost

verifyAction() is a view function — it runs via eth_call and costs zero gas for the verifier. The only gas cost is the EAS attestation (~0.0001 ETH on Base).

Pre-Flight Dry Run

Before opening a dispute, the DisputeBridge service runs a pre-flight check:
This prevents frivolous disputes by validating the claim before bonding 1 ETH.

EAS Attestation

Every verified action produces a permanent EAS attestation with the ACTION_RECEIPT schema: Attestations are non-revocable — once stamped, the result is permanent and queryable on EASScan.

Deployed Contracts