Overview
Dymension is a decentralized Delegated Proof-of-Stake L1 blockchain designed to support fast and easily deployable app-chains known as RollApps. RollApps serve as the interactive applications within the Dymension ecosystem, enabling the creation of games, DeFi projects, NFT ventures, and more. Acting as the backbone, Dymension coordinates the ecosystem, while decentralized data availability networks function similarly to databases, providing short-term data storage and security verification.
Key Components:
- RollApps: The front-end interactive applications that users engage with.
- Dymension Hub: The back-end infrastructure that secures RollApps and facilitates user interactions, such as deposits, plays, and withdrawals. It also includes a decentralized exchange for trading RollApp tokens.
- Data Availability Networks: Decentralized networks that provide data availability, ensuring the security and integrity of RollApps.
Features:
- Security: RollApp funds are secured by Dymension validators.
- Bridging: RollApps can interconnect and link to the broader crypto economy through a single IBC connection.
- Liquidity: The Dymension Hub includes an Automated Market Maker (AMM) that supports efficient asset routing, price discovery, and shared liquidity across the ecosystem.
Dymension operates like an internet service provider, facilitating seamless integration and connectivity for RollApps, and reducing blockchain deployment time to mere minutes.
Standardization: Dymension emphasizes the importance of standardization for compatibility, security, and efficiency. It maintains an on-chain registry for approved Dymension RollApp Standards (DRS), which developers can use or customize. Custom standards require on-chain governance approval before being integrated into the core protocol and associated tools.
This structure ensures that Dymension remains a robust, secure, and efficient platform for developing and deploying decentralized applications.
Public Endpoints
Guide
This guide provides a complete and reliable setup for running a Dymension testnet node and validator. Here you’ll find everything you need - from downloading binaries and configuration files to initializing the node, managing keys, applying snapshots, and maintaining a stable validator environment. Follow the steps carefully to ensure a smooth and secure deployment on the Dymension network.
Prepare
Update and install packages
sudo apt update && sudo apt upgrade -y && \ sudo apt install curl tar wget clang pkg-config libssl-dev libleveldb-dev jq build-essential bsdmainutils git make ncdu htop screen unzip bc fail2ban htop -y
Installing Go
VER="1.22.0" cd $HOME && \ wget "https://golang.org/dl/go$VER.linux-amd64.tar.gz" && \ sudo rm -rf /usr/local/go && \ sudo tar -C /usr/local -xzf "go$VER.linux-amd64.tar.gz" && \ rm "go$VER.linux-amd64.tar.gz" && \ echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ go version
Binary
git clone https://github.com/dymensionxyz/dymension.git dymension cd dymension git checkout v2.0.0-alpha.8 make install dymd version --long | grep -e version -e commit # version: v2.0.0-alpha.8 # commit: 080bbb9ede90170f84a3f4f3665c179ea8742716
Initialization
Initialize the node (replace VALIDATOR_NAME with your own)
dymd init VALIDATOR_NAME --chain-id froopyland_100-1 && \ dymd config chain-id froopyland_100-1 && \ dymd config keyring-backend os
Genesis
Download genesis
wget https://storage.crouton.digital/testnet/dymension/files/genesis.json -O $HOME/.dymension/config/genesis.json
Addrbook
Download addrbook
wget https://storage.crouton.digital/testnet/dymension/files/addrbook.json -O $HOME/.dymension/config/addrbook.json
Configuration
EXTERNAL_IP=$(wget -qO- eth0.me) NODE_NUMBER="1" sed -i.bak \ -e "s/\(proxy_app = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))58\"/" \ -e "s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))57\"/" \ -e "s/\(pprof_laddr = \"\)\([^:]*\):\([0-9]*\).*/\1localhost:$(($NODE_NUMBER + 60))60\"/" \ -e "/\[p2p\]/,/^\[/{s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$(($NODE_NUMBER + 266))56\"/}" \ -e "/\[p2p\]/,/^\[/{s/\(external_address = \"\)\([^:]*\):\([0-9]*\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/; t; s/\(external_address = \"\).*/\1${EXTERNAL_IP}:$(($NODE_NUMBER + 266))56\"/}" \ -e "s/\(prometheus_listen_addr = \":\)\([0-9]*\).*/\1$(($NODE_NUMBER + 266))60\"/" $HOME/.dymension/config/config.toml sed -i.bak \ -e "/\[api\]/,/^\[/{s/\(address = \"tcp:\/\/\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 13))17\4/}" \ -e "/\[grpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))90\4/}" \ -e "/\[grpc-web\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 90))91\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))45\4/}" \ -e "/\[json-rpc\]/,/^\[/{s/\(ws-address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$(($NODE_NUMBER + 85))46\4/}" $HOME/.dymension/config/app.toml echo "export NODE=http://localhost:$(($NODE_NUMBER + 266))57" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ dymd config node $NODE
Create a service file
sudo tee /etc/systemd/system/dymd.service > /dev/null <<EOF [Unit] Description=dymension_node After=network.target [Service] User=$USER Type=simple ExecStart=$(which dymd) start --home $HOME/.dymension Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Start the node
sudo systemctl daemon-reload && \ sudo systemctl enable dymd && \ sudo systemctl restart dymd && \ sudo journalctl -u dymd -f -o cat
Restore node from snapshot
sudo apt install lz4 -y && \ sudo systemctl stop dymd && \ cp $HOME/.dymension/data/priv_validator_state.json $HOME/.dymension/priv_validator_state.json.backup && \ rm -rf $HOME/.dymension/data && \ curl https://storage.crouton.digital/testnet/dymension/snapshots/dymension_latest.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.dymension && \ mv $HOME/.dymension/priv_validator_state.json.backup $HOME/.dymension/data/priv_validator_state.json && \ sudo systemctl restart dymd && \ sudo journalctl -u dymd -f
State Sync
Restore node from state sync
SNAP_RPC="https://dymension-testnet-rpc.crouton.digital:443" && \ sudo systemctl stop dymd && \ cp $HOME/.dymension/data/priv_validator_state.json $HOME/.dymension/priv_validator_state.json.backup && \ dymd tendermint unsafe-reset-all --home $HOME/.dymension --keep-addr-book && \ peers="3de3ca4b5e2b83f0f999d0086c6324824f96bf67@65.109.93.124:28756" && \ sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.dymension/config/config.toml && \ LATEST_HEIGHT=$(curl -s "$SNAP_RPC/block" | jq -r .result.block.header.height) && \ BLOCK_HEIGHT=$((LATEST_HEIGHT - 1000)) && \ TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) && \ echo "$LATEST_HEIGHT $BLOCK_HEIGHT $TRUST_HASH" && sleep 2 && \ sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC,$SNAP_RPC\"| ; s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"| ; s|^(seeds[[:space:]]+=[[:space:]]+).*$|\1\"\"|" $HOME/.dymension/config/config.toml && \ mv $HOME/.dymension/priv_validator_state.json.backup $HOME/.dymension/data/priv_validator_state.json && \ sudo systemctl restart dymd && \ sudo journalctl -u dymd -f
Upgrade Node
VER="vv2.0.0-alpha.8" git clone https://github.com/dymensionxyz/dymension.git dymension && \ cd $HOME && \ rm -rf dymension && \ git clone https://github.com/dymensionxyz/dymension.git dymension && \ cd dymension && \ git checkout tags/$VER -b $VER && \ make install && \ sudo systemctl restart dymd && \ sudo journalctl -u dymd -f
Delete Node
sudo systemctl stop dymd && \ sudo systemctl disable dymd && \ sudo rm -rf /etc/systemd/system/dymd.service && \ sudo rm "$(which dymd)" && \ sudo rm -rf "$HOME/.dymension"
Key management
# This command generates a new wallet with a unique keypair. # Use this to create a secure, brand-new wallet for transactions. # Your wallet name = "wallet" dymd keys add wallet
Validator management
dymd tx staking create-validator \ --amount 1000000adym \ --moniker "VALIDATOR_NAME" \ --identity "" \ --website "" \ --details "" \ --from wallet \ --commission-rate 0.1 \ --commission-max-rate 0.2 \ --commission-max-change-rate 0.01 \ --min-self-delegation 1 \ --pubkey $(celestia-appd tendermint show-validator) \ --chain-id froopyland_100-1 \ --gas auto \ --gas-adjustment 1.4 \ --gas-prices 0.002adym \ -y
Validator commands
# Retrieves comprehensive information regarding the validator. # This command is utilized to fetch details about the current validator, including its address, public key, and associated data. # Your wallet name = "wallet" dymd q staking validator $(dymd keys show wallet --bech val -a)
Onchain
# Withdraw all accumulated rewards from your account. # This command retrieves and withdraws all rewards earned from staking. # Your wallet name = "wallet" dymd tx distribution withdraw-all-rewards --from wallet --chain-id froopyland_100-1 --gas-adjustment=1.15 --gas auto --gas-prices 0.002adym -y


