Joining a Running Network
Each Casper network is permissionless, enabling new validators to join the network and provide additional security to the system. This page outlines the sequence of recommended steps to spin up a validating node and join an existing network.
Step 1: Provisioning Hardware
Visit the Hardware Specifications section and provision your node hardware.
Step 2: Setting Up the Node
Follow the instructions on the Node Setup page.
Step 3: Building the Required Contracts
Use the commands below to build all the necessary contracts for bonding, retrieving rewards, and unbonding.
- Clone the casper-node repository.
git clone https://github.com/casper-network/casper-node
- Install these prerequisites, which are also listed here.
- Rust
- CMake
pkg-config
- On Ubuntu, usesudo apt-get install pkg-config
openssl
- On Ubuntu, usesudo apt-get install openssl
libssl-dev
- On Ubuntu, usesudo apt-get install libssl-dev
Install the Rust casper-client and fund the keys you will use for bonding.
Use the following commands to build the contracts in release mode. Make sure you have installed Rust.
cd casper-node
make setup-rs
make build-client-contracts
These commands will build all the necessary Wasm contracts for operating as a validator:
activate_bid.wasm
- Reactivates an ejected validatoradd_bid.wasm
- Enables bonding for validator stakedelegate.wasm
- Delegates stakeundelegate.wasm
- Undelegates stakewithdraw_bid.wasm
- Enables unbonding for validator stake
Step 4: Creating and Fund Keys for Bonding
See the Node Setup instructions if you have not generated and funded your validator keys.
Step 5: Updating the Trusted Hash
The node's config.toml
needs to be updated with a recent trusted hash.
See the Trusted Hash for Synchronizing instructions if you have not set up a trusted hash during node installation.
Step 6: Starting the Node
Start the node with the casper-node-launcher
:
sudo systemctl start casper-node-launcher
The above Debian package installs a casper-node service for systemd.
For more information, visit GitHub.
Step 7: Confirming the Node is Synchronized
While the node is synchronizing, the /status
endpoint is available. You will be able to compare this to another node's status endpoint era_id
and height
to determine if you are caught up. You will not be able to perform any casper-client
calls to your 7777
RPC port until your node is fully caught up.
Towards the end of the following output, notice the era_id
and height
that you can use to determine if your node has completed synchronizing.
Sample output of the /status
endpoint
{
"api_version": "1.4.3",
"chainspec_name": "casper-test",
"starting_state_root_hash": "e2218b6bdb8137a178f242e9de24ef5db06af7925e8e4c65fa82d41df38f4576",
"peers": [
{
"node_id": "tls:0097..b253",
"address": "18.163.249.168:35000"
},
...
...
...
{
"node_id": "tls:ff95..c014",
"address": "93.186.201.14:35000"
}
],
"last_added_block_info": {
"hash": "8280de05cb34071f276fbe7c69a07cb325ddd373f685877911238b614bdcc5b1",
"timestamp": "2022-01-04T15:33:08.224Z",
"era_id": 3240,
"height": 430162,
"state_root_hash": "ec4ff5c4d0a9021984b56e2b6de4a57188101c24e09b765c3fee740353690076",
"creator": "01ace6578907bfe6eba3a618e863bbe7274284c88e405e2857be80dd094726a223"
},
"our_public_signing_key": "01cb41ee07d1827e243588711d45040fe46402bf3901fb550abfd08d1341700270",
"round_length": null,
"next_upgrade": null,
"build_version": "1.4.3-a44bed1fd-casper-mainnet",
"uptime": "25days 1h 48m 22s 47ms"
}
Step 8: Sending the Bonding Request
You can submit a bonding request to change your synchronized node to a validating node.
The bonding request must be sent after the node has synchronized the protocol state and linear blockchain to avoid being ejected for liveness failures.