工作原理
PIVX 命名服务(PiNS)让你注册便于阅读的域名(例如 myname.pivx)、更改其解析到的地址、转让给其他持有者,以及在市场上挂售,并把它们安全地映射到 PIVX 地址。
由于 PIVX 是基于 UTXO 且没有通用智能合约的区块链,它本身无法运行像域名登记簿这样复杂的数据库系统。为了解决这个问题,PiNS 采用了 rollup 式架构:操作在链下执行,数据存放在 PIVX 上,安全性则锚定在 BNB Smart Chain 上。
系统由五个相互衔接的组件构成:
1. PIVX 区块链:数据可用层
用户的每一个动作——注册名称(REG)、更改地址(UPD)、转让所有权(CHG)、挂到市场(LST)、下架(ULT)或购买(BUY)——都以一笔原生 PIVX 交易开始。交易在备注字段中携带一条结构化的文本命令(例如 PiNS:1:REG:domain:address:pubkey:nonce:signature)。
- 真相之源是 PIVX 链。 它永久保存每一条域名命令。没有被记录下来的 PIVX 交易,就不会有任何状态变化。
2. 注册方节点:定序器
一个自动化的注册方节点扫描 PIVX 区块链。它读取域名命令,核对用户是否支付了正确的费用,并把操作排入队列。每隔 10 分钟,注册方会把这些操作打包成一个批次(batch)。
3. SP1 zkVM:零知识引擎(由 Succinct 提供)
交易批次被送入 SP1 零知识虚拟机(zkVM)。zkVM 运行一个专用的 Rust 客户程序,它扮演严格的协议裁判。证明生成器会检查批次中的每一笔交易:
- 签名是否有效,且确实由真正的域名持有者签署?
- nonce 是否严格递增,从而防止重放攻击?
- 域名前缀格式是否正确?
BUY交易支付的金额是否恰好等于LST交易中指定的价格?old_root是否按照数学上的默克尔证明正确转移到new_root?
若所有规则都满足,zkVM 会生成一份 ZK-SNARK 密码学证明(使用 Groth16)。这份证明是一张极小的凭证,它在数学上宣告:「从状态根 A 出发,应用这个有效的交易批次之后,新的状态根是 B。」
该客户程序的每一个编译版本都会产生一个唯一的密码学标识,称为验证密钥(vkey)。vkey 是已编译客户程序自身结构的 32 字节哈希。哪怕只改动校验代码中的一行,程序也会编译出完全不同的 vkey。
4. BNB Smart Chain 上的合约:锚点
生成的 ZK 证明及其公开输入被发送到 BNB Smart Chain 上的 PiNSAnchor 智能合约。该合约充当结算网关。
- 密码学绑定:智能合约内部在链上存有
programVkey(客户程序预期的 32 字节哈希)。当有证明被提交时,合约会把它连同programVkey一起转发给 Succinct 的 SP1 验证网关。 - 钥匙与锁的校验:只有当证明确实由与已登记
programVkey相匹配的那个客户程序生成时,验证网关才会通过。 - 若证明有效并通过了对已登记
programVkey的验证,合约就把官方的、被全局认可的状态根更新为B,并存入其历史记录。 - 若有任何一条规则被违反,或者证明是由被修改过的客户程序生成的(那会得到不同的
vkey),合约就会拒绝该交易,阻止未经授权的状态转移。
为什么选择 BNB Smart Chain
锚定链唯一的职责就是保存一个根并验证一份证明,因此真正重要的只有两点:检查点多快变得最终,以及你能 多有把握它会一直如此。
- 出块时间约 2 秒,因此批次几乎在被证明的同时就完成锚定,索引器也能迅速在新的检查点上达成一致。
- 实践中不存在深度重组,因此索引器已同步到的检查点不会被从脚下抽走。会发生深度重组的锚定链,将 迫使索引器回滚它们早已视作最终的状态。
- 无论批次大小如何,证明验证在链上的成本都是固定且低廉的——一次 Groth16 验证即可覆盖批次中的所有操作。
5. 分布式索引器:解析器
任何人都可以运行独立的索引器节点。索引器在 PIVX 区块链上扫描域名交易,并在 BNB Smart Chain 合约上扫描已验证的根检查点。它们在本地应用这些交易,计算自己的默克尔树,并核对本地根是否与链上检查点一致。
- 这确保了所有索引器,无论运行在何处,始终把域名解析到完全相同的目标地址(在分布式各端维持单一统一的状态)。