ed1cdf0418
This change makes invalidation mechanism more aggressive. With a primary goal to invalidate short living nodes faster. In current setup any node that became known in terms of discovery will stay in this state until it will fail to respond to 5 queries. Removing them earlier from a table allows to reduce latency for finding required nodes. The second change, one adds a version for discovery, separates status dht from ethereum dht. After we rolled out discovery it became obvious that our boot nodes became spammed with irrelevant nodes. And this made discovery process very long, for example with separate dht discovery takes ~2s, with mutual dht - it can take 1m-10m and there is still no guarantee to find a max amount of peers, cause status nodes is a very small part of whole ethereum infra. In my understanding, we don't need to be a part of ethereum dht, and lower latency is way more important for us. Closes: #941 Partially closes: #960 (960 requires futher investigations on devices) |
||
---|---|---|
.github | ||
.vscode | ||
_assets | ||
cmd | ||
extkeys | ||
geth | ||
lib | ||
logutils | ||
mailserver | ||
metrics | ||
notifier | ||
profiling | ||
services | ||
sign | ||
signal | ||
static | ||
t | ||
timesource | ||
vendor | ||
.codeclimate.yml | ||
.dockerignore | ||
.gitignore | ||
.gometalinter.json | ||
.travis.yml | ||
CONTRIBUTING.md | ||
Gopkg.lock | ||
Gopkg.toml | ||
LICENSE.md | ||
Makefile | ||
README.md |
Status bindings for go-ethereum
Docs
Intro
status-go is an underlying part of Status - a browser, messenger, and gateway to a decentralized world.
It's written in Go and requires Go 1.8 or above.
It uses Makefile to do most common actions. See make help
output for available commands.
status-go uses go-ethereum with some patches applied in it, located under vendor/
directory. See geth patches README for more info.
Build
There are two main modes status-go can be built:
- standalone server
- library to link for Android or iOS
Use following Makefile commands:
make statusgo
(builds binary intobuild/bin/statusd
)make statusgo-android
(builds .aar filebuild/android-16/aar
)make statusgo-ios
andmake statusgo-ios-simulator
(builds iOS related artifacts inbuild/os-9.3/framework
)
In order to build and use status-go
directly from status-react
, follow the instructions in https://wiki.status.im/Building_Status, under the 'Building Status with the checked-out version of status-go' section.
Debugging
In order to see the log files while debugging on an Android device, do the following:
- Ensure that the app can write to disk by granting it file permissions. For that, you can for instance set your avatar from a file on disk.
- Connect a USB cable to your phone and make sure you can use
adb
.
Run
adb shell tail -f sdcard/Download/geth.log
IDE Debugging
If you're using Visual Studio Code, you can rename the .vscode/launch.example.json
file to launch.json
so that you can run the app with the debugger attached.
Testing
To setup accounts passphrase you need to setup an environment variable: export ACCOUNT_PASSWORD="secret_pass_phrase"
.
Make sure the dependencies are installed first by running:
make lint-install
make mock-install
To test fully statusgo, use:
make ci
To test statusgo using a given network by name, use:
make ci networkid=rinkeby
To test statusgo using a given network by number ID, use:
make ci networkid=3
If you have problems running tests on public network we suggest reading e2e guide.
If you want to launch specific test, for instance RPCSendTransactions
, use the following command:
go test -v ./geth/api/ -testify.m ^RPCSendTransaction$
Note -testify.m
as testify/suite is used to group individual tests.