登录 WarmUp
通行密钥:用手机或电脑自带的 Face ID、指纹或锁屏密码登录,不需要钱包;苹果和安卓设备会通过 iCloud 钥匙串或 Google 密码管理器同步到你的其他设备。钱包:用你自己的钱包(MetaMask、OKX、Trust 等)签一条消息登录,不发交易、不花 gas。
第一次登录会自动为你开一个 WarmUp 游戏账户和一个专属的 BSC 测试网充值地址。登录后可以在「登录方式」里再绑定另一种方式,两种都会回到同一个账户。
测试网 PoC:游戏账户的私钥由平台托管、代你签名下注,这样玩游戏时不用每次弹钱包。资产都是测试币。
-
领 tBNB 付手续费
BSC 测试网转账要一点点 tBNB 当 gas(0.001 就够很多次)。去 BNB Chain 官方水龙头 ↗,填你的钱包地址领取。已经有了就跳过。
-
领 100 tUSDT 到你的钱包
tUSDT 是测试币,平台免费发,不用拿 tBNB 换。每天 3 次。
-
从钱包转 tUSDT 到你的专属充值地址
tUSDT
销毁 wUSD,跨链桥在 BSC 测试网把等额 tUSDT 打到你填的地址。超过 1,000 需后台人工审核。
登录方式
只有一种登录方式,丢失后无法自己找回账户。建议再添加一个通行密钥或绑定钱包。
游戏的秘密(例如下注时生成的种子)只存在这个浏览器里。在一台设备下注、换另一台设备查看,这一局可能改用公开随机源开奖;回到下注的那台设备,仍然可以补交秘密。
规则
- 每次买钥匙:30% 分给本轮已持有钥匙的人(按钥匙数),58% 进奖池,10% 留给下一轮,2% 平台费。
- 倒计时归零时:最后买的人拿奖池 50%,全体持钥匙者分 30%,20% 进下一轮。
- 钥匙价格从 0.1 wUSD 起,每卖出 1 把涨 0.001。倒计时从本轮第一把钥匙开始,最长 3 分钟。
- 分红和奖金先记在合约里,点“提取到余额”转回你的 wUSD。
我的购买回执
最近购买
往轮赢家
实现方式
合约
Fomo3D 合约 —,部署在 WarmUp Chain(chain id 931931)。所有参数在部署时写死,平台改不了:钥匙起价 0.1 wUSD、每卖出 1 把涨 0.001;第一把钥匙开始 3 分钟倒计时,每把 +30 秒,最长 3 分钟;分配比例见上面“规则”。移植自 2018 年以太坊上的 Fomo3D,去掉了队伍、空投和推荐。
一次购买的完整流程
- 下单:你选好数量点“买钥匙”。你的游戏账户(私钥由平台托管)对这笔购买做 EIP-712 签名:轮次、数量、最高价(当前价 +5% 滑点)、nonce、截止时间。合约会验签,签名之外的任何改动都会被拒绝。
- 回执:平台立即签发一张回执,带全局递增编号和收单时间。页面通过链上的 ecrecover 预编译恢复签名人,并确认它持有游戏合约的 RELAYER_ROLE,才认这张回执。
- 上链:平台中继严格按编号顺序提交。能成交的调用
buyFor,事件OrderReceipted+KeysBought;不能成交的调用voidReceipt作废,事件ReceiptVoided,原因码:1 订单无效、2 余额不足、3 价格变动、4 本轮已结束。合约要求编号连续,跳号、重号都会被拒。 - 核对:页面按编号在链上查找你的每张回执,比对玩家和收单时间。不一致、超过 1 分钟未上链、或结束前收单却被以“本轮已结束”作废,都会标红报警,回执保存在本浏览器作为证据。
计时与结算
倒计时以回执上的收单时间为准,所以结束前收单的购买即使晚几秒出块也照样有效、照样续时。收单时间是平台说了算的,所以合约把它卡死在出块时间附近:不能晚于出块时间、不能早于出块时间 5 秒以上、不能倒退;倒计时结束 5 秒后任何购买都会被拒,只能结算——平台没法把一局“拖着不结”再塞进一笔倒填时间的购买。倒计时结束后等这 5 秒宽限期,endRound 才能调用(任何人都可以调用,平台守护进程会自动调用):最后一个买家拿奖池 50%,全体持有者按钥匙数分 30%,20% 加上每笔购买留存的 10% 进入下一轮。
分红与提取
每次购买的 30% 按钥匙数分给本轮已有的持有者,用“每把累计分红 + 个人扣减额”的方式记账,新买的钥匙只分之后的分红。取整一律对玩家不利一侧,保证合约里的钱永远够付所有人。分红和奖金先记在合约里,“提取到余额”调用 withdraw,钱只能转回你自己的账户。
边界
平台如果干脆不签发回执,只会表现为页面下单失败,不会留下链上记录。目前出块节点由平台运行,链上历史由观察节点同步监督。
我的下注
实现方式
合约
Dice 合约 —,部署在 WarmUp Chain。移植自 2018 年以太坊上的 dice2.win:一个合约四种玩法,用模数 N 和“赢的结果集合”表示——抛硬币 N=2、单骰 N=6、双骰 N=36(按两颗骰子的 36 种组合)、1–100 N=100(掷出小于所选数字即赢)。赔付 = 下注额 × 99% × N ÷ 赢的结果数(庄家优势 1%);单注 0.1–100 wUSD,单注最多净赢 1,000 wUSD。
庄家种子:下单前就全部定好
你第一次玩时,平台生成秘密 s,把 H¹⁰⁰⁰(s)(keccak256 连续 1000 次)通过 registerSeedChain 登记上链。第 k 注的庄家种子是 H¹⁰⁰⁰⁻ᵏ(s):开奖时合约检查“种子的哈希 = 当前承诺”,然后把这个种子设为下一注的承诺。所以这一条链上记录就固定了你后面 1000 注的全部庄家种子,只能按顺序使用;用完之前平台不能换链。已公开的种子推不出下一个(那需要求 keccak 原像)。
一注的完整流程
- 读承诺:页面直接从链上读出你当前的种子承诺,和平台给的不一致就拒绝下注。
- 下单:浏览器随机生成你的种子,只把它的哈希连同玩法、金额、最低赔付发给平台。平台此时算不出结果,签发回执(签名人在链上核验)。
- 公开你的种子:拿到回执后浏览器才发出种子。平台用你的游戏账户签名
placeBetFor:签名里包含承诺、你的种子和最低赔付,合约同时锁定你的本金和庄家的最大赔付。 - 开奖:
settleBet公开庄家种子,点数 = keccak256(庄家种子, 你的种子) mod N,赢了把锁定的钱付给你,输了归庄家。 - 浏览器核对:用公开的种子在本地复算点数和赔付,再读取链上的
BetPlaced/BetSettled日志逐项比对,结果显示在开奖卡片里。
庄家没法操控的几道保险
- 换不了种子:合约只接受当前承诺,下注签名里也绑定了它。
- 改不了赔率:最低赔付签进了下注,事后调庄家优势也不影响这一注。
- 不开奖就算输:下注 10 分钟后仍未开奖,任何人都能调用
forfeitBet,按“你赢”赔付,钱在下注时已锁好。 - 拒单可证明:平台签了回执却没上链,那个庄家种子会在你下一注开奖时公开,页面用回执里的种子哈希和你保存的种子算出“那注本来会不会赢”,会赢就报警并给出证据。
边界
每个玩家同一时间只有一注在开奖。目前出块节点由平台运行,链上历史由观察节点同步监督。
怎么玩
- 每 20 秒一局:前 15 秒下注,然后“起飞”——倍数从 1.00x 往上涨,涨到一个随机的爆点就爆掉。
- 下注前拖滑竿选好自动兑现倍数(1.01x – 20x)。爆点 ≥ 你选的倍数,拿回“下注额 × 倍数”;爆点更低,输掉下注额。
- 倍数越高越难达到:达到概率 = 99% ÷ 倍数,比如 2x 约 49.5%、10x 约 9.9%(庄家优势 1%)。
- 和常见的 Crash 不同,这里飞行中不能手动“跳车”,倍数只能下注时定好;上面的起飞动画只是展示开奖结果。
- 点“下注”后等几秒:先锁定下注,再把你选的倍数交上链,页面提示“倍数已上链”就好了。万一倍数没赶在本局截止前上链,按原额退款。开奖、结算都是自动的,钱直接回到余额,结果看下方“我的下注”。
我的下注
实现方式
合约
Crash 合约 —,部署在 WarmUp Chain。移植自 2014 年的 bustabit——加密世界第一款“可证明公平”的游戏,当年就是用预先公开的哈希种子链。倍数从 1.00x 往上涨,在某个随机点爆掉;你下注时设好自动兑现倍数(1.01x – 20x),爆点不低于它就按这个倍数赔付,否则输掉本金。每注 0.1 – 5 wUSD。
固定时间槽
每 20 秒一局,局号由时间决定:第 r 局从“合约起始时间 + (r − 1) × 20 秒”开始,前 15 秒接受下注,之后公开种子、起飞。每一局都按顺序消耗种子链上的下一个种子,没人下注的空局也一样——所以平台没法把你的单“推到下一局”来挑爆点高低。
为了不每 20 秒发一笔空交易:有人下注的局在 drand 随机数公布后立即开奖,并把它之前还没开的空局一起按顺序开掉;一直没人玩时,空局攒着约每 30 分钟批量开一次(每笔最多 60 局)。空局晚开不影响公平:种子早已上链、随机数由 drand 按局号固定,晚开也只能开出同一个结果;空局没有下注,也就不存在超时赔付。
爆点:下注时谁都不知道
每局的爆点由两样东西决定:① 种子链上这一局的种子——平台事先生成秘密 s,把 H²⁰⁰⁰⁰(s) 通过 registerChain 登记上链(H = keccak256),之后只能按局顺序公开,换不了也跳不过;② drand 公开随机信标(多家机构联合运行、每 3 秒一轮)的随机数——第 r 局用的 drand 轮次由时间唯一确定:本局停止下注 10 秒之后公布的第一轮。开奖(reveal,任何人都能调用)时提交种子和这一轮的 drand 签名,合约用 drand evmnet 的公钥直接验证 BLS 签名(BN254 配对,验证合约 —),随机数 = sha256(签名),和 drand 自己公布的一致。爆点 = 99 × 2⁵² ÷ (2⁵² − x)(以百分之一倍计,最低 1.00x),x = keccak256(种子, drand 随机数, "crash") 的低 52 位,所以达到倍数 t 的概率正好是 99% ÷ t,庄家优势 1%。下注窗口里那一轮 drand 还没产生,谁都算不出爆点;签名伪造不了,轮次也挑不了。
一注的完整流程
- 下注:浏览器随机生成盐,算出 keccak256(你的地址, 局号, 兑现倍数, 盐),只把这个哈希和金额发给平台。平台用你的游戏账户签名(含 nonce,同一签名只能用一次)调用
placeBetFor,合约锁定你的本金和庄家的最大赔付(本金 × 19)。 - 倍数上链:下注上链后,浏览器才把倍数和盐交给平台,平台签发回执并立刻调用
revealTarget把倍数写上链——必须赶在本局截止前(所以截止前 3 秒停止接单)。此时谁都还不知道爆点。没赶上的注会原额退回,所以平台扣着倍数不上链也得不到好处。 - 开奖:对应的 drand 轮公布后,调用
reveal公开种子和 drand 签名,合约验签后爆点上链(事件RoundCrashed)。 - 结算:任何人都可以调用
settle(平台会自动调用),按链上的倍数和爆点赔付(事件Settled),没有倍数的注原额退回(事件Refunded)。 - 核对:页面对每一局用公开的种子和盐值在本地重算爆点,并检查相邻两局的种子能否用哈希接上;最近爆点上的 ✓ 就是这项检查。
庄家没法操控的几道保险
- 换不了爆点:种子链提前上链、按局顺序使用,空局也消耗;没用完不能换链。
- 算不出、改不了爆点:每局的爆点取决于截止 10 秒后才产生的 drand 随机数,下注期间谁都不知道;它的签名由合约验证,伪造不了,轮次由时间决定,挑不了。
- 扣不了倍数:倍数在截止前上链,没上链的注退款,平台扣着它没有好处。
- 改不了倍数、重放不了签名:倍数绑定在下注哈希里;签名带 nonce,只能用一次。
- 不开奖就算输:一局停止下注后 10 分钟还没开奖,任何人都能调用
forfeitClaim,每一注按自己的兑现倍数赔付。 - 时间规则写死:每局时长、下注窗口、超时都在部署时固定,管理员改不了。
边界
兑现倍数在下注时就设定好,不支持中途手动兑现(那需要相信平台记录的点击时间)。drand 停摆超过 10 分钟,这一局按超时赔付。签名验证所用的 BLS 库来自 randa-mu/bls-solidity(固定版本、源码已通读并随仓库保存),已用 drand 官方的真实签名测试。目前出块节点由平台运行,链上历史由观察节点同步监督。
你的出拳只保存在这个浏览器里,链上只有它的哈希。对手应战后页面会自动亮拳——请在 10 分钟内保持页面打开,超时不亮拳判负。
等待应战
我的对局
实现方式
合约
石头剪刀布合约 —,部署在 WarmUp Chain。以太坊早期最经典的承诺-揭示(commit-reveal)合约游戏:玩家之间对战,双方押同样的金额,赢家拿走两份押注减 1% 手续费,平局全额退回。平台不是对手方,只收手续费,对输赢没有利益。
一局的完整流程
- 发起:你选好出拳,浏览器随机生成盐,算出 keccak256(你的地址, 出拳, 盐),只把这个哈希和押注发给平台,
makeFor上链并锁定押注。出拳和盐只留在你的浏览器里。 - 应战:对手押同样的金额,明着出拳(
takeFor)。此时你的出拳早已固定在哈希里,看到对手的出拳也改不了。 - 亮拳:你的页面看到有人应战,自动提交出拳和盐(
reveal),平台签发回执;合约核对哈希后立即结算(事件GameSettled)。 - 超时:应战后 10 分钟不亮拳,任何人都能调用
claimTimeout判对手胜——输了不亮拳没有好处;1 小时没人应战,挑战自动取消、押注退回。
平台机器人
没人应战时,可以点“让机器人应战”:平台用自己的账户随机出拳应战。机器人和其他对手一样只能看到你出拳的哈希,所以它是盲出的。
边界
超时规则在部署时写死(应战 1 小时、亮拳 10 分钟),管理员改不了。对手是平台机器人时,超时不亮拳按平局退还双方押注——亮拳由平台代为上链,这样平台扣下你的亮拳也赢不到钱。对手是其他玩家时,超时仍判对手胜;平台若扣下你的亮拳,你手里有平台签名的亮拳回执作为证据。目前出块节点由平台运行,链上历史由观察节点同步监督。