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启动流程如图所示:
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

Ethermint部署及框架解析相关推荐

  1. python进阶学习--- django框架解析 ---领悟编程语言共性与特性【后续详解】

    python进阶学习---> django框架解析 --->领悟编程语言共性与特性 1.python语言介绍   python解释型脚本语言 2.python执行原理   python解释 ...

  2. Freeline框架解析

    文章目录 FreeLine 框架解析 目前主流的动态编译方案对比 layoutcast Buck android studio Instant run 阿里 freeline Freeline 部署步 ...

  3. android 1.0框架,KOOM V1.0.5 框架解析

    快手在2020年中旬开源了一个线上OOM监控上报的框架:KOOM,这里简单研究下. 一.官方项目介绍 1.1 描述: KOOM是快手性能优化团队在处理移动端OOM问题的过程中沉淀出的一套完整解决方案. ...

  4. AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(六) Tiny Darknet 听过很多人谈论SqueezeNet. SqueezeNet很酷,但它只是优化参数计数.当大多数高质量的 ...

  5. AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(五) RNNs in Darknet 递归神经网络是表示随时间变化的数据的强大模型.为了更好地介绍RNNs,我强烈推荐Andrej K ...

  6. AlexeyAB DarkNet YOLOv3框架解析与应用实践(四)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(四) Nightmare 从前,在一所大学的大楼里,西蒙尼亚.维达第和齐瑟曼有一个很好的主意,几乎和你现在坐的大楼完全不同.他们想,嘿 ...

  7. AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(三) ImageNet分类 您可以使用Darknet为1000级ImageNet挑战赛分类图像.如果你还没有安装Darknet,你应该 ...

  8. AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(二) 版本3有什么新功能? YOLOv3使用了一些技巧来改进训练和提高性能,包括:多尺度预测.更好的主干分类器等等.全部细节都在我们的 ...

  9. AlexeyAB DarkNet YOLOv3框架解析与应用实践(一)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(一) Darknet: C语言中的开源神经网络 Darknet是一个用C和CUDA编写的开源神经网络框架.它速度快,易于安装,支持CP ...

最新文章

  1. Google 排名第一的语言,引数十万人关注:搞定它,技术大牛都甘拜下风
  2. python制作缩略图
  3. MATLAB中设置figure的边框
  4. 一款小清新的 SpringBoot+ Mybatis 前后端分离后台管理系统项目
  5. 无锁HashMap的原理与实现
  6. 洛谷——P1568 赛跑
  7. jms 教程_JMS教程–什么是JMS
  8. (Abstract Factory)抽象工厂模式的Java实现
  9. 快逸报表常见问题整理-java报表
  10. 阅读圣经丨变量引起的上下文
  11. Undefined和Null的区别
  12. 浅谈互联网券商港股美股证券交易软件开发如何实现
  13. 用只读打开服务器上的文档,打开WebDAV文档在MS Office中以IT只读方式打开WebDAV服务器...
  14. 针对Android平台播放器开源库NiceVieoPlayer倍速的开发
  15. 一款APP从设计稿到切图过程全方位揭秘
  16. 神经网络知识梳理——从神经元到深度学习
  17. U盘文件无损进行格式转换
  18. 在eclipse中用java代码测试是否成功连接数据库
  19. 兴趣爱好选择程序java+Swing界面
  20. 游戏项目管理经验方法

热门文章

  1. 分页原理+分页代码+分页类制作
  2. 用Python做自然语言处理必知的八个工具【转载】
  3. HDU 2852 KiKi's K-Number 主席树
  4. Leetcode题解(26)
  5. Asp.Net Mvc之模型注解
  6. asp.net后台代码动态添加JS文件和css文件的引用
  7. linux系统安装yum环境
  8. IDE (Integrated Development Environment) 集成开发环境
  9. 【Python】创建数组[[0]*n]*m与[[0 for _ in range(n)] for _ in range(m)]的区别
  10. 免费分享|linefriends手帐内页|横线方格|非卖品