HeistJack is a player-versus-player casino: you play against real people for a real pot, never against the house. The stakes go into a smart-contract escrow, the result decides who takes them, and the house never plays and never holds your money.
The games: blackjack, where the better hand wins; PvP Leonida Roulette, one shared wheel where your chance is exactly your share of the pot; the trading duel, where each player trades an identical $1,000 virtual bankroll at live oracle prices and the bigger gain wins; and the weekly lottery, one $HEIST a ticket and one wallet takes the pot. They share the same escrow and the same kind of timers, and the house takes a flat 1% of every settled pot except the lottery's, which is 5%.
How the games work
Five games, one rule behind all of them: you play another player, never the house. We hold nothing, we take no side, and we cannot see a hidden hand. The contract settles every game by itself and keeps a flat 1%: the only thing the house ever takes (the lottery is the one exception, at 5%).
Blackjack
Two players, one deck each, no dealer. You play your hand in private; your opponent sees only how many cards you took. The contract scores both and pays the winner.
0,02 โ 10 SOL
or 1 โ 1 000 USDT
1%
house edge, flat
~1 hour
to play your hand
1
Bet and get your hand
Pick a stake in SOL or USDT and lock it in the contract. Your two cards appear about a second later, drawn from verifiable randomness and a secret only your browser holds.
2
Play it privately
Hit or stand in your browser. Each card comes from a block that has not happened yet, so nobody, not us, not you, can know it in advance.
3
Your table opens
When you stand, your game appears in the lobby. Your cards stay sealed behind a commitment you made before you saw them.
4
It settles itself
Someone matches your stake and plays in the open. The contract reveals your hand, scores both and pays the winner. You do not need to be there.
The small print
J, Q and K are 10. An Ace is 11, or 1 if 11 would bust you. Closest to 21 wins; over 21 is a bust.
Equal scores, or both bust, is a push: both stakes returned, minus the fee.
Do not stand in time and your hand auto-stands on the cards you hold. Nothing locks up.
A card drawn but never recorded on-chain within about 90 seconds counts as a bust, so walking away from a bad card never pays.
Nobody joins within 24 hours? Reclaim your whole stake.
If your sealed hand is never revealed within 24 hours of your opponent finishing, you forfeit and they take the pot.
PvP Leonida Roulette
One wheel, everyone at once, no dealer and no house side. The pot is only the players' own bets, and your chance to win is exactly your share of it. Stake a fifth of the pot and you own a fifth of the wheel.
0,02 โ 10 SOL
per wallet
20
wallets per round
2 min
countdown, once
1
Put a bet on the wheel
Stake anything from 0,02 to 10 SOL. Bet as many times as you like; your bets merge into one slice.
2
The countdown starts at two
The moment a second wallet joins, two minutes run. Last-second bets are allowed on purpose.
3
The wheel is armed, then spun
Only after betting closes does the contract ask for a random value, so the result cannot exist while anyone can still bet.
4
One lamport decides it
The draw picks a single lamport out of the pot and pays whoever staked it, in the spin's own transaction.
The small print
The bigger your bet, the bigger your chance, and the bigger your loss when the wheel passes you. One round, one winner.
Alone at the table for an hour? Take your whole stake back, no fee.
Spinning is permissionless. Our keeper does it within seconds; if it is down, any player can spin instead.
If the randomness never arrives, the round is cancelled and every bet is refunded.
A round's pot also pays the randomness oracle a small fixed fee, so the winner receives the pot minus that and the 1%.
Street Duel
The same idea as the table, played on price instead of cards. Both players get an identical $1,000 of virtual money and trade real market prices. Whoever grows it more takes the pot.
0,02 โ 10 SOL
or 1 โ 1 000 USDT
$1,000
virtual bankroll each
5 min โ 72 h
trading window
1
Stake and pick a window
Lock your stake and choose how long each player gets to trade, from 5 minutes to 72 hours. Your opponent matches both.
2
Start when you are ready
You have 24 hours after the match to place your first trade. That trade starts your own window. The two run independently, so you never wait on anyone.
3
Trade a $1,000 bankroll
Long or short on SOL, BTC and ETH. No leverage, no spread, no trading fees.
4
Windows close, contract pays
Open positions are valued at that minute's closing price. Once both sides are done, the higher equity takes the pot.
The small print
A trade carries no price. It is filled at the first quote published after it lands, so nobody can hold a signed order and pick their moment.
Trading stops a few seconds before your window closes, so the closing price cannot be known while you can still act on it.
A player who never trades loses to one who did. If neither trades, both stakes come back minus the fee.
Nobody joins? Cancel for a full refund, and it returns automatically if you forget.
Lottery
One $HEIST a ticket, one draw a week, one wallet takes the pot. $HEIST is the coin you farm by playing here, so this is somewhere to spend it โ and the house puts 200 HEIST into every draw before a single ticket is sold.
1 HEIST
a ticket
Every Sunday
20:00 UTC
200 HEIST
put in by the house
1
You farm the coin
$HEIST is minted by playing โ blackjack, the wheel, a duel, a race. Volume is the only way any of it exists.
2
A ticket costs one
One $HEIST, one ticket, as many as you like. The coin leaves your wallet and goes into that draw's pot.
3
Tickets close, then randomness is asked for
The same rule the wheel and the race run on: nothing can be bought after the oracle has been asked.
4
One wallet takes the pot
Every ticket bought into it, plus the house's 200 HEIST, paid out in one go to the drawn ticket's owner.
The small print
The one game here that is not 1%. The house takes 5%, and the four extra points are what pays back the 200 HEIST it pre-fills every draw with. Both figures are compiled into the contract.
The draw mixes two halves โ keccak(vrf value, lock slot hash) โ so neither the oracle nor the slot leader holds both of them.
The winner is an index, not a judgement: ticket = draw mod tickets sold, and the wallet that bought that ticket takes the pot.
The house's pre-fill is not a ticket, so it can never be drawn. It can only ever be won by a player.
One ticket, one chance. Buy ten and you hold ten of the tickets in the pot, exactly as a bigger roulette bet buys a bigger share of that wheel.
Paying out is permissionless, like every other game here, and the draw can be recomputed afterwards from the draw's own account.
The moment is arithmetic, not a setting: draw N is due at epoch + N weeks and the contract refuses every other index.
Swamp Derby
Twenty horses, one buyer each, and the round runs as soon as it fills. Buy a horse and you own a twentieth of the pot's chance โ the same arithmetic as the wheel, with something to watch.
0,05 SOL
a horse
20
horses a round
3 min
countdown, once
1
Buy a horse
0,05 SOL a horse, one horse to a buyer. Nothing is drawn while a slot is still for sale.
2
The round locks, then randomness is asked for
No stake can be placed after the oracle has been asked, which is the same rule the wheel runs on.
3
The draw mixes two halves
keccak(vrf value, lock slot hash) โ so neither the oracle nor the slot leader holds both of them.
4
The race is a rendering
ticket = draw mod horses sold, and the horse at that index wins. The animation arrives at the order the contract already recorded; it decides nothing.
The small print
The rest of the finishing order is a seeded shuffle of the same draw, so two people replaying one race see the same thing.
Every round draws its 20 runners from a field of 100 names, fixed by the round's own number โ so the horses change from race to race and everybody watching one race sees the same twenty.
A round's pot also pays the randomness oracle a small fixed fee, so the winner receives the pot minus that and the flat 1%.
If the randomness never arrives, the round is cancelled and every horse gets its 0.05 SOL back โ less an even share of the 0.0005 SOL the round paid the oracle, if it had got as far as being locked.
Settling is permissionless: our keeper does it within seconds, and any player can do it instead.
The money
The house takes a flat 1% of a settled pot, except the weekly lottery, which takes 5%. There is no dealer edge, no rake on top and no spread. That is everything.
That 1% does not stay with us: it buys $HEIST on the open market and hands it to everyone staking, so the casino's income belongs to the people who hold the token.
Every settled game farms $HEIST for both players, by the dollar value wagered, win or lose. 600,000 of the 1,000,000 supply can only ever enter circulation this way.
Creating a game locks a small amount of network rent. It is not a fee: the contract returns it automatically when the game finishes.
Your first game from a wallet sets up your own on-chain accounts, once. They are reused for every game after it.
What protects you
Non-custodial. Your stake never reaches us. It sits in an on-chain escrow that only the contract's own rules can move, and it moves straight to the winner's wallet.
We cannot rig a hand. Your bet is locked before any card exists, the randomness is produced by an oracle we do not control, and each card comes from a block that has not been produced yet.
We cannot see your hand. It is sealed behind a commitment made in your browser before you saw the cards. Not even we can open it early.
Automatic settle. The moment a game finishes our keeper sends the settling transaction and the program pays the winner straight out of escrow, usually within seconds, and because settling is permissionless, any player can send it instead if our keeper is ever down.
$HEIST has no freeze authority and its mint is controlled by the program, not by a person. Nobody can freeze your tokens or print more.
Every outcome is checkable. Each hand, spin and trade can be re-derived from what is on chain. See provably fair for how to do it yourself.