On-chain licenses for AI trading agents. Every agent acts under a license
minted by a verified human principal, checked in-line at every trade, watched
by an autonomous Sentinel, and revocable in about a second. The standard is a
draft ERC, IAgentLicense, and the HAETAE
contracts live on GIWA Sepolia as its reference implementation.
- Site: haetae.xyz
- Console: haetae.xyz/console. Connect a
wallet and license an agent yourself;
/verify/<agent>answers wallet-free. - Offline sandbox: append
?sandbox&delay=0to the console URL and the entire walk runs from fixtures, no RPC needed.
| Step | What happens | Where |
|---|---|---|
| Verify | A human principal proves identity through the Dojang lane or a registered attestation | HaetaeDojang |
| License | The principal mints a soulbound license for the agent: scope, expiry, caps | HaetaeLicense |
| Enforce | Every trade walks license, scope, venue, and cap checks before executing | HaetaeGate + HaetaePolicy |
| Watch | An autonomous Sentinel flags misbehavior with hash-anchored reasons | SentinelAuthority |
| Revoke | The principal or the Sentinel kills the license; the next action reverts everywhere | one transaction |
| Registry | Ledger |
|---|---|
![]() |
![]() |
| Verify: licensed | Verify: revoked |
|---|---|
![]() |
![]() |
| The licensing ceremony | The wound it heals |
|---|---|
![]() |
![]() |
git clone https://github.com/bunnyyxtan/HAETAE.git && cd HAETAE
git submodule update --init --recursive # pinned contract deps (once)
# the console, at /console
cd web && npm ci && npm run dev
# the contracts
cd contracts && forge build && forge testThe stage walk is scripted beat-by-beat in DEMO.md.
Every address below is Blockscout-verified. deployments/giwa-sepolia.json
is the single source of truth; the console imports it directly.
| Contract | Address |
|---|---|
HaetaeLicense |
0x7409E7Dc675f13957343340D2a6935fACA0773f8 |
HaetaePolicy |
0xF8f909C5Dc9D0e80D5E1b0332450fAF3D79D9C7d |
HaetaeGate |
0x82345FC04BDaa853A11115C557B1c54dF9dc48EF |
SentinelAuthority |
0xE5f518d0F2326878cd248785eA54B82B7dE2E359 |
ReferenceVault |
0xb419F747AF35490F6c8e26aA2A07B1AbEc126879 |
TestUSDC |
0x3f9EC3DBFEca9ddc6c41A7f8924C39665EBfCE12 |
HaetaeDojang |
0x93F054B9F9f957e323C66A4c4D8A03a67dA15F1B |
SandboxVerifier |
0x0be98AC93313172791BCF5Aaf19ef28bB9265Cba |
The live registry starts empty by design; no fictional demo cast is seeded.
Scripted fixtures live exclusively behind the console's ?sandbox mode and
are labeled as such.
A rehearsal agent (scratch key, scope rehearsal, licensed by a
Dojang-verified principal) played the whole HAETAE arc exactly once, in five
public transactions:
- The legal trade. The agent moves 300 tUSDC through dex-alpha; the Gate walks license, scope, venue, and cap, and lets it pass. tx
- The cap refusal. The same agent asks for 1,900 with 1,700 left in its day budget: refused, on-chain, in public. tx
- The injection. The agent aims 100 tUSDC at the attacker's venue:
VenueNotAllowed. tx - The verdict. The Sentinel flags the agent with a hash-anchored reason; license 1 is Revoked in one transaction. tx
- The ghost. The revoked agent tries once more: refused, forever. tx
Anyone can read the revoked license, right now:
cast call 0x7409E7Dc675f13957343340D2a6935fACA0773f8 \
'licenseById(uint256)((address,address,uint64,bytes32,uint8))' 1 \
--rpc-url https://sepolia-rpc.giwa.ioDemo-grade verifier, not production trust. The deployed SandboxVerifier
is permissionless: anyone can attest any address, so a license minted through
it proves flow, not identity. The license gate runs through HaetaeDojang, a
dual-lane verifier (the GIWA DojangScroll Upbit lane OR a registered HAETAE
EAS attestation). On this testnet the HAETAE lane is live with a project
attester; production narrows to the Upbit Dojang lane by constructor
arguments alone.
| Layer | Choice |
|---|---|
| Contracts | Solidity ^0.8.24, Foundry; OpenZeppelin v5.6.1, EAS v1.4.0, EntryPoint v0.7 (exact-pinned submodules) |
| Web | Vite + React 19 + TypeScript, wagmi v2 + viem, hand-written CSS |
| CI | GitHub Actions: forge fmt/build/test plus web typecheck/test/build |
contracts/ Foundry project: registry, policy, gate, sentinel, verifier
web/ the console and landing site (Vite + React)
api/ Vercel serverless entry for the verification desk
server/ the Express app behind it
standard/ the draft ERC and integrator guide
deployments/ committed deployment records (single source of truth)
docs/ protocol specs
screenshots/ product captures used in this README
standard/ERC-agent-license.md: the draft ERC.IAgentLicenseis its interface; HAETAE is the reference implementation.standard/integrator-guide.md: how a venue or dApp adopts the gate in an afternoon.
- SDK, indexer, Sentinel service, and a reference agent
- ERC-4337 validation-layer enforcement: unlicensed UserOps rejected before they ever reach a block
- Production Dojang lane on GIWA mainnet






