Status-go uses [go-ethereum](https://github.com/ethereum/go-ethereum) (**upstream**) as its dependency. As any other Go dependency `go-ethereum` code is vendored and stored in `vendor/` folder.
However, there are a few changes has been made to the upstream, that are specific to Status and should not be merged to the upstream. We keep those changes as a set of patches, that can be applied upon each next release of `go-ethereum`. Patched version of `go-ethereum` is available in the [status-im/go-ethereum](https://github.com/status/go-ethereum) repo.
We try to minimize number and amount of changes in those patches as much as possible, and whereas possible, to contribute changes into the upstream.
# Patches
-`0000-accounts-hd-keys.patch` — adds support for HD extended keys (links/docs?)
-`0002-les-api-status.patch` — adds StatusBackend into LES code (need to be inspected, some things can and should be done outside of les code)
-`0004-whisper-notifications.patch` — adds Whisper notifications (need to be reviewed and documented)
-`0006-latest-cht.patch`– updates CHT root hashes, should be updated regularly to keep sync fast, until proper Trusted Checkpoint sync is not implemented as part of LES/2 protocol.
When a new stable release of `go-ethereum` comes out, we need to upgrade our fork and vendored copy.
**Note: The process is completely repeatable, so it's safe to remove current `go-ethereum` directory, clone latest upstream version and apply patches from scratch.**
## How to update forked version
Make sure you have `status-go` in your `$GOPATH/src/github.com/status-im/` first.
### From very scratch
Use this method if you're up to nuke forked repo for some reason and apply patches from scratch: