Ethermint部署及框架解析
Ethermint是什么
Ethermint is a blazing fast Proof-of-Stake blockchain that is fully compatible with Ethereum.
Ethermint 是一款非常快速的POS區(qū)塊鏈,并整體兼容以太坊Ethereum。
簡(jiǎn)單來說,Ethermint 做了一件事:集成Tendermint和Ethereum。Ethermint集成Tendermint并實(shí)現(xiàn)POS+BFT的共識(shí)機(jī)制。
框架解析
Ethermint的框架如下圖所示
Ethermint 首先通過Backend結(jié)構(gòu)體的EthState與Ethereum中的區(qū)塊鏈和狀態(tài)數(shù)據(jù)結(jié)合封裝。其次通過event.TypeMuxSubscription事件監(jiān)聽Ethereum中的交易數(shù)據(jù),并將交易tx通過rpcClient.HTTPClient提交到Tendermint。最后通過EthermintApplication實(shí)現(xiàn)的ABCI接口連接Tendermint和Backend。
部署測(cè)試
所需文件及版本:
tendermint 0.10.5-acc161f7 ethermint 0.5.3-a5308d8 geth 1.6.7-stable- 1
- 2
- 3
1.下載編譯
首先在linux安裝好golang環(huán)境和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
編譯完成后將二進(jìn)制文件放到不同目錄下
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.啟動(dòng)
nohup 啟動(dòng)
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
此時(shí)啟動(dòng)成功便開始產(chǎn)生區(qū)塊了。
4.調(diào)用和交易
查看Ethermint狀態(tài)
curl http://localhost:46657/status- 1
啟動(dòng)geth,做相關(guān)交易
## 交易轉(zhuǎn)賬 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用于公司聯(lián)盟鏈,既可以提高交易速度,又不失去Ethereum的交易功能。
Ethermint啟動(dòng)和交易流程
Ethermint啟動(dòng):
Ethermint啟動(dòng)流程如圖所示:
1.初始化Ethermint和tendermint。 Ethermint初始化以太坊Ethereum數(shù)據(jù)庫、ipc、默認(rèn)錢包;tendermint初始化化genesis消息,節(jié)點(diǎn)配置消息等。
2.啟動(dòng)tendermint。啟動(dòng)tendermint不開啟任何端口,等待去連接Ethermint的ABCI Server。
3.啟動(dòng)Ethereum node節(jié)點(diǎn)。 這個(gè)步驟實(shí)際上是啟動(dòng)了以太坊的node.Node。
4.啟動(dòng)ethereum.Backend服務(wù)。這個(gè)部署將以太坊node.Node,eth.Ethereum和ethereum.EthState配置到Backend。同時(shí)開啟txBroadcastLoop 協(xié)程,監(jiān)聽交易tx事件。
5.啟動(dòng)ABCI APP服務(wù)。這里新建EthermintApplication APP對(duì)象,并開啟ABCI server。此時(shí)第一步的tendermint會(huì)連接到Ethermint。
6.tendermint 鏈接并開始產(chǎn)鏈。tendermint連接成功后,便回和Ethermint中的ABCI server協(xié)同,通過BFT共識(shí)產(chǎn)塊。
Ethermint交易流程
EthermintApplication中DeliverTx的接口更新一個(gè)個(gè)區(qū)塊中的交易,validateTx驗(yàn)證一個(gè)交易,Commit的接口生成一個(gè)區(qū)塊,并加入當(dāng)前的鏈中。交易總流程如下:
總結(jié)
本文講解了Ethermint部署及框架解析,希望讀者能通過這篇文章對(duì)Ethermint和tendermint有初步的了解。
目前Ethermint的開發(fā)處于暫停的狀態(tài),團(tuán)隊(duì)在重新設(shè)計(jì)軟件架構(gòu)。在現(xiàn)在的版本中,Ethermint之前的實(shí)現(xiàn)方式是通過ABCI接口調(diào)用Tendermint。在最新的設(shè)計(jì)中,Ethermint將被設(shè)計(jì)成 Cosmos-SDK內(nèi)的一個(gè)模塊。它可以使用geth的底層組件來支持EVM和處理以太坊交易。預(yù)計(jì)2018年的第四季度將實(shí)現(xiàn)這個(gè)設(shè)計(jì)。
參考
1.http://ethermint.readthedocs.io
2.https://github.com/tendermint/ethermint
本文為niyuelin1990(逆月林)原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處 https://blog.csdn.net/niyuelin1990/article/details/80684036
總結(jié)
以上是生活随笔為你收集整理的Ethermint部署及框架解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5分钟学会区块链 - 开发一条区块链 D
- 下一篇: 【译】From Smart Contra