Electron Labs
使用零知识轻客户端#ZKLC构建更好的跨链连接器
Last updated
使用零知识轻客户端#ZKLC构建更好的跨链连接器
Last updated
ZKLC 代表零知识轻客户端。ZK 轻客户端允许我们通过构建其有效性的 zk 证明来证明交易的有效性,然后每个人都可以廉价地验证它。验证者不再需要运行完全共识。
让我们深入探讨如何构建交易有效性的 zk 证明。
检查交易的有效性可以通过完整的块验证或轻客户端验证来完成。这两种技术本质上都涉及验证大量数字签名。在基于 Rust 的链上,ED25519 是最流行的数字签名方案。
因此,我们现在必须找出一种方法来为一大批 ED25519 签名构建单个 zk-snark 证明。
我们的方法包括两个步骤:-
构建单个 ED25519 签名的 snark 证明。
将一批 ED25519 snark 证明组合成一个 snark 证明。
让我们详细了解每个步骤。
我们首先使用 circom 以 R1CS 约束格式实现 ED25519 签名方案。R1CS 基本上是 ED25519 背后数学的多项式表示。然而,这有一个问题。circom 和 zk-snarks 中定义的所有数学运算仅适用于小于或等于素数 p = 21888242871839275222246405745257275088548364400416034343698204186575808495617 的数字。这是因为altbn128 曲线使用此素数。
但是ED25519的数学需要超出这个数的数运算。为了解决这个问题,我们以 2⁵¹ 表示所有数字。这意味着所有数字总是低于素数 p。我们选择 2⁵¹ 作为基数,因为它允许我们利用 ED25519 (q = 2²⁵⁵-19) 使用的素数的某些数学特性。最后,我们使用 snarkJS 库来构建 zk-proof。
查看我们的github repo以查看实现。
我们现在必须将多个 snarks 证明组合成一个证明。这个单一的证明将证明所有其他的证明。我们将如何做到这一点?
比如说,我们有两个证明proof1和proof2。我们可以构造第三个证明proof3来证明proof1和proof2是有效的。circom 电路将proof1和proof2作为输入信号,然后使用 circom 实现的证明验证算法(在曲线altbn128上)。
我们可以通过创建一种 merkle 树结构将其扩展到许多证明,在这种结构中我们连续地将证明组合在一起以创建单个证明。
该技术改编自 Mina Protocol 的递归 snark 技术和Polygon Zero 的plonky2。
基于零知识的轻客户端有很多应用。它们使我们能够在任何地方以非常低的成本证明交易的有效性,例如任何区块链或云应用程序中的智能合约。
在 Electron Labs,我们正在使用它们来构建超便宜的跨链桥。许多跨链交易可以批处理成单个 snark 证明。这使得跨链交易成本非常低,几乎与正常的区块链交易相当。
我们目前正在为 NEAR 和 tendermint 区块链构建 ZKLC 轻客户端。未来,我们计划扩展这项技术来创建整个区块链本身的证明,这将有巨大的应用。