Ethermint部署及框架解析

Ethermint是什么

Ethermint is a blazing fast Proof-of-Stake blockchain that is fully compatible with Ethereum.
Ethermint 是一款非常快速的POS区块链,并整体兼容以太坊Ethereum。
简单来说,Ethermint 做了一件事:集成Tendermint和Ethereum。Ethermint集成Tendermint并实现POS+BFT的共识机制。

框架解析

Ethermint的框架如下图所示
架构
Ethermint 首先通过Backend结构体的EthState与Ethereum中的区块链和状态数据结合封装。其次通过event.TypeMuxSubscription事件监听Ethereum中的交易数据,并将交易tx通过rpcClient.HTTPClient提交到Tendermint。最后通过EthermintApplication实现的ABCI接口连接Tendermint和Backend。

部署测试

所需文件及版本:

tendermint  0.10.5-acc161f7
ethermint 0.5.3-a5308d8
geth 1.6.7-stable
  • 1
  • 2
  • 3

1.下载编译

首先在linux安装好golang环境和git

## 下载ethermint
git clone https://github.com/tendermint/ethermint.git
cd ethermint
## 下载包
glide install
make install

## 下载tendermint
git clone https://github.com/tendermint/tendermint
cd tendermint
## 目前只支持v0.10.5
git checkout v0.10.5
make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

编译完成后将二进制文件放到不同目录下

2.初始化

初始化ethermint 和tendermint

## 初始化ethermint 
mkdir ethermint 
cp ethermint ethermint/
cd ethermint 
./ethermint --datadir data  init

## 初始化tendermint
mkdir tendermint 
cp tendermint tendermint/
cd tendermint 
./tendermint --home data   init
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.启动

nohup 启动

nohup ./tendermint --home data  node 1>out.log 2>out.log &

nohup ./ethermint --datadir data   --rpc --rpcaddr=10.100.7.48 --ws --wsaddr=10.100.7.48 --rpcapi eth,net,web3,personal,admin 1>out.log 2>out.log &
  • 1
  • 2
  • 3
  • 4

此时启动成功便开始产生区块了。

4.调用和交易

查看Ethermint状态

curl http://localhost:46657/status
  • 1

启动geth,做相关交易

## 交易转账
eb3.eth.accounts
web3.personal.newAccount()
acc0 = web3.eth.accounts[0]
acc1 = web3.eth.accounts[1]
web3.personal.unlockAccount(acc0,"1234")
web3.eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(3,"ether")})

##部署智能合约
var browser_double_sol_testContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"a","type":"int256"}],"name":"double","outputs":[{"name":"","type":"int256"}],"payable":false,"type":"function"}]);
var browser_double_sol_test = browser_double_sol_testContract.new(
   {
     from: web3.eth.accounts[0],
     data: '0x6060604052341561000f57600080fd5b5b60ab8061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680636ffa1caa14603d575b600080fd5b3415604757600080fd5b605b60048080359060200190919050506071565b6040518082815260200191505060405180910390f35b60008160020290505b9190505600a165627a7a72305820c5fd101c8bd62761d1803c865fd4af5c57f3752e6212d7ccebd5b4a23fcd23180029',
     gas: '4300000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

我们可以看到Ethermint无论是交易和部署智能合约都非常的块,提交交易非常迅速。
坦白说,我们可以将Ethermint用于公司联盟链,既可以提高交易速度,又不失去Ethereum的交易功能。

Ethermint启动和交易流程

Ethermint启动:

Ethermint
Ethermint启动流程如图所示:
1.初始化Ethermint和tendermint。 Ethermint初始化以太坊Ethereum数据库、ipc、默认钱包;tendermint初始化化genesis消息,节点配置消息等。
2.启动tendermint。启动tendermint不开启任何端口,等待去连接Ethermint的ABCI Server。
3.启动Ethereum node节点。 这个步骤实际上是启动了以太坊的node.Node。
4.启动ethereum.Backend服务。这个部署将以太坊node.Node,eth.Ethereum和ethereum.EthState配置到Backend。同时开启txBroadcastLoop 协程,监听交易tx事件。
5.启动ABCI APP服务。这里新建EthermintApplication APP对象,并开启ABCI server。此时第一步的tendermint会连接到Ethermint。
6.tendermint 链接并开始产链。tendermint连接成功后,便回和Ethermint中的ABCI server协同,通过BFT共识产块。

Ethermint交易流程

EthermintApplication中DeliverTx的接口更新一个个区块中的交易,validateTx验证一个交易,Commit的接口生成一个区块,并加入当前的链中。交易总流程如下:
这里写图片描述

总结

本文讲解了Ethermint部署及框架解析,希望读者能通过这篇文章对Ethermint和tendermint有初步的了解。
目前Ethermint的开发处于暂停的状态,团队在重新设计软件架构。在现在的版本中,Ethermint之前的实现方式是通过ABCI接口调用Tendermint。在最新的设计中,Ethermint将被设计成 Cosmos-SDK内的一个模块。它可以使用geth的底层组件来支持EVM和处理以太坊交易。预计2018年的第四季度将实现这个设计。

参考

1.http://ethermint.readthedocs.io
2.https://github.com/tendermint/ethermint

本文为niyuelin1990(逆月林)原创文章,转载请注明出处 https://blog.csdn.net/niyuelin1990/article/details/80684036

猜你喜欢

转载自blog.csdn.net/omnispace/article/details/81278531
今日推荐