@@ -54,14 +54,14 @@ on how you can run your own `geth` instance.
5454
5555Minimum:
5656
57- * CPU with 2 + cores
58- * 4GB RAM
57+ * CPU with 4 + cores
58+ * 8GB RAM
5959* 1TB free storage space to sync the Mainnet
6060* 8 MBit/sec download Internet service
6161
6262Recommended:
6363
64- * Fast CPU with 4 + cores
64+ * Fast CPU with 8 + cores
6565* 16GB+ RAM
6666* High-performance SSD with at least 1TB of free space
6767* 25+ MBit/sec download Internet service
@@ -138,8 +138,6 @@ export your existing configuration:
138138$ geth --your-favourite-flags dumpconfig
139139```
140140
141- * Note: This works only with ` geth ` v1.6.0 and above.*
142-
143141#### Docker quick start
144142
145143One of the quickest ways to get Ethereum up and running on your machine is by using
@@ -187,7 +185,6 @@ HTTP based JSON-RPC API options:
187185 * ` --ws.api ` API's offered over the WS-RPC interface (default: ` eth,net,web3 ` )
188186 * ` --ws.origins ` Origins from which to accept WebSocket requests
189187 * ` --ipcdisable ` Disable the IPC-RPC server
190- * ` --ipcapi ` API's offered over the IPC-RPC interface (default: ` admin,debug,eth,miner,net,personal,txpool,web3 ` )
191188 * ` --ipcpath ` Filename for IPC socket/pipe within the datadir (explicit paths escape it)
192189
193190You'll need to use your own programming environments' capabilities (libraries, tools, etc) to
@@ -206,118 +203,14 @@ APIs!**
206203Maintaining your own private network is more involved as a lot of configurations taken for
207204granted in the official networks need to be manually set up.
208205
209- #### Defining the private genesis state
210-
211- First, you'll need to create the genesis state of your networks, which all nodes need to be
212- aware of and agree upon. This consists of a small JSON file (e.g. call it ` genesis.json ` ):
213-
214- ``` json
215- {
216- "config" : {
217- "chainId" : <arbitrary positive integer>,
218- "homesteadBlock" : 0 ,
219- "eip150Block" : 0 ,
220- "eip155Block" : 0 ,
221- "eip158Block" : 0 ,
222- "byzantiumBlock" : 0 ,
223- "constantinopleBlock" : 0 ,
224- "petersburgBlock" : 0 ,
225- "istanbulBlock" : 0 ,
226- "berlinBlock" : 0 ,
227- "londonBlock" : 0
228- },
229- "alloc" : {},
230- "coinbase" : " 0x0000000000000000000000000000000000000000" ,
231- "difficulty" : " 0x20000" ,
232- "extraData" : " " ,
233- "gasLimit" : " 0x2fefd8" ,
234- "nonce" : " 0x0000000000000042" ,
235- "mixhash" : " 0x0000000000000000000000000000000000000000000000000000000000000000" ,
236- "parentHash" : " 0x0000000000000000000000000000000000000000000000000000000000000000" ,
237- "timestamp" : " 0x00"
238- }
239- ```
240-
241- The above fields should be fine for most purposes, although we'd recommend changing
242- the ` nonce ` to some random value so you prevent unknown remote nodes from being able
243- to connect to you. If you'd like to pre-fund some accounts for easier testing, create
244- the accounts and populate the ` alloc ` field with their addresses.
245-
246- ``` json
247- "alloc" : {
248- "0x0000000000000000000000000000000000000001" : {
249- "balance" : " 111111111"
250- },
251- "0x0000000000000000000000000000000000000002" : {
252- "balance" : " 222222222"
253- }
254- }
255- ```
256-
257- With the genesis state defined in the above JSON file, you'll need to initialize ** every**
258- ` geth ` node with it prior to starting it up to ensure all blockchain parameters are correctly
259- set:
260-
261- ``` shell
262- $ geth init path/to/genesis.json
263- ```
264-
265- #### Creating the rendezvous point
266-
267- With all nodes that you want to run initialized to the desired genesis state, you'll need to
268- start a bootstrap node that others can use to find each other in your network and/or over
269- the internet. The clean way is to configure and run a dedicated bootnode:
270-
271- ``` shell
272- # Use the devp2p tool to create a node file.
273- # The devp2p tool is also part of the 'alltools' distribution bundle.
274- $ devp2p key generate node1.key
275- # file node1.key is created.
276- $ devp2p key to-enr -ip 10.2.3.4 -udp 30303 -tcp 30303 node1.key
277- # Prints the ENR for use in --bootnode flag of other nodes.
278- # Note this method requires knowing the IP/ports ahead of time.
279- $ geth --nodekey=node1.key
280- ```
281-
282- With the bootnode online, it will display an [ ` enode ` URL] ( https://ethereum.org/en/developers/docs/networking-layer/network-addresses/#enode )
283- that other nodes can use to connect to it and exchange peer information. Make sure to
284- replace the displayed IP address information (most probably ` [::] ` ) with your externally
285- accessible IP to get the actual ` enode ` URL.
286-
287- * Note: You could previously use the ` bootnode ` utility to start a stripped down version of geth. This is not possible anymore.*
288-
289- #### Starting up your member nodes
290-
291- With the bootnode operational and externally reachable (you can try
292- ` telnet <ip> <port> ` to ensure it's indeed reachable), start every subsequent ` geth `
293- node pointed to the bootnode for peer discovery via the ` --bootnodes ` flag. It will
294- probably also be desirable to keep the data directory of your private network separated, so
295- do also specify a custom ` --datadir ` flag.
296-
297- ``` shell
298- $ geth --datadir=path/to/custom/data/folder --bootnodes=< bootnode-enode-url-from-above>
299- ```
206+ Unfortunately since [ the Merge] ( https://ethereum.org/en/roadmap/merge/ ) it is no longer possible
207+ to easily set up a network of geth nodes without also setting up a corresponding beacon chain.
300208
301- * Note: Since your network will be completely cut off from the main and test networks, you'll
302- also need to configure a miner to process transactions and create new blocks for you.*
303-
304- #### Running a private miner
305-
306-
307- In a private network setting a single CPU miner instance is more than enough for
308- practical purposes as it can produce a stable stream of blocks at the correct intervals
309- without needing heavy resources (consider running on a single thread, no need for multiple
310- ones either). To start a ` geth ` instance for mining, run it with all your usual flags, extended
311- by:
312-
313- ``` shell
314- $ geth < usual-flags> --mine --miner.threads=1 --miner.etherbase=0x0000000000000000000000000000000000000000
315- ```
209+ There are three different solutions depending on your use case:
316210
317- Which will start mining blocks and transactions on a single CPU thread, crediting all
318- proceedings to the account specified by ` --miner.etherbase ` . You can further tune the mining
319- by changing the default gas limit blocks converge to (` --miner.targetgaslimit ` ) and the price
320- transactions are accepted at (` --miner.gasprice ` ).
211+ * If you are looking for a simple way to test smart contracts from go in your CI, you can use the [ Simulated Backend] ( https://geth.ethereum.org/docs/developers/dapp-developer/native-bindings#blockchain-simulator ) .
212+ * If you want a convenient single node environment for testing, you can use our [ Dev Mode] ( https://geth.ethereum.org/docs/developers/dapp-developer/dev-mode ) .
213+ * If you are looking for a multiple node test network, you can set one up quite easily with [ Kurtosis] ( https://geth.ethereum.org/docs/fundamentals/kurtosis ) .
321214
322215## Contribution
323216
0 commit comments