Skip to content
ⓘ

Live on Stellar mainnet and testnet

Solve the riddle. Win the prize.

Anyone can lock XLM behind a riddle. Solve it and the prize is yours. Bots can't steal it.

… XLM
paid to solvers · last 7 days
…
verified claims · last 7 days
…
chests created · last 7 days
BUILT ON
  • Stellar
  • Soroban
  • snarkjs
  • OpenZeppelin
  • Passkeys

01 How it works

Gamified escrow.

A prize locked behind a riddle. Solve it, claim it.

01

Solve a riddle

Every chest locks a prize behind a question.

hash → 0x2df9…ab19

02

Your answer is checked, and stays secret

A zero-knowledge proof shows you know it without revealing it.

proof → verified

03

Claim your prize

Right answer? The contract pays you. Nobody else can take it.

+10 XLM

Who uses it

Pay people who know the answer.

Ask a question, lock a prize behind it, share a link. Three ways to use it:

Communities

Run a prize puzzle for your community.

Post a riddle in Discord or Telegram. Whoever solves it wins XLM, paid automatically. No one has to send prizes by hand.

Brands & marketing

Turn a campaign into a game.

Put a riddle on your product, ad or event page. Fans who solve it win a real prize, and you set the budget up front.

Hackathons & events

Pay bounties and quests without a spreadsheet.

The answer is the flag. Solve it, get paid. The prize is locked from the start, and what isn’t claimed comes back to you.

Create a chest

02 Attack demo

Bots can't steal your prize.

Even if a bot copies your answer, the prize still goes to you.

Run the demo

illustrative replay

$ watch mempool --chest 000600.00 you submit π sealed to GA7Q…X4ZK00.41 bot copy π, resend from GBOT…7Q100.80 chain verify(π, recipient=GBOT…7Q1)REJECTED proof bound to GA7Q…X4ZK, not GBOT…7Q101.20 chain verify(π, recipient=GA7Q…X4ZK)VERIFIED prize released 10 XLM$ ▌

Who it is for

Built for both sides of the riddle.

Players

Bots can’t steal your win.

Your answer stays private. Nobody can copy it and take your prize.

Explore chests →

Creators

Lock a prize behind any riddle.

Add XLM, set a deadline, share the link. Nobody solves it? You get it back.

Create a chest →

Builders

Build your own.

Open-source contracts and circuits on Stellar. MIT license.

Read the docs →

03 Stellar × ZK

Built on Stellar.

Privacy

Answer stays secret

You prove you know it without showing it.

Cost

0 XLM to play

We cover the network fees for you.

Speed

Paid in seconds

Stellar confirms the payout in about 5 seconds.

Prize

Real XLM

Sent straight to your wallet. No setup needed.

… XLM
paid to solvers (testnet, last 7 days)
…
verified claims (last 7 days)
…
chests created (last 7 days)

Live data from the last 7 days on testnet.

04 Security

What protects a chest.

Owner

Only you can claim

Your answer is tied to your address. A copy won't work for anyone else.

Once

One claim per answer

The same answer can't be used twice.

Coming soon

One contract per chest

Each chest will get its own contract, so a problem in one can't touch the others.

Kuyfi, Before the Breach.

Security-scanned contracts.

We test our live contracts with Kuyfi, an open-source scanner that attacks them the way a hacker would.

View Kuyfi on GitHub →

Contracts scanned with Kuyfi

Kuyfi scan0 crit0 high0 medi0 low0 infoReport ↗

Black-box scan of the same bytecode on testnet, not a full audit. A full audit is planned via the SCF Audit Bank. Mainnet has prize caps.

SDK · @findloot/sdk

Put a chest in
your own app.

Create chests and pay out prizes from your own app with a few lines of TypeScript.

Read the SDK docs →npm i @findloot/sdk
quickstart.tsTypeScript
$ npm i @findloot/sdkimport { createChestClient, fingerprintAnswer } from "@findloot/sdk";const { fingerprintHex } = await fingerprintAnswer("alexandria", 7n);const client = createChestClient({ publicKey });const tx = await client.create_chest({ creator, fingerprint, … });const id = (await tx.signAndSend({ signTransaction })).result.unwrap();

The next chest is waiting.

Bring a wallet and a sharp mind. We bring the bots that will fail.