There are a few comments on my guide to getting started with Ethereum private networks about mining taking ages to run, or apparently not running at all. The consensus seems to be that you need to be on a 64 bit OS and using plenty of memory. In this post I’ll compare mining in a private network with 1Gb, 2Gb and 4Gb virtual machine configurations. This was an academic exercise I went through for my own interest, but hopefully will be of some interest to people who enjoy understanding a bit more about how the code works.
Here are the steps, collected from various docs, that I went through on Ubuntu. The developer’s guide was my starting point.
sudo add-apt-repository ppa:gophers/archive sudo apt-get update sudo apt-get install golang-1.9
mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc source ~/.bashrc
A few more commands so Go can be found in the GOPATH
mkdir $GOPATH/bin sudo ln -s /usr/lib/go-1.9/bin/go $GOPATH/bin/go
Clone geth repo and build geth:
git clone git@github.com:ethereum/go-ethereum.git $GOPATH/src/github.com/ethereum/go-ethereum cd $GOPATH/src/github.com/ethereum/go-ethereum go install -v ./cmd/geth
You’ve probably got two geths installed now, a system-wide one and the one that you just installed, as below.
ethuser@eth-host:~$ geth version | grep '^Version:' Version: 1.7.3-stable ethuser@eth-host:~$ $GOPATH/bin/geth version | grep '^Version:' Version: 1.8.0-unstable
Before we do anything else, let’s just double check that you can run the newly installed geth. Assuming you used the guide in the previous post:
cd ~ $GOPATH/bin/geth --datadir node1 --networkid 98765 console
Add some logging to geth. See this commit which provides additional logging during the mining process:
https://github.com/alanbuxton/go-ethereum/commit/3990f15fab13d32f9b9f0224367295f285f7f9db#diff-d48da17e6237684b832b97db3107179f
Apply these changes to your local version, or if you prefer you can clone the branch in my fork that has these changes already in.
git clone -b extra_logging --depth 1 https://github.com/alanbuxton/go-ethereum.git $GOPATH/src/github.com/ethereum/go-ethereum
Rebuild your local version using go install -v ./cmd/geth
and now you’ll get some more logging when you mine in your private network. See below for some examples with extra logging with 4Gb, 2Gb and 1Gb virtual machine configurations:
4Gb
> miner.start(1);admin.sleepBlocks(1);miner.stop() INFO [01-26|09:37:47] Updated mining threads threads=1 INFO [01-26|09:37:47] Transaction pool price threshold updated price=18000000000 INFO [01-26|09:37:47] Starting mining operation INFO [01-26|09:37:47] Commit new mining work number=34 txs=0 uncles=0 elapsed=125.978µs INFO [01-26|09:37:47] Started ethash search for new nonces miner=0 seed=7377726478179259701 INFO [01-26|09:38:05] Still mining miner=0 attempts=1000 duration=18s INFO [01-26|09:38:06] Still mining miner=0 attempts=2000 duration=19s INFO [01-26|09:38:06] Still mining miner=0 attempts=4000 duration=19s INFO [01-26|09:38:06] Still mining miner=0 attempts=8000 duration=19s INFO [01-26|09:38:07] Still mining miner=0 attempts=16000 duration=20s INFO [01-26|09:38:08] Still mining miner=0 attempts=32000 duration=21s INFO [01-26|09:38:09] Finished mining miner=0 attempts=42332 duration=22s INFO [01-26|09:38:09] Successfully sealed new block number=34 hash=c53c2f…45286c INFO [01-26|09:38:09] 🔨 mined potential block number=34 hash=c53c2f…45286c
2 Gb
> miner.start(1);admin.sleepBlocks(1);miner.stop() INFO [01-26|10:32:19] Updated mining threads threads=1 INFO [01-26|10:32:19] Transaction pool price threshold updated price=18000000000 INFO [01-26|10:32:19] Starting mining operation INFO [01-26|10:32:19] Commit new mining work number=37 txs=0 uncles=0 elapsed=129.734µs INFO [01-26|10:32:19] Started ethash search for new nonces miner=0 seed=4187772785547710899 INFO [01-26|10:32:40] Still mining miner=0 attempts=1000 duration=21s INFO [01-26|10:32:46] Still mining miner=0 attempts=2000 duration=27s INFO [01-26|10:32:49] Still mining miner=0 attempts=4000 duration=30s INFO [01-26|10:32:49] Still mining miner=0 attempts=8000 duration=30s INFO [01-26|10:32:50] Still mining miner=0 attempts=16000 duration=31s INFO [01-26|10:32:51] Still mining miner=0 attempts=32000 duration=32s INFO [01-26|10:32:53] Finished mining miner=0 attempts=57306 duration=34s INFO [01-26|10:32:53] Successfully sealed new block number=37 hash=068096…c31777 INFO [01-26|10:32:53] 🔨 mined potential block number=37 hash=068096…c31777
1Gb
I cancelled after over half an hour…
> miner.start(1);admin.sleepBlocks(1);miner.stop() INFO [01-26|09:51:58] Updated mining threads threads=1 INFO [01-26|09:51:58] Transaction pool price threshold updated price=18000000000 INFO [01-26|09:51:58] Starting mining operation INFO [01-26|09:51:58] Commit new mining work number=37 txs=0 uncles=0 elapsed=243.956µs INFO [01-26|09:51:58] Started ethash search for new nonces miner=0 seed=1420748052411692923 INFO [01-26|09:53:11] Still mining miner=0 attempts=1000 duration=1m13s INFO [01-26|09:54:23] Still mining miner=0 attempts=2000 duration=2m25s INFO [01-26|09:56:52] Still mining miner=0 attempts=4000 duration=4m54s INFO [01-26|10:01:53] Still mining miner=0 attempts=8000 duration=9m55s INFO [01-26|10:11:49] Still mining miner=0 attempts=16000 duration=19m51s INFO [01-26|10:30:27] Still mining miner=0 attempts=32000 duration=38m29s