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

先决条件

The TypeScript examples require Node.js 24 or later, pnpm 11.18.0, and the Solana CLI.
Source: sdk-libs/ts
Add a Helius API key:
.env
The examples use the Solana CLI wallet as the payer by default. The payer must hold devnet SOL. See How to Get Devnet SOL.
2

提款到公共余额

  • SDK返回指令。应用签名并发送它们。
  • sendAndConfirmFactory构建一个Kit交易,提交它,并返回签名和落地槽。
  • 示例花费了上一次转账后剩下的私人Solana代币账户。提款可以花费多个UTXO。
  • withdrawalUtxo从该余额中选择一个私人Solana代币账户。
  • ProofInputUtxo.fromKeypair准备选定的UTXO作为证明输入,与发送者的私人钱包密钥对。
  • 密钥对派生出标记输入UTXO为已用的空值,而输入资产和金额保持加密。
  • senderAddress是发送者的。提款从这个钱包花费。
  • [withdrawalInput]列出发送者选择的UTXO。提款可以花费多个UTXO。
  • senderSigner.address是费用支付者的Solana地址。机密提款的气体赞助商可以扮演此角色。
  • WithdrawalTarget.sol是公共Solana接收者。接收者可以是所有者或第三方。
  • SOL_MINT选择SOL。SPL或Token 2022提款传递代币铸造。
  • WITHDRAW_AMOUNT以资产的基本单位计价。SOL使用lamports。SPL和Token 2022资产使用代币的基本单位。
  • withdrawal.sign授权状态转换,加密剩余的私人变动,并生成零知识证明器的输入。
  • assets是资产注册表,用于解析支持的私人资产。
  • client.proveTransact从签署的提款中生成零知识证明并返回序列化的指令数据。
  • 证明表明发件人拥有并可以花费输入。提取的资产和金额是公开的。输入金额和变动保持加密。
  • payer为Solana交易签名并支付费用。机密提款的气体赞助商可以扮演此角色。
  • inputTreeoutputTreeclient.tree,包含已用UTXO并接收发送者的私人变动的状态Merkle树。
  • withdrawalTransactWithdrawal.sol,公共Solana接收者账户。
  • data包含在上一步生成的零知识证明和加密变动。
  • 提款将资产从私人余额转移到公共Solana账户。它传递公共接收账户。
  • sendAndConfirm签名并提交withdrawalInstruction作为Solana交易。
  • 确认产生用于索引器提取的落地槽。

完整代码示例

克隆并运行示例:
这些示例在本地/devnet上使用保密Ring here
deposit_transfer_withdraw.ts

相关指南

存款

转账

读取私人余额

读取私人历史记录

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact