基于EthSnarks的以太坊Miximus混币器

简介:

Miximus是一个用于以太坊区块链的去中心化混币器和匿名转账应用,由EthSnarks作者开发,用于展示零知识证明在以太坊上的实用性。本文介绍Miximus以太坊混币应用的安装使用方法、工作原理和实现细节。

用自己熟悉的语言学习以太坊DApp开发:Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、Miximus混币应用概述

利用Miximus混币应用,你可以存入1个ETH,然后利用zkSNARK证据证明你持有这个币的消费密钥,通过验证之后就可以提币了,整个过程保证了匿名性。

Miximus的主要源代码包括:

  • Miximus.sol
  • miximus.py
  • test_miximus.py
  • miximus.cpp

zkSNARK证明方作为原生库构建,因此可以打包进你的应用,当提供正确的参数后,库会返回JSON格式的zkSNARK证据。你可能会认为zkSNARKs很慢 —— Miximus选择的算法生成证据的平均时间是5秒,不过我们还在研究其安全特征。

2、构建Miximus混币引用

如果在Linux上构建Miximus混币应用,需要先安装以下依赖软件:

  • cmake 3
  • g++ or clang++
  • gmp
  • libcrypto
  • boost
  • npm / nvm

在OSX上需要Brew和nvm:

make git-submodules # Pull sub-repositories
make -C ethsnarks mac-dependencies
make -C ethsnarks python-dependencies
nvm install --lts
make

在Ubuntu上使用如下命令构建:

make git-submodules # Pull sub-repositories
sudo make -C ethsnarks ubuntu-dependencies
make -C ethsnarks python-dependencies
nvm install --lts
make

在CentOS上构建命令如下:

yum install cmake3 boost-devel gmp-devel
nvm install --lts
make git-submodules # Pull sub-repositories
make -C ethsnarks python-dependencies
make CMAKE=cmake3

3、Miximus混币应用的工作原理

假设Alice要给Bob转一个币:

1、Bob给Alice一个只有他自己才知道的密文的哈希
2、Alice使用Miximus智能合约的Deposit()方法向合约存入1个ETH,同时传入Bob给的哈希
3、Alice存入的币插入合约维护的merkle树,在这棵树上所有的币都是1个ETH
4、Bob使用密文生成zkSNARK证据,这可以证明他拥有Miximus合约中对应的币。 在证据中包含了不可链接的消费标签,以避免同一个币被两次消费(双花)。
5、Bob使用Miximus合约的Withdraw()方法提交证据和消费标签,如果对应 的币还没有被消费,那么Miximus向Bob支付1个ETH

4、Miximus混币应用的实现细节

如果Alice希望给Bob转账,那么她需要Bob提供一个密文哈希。Bob首先生成一个随机密文(随机场成员,按zkSNARK素数取模):

coin_secret = FQ.random()

随后Bob将密文的哈希发送给Alice:

bobs_leaf = H(coin_secret)  # Generated using `MakeLeafHash()` method of the smart-contract

Alice调用Miximus合约的Deposit()方法存入以太币的同时传入bobs_leaf参数,该参数也是存入的币在Miximus合约中的merkle树上的叶节点。Bob可以通过监听Miximus合约的OnDeposit事件来监听Alice是否已经完成转账。由于只有Bob知道密文,因此只有Bob能够生成正确的zkSNARK证据。

Bob使用leaf_index参数(从OnDeposit事件得到)调用Miximus合约的GetPath()方法提取Alice存入的币对应的merkle树路径,同时使用合约的GetRoot()方法得到合约的merkle树的根节点。

Bob调用Miximus合约的GethExtHash()方法提取其外部哈希external_hash,即合约地址和Bob以太坊地址的哈希。这意味着只有Bob的账户可以向指定合约提交其生成的证据,目的是避免重放攻击及其他恶意行为。

5、zkSNARK电路伪代码

只有external_hashnullifiermerkle_root参数是公开的并且可以在链上查到,其余数据都是zkSNARK证据的私有输入:

def circuit(secret, path_var, address_bits, nullifier, root, external_hash, pub_hash):
   assert H(root, nullifier, external_hash) == pub_hash
   leaf_hash = H(secret) # Prove we know the secret for the leaf
   assert root == merkle_authenticate(path_var, address_bits, leaf_hash) # Prove that leaf exists within the tree
   assert H(address_bits, secret) == nullifier

上述电路可以验证:

  • 叶节点在merkle树上
  • 证明人知晓叶节点对应的密文(哈希的preimage)
  • 消费标签是从叶节点得出的

由于这时zkSnark证据,因此上述证明过程不会透露到底是merkle树的哪个叶节点,但是如果Bob试图为同一个叶节点生成两个证据,那么由于消费标签是相同的,因此Bob的双花尝试不会成功。

Miximus合约没有使用密钥(或secp256k1),其实现仅仅利用了密文和哈希。zkSNARK证据可以证明你的确知道密文而无需透露其具体内容。Miximus合约使用的哈希函数是MiMC,它作用于素数域而非字节数据。


原文链接:Miximus以太坊混币应用 — 汇智网

目录
相关文章
|
9月前
|
存储 分布式计算 区块链
什么是以太坊Layer2?
![在这里插入图片描述](https://img-blog.csdnimg.cn/1180429dd65840c68ee5cd1b7e195ba8.png#pic_center) @[TOC](目录) 以太坊(Ethereum)是一种基于区块链技术的分布式计算平台,提供了智能合约的支持,使得开发者可以构建基于以太坊的去中心化应用(DApps)。然而,由于以太坊网络的规模和性能限制,许多开发者和用户对以太坊网络的扩容问题提出了担忧。为了解决这个问题,以太坊社区提出了许多扩容方案,其中以太坊Layer2(也称为以太坊二层扩容)是其中之一。 以太坊Layer2是一种通过在以太坊主网络之上构建的另一
|
JSON JavaScript 前端开发
以太坊 – 部署智能合约到Ganache
将编译好的智能合约部署到本地的Ganache区块链网络。步骤如下:更新项目的配置文件,修改网络配置连接到本地区块链网络(Ganache)。创建迁移脚本,告诉Truffle如何部署智能合约。运行新创建的迁移脚本,部署智能合约。...
1514 0
以太坊 – 部署智能合约到Ganache
|
区块链
以太坊之dapp
以太坊之dapp
|
前端开发 JavaScript 区块链
以太坊智能合约开发入门
以太坊合约就是以太坊区块链特定账户地址上的一串代码(functions)和数据(state)。合约账户不仅可以相互间通讯,还可以执行几乎所有的图灵完备计算。以太坊区块链上的合约代码是特定的二进制形式,被称作以太坊虚拟机(EVM)二进制代码。本文以最受欢迎的Solidity为例说明以太坊开发如何入门。
5477 0
|
JavaScript 测试技术 区块链
使用truffle部署以太坊智能合约到区块链
truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。
2159 0
|
移动开发 前端开发 JavaScript
开发基于以太坊智能合约的DApp
最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原因,在于不了解ganache-cli(原来叫testrpc)/web3/以太坊节点/metamask之间的架构关系。
1550 0
|
区块链
以太坊-相关
Infura-托管的以太坊节点集群 Infura是一个托管的以太坊节点集群,可以将你开发的以太坊智能合约部署到infura提供的节点上,而无需搭建自己的以太坊节点。
1180 0
|
存储 区块链 数据安全/隐私保护
什么是以太坊?什么是智能合约?
以太坊智能合约 以太坊是一个分布式的计算平台。它会生成一个名为Ether的加密货币。程序员可以在以太坊区块链上写下“智能合约”,这些以太坊智能合约会根据代码自动执行。
1664 0
|
新零售 区块链 数据安全/隐私保护
深入浅出以太坊智能合约
Eth(以太坊)不知道你有没有听说过,ICO你一定听说过。但你知道ICO其实是借助Eth的智能合约实现的吗?什么是智能合约,Eth为啥这么火?智能合约的特点是什么,我怎么写智能合约?基于智能合约还有Dapp,即分布式app,Dapp又是什么? 本系列文章将全面讲述Ethereum的原理,特点和机制,以及涉及的各种概念。
1402 0
|
新零售 区块链
2018年2月DappRadar以太坊10大DApp应用
这是2018年2月以太坊DApp应用活跃度排行榜,DappRadar根据其对以太坊交易的监测而自动生成,计算的主要依据是DApp在一周内的交易量: 没准下一个明星DApp就是你开发的:) 1. EtherCraft 地址:https://dappradar.com/app/17/ethercraft 这是一个RPG游戏,其中包含各种各样的物品,运行着超过100(!!!)个智能合约,是目前最活跃的以太坊游戏,每周有超过102,047次交易。
1824 0