README.md: update formatting (#19532)
This commit is contained in:
		
							
								
								
									
										322
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										322
									
								
								README.md
									
									
									
									
									
								
							@@ -9,28 +9,30 @@ https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/6874
 | 
				
			|||||||
[](https://travis-ci.org/ethereum/go-ethereum)
 | 
					[](https://travis-ci.org/ethereum/go-ethereum)
 | 
				
			||||||
[](https://discord.gg/nthXNEv)
 | 
					[](https://discord.gg/nthXNEv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Automated builds are available for stable releases and the unstable master branch.
 | 
					Automated builds are available for stable releases and the unstable master branch. Binary
 | 
				
			||||||
Binary archives are published at https://geth.ethereum.org/downloads/.
 | 
					archives are published at https://geth.ethereum.org/downloads/.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Building the source
 | 
					## Building the source
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For prerequisites and detailed build instructions please read the
 | 
					For prerequisites and detailed build instructions please read the [Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum) on the wiki.
 | 
				
			||||||
[Installation Instructions](https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum)
 | 
					 | 
				
			||||||
on the wiki.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Building geth requires both a Go (version 1.10 or later) and a C compiler.
 | 
					Building `geth` requires both a Go (version 1.10 or later) and a C compiler. You can install
 | 
				
			||||||
You can install them using your favourite package manager.
 | 
					them using your favourite package manager. Once the dependencies are installed, run
 | 
				
			||||||
Once the dependencies are installed, run
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    make geth
 | 
					```shell
 | 
				
			||||||
 | 
					make geth
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
or, to build the full suite of utilities:
 | 
					or, to build the full suite of utilities:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    make all
 | 
					```shell
 | 
				
			||||||
 | 
					make all
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Executables
 | 
					## Executables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The go-ethereum project comes with several wrappers/executables found in the `cmd` directory.
 | 
					The go-ethereum project comes with several wrappers/executables found in the `cmd`
 | 
				
			||||||
 | 
					directory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
|    Command    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
 | 
					|    Command    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
 | 
				
			||||||
| :-----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | 
					| :-----------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | 
				
			||||||
@@ -42,148 +44,168 @@ The go-ethereum project comes with several wrappers/executables found in the `cm
 | 
				
			|||||||
|   `rlpdump`   | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`).                                                                                                                                                                                                                                 |
 | 
					|   `rlpdump`   | Developer utility tool to convert binary RLP ([Recursive Length Prefix](https://github.com/ethereum/wiki/wiki/RLP)) dumps (data encoding used by the Ethereum protocol both network as well as consensus wise) to user-friendlier hierarchical representation (e.g. `rlpdump --hex CE0183FFFFFFC4C304050583616263`).                                                                                                                                                                                                                                 |
 | 
				
			||||||
|   `puppeth`   | a CLI wizard that aids in creating a new Ethereum network.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
 | 
					|   `puppeth`   | a CLI wizard that aids in creating a new Ethereum network.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Running geth
 | 
					## Running `geth`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Going through all the possible command line flags is out of scope here (please consult our
 | 
					Going through all the possible command line flags is out of scope here (please consult our
 | 
				
			||||||
[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)), but we've
 | 
					[CLI Wiki page](https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options)),
 | 
				
			||||||
enumerated a few common parameter combos to get you up to speed quickly on how you can run your
 | 
					but we've enumerated a few common parameter combos to get you up to speed quickly
 | 
				
			||||||
own Geth instance.
 | 
					on how you can run your own `geth` instance.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Full node on the main Ethereum network
 | 
					### Full node on the main Ethereum network
 | 
				
			||||||
 | 
					
 | 
				
			||||||
By far the most common scenario is people wanting to simply interact with the Ethereum network:
 | 
					By far the most common scenario is people wanting to simply interact with the Ethereum
 | 
				
			||||||
create accounts; transfer funds; deploy and interact with contracts. For this particular use-case
 | 
					network: create accounts; transfer funds; deploy and interact with contracts. For this
 | 
				
			||||||
the user doesn't care about years-old historical data, so we can fast-sync quickly to the current
 | 
					particular use-case the user doesn't care about years-old historical data, so we can
 | 
				
			||||||
state of the network. To do so:
 | 
					fast-sync quickly to the current state of the network. To do so:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth console
 | 
					$ geth console
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This command will:
 | 
					This command will:
 | 
				
			||||||
 | 
					 * Start `geth` in fast sync mode (default, can be changed with the `--syncmode` flag),
 | 
				
			||||||
 * Start geth in fast sync mode (default, can be changed with the `--syncmode` flag), causing it to
 | 
					   causing it to download more data in exchange for avoiding processing the entire history
 | 
				
			||||||
   download more data in exchange for avoiding processing the entire history of the Ethereum network,
 | 
					   of the Ethereum network, which is very CPU intensive.
 | 
				
			||||||
   which is very CPU intensive.
 | 
					 * Start up `geth`'s built-in interactive [JavaScript console](https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console),
 | 
				
			||||||
 * Start up Geth's built-in interactive [JavaScript console](https://github.com/ethereum/go-ethereum/wiki/JavaScript-Console),
 | 
					 | 
				
			||||||
   (via the trailing `console` subcommand) through which you can invoke all official [`web3` methods](https://github.com/ethereum/wiki/wiki/JavaScript-API)
 | 
					   (via the trailing `console` subcommand) through which you can invoke all official [`web3` methods](https://github.com/ethereum/wiki/wiki/JavaScript-API)
 | 
				
			||||||
   as well as Geth's own [management APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs).
 | 
					   as well as `geth`'s own [management APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs).
 | 
				
			||||||
   This tool is optional and if you leave it out you can always attach to an already running Geth instance
 | 
					   This tool is optional and if you leave it out you can always attach to an already running
 | 
				
			||||||
   with `geth attach`.
 | 
					   `geth` instance with `geth attach`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### A Full node on the Ethereum test network
 | 
					### A Full node on the Ethereum test network
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Transitioning towards developers, if you'd like to play around with creating Ethereum contracts, you
 | 
					Transitioning towards developers, if you'd like to play around with creating Ethereum
 | 
				
			||||||
almost certainly would like to do that without any real money involved until you get the hang of the
 | 
					contracts, you almost certainly would like to do that without any real money involved until
 | 
				
			||||||
entire system. In other words, instead of attaching to the main network, you want to join the **test**
 | 
					you get the hang of the entire system. In other words, instead of attaching to the main
 | 
				
			||||||
network with your node, which is fully equivalent to the main network, but with play-Ether only.
 | 
					network, you want to join the **test** network with your node, which is fully equivalent to
 | 
				
			||||||
 | 
					the main network, but with play-Ether only.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth --testnet console
 | 
					$ geth --testnet console
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The `console` subcommand has the exact same meaning as above and they are equally useful on the
 | 
					The `console` subcommand has the exact same meaning as above and they are equally
 | 
				
			||||||
testnet too. Please see above for their explanations if you've skipped here.
 | 
					useful on the testnet too. Please see above for their explanations if you've skipped here.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Specifying the `--testnet` flag, however, will reconfigure your Geth instance a bit:
 | 
					Specifying the `--testnet` flag, however, will reconfigure your `geth` instance a bit:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * Instead of using the default data directory (`~/.ethereum` on Linux for example), Geth will nest
 | 
					 * Instead of using the default data directory (`~/.ethereum` on Linux for example), `geth`
 | 
				
			||||||
   itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on Linux). Note, on OSX
 | 
					   will nest itself one level deeper into a `testnet` subfolder (`~/.ethereum/testnet` on
 | 
				
			||||||
   and Linux this also means that attaching to a running testnet node requires the use of a custom
 | 
					   Linux). Note, on OSX and Linux this also means that attaching to a running testnet node
 | 
				
			||||||
   endpoint since `geth attach` will try to attach to a production node endpoint by default. E.g.
 | 
					   requires the use of a custom endpoint since `geth attach` will try to attach to a
 | 
				
			||||||
   `geth attach <datadir>/testnet/geth.ipc`. Windows users are not affected by this.
 | 
					   production node endpoint by default. E.g.
 | 
				
			||||||
 * Instead of connecting the main Ethereum network, the client will connect to the test network,
 | 
					   `geth attach <datadir>/testnet/geth.ipc`. Windows users are not affected by
 | 
				
			||||||
   which uses different P2P bootnodes, different network IDs and genesis states.
 | 
					   this.
 | 
				
			||||||
 | 
					 * Instead of connecting the main Ethereum network, the client will connect to the test
 | 
				
			||||||
 | 
					   network, which uses different P2P bootnodes, different network IDs and genesis states.
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
*Note: Although there are some internal protective measures to prevent transactions from crossing
 | 
					*Note: Although there are some internal protective measures to prevent transactions from
 | 
				
			||||||
over between the main network and test network, you should make sure to always use separate accounts
 | 
					crossing over between the main network and test network, you should make sure to always
 | 
				
			||||||
for play-money and real-money. Unless you manually move accounts, Geth will by default correctly
 | 
					use separate accounts for play-money and real-money. Unless you manually move
 | 
				
			||||||
separate the two networks and will not make any accounts available between them.*
 | 
					accounts, `geth` will by default correctly separate the two networks and will not make any
 | 
				
			||||||
 | 
					accounts available between them.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Full node on the Rinkeby test network
 | 
					### Full node on the Rinkeby test network
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The above test network is a cross-client one based on the ethash proof-of-work consensus algorithm. As such, it has certain extra overhead and is more susceptible to reorganization attacks due to the network's low difficulty/security. Go Ethereum also supports connecting to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io) (operated by members of the community). This network is lighter, more secure, but is only supported by go-ethereum.
 | 
					The above test network is a cross-client one based on the ethash proof-of-work consensus
 | 
				
			||||||
 | 
					algorithm. As such, it has certain extra overhead and is more susceptible to reorganization
 | 
				
			||||||
 | 
					attacks due to the network's low difficulty/security. Go Ethereum also supports connecting
 | 
				
			||||||
 | 
					to a proof-of-authority based test network called [*Rinkeby*](https://www.rinkeby.io)
 | 
				
			||||||
 | 
					(operated by members of the community). This network is lighter, more secure, but is only
 | 
				
			||||||
 | 
					supported by go-ethereum.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth --rinkeby console
 | 
					$ geth --rinkeby console
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Configuration
 | 
					### Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As an alternative to passing the numerous flags to the `geth` binary, you can also pass a configuration file via:
 | 
					As an alternative to passing the numerous flags to the `geth` binary, you can also pass a
 | 
				
			||||||
 | 
					configuration file via:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth --config /path/to/your_config.toml
 | 
					$ geth --config /path/to/your_config.toml
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
To get an idea how the file should look like you can use the `dumpconfig` subcommand to export your existing configuration:
 | 
					To get an idea how the file should look like you can use the `dumpconfig` subcommand to
 | 
				
			||||||
 | 
					export your existing configuration:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth --your-favourite-flags dumpconfig
 | 
					$ geth --your-favourite-flags dumpconfig
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*Note: This works only with geth v1.6.0 and above.*
 | 
					*Note: This works only with `geth` v1.6.0 and above.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Docker quick start
 | 
					#### Docker quick start
 | 
				
			||||||
 | 
					
 | 
				
			||||||
One of the quickest ways to get Ethereum up and running on your machine is by using Docker:
 | 
					One of the quickest ways to get Ethereum up and running on your machine is by using
 | 
				
			||||||
 | 
					Docker:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
 | 
					docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
 | 
				
			||||||
           -p 8545:8545 -p 30303:30303 \
 | 
					           -p 8545:8545 -p 30303:30303 \
 | 
				
			||||||
           ethereum/client-go
 | 
					           ethereum/client-go
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This will start geth in fast-sync mode with a DB memory allowance of 1GB just as the above command does.  It will also create a persistent volume in your home directory for saving your blockchain as well as map the default ports. There is also an `alpine` tag available for a slim version of the image.
 | 
					This will start `geth` in fast-sync mode with a DB memory allowance of 1GB just as the
 | 
				
			||||||
 | 
					above command does.  It will also create a persistent volume in your home directory for
 | 
				
			||||||
 | 
					saving your blockchain as well as map the default ports. There is also an `alpine` tag
 | 
				
			||||||
 | 
					available for a slim version of the image.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Do not forget `--rpcaddr 0.0.0.0`, if you want to access RPC from other containers and/or hosts. By default, `geth` binds to the local interface and RPC endpoints is not accessible from the outside.
 | 
					Do not forget `--rpcaddr 0.0.0.0`, if you want to access RPC from other containers
 | 
				
			||||||
 | 
					and/or hosts. By default, `geth` binds to the local interface and RPC endpoints is not
 | 
				
			||||||
 | 
					accessible from the outside.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Programmatically interfacing Geth nodes
 | 
					### Programmatically interfacing `geth` nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
As a developer, sooner rather than later you'll want to start interacting with Geth and the Ethereum
 | 
					As a developer, sooner rather than later you'll want to start interacting with `geth` and the
 | 
				
			||||||
network via your own programs and not manually through the console. To aid this, Geth has built-in
 | 
					Ethereum network via your own programs and not manually through the console. To aid
 | 
				
			||||||
support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC) and
 | 
					this, `geth` has built-in support for a JSON-RPC based APIs ([standard APIs](https://github.com/ethereum/wiki/wiki/JSON-RPC)
 | 
				
			||||||
[Geth specific APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)). These can be
 | 
					and [`geth` specific APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)).
 | 
				
			||||||
exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based platforms, and named pipes on Windows).
 | 
					These can be exposed via HTTP, WebSockets and IPC (UNIX sockets on UNIX based
 | 
				
			||||||
 | 
					platforms, and named pipes on Windows).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The IPC interface is enabled by default and exposes all the APIs supported by Geth, whereas the HTTP
 | 
					The IPC interface is enabled by default and exposes all the APIs supported by `geth`,
 | 
				
			||||||
and WS interfaces need to manually be enabled and only expose a subset of APIs due to security reasons.
 | 
					whereas the HTTP and WS interfaces need to manually be enabled and only expose a
 | 
				
			||||||
These can be turned on/off and configured as you'd expect.
 | 
					subset of APIs due to security reasons. These can be turned on/off and configured as
 | 
				
			||||||
 | 
					you'd expect.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HTTP based JSON-RPC API options:
 | 
					HTTP based JSON-RPC API options:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  * `--rpc` Enable the HTTP-RPC server
 | 
					  * `--rpc` Enable the HTTP-RPC server
 | 
				
			||||||
  * `--rpcaddr` HTTP-RPC server listening interface (default: "localhost")
 | 
					  * `--rpcaddr` HTTP-RPC server listening interface (default: `localhost`)
 | 
				
			||||||
  * `--rpcport` HTTP-RPC server listening port (default: 8545)
 | 
					  * `--rpcport` HTTP-RPC server listening port (default: `8545`)
 | 
				
			||||||
  * `--rpcapi` API's offered over the HTTP-RPC interface (default: "eth,net,web3")
 | 
					  * `--rpcapi` API's offered over the HTTP-RPC interface (default: `eth,net,web3`)
 | 
				
			||||||
  * `--rpccorsdomain` Comma separated list of domains from which to accept cross origin requests (browser enforced)
 | 
					  * `--rpccorsdomain` Comma separated list of domains from which to accept cross origin requests (browser enforced)
 | 
				
			||||||
  * `--ws` Enable the WS-RPC server
 | 
					  * `--ws` Enable the WS-RPC server
 | 
				
			||||||
  * `--wsaddr` WS-RPC server listening interface (default: "localhost")
 | 
					  * `--wsaddr` WS-RPC server listening interface (default: `localhost`)
 | 
				
			||||||
  * `--wsport` WS-RPC server listening port (default: 8546)
 | 
					  * `--wsport` WS-RPC server listening port (default: `8546`)
 | 
				
			||||||
  * `--wsapi` API's offered over the WS-RPC interface (default: "eth,net,web3")
 | 
					  * `--wsapi` API's offered over the WS-RPC interface (default: `eth,net,web3`)
 | 
				
			||||||
  * `--wsorigins` Origins from which to accept websockets requests
 | 
					  * `--wsorigins` Origins from which to accept websockets requests
 | 
				
			||||||
  * `--ipcdisable` Disable the IPC-RPC server
 | 
					  * `--ipcdisable` Disable the IPC-RPC server
 | 
				
			||||||
  * `--ipcapi` API's offered over the IPC-RPC interface (default: "admin,debug,eth,miner,net,personal,shh,txpool,web3")
 | 
					  * `--ipcapi` API's offered over the IPC-RPC interface (default: `admin,debug,eth,miner,net,personal,shh,txpool,web3`)
 | 
				
			||||||
  * `--ipcpath` Filename for IPC socket/pipe within the datadir (explicit paths escape it)
 | 
					  * `--ipcpath` Filename for IPC socket/pipe within the datadir (explicit paths escape it)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You'll need to use your own programming environments' capabilities (libraries, tools, etc) to connect
 | 
					You'll need to use your own programming environments' capabilities (libraries, tools, etc) to
 | 
				
			||||||
via HTTP, WS or IPC to a Geth node configured with the above flags and you'll need to speak [JSON-RPC](https://www.jsonrpc.org/specification)
 | 
					connect via HTTP, WS or IPC to a `geth` node configured with the above flags and you'll
 | 
				
			||||||
on all transports. You can reuse the same connection for multiple requests!
 | 
					need to speak [JSON-RPC](https://www.jsonrpc.org/specification) on all transports. You
 | 
				
			||||||
 | 
					can reuse the same connection for multiple requests!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Note: Please understand the security implications of opening up an HTTP/WS based transport before
 | 
					**Note: Please understand the security implications of opening up an HTTP/WS based
 | 
				
			||||||
doing so! Hackers on the internet are actively trying to subvert Ethereum nodes with exposed APIs!
 | 
					transport before doing so! Hackers on the internet are actively trying to subvert
 | 
				
			||||||
Further, all browser tabs can access locally running web servers, so malicious web pages could try to
 | 
					Ethereum nodes with exposed APIs! Further, all browser tabs can access locally
 | 
				
			||||||
subvert locally available APIs!**
 | 
					running web servers, so malicious web pages could try to subvert locally available
 | 
				
			||||||
 | 
					APIs!**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Operating a private network
 | 
					### Operating a private network
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Maintaining your own private network is more involved as a lot of configurations taken for granted in
 | 
					Maintaining your own private network is more involved as a lot of configurations taken for
 | 
				
			||||||
the official networks need to be manually set up.
 | 
					granted in the official networks need to be manually set up.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Defining the private genesis state
 | 
					#### Defining the private genesis state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
First, you'll need to create the genesis state of your networks, which all nodes need to be aware of
 | 
					First, you'll need to create the genesis state of your networks, which all nodes need to be
 | 
				
			||||||
and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`):
 | 
					aware of and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```json
 | 
					```json
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -193,118 +215,130 @@ and agree upon. This consists of a small JSON file (e.g. call it `genesis.json`)
 | 
				
			|||||||
    "eip155Block": 0,
 | 
					    "eip155Block": 0,
 | 
				
			||||||
    "eip158Block": 0
 | 
					    "eip158Block": 0
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "alloc"      : {},
 | 
					  "alloc": {},
 | 
				
			||||||
  "coinbase"   : "0x0000000000000000000000000000000000000000",
 | 
					  "coinbase": "0x0000000000000000000000000000000000000000",
 | 
				
			||||||
  "difficulty" : "0x20000",
 | 
					  "difficulty": "0x20000",
 | 
				
			||||||
  "extraData"  : "",
 | 
					  "extraData": "",
 | 
				
			||||||
  "gasLimit"   : "0x2fefd8",
 | 
					  "gasLimit": "0x2fefd8",
 | 
				
			||||||
  "nonce"      : "0x0000000000000042",
 | 
					  "nonce": "0x0000000000000042",
 | 
				
			||||||
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
 | 
					  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 | 
				
			||||||
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
 | 
					  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 | 
				
			||||||
  "timestamp"  : "0x00"
 | 
					  "timestamp": "0x00"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The above fields should be fine for most purposes, although we'd recommend changing the `nonce` to
 | 
					The above fields should be fine for most purposes, although we'd recommend changing
 | 
				
			||||||
some random value so you prevent unknown remote nodes from being able to connect to you. If you'd
 | 
					the `nonce` to some random value so you prevent unknown remote nodes from being able
 | 
				
			||||||
like to pre-fund some accounts for easier testing, you can populate the `alloc` field with account
 | 
					to connect to you. If you'd like to pre-fund some accounts for easier testing, you can
 | 
				
			||||||
configs:
 | 
					populate the `alloc` field with account configs:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```json
 | 
					```json
 | 
				
			||||||
"alloc": {
 | 
					"alloc": {
 | 
				
			||||||
  "0x0000000000000000000000000000000000000001": {"balance": "111111111"},
 | 
					  "0x0000000000000000000000000000000000000001": {
 | 
				
			||||||
  "0x0000000000000000000000000000000000000002": {"balance": "222222222"}
 | 
					    "balance": "111111111"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "0x0000000000000000000000000000000000000002": {
 | 
				
			||||||
 | 
					    "balance": "222222222"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With the genesis state defined in the above JSON file, you'll need to initialize **every** Geth node
 | 
					With the genesis state defined in the above JSON file, you'll need to initialize **every**
 | 
				
			||||||
with it prior to starting it up to ensure all blockchain parameters are correctly set:
 | 
					`geth` node with it prior to starting it up to ensure all blockchain parameters are correctly
 | 
				
			||||||
 | 
					set:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth init path/to/genesis.json
 | 
					$ geth init path/to/genesis.json
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Creating the rendezvous point
 | 
					#### Creating the rendezvous point
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With all nodes that you want to run initialized to the desired genesis state, you'll need to start a
 | 
					With all nodes that you want to run initialized to the desired genesis state, you'll need to
 | 
				
			||||||
bootstrap node that others can use to find each other in your network and/or over the internet. The
 | 
					start a bootstrap node that others can use to find each other in your network and/or over
 | 
				
			||||||
clean way is to configure and run a dedicated bootnode:
 | 
					the internet. The clean way is to configure and run a dedicated bootnode:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ bootnode --genkey=boot.key
 | 
					$ bootnode --genkey=boot.key
 | 
				
			||||||
$ bootnode --nodekey=boot.key
 | 
					$ bootnode --nodekey=boot.key
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With the bootnode online, it will display an [`enode` URL](https://github.com/ethereum/wiki/wiki/enode-url-format)
 | 
					With the bootnode online, it will display an [`enode` URL](https://github.com/ethereum/wiki/wiki/enode-url-format)
 | 
				
			||||||
that other nodes can use to connect to it and exchange peer information. Make sure to replace the
 | 
					that other nodes can use to connect to it and exchange peer information. Make sure to
 | 
				
			||||||
displayed IP address information (most probably `[::]`) with your externally accessible IP to get the
 | 
					replace the displayed IP address information (most probably `[::]`) with your externally
 | 
				
			||||||
actual `enode` URL.
 | 
					accessible IP to get the actual `enode` URL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*Note: You could also use a full-fledged Geth node as a bootnode, but it's the less recommended way.*
 | 
					*Note: You could also use a full-fledged `geth` node as a bootnode, but it's the less
 | 
				
			||||||
 | 
					recommended way.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Starting up your member nodes
 | 
					#### Starting up your member nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
With the bootnode operational and externally reachable (you can try `telnet <ip> <port>` to ensure
 | 
					With the bootnode operational and externally reachable (you can try
 | 
				
			||||||
it's indeed reachable), start every subsequent Geth node pointed to the bootnode for peer discovery
 | 
					`telnet <ip> <port>` to ensure it's indeed reachable), start every subsequent `geth`
 | 
				
			||||||
via the `--bootnodes` flag. It will probably also be desirable to keep the data directory of your
 | 
					node pointed to the bootnode for peer discovery via the `--bootnodes` flag. It will
 | 
				
			||||||
private network separated, so do also specify a custom `--datadir` flag.
 | 
					probably also be desirable to keep the data directory of your private network separated, so
 | 
				
			||||||
 | 
					do also specify a custom `--datadir` flag.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above>
 | 
					$ geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*Note: Since your network will be completely cut off from the main and test networks, you'll also
 | 
					*Note: Since your network will be completely cut off from the main and test networks, you'll
 | 
				
			||||||
need to configure a miner to process transactions and create new blocks for you.*
 | 
					also need to configure a miner to process transactions and create new blocks for you.*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### Running a private miner
 | 
					#### Running a private miner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Mining on the public Ethereum network is a complex task as it's only feasible using GPUs, requiring
 | 
					Mining on the public Ethereum network is a complex task as it's only feasible using GPUs,
 | 
				
			||||||
an OpenCL or CUDA enabled `ethminer` instance. For information on such a setup, please consult the
 | 
					requiring an OpenCL or CUDA enabled `ethminer` instance. For information on such a
 | 
				
			||||||
[EtherMining subreddit](https://www.reddit.com/r/EtherMining/) and the [Genoil miner](https://github.com/Genoil/cpp-ethereum)
 | 
					setup, please consult the [EtherMining subreddit](https://www.reddit.com/r/EtherMining/)
 | 
				
			||||||
repository.
 | 
					and the [Genoil miner](https://github.com/Genoil/cpp-ethereum) repository.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
In a private network setting, however a single CPU miner instance is more than enough for practical
 | 
					In a private network setting, however a single CPU miner instance is more than enough for
 | 
				
			||||||
purposes as it can produce a stable stream of blocks at the correct intervals without needing heavy
 | 
					practical purposes as it can produce a stable stream of blocks at the correct intervals
 | 
				
			||||||
resources (consider running on a single thread, no need for multiple ones either). To start a Geth
 | 
					without needing heavy resources (consider running on a single thread, no need for multiple
 | 
				
			||||||
instance for mining, run it with all your usual flags, extended by:
 | 
					ones either). To start a `geth` instance for mining, run it with all your usual flags, extended
 | 
				
			||||||
 | 
					by:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```shell
 | 
				
			||||||
$ geth <usual-flags> --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000
 | 
					$ geth <usual-flags> --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Which will start mining blocks and transactions on a single CPU thread, crediting all proceedings to
 | 
					Which will start mining blocks and transactions on a single CPU thread, crediting all
 | 
				
			||||||
the account specified by `--etherbase`. You can further tune the mining by changing the default gas
 | 
					proceedings to the account specified by `--etherbase`. You can further tune the mining
 | 
				
			||||||
limit blocks converge to (`--targetgaslimit`) and the price transactions are accepted at (`--gasprice`).
 | 
					by changing the default gas limit blocks converge to (`--targetgaslimit`) and the price
 | 
				
			||||||
 | 
					transactions are accepted at (`--gasprice`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Contribution
 | 
					## Contribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Thank you for considering to help out with the source code! We welcome contributions from
 | 
					Thank you for considering to help out with the source code! We welcome contributions
 | 
				
			||||||
anyone on the internet, and are grateful for even the smallest of fixes!
 | 
					from anyone on the internet, and are grateful for even the smallest of fixes!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you'd like to contribute to go-ethereum, please fork, fix, commit and send a pull request
 | 
					If you'd like to contribute to go-ethereum, please fork, fix, commit and send a pull request
 | 
				
			||||||
for the maintainers to review and merge into the main code base. If you wish to submit more
 | 
					for the maintainers to review and merge into the main code base. If you wish to submit
 | 
				
			||||||
complex changes though, please check up with the core devs first on [our gitter channel](https://gitter.im/ethereum/go-ethereum)
 | 
					more complex changes though, please check up with the core devs first on [our gitter channel](https://gitter.im/ethereum/go-ethereum)
 | 
				
			||||||
to ensure those changes are in line with the general philosophy of the project and/or get some
 | 
					to ensure those changes are in line with the general philosophy of the project and/or get
 | 
				
			||||||
early feedback which can make both your efforts much lighter as well as our review and merge
 | 
					some early feedback which can make both your efforts much lighter as well as our review
 | 
				
			||||||
procedures quick and simple.
 | 
					and merge procedures quick and simple.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Please make sure your contributions adhere to our coding guidelines:
 | 
					Please make sure your contributions adhere to our coding guidelines:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting) guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)).
 | 
					 * Code must adhere to the official Go [formatting](https://golang.org/doc/effective_go.html#formatting)
 | 
				
			||||||
 * Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary) guidelines.
 | 
					   guidelines (i.e. uses [gofmt](https://golang.org/cmd/gofmt/)).
 | 
				
			||||||
 | 
					 * Code must be documented adhering to the official Go [commentary](https://golang.org/doc/effective_go.html#commentary)
 | 
				
			||||||
 | 
					   guidelines.
 | 
				
			||||||
 * Pull requests need to be based on and opened against the `master` branch.
 | 
					 * Pull requests need to be based on and opened against the `master` branch.
 | 
				
			||||||
 * Commit messages should be prefixed with the package(s) they modify.
 | 
					 * Commit messages should be prefixed with the package(s) they modify.
 | 
				
			||||||
   * E.g. "eth, rpc: make trace configs optional"
 | 
					   * E.g. "eth, rpc: make trace configs optional"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Please see the [Developers' Guide](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide)
 | 
					Please see the [Developers' Guide](https://github.com/ethereum/go-ethereum/wiki/Developers'-Guide)
 | 
				
			||||||
for more details on configuring your environment, managing project dependencies, and testing procedures.
 | 
					for more details on configuring your environment, managing project dependencies, and
 | 
				
			||||||
 | 
					testing procedures.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## License
 | 
					## License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the
 | 
					The go-ethereum library (i.e. all code outside of the `cmd` directory) is licensed under the
 | 
				
			||||||
[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html), also
 | 
					[GNU Lesser General Public License v3.0](https://www.gnu.org/licenses/lgpl-3.0.en.html),
 | 
				
			||||||
included in our repository in the `COPYING.LESSER` file.
 | 
					also included in our repository in the `COPYING.LESSER` file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The go-ethereum binaries (i.e. all code inside of the `cmd` directory) is licensed under the
 | 
					The go-ethereum binaries (i.e. all code inside of the `cmd` directory) is licensed under the
 | 
				
			||||||
[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also included
 | 
					[GNU General Public License v3.0](https://www.gnu.org/licenses/gpl-3.0.en.html), also
 | 
				
			||||||
in our repository in the `COPYING` file.
 | 
					included in our repository in the `COPYING` file.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user