add devp2p page, update devguide + mobile
This commit is contained in:
parent
0a4aa8add5
commit
46bc4df1b4
|
@ -336,11 +336,6 @@ let tx = GethNewTransaction(1, to, GethNewBigInt(0), GethNewBigInt(0), GethNe
|
||||||
let chain = GethNewBigInt(1) // Chain identifier of the main net
|
let chain = GethNewBigInt(1) // Chain identifier of the main net
|
||||||
```
|
```
|
||||||
|
|
||||||
*Although Swift usually rewrites `NSError` returns to throws, this particular
|
|
||||||
instance seems to have been missed for some reason (possibly due to it being a
|
|
||||||
constructor). It will be fixed in a later version of the iOS bindings when the appropriate
|
|
||||||
fixes are implemented upstream in the `gomobile` project.*
|
|
||||||
|
|
||||||
The transaction `tx` can now be signed using the authorization methods described above:
|
The transaction `tx` can now be signed using the authorization methods described above:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
title: Developer Guide
|
title: Getting Started
|
||||||
sort_key: A
|
sort_key: A
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ Developers are people who are interested to build, develop, debug, submit
|
||||||
a bug report or pull request or otherwise contribute to the Geth source code.
|
a bug report or pull request or otherwise contribute to the Geth source code.
|
||||||
|
|
||||||
Please see [Contributing](/content/docs/developers/contributing.md) for the
|
Please see [Contributing](/content/docs/developers/contributing.md) for the
|
||||||
GHeth contribution guidelines.
|
Geth contribution guidelines.
|
||||||
|
|
||||||
## Building and Testing
|
## Building and Testing
|
||||||
|
|
||||||
|
@ -60,9 +60,9 @@ go test -v -bench . -run BenchmarkJoin
|
||||||
|
|
||||||
For more information, see the [go test flags][testflag] documentation.
|
For more information, see the [go test flags][testflag] documentation.
|
||||||
|
|
||||||
### Getting Stack Traces
|
### Stack Traces
|
||||||
|
|
||||||
If `geth` is started with the `--pprof` option, a debugging HTTP server is made available
|
If Geth is started with the `--pprof` option, a debugging HTTP server is made available
|
||||||
on port 6060. Navigating to <http://localhost:6060/debug/pprof> displays the heap,
|
on port 6060. Navigating to <http://localhost:6060/debug/pprof> displays the heap,
|
||||||
running routines etc. By clicking "full goroutine stack dump" a trace can be generated
|
running routines etc. By clicking "full goroutine stack dump" a trace can be generated
|
||||||
that is useful for debugging.
|
that is useful for debugging.
|
||||||
|
|
|
@ -0,0 +1,171 @@
|
||||||
|
---
|
||||||
|
title: devp2p
|
||||||
|
---
|
||||||
|
|
||||||
|
[DevP2P](https://github.com/ethereum/devp2p) is a set of network protocols that form the
|
||||||
|
Ethereum peer-to-peer network. The DevP2P specifications define precisely how nodes
|
||||||
|
should find each other and communicate. Geth implements the DevP2P specifications in Go.
|
||||||
|
|
||||||
|
The DevP2P stack includes the low-level peer-to-peer protocols that define discovery and
|
||||||
|
secure sessions between nodes such as:
|
||||||
|
|
||||||
|
[Ethereum Node Records](https://github.com/ethereum/devp2p/blob/master/enr.md): A standard format for connectivity information for a node
|
||||||
|
[Discovery protocol](https://github.com/ethereum/devp2p/blob/master/discv4.md): Defines how nodes find each other.
|
||||||
|
[RLPx protocol](https://github.com/ethereum/devp2p/blob/master/rlpx.md): Defines a TCP based transport system for communication between nodes.
|
||||||
|
|
||||||
|
DevP2P also includes the RLPx-based application level protocols including:
|
||||||
|
|
||||||
|
[Ethereum Wire Protocol](https://github.com/ethereum/devp2p/blob/master/caps/eth.md): facilitates exchange of blockchain data between peers
|
||||||
|
[Ethereum Snapshot Protocol](https://github.com/ethereum/devp2p/blob/master/caps/snap.md): enables exchange of snapshots between peers
|
||||||
|
[Light Ethereum Subprotocol](https://github.com/ethereum/devp2p/blob/master/caps/les.md): protocol used by light clients
|
||||||
|
|
||||||
|
To debug and develop these networking components, Geth includes a command line tool called `devp2p`.
|
||||||
|
|
||||||
|
This page will outline some of `devp2p`s built-in tools.
|
||||||
|
|
||||||
|
### ENR Decoding
|
||||||
|
|
||||||
|
Ethereum Node Records can be decoded, verified and displayed to the terminal using `enrdump`. It takes the ENR in its encoded form, which
|
||||||
|
is the base64 encoding of its RLP representation. A decoded human-readable text representation is displayed.
|
||||||
|
|
||||||
|
Use `devp2p enrdump <base64>` to verify and display an Ethereum Node Record.
|
||||||
|
|
||||||
|
Read more on [Ethereum Node Records](https://ethereum.org/en/developers/docs/networking-layer/network-addresses/#enr) or browse the [specs](https://github.com/ethereum/devp2p/blob/591edbd36eb57280384d07373a818c00bddf3b31/enr.md).
|
||||||
|
|
||||||
|
### Node Key Management
|
||||||
|
|
||||||
|
The `devp2p key ...` command family deals with node key files.
|
||||||
|
|
||||||
|
Run `devp2p key generate mynode.key` to create a new node key in the `mynode.key` file.
|
||||||
|
|
||||||
|
Run `devp2p key to-enode mynode.key -ip 127.0.0.1 -tcp 30303` to create an enode:// URL
|
||||||
|
corresponding to the given node key and address information.
|
||||||
|
|
||||||
|
### Maintaining DNS Discovery Node Lists
|
||||||
|
|
||||||
|
The devp2p command can create and publish DNS discovery node lists.
|
||||||
|
|
||||||
|
Run `devp2p dns sign <directory>` to update the signature of a DNS discovery tree.
|
||||||
|
|
||||||
|
Run `devp2p dns sync <enrtree-URL>` to download a complete DNS discovery tree.
|
||||||
|
|
||||||
|
Run `devp2p dns to-cloudflare <directory>` to publish a tree to CloudFlare DNS.
|
||||||
|
|
||||||
|
Run `devp2p dns to-route53 <directory>` to publish a tree to Amazon Route53.
|
||||||
|
|
||||||
|
More information about these commands can be found in the [DNS Discovery Setup Guide][dns-tutorial].
|
||||||
|
|
||||||
|
### Node Set Utilities
|
||||||
|
|
||||||
|
There are several commands for working with JSON node set files. These files are generated
|
||||||
|
by the discovery crawlers and DNS client commands. Node sets also used as the input of the
|
||||||
|
DNS deployer commands.
|
||||||
|
|
||||||
|
Run `devp2p nodeset info <nodes.json>` to display statistics of a node set.
|
||||||
|
|
||||||
|
Run `devp2p nodeset filter <nodes.json> <filter flags...>` to write a new, filtered node
|
||||||
|
set to standard output. The following filters are supported:
|
||||||
|
|
||||||
|
- `-limit <N>` limits the output set to N entries, taking the top N nodes by score
|
||||||
|
- `-ip <CIDR>` filters nodes by IP subnet
|
||||||
|
- `-min-age <duration>` filters nodes by 'first seen' time
|
||||||
|
- `-eth-network <mainnet/rinkeby/goerli/ropsten>` filters nodes by "eth" ENR entry
|
||||||
|
- `-les-server` filters nodes by LES server support
|
||||||
|
- `-snap` filters nodes by snap protocol support
|
||||||
|
|
||||||
|
For example, given a node set in `nodes.json`, you could create a filtered set containing
|
||||||
|
up to 20 eth mainnet nodes which also support snap sync using this command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
devp2p nodeset filter nodes.json -eth-network mainnet -snap -limit 20
|
||||||
|
```
|
||||||
|
|
||||||
|
### Discovery v4 Utilities
|
||||||
|
|
||||||
|
The `devp2p discv4 ...` command family deals with the [Node Discovery v4][discv4]
|
||||||
|
protocol.
|
||||||
|
|
||||||
|
Run `devp2p discv4 ping <enode/ENR>` to ping a node.
|
||||||
|
|
||||||
|
Run `devp2p discv4 resolve <enode/ENR>` to find the most recent node record of a node in
|
||||||
|
the DHT.
|
||||||
|
|
||||||
|
Run `devp2p discv4 crawl <nodes.json path>` to create or update a JSON node set.
|
||||||
|
|
||||||
|
### Discovery v5 Utilities
|
||||||
|
|
||||||
|
The `devp2p discv5 ...` command family deals with the [Node Discovery v5][discv5]
|
||||||
|
protocol. This protocol is currently under active development.
|
||||||
|
|
||||||
|
Run `devp2p discv5 ping <ENR>` to ping a node.
|
||||||
|
|
||||||
|
Run `devp2p discv5 resolve <ENR>` to find the most recent node record of a node in
|
||||||
|
the discv5 DHT.
|
||||||
|
|
||||||
|
Run `devp2p discv5 listen` to run a Discovery v5 node.
|
||||||
|
|
||||||
|
Run `devp2p discv5 crawl <nodes.json path>` to create or update a JSON node set containing
|
||||||
|
discv5 nodes.
|
||||||
|
|
||||||
|
### Discovery Test Suites
|
||||||
|
|
||||||
|
The devp2p command also contains interactive test suites for Discovery v4 and Discovery
|
||||||
|
v5. To run these tests a networking environment must be set up with two separate UDP listening
|
||||||
|
addresses are available on the same machine. The two listening addresses must also be routed such
|
||||||
|
that they are able to reach the node you want to test.
|
||||||
|
|
||||||
|
For example, to run the test on the local host when the node under test is
|
||||||
|
also on the local host, assign two IP addresses (or a larger range) to the
|
||||||
|
loopback interface. On macOS, this can be done by executing the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo ifconfig lo0 add 127.0.0.2
|
||||||
|
```
|
||||||
|
|
||||||
|
Either test suite can then be run as follows:
|
||||||
|
|
||||||
|
1. Start the node under test first, ensuring that it won't talk to the Internet (i.e. disable bootstrapping). An easy way to prevent
|
||||||
|
unintended connections to the global DHT is listening on `127.0.0.1`.
|
||||||
|
|
||||||
|
2. Get the ENR of the node and store it in the `NODE` environment variable.
|
||||||
|
|
||||||
|
3. Start the test by running `devp2p discv5 test -listen1 127.0.0.1 -listen2 127.0.0.2 $NODE`.
|
||||||
|
|
||||||
|
### Eth Protocol Test Suite
|
||||||
|
|
||||||
|
The Eth Protocol test suite is a conformance test suite for the [eth protocol][eth].
|
||||||
|
|
||||||
|
To run the eth protocol test suite, the node needs to be initialized as follows:
|
||||||
|
|
||||||
|
1. initialize the geth node with the `genesis.json` file contained in the `testdata` directory
|
||||||
|
|
||||||
|
2. import the `halfchain.rlp` file in the `testdata` directory
|
||||||
|
|
||||||
|
3. run geth with the following flags:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
geth --datadir <datadir> --nodiscover --nat=none --networkid 19763 --verbosity 5
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, run the following command, replacing `<enode>` with the enode of the geth node:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
devp2p rlpx eth-test <enode> cmd/devp2p/internal/ethtest/testdata/chain.rlp cmd/devp2p/internal/ethtest/testdata/genesis.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Repeat the above process (re-initialising the node) in order to run the Eth Protocol test suite again.
|
||||||
|
|
||||||
|
#### Eth66 Test Suite
|
||||||
|
|
||||||
|
The Eth66 test suite is also a conformance test suite for the eth 66 protocol version specifically.
|
||||||
|
To run the eth66 protocol test suite, initialize a geth node as described above and run the following command,
|
||||||
|
replacing `<enode>` with the enode of the geth node:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
devp2p rlpx eth66-test <enode> cmd/devp2p/internal/ethtest/testdata/chain.rlp cmd/devp2p/internal/ethtest/testdata/genesis.json
|
||||||
|
```
|
||||||
|
|
||||||
|
[eth]: https://github.com/ethereum/devp2p/blob/master/caps/eth.md
|
||||||
|
[dns-tutorial]: https://geth.ethereum.org/docs/developers/dns-discovery-setup
|
||||||
|
[discv4]: https://github.com/ethereum/devp2p/tree/master/discv4.md
|
||||||
|
[discv5]: https://github.com/ethereum/devp2p/tree/master/discv5/discv5.md
|
Loading…
Reference in New Issue