龙渊智库 Kronos Nexus

Dungeon Saga 链上 PvP 合约:挑战 / 验证 / 接受 与不可操纵的随机

本篇属于 Dungeon Saga(DungeonSaga)资料百科,讲的是官方蓝图里的规则与数值 —— 看完可以接着用站内的组合 / 估值工具,把它们算成英雄的 Total Power。

最后更新:2026-09-19 内容依据:官方蓝图(出处见文末)

没有服务器:合约就是竞技场

蓝图 Phase 4 → On-Chain PvP Contract System 的设定是:

  • 官方发布一个 PvP Contract Template(sCrypt);
  • 每个玩家部署自己的实例 —— 这个实例既是他的竞技场,也是永久的战斗记录;
  • 挑战通过质押 HP 代币发起;应战方在接战之前可以核对挑战方合约的字节码是否与官方模板一致,

防止被恶意合约坑;

  • 两边都提交后,合约确定性地跑完全部战斗逻辑并结算奖励。没有服务器、不需要信任、全部在链上。

三步流程(含状态机)

步骤谁做做什么状态
1. 挑战A向自己的 PvP 合约质押 HP,并指定对手与超时(官方示例:stakedHP: 20、timeout: 144 个区块)PENDING
2. 验证并接受B先核对 A 的合约字节码与官方模板一致,再质押自己的 HP 接战;B 一旦质押,A 就不能撤回RESOLVED
3. 撤回A可选:若 B 未在超时前接受,A 可以取回质押的 HPCANCELLED

随机从哪来(为什么不能作弊)

战斗结果需要随机数,蓝图的做法是由双方交易共同决定种子:

masterSeed    = sha256(TX2.hashPrevouts + TX1.txid)
roundSeed[n]  = sha256(masterSeed + n)

每一回合从该回合的种子字节里取四项判定:

critCheck   = seed[0]   // 暴击
evaCheck    = seed[1]   // 闪避
dmgVariance = seed[2]   // 伤害浮动 ±10%
extraCheck  = seed[3]   // 额外行动

结算结果写成 { winner, rounds, hpLeft, combatLog, rewardTx }。

官方给的六条公平性理由

  1. 两步承诺:A 先提交(挑战 + 质押),B 后提交(接受 + 质押);种子依赖两笔交易的上下文,

在各自上链时才最终确定,任何一方都无法操纵。

  1. 不可预测:masterSeed 里的 TX2.hashPrevouts 只有在 B 提交时才定稿,

所以双方都无法在提交前算出结果。

  1. 不可反悔的锁定:B 质押后 A 不能撤回 —— 双方被锁在同一场战斗里,没有中途退赛与中途改数。
  2. 确定且可验证:同样的输入永远得到同样的结果,合约在 OP_CAT Layer 的 BVM 上执行每一条计算,

任何人都能重放整场战斗并逐回合核对。

  1. 合约可核对:接战前 B 把挑战方字节码与官方模板做哈希比对,不一致就拒绝。
  2. 永久战绩:每个玩家的合约保存完整战斗史 —— 对手、质押、结果、完整日志,全部永久上链。

官方算例(Knight vs Grum)

质押不对等也能开打:Knight 质押 20、Grum 质押 10。

  • 先手:Knight(SPD 116 > 110)
  • 额外行动:无(速度差 6 < 50)
  • 结果:Knight 获胜,剩余 31 HP;Grum 在第 12 回合被击败

逐回合日志由 roundSeed[n] 驱动,暴击/闪避/浮动/额外行动四项判定都在日志里可以一条条复核。

官方出处

  • Phase 4 → On-Chain PvP Contract System(流程、验证、状态机)
  • Phase 4 → Seed Generation / Round Resolution(种子与判定)
  • Phase 4 → Why is this fair?(六条)
  • Phase 4 → Worked Example(Knight vs Grum 的合约交易与日志)

相关阅读:战斗公式:HP / ATK / DEF / SPD · 角色克制与平衡 · 常见问题

按你自己的碎片算一套

规则看完,接着算(前两个免登录):在售最佳组合 · 碎片估值 · 英雄估值 · 免费试用(当前在售碎片最佳组合) · 登录后使用完整工具 · 返回资料百科目录