Skip to main content

环介绍

Solana上的每笔交易都是公开可读的:地址、余额和转账历史对任何人都可见。 环对链上余额进行加密,并默认始终是非托管的:
  • 在机密环中,资产和金额是私密的,而发送者和接受者保持可见。
  • 在匿名环中,资产、金额、发送者和接收者都是私密的。
两个并排的Solana交易卡。机密卡显示交易哈希、发送者和接收者,而资产和金额被遮挡。匿名卡仅显示交易哈希;发送者、资产、金额和接收者全部被遮挡。交易哈希在两者中保持公开。 存在不同类型的环:
  1. 默认环是无许可和机密的。它加密资产和金额,任何人都可以使用,不具有自定义策略控制。
  2. 自定义环是Solana程序,使Solana隐私可编程,类似于Token-2022。自定义环可以是机密或匿名的,并具有自定义策略、报告和可见性规则。
对于大多数应用程序,我们推荐无许可、机密的默认环。 对于自定义策略和合规控制,联系我们以开始使用自定义环。
私密余额显示为保持两个环的链上虚线区域。默认环是机密的、自托管的和无许可的。自定义环是机密或匿名的、自托管的,并增加了自定义政策和自定义合规性。 私密转账连接环,每个环存入和提现到下面的Solana公开余额层。

自定义环是可编程的

自定义环是简单的Solana程序,使隐私可编程,具有类似于Token-2022的功能。 自定义环可以为转账和可见性/审计定义完全自定义的规则。
环的权限在创建环时声明,因此用户可以在选择环之前检查策略。 默认环是无许可的,没有自定义授权或审计员。
如果您想设置自己的自定义环,联系我们,我们会为您设置。 您可以使用自己的合规性,或使用Helius管理的KYC和制裁筛选解决方案。

用户流程和隐私保证

与Helius隐私的交易在链上本地执行,并在单笔交易中与其他Solana程序组合。 用户可以进入、在环内私密转账或退出环: 1. 存入或进入。 用户将代币从公共Solana余额或法币余额直接发送到私密余额。 2. 私密转账。 用户在同一环内或向不同环发送代币。 3. 提现或退出。 用户将代币从私密发送到公共Solana余额或直接转到法币余额。 环生命周期图示。100 USDC的公共余额存入一个环,USD/EUR/...的法币余额进入同一环,资金通过私密转账在两个私密余额之间移动,然后提取到公共余额或退出到法币余额。 用户像处理公共余额一样,将代币发送到Solana钱包地址。 如果收件人有一个私密钱包,隐私API会自动将转账路由到私密钱包。 否则,转账会撤回到收件人的公共地址。 通过仅了解收件人的公共钱包地址,任何人都可以存入任何私密钱包。 当发送者的应用程序不支持隐私时,收件人会公开接收资金,并在第二步骤将其加密到自己的私密余额。

存入私密余额:哪个是私密的

用户可以通过两种方式存入私密余额:
  1. 从法币余额进入私密加密余额
  2. 从公共存入私密加密余额

私密转账:哪个是私密的

用户可以通过两种方式发送私密转账:
  1. 在同一环内转账
  2. 转账到不同环
对于大多数应用程序,我们推荐无许可、机密的默认环。 对于自定义策略和合规控制,联系我们以开始使用自定义环。

从私密余额提现:哪个是私密的

用户可以通过两种方式从私密余额中提现:
  1. 从私密加密提现到法币余额
  2. 从私密加密提现到公共加密余额

高级交易流程

私密转账与公开转账类似,并在单个Solana交易中执行。
  1. 用户的SOL或SPL余额在链上加密。
  2. 获取加密状态并在本地解密,或由委托提供者解密并提供解密状态。
  3. 钱包设置金额和接收者,然后请求ZK证明。
  4. 默认情况下,RPC提供者生成ZK证明并返回。自定义环还需要政策证明。
  5. 钱包构建Solana交易。ZK证明在不公开加密状态的情况下进行验证。调动的程序以及谁签名和提交取决于环:
  1. 应用程序通过Solana交易哈希跟踪状态。

私密钱包

用户在私密钱包中持有其加密余额。 私密钱包在用户的公共Solana地址接收转账,作为inbox。 这样,发送者始终输入接收者的Solana地址,就像处理公共转账一样。

创建私密钱包

在创建私密钱包时,Solana地址注册在链上注册表中。 注册表将一个Solana地址映射到一个。 在后台将转账加密到Shielded Address。 多个Solana地址不能共享一个Shielded Address。 每个注册记录是由拥有的PDA,任何人都可以查找以查看Solana地址是否能接收私密转账。 用户钱包显示两个公共Solana钱包和一个私密钱包。收件箭头将公共钱包A的公钥连接到私密钱包的Shielded Address。
在您的钱包应用中,您可以让用户仅为专用”私密钱包”公钥创建私密钱包, 或者为任何公钥创建。

向私密钱包转账

在每次转账中,隐私API会在链上注册表中查找钱包地址,以检查接收者是否有私密钱包。 如有命中,它使用Shielded Address在后台加密转账。
当私密转账的接收者没有私密钱包时,隐私API会将转账解析为私密到公有的提现。 我们建议在UI中另外请求用户签名,以确保用户不会意外将资金提现到公共余额。
如果没有私密钱包,隐私API会将转账解析为私密到公有的提现。

密钥管理

私密钱包从Solana密钥对中添加了一个Shielded密钥对到Solana钱包。 Shielded密钥对是签名、nullifier和查看密钥的捆绑包。它不是Solana密钥对。 Shielded Address是Shielded密钥对的公钥。转账加密到它。

创建Shielded密钥对

钱包可以通过两种方式创建Shielded密钥对。
  1. 从种子短语派生密钥。
    • 种子基础钱包的推荐方法。
    • 机密环:签名密钥是Solana钱包从该种子派生的相同Ed25519密钥。Nullifier和查看密钥是从同一种子派生的附加密钥。
    • 自定义匿名环:签名密钥是从钱包种子派生的附加P-256密钥。
    • 您始终可以像重建Solana钱包一样重建Shielded密钥对。
  2. 从固定消息与现有Solana密钥派生密钥。
    • Solana签名是确定性的,因此相同的Solana密钥对始终产生相同的Shielded密钥对。应用程序从不接收私钥。
    • 测试和不使用种子短语的钱包的推荐方法。集成钱包必须确保签名不暴露给第三方。

集成Shielded密钥对

钱包可以通过本地钱包集成自行持有Shielded密钥对。 通过嵌入的私密钱包,钱包提供者持有Shielded密钥对,并运行其密钥操作。

解密模式和钱包同步

只有拥有者可以使用查看密钥解密私密钱包余额。 为选择性披露,拥有者可以与审计员共享查看密钥,以便审计员可以查看活动而无法进行支出。 在自定义环中,策略可以声明一个审计员,该审计员可以解密来自该自定义环的所有余额。 机密环(默认环和机密自定义环)支持本地和委托解密。 匿名环(仅自定义环)仅支持委托解密。
在钱包运行backfills时应解密和更新余额:在解锁钱包时、 打开私密钱包时、应用程序恢复时、网络重新连接时、流间隔时或钱包恢复时。

本地解密

在本地解密模式中,钱包本地解密和同步余额和历史记录。 Helius服务器不会收到记忆助词、种子、签名私钥、查看私钥或nullifier秘密。

委托解密

在委托解密模式中,钱包和选定提供者共享一个查看密钥。 这使得提供者可以解密余额和历史记录,但不授予支出权限。 当钱包授权提供者同步历史活动时,它也可以共享之前的查看密钥。 审计员访问与委托解密是分开操作的。 审计员根据策略定义的环可见性接收,而委托的提供者接收钱包范围的同步访问权限。

索引器服务加密状态

正如公共钱包依赖Solana RPC,私密钱包依赖于索引器。 索引器提供钱包所需的加密状态,以读取余额并构建私密交易。 默认情况下,索引器可通过访问;任何人也可作为后备无许可运行自己的索引器。

私密钱包余额

私密钱包余额在链上存储于私密Solana代币账户中,作为UTXO(未消费的交易输出),而不是Solana代币账户。 默认环和所有自定义环都在一个状态默克尔树中存储私密余额。 私密钱包余额是私密钱包拥有的所有UTXO的总和。 Solana程序可以拥有类似于常规Solana账户的UTXO。 本文件将私密Solana代币账户和UTXO互换使用。 私密钱包通过虚线连接到多个UTXO注释,每个注释都持有一个资产的一个金额。钱包余额是这些注释的总和。
对于用户体验,余额是以UTXO还是Solana代币账户持有并没有差别。在技术层面,花费公开余额会减少Solana代币账户中的amount字段。 花费私密余额不会覆盖UTXO的amount字段。 相反,私密交易将现有UTXO用作输入(由SDK自动选择), 消耗输入并为接收者和发送者的剩余余额创建新的输出。例如,Alice有50 USDC 并发送给Bob 35。
  • 在Solana代币账户中,她的amount字段从50变为15,Bob的增加35。数字在原地更改。
  • 对于UTXO,Alice持有一个50 USDC注释。交易会消耗它并创建两个新注释:一个35 USDC的注释给Bob,一个15 USDC的找零注释给Alice。她旧的50注释现在已被消费。
Alice将她的50 USDC发送给Bob 35。在Solana代币账户上,金额字段原地从50变为15。对于UTXO,Alice的单个50 USDC注释被消费并创建两个新注释:一个35 USDC的注释给Bob,一个15 USDC的找零注释给Alice。
存入SOL和SPL资产的私密余额时,由Solana隐私程序拥有的接口PDA托管代币并创建由用户作为所有者的UTXO。提现至公共余额时,现有UTXO被标记为已消费,代币被释放到Solana代币账户。
一个私密钱包可以同时持有多个环中的余额,对环的数量没有限制。 余额所属的环不是钱包的属性。它是每个UTXO的属性,存储在其policy_program_id字段中。

私密Solana Token账户

私密Solana Token账户是一个UTXO,其行为类似于Solana代币账户,有两个核心区别:
  • 私密Solana Token账户创建时不需要租金豁免,并且
  • 其余额在链上是加密的。
然而,私密Solana Token账户存储相同的数据,例如:
  • 资产: UTXO持有的单位的铸币。SOL是默认铸币地址。资产可以是SOL或任何SPL或Token-2022资产。
  • 金额: 注释持有的asset单位数,以资产的最小单位计。
  • 程序和策略数据: 配置的环策略可选的添加类似Token-2022功能的数据
私密Solana Token账户。Solana隐私程序拥有一个私密Token账户,扩展到其PrivateAccount字段:所有者、资产、金额、策略数据和策略程序ID。
Solana Token账户。Token程序拥有一个Token账户,扩展到其AccountInfo字段(数据、可执行、Lamports、所有者)和数据字段扩展为账户数据(铸币、所有者、金额)。

关于并发

用户在交易完成后可以立即花费私密余额。 即,一个密钥对的余额可以在分割成多个UTXO时并发使用。 钱包选择要花费的UTXO。 一个默克尔树为无许可的默认环和所有自定义环存储私密状态。 树被存储在一个可写的Solana账户中。 写入该账户的私密转账共享Solana每区块12百万CU的每账户写锁限制。 私密转账大约消耗220,000 CU。 因此一个树可以支持每区块大约54个私密转账,或者在当前Solana区块时间约400毫秒的情况下,每秒约130笔交易。 该协议可以添加更多树以增加吞吐量。 每个树都是一个单独的可写账户,其拥有自己的每账户计算预算,因此在不同树上的交易不会争夺相同的写锁预算。

关于证明生成时间

零知识证明目前由证明服务器生成;典型的机密转账在数十毫秒内完成证明;计划本地生成机密环的证明。 证明时间正在积极优化,以确保流畅的用户体验。

术语

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact