01Quick start
For organizers
- Create the artwork and event details.
- Choose whether the POAP is soulbound or transferable.
- Choose the claim routes: public link, allowlist proof, signed pass, or creator drop.
- Register the event on Base Sepolia. After this, the artwork, metadata, and soulbound setting are permanent.
- Share the claim page, send allowlist proofs, generate signed-pass QR codes, or mint directly to attendee wallets from Manage.
For collectors
Open the event page, connect the wallet that should hold the POAP, and use the mint route the organizer gave you. Public mints only need the page link. Allowlist mints need your proof. Signed passes need the QR, private link, or signature issued for your wallet.
02Creating a POAP
Connect a wallet on Base Sepolia and open Create. Build artwork in the studio or upload a self-contained SVG. Then add event details and pick the claim routes. Description, location, event date, URL, and allowlist are optional. The name is limited to 128 bytes, the description to 512, and the location and URL to 128 each.
Registration calls registerEvent(name, description, eventDate, location, allowlistRoot, svg, externalUrl, flags). The flags record whether transfers and public minting are enabled. Event details cannot be edited after registration.
If you add an allowlist during creation, download the proof file before registering. The app blocks review until that file is downloaded. The contract keeps only the root, so the exported file is what lets you hand each attendee their proof later.
03Metadata & SVG
The contract Base64-encodes the raw SVG and stores it with SSTORE2. Its ERC-1155 uri(id) returns an onchain Base64 JSON document containing the artwork, description, date, location, creator, event ID, CAIP-2 ID, and soulbound status.
Use a square viewBox, avoid remote fonts/images/scripts, convert text to paths when exact typography matters, and optimize with SVGOMG. Smaller SVGs cost less gas.
04Soulbound vs transferable
Soulbound POAPs cannot move between wallets after minting. Transferable POAPs can be sent to another wallet. This setting cannot be changed after registration.
Use soulbound when the wallet is the attendance record. Use transferable only when it is acceptable for the POAP to move to a different wallet later.
05Distribution methods
Every route mints the same ERC-1155 event token. The route only changes who can claim and what they must provide. A wallet can hold one token per event, even if multiple routes are open.
Public mint
When open, any wallet can call mint. Creators can open or close it during the first 30 days; public minting itself has no automatic expiry.
Use this for open events or a single public QR code. The attendee only needs the event page link and Base Sepolia test ETH for gas.
Allowlist mint
The allowlist tool converts a wallet list into a Merkle root and a proof for each wallet. The creator can save a non-zero root once during the first 30 days. Each attendee uses their proof with allowlistMint. The builder uses keccak256(abi.encodePacked(address)) leaves and sorted pairs, matching the contract's OpenZeppelin verification.
Download the generated recipient-proof JSON before registering or saving the root. The root is permanent, and each attendee needs the proof generated specifically for their wallet.
Plain version: the root is the public fingerprint of the attendee list. A proof is the private receipt for one wallet. Do not send the whole proof file to everyone; send each recipient only their own proof.
Signed pass
The creator signs the packed hash of (eventId, chainId, recipient). The contract applies Ethereum's signed-message prefix and recovers the creator. Each pass is valid for one wallet and expires 37 days after registration.
Use this for live check-in or private invites. Enter the attendee wallet in Manage, sign in the creator wallet, then send that attendee the generated private link, QR code, or signature.
Creator drop
During the first 30 days, creators may mint directly to batches of at most 101 recipients. Already-claimed wallets are skipped.
Use this when you already have attendee wallets and want to deliver POAPs without asking each attendee to mint.
06Generating allowlist proofs
Paste one wallet address or ENS name per line in Create or Manage. The app resolves ENS names, removes duplicates, builds the allowlist root, and exports JSON containing the root plus one proof per recipient.
Keep the JSON file. The contract stores the root, not the attendee list. To help one attendee mint, find their wallet entry in the JSON and send only that proof. The attendee pastes it into the Allowlist tab on the event page.
07Live-event QR workflow
Collect the attendee's wallet address, generate its signed mint from the event settings page, and show or send the resulting QR code. The QR opens the event page with the signature included. Generate a separate code for each recipient because each signature is bound to one wallet.
To print one QR code that anyone can scan, enable public minting and link directly to the event page. Use allowlist proofs for a pre-registered attendee list.
A signed-pass QR is not a reusable public ticket. It is a private claim link for one wallet. If another wallet scans it, the pass fails.
08Permissions & deadlines
- One claim per event per wallet across every mint route.
- Creator: set allowlist once, toggle public status, and creator-mint during days 0-30.
- Creator drop: maximum 101 recipients in one transaction.
- Signed mint: available through day 37.
- Public and allowlist mint: no contract expiry.
- Soulbound and all metadata: immutable.
The contract boundary uses createdAt + window < block.timestamp, so actions are allowed exactly at the deadline timestamp.
09Plain-language glossary
- Smart contract: the Base Sepolia program that stores events, checks claim rules, and records ownership.
- Metadata: the token name, description, event details, and artwork returned by
uri(id). - Merkle root: a compact fingerprint of an allowlist. It lets the contract check membership without storing every wallet.
- Allowlist proof: the short set of hashes one wallet submits to prove it is on the allowlist.
- Signed pass: a creator-approved private claim for one event, one chain, and one recipient wallet.
10Verify a mint
After the transaction confirms, open it on BaseScan or view the token on OpenSea. Gallery checks balanceOf(wallet, eventId) directly. You can also inspect the verified contract, call uri(id), and decode the Base64 JSON.