您好!刚知道Zcash吗?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

语言

zkSNARKs 与以太坊

Sean Bowe | Jul 28, 2016

在上一周,Vitalik Buterin, Andrew Miller, Eran Tromer 和我自己参加了在康奈尔大学举行的 Ethereum/IC3 训练营 活动。在活动中,我们与一群优秀的康奈尔学生/实习生一起愉快的工作,一位以太坊基金会第一次将 zkSNARKs 与以太坊相结合。

SNARKs in Ethereum Team Photo

(从左至右) Yuncong Hu, Casey Detrio, Josh Gancher, Sean Bowe, Eran Tromer

SNARKs

zk-SNARKs 是 Zcash 底层的密码学工具。它可以被看做一些证明,这些证明可以帮助你在不揭露所有输入数据时,计算出某些输入数据。Zcash 使用这些证明在保证不揭露用户隐私的情况下去验证这笔交易。

除了伟大的隐私性,它在减小复杂智能合约验证的消耗方面同样有很大帮助。由于zkSNARK所需的证明通常较小,因此它能够在不增加额外负担的情况下保护计算的真实性。

在我们本周的工作中,我们将以太坊智能合约语言扩展到可以高效接受 zkSNARK 证明的程度。特别的,我们增加了 snarkverify 预编译功能 ( 就像是 opcode ),用来分叉 Parity ,此功能的目的是使用 libsnark 来验证原有证明的真实性。

在以太坊之上的 Zerocash

Sean Bowe demonstrates the circuit.

在声明中,我们使用了基于以太坊的新 zkSNARK 验证器,它执行一个原始的混币合约并利用一个简化版的变体 Zerocash 来实现验证功能。Zerocash 是 Zcash 的学术版底层协议。我们新的验证器称作 “baby” ZoE,意思是建立在以太坊上的 Zerocash。 这个合约允许用户存入将离散单元 ( ETH 单元) 存入"标有序号的" Merkle 树的合约中。

为了在不揭露用户协议的前提下完成提现操作,需要将提现和充值联系起来。因此,我们使用了 zkSNARK 来证明 我们知道 在 Merkle 树合约中的协议。为了防止双重支付,我们在使用 zkSNARK 的同时揭露了一个序列号,这个序列号由合约记录的,并能够防止二次使用。

为了防止其他用户拿到证明并在你不同意的情况下提现,证据同样验证提现地址 (在以太坊中) 是否属于合约中授权的地址。

有关使用 SNARK 验证将 Zerocash 合并到一种货币中的想法最初起源于 Zerocash 论文 (Section 6.3 in Zerocash extended version). 据论文中的描述,可以将 ZoE 的合约拓展到完整的 Zerocash 协议中。

结论

我们喜欢位比特币和以太坊做出贡献,并期待与其他密码学货币社区建立更广泛的合作关系。你可以在以下的地址找到我们的代码 这里.