Приложения-каналы
В цепочке каждый ход игры стоит одной транзакции и некоторого ожидания блока. Приложение-канал снимает эту стоимость для двух игроков: они вносят ставки в цепочке, обмениваются ходами напрямую в виде подписанных ваучеров и в конце помещают в цепочку одно урегулирование. Затем каждый узел воспроизводит подписанные ходы через тот же движок правил, который судит игру в цепочке.
Открытие канала
Игра-канал создаётся транзакцией CreateApp с флагом channel, равным 1. Она требует ровно двух мест, и обе ставки вносятся в цепочке как обычно. С этого момента ходы передаются вне цепочки: AppMove, ResignApp или ClaimAppTimeout, отправленные для игры-канала, — оплаченные пустые операции.
Подписанные ходы
Каждый ход — ваучер, подписанный местом, которое его делает, над таким дайджестом:
SHA3-256(app id (LE8) ‖ seq (LE4) ‖ SHA3-256(state before) ‖ move)
Подпись проверяется в соответствии с типом аккаунта этого игрока (ключи и типы аккаунтов). Поскольку дайджест охватывает идентификатор приложения, порядковый номер хода и состояние до хода, подписанный ход нельзя повторно использовать в другой игре или в другой позиции. В официальном кошельке ваучеры передаются между двумя игроками через ретранслятор — тот же сервис, который передаёт звонки (ретрансляторы).
Урегулирование
Любой из игроков может подать SettleApp (тип 39). Её тело содержит идентификатор приложения и final_seq, который должен равняться числу ваучеров, а за ними — каждый ваучер: место, длина хода, ход и 64-байтовая подпись. Одно урегулирование несёт не более 1 024 ваучеров.
Каждый узел воспроизводит ваучеры от состояния игры через тот же движок, проверяя каждую подпись и каждую очерёдность хода, и записывает результат. SettleApp, которая не проходит — потому что её нельзя разобрать, она называет не то приложение, исходит от того, кто не сидит за игрой, или несёт неверный ваучер, — бесплатная пустая операция: ничего не взимается. Подать её могут только два сидящих за игрой игрока.
Окно оспаривания
Урегулирование — это заявление, записанное со сроком через 240 блоков. В течение этого окна любой из игроков может подать SettleApp с бо́льшим final_seq, то есть более длинную действительную цепочку ходов. Каждое принятое перекрытие заменяет заявление и перезапускает 240 блоков. Когда окно закрывается, применяется последнее заявление:
- игра выиграна: победитель получает банк за вычетом рейка 1 %;
- игра закончилась вничью: обе ставки возвращаются;
- игра ещё продолжалась: место, чьи часы идут, проигрывает, а банк за вычетом рейка уходит другому игроку.
Как играть безопасно
- Сохраняйте каждый полученный подписанный ход. Последняя подписанная позиция — ваша защита от урегулирования, которое останавливается раньше времени.
- Следите в цепочке за урегулированиями своих игр: заявление, на которое никто не ответил в течение 240 блоков, остаётся в силе.
- Не ждите ни приватности, ни скидки. Каналы рассчитаны ровно на два места, результат после урегулирования публичен, а решённая игра платит тот же рейк 1 %, что и игра в цепочке.