环介绍
Solana上的每笔交易都是公开可读的:地址、余额和转账历史对任何人都可见。 环对链上余额进行加密,并默认始终是非托管的:- 在机密环中,资产和金额是私密的,而发送者和接受者保持可见。
- 在匿名环中,资产、金额、发送者和接收者都是私密的。
- 默认环是无许可和机密的。它加密资产和金额,任何人都可以使用,不具有自定义策略控制。
- 自定义环是Solana程序,使Solana隐私可编程,类似于Token-2022。自定义环可以是机密或匿名的,并具有自定义策略、报告和可见性规则。
对于大多数应用程序,我们推荐无许可、机密的默认环。
对于自定义策略和合规控制,联系我们以开始使用自定义环。
自定义环是可编程的
自定义环是简单的Solana程序,使隐私可编程,具有类似于Token-2022的功能。 自定义环可以为转账和可见性/审计定义完全自定义的规则。示例自定义环政策
示例自定义环政策
用户流程和隐私保证
与Helius隐私的交易在链上本地执行,并在单笔交易中与其他Solana程序组合。 用户可以进入、在环内私密转账或退出环: 1. 存入或进入。 用户将代币从公共Solana余额或法币余额直接发送到私密余额。 2. 私密转账。 用户在同一环内或向不同环发送代币。 3. 提现或退出。 用户将代币从私密发送到公共Solana余额或直接转到法币余额。存入私密余额:哪个是私密的
用户可以通过两种方式存入私密余额:- 从法币余额进入私密加密余额
- 从公共存入私密加密余额
- On-ramp from fiat balance
- Deposit from public crypto balance
私密转账:哪个是私密的
用户可以通过两种方式发送私密转账:- 在同一环内转账
- 转账到不同环
对于大多数应用程序,我们推荐无许可、机密的默认环。
对于自定义策略和合规控制,联系我们以开始使用自定义环。
- Permissionless Confidential Ring
- Custom Rings
从私密余额提现:哪个是私密的
用户可以通过两种方式从私密余额中提现:- 从私密加密提现到法币余额
- 从私密加密提现到公共加密余额
- Off-ramp to fiat balance
- Withdraw to public crypto balance
高级交易流程
私密转账与公开转账类似,并在单个Solana交易中执行。- 私密转账
- Solana转账
- 用户的SOL或SPL余额在链上加密。
- 获取加密状态并在本地解密,或由委托提供者解密并提供解密状态。
- 钱包设置金额和接收者,然后请求ZK证明。
- 默认情况下,RPC提供者生成ZK证明并返回。自定义环还需要政策证明。
- 钱包构建Solana交易。ZK证明在不公开加密状态的情况下进行验证。调动的程序以及谁签名和提交取决于环:
- 应用程序通过Solana交易哈希跟踪状态。
- 无许可机密环
- 自定义机密环
- 自定义匿名环
私密钱包
用户在私密钱包中持有其加密余额。 私密钱包在用户的公共Solana地址接收转账,作为inbox。
这样,发送者始终输入接收者的Solana地址,就像处理公共转账一样。
创建私密钱包
在创建私密钱包时,Solana地址注册在链上注册表中。 注册表将一个Solana地址映射到一个。 在后台将转账加密到Shielded Address。 多个Solana地址不能共享一个Shielded Address。 每个注册记录是由拥有的PDA,任何人都可以查找以查看Solana地址是否能接收私密转账。在您的钱包应用中,您可以让用户仅为专用”私密钱包”公钥创建私密钱包,
或者为任何公钥创建。
向私密钱包转账
在每次转账中,隐私API会在链上注册表中查找钱包地址,以检查接收者是否有私密钱包。 如有命中,它使用Shielded Address在后台加密转账。当私密转账的接收者没有私密钱包时,隐私API会将转账解析为私密到公有的提现。
我们建议在UI中另外请求用户签名,以确保用户不会意外将资金提现到公共余额。
密钥管理
私密钱包从Solana密钥对中添加了一个Shielded密钥对到Solana钱包。
Shielded密钥对是签名、nullifier和查看密钥的捆绑包。它不是Solana密钥对。
Shielded Address是Shielded密钥对的公钥。转账加密到它。
创建Shielded密钥对
钱包可以通过两种方式创建Shielded密钥对。-
从种子短语派生密钥。
- 种子基础钱包的推荐方法。
- 机密环:签名密钥是Solana钱包从该种子派生的相同Ed25519密钥。Nullifier和查看密钥是从同一种子派生的附加密钥。
- 自定义匿名环:签名密钥是从钱包种子派生的附加P-256密钥。
- 您始终可以像重建Solana钱包一样重建Shielded密钥对。
-
从固定消息与现有Solana密钥派生密钥。
- Solana签名是确定性的,因此相同的Solana密钥对始终产生相同的Shielded密钥对。应用程序从不接收私钥。
- 测试和不使用种子短语的钱包的推荐方法。集成钱包必须确保签名不暴露给第三方。
集成Shielded密钥对
钱包可以通过本地钱包集成自行持有Shielded密钥对。 通过嵌入的私密钱包,钱包提供者持有Shielded密钥对,并运行其密钥操作。解密模式和钱包同步
只有拥有者可以使用查看密钥解密私密钱包余额。 为选择性披露,拥有者可以与审计员共享查看密钥,以便审计员可以查看活动而无法进行支出。 在自定义环中,策略可以声明一个审计员,该审计员可以解密来自该自定义环的所有余额。 机密环(默认环和机密自定义环)支持本地和委托解密。 匿名环(仅自定义环)仅支持委托解密。在钱包运行backfills时应解密和更新余额:在解锁钱包时、
打开私密钱包时、应用程序恢复时、网络重新连接时、流间隔时或钱包恢复时。
本地解密
在本地解密模式中,钱包本地解密和同步余额和历史记录。 Helius服务器不会收到记忆助词、种子、签名私钥、查看私钥或nullifier秘密。委托解密
在委托解密模式中,钱包和选定提供者共享一个查看密钥。 这使得提供者可以解密余额和历史记录,但不授予支出权限。 当钱包授权提供者同步历史活动时,它也可以共享之前的查看密钥。 审计员访问与委托解密是分开操作的。 审计员根据策略定义的环可见性接收,而委托的提供者接收钱包范围的同步访问权限。索引器服务加密状态
正如公共钱包依赖Solana RPC,私密钱包依赖于索引器。 索引器提供钱包所需的加密状态,以读取余额并构建私密交易。 默认情况下,索引器可通过访问;任何人也可作为后备无许可运行自己的索引器。私密钱包余额
私密钱包余额在链上存储于私密Solana代币账户中,作为UTXO(未消费的交易输出),而不是Solana代币账户。 默认环和所有自定义环都在一个状态默克尔树中存储私密余额。 私密钱包余额是私密钱包拥有的所有UTXO的总和。 Solana程序可以拥有类似于常规Solana账户的UTXO。 本文件将私密Solana代币账户和UTXO互换使用。UTXO与Solana账户中的余额
UTXO与Solana账户中的余额
对于用户体验,余额是以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注释现在已被消费。
- 一个输入注释
- 多个输入注释
存入SOL和SPL资产的私密余额时,由Solana隐私程序拥有的接口PDA托管代币并创建由用户作为所有者的UTXO。提现至公共余额时,现有UTXO被标记为已消费,代币被释放到Solana代币账户。
policy_program_id字段中。
私密Solana Token账户
私密Solana Token账户是一个UTXO,其行为类似于Solana代币账户,有两个核心区别:- 私密Solana Token账户创建时不需要租金豁免,并且
- 其余额在链上是加密的。
- 资产: UTXO持有的单位的铸币。SOL是默认铸币地址。资产可以是SOL或任何SPL或Token-2022资产。
- 金额: 注释持有的
asset单位数,以资产的最小单位计。 - 程序和策略数据: 配置的环策略可选的添加类似Token-2022功能的数据
- 图示
- 代码
查看Solana Token账户
查看Solana Token账户
- 图示
- 代码