- 创建一个自我托管的私人钱包
- 使用 Solana 地址接收私人转账
- 将代币存入私人余额
- 私密发送至 Solana 地址
- 提现至任意 Solana 地址
- 在本地解密私人余额和交易历史
- 受保护的密钥对 – 在您的密钥管理中用于加密
- Privacy Interface 和 SDK – 用于构建私人交易
- 用户流程 – 集成到您的钱包中
您的 AI 的上下文
为现有的 Solana 钱包添加私有钱包
1
集成受保护的密钥对
私人钱包集成会在您的密钥管理中添加一个受保护的密钥对。 受保护的密钥对用于签名、加密和解密交易。受保护的密钥对是签名、空值和查看密钥的集合。- 签名密钥: 钱包的 Ed25519 Solana 密钥对用于签署交易。
- 查看密钥: 一个 P-256 密钥对,用于加密和解密交易。
- 空值密钥:
- 对于基于种子的钱包,选择从种子短语导出。
- 对于非基于种子的钱包,选择从 EdDSA 签名导出。
- 从种子短语导出
- 从 EdDSA 签名导出
基于种子的钱包从一个 BIP-39 助记符和账户索引(
0,1……)中导出受保护的密钥对。每个账户索引映射一个 Solana 密钥对到一个受保护的密钥对。
您可以通过与恢复 Solana 密钥对相同的方式恢复受保护的密钥对。例如:- 账户 0: Solana 密钥对 0 和受保护的密钥对 0
- 账户 1: Solana 密钥对 1 和受保护的密钥对 1
受保护的签名密钥就是该账户的 Solana Ed25519 密钥。
空值和查看密钥是从同一个种子导出的附加密钥。
示例实现: TypeScript 示例 · Rust 示例
2
集成 Privacy Interface 和 SDK
Privacy Interface 使您的代码能够使用 Privacy SDK 来构建私人交易,而无需直接访问密钥材料。 您的密钥管理将 Privacy Interface 实现为两个部分。- 使用 Privacy SDK 构建交易的签名接口。查看源码:TypeScript/ Rust
- 加密和解密接口。查看源码:TypeScript/ Rust
Privacy Interface 是无状态的,因此不存储余额或交易历史。
为了提高性能,我们建议在本地缓存用户余额和交易历史。
关于证明生成
生成零知识证明需要完整用户交易数据和空值密钥的明文输入。目前,通过标准 Helius RPC URL 提供服务器证明生成。本地证明生成即将推出。 计划在主网发布前在 AWS Nitro 上进行端到端加密的服务器证明生成。3
集成用户流程
创建私人钱包
创建隐私钱包分为两个步骤:- 派生屏蔽密钥对
- 在链上注册表中注册 Solana 地址。
每条注册记录都是由 拥有的 PDA,任何人都可以查询它,以确定某个 Solana 地址能否接收隐私转账。
- TypeScript Client
- Rust Client
owner是用户的 Solana 地址,用于派生注册表 PDA。address是用户的屏蔽地址。buildRegistrationTransaction返回已编译的注册或密钥更新交易。如果钱包已注册,则返回undefined。sendTransaction对交易进行签名并发送。isWalletRegistered读取注册表 PDA 以检查注册状态。
完整注册示例:TypeScript · Rust
同步隐私余额和交易历史记录
余额同步会从 RPC 获取加密状态,并在钱包中将其解密。RPC 不会执行解密。只有所有者可以使用查看密钥解密隐私余额。钱包应在执行隐私交易之前以及任何运行回填的场景中解密并更新余额,包括钱包解锁、打开隐私钱包、应用恢复运行、网络重新连接、流中断或钱包恢复。
Read a Private Balance
Read Private Transaction History
向隐私余额充值
用户可以通过两种方式向隐私余额充值:- 从法币余额入金至隐私加密货币余额
- 从公开 SPL 账户充值至隐私余额
On-/Off-Ramp
直接向隐私余额存入法币或从中提取法币。
Deposit
从公开加密货币余额充值。
隐私转账
用户可以向任何 Solana 钱包地址发送隐私转账。对于每笔隐私转账,Privacy SDK 都会在链上注册表中查询钱包地址,以检查收款人是否拥有隐私钱包。当收款人没有隐私钱包时,Privacy SDK 可以将隐私转账转换为从隐私余额到公开余额的提现。我们建议在 UI 中将该交易明确标记为提现,以确保用户不会意外提取到公开余额。
Private Transfer
以隐私方式转账至隐私余额。
提现至公开余额
提现有两种用途:- 作为向没有隐私钱包的收款人进行隐私转账时的回退方案,或
- 直接提现至公开 SPL 代币账户。
Withdraw
提现至公开加密货币余额。