Bind the challenge
Origin, action, wallet, chain, nonce, and expiry live in one signed SIWE message.
Let trusted EAS attestations carry the signal. Qualifying wallets pass with a signature; everyone else continues to your existing CAPTCHA.
Protected action
Create an account
We’ll check for a trusted onchain attestation. You only sign a one-time message.
Coinbase Verified Account
Base or Base Sepolia · verifiedAccount = true
No qualifying attestation? Your normal CAPTCHA appears automatically.
Origin, action, wallet, chain, nonce, and expiry live in one signed SIWE message.
Find any matching rule, then require every trusted attester and typed field condition inside it.
The protected backend verifies a short-lived token and atomically burns its one-time ID.
Open-source integration
Self-host the routes, choose the schemas and issuers you trust, then slot the React component in front of any sensitive action.
Explore EAS on GitHubconst captcha = createEasCaptcha({
policy: {
version: 1,
rules: [{
chainId: 8453,
schemaUid: VERIFIED_ACCOUNT_SCHEMA,
attesters: [COINBASE_ATTESTER],
fields: [{ field: 'verifiedAccount', op: 'eq', value: true }]
}]
},
store,
tokenSecret
})