项目

面向开发者

FAIRDRUM 的代码以 MIT 许可证开源:合约、网站、上线脚本和测试都放在同一个 仓库(发布后链接会出现在这里) 中。这里简要说明整体结构,以及如何运行你自己的副本。

结构

文件夹内容
programs/fairdrum/合约使用 Rust 和 Anchor 1.2.2 编写。游戏数值在 consts.rs 中,计算在 engine.rs 和 math.rs 中,均为普通函数,因此测试无需联网即可运行。
app/网站:Vite 和 TypeScript,页面在 app/src/pages/,合约客户端以及与 Switchboard 的交互在 app/src/chain/。网站上的数值表由 consts.rs 生成,因此与合约不会出现分歧。
scripts/上线:发行代币、初始化、核对已写入的设置、devnet 测试、服务性支出、可选的“值守”脚本。
docs/ARCHITECTURE.md(整体结构)、LAUNCH.md(分步上线)、AUDIT.md(安全自查和尚未解决的问题)。
e2e/在真实浏览器中,用模拟钱包和模拟网络对网站进行的测试。

项目没有服务器和数据库:网站由普通文件构成,直接从合约读取数据。

在本地运行

需要 Node.js 20.19 或更高版本;测试合约还需要 Rust。

npm install
npm run dev                         # 在 localhost 上运行网站,演示模式,不连接合约
npm test                            # 客户端测试
cargo test -p fairdrum --release    # 合约测试
npm run build                       # 网站输出到 dist/ 文件夹
npm run build:single                # 离线版本:独立的 html 文件,双击即可打开

在 devnet 和主网(mainnet)上的分步上线流程,含命令和常见错误分析:见仓库中的 docs/LAUNCH.md。

无需重新构建的设置

文件 config.json 放在页面旁边,每次加载页面时都会读取,因此合约地址、网络节点和链接都可以不经构建直接更改。programId 留空会启用演示模式。

{
  "programId": "上线后的程序地址",
  "cluster": "mainnet-beta",
  "rpc": "https://...",
  "swapUrl": "FAIRDRUM 的兑换链接(出现后填写)",
  "links": { "github": "...", "telegram": "...", "x": "...", "audit": "..." }
}

网站地址、页面描述和站长验证在 app/seo.json 和 app/pages.json 中设置;npm run gen:html 会据此重新生成页面、站点地图和 robots.txt。

代码验证

测试

合约逻辑无需联网即可测试,包括由数万次随机操作组成的“风暴”测试:每次操作之后,金库中的代币数量都必须恰好等于各项负债。该测试还经过“变异”检验:只要计算中偏移哪怕一个最小单位,测试就会失败。

尚未验证的内容

针对 Solana 的构建、与 Switchboard 的实际联调,以及独立审计:见项目状态。内部检查不能替代审计,docs/AUDIT.md 中列出了仍未解决的问题。

与链上核对

上线后,请按“验证公平性”中的说明,把已发布的代码与链上的程序进行比对。程序和代币的地址见“官方链接”页面。

如果网站 fairdrum.to 无法访问

你的代币不会消失。

游戏余额保存在合约中,而不是网站上。网站只是一层方便的外壳,用它的任何副本都可以提取。

  1. 请检查地址是否输入正确,并通过书签打开网站。如果只有它打不开,请稍等:托管服务有时会出现临时故障。
  2. 打开网站的副本:仓库是公开的,而网站只是普通文件。下载离线版本,或自己构建(npm run build),在旁边放一个写有真实程序地址的 config.json(可在“官方链接”页面和区块浏览器中核对该地址),再通过任意简单的网页服务器打开,例如 npx vite preview。
  3. 连接同一个钱包。余额、等级和连续天数会从合约读取,提取的方式与主站相同。
  4. 不要在任何“镜像站”上输入助记词。网站从不索要助记词:任何索要助记词的副本都是假的。

来自他人渠道的网站副本请先验证:把代码与项目仓库对比。否则你并不知道自己将要签署的究竟是什么。自己构建更可靠。

许可证

MIT:代码可以阅读、复制、修改和运行,包括用于商业目的,但须保留许可证文本。许可证只涉及代码,不涉及名称和地址 fairdrum.to:采用不同规则的分叉版本不得冒充本项目。