安全
谁能在项目中更改什么,随机数从哪里来,还剩哪些风险。上面的表格是直接从网络读取的,而不是手工画出来的。
网络上当前记录的内容
正在读取数据…
开源代码、匿名与隐私
开源代码
整个项目(合约、网站、上线脚本、测试)都以 MIT 许可证开源。代码可以阅读。用 anchor build 命令构建合约尚未验证过(见“项目状态”);上线后,可以自行构建程序,并与链上运行的程序进行比较。如何验证
仓库链接发布后,会立即出现在这里和网站页脚中。
项目匿名
姓名和法人实体不公开,玩家也不需要姓名、邮箱、电话或护照,只需一个钱包。规则写在合约里,可以阅读。匿名的另一面
透明且匿名的网站:没有登录和账户,没有 cookie、分析、计数器和广告脚本。字体和脚本由网站自己提供,设置(主题、此设备上的旋转历史)只保存在你的浏览器中,网站代码开源,因此这些都可以验证。请核对浏览器地址栏中的地址:哪怕差一个字母,也不是官方网站。
网站知道什么,谁能看到你的操作
| 事项 | 如何运作 |
|---|---|
| 姓名、邮箱、电话、证件 | 不需要,也不会在任何环节索取:注册和提取时都不需要。 |
| Cookie、分析、计数器、广告 | 没有。网站代码中没有这些,也不会加载外部脚本和字体。 |
| 浏览器中保存的内容 | 主题、转盘模式、声音和特效(如果开启)、此设备上的旋转历史、你连接过哪个钱包、随机数服务账户的地址。这些都留在你的设备上,不会发送到任何地方。 |
| 网站与谁通信 | 与 Solana 网络节点(RPC)通信:它读取游戏数据并接收你的交易。旋转期间还会与 Switchboard 预言机通信。这些服务能看到你的 IP 地址和钱包地址,就像网络中的任何节点一样。 |
| 区块链上公开的内容 | 你的地址、玩家编号、余额、旋转、奖金和提取:任何人都能查看。地址只是化名,并不能做到完全匿名。如果地址与你的身份相关联(例如 SOL 来自你做过身份验证的交易所),这种联系是可以追踪的。 |
项目和玩家的匿名并不是绝对的,而且有另一面:项目没有可以追究责任的法人实体。详见“风险”。
密钥及其权限
| 密钥 | 能做什么 | 不能做什么 |
|---|---|---|
| 程序升级权限 | 上传合约代码的新版本。 | 不能直接拿走代币,但新版本的代码原则上可以做到。所以按照上线计划,这个密钥先移交给带延迟的多签,然后被撤销;当前状态见这张表。 |
| 代币发行(mint) | 什么都不能:按上线计划,发行完成后立即撤销。 | 创建新代币。 |
| 冻结(freeze) | 什么都不能:从未授予任何人。 | 冻结某人的代币。 |
管理员(dev_authority) | 领取累积的 10% 旋转收入(claim_dev)。 | 更改规则,拿走玩家的余额、奖金、头奖和活跃度基金。 |
推广(promo_authority) | 从推广基金中支付(promo_pay)。 | 其他一切。 |
1) 起步时在部署者手中;2) 在主网上线前移交给带延迟的多签(Squads),任何更新都有延迟,让玩家能提前看到变更;3) 项目稳定后,该权限被永久撤销,代码被冻结。当前所处的步骤见上方表格。
随机数从哪里来
合约自己不会想出随机数,也不会从项目方那里获取。使用的是 Switchboard On-Demand:投注在一笔交易中确定(合约记住区块编号),随后由预言机揭示数值,并把它绑定到投注时尚不存在的区块哈希上。只要预言机诚实运作,就无法提前猜出或预测这个值。对 Switchboard 的信任依然存在:这是一项外部依赖。
合约通过 sha256 从一个 32 字节的值中得到所需数量的随机数,玩家无法影响它。合约只接受归 Switchboard 程序所有的随机数账户(没有这项检查,任何人都可以塞进一个带有所需数值的自己的账户)。
如果预言机不工作,旋转就会停下,而在 3,000 个区块后被关闭的旋转,其投注不退还。
合约完全做不到的事
更改概率
所有数值都是代码中的常量。新的数值只能通过程序的新版本实现,而新版本可以从升级交易中看到。
拿走游戏余额
没有“从玩家那里拿走”的指令。余额只会在提取时流向你,以及在旋转时用于投注。
发行代币
按上线计划,发行权限会被撤销。此后,总发行量 100 十亿 只会因销毁而减少。
重复支付
一次旋转只会被关闭一次。代币的安全性(各奖池和余额之和不超过金库中存放的数量)由自动化测试验证,场景包括多名玩家和每批 1000 次旋转。
仍然存在的风险
- 代码中的错误。合约有测试覆盖,但没有进行独立审计(见“项目状态”)。一个未被发现的错误可能导致资金损失。
- 程序更新。在升级权限被撤销之前,管理员(或多签)理论上可以发布规则不同的版本。请关注上面的表格。
- 预言机和网络。Switchboard 故障或 Solana 拥堵会延误旋转;故障持续很久(超过约 20 分钟)时,投注作废,不予退还。不退还是有意为之:否则就可以先偷看结果,再放弃输掉的投注。
- 合约之外的管理员代币。营销和储备(合计约占发行量的 30%)没有锁定在合约中,开发者的部分(10%)在外部服务的锁仓释放中。锁仓释放:未提供链接;流动性锁定:未提供链接;管理员的多签:未提供链接。如果没有提供链接,请认为目前无法验证这一点。
- 推广基金。密钥
promo_authority可以把基金中累积的资金发送到任意地址。每笔支付都是公开的(事件PromoPaid),但合约不会检查这笔钱花在了什么上。 - 免费旋转和多账户。游戏中没有、也不可能有“这是真人”的验证:同一个人可以注册很多钱包,并从每个钱包领取免费旋转。支出受活跃度基金规模的限制,但其中相当一部分可以被抽走。
- 大额奖池。头奖奖池相对于普通水平越大,每次旋转的预期返还就越高;奖池非常大时,可能超过 100%。所有累进头奖都是这样,老练的玩家就是冲着大奖池来的。
- 网络速度。所有旋转都经过合约的同一个公共账户,所以高峰时队列可能变长。这会拖慢游戏,但不会改变结果。
- 网站不是合约。网站地址可能变更或消失;而合约仍然留在网络上,可以通过任何兼容的客户端直接使用。
- 匿名的管理员。姓名和法人实体不公开:如果出了问题,无法追究责任,也无法通过法院或客服要回资金。能保护你的只有合约中写明的、并可以自己验证的内容。
- 法律。赌博在许多国家受到限制或被禁止。这是你自己的责任。
- 这是靠运气的游戏。平均而言,玩家会损失一部分投注。
如何自己验证
- 在区块浏览器(Solscan、Solana Explorer)中打开程序地址,找到 Upgrade Authority 字段:如果为空,代码已冻结。
- 打开代币:Mint Authority 和 Freeze Authority 字段应为空。
- 打开程序的 config 账户,并与“经济模型”核对各奖池的金额、旋转次数和已销毁的数量。
- 用开源代码构建合约(
anchor build --verifiable),并把哈希与链上的哈希(solana-verify)进行比较。