
Cairn is an onchain safe-send allowlist for your wallets on Monad. If you build onchain you juggle a dozen wallets and send between them by pasting addresses you only read by their first and last characters. Attackers exploit exactly that with address poisoning: they generate a look-alike that shares your ends and seed it into your history, so you paste the wrong one. It has drained $83M+ across 270M+ attempts; one trader lost $50M in a single send. What I built: - Cairn.sol: a per-user, no-admin registry where you label your own wallets onchain (name, role, tags). Your labels become a portable, verifiable allowlist. - Safe send: pick a wallet by name. Paste an address and get a hard GREEN / RED / GREY verdict. Red blocks the send and diffs the look-alike against your real wallet character by character. - CairnShield.sol: a permissionless community registry to flag scam/poison addresses or vouch legit ones; the send flow and a no-wallet poison-check tool read it live. - A public poison check that scores any address 0-100 and makes a shareable card, plus a read-SDK so any dApp embeds Cairn's labels in 3 lines. Contracts (Monad testnet, verified, Sourcify exact_match): Cairn 0xB33Bf9cccD5614DCd5d3d830B09da67aD6606c59 CairnShield 0x32BD10E04371A4D86B980Be2CE5e1Cf14f81CaE4 47 Foundry tests (unit + fuzz + invariant). Next.js static export, wagmi/viem, Multicall3 live balances. What I learned: address poisoning is a UI problem (truncated addresses plus trusting your own history), so the fix belongs at the address-book and send-confirmation layer; and cheap high-throughput writes on Monad make an onchain, community-readable safety list actually practical.
讨论
还没有评论,快来分享你的看法吧。