記錄使用cosmos/ethermint的一些操作記錄與錯誤總結
注意: 目前ethermint轉移到了新的專案地址:https://github.com/tharsis/ethermint.git
老的專案地址是:https://github.com/cosmos/ethermint.git,官網檔案地址:https://docs.ethermint.zone
需要注意的是官網教程對應老版本(cosmos)的ethermint, 會有所沖突,
本文使用的是老版本的ethermint,另一篇是新版本的ethermint
文章目錄
- 一、Introduction
- 1.1 Architeture
- 二、Quick Start
- 2.1 Install
- 2.2 Run a Node
- Key Management
- Reset Data
- Delete Data
- 三、Testnet
- 3.1 Single-node, Local, Manual Testnet
- 3.2 Multi-node, Local, Automated Testnet
- 3.3 Multi-node, Public, Manual Testnet
- 1. 創建一個單節點
- 2. 啟動其他節點、復制檔案
- 3. 設定Seed
- 四、Truffle/Metamask/Remix
一、Introduction
Ethermint是一個可擴展的、高吞吐量的權益證明區塊鏈,與以太坊完全兼容并可互操作,它使用運行在Tendermint核心共識引擎上的Cosmos SDK構建,
特點:
- 擁有以太坊的功能
- 能夠與Cosmos其他鏈交換價值
- 兼容Web3
- 高吞吐量 (Tendermint)
- 水平拓展能力 (IBC)
- 快速交易最終一致性
- Hard Spoon
Ethermint通過以下方式啟用這些關鍵特性:
- 實作Tendermint Core的應用區塊鏈介面(ABCI)來管理區塊鏈
- 利用Cosmos SDK實作的模塊和其他機制,
- 利用geth作為庫來避免代碼重用并提高可維護性,
- 公開一個完全兼容的Web3 JSON-RPC層,用于與現有以太坊客戶端和工具(Metamask、Remix、Truffle等)互動,
這些特性使開發人員可以利用現有的以太坊生態系統工具和軟體無縫部署智能合約,與Cosmos生態系統的其他部分互動!
1.1 Architeture
- Ethermint 就是一個ABCI的應用實體,它通過TBFT代替了以太坊的POW
- Ethermint區塊鏈讓以太坊開發者可以將他們的智能合約部署到Ethermint EVM,并獲得快速最終權益證明(PoS)鏈的好處
- 開發人員還將受益于高可靠的客戶,這些客戶可以使用測驗網來測驗和部署他們的合同,
- 可以建立互操作函式同IBC操作其他鏈,還可以用中繼網橋()實作ethermint和ethereum互操作
- 封裝在ethermint內部的EVM模塊(x/EVM)可以作為自己獨立的模塊單獨使用,對任何Cosmos可以添加依賴,實作合約
- 以預設定的Validator集合和EVM模型作為依賴,能夠讓專案快速達到最終一致性
- 匯入EVM模塊可以使鏈實作網路和一些特殊的細粒度配置
- 使用Ethemint鏈可以直接部署合約到Ethermint網路上
- 利用Ethermint 客戶端將鏈維護推遲到Ethemint 網路,并允許參與更成熟的區塊鏈,
- 目前Ethermint 客戶端還不支持IBC跨鏈互操作
二、Quick Start
2.1 Install
二進制原始碼安裝
git clone https://github.com/tharsis/ethermint.git
cd ethermint
make install
2.2 Run a Node
自動部署 (在ethermint檔案夾下)./init.sh
或者已經啟動過,重新啟動:
ethermintd start --pruning=nothing --rpc.unsafe --log_level "main:info,state:info,mempool:info" --trace
報錯: jq: 未找到命令
下載jq:
# 安裝EPEL源: $ yum install epel-release # 安裝完EPEL源后,可以查看下jq包是否存在: $ yum list jq # 安裝jq: $ yum install jq
which 報錯:
which: no stringer ….
which: no gencodec …
which: no solcjs ….
原因: 依賴缺失未安裝
解決:
go get golang.org/x/tools/cmd/stringer go get github.com/fjl/gencodec yum -y install go-bindata protoc-gen-go npm install -g solc # 添加yarn倉庫 wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo yum -y install yarn
在另一個終端運行JSON-RPC服務:
ethermintcli rest-server --laddr "tcp://localhost:8545" --unlock-key mykey --chain-id ethermint-1
注意: --laddr 中的localhost如果是在服務器上則可以改成0.0.0.0:8545
Key Management
更加安全的做法是輸入密碼,如果想安全的鑰匙環借助于本地檔案或者OS,那么可以添加以下命令:
ethermintcli config keyring-backend file # 設定檔案讀取鑰匙
Reset Data
- Validtor節點不要輕易reset
- 每個節點的
priv_validator.json檔案都是獨一無二的,不要復制,可能會導致雙重簽名
rm $HOME/.ethermintd/config/addrbook.json $HOME/.ethermintd/config/genesis.json ethermintd unsafe-reset-all
Delete Data
rm -rf ~/.emint*
三、Testnet
3.1 Single-node, Local, Manual Testnet
單節點、本地、手動啟動測驗網路
創建一個單獨的驗證器節點,該節點在本地運行網路,用于測驗和其他開發相關用途,
具體操作與執行
./init.sh相同
單機RPC呼叫訪問測驗:
curl -v -k -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -H "Content-Type: application/json" 127.0.0.1:8545
3.2 Multi-node, Local, Automated Testnet
使用docker創建四個節點
專案目錄下make localnet-start,具體看官網檔案,寫的很詳細,
這里記錄一下報的錯誤:
報錯1:
docker-compose down Removing network ethermint_localnet WARNING: Network ethermint_localnet not found. mkdir -p ./build/ make[1]: 進入目錄“/root/software/ethermint” docker build -f ./networks/local/ethermintnode/Dockerfile . -t ethermintd/node Sending build context to Docker daemon 96.66 MB Step 1/14 : FROM golang:stretch as build-env Error parsing reference: "golang:stretch as build-env" is not a valid repository/tag: invalid reference format make[1]: *** [docker-localnet] 錯誤 1 make[1]: 離開目錄“/root/software/ethermint” make: *** [localnet-start] 錯誤 2解決:重新下載docker-ce(社區版), 注意不是docker
=> 卸載與安裝:https://blog.csdn.net/weixin_39477597/article/details/87715899
報錯2:Named stage returns: Error parsing reference: “golang:1.7.3 as builder” is not a valid repository/tag
解決: 檢查客戶端與服務器版本是否統一,解決見上鏈接
3.3 Multi-node, Public, Manual Testnet
多節點,公鏈,手動配置
此部分官方檔案寫的很簡單,這里詳細說明一下:
節點配置(在一個局域網下的兩臺機):
| 名稱 | IP | Seed |
|---|---|---|
| node1 | 192.168.31.214 | 716256d39fca45c43a15d895ee85024de3c35058@192.168.31.214:26656 |
| Node2 | 192.168.31.51 | 749a74315e6916a244b85214b9e66361b45dcaa2@192.168.31.51:26656 |
1. 創建一個單節點
與3.1一樣,首先創建一個單節點node1,init.sh
2. 啟動其他節點、復制檔案
在另一個機器上初始化node2,init.sh,在用戶根目錄下創建需要的ethermintcli、ethermintd兩個檔案夾即可,ctrl+c關閉當前運行的節點,
在節點1機子上復制node1節點的$HOME/.ethermintd/config/genesis.json檔案到節點2機器(可以用scp命令)
3. 設定Seed
在節點1獲取其nodeID,使用命令:ethermintd tendermint show-node-id,得到:716256d39fca45c43a15d895ee85024de3c35058
那么節點1的seed就是716256d39fca45c43a15d895ee85024de3c35058@192.168.31.214:26656
在節點2的檔案$HOME/.ethermintd/config/config.toml中的seeds中加入節點1的seed

現在準備作業完畢,先啟動節點1,再啟動節點2,可以看到兩個節點之間實作了同步,
ethermintd start --pruning=nothing --rpc.unsafe --log_level "main:info,state:info,mempool:info" --trace

如果兩個節點啟動相差時間較大,那么區塊高度也會有很大差異,新版本會自動快速同步,老版本則不會
如果是老版本ethermint那么可以都重制區塊鏈資料,再同時啟動
ethermintd unsafe-reset-all
四、Truffle/Metamask/Remix
使用此部分出現的錯誤:
匯出賬戶私鑰鑰命令:
ethermintcli keys unsafe-export-eth-key [創建的賬戶名]
匯出私鑰后,將其加入MetaMask錢包中管理
錯誤: Returned error: the method net_version does not exist/is not available
原因:開啟RPC服務時沒有開啟網路模塊權限
解決:
ethermintcli rest-server --laddr "tcp://0.0.0.0:8545" --unlock-key mykey --chain-id ethermint-1 --trace --rpc-api "web3,eth,net,personal"
錯誤: Metamask匯入了賬戶,但是無法顯示余額
原因: 可能鏈id為1默認為主網
解決: 修改
init.sh檔案中的鏈引數以及啟動RPC/REST的鏈ID引數(我換成了789),重新切換Metamask的網路
錯誤: 在remix中運行合約方法出現:
Gas estimation errored with the following message (see below). The transaction execution will likely fail. Do you want to force sending?
Internal JSON-RPC error. { “code”: -32000, “message”: “internal” }原因: 使用了web3注入的方式進行測驗, 當函式中出現了錯誤(例如不滿足require時)就會出現無法評估gas費的錯誤提示
解決: 先使用javaScriptVM模式再次運行, 可以看到具體的錯誤提示
![]()
錯誤: web3.js報錯: Error: Returned error: the method personal_sign does not exist/is not available at Object.ErrorResponse
原因: 開啟RPC服務的時候沒有開啟personal模塊
解決: 重新啟動rpc服務:
ethermintcli rest-server --laddr "tcp://0.0.0.0:8545" --unlock-key mykey --chain-id ethermint-1 --trace --rpc-api "web3,eth,net,personal"
覺得不錯的話,請點贊關注呦~~你的關注就是博主的動力
關注公眾號,查看更多go開發、密碼學和區塊鏈科研內容:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/306043.html
標籤:區塊鏈
