上次我写了一篇 EYBlockchain 在以太坊上创建隐私币, 最近有点时间,重新看了看EYBlockchain的源代码,对EYBlockchain的理解又深入了不少。画了一些图,分享给有需要的小伙伴 :)
上次我写了一篇 EYBlockchain 在以太坊上创建隐私币, 最近有点时间,重新看了看 EYBlockchain 的源代码,对 EYBlockchain 的理解又深入了不少。画了一些图,分享给有需要的小伙伴 :)
整个 EYBlockchain 是基于 Ethereum 的 Web3 接口之上搭建,主要由五个模块组成:accounts(账户管理),database(数据存储),whisper(节点间消息交互),PKD(存储 public key),zkp(零知识证明处理)。zkp 是 EYBlockchain 核心逻辑,提供了以太坊上智能合约的实现,几种操作的电路描述,以及使用 ZoKrates 实现零知识证明。在这些模块之上,提供了统一的 API-Gateway。UI 调用 API-Gateway 完成相关功能。
从用户的角度(UI)来看,EYBlockchain 只需要用户名和密码。EYBlockchain 内部会根据用户密码生成以太坊公钥和私钥以及 whisper 的公钥和私钥。
EYBlockchain 在以太坊上需要部署 7 个智能合约。PKD 实现公钥的查询,GM17 实现零知识证明的验证。FToken 是 ERC20 智能合约(也就是 OPS 代币合约),FTokenShield 是 ERC20 对应的隐私交易合约。NFToken 是 ERC721 智能合约,NFTokenShield 是 ERC721 对应的隐私交易合约。Verifier Registry 智能合约实现零知识证明验证密钥的注册。
EYBlockchain 采用 UTXO 模型。在 FTokenShield 智能合约中,生成一个 UTXO 称为 commitment,消耗一个 UTXO 称为 nullifier。在 FTokenShield 合约中,主要维护了两个数据结构:
以下是 ERC20 代币的三种操作:Mint(从普通的 ERC20 代币生成隐私的代币),Transfer(隐私代币转账),Burn(从隐私代币转回为普通 ERC20 代币)。每一种操作都会通过零知识证明生成相应电路的证明。
以 Transfer 为例,相应的证明电路需要证明如下一系列的等式成立。
理解 zk-SNARK,需要了解一些术语:Circuit(电路),R1CS,QAP,Groth16。一个计算可以由一系列的“乘法门”和”加法门“组成,称之为”电路“。每个门电路可以通过向量点乘的方式生成 R1CS。R1CS 通过一定的转换可以生成 QAP 问题。一旦有了QAP问题的描述,Groth16 能生成相应的证明。对这些术语还不太了解的小伙伴,可以查看之前的文章深入了解零知识证明算法。Groth16是 Groth 在 16 年提出的算法,GM17 是 Groth 在 17 年提出的增强算法。
EYBlockchain 使用 ZoKrates 的工具生成零知识证明。ZoKrates 集成了 libsnark 和 bellman 代码库,实现电路的生成和 Groth16 的生成。使用 ZoKrates 需要提供相应的电路的描述(DSL 语言)。提供了电路,就能使用 ZoKrates 设计的 5 个接口生成证明和验证。EYBlockchain 使用了 BN128 椭圆曲线以及 GM17 零知识证明算法。
EYBlockchain 实现了基于以太坊的隐私交易,但目前还有一些值得探讨的点:
总结: EYBlockchain 在 ZoKrates 零知识证明的基础上,实现了以太坊上隐私交易的能力。EYBlockchain 在以太坊上发行两种代币:EYT(ERC721)和 OPS(ERC20),并针对这两种代币提供隐私交易的能力。EYBlockchain 存在一些需要进一步考虑的问题:可信设置,Whisper 消息的持久化,性能较低等等。
本文作者 Star Li,他的公众号星想法有很多原创高质量文章,欢迎大家扫码关注。
学习中如遇问题,欢迎到区块链技术问答提问,这里有老师为你解惑。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!