Sally Kang

why join the navy.

How to build Go implementation of Ethereum locally

13 May 2018

[ Ethereum  Go  ]

This post would show how I build go-ethereum on my Win10 computer, and if you are interested in build, develop, debug, submit a bug report or pull request or contribute code to go-ethereum, you can do this as well.

What you need

Go Environment

Make sure you have go v1.8 installed, and the GOPATH is set.
If you don’t, just download and run the installer found at http://golang.org/doc/install ( In this post, I assume you are using Windows system as me. ) Then you need to set GOPATH and PATH, search “Environment Variables“ in the start menu, add “ PATH_TO_YOUR_GO_DIRECTORY/bin” to PATH variable. Now check if your Go is working right by:

Cmd windows

go-ethereum source code

Get the source code code into the right place:

git clone https://github.com/ethereum/go-ethereum.git $GOPATH/src/github.com/ethereum/go-ethereum

Note:You must have your working copy under $GOPATH/src/github.com/ethereum/go-ethereum. For example I am using “C:\Users\K\go\src\github.com\ethereum\go-ethereum”

Since go does not use relative path for import, working in any other directory will have no effect, since the import paths will be appended to $GOPATH/src, and if the lib does not exist, the version at master HEAD will be downloaded.


What you need to do

Managing Dependencies

govendor is used to manage all other dependencies. run govendor fetch <import-path> to add a new dependency, then commit the result. run govendor fetch +v to update all dependencies to their latest upstream version

Building Executables

Go to the go-ethereum repository root directory. Build all code using the go tool, placing the resulting binary in $GOPATH/bin:

go install -v ./...

go-ethereum exectuables can be built individually. To build just geth, use:

go install -v ./cmd/geth

Getting Stack Traces

the --pprof option would make a debugging HTTP server available on port 6060 Then you can bring up http://localhost:6060/debug/pprof to see the heap, running routines etc. To generate stacktraces for many geth instances:

geth -port=30300 -verbosity 5 --pprof --pprofport 6060 2>> 00.glog
geth -port=30301 -verbosity 5 --pprof --pprofport 6061 2>> 01.glog
geth -port=30302 -verbosity 5 --pprof --pprofport 6062 2>> 02.glog

In the above commands, -verbosity means Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)

Instead of connecting to tha main network, you may perfer connect to your own private network for testing, in this case just add some other options:

geth --datadir="/path_to_your_data_directory/YOUR_FOLDER" init "path_to_folder/CustomGenesis.json"  console 2>> logs\01.glog

geth -port=30300 --ipcdisable --pprof --pprofport 6060 --datadir="/path_to_your_data_directory/YOUR_FOLDER"   --networkid id  console 2>> logs\00.glog

geth -port=30301--ipcdisable --pprof --pprofport 6061 --datadir="/path_to_your_data_directory/YOUR_FOLDER" --networkid id  console 2>> logs\01.glog

geth -port=30302--ipcdisable --pprof --pprofport 6062 --
datadir="/path_to_your_data_directory/YOUR_FOLDER" --networkid id  console 2>> logs\02.glog

comments powered by Disqus