Вики ZooBC
Приложения и разработка на ZooBC

Идеи проектов

В ZooBC нет виртуальной машины, поэтому никто не развёртывает в нём контракты. Вместо этого он предлагает большой набор готовых типов транзакций, и хороший проект их сочетает: цепочка — это арбитр и реестр, а приложение — его лицо, часто одна веб-страница (приложение на одной HTML-странице). Каждая идея ниже использует только типы транзакций, которые узел уже исполняет, и к каждой прилагается подвох, о котором стоит знать разработчику.

«Оплата рекой» на LiquidPayment и LiquidPaymentStop и другие идеи, построенные тем же способом.
«Оплата рекой» на LiquidPayment и LiquidPaymentStop и другие идеи, построенные тем же способом.

Платежи

Оплата рекой

LiquidPayment (тип 6) блокирует сумму в ZBC или токене, которая равномерно начисляется получателю в течение выбранных complete_minutes; в конце вся сумма выплачивается автоматически. LiquidPaymentStop (тип 262), отправленная любой из сторон, выплачивает долю, начисленную к этому моменту, а остальное возвращает. Странице остаётся только рисовать уровень воды. Полезно знать: раздел следует времени между метками времени двух транзакций, а доля получателя округляется вверх: 10 000 000 единиц на 3 минуты, остановленные через 66 секунд, дают получателю 3 666 667 единиц, а 6 333 333 возвращаются (ликвидные платежи (потоки)).

Залог за ущерб

Арендатор отправляет залог транзакцией SendZBC через эскроу, называя утверждающего, вознаграждение и срок (эскроу). Утверждающий может утвердить — и сумма уйдёт арендодателю — или отклонить — и она вернётся арендатору; вознаграждение утверждающий получает в любом случае. Если никто не действует, первый блок после срока возвращает арендатору сумму и вознаграждение. Подвох: аренда эскроу платится при создании и никогда не возвращается, а срок за пределами досягаемости обрезки истории отклоняется, если только депозит survival транзакции не оплачивает её хранение на такой срок.

Семейный аккаунт

LinkAccount (55), SetMemberPermissions (57), UnlinkAccount (56) и TransferGroupControl (58) дают семье один баланс, за которым стоят до 100 адресов (группы аккаунтов). Подвох: для вступления нужно согласие вступающего адреса, и оно переносит в группу всё, чем он владеет; новый участник может только принимать, пока контролёр не выдаст ему права; а участник, который уходит, ничего с собой не забирает.

Игры

Аркада костей

CreateApp с типами от 16 до 19 (две кости, подбрасывание монеты, рулетка и слоты) играет против пула приложений. Страница показывает результат примерно через 30 секунд и может читать /api/v1/apps/pool, чтобы показать наибольшую ставку, которую допускает каждая игра. Подвох: ставка, наибольшая выплата которой превышает 5 % пула, отклоняется, а очень крупный выигрыш может выплачиваться в течение нескольких блоков (одиночные ставки).

Киоск крестиков-ноликов

Тип 1 с CreateApp, JoinApp, AppMove и ClaimAppTimeout (многопользовательские приложения). Подвох: каждый ход — транзакция со своей комиссией и ожиданием блока; игрок, который ушёл, удерживает игру 240 блоков, прежде чем другой сможет её потребовать; а аккаунты с ключами в стиле Ethereum или Bitcoin занять место не могут.

Молниеносная дуэль

Игра-канал на двоих, урегулированная транзакцией SettleApp (приложения-каналы): ходы летают между игроками в виде подписанных ваучеров, а цепочка видит только ставки и урегулирование. Подвох: ваше приложение должно передавать ходы между игроками (официальный кошелёк использует ретранслятор), сохранять каждый полученный подписанный ход и следить за окном оспаривания в 240 блоков.

Токены и торговля

Кофейные штампы

IssueToken (тип 10) создаёт токен-штамп с 0 знаков после запятой, так что он перемещается целыми единицами; TransferToken (11) вручает штамп клиенту; BurnToken (13) расходует штампы у стойки (выпуск токена). Подвох: BurnToken работает только с токеном, выпущенным как погашаемый, и сжечь единицу может только её держатель; а токен живёт, лишь пока оплачивается его содержание (содержание токена (продление)).

Киоск обмена

CreateSwapOffer (18), AcceptSwapOffer (19) и CancelSwapOffer (20) создают доску атомарных обменов между любыми двумя активами (предложения обмена). Подвох: один тейкер платит всю запрашиваемую сторону, без частичного исполнения, а истечение срока предложения лишь блокирует его принятие, поэтому предложение с истёкшим сроком остаётся заблокированным, пока мейкер его не отменит.

Записи и сообщения

Штамп хеша

Транзакция, сообщение которой несёт SHA-256 файла, показывает, что файл существовал, когда был создан этот блок, а FundLongevity (52) или поле survival сохраняет её после обрезки истории (плата за сохранение данных (долговечность)). Страница /verify шлюза вычисляет хеш в браузере и ищет его в цепочке (проверка загруженного файла). Подвох: без депозита долговечности обычные узлы обрезают штамп через 30–60 дней, а первая FundLongevity должна поступить в пределах одного интервала снимков, около 30 дней.

Запечатанные открытки

Зашифрованное сообщение с пометкой «ZBE1», запечатанное ключом получателя, может нести до 268 байт текста (подписанные и зашифрованные сообщения). Подвох: запечатан только текст; сама транзакция — с отправителем, получателем и временем — так же публична, как любая другая.

Вход через ZooBC

Сайт показывает одноразовый вызов, пользователь подписывает его как сообщение ZBC-MSG-v2 с помощью публичных инструментов — подписью Ed25519 над SHA3-256("ZBC-MSG-v2" ‖ хеш генезиса ‖ сообщение), — а сайт проверяет подпись по ключу аккаунта. Подвох: подписание сообщений не входит в консенсус, и у узлов нет для него маршрута, поэтому сайт проверяет подпись сам; а официальный веб-кошелёк сообщения не подписывает.

Что требует изменения узла

  • Автоматический маркетмейкер. В ZooBC нет пулов AMM — так решено; его биржа — это книга ордеров плюс предложения обмена (рынки и ордера).
  • Solidity или любой контракт EVM. Виртуальной машины нет.
  • Новая игра, например покер. Правила игр нельзя загрузить в виде скриптов; новой игре нужны новые правила в узле.
  • Краш с кнопкой вывода выигрыша. Краш — одиночная ставка, цель которой фиксируется заранее; хода, позволяющего забрать выигрыш, нет.

См. также