主页 > imtoken.im官网 > IPFS之星创意|零知识证明——深入理解EYBlockchain

IPFS之星创意|零知识证明——深入理解EYBlockchain

imtoken.im官网 2023-06-08 06:19:45

EYBlockchain 基于以太坊,提供进行私人交易的能力。 EYBlockchain目前的实现并不是传统意义上的链,以太坊的代码也没有修改。 而是在ZoKrates的基础上,利用以太坊上的智能合约,在以太坊上提供相对完善的隐私交易服务。 在以太坊智能合约中,隐私交易的管理类似于 Zcash。

EYBlockchain源码下载地址:

EYBlockchain白皮书下载地址:

白皮书清楚地解释了 EYBlockchain 的愿景和实施细节。

EYBlockchain 在 ZoKrates 的 DSL(领域特定语言)的基础上提供了更加用户友好的语法。 ZoKrates使用DSL语言,即.code文件描述R1CS(门电路)。 EYBlockchain 使用.pcode 文件,这些文件首先被预处理为.code 文件。 EYBlockchain门电路预处理代码:

01 整体框架

2020070104004661

EYBlockchain的核心模块是offchain和ZKP。 offchain进一步分为两个功能模块:whisper提供p2p通信的能力,pkd(public key directory)存储公钥。 公钥由两部分组成: 1. 耳语本身的公钥 2. 私密交易的公钥(地址)。 简单来说,offchain模块维护离线公钥,提供相互查询功能。

ZKP是隐私交易的核心模块。 基于ZoKrates,实现零知识证明的证明和验证服务。 EYBlockchain还提供了账户模块来实现以太坊地址的生成。 不在链上的数据存储在数据库模块中(目前使用 MangoDB 实现)。

EYBlockchain采用的零知识证明算法为GM17,是2017年发布的Groth16的增强版。

02 源码结构

EYBlockchain的源代码目录结构如下:

sitejinse.com 以太坊智能合约开发_如何在以太坊上部署智能合约_以太坊智能合约的应用

2020070104012166

API-Gateway:API调用接口。

accounts:创建以太坊账户地址。

database:数据存储,使用MangoDB数据库实现。

offchain:实施耳语和公钥管理。

zkp:隐私交易的核心逻辑,主要是零知识证明和验证服务。

用户界面:示例用户界面。

03初始设置

在铸造和流通隐私币之前,必须进行初始设置。 初始化设置包括两部分: 1. 用于零知识证明的证明密钥/验证密钥对 2. 在以太坊上部署智能合约。 需要注意的是,零知识证明的证明密钥和验证密钥对必须由可信机制生成。

用于零知识证明的证明密钥/验证密钥对

EYBlockchain的隐私操作目前包括3个:隐私令牌的生成、转移和销毁。 EYBlockchain目前支持ERC20/ERC721代币,所以目前一共有6种操作(ft-mint、ft-transfer、ft-burn、nft-mint、nft-transfer、nft-burn)。

2020070104045250

如何在以太坊上部署智能合约_以太坊智能合约的应用_sitejinse.com 以太坊智能合约开发

生成认证密钥/认证密钥后,每个操作目录下会生成几个文件:

2020070104052010

nft-mint-vk.json – 用于验证密钥的 json 文件

verification.key – 验证密钥的原始数据

proving.key – 证明密钥

xxx-mint.pcode——pcode描述的门电路

verifier.sol – ZoKrates 生成零知识可验证智能合约。 目前已过时。 所有的零知识验证都是通过统一的GM17.sol来完成的。

以太坊智能合约部署

在以太坊上部署以下智能合约:

2020070104055131

FToken——安永发行的ERC20代币合约,EY OPs Coin,简称OPS。

FTokenShield——对应ERC20的隐私交易合约,管理所有隐私交易信息。

sitejinse.com 以太坊智能合约开发_如何在以太坊上部署智能合约_以太坊智能合约的应用

NFToken——安永发行的ERC721代币合约,EYToken,简称EYT。

NFTokenShield——对应ERC721的隐私交易合约,管理所有隐私交易信息。

GM17 - 智能合约的零知识验证。

Verifier Registry – 提供两个功能: 1. 注册所有零知识验证的验证密钥; 2. 存储所有证明信息。

在 Verifier Registry 注册一个验证密钥后,智能合约返回一个验证密钥编号(vkId)。

下面以ERC20为例如何在以太坊上部署智能合约,说明隐私交易的生成/转账/销毁逻辑。 需要注意的是,隐私交易涉及的智能合约计算量较大,目前代码建议使用6,500,000 gas费。

04 隐私令牌生成(薄荷)

隐私通证的生成过程就是非隐私的 OPS 通证到隐私通证的过程。 请注意,铸币过程本身不是私人的,原始账户和金额是公开的。

2020070104113479

Step1 – 通过 ft-mint 的 vkId 生成证书。 公开信息为转账金额和(c,pk,r)三元组生成的哈希值。 私有信息是 pk 和 r。 r 是一个随机数。

Step2 – 调用FTokenShield智能合约的mint接口,提交proof/public信息和vkId。

Step3/4 - 调用 GM17 和 Verifier Registry 来存储和验证证明。

sitejinse.com 以太坊智能合约开发_以太坊智能合约的应用_如何在以太坊上部署智能合约

Step5 – 验证证明后,调用FToken智能合约将资金从发起人账户转入FTokenShield。

值得一提的是,(c,pk,r)三元组生成的哈希值在FTokenShield中会被组织成一棵merkle树。 哈希值,也称为承诺,作为默克尔树的叶节点。

2020070104120048

05隐私代币转移(Transfer)

转账模型类似于 UTXO 模型。 从属于同一账户的两笔私人交易(交易金额为c和d),生成两笔私人交易:其中一笔属于转账对象(交易金额为e),另一笔(余额为f)返回转账发起账户。 其中,c+d=e+f。

2020070104122619

Step1 – 通过ft-transfer的vkId生成证书。 为 e 和 f 生成承诺,为 c 和 d 生成无效符。

Step2 – 调用FTokenShield智能合约的转账接口,提交proof/public信息和vkId。

Step3/4 - 调用 GM17 和 Verifier Registry 来存储和验证证明。

Step5 - 通过耳语通知转账对象:转账金额e、随机数r1、z1和默克尔树上叶子节点的索引。

06隐私代币销毁(Burn)

隐私代币的销毁是将代币从私人账户转移回普通账户的过程。

sitejinse.com 以太坊智能合约开发_如何在以太坊上部署智能合约_以太坊智能合约的应用

2020070104145449

Step1 – 通过ft-burn的vkId生成证书。

Step2 – 调用FTokenShield智能合约的烧录接口,提交proof/public信息和vkId。

Step3/4 - 调用 GM17 和 Verifier Registry 来存储和验证证明。

Step5 – 验证证明后,调用FToken智能合约将资金从FTokenShield转入发起人账户。

简单的说,如果证明某个commitment中pk指定的sk是拥有的,就可以产生一个nullifier。 隐私智能合约中的隐私代币销毁后,可以将资产恢复到正常账户。

07 用户界面部分

EYBlockchain还为已有的功能提供了一个简单的UI,方便开发者验证功能。 UI界面如下:

2020070104152259

明确分为四个部分:EYT(ERC721),EYT对应的隐私代币,OPS(ERC20),OPS对应的隐私代币。

总结:

EYBlockchain 在以太坊上运行。 基于ZoKrates零知识证明,利用以太坊上的智能合约提供隐私交易能力。 在智能合约中,隐私交易的管理类似于 Zcash。 目前,EYBlockchain在以太坊上发行两种代币:EYT(ERC721)和OPS(ERC20)如何在以太坊上部署智能合约,并为这两种代币提供隐私交易的能力。