用途
本技能用于在 Midnight Network 上构建一个隐私保护的街机排行榜 DApp。玩家提交点击挑战分数上链,并支持三种显示模式:匿名、公开或自定义。通过 verifyOwnership 零知识电路,玩家可以证明自己拥有某条记录,而无需暴露私钥。
主要能力
- 隐私保护:匿名模式下,显示名称由 persistentHash(sk) 生成,UI 解码为随机名称(如 "Crimson Tiger");公开/自定义模式下,使用 getCustomName() 见证提供名称。
- 所有权证明:verifyOwnership 电路检查 ownerCommitment(secretKey) 是否与存储的 ownerHash 匹配,不泄露 secret。
- 链上状态:scores 是公开的 Map<Uint<64>, ScoreEntry>,任何人都可通过索引器读取。
- 完整模板:提供可运行的 Next.js 项目,包含合约、UI、部署脚本和 ZK 资产同步。
使用方式
- 复制 templates/leaderboard-dapp/ 目录。
- 安装 1AM 钱包后,运行
npm install && npm run compact && npm run sync:assets && npm run dev。 - 编译合约:
cd contract && npm run compact && cd .. && npm run sync:assets。 - 启动证明服务器:
docker run -d -p 6300:6300 midnightntwrk/proof-server:8.0.3 -- midnight-proof-server --network preprod。 - 打开 http://localhost:3000,连接 1AM 钱包,部署新合约或粘贴已有地址,进行游戏并提交分数。
适用场景
- 需要隐私保护的排行榜应用。
- 需要证明分数所有权的场景,如奖品领取或 "你的" 标记。
- 希望观众无需连接钱包即可查看排行榜的 DApp。
限制
- 需要安装 1AM 钱包扩展,并配置 Preprod 网络和证明服务器。
- 版本兼容性需参考 references/versions.json 和官方支持矩阵。
- 生产部署时需更新网络 ID、索引器 URL 和证明服务器配置。
- 部分功能(如自定义名称)需在提交分数前调用 setCustomName。