The apps pool
The solo games on ZooBC are played against the house, and the house is the apps pool: an account built into the protocol that nobody holds a key for. It takes every solo stake, pays every solo win and collects the rake of multiplayer games. Only the app rules move its money.
A keyless account
The pool's address is a fixed name, not a public key: 00000000 ‖ "ZBCAPPS" ‖ 25 zero bytes. With no key, no signature can ever spend from it, the ZooBC Foundation's included. Every node computes the same outcome of every game and makes the same payment, so nobody approves a payout by hand. The longevity pool and the storage pool are protocol accounts of the same kind (pools).
The pool is funded in the genesis block; how much it holds in ZBC and in the genesis coins is set by each chain's genesis configuration. Anyone can read its balances at any time with GET /api/v1/apps/pool, which returns zbc, tokens[] and channels.
Money in, money out
- In: every solo stake, at the moment the bet executes, and the 1 % rake of every multiplayer or channel game that does not end in a draw.
- Out: every solo win.
- On a loss nothing moves: the stake is already in the pool.
Each asset is kept apart. A bet staked in a token is paid from the pool's balance in that token, and the pool's limits are computed per asset.
Every solo payout table returns a little less than the stake on average: about 1 % stays with the pool on a coin flip, about 10.7 % on slots (solo bets). Together with the rake, this margin is what keeps the pool able to pay winners over time.
Two limits that protect it
A pool that pays every win must not be emptied by one lucky result, or by someone who could influence a block seed. Two rules guard it.
The bet cap. Before a solo bet is accepted, the node computes the largest payout the bet could ever produce and compares it with 5 % of the pool's balance in the stake's asset. A bet over the cap is refused. With 100,000 ZBC in the pool, no single bet may win more than 5,000 ZBC; solo bets gives the largest stake per game.
The per-block allowance. From version 0.5.8, a block may pay solo wins only up to the pool's recent inflow: the total of solo stakes placed in that asset during the last 5,760 blocks, one day. The excess is recorded on the finished app as an owed payout. At every following block, owed payouts are paid first, in the order of their app ids, out of that block's allowance, until the debt is cleared.
A bet is resolved exactly once. Nothing is drawn again, nothing is forfeited to the pool, and the stake is never refunded: the allowance delays a large win, it does not shrink it. Tying each block's payouts to what players staked recently limits how much of the genesis funds any single block can hand out.