Connecting a Local Node to a Proof-of-Stake (PoS) Network
This guide provides step-by-step instructions to connect a local development node to an existing Proof-of-Stake (PoS) network using Geth and Prysm.
Prerequisites
Installed Geth v1.14.12-stable (Go Ethereum)
Installed Prysm v5.1.2 (Consensus Layer client)
Access to a configured PoS network
Required configuration files:
genesis.json
jwt.hex
genesis.ssz
config.yml
Step 1: Initialize Geth Execution Client
geth init --datadir ./execution/data ./genesis.json
Step 2: Start Geth Execution Client
Run the following command to start Geth with the appropriate network configurations:
geth --networkid 32382 \
--http \
--http.api eth,net,web3,admin \
--http.addr 0.0.0.0 \
--http.corsdomain="*" \
--http.port 8000 \
--port 8400 \
--metrics.port 8300 \
--ws \
--ws.api eth,net,web3 \
--ws.addr 0.0.0.0 \
--ws.port 8103 \
--authrpc.vhosts="*" \
--authrpc.addr 0.0.0.0 \
--authrpc.jwtsecret "./jwt.hex" \
--authrpc.port 8200 \
--datadir "./execution/data" \
--bootnodes "enode://c7489772eb8cb8346c1253f423ed12fc6140a1b24d854fc416b6644c007931c524f9cdf96193f8d3aee8e316b70c150dea233aebf6feb3c9ce813971b178c593@34.46.205.31:8400,enode://ba8f8227271f0e5236770159c6c6e396d9d69507bc91e91c2707a88725eeb0c668f531f761ad69ed1a2aac0e85777879a796eb5a30d3bec299ba335e709dd939@34.46.205.31:8401,enode://b8002ed2e6b31e5b3fc55655c2f67ef6723175be76eabf4fdecd7550512d9ee4f08fae726d86bed0c78ca09d60ff5cbc6f037bde5d684698f1ebbee97926c0c0@34.46.205.31:8402,enode://aaf4c069eaa55314fd325ac6e15770286527daf5007f8aae3620e3025debc49dc195e0f93820d3990358f6c521039981c25fc9027eeb06f47e3fe2c184494e27@34.46.205.31:30301" \
--verbosity 3 \
--syncmode snap
Step 3: Start the Beacon Chain (Consensus Client)
Run the following command to start the Prysm beacon chain:
./builds/beacon-chain \
--datadir="./consensus/beacondata" \
--min-sync-peers=1 \
--genesis-state="./genesis.ssz" \
--bootstrap-node="enr:-MK4QEPyMDqx01Di2oPZ11lTmxHML-zZzhBZImbE5DWmaFiXWPqQC8CpDj2k1Bf75jj8AZXcW_ys8B5LtMoTbnaJdmCGAZUk8TEsh2F0dG5ldHOIAAAAAAAAAwCEZXRoMpAc7vlaIAAAlP__________gmlkgnY0gmlwhCIuzR-Jc2VjcDI1NmsxoQNnokiDpRTr4D4DNySwUCRP3Ii47xI3fKRiTjAZcpBGcYhzeW5jbmV0cw-DdGNwghBog3VkcIIQzA" \
--bootstrap-node="enr:-KO4QFNtkDtXX7O5xaXGezjlSKAH9uZVNegkN7nKFFWt5CySId9TCPkt_vg_QoHjCxW3JDc0yLpqv9nLPdOqv0BnMSGGAZUk8Rzag2V0aMfGhG3vOb-AgmlkgnY0gmlwhCIuzR-Jc2VjcDI1NmsxoQPHSJdy64y4NGwSU_Qj7RL8YUChsk2FT8QWtmRMAHkxxYRzbmFwwIN0Y3CCINCDdWRwgiDQ" \
--bootstrap-node="enr:-KO4QG-GThvbW9jxO0M7CET1SiWd2yHJH2U9iAY3Y61Qt1vFKAX4ihQjw9je9o4qWhy4mk2Du3etnmV_gbPDk0q4qjyGAZUk8Wnjg2V0aMfGhG3vOb-AgmlkgnY0gmlwhCIuzR-Jc2VjcDI1NmsxoQO6j4InJx8OUjZ3AVnGxuOW2daVB7yR6RwnB6iHJe6wxoRzbmFwwIN0Y3CCINGDdWRwgiDR" \
--bootstrap-node="enr:-KO4QNHoBbdMDls41XDBWe8YGIdQ9qIY56BEG_AxBJpmWfdvMv4vGEivOOwepjzNUFbrdRLCiCfSeInKyEmRijZ8FrWGAZUk8aSng2V0aMfGhG3vOb-AgmlkgnY0gmlwhCIuzR-Jc2VjcDI1NmsxoQK4AC7S5rMeWz_FVlXC9n72cjF1vnbqv0_ezXVQUS2e5IRzbmFwwIN0Y3CCINKDdWRwgiDS" \
--chain-config-file="./config.yml" \
--contract-deployment-block=0 \
--chain-id=32382 \
--rpc-host=0.0.0.0 \
--rpc-port=4000 \
--grpc-gateway-host=0.0.0.0 \
--grpc-gateway-port=4100 \
--execution-endpoint="http://localhost:8200" \
--accept-terms-of-use \
--jwt-secret="./jwt.hex" \
--suggested-fee-recipient="0x123463a4b065722e99115d6c222f267d9cabb524" \
--minimum-peers-per-subnet=0 \
--p2p-tcp-port=4200 \
--p2p-udp-port=4300 \
--monitoring-port=4400 \
--verbosity="info" \
--slasher
Step 4: Start the Validator
Run the following command to start the validator:
./builds/validator \
--beacon-rpc-provider="0.0.0.0:4000" \
--datadir="./consensus/validatordata" \
--accept-terms-of-use \
--interop-num-validators=1 \
--rpc-port=7000 \
--grpc-gateway-port=7100 \
--monitoring-port=7200 \
--chain-config-file="./config.yml"
Step 5: Wait for Synchronization
Wait for a while for the node to synchronize with the network. You can check the sync status by running:
geth attach http://localhost:8000
Then, in the Geth console, execute:
eth.syncing;
If the command returns false
, the node is fully synchronized and ready to participate in the network.
Step 6: Connect Wallet (e.g., MetaMask) to the Network
To connect a wallet like MetaMask to your custom network, follow these steps:
Open MetaMask and go to Settings > Networks.
Click Add a network.
Enter the following details:
Network Name: Custom PoS Network
New RPC URL:
http://34.46.205.31:8000
Chain ID:
32382
Currency Symbol: Custom Token
Block Explorer URL: (leave blank or provide your explorer URL if available)
Click Save.
Add Custom Token
In MetaMask, go to the Assets tab and click Import Tokens.
Select Custom Token and enter the contract address to add GSMC:
Token Contract Address:
0x53424a37e17d8729617015ae0c622836907B05b4
Click Add Custom Token, then Import Tokens.
Now your wallet is connected to the custom PoS network and can interact with the custom token.
Conclusion
Following these steps will successfully connect a local development node to an existing PoS network, enabling execution and consensus layers to work together. Ensure to monitor logs for any issues during the sync process.
Last updated