Agent Mandates: What the Compliance Check Can’t See
Alice’s agent sends 400 fund tokens to a verified address she never chose. Which check stops it?
IN 30 SECONDS
The ERC-3643 compliance contract is a separate contract that sees whose tokens move, to whom and how many; its standard call does not say who asked for the move. A mandate in the ERC-8226 Draft checks the agent, the action and the amount, not where the tokens go. This stage shows what that leaves to you.
KEY TAKEAWAYS · 3
- ERC-3643’s standard compliance call (ICompliance) has no field for the address that asked for the move, so enforce the mandate where that caller is visible.
- The mandate checks who, what and how much. A verified address the investor never chose can pass, unless you add a recipient policy.
- Don’t read legal or beneficial ownership from an address alone: the issuer’s legal and custody setup decides it.
On this page
What the compliance contract can’t see
IN SHORT ERC-3643’s compliance check receives from, to and amount, and nothing about the original spender, the address that called transferFrom.
WORDS TO KNOW
- Compliance contract
- The separate ERC-3643 contract the token asks whether a transfer follows its rules.
- Spender
- The address that moves someone else’s tokens under an allowance, here the AI agent.
- Custody
- Who holds the assets on behalf of investors.
The call chain explains it. On the direct path, the agent, as Spender The address that moves someone else’s tokens under an allowance, here the AI agent. See the glossary, calls the token. Then the token calls its separate Compliance contract The separate ERC-3643 contract the token asks whether a transfer follows its rules. See the glossary.
STEP BY STEP
Step 1. Call. The agent asks the token to move the investor’s tokens (transferFrom).
- Call The agent asks the token to move the investor’s tokens (transferFrom).
- Hand-off The token asks its compliance contract: whose tokens, to whom, how many?
- What it sees Inside the compliance contract, the caller is the token. Nothing in the call names the agent.
The missing caller is a limit of the interface. It doesn’t mean the caller can’t be found anywhere.
The token can check or log the caller before that call. An authenticated executor can also apply its own rule.
Routers (contracts that pass a trade along), smart accounts (wallets run by contract code) and delegated accounts add more callers. Each one must be identified.
WATCH OUT
Admin paths need a review too. The normal transfer checks don’t cover every admin action: in ERC-3643, mint and forced transfer skip the compliance rules.
Coming up next: So what does the mandate itself check on a real trade?
A worked example: one mandate, two trades
IN SHORT The mandate checks who, what and how much, but not where the tokens go.
A WORKED EXAMPLE
Illustrative numbers
PASSThe agent sells 400 fund tokens to a verified buyer
INPUT
- Principal
- Alice (verified investor)
- Agent
- Alice’s trading agent
- Mandate
- transferFrom, 500 per trade, 1,000 in total
- Allowance
- 1,000 tokens
WHAT HAPPENS
- The caller isn’t Alice, so the token (a strict token gate) asks for the mandate.
- 400 is under the 500 limit and under the 1,000 left. The mandate check passes.
- The allowance covers 400, the buyer is verified, the compliance rules pass.
- The trade settles and 400 is recorded against the caps.
OUTPUT
- Result
- transfer succeeds, 600 left
NOT CAUGHTSame mandate, 400 tokens to an address Alice never chose
INPUT
- To
- a verified address Alice doesn’t know
- Amount
- 400
WHAT HAPPENS
- The mandate check looks at agent, investor, asset, action and amount. There is no recipient to check, so it passes.
- The receiver is verified. Assume the balance, freeze, pause and compliance checks also pass: the token lets it through.
OUTPUT
- Result
- succeeds, unless you added a recipient policy
Each check did its job. None checks whether this is the destination Alice intended.
ITEM GET
Limiting destinations is your job
Coming up next: And who answers the other questions?
Who decides where the tokens go
IN SHORT A trade raises four questions here, and the mandate answers only the first. Destination and custody are choices you make.
Decide where bought assets land, and who has Custody Who holds the assets on behalf of investors. See the glossary. An address in the identity registry is not always a separate investor in law. The issuer’s setup can tie it to an identity.
IN PLAIN WORDS
Beneficial ownership roughly means who holds the economic interest, which can differ from the legal holder. So don’t read either from an address or a transfer event alone.
Sources: ERC-3643, ERC-8226 (Draft).
FAQ
No. When the token does the check, the allowance (or operator approval) and the mandate must both allow the action. A mandate alone neither grants ownership nor approves moving tokens.
The chain records an address and its identity claims. Neither that nor a transfer event alone decides legal or beneficial ownership. The issuer’s legal and custody setup must say whose assets the address holds, and whether that setup is allowed.
STAGE CLEAR
What you now know
- Why the standard compliance call can’t tell which agent asked for a transfer.
- Why a verified address the investor never chose can pass the mandate.
Check yourself
Tap or click a question to see the answer.
Your compliance contract should refuse trades from agents without a mandate. Why can’t its standard call do that alone?
The call only carries from, to and amount, and inside it the caller is the token. Check the mandate where the agent is visible: in the token before that call, or in an executor.
Former CTO of Integra. Named author (1 of 5) of ERC-3643, first author of ERC-6960, co-author of ERC-7410, and co-author of ERC-8203, which is still a draft. Building production AI and regulated Web3 systems.
Have a project to ship or a role to fill?
Discuss your project or roleFollow the engineering notes
Get new articles on production AI and smart contracts by email.