Reward what people actually do on-chain (holding your NFT, stacking your token, staking, voting, hitting a tier) verified live from the blockchain, with no screenshots and no honor system. If a wallet holds the asset, has staked, made the deposit, or crossed a threshold, the quest verifies it directly against the chain and pays out automatically.
What it is
Two families of on-chain quests, both verified in real time:
- Reward wallets that hold a specific NFT collection.
- Reward wallets that hold a minimum balance of a token.
- Set any threshold you like to separate casual from committed.
- Read any public, read-only function on any verified contract.
- Reward when the result meets a condition you set.
- Staked, whitelisted, voted, reached a tier, and more.
There’s no manual review, no uploads, and no way to fake it. A wallet either meets the on-chain condition or it doesn’t, measured against live chain state the instant a user claims.
Supported chains
Holding and smart-contract quests run across the major EVM networks.
| Chain | Holding quests (NFT / token) | Smart-contract quests |
|---|---|---|
| Ethereum | Yes | Yes |
| Base | Yes | Yes |
| Arbitrum | Yes | Yes |
| Optimism | Yes | Yes |
| Polygon | Yes | Yes |
| BNB Chain | Yes | Yes |
| Avalanche | Yes | Yes |
| Solana | On the roadmap* | (EVM only) |
What you can do
Holding quests
- Reward anyone holding an NFT from a specific collection: membership pass, PFP, access token.
- Reward wallets that hold at least X of your token. Set any minimum you like.
- Gate rewards to a tier of holders (e.g. “hold 1,000+” vs “hold 10,000+”) by running multiple quests with different thresholds.
Smart-contract quests
- Point at any contract and read a single public, read-only function.
- Use functions that take no inputs (a global flag or counter) or a single wallet input, which Loyalty Stacker fills in automatically with the claiming user’s wallet, so each user is checked against their own on-chain status.
- Pull the contract’s interface (ABI) automatically from the block explorer when the contract is verified, or paste it in for unverified contracts. No engineering ticket required.
Compare the result with a simple operator:
- True / false checks
- e.g. is whitelisted?, has staked?
- Number checks
- equals, greater than, less than, or greater/less-than-or-equal, e.g. staked balance ≥ 500, tier ≥ 2, votes ≥ 1.
Examples & use cases
Each smart-contract recipe reads one value from a contract and compares it. Set the goal, Loyalty Stacker reads the value live, applies the operator, and pays out on a pass. Filter by family or search the catalogue below.
“Hold a Loyalty Stacker Genesis Pass” → reward the moment a holder claims. Great for membership perks and holder-only campaigns.
- Reads
- NFT balance (collection)
- Operator
- > 0
“Hold at least 100 $TOKEN” → reward your committed holders, not just anyone who touched the token once.
- Reads
- Token balance
- Operator
- ≥ 100
Run “Hold 1,000+” for silver and “Hold 25,000+” for gold, each with its own reward, just multiple quests with different thresholds.
- Reads
- Token balance
- Operator
- ≥ 1,000 / ≥ 25,000
- Reads
- staked balance (wallet)
- Operator
- > 0
- Reads
- staked balance (wallet)
- Operator
- ≥ X
- Reads
- isWhitelisted(wallet)
- Operator
- is true
- Reads
- minted count (wallet)
- Operator
- > 0
- Reads
- governance vote count (wallet)
- Operator
- ≥ 1
- Reads
- voting power (wallet)
- Operator
- ≥ X
- Reads
- LP token balance (wallet)
- Operator
- ≥ X
- Reads
- NFT balance (wallet)
- Operator
- > 0
- Reads
- tier / level (wallet)
- Operator
- ≥ N
- Reads
- current deposit/vault balance (wallet)
- Operator
- ≥ X
- Reads
- a global counter (e.g. total members)
- Operator
- ≥ N
- Reads
- a status flag (wallet)
- Operator
- is true
contract → 0xA1b2…f9C3 (Base, verified)
function → isWhitelisted(address)
input → claimant wallet 0x9f3a…2a1c (filled in automatically)
returns → true
rule → is true → PASS → Early-access role grantedRewarding trading volume & total deposits
Cumulative metrics like lifetime trading volume or total historical deposits aren’t a single number sitting on most contracts, so they can’t always be read with one function call. There are two reliable ways to reward them: choose the source rather than asking us to replay the chain.
Many staking, vault, and points contracts already track a running total. If that value is public and read-only (e.g. totalDeposited(wallet), a cumulative-volume figure, or a points figure) a smart-contract quest reads it directly: “deposit balance ≥ X”, “points ≥ X”. Done.
function → totalDeposited(address)
input → claimant wallet
returns → 12,400
rule → ≥ 10,000 → PASS → “Depositor” reward grantedBottom line: volume and deposit rewards are absolutely possible. You just pick the source (a readable contract value or an aggregating API) rather than asking Loyalty Stacker to replay the chain.
Why it matters
Capital staked, tokens held, votes cast: these are the actions that signal your strongest community members. Now you can pay them back for it.
Every claim is verified live against the blockchain. No screenshots to police, no fake submissions to refund.
Point at a contract, pick a function, set a threshold. The interface is auto-detected and you can test it before you launch, no developer in the loop.
Stack holding quests, staking checks, governance participation and tier ladders into a single journey that mirrors how your protocol actually grows.
One program spans Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain and Avalanche.
How it works
Both families verify against live chain state at claim time, so rewards always reflect where a wallet stands right now. The setup differs slightly. Switch between them below.
- 1Paste the asset contractChoose a chain and paste the NFT or token contract address. Loyalty Stacker auto-fills the asset’s name, symbol and image so you can confirm you’ve got the right one.
- 2Set the minimumFor token quests, set a minimum amount to qualify. NFT quests default to “holds at least 1.”
- 3Read current holdings on claimWhen a user claims, Loyalty Stacker reads that wallet’s current holdings live from the chain and checks them against your minimum.
- 4Pass or fall shortMeet the bar → the quest completes and the reward (points and/or a badge) is granted instantly. Fall short → the user sees exactly how much they hold versus what’s needed.
Want to reward off-chain actions too: games played, spend, subscriptions, KYC? Pair these with API Integration quests, or step back to the quest engine overview.