The four steps
Step 1 — Owner creates a mandate
The owner (user or admin) defines rules and signs them:- Max amount per action
- Allowed wallet addresses
- Blocked categories
- Time windows
Step 2 — Agent calls check() before acting
Before a transfer, order, or MCP tool runs, the agent sends the planned action to Warrant:
Important: If verdict is DENY, your code must not run the real transfer or tool.
Step 3 — Signed receipt
Every decision gets a receipt — a JSON document signed by Warrant (Ed25519). The receipt includes:receipt_id— unique id (e.g.rcpt_dec_…)verdictandreasonssignature— proves Warrant issued it
verdict=DENY means the business rule blocked the action. That is normal. A valid DENY receipt is still cryptographically authentic.
Step 4 — On-chain batch (optional but recommended)
Individual receipts are not one transaction each. Warrant batches them:- Builds a Merkle tree of receipt hashes
- Publishes the root to ReceiptLog on-chain
- Adds
proof,batchId, andtxHashto the receipt
Who does what
Web2 and Web3 use the same engine
Same API for:- Food ordering (amount + category rules)
- Crypto transfers (amount + counterparty allowlist)
- Any MCP tool you wrap with
check()
domain and action_type change.
Verify without trusting us alone
Auditors use@abstraxn/warrant-verifier:
- Paste the receipt JSON
- Verify Ed25519 signature (offline)
- Optionally check Merkle proof and on-chain ReceiptLog
One-liners for your team
- Product: “Rules before the agent acts, receipts after.”
- Engineering: “Call
check()before irreversible side effects.” - Compliance: “Every decision has a signed, verifiable receipt.”
Next steps
- SDK quickstart — code your first flow
- On-chain — chains and contracts
- API reference — HTTP endpoints