Skip to main content
  1. 私有转账在私有钱包之间以环的形式移动代币。
  2. 私有转账是在单个Solana交易中发送到Solana钱包地址的。

转账:什么是私有

无许可环是机密的,具有加密的金额和资产。 可以将自定义环配置为机密或匿名(加密发送者、接收者、资产和金额)。

转账如何工作

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

开始使用

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。
  • transferUtxo从该余额中选择一个私有Solana代币账户。
  • ProofInputUtxo.fromKeypair使用发送方的私有钱包密钥对准备选定的UTXO作为证明输入。
  • 密钥对派生出无效器,标记输入UTXO为已用,而资产和金额保持加密。
  • senderAddress是发送者的。转账从此钱包中花费。
  • [transferInput]列出发送者选择的UTXO。转账可以花费多个UTXO。
  • senderSigner.address是费用支付者的Solana地址。燃气赞助者可以为机密转账担任此角色。
  • recipient是接收者的屏蔽地址。转账输出被加密到接收者的查看密钥。
  • SOL_MINT选择SOL。SPL或Token 2022转账传递代币铸造。
  • TRANSFER_AMOUNT以资产的基本单位计价。SOL使用lamports。SPL和Token 2022资产使用代币的基本单位。
  • transfer.sign授权状态转换,加密资产和金额,并生成零知识证明者的输入。
  • assets是用于解析支持的私有资产的资产注册表。
  • client.proveTransact从签名的转账中生成零知识证明,并返回序列化的指令数据。
  • 证明显示发送者拥有并可以花费输入,而不透露加密的资产或金额。
  • payer签名并支付Solana交易。燃气赞助者可以为机密转账担任此角色。
  • inputTreeoutputTreeclient.tree,包含已用UTXO并接收接收者输出和发送者更改的状态Merkle树。
  • data包含上一步中生成的零知识证明和加密的输出。
  • 私有转账仅在私有余额之间移动资产。它不传递公共Solana账户或代币账户。
  • sendAndConfirm签名并提交transferInstruction作为Solana交易。
  • 确认生成用于控制索引器获取的落地槽。

完整代码示例

克隆并运行示例:
示例使用本地/devnet上的机密环在这里
deposit_transfer_withdraw.ts

相关指南

存款

取款

读取私有余额

读取私有历史

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact