Networks
Mainnet
Genesis Instructions
Starting the network

Starting the network

By using, recording, referencing, or downloading (i.e., any “action”) any information contained on this page or in any dYdX Operations Services Ltd. ("dYdX Operations subDAO") database, you hereby and thereby agree to the dYdX Chain Docs Terms of Use governing such information, and you agree that such action establishes a binding agreement between you and dYdX Operations subDAO.

Downloading genesis.json

After the gentx collection process is complete, the dYdX Operations subDAO team will announce in the #ext-dydx-v4-validators-updates channel that the finalized genesis.json file is ready for download.

Download genesis.json file into $HOME/.dydxprotocol, replacing the previous genesis.json file:

curl -Ls https://raw.githubusercontent.com/dydxopsdao/networks/main/dydx-mainnet-1/genesis.json > $HOME/.dydxprotocol/config/genesis.json

Feel free to inspect the content of the genesis.json file, and let us know if there’s any questions/concerns.

Get Latest Binary

The network launch binary is available at dYdX Protocol repository (opens in a new tab)

# Set the correct version, e.g. "v1.0.0"
export BINARY_VERSION=<version>
# Choose a platform. Supported: linux-amd64, linux-arm64
export DYDX_PLATFORM="linux-amd64"
curl -LO https://github.com/dydxprotocol/v4-chain/releases/download/protocol%2F$BINARY_VERSION/dydxprotocold-$BINARY_VERSION-$DYDX_PLATFORM.tar.gz

Put binary under $PATH:

tar -xvzf dydxprotocold-$BINARY_VERSION-${DYDX_PLATFORM}.tar.gz
mkdir -p "${HOME}/local/bin"
export PATH="${HOME}/local/bin:$PATH"
cp build/dydxprotocold-$BINARY_VERSION-${DYDX_PLATFORM} "${HOME}/local/bin/dydxprotocold"
rm -R build

Check that the binary version is correct:

dydxprotocold version --long

The output should look like this (make sure the version and commit are consistent):

commit: bd3ff30248d271719c687cc10159de479fdd904d
cosmos_sdk_version: v0.47.4
go: go version go1.21.3 <platform>
name: dydxprotocol
server_name: dydxprotocold
version: 1.0.0

[💡💡💡IMPORTANT:💡💡💡] Verify Config

See this requirement section to correctly configure the node.

config.toml

Timeout Commit

Please check that timeout_commit value under $HOME/.dydxprotocol/config/config.toml is equal to

timeout_commit = "500ms"

Add Seed Nodes

Seed nodes are how the nodes within the network communicate. Adding them ensures nodes have healthy peers.

You can find a list of seed nodes here

seeds="<comma separated seed nodes>"
sed -i -e "s|^seeds *=.*|seeds = \"$seeds\"|" $HOME/.dydxprotocol/config/config.toml

app.toml

Minimum Gas Price

Setting a known minimum gas price ensures interacting with the network is consistent and reliable. The minumum gas prices must be set for USDC and DYDX. Please make sure the minimum-gas-prices parameter is configured with the correct denoms in $HOME/.dydxprotocol/config/app.toml. The price itself is up to each validator, we suggest the following initial values (both gas prices are represented in Xe-18 full coin)

sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"0.025ibc/8E27BA2D5493AF5636760E354E46004562C46AB7EC0CC4C1CA14E9E20E2545B5,12500000000adydx\"|" $HOME/.dydxprotocol/config/app.toml

Enable gRPC

The Cosmos gRPC service is used by various daemon processes, and must be enabled in order for the protocol to operate. Please make sure that grpc is enabled in $HOME/.dydxprotocol/config/app.toml:

[grpc]
 
# Enable defines if the gRPC server should be enabled.
enable = true

In addition, non-standard gRPC ports are not supported at this time. Please run on port 9090, which is the default port specified in the config file:

[grpc]
 
...
 
# Address defines the gRPC server address to bind to.
address = "0.0.0.0:9090"

Note that grpc can be also be configured via start flags. Be careful not to change the default settings with either of the following flags: --grpc.enable, --grpc.address.

[💡💡💡IMPORTANT:💡💡💡] Configure Ethereum RPC Endpoint

See this requirement section to correctly configure the Ethereum RPC endpoint.

Starting the Node

💡💡💡Please complete the following instructions before the mainnet genesis timestamp.💡💡💡

Option 1: Run dydxprotocold Directly

Run dydxprotocold and connect to the seed node. The seed node info can be found in Mainnet Info:

dydxprotocold start --p2p.seeds="<comma separated seed nodes>" --home $HOME/.dydxprotocol --bridge-daemon-eth-rpc-endpoint="<eth rpc endpoint>"

Option 2: Run dydxprotocold with cosmovisor

Install and initialize cosmovisor with instructions here. To make sure cosmovisor is initialized with the correct binary, run the following to binary version:

cosmovisor run version --long

The output should look like this (make sure the version and commit are consistent):

commit: bd3ff30248d271719c687cc10159de479fdd904d
cosmos_sdk_version: v0.47.4
go: go version go1.21.3 <platform>
name: dydxprotocol
server_name: dydxprotocold
version: 1.0.0

Run dydxprotocold with cosmovisor and connect to the seed node.

cosmovisor run start --p2p.seeds="<comma separated seed nodes>" --home $HOME/.dydxprotocol --bridge-daemon-eth-rpc-endpoint="<eth rpc endpoint>"

Announcing yourself and cooperating with others

Validators are also encouraged to share their IPs in #ext-dydx-v4-validators-discussion and use each other as persistent peers. Each p2p.persistent_peers are separated by comma and use the format <node_id>@<public_ip_address>:<port>.

To find your peer information, run

echo $(dydxprotocold tendermint show-node-id)@$(curl ifconfig.me):26656

Sanity Check

Once the binary is started, you should see the following line:

This node is a validator                  module=consensus addr=xxxxxxxxxx

If you see This node is not a validator instead, please let us know.

You should also see that the binary is sleeping until genesis time:

Genesis time is in the future. Sleeping until then...

While the binary is sleeping, some occasional errors from the price daemon are expected. If you see any critical error (e.g. the app is crashing), please let us know.

Checking Node Status (After Genesis Time)

Tendermint RPC (documentation (opens in a new tab)) provides a REST-like interface for querying the status node. To access this interface, you can execute the following command on your local machine: curl localhost:26657/<uri>. Alternatively, you can access it via a web browser by navigating to <public_ip_address>:26657 . Note that this can only be accessed after the genesis time when the node wakes up. Some useful links:

# Check your node block height
curl localhost:26657/status
# Check network connection
curl localhost:26657/net_info
# Query info about application state
curl localhost:26657/abci_info

Additionally, the dydxprotocold binary inherits most of the standard Cosmos SDK modules which can be queried.

To see the current validator active set:

dydxprotocold query staking validator <validator_address>

Example:

dydxprotocold query staking validator dydxvaloper199tqg4wdlnu4qjlxchpd7seg454937hjxg9yhy

To track your validator’s signing history:

dydxprotocold query slashing signing-info $(dydxprotocold tendermint show-validator)