diff --git a/content/docs/developers/dapp-developer/mobile.md b/content/docs/developers/dapp-developer/mobile.md index 6eb3111e9a..0de0d40933 100644 --- a/content/docs/developers/dapp-developer/mobile.md +++ b/content/docs/developers/dapp-developer/mobile.md @@ -336,11 +336,6 @@ let tx = GethNewTransaction(1, to, GethNewBigInt(0), GethNewBigInt(0), GethNe 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: ```swift diff --git a/content/docs/developers/geth-developer/devguide.md b/content/docs/developers/geth-developer/devguide.md index f5c21a6121..6df219959c 100644 --- a/content/docs/developers/geth-developer/devguide.md +++ b/content/docs/developers/geth-developer/devguide.md @@ -1,5 +1,5 @@ --- -title: Developer Guide +title: Getting Started 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. Please see [Contributing](/content/docs/developers/contributing.md) for the -GHeth contribution guidelines. +Geth contribution guidelines. ## Building and Testing @@ -60,9 +60,9 @@ go test -v -bench . -run BenchmarkJoin 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 displays the heap, running routines etc. By clicking "full goroutine stack dump" a trace can be generated that is useful for debugging. diff --git a/content/docs/tools/devp2p/index.md b/content/docs/tools/devp2p/index.md new file mode 100644 index 0000000000..2237be183d --- /dev/null +++ b/content/docs/tools/devp2p/index.md @@ -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 ` 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 ` to update the signature of a DNS discovery tree. + +Run `devp2p dns sync ` to download a complete DNS discovery tree. + +Run `devp2p dns to-cloudflare ` to publish a tree to CloudFlare DNS. + +Run `devp2p dns to-route53 ` 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 ` to display statistics of a node set. + +Run `devp2p nodeset filter ` to write a new, filtered node +set to standard output. The following filters are supported: + +- `-limit ` limits the output set to N entries, taking the top N nodes by score +- `-ip ` filters nodes by IP subnet +- `-min-age ` filters nodes by 'first seen' time +- `-eth-network ` 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 ` to ping a node. + +Run `devp2p discv4 resolve ` to find the most recent node record of a node in +the DHT. + +Run `devp2p discv4 crawl ` 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 ` to ping a node. + +Run `devp2p discv5 resolve ` 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 ` 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 --nodiscover --nat=none --networkid 19763 --verbosity 5 +``` + +Then, run the following command, replacing `` with the enode of the geth node: + +```sh +devp2p rlpx eth-test 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 `` with the enode of the geth node: + +```sh +devp2p rlpx eth66-test 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 \ No newline at end of file