ZooBC 维基
应用与在 ZooBC 上开发

通道应用

在链上,一局游戏的每一步走子都要花费一笔交易,还要等待出块。通道应用为两名玩家免去这项开销:他们在链上支付赌注,以签名凭证的形式直接交换走子,最后只把一次结算放上链。随后每个节点都用裁判链上对局的同一个规则引擎重放这些签名走子。

开设通道

通道游戏用 CreateApp 创建,并把 channel 标志设为 1。它要求恰好两个席位,双方的赌注照常在链上支付。从那以后,走子在链下传递:为通道游戏发送的 AppMove、ResignApp 或 ClaimAppTimeout 都是付费空操作。

签名走子

每一步走子都是一张由做出该步的席位签署的凭证,签名针对以下摘要:

SHA3-256(app id (LE8) ‖ seq (LE4) ‖ SHA3-256(state before) ‖ move)

签名按该玩家的账户类型进行检查(密钥与账户类型)。由于摘要涵盖应用的 id、该步的序号和走子前的状态,一步已签名的走子无法在另一局游戏或另一个局面中被重复使用。在官方钱包中,凭证通过中继在两名玩家之间传递,与承载通话的是同一项服务(中继)。

结算

任一玩家都可以提交一笔 SettleApp(类型 39)。它的交易体包含应用的 id 和 final_seq(必须等于凭证的数量),后面是每一张凭证:席位、走子的长度、走子本身和一个 64 字节的签名。一次结算最多携带 1,024 张凭证。

每个节点都从游戏的状态出发,用同一个引擎重放这些凭证,检查每个签名和每一回合,并记录结果。SettleApp 如果失败(无法解析、指向错误的应用、来自未入座的人,或携带无效的凭证),就是一次免费的空操作:不收取任何费用。只有两名已入座的玩家可以提交它。

签名走子放进一笔 SettleApp;每个节点重放它们;在 240 个区块内,更长的签名链可以推翻这一主张。
签名走子放进一笔 SettleApp;每个节点重放它们;在 240 个区块内,更长的签名链可以推翻这一主张。

挑战窗口

结算是一项主张,记录时附带一个 240 个区块之后的截止期限。在该窗口内,任一玩家都可以提交一笔 final_seq 更高的 SettleApp,也就是一条更长的有效走子链。每一次被接受的覆盖都会取代原主张,并重新开始 240 个区块的计时。窗口关闭时,最后一个主张被应用:

  • 游戏已决出胜负:赢家获得奖池扣除 1% 抽成后的部分;
  • 游戏以平局结束:双方的赌注都退还;
  • 游戏仍在进行:处于计时中的席位判负,奖池扣除抽成后归另一名玩家。
如果 Bob 什么也不做,他就判负;如果他及时提交更长的链,窗口重新开始,并应用重放得出的结果。
如果 Bob 什么也不做,他就判负;如果他及时提交更长的链,窗口重新开始,并应用重放得出的结果。

安全地对局

  • 保留你收到的每一步签名走子。最新的签名局面是你防范提前中止的结算的保障。
  • 留意链上与你的游戏有关的结算:240 个区块内无人回应的主张就会成立。
  • 不要期待隐私或折扣。通道只适用于恰好两个席位,结果一经结算即公开,决出胜负的对局与链上对局一样支付 1% 的抽成。

另见