Skip to main content
  1. 提款将代币从私人余额转移到公共Solana余额。
  2. 提款通过单一Solana交易发送到Solana钱包地址。

提款:什么是私密的

无许可的Ring隐私性高,金额和资产加密。 自定义Ring可以配置为保密或匿名(加密的发送者、接收者、资产和金额)。

提款是如何工作的

提款的行为类似于公共Solana转账:
  1. 用户的SOL或SPL余额在链上加密。
  2. 用户解密私有状态,钱包构建提款,所有者签名。
    • 使用专用的RPC方法获取加密状态。只有用户可以在本地解密余额。
    • 钱包设置金额和接收者,然后请求ZK证明。RPC提供者默认生成ZK证明并返回。
  3. Solana运行时验证签名并调用Solana隐私程序,该程序验证ZK证明而不揭示加密状态。
  4. 应用通过Solana交易哈希跟踪状态。
  1. 用户的SOL或SPL余额在链上公开。
  2. 钱包读取公共状态,构建转账,并由所有者签名。
  3. Solana运行时验证签名并调用系统程序或代币程序,更新公共余额。
  4. 应用通过Solana交易哈希跟踪状态。
这是无许可的保密Ring的高级交易流程。 与自定义Rings在概念中比较。

入门

1

先决条件

TypeScript 示例需要 Node.js 24 或更高版本,pnpm 11.18.0,以及 Solana CLI。
来源:sdk-libs/ts
添加一个Helius API 密钥:
.env
示例默认使用 Solana CLI 钱包作为支付方。支付方必须持有 devnet SOL。请参阅如何获取 Devnet SOL。
2

提款到公共余额

  • SDK返回指令。应用签名并发送它们。
  • sendAndConfirmFactory构建一个Kit交易,提交它,并返回签名和落地槽。
  • 示例花费了上一次转账后剩下的私人Solana代币账户。提款可以花费多个UTXO。
  • withdrawalUtxo从该余额中选择一个私人Solana代币账户。
  • ProofInputUtxo.fromKeypair准备选定的UTXO作为证明输入,与发送者的私人钱包密钥对。
  • 密钥对派生出标记输入UTXO为已用的空值,而输入资产和金额保持加密。
  • senderAddress 是发送方的 。提款将从此钱包中支出。
  • [withdrawalInput] 列出发送方选择的 UTXO。一次提款可以花费多个 UTXO。
  • senderSigner.address 是费用支付方的 Solana 地址。Gas 赞助方可以支付该费用。
  • WithdrawalTarget.sol 是公开的 Solana 接收方。接收方可以是所有者或第三方。
  • SOL_MINT 选择 SOL。SPL 或 Token 2022 提款会传入代币铸币地址。
  • WITHDRAW_AMOUNT 以资产的最小单位计价。SOL 使用 lamport。SPL 和 Token 2022 资产使用代币的最小单位。
  • withdrawal.sign 授权状态转换、加密剩余的私密找零,并生成零知识证明器所需的输入。
  • assets 是用于解析受支持私密资产的资产注册表。
  • senderKeys 使用 LocalKeys.fromKeypair(sender, client.proofService),通过发送方的密钥授权证明生成。
  • client.proveTransact 根据已签名的提款生成零知识证明,并返回序列化的指令数据。
  • 该证明表明发送方拥有并且可以花费这些输入。提取的资产和金额是公开的。输入金额和找零仍保持加密。
  • payer 为 Solana 交易签名并支付费用。Gas 赞助方可以支付该费用。
  • inputTree 和 outputTree 是 client.tree,即包含已花费 UTXO 并接收发送方私密找零的状态 Merkle 树。
  • withdrawal 是 TransactWithdrawal.sol,即公开的 Solana 接收方账户。
  • await transactInstruction 在本地派生 nullifier 账户地址并返回指令。nullifier 账户将输入 UTXO 标记为已花费,以防止私密余额被重复花费。
  • data 包含上一步生成的零知识证明和加密找零。
  • 提款会将资产从私密余额转移到公开的 Solana 账户。它会传入公开的接收方账户。
  • sendAndConfirm签名并提交withdrawalInstruction作为Solana交易。
  • 确认产生用于索引器提取的落地槽。

完整代码示例

克隆并运行示例:
这些示例使用此处本地/devnet 上的机密 Ring。
deposit_transfer_withdraw.ts

相关指南

存款

转账

读取私人余额

读取私人历史记录

没找到您要找的?

联系我们!Telegram | 电子邮件 | 联系