-
Notifications
You must be signed in to change notification settings - Fork 20.3k
Developers' Guide
We assuming that you have go
installed, GOPATH
is set.
Note:You must have your working copy under $GOPATH/src/github.com/ethereum/go-ethereum
. You also usually want to checkout the develop
branch (instead of master).
Since go
does not use relative path for import, in 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.
Most likely you will be working from your fork of go-ethereum
, let's say from github.com/nirname/go-ethereum
. Clone or move your fork into the right place:
git clone [email protected]:nirname/go-ethereum.git $GOPATH/src/github.com/ethereum/go-ethereum
With POC-8 and later, go-ethereum uses Godep to manage dependencies.
Install godep:
go get github.com/tools/godep
Make sure that go binaries are on your executable path:
PATH=$GOPATH/bin:$PATH
godep
should be prepended to all go calls build
, install
and test
.
Alternatively, you can prepend the go-ethereum Godeps directory to your current GOPATH
:
GOPATH=`godep path`:$GOPATH
Switch to the go-ethereum repository root directory (Godep expects a local Godeps folder ).
Each wrapper/executable found in
the cmd
directory can be built individually.
To build the CLI:
godep go install -v ./cmd/geth
Note: Recall that Geth is the priority for the Frontier release (Mist is not the focus and may lag).
For the GUI, you need to install QT5
and set variables.
On OSX with a brew install of qt5
:
export PKG_CONFIG_PATH=/usr/local/Cellar/qt5/5.4.0/lib/pkgconfig
export CGO_CPPFLAGS=-I/usr/local/Cellar/qt5/5.4.0/include/QtCore/5.4.0/QtCore
export LD_LIBRARY_PATH=/usr/local/Cellar/qt5/5.4.0/lib
See the instructions on the wiki
With these prerequisites in place, compile mist
with:
godep go build -v ./cmd/mist
Mist does not automatically look in the right location for its GUI assets. For this reason you need to launch it from its build directory
cd $GOPATH/src/github.com/ethereum/go-ethereum/cmd/mist && mist
or supply an absolute -asset_path
option:
mist -asset_path $GOPATH/src/github.com/ethereum/go-ethereum/cmd/mist/assets
To make life easier try git flow it sets this all up and streamlines your work flow.
Testing one library:
godep go test -v -cpu 4 ./eth
Using options -cpu
(number of cores allowed) and -v
(logging even if no error) is recommended.
Testing only some methods:
godep go test -v -cpu 4 ./eth -run TestMethod
Note: here all tests with prefix TestMethod will be run, so if you got TestMethod, TestMethod1, then both!
Running benchmarks, eg.:
cd bzz
godep go test -v -cpu 4 -bench . -run BenchmarkJoin
for more see go test flags
To update a dependency version (for example, to include a new upstream fix), run
go get -u <foo/bar>
godep update <foo/...>
To track a new dependency, add it to the project as normal than run
godep save ./...
Changes to the Godeps folder should be manually verified then committed.
To make life easier try git flow it sets this all up and streamlines your work flow.
Only github is used to track issues. (Please include the commit and branch when reporting an issue.)
Pull requests should by default commit on the develop
branch.
The master
branch is only used for finished stable major releases.
Sources are formatted according to the Go Formatting Style.