Holder verificationComing soon

Prove you hold a Stock Token.

Two calls and one wallet signature. You get a signed token your own backend can check offline against our public key. No gas, nothing leaves the wallet but a signature.

Coming soon

Not live yet

Holder tokens need Ed25519 signing, which the edge build does not carry yet. The API below is the shape it will ship with, so you can write against it today. Ballots, votes and weighted tallies are live now and need no wallet connection.

Browse ballots

1. Ask for a challenge

POST /api/verify/challenge
{ "address": "0x…", "symbol": "AAPL", "min": "1", "audience": "yourapp.com" }
→ { "nonce": "…", "message": "StockVotes holder verification\n…", "expiresAt": "…" }

2. Sign it, send it back

const signature = await wallet.signMessage({ account, message });
POST /api/verify  { "nonce": "…", "signature": "0x…" }
→ 200 { "ok": true, "token": "eyJ…", "claims": { "sub": "0x…", "symbol": "AAPL", "balance": "12.5", … } }
→ 403 { "ok": false, "balance": "0", "min": "1" }

3. Check the token on your server

import { createRemoteJWKSet, jwtVerify } from "jose";
const keys = createRemoteJWKSet(new URL("https://<host>/api/verify/keys"));
const { payload } = await jwtVerify(token, keys, { audience: "yourapp.com" });
// payload.symbol, payload.balance, payload.block are yours to trust

No JWT library? GET /api/verify?token=… does the same check for you.