工作流程
PIVX 命名服务 (PiNS) 允许用户注册、更新、列出和传输人类可读的域名(例如 myname.pivx),并将它们安全地映射到 PIVX shielded (Sapling) 地址。
由于 PIVX 是一个基于 UTXO 的区块链,没有通用智能合约,因此它无法原生运行像域名注册中心这样的复杂数据库系统。为了解决这个问题,PiNS 使用 Rollup 式架构,在链外执行操作,将数据存储在 PIVX 上,并将安全性锚定在 Arbitrum 上。
该系统由五个互连的组件提供动力:
1. PIVX 区块链:数据可用性层
用户采取的每项操作 - 注册名称 (REG)、更新地址 (UPD)、转让所有权 (CHG)、在市场上上市 (LST)、取消上市 (ULT) 或购买 (BUY) - 均以原生 PIVX 交易开始。交易在交易备注字段中包含结构化文本命令(例如 PiNS:1:REG:domain:address:pubkey:nonce:signature)。
- PIVX 链是事实来源。 它永久存储每个域命令。如果没有记录 PIVX 事务,则不会发生状态更改。
2. 注册器节点:排序器
自动注册节点扫描 PIVX 区块链。它读取域命令,验证用户是否支付了正确的交易费用,并对操作进行排队。每 10 分钟,注册商会将这些操作捆绑到一个批次中。
3. SP1 zkVM:零知识引擎(作者:Succinct)
该批交易被发送到 SP1 零知识虚拟机 (zkVM)。 zkVM 运行一个专门的 Rust guest 程序,充当严格的协议仲裁者。证明者检查批次中的每笔交易:
- 签名是否有效并由实际域名所有者签署?
- 随机数是否严格增加以防止重放攻击?
- 域名前缀的格式是否正确?
BUY交易是否支付LST交易中指定的确切价格?- 使用数学 Merkle 证明,
REG0__ 是否正确转换到REG1__?
如果满足所有规则,zkVM 会生成 ZK-SNARK 加密证明(使用 Groth16)。这个证明是一个微小的证书,它在数学上声明:“从状态根 A 开始,应用这批有效的交易后,新的状态根是 B。”
该来宾程序的每个编译版本都会生成一个唯一的加密标识符,称为验证密钥 (vkey)。 REG2__ 是已编译的来宾程序结构本身的 32 字节哈希值。即使修改一行验证代码,程序也会编译为完全不同的REG3__。
4. Arbitrum 智能合约:锚
生成的 ZK 证明及其公共输入被发送到 Arbitrum 上的 PiNSAnchor 智能合约。合约充当结算网关。
- 加密绑定:在智能合约内部,
REG4__(客户程序的预期 32 字节哈希值)存储在链上。提交证明后,合约会将证明和REG5__ 转发到 Succinct SP1 Verifier Gateway。 - 钥匙锁验证:只有当证明是由与注册的
REG6__ 匹配的精确访客程序生成时,验证网关才会批准该证明。 - 如果证明有效并根据注册的
REG7__ 进行验证,合约会将官方的、全球接受的状态根更新为REG8__ 并将其保存在其历史记录中。 - 如果违反了单个规则,或者如果使用修改后的访客程序生成证明(这将产生不同的
REG9__),则合约将拒绝交易,从而防止未经授权的状态转换。
5.分布式索引器:解析器
任何人都可以运行独立的索引器节点。索引器扫描 PIVX 区块链以查找域交易,并扫描 Arbitrum 合约以查找已验证的根检查点。他们在本地应用交易,计算自己的 Merkle 树,并验证其本地根是否与 Arbitrum 检查点匹配。
- 这确保所有索引器,无论在何处运行,始终将域解析到完全相同的目标地址(在分布式端保持单一统一状态)。