Stake
$HANKO locked at registration. Bonds compound karma but freeze until slash windows close.
hanko-cli stake --agent <pubkey> --amount 500
Solana Agent Trust Registry · ERC-8004 port
Every torii on this path carries an agent's bond. Enter the registry — verify identity, reputation, and validation in three seconds.
gMfmX6GobJuZQhCwRxBnhYybsTPz1aQHViqn7hCpump
Section 2 · Void
Five open spaces where Solana agents had no verification surface. Hanko puts a torii at each one.
identity gap
Ethereum shipped Trustless Agents in 2025. Solana had no port — so any wallet could roleplay as a trusted operator.
provenance gap
A pubkey with a Twitter bio isn't an identity. Without a signed AgentCard + domain binding, provenance is folklore.
handshake gap
Google's Agent-to-Agent protocol negotiates capability but not credit. A2A cards fly around unsigned and unverified.
settlement gap
HTTP 402 unlocks payment rails for agents — but no shared registry answers should you pay this counterparty?
adversarial gap
Without a bond, a bad agent respawns. Slashing needs stake, and stake needs a registry.
Section 3 · Sando
ERC-8004's three-part registry, ported to Anchor. Identity says who. Reputation says how they've behaved. Validation says prove it again, now.
PDA seeds
["agent", agent_pubkey]
Every agent posts a signed A2A AgentCard, a domain, and an initial $HANKO bond. The PDA is derived from the agent pubkey — one shrine per signer.
Account layout
Instructions
register_agent
(uri, domain, bond) → AgentIdentity
update_agentcard
(uri) → AgentIdentity
bind_domain
(domain, dns_proof) → AgentIdentity
Backing spec
ERC-8004 draft · A2A v1.0 signed AgentCards · Solana Attestation Service · Ed25519 typed data (EIP-712 pattern).
Section 4 · Stations
Each station is a lantern along the path — a working module wired into the Anchor registry suite.
$HANKO locked at registration. Bonds compound karma but freeze until slash windows close.
hanko-cli stake --agent <pubkey> --amount 500
Proven fraud burns 50% of the bond and pays the remaining 50% to the reporter. Slashes tilt the torii permanently.
hanko-cli slash --agent <pubkey> --evidence <sha256> // resolved by registry governance
0..1000 score = registration days + weighted attestations + validation success − slash penalty.
hanko-cli karma <pubkey> // → { score: 912, tier: sealed }@hankolabs/x402-middleware — a one-line guard that rejects unregistered agents before payment clears.
app.use(hankoGuard({ minKarma: 500 }));
app.use(x402PaymentRequired);Chrome MV3 extension. Any Solana pubkey rendered in a page gets an inline seal — sealed, unknown, or slashed.
chrome://extensions → Load unpacked → hanko-lens.zip
hanko-cli npm global, @hankolabs/sdk for TypeScript, GitHub Action for CI-time agent identity checks.
npm i -g hanko-cli npm i @hankolabs/sdk
Section 5 · Bond
Bonds lock at registration and unlock at exit. Slashes burn 50% and pay the reporter 50%. No inflation — every seal is a real signature against real stake.
Bonds locked
21,000 bond tokens
Sum of every open agent bond, denominated in the registry bond mint.
Agents slashed
1
Each slash burns 50% of the bond and pays the reporter 50%.
gMfmX6GobJuZQhCwRxBnhYybsTPz1aQHViqn7hCpumpBronze
karma 0 – 249Silver
karma 250 – 549Gold
karma 550 – 849Sealed
karma 850 – 1000Section 6 · Seal
Register a signed AgentCard, bind your domain, post a $HANKO bond, and receive a Sealed shrine card you can embed anywhere.
Command-line
runnpm i -g hanko-cli hanko init hanko seal \ --card https://your.domain/.well-known/agent-card.json \ --bond 500
TypeScript SDK
runimport { HankoClient } from "@hankolabs/sdk";
const hanko = new HankoClient({ cluster: "mainnet-beta" });
await hanko.registerAgent({
agentCardUri: "https://your.domain/.well-known/agent-card.json",
domain: "your.domain",
bond: 500,
});
The fox remembers.