how it works
Verifiable from first stroke to final distribution.
The entire system is one git repository. Every claim on this site can be reproduced from source.
The art
Each piece is composed deterministically from a single structured definition in src/prompts.js: title, form family, palette, composition, tempo, mood, and a fixed seed. The image prompt is a pure function of those fields, so the metadata, the image, and the on chain name all share one source of truth.
- One hundred entries, ten of ten form families, interleaved so adjacent ids look visually different.
- Each entry's seed is
200003 + id * 7919. Reproducible. - The visual signature fuses rigorous geometric structure, lyrical painterly energy, and controlled drip skeins into one language.
- Images pinned to IPFS via Pinata. Metadata pinned alongside.
The collection
One Metaplex Core collection plus one hundred Core assets on Solana mainnet. Created with the mpl-core SDK, with the on chain Royalties plugin set to 500 basis points. The collection plugin is the authoritative royalty source; Core marketplaces read it.
- All one hundred assets initially owned by the artist wallet.
- On chain URIs point to the canonical https host so every wallet and explorer renders the painting, not only IPFS aware marketplaces.
- Provenance object inside each metadata file records the exact model, seed and prompt that produced the image. Anyone can audit the correlation.
The mechanic
To receive a painting, a wallet must hold 5,000,000 $ART continuously for 15 minutes after the coin migrates. The first one hundred wallets to hold the line each receive exactly one piece, in qualification order. Painting N goes to the Nth wallet to qualify. One per holder.
Two independent ways to compute eligibility, both shipped:
- Forward monitor (
scripts/snapshot-monitor.js): polls every 20 seconds, tracks continuous time at or above threshold per wallet, locks winners as they cross 15 minutes. Persistent state, safe to restart. - History aware re qualifier (
scripts/history-qualify.js): reads every balance changing transaction for every current holder from Helius and reconstructs the actual continuous hold from chain. Independent of monitor uptime. Strict semantic: a wallet must still be holding now. This is the authoritative source for any airdrop run.
The rule is a statement about on chain reality, not about whether anyone was watching.
The airdrop
scripts/airdrop.js reads the winner list, maps rank N to NFT N, and transfers from the artist wallet to the qualifying wallet using mpl-core's transfer. Idempotent and retry safe:
- Per rank transaction signatures saved to
output/winners/airdrop-state.json. A re run only sends what is missing. - Per transfer receipt with signature, recipient and timestamp written to
output/winners/airdrop-receipts.json. A frozen audit trail. - Five retries per asset with exponential backoff.
- Optional typed confirmation gate: set
AIRDROP_REQUIRE_CONFIRM=1and the script will refuse to send unless the operator typesSEND N.
On chain truth
The gallery does not trust the airdrop log to display holders. It reads ownership directly from the mpl-core asset accounts on chain (scripts/onchain-owners.js, one getMultipleAccounts call, decoded straight from account state), so the site always shows who actually possesses each piece, including any secondary transfers after the airdrop. The "view the transfer" link in the gallery modal is only attached when the current holder is still the original recipient, so every link is truthful.
Holder revenue
After all one hundred are minted out, the artist wallet becomes the collector for two streams: $ART creator fees from the coin and the 5% NFT royalty from secondary sales on Magic Eden and Tensor. scripts/distribute-fees.js pays them out:
- Refuses to run unless all one hundred assets are off the artist wallet. Mintout is the precondition the holders were promised.
- Reads live on chain holders, divides the distributable balance (deployer SOL minus a 0.5 SOL operating reserve) by one hundred, sends each rank an equal share.
- If one wallet holds several pieces, it receives several shares. Strict pro rata across the collection.
- Idempotent per epoch. A stuck run resumes with the same
--epochidentifier and never double pays. - Default mode is dry. Pass
--executeto actually send.
House style
The gallery's data.json is checked at build time and refuses to ship if any dash character is present, anywhere. Dashless prose, base58 transaction signatures, plain text everywhere. The check fails the build, not the visitor.
Open source platform
The entire stack lives on GitHub. Image prompts, mint scripts, monitor, qualifier, airdrop, ownership tracker, fee distributor, the site you are reading right now. Any art collection can fork this and use the same mechanic to reward its holders directly from coin fees and royalties, without an intermediary. abstract is the first collection on the platform; it does not need to be the only one.