轻客户端验证问题
轻客户端,也称为轻量级客户端或 SPV(简化支付验证)客户端,在比特币原始白皮书中提出,旨在无需下载整个区块链即可与区块链网络互动。SPV 客户端只下载每个区块的80字节头部信息(每个区块10分钟,共80万个区块),然后向全节点请求与客户端地址相关的交易信息。
在 MAP Protocol 中的轻客户端是作为智能合约构建在 MAP 中继链和所有连接的区块链上的。尽管这比如多方计算(MPC)等解决方案更安全和去中心化,但轻客户端验证网络的燃料费消耗量更大,这样的成本效率可能不足以实用,也不足以服务于跨链目的。为了提高效率,轻客户端可以验证一个 ZK-SNARK 证明来确认一个区块头部信息是有效的。
理解 ZK-proof
零知识证明(ZKP)是一种密码协议形式,它允许一个方(证明方)向另一个方(验证方)证明某个陈述是真实的,而不揭露除了陈述本身的有效性之外的任何信息。换句话说,零知识证明允许分享知识的证明,而不分享知识本身。以下是两种最常见的零知识证明:
ZK-SNARKs(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge):
- "零知识":证明方可以证明拥有某些信息而不揭露它。
- "简洁":证明体积小且验证迅速。
- "非交互式":证明是从证明方发送给验证方的单一信息,无需来回通信。
ZK-SNARKs 在区块链应用中广泛用于提升隐私。例如,注重隐私的加密货币 Zcash 使用 ZK-SNARKs 来允许交易而不揭露发送者、接收者或交易金额。
ZK-STARKs(Zero-Knowledge Scalable Transparent Arguments of Knowledge):
- "零知识":与 SNARKs 类似,STARKs 允许证明知识而不揭露知识本身。
- "可扩展":STARKs 设计为与计算规模可扩展,并且即使对于大数据集也有效率。
- "透明":与 SNARKs 不同,STARKs 不需要可信设置。没有这个要求提高了信任和安全性。
ZK-STARKs 被认为是 SNARKs 的改进,因为它们具有可扩展性和不需要可信设置的优点。它们仍处于早期采用阶段,但对于需要透明性和可扩展性的广泛应用来说,它们充满希望。
MAP Protocol 如何使用 ZK-proof 重构轻客户端?
随着 ZK 技术的最近发展,MAP Protocol 重构了其轻客户端构建并优化了跨链验证网络的效率。
在原始的轻客户端验证网络中,客户端需要存储所有当前验证者的公钥以及它们各自的权重。验证区块的有效性需要访问验证者集合的所有公钥,并聚合参与区块签名的验证者的公钥(MAP 中继链使用聚合的 BLS 签名)。然而,通过使用零知识证明,上述过程可以通过算术电路表达,生成相应的零知识证明;
在这种设计中,轻客户端不再需要存储当前验证者集合中所有验证者的公钥和权重。相反,它只存储当前验证者集合的公钥和权重的承诺值(所有验证者的工业和权重信息的哈希值编码)。聚合公钥和验证聚合 BLS 签名的有效性的计算都通过算术电路表达,并使用 Groth16 协议 计算以生成零知识证明。
要了解更多技术细节,您可以查看我们在 MAP Protocol 白皮书 中撰写的 ZK 部分。
总结
在 MAP Protocol 的方法中,ZK-proof,特别是 zkSNARK 证明,表明当前区块头部,在对应于轻客户端内部存储的承诺值的验证者集下,是一个合法的区块头部。
对轻客户端来说,验证区块头部的有效性涉及访问所有公钥和权重、计算聚合公钥和验证签名有效性等一系列操作。现在这一切都简化为验证恒定大小的 zkSNARK 证明的合法性,从而提高了轻客户端验证网络的效率,同时保持其去中心化。