前一段时间,介绍了几篇零知识证明文章:入门zkSNARK, 从 QSP 到 QAP,Groth16 算法介绍, 今天这篇文章分享下利用 EYBlockchain 在以太坊上创建隐私币。
前一段时间,介绍了几篇零知识证明文章:入门zkSNARK, 从 QSP 到 QAP,Groth16 算法介绍, 今天这篇文章分享下利用 EYBlockchain 在以太坊上创建隐私币。
EYBlockchain 是在以太坊的基础上,提供隐私交易的能力。EYBlockchain 目前的实现并不是传统意义上的链,并没有修改以太坊的代码。而是在 ZoKrates(以太坊上 zkSNARKs 的工具箱)的基础上,利用以太坊上的智能合约,提供了以太坊上的比较完整的隐私交易的服务。在以太坊智能合约中,隐私交易的管理类似Zcash。
EYBlockchain 的源代码为Nightfall, 白皮书在这里 。
白皮书 对 EYBlockchain 的愿景以及实现细节解释的比较清楚。
EYBlockchain 在 ZoKrates
的 DSL(Domain Specific Language)的基础上,提供了更人性化一些的语法。ZoKrates 使用 DSL
语言,也就是 .code
文件描述 R1CS(门电路)。EYBlockchain 使用 .pcode
文件,先预处理成 .code
文件。EYBlockchain 针对门电路预处理的代码zokrates-preprocessor。
EYBlockchain 的核心模块是 offchain
和 ZKP
。 offchain
又分为两个功能模块: whisper
提供了 p2p 通讯的能力,pkd(public key directory)存储了公钥。公钥包括两部分:1. whisper 本身的公钥 2. 隐私交易的公钥(地址)。简单的说,offchain 模块维护了线下的公钥,并提供了相互查询的功能。
ZKP 是隐私交易的核心模块,在 ZoKrates 的基础上,实现零知识证明的证明和验证服务。EYBlockchain 还提供了 account 模块,实现以太坊地址的生成。非链上的数据都存储在 database 模块中(目前用 MangoDB 实现)。
EYBlockchain 采用的零知识证明的算法是 GM17,也就是在 2017 年发表的Groth16的增强版本。
EYBlockchain 的源代码目录结构如下:
主要包含了一下几个部分:
在隐私代币生成和流通之前,必须进行初始设置。初始化设置包括两部分:
注意,零知识证明的证明密钥和验证密钥对,必须由可信机制生成。
EYBlockchain 的隐私操作目前包括 3 个:隐私代币生成,转账和销毁。EYBlockchain 目前支持ERC20/ERC721两种代币,所以目前总共有 6 种操作: ft-mint
, ft-transfer
, ft-burn
, nft-mint
, nft-transfer
, nft-burn
。
注: ft 表示 Fungible Tokens, nft 表示:Non-Fungible Tokens
在生成证明密钥/验证密钥之后,在每个操作目录下会生成几个文件:
在以太坊上部署如下的智能合约:
FToken - EY 发行的ERC20的代币合约,EY OPs Coin,简称 OPS。 FTokenShield - ERC20 对应的隐私交易合约,管理所有隐私交易信息。 NFToken - EY 发行的ERC721的代币合约,EYToken,简称 EYT。 NFTokenShield - ERC721 对应的隐私交易合约,管理所有隐私交易信息。 GM17 - 零知识验证智能合约。 Verifier Registry - 提供两个功能:1. 所有零知识验证的验证密钥注册 2. 所有证明信息的存储。
在向 Verifier Registry 注册一个验证密钥后,智能合约会返回一个验证密钥编号(vkId)。
以下以 ERC20 为例,说明隐私交易的生成/转账/销毁逻辑。注意的是,隐私交易涉及的智能合约的交易计算量都比较大,目前代码中建议使用6500000的Gas油费。
隐私代币生成的过程,就是从非隐私的 OPS 代币,到隐私代币的过程。注意的是,mint 的过程本身并不是隐私的,发起账户和金额都是公开的。
值得一提的是,(c,pk,r)三元组生成的 hash 值,在 FTokenShield 会被组织成 merkle 树。hash 值,也称为 commitment,作为 merkle 树的叶子节点。
转账的模型,类似 UTXO 模型。从两个属于同一个账户的隐私交易中(交易金额分别是 c 和 d),生成两个隐私交易:其中一个属于转账对象的(交易金额为 e),另外一个(余额为 f)返回转账发起账户。其中,c+d=e+f。
隐私代币的销毁,就是将代币从隐私账户转回普通账户的过程。
简单的说,就是在证明拥有某个 commitment 中 pk 指定的 sk 的情况下,可以生成 nullifier。在隐私智能合约中销毁隐私代币后,可以将资产恢复到普通账户。
EYBlockchain 还提供了已有功能的简单 UI,方便开发人员验证功能。UI 的界面如下图:
很清楚分为四个部分:EYT(ERC721),EYT 对应的隐私代币,OPS(ERC20),OPS 对应的隐私代币。
EYBlockchain 运行在以太坊上,在 ZoKrates 零知识证明的基础上,利用以太坊上的智能合约提供隐私交易的能力。在智能合约中,隐私交易的管理类似 Zcash。目前,EYBlockchain 在以太坊上发行两种代币:EYT(ERC721)和 OPS(ERC20),并针对这两种代币提供隐私交易的能力。
本文作者 Star Li,公众号星想法有很多原创高质量文章,欢迎大家扫码关注。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!