以太坊性能測試教程
前言
本篇我們主要為大家介紹如何使用HyperBench去測試以太坊。
快速开始
前置要求
編譯HyperBench需要go版本為1.11及以上版本,使用下方wget命令即可下載go官網安裝包:
wget https://golang.google.cn/dl/go1.17.7.linux-amd64.tar.gz
下載完成後將壓縮包解壓至/usr/local/;
tar -zxvf go1.17.7.linux-amd64.tar.gz -C /usr/local
解壓完成後 vim 打开/etc/profile 文件,添加go相關環境變量;
vim /etc/profileexport GOROOT=/usr/local/go export GOPATH=/usr/local/gopathexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin
添加完成後 使用source命令使變量配置生效;
source /etc/profile --使變量配置生效 go version --查看golang的版本#使用go version命令查看go是否安裝完成go version go1.17.7 linux/amd64 --打印輸出
完成go環境配置後,首先使用go env命令為go添加一個國內的代理,這裏是為了使go在安裝一些依賴時可以更快的安裝完成;
go env -w GOPROXY=https://goproxy.cn,direct
在編譯HyperBench之前需要使用go get命令安裝packr二進制,packr會在編譯HyperBench時使用到,所以需要提前安裝好;
go get -u github.com/gobuffalo/packr/v2/packr2
編譯安裝HyperBench
環境准備完成,那么接下來為大家介紹HyperBench源代碼的clone以及編譯。
首先HyperBench源碼可以通過github中HyperBench开源項目庫clone到本地,項目可以使用https://github.com/hyperbench 進入,項目中可以看到三個庫,本次視頻使用到的庫為hyperbench、hyperbench-plugins,進入到HyperBench倉庫,在code菜單中選擇https,點擊地址右側復制按鈕。
接下來开始clone與編譯HyperBench:
#首先創建一個hyperbench的運行目錄並進入到目錄mkdir /opt/hyperbench cd /opt/hyperbench#然後使用git命令將hyperbench源碼clone到本地#這邊為了方便演示所有的源碼都已經clone好了,所以就只展示下git clone https://github.com/hyperbench/hyperbench.git#clone完成後進入到hyperbench源碼目錄cd hyperbench#使用make build命令編譯hyperbenchmake build#編譯完成後使用help來查看編譯是否成功./hyperbench --help#如果有輸出hyperbench命令使用說明則代表編譯成功Usage: hyperbench [command]Examples:hyperbench --doc ./doc (generate document to specify path)Available Commands: completion Generate the autocompletion script for the specified shell help Help about any command init init a stress test dir new initialize a test plan start start a benchmark version get code version worker start as a worker serverFlags: --debug enable debug mode --doc string use to create doc and specify the doc path -h, --help help for hyperbenchUse "hyperbench [command] --help" for more information about a command.
HyperBench主程序編譯完成後,還需要編譯HyperBench的區塊鏈適配插件
#進入到前面所創建的hyperbench目錄cd /opt/hyperbench#使用git命令將hyperbench-plugins源碼clone本地git clone https://github.com/hyperbench/hyperbench-plugins.git#clone完成後進入到hyperbench-plugins目錄cd hyperbench-plugins#目錄中可以看到hyperbench所適配的各個區塊鏈平臺#本次視頻是介紹hyperbench對以太坊區塊鏈平臺的測試,所以進入以太坊目錄cd eth/#進入目錄後使用make build命令編譯插件make build#編譯完成後可以在當前目錄看到eth.so文件#需要將eth.so文件copy到hyperbench主程序所在的目錄cp eth.so ../../hyperbench/eth.so
編譯安裝並配置啓動geth
HyperBench主程序與插件編譯完成後,我們還需要搭建一條以太坊私有鏈以作測試:
#首先創建一個geth目錄mkdir /opt/geth/#進入目錄cd /opt/geth/#進入到github上以太坊項目庫#使用git命令clone 以太坊源碼git clone https://github.com/ethereum/go-ethereum.git#clone完成後進入源碼目錄cd ethereum#使用make命令編譯geth主程序make geth#進入到build/bin/目錄就能看到geth主程序cd ./build/bin/#使用./geth version查看編譯是否成功./geth version#成功輸出了版本信息則代表編譯成功#然後將geth文件copy到/usr/local/bin/目錄,這樣就可以在任何目錄下執行geth命令cp ./geth /usr/local/bin/
接下來需要創建geth初始化文件,本次教程重點在HyperBench,所以就不詳細介紹geth的配置了。
初始化文件中需要注意的是alloc配置項,此配置項是以太坊區塊鏈私鏈的創世账戶,如果初始化時沒有創建創世账戶並且分配一定的原生幣,那在後續測試中的轉账交易就無法完成轉账。
如果自己在測試中沒有創世账戶的話,可以使用本次教程提供的账戶:
vim genesis.json{ "config": { "chainId": 777, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", "eip155Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x2540be400", "difficulty": "0x00002", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", "alloc": { "0x4e5786bf8546e60ca38aa68eb8dc82b1b24d26f3": { "balance": "100000000000000000000000000000000" } }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"}
創建geth數據目錄,並初始化目錄
mkdir /opt/geth1/#執行初始化命令./geth --datadir /opt/geth1/ init ./genesis.json#執行返回如下則為成功INFO [10-18|10:41:55.859] Maximum peer count ETH=50 LES=0 total=50INFO [10-18|10:41:55.860] Smartcard socket not found, disabling err="stat /run/pcscd/pcscd.comm: no such file or directory"INFO [10-18|10:41:55.864] Set global gas cap cap=50,000,000INFO [10-18|10:41:55.865] Allocated cache and file handles database=/opt/geth1/geth/chaindata cache=16.00MiB handles=16INFO [10-18|10:41:56.236] Opened ancient database database=/opt/geth1/geth/chaindata/ancient/chain readonly=falseINFO [10-18|10:41:56.236] Writing custom genesis blockINFO [10-18|10:41:56.238] Persisted trie from memory database nodes=1 size=153.00B time="171.63µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00BINFO [10-18|10:41:56.239] Successfully wrote genesis state database=chaindata hash=ced4ca..c9a1f8INFO [10-18|10:41:56.239] Allocated cache and file handles database=/opt/geth1/geth/lightchaindata cache=16.00MiB handles=16INFO [10-18|10:41:56.513] Opened ancient database database=/opt/geth1/geth/lightchaindata/ancient/chain readonly=falseINFO [10-18|10:41:56.513] Writing custom genesis blockINFO [10-18|10:41:56.514] Persisted trie from memory database nodes=1 size=153.00B time="91.645µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00BINFO [10-18|10:41:56.515] Successfully wrote genesis state
初始化完成後,在/opt/geth1/keystore/目錄下新增文件
這個文件是在genesis.sjon配置中的創世账戶的私鑰,默認分配了余額
vim UTC--2022-10-17T08-41-53.685200708Z--4e5786bf8546e60ca38aa68eb8dc82b1b24d26f3#文件內容{"address":"4e5786bf8546e60ca38aa68eb8dc82b1b24d26f3","crypto":{"cipher":"aes-128-ctr","ciphertext":"f26e27f300b7ba46e968f8c656e534cbb706a15c825eb351d2ba4690d1b6bf26","cipherparams":{"iv":"bbb9f922fc48bcb2c1fb566453f328d8"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"f0ffc7fa97c82b94c2fcea53127ea3b8d5110c020830089283173e9d998cb8d9"},"mac":"2b6bdb9ae958ff55516ac313f4b68d5a8c66df018103903d1348a7158fe1fd2c"},"id":"654e1fa7-9c06-4643-bc3d-26b6186ff2cf","version":3}
啓動geth
#使用geth命令啓動以太坊私鏈vim scnohup geth --datadir "/opt/geth1/" --http --http.addr=0.0.0.0 --http.port 8545 --authrpc.port 8552 --http.corsdomain "*" --http.api "eth,net,web3,personal,admin,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 1981 --port 30303 --allow-insecure-unlock 2>> /opt/geth1/geth.log &#啓動命令中需要注意的是 --http.port 後續再hyperbench配置中會使用到
進入geth控制臺,確認geth啓動狀態
#進入geth數據目錄cd /opt/geth1/#使用命令進入geth控制臺geth attach ./geth.ipc#執行eth.acccounts查看當前鏈上账戶>eth.accounts["4e5786bf8546e60ca38aa68eb8dc82b1b24d26f3"]#如正確輸出账戶地址則代表啓動成功
確認啓動成功後,需要新增一個账戶
#新增账戶時為了方便測試,需要創建沒有密碼的账戶personal.newAccount("")
至此我們已經完成了以太坊私鏈的配置,結下來僅需配置HyperBench測試腳本啓動我們的測試,詳細完整的操作可在 ↓演示視頻↓ 中進行學習!
視頻教程
https://v.qq.com/x/page/g3364pal2qb.html
License
HyperBench目前使用Apache 2.0許可證。具體請參見 github LICENSE文件?
✨ 开源小貼士 ✨
HyperBench github
https://github.com/hyperbench/hyperbench
HyperBench quickstart
https://github.com/hyperbench/hyperbench/blob/master/README.md
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...
悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤
一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...