Пул приложений
В одиночные игры ZooBC играют против заведения, а заведение — это пул приложений: встроенный в протокол аккаунт, ключа к которому нет ни у кого. Он принимает каждую одиночную ставку, выплачивает каждый одиночный выигрыш и собирает рейк многопользовательских игр. Его деньги движутся только по правилам приложений.
Бесключевой аккаунт
Адрес пула — фиксированное имя, а не публичный ключ: 00000000 ‖ "ZBCAPPS" ‖ 25 zero bytes. Поскольку ключа нет, никакая подпись никогда не сможет потратить с него средства, в том числе подпись ZooBC Foundation. Каждый узел вычисляет один и тот же исход каждой игры и делает один и тот же платёж, поэтому никто не утверждает выплату вручную. Пул долголетия и пул хранения — аккаунты протокола того же рода (пулы).
Пул пополняется в генезис-блоке; сколько он содержит в ZBC и в генезис-монетах, задаёт конфигурация генезиса каждой цепочки. Любой может в любой момент прочитать его балансы с помощью GET /api/v1/apps/pool, который возвращает zbc, tokens[] и channels.
Деньги на входе и на выходе
- Вход: каждая одиночная ставка — в момент исполнения ставки, а также рейк 1 % каждой многопользовательской игры или игры-канала, не закончившейся вничью.
- Выход: каждый одиночный выигрыш.
- При проигрыше ничего не движется: ставка уже в пуле.
Каждый актив учитывается отдельно. Ставка в токене выплачивается из баланса пула в этом токене, а ограничения пула вычисляются для каждого актива.
Каждая таблица одиночных выплат в среднем возвращает чуть меньше ставки: около 1 % остаётся в пуле при подбрасывании монеты, около 10,7 % — в слотах (одиночные ставки). Вместе с рейком эта маржа и позволяет пулу со временем продолжать платить победителям.
Два ограничения, которые его защищают
Пул, который выплачивает каждый выигрыш, не должен опустошаться одним удачным результатом или тем, кто смог бы повлиять на сид блока. Его охраняют два правила.
Предел ставки. Прежде чем принять одиночную ставку, узел вычисляет наибольшую выплату, которую ставка вообще может дать, и сравнивает её с 5 % баланса пула в активе ставки. Ставка сверх предела отклоняется. При 100 000 ZBC в пуле ни одна отдельная ставка не может выиграть больше 5 000 ZBC; наибольшая ставка для каждой игры приведена в статье одиночные ставки.
Лимит на блок. Начиная с версии 0.5.8 блок может выплачивать одиночные выигрыши только в пределах недавнего притока в пул: суммы одиночных ставок в этом активе за последние 5 760 блоков, то есть сутки. Превышение записывается на завершённое приложение как задолженная выплата. В каждом следующем блоке задолженные выплаты погашаются первыми, в порядке идентификаторов приложений, из лимита этого блока, пока долг не будет погашен.
Ставка разрешается ровно один раз. Ничего не разыгрывается заново, ничего не отходит пулу, и ставка никогда не возвращается: лимит задерживает крупный выигрыш, но не уменьшает его. Привязка выплат каждого блока к тому, что игроки поставили недавно, ограничивает, какую часть генезис-средств может раздать один блок.