SuperAPI AI 工具集

example-payment-dapp

编程与开发

查看项目

更新于 10-15 13:59

技能介绍

用途

该技能用于在 Midnight Network 上构建、调试或扩展隐私保护支付 dApp,使用 1AM 钱包和 Compact 智能合约。其核心示例是一个隐私支付金库:用户通过 Compact 合约存入/提取 tNIGHT,并借助 1AM 钱包实现零 gas 费。

主要能力

  • 提供从合约编写、Provider 设置、部署、电路调用、索引器/状态轮询到 UI 的完整工作流。
  • 给出规范的 Provider 接线方式(lib/midnight.ts),适用于所有浏览器 dApp。
  • 提供 Compact 合约示例,包含 deposit、withdraw 电路及 owner 权限校验。
  • 提供会话创建、私密状态提供者、修补后的公共数据提供者、编译合约构建器、索引器轮询与状态解码等参考实现。
  • 包含 Next.js 配置(WebSocket shim、webpack 回退与别名、asyncWebAssembly、topLevelAwait)及 package.json 脚本要求。
  • 列出代币单位换算(1 NIGHT = 1,000,000 Stars;1 Star = 1 base unit)并强调使用 BigInt。
  • 提供已知问题与修复对照表。

使用方式

按以下顺序推进:合约编写 → Provider 设置 → 部署 → 电路调用 → 索引器/状态轮询 → UI。在编写任何 provider 或电路代码前,先检查已知陷阱(references/gotchas.md)。从 references/midnight-session.md 复制 provider 接线。使用底层 SDK 函数(createUnprovenDeployTx、submitTxAsync、submitCallTxAsync),不要使用在 preprod 上失效的高层封装(deployContract、createProofProvider)。始终用修补版本包装公共数据提供者,以避免 GraphQL offset: null 错误。

交易流程:检测 1AM 钱包 → 连接 → 创建包含所有 provider 的会话 → 部署合约(底层)并存储地址与私密状态 → 存入:调用 receiveUnshielded 电路并轮询索引器 → 提取:调用 sendUnshielded 电路(仅 owner)并轮询索引器。

合约编译:cd contract && npm run compact,输出到 contract/src/managed/payment/。

ZK 资产托管:运行 npm run sync:assets 将 contract/src/managed/payment/{keys,zkir}/ 复制到 public/zk/payment/。调试任何 provider/SDK 错误前,先直接打开资产 URL(如 http://localhost:3000/zk/payment/keys/deposit.prover),404 会表现为晦涩的 SDK 错误。

适用场景

  • 在 Midnight Network 上开发隐私支付 dApp。
  • 使用 1AM 钱包与 Compact 智能合约进行集成。
  • 调试部署挂起、证明失败、GraphQL 错误、ZK 资产 404 等问题。
  • 需要参考实现来搭建 Next.js 前端与索引器轮询逻辑。

限制

  • 高层封装 deployContract、createProofProvider 在 preprod 上失效,必须使用底层函数。
  • 私密状态提供者为内存实现,exportPrivateStates、importPrivateStates、exportSigningKeys、importSigningKeys 均抛出 Not implemented。
  • 必须使用 --webpack 标志,并配置 asyncWebAssembly 与 topLevelAwait。
  • 代币金额必须使用 BigInt,Stars 在真实余额下会溢出 JS number。
  • 钱包检测需优先检查 window.midnight['1am'],回退到 window.midnight?.mnLace。
  • 其他未在资料中说明的功能、收费、价格、平台或效果暂未提供。