Live, and real money.Every number on this page is read from Base mainnet in your own tab. Nothing is pre-recorded.

An agent that buys stock. Without an allowance.

To swap on Uniswap, a router must be allowed to move your tokens. The usual way is approve() — a standing permission with no ceiling and no expiry. We keep it off the allowlist on purpose: once granted, there is nothing left for a policy to govern.

So this agent never grants one. The authorisation is an EIP-2612 signature — exact amount, 20-minute expiry — carried inside the same transaction as the swap. When the transaction ends, the remaining allowance is zero. That is measured after every purchase, not assumed.

1 · What the chain says right now

Reading Chainlink, the pool and the ledger…

4 · What gets checked before anything is signed

  • market.price-band

    A human wrote down the prices this agent may trade between. The agent cannot argue with it, and a price it could not measure counts as outside.

  • swap.slippage

    The per-call cap watches what goes in; this watches what comes out. A drained pool returns less for the same money and no budget rule would notice.

  • budget.reserve

    The floor the policy will not spend below. It is the only rule that looks at what is left rather than at today.

  • approval.threshold

    Above it, a second key — a human's, different from the agent's — has to sign. Below it, the canary runs alone.

  • calldata.mismatch

    The transaction must encode exactly what the policy approved, byte for byte, including the minimum received. It is the last gate before the signature.

  • approve() — not implemented

    There is no code path in this rail that emits one. The permission is a signature that expires, so there is nothing standing to revoke.

Agent wallet 0x6E598b1d227aa3 · the key never leaves Privy's TEE, and this page never signs anything. New to x402? Start with the protocol guide.