
The ValiDAO Digest ep.29
Welcome back to another edition of the ValiDAO Digest! Each week, we update our dear readers with all the major developments happening within the ecosystems where we operate, provided by your very own local, organic, seed-oil-free validator.HyperliquidHyperliquid experienced a malicious attack via the JELLY perpetual contract, requiring the validator set to vote and delist the market. Despite this whole ordeal, HLP ended up in profit, and affected users and traders will be made whole by the f...

Monad: The Hyperoptimized EVM
IntroductionGmonad, and welcome to another ValiDAO deep dive! Today we're exploring the technical side of Monad. While details are still sparse, we've done our best to gather all relevant information and present what's known in one article. If you've been on crypto twitter in the past year, you've no doubt come across the Mondalak. But you may be wondering: whence cometh the hype? What's Monad all about? Is Monad only popular because they have an insanely cute ma...

Drop Money: An Introduction
While the interchain economy has seen an explosive growth in recent years, issues of capital efficiency continue to plague the ecosystem. Particularly, despite the existence of several liquid staking protocols (LSPs), over $15bn of assets are currently natively staked and thus locked and unusable within these networks. Built on Neutron and led by former Lido Finance and P2P contributors, Drop aims to strengthen the economic viability of the interchain by putting these staked assets to work. O...
ValiDAO is a multi-chain, DAO-owned validator. Welcome to our blog! Here, we'll be posting articles of various kinds.

The ValiDAO Digest ep.29
Welcome back to another edition of the ValiDAO Digest! Each week, we update our dear readers with all the major developments happening within the ecosystems where we operate, provided by your very own local, organic, seed-oil-free validator.HyperliquidHyperliquid experienced a malicious attack via the JELLY perpetual contract, requiring the validator set to vote and delist the market. Despite this whole ordeal, HLP ended up in profit, and affected users and traders will be made whole by the f...

Monad: The Hyperoptimized EVM
IntroductionGmonad, and welcome to another ValiDAO deep dive! Today we're exploring the technical side of Monad. While details are still sparse, we've done our best to gather all relevant information and present what's known in one article. If you've been on crypto twitter in the past year, you've no doubt come across the Mondalak. But you may be wondering: whence cometh the hype? What's Monad all about? Is Monad only popular because they have an insanely cute ma...

Drop Money: An Introduction
While the interchain economy has seen an explosive growth in recent years, issues of capital efficiency continue to plague the ecosystem. Particularly, despite the existence of several liquid staking protocols (LSPs), over $15bn of assets are currently natively staked and thus locked and unusable within these networks. Built on Neutron and led by former Lido Finance and P2P contributors, Drop aims to strengthen the economic viability of the interchain by putting these staked assets to work. O...
ValiDAO is a multi-chain, DAO-owned validator. Welcome to our blog! Here, we'll be posting articles of various kinds.

Subscribe to ValiDAO

Subscribe to ValiDAO
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers


In this guide we’ll:
Set up an Initia Full node with a custom DB backend
Tune configuration parameters
Tune system-level settings
Assumptions: You have a VPS / bare metal server running Ubuntu >22.04 at hand. While we won’t go over the steps for provisioning a server, we’ll recommend selecting for the recommended specs:
CPU: 16 cores
Memory: 32GB RAM
Disk: 2 TB NVMe/SSD Storage with Write Throughput > 1000 MiBps
Bandwidth: 100 Mbps
If on bare-metal, we recommend a RAID0 disk configuration for optimal performance.
We’ll be using the tuned-adm package to fine-tune kernel-level configurations. tuned-adm is a system tuning daemon for Linux that can be used to optimize performance for certain tasks. We find the throughput-performance profile to be the most effective.
First, install tuned-adm and required packages:
sudo apt install tuned tuned-utils tuned-utils-systemtap
Adjust the existing throughput-performance profile to decrease the likelihood of moving memory to swap:
sudo sed -i 's/^vm\.swappiness=10$/vm.swappiness=1/' /usr/lib/tuned/throughput-performance/tuned.conf
Enable the profile:
sudo tuned-adm profile throughput-performance
Verify that the profile is now active:
tuned-adm active
PebbleDB is a fast, RocksDB-inspired key-value store that enhances read/write performance. By efficiently moving more operations into memory and improving caching, PebbleDB can reduce disk requirements. It offers better compression, quicker pruning, and more efficient memory usage, resulting in less I/O overhead. In our tests, pruning operation times decreased by over 75%. Additionally, read and write operations per second significantly decreased due to improved caching.
Here, we’ll be using pebbledb in place of the default leveldb
Install pre-requisites
sudo apt install jq build-essential curl wget
Install go
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.22.2.linux-amd64.tar.gz | sudo tar -C /usr/local -xz
echo "" >> $HOME/.profile
echo 'export GOPATH=$HOME/go' >> $HOME/.profile
echo 'export GOBIN=$GOPATH/bin' >> $HOME/.profile
echo 'export PATH=$PATH:/usr/local/go/bin:$GOBIN' >> $HOME/.profile
source $HOME/.profile`
Confirm installation
go version
Clone the repo
cd $HOME
git clone https://github.com/initia-labs/initia.git
git checkout v0.2.21 # <-- remember to check for up to date version
Intall Initia Node (initiad).
Usually, you’d run make install to install the binary. Here though, we’ll make some modifications so that the reuslting binary uses pebbledb as its database backend:
go mod edit -replace github.com/cometbft/cometbft-db=github.com/cometbft/cometbft-db@v0.12.0
go mod tidy
make BUILD_TAGS=pebbledb LDFLAGS="-w -s -X github.com/cosmos/cosmos-sdk/types.DBBackend=pebbledb \
-X github.com/cosmos/cosmos-sdk/version.Version=v0.2.21 \
-X github.com/cosmos/cosmos-sdk/version.Commit=$(git log -1 --format='%H') \
-X github.com/cosmos/cosmos-sdk/version.ServerName=initiad \
-X github.com/cosmos/cosmos-sdk/version.ClientName=initiad \
-X github.com/cosmos/cosmos-sdk/version.Name=initia \
-X github.com/cosmos/cosmos-sdk/version.AppName=initia" build
cp build/initiad $GOBIN/initiad
Verify installation
initiad version --long
Initilatise configurations
initiad init pebblenode --chain-id initiation-1
cd $HOME/.initia/config
rm genesis
wget -O genesis.json https://snapshots.polkachu.com/testnet-genesis/initia/genesis.json
Set seeds (h/t polkachu)
seeds="ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:25756,86bd5cb6e762f673f1706e5889e039d5406b4b90@seed.initia.testnet.node75.org:20456"
sed -i "s/^seeds *=.*/seeds = \"$seeds\"/" $HOME/.initia/config/config.toml
Set minimum gas prices
min_gas_price="0.002uinit,0.002move\/944f8dd8dc49f96c25fea9849f16436dcfa6d564eec802f3ef7f8b3ea85368ff"
sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$min_gas_price\"/" $HOME/.initia/config/app.toml
Set pruning to custom
pruning="custom"
pruning_keep_recent="100"
pruning_interval="10"
sed -i "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.initia/config/app.toml
sed -i "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.initia/config/app.toml
sed -i "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.initia/config/app.toml
sed -i -e "s/^min-retain-blocks *=.*/min-retain-blocks = 3000/" ${HOME}/.initia/config/app.toml
Set PebbleDB backend
db_backend="pebbledb"
sed -i "s/^db_backend *=.*/db_backend = \"$db_backend\"/" $HOME/.initia/config/config.toml
sed -i "s/^app-db-backend *=.*/app-db-backend = \"$db_backend\"/" $HOME/.initia/config/app.toml
Install systemd service
sudo tee /etc/systemd/system/initiad.service > /dev/null <<EOF
[Unit]
Description=Initia node Service
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$GOBIN/initiad start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Statesync: save this as a file statesync.sh and execute it
#!/bin/bash
SNAP_RPC="https://rpc.initiation-1.initia.xyz:443"
curl -s $SNAP_RPC/status > /dev/null
if [ $? -ne 0 ]; then
echo "failed querying rpc, exiting"
exit
fi
if [ ! -d $HOME/.initia ]; then
echo "home .initia does not exist, exiting"
exit
fi
if [ ! -f /etc/systemd/system/initiad.service ]; then
echo "servvice initiad does not exist, exiting"
exit
fi
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 7500)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
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\"|" $HOME/.initia/config/config.toml
sudo systemctl stop initiad
if [ -d $HOME/.initia/data ]; then
mv $HOME/.initia/data/priv_validator_state.json
$HOME/.initia/priv_validator_state.json
rm -rf $HOME/.initia/data* $HOME/.initia/wasm*
mkdir $HOME/.initia/data
cp $HOME/.initia/priv_validator_state.json
$HOME/.initia/data/priv_validator_state.json
fi
sudo systemctl start initiad
Your node should now be syncing via statesync, using pebbleDB! Make sure to open up your firewall to allow incoming traffic on port 26656 as well to increase your peering.
In this guide we’ll:
Set up an Initia Full node with a custom DB backend
Tune configuration parameters
Tune system-level settings
Assumptions: You have a VPS / bare metal server running Ubuntu >22.04 at hand. While we won’t go over the steps for provisioning a server, we’ll recommend selecting for the recommended specs:
CPU: 16 cores
Memory: 32GB RAM
Disk: 2 TB NVMe/SSD Storage with Write Throughput > 1000 MiBps
Bandwidth: 100 Mbps
If on bare-metal, we recommend a RAID0 disk configuration for optimal performance.
We’ll be using the tuned-adm package to fine-tune kernel-level configurations. tuned-adm is a system tuning daemon for Linux that can be used to optimize performance for certain tasks. We find the throughput-performance profile to be the most effective.
First, install tuned-adm and required packages:
sudo apt install tuned tuned-utils tuned-utils-systemtap
Adjust the existing throughput-performance profile to decrease the likelihood of moving memory to swap:
sudo sed -i 's/^vm\.swappiness=10$/vm.swappiness=1/' /usr/lib/tuned/throughput-performance/tuned.conf
Enable the profile:
sudo tuned-adm profile throughput-performance
Verify that the profile is now active:
tuned-adm active
PebbleDB is a fast, RocksDB-inspired key-value store that enhances read/write performance. By efficiently moving more operations into memory and improving caching, PebbleDB can reduce disk requirements. It offers better compression, quicker pruning, and more efficient memory usage, resulting in less I/O overhead. In our tests, pruning operation times decreased by over 75%. Additionally, read and write operations per second significantly decreased due to improved caching.
Here, we’ll be using pebbledb in place of the default leveldb
Install pre-requisites
sudo apt install jq build-essential curl wget
Install go
sudo rm -rf /usr/local/go
curl -Ls https://go.dev/dl/go1.22.2.linux-amd64.tar.gz | sudo tar -C /usr/local -xz
echo "" >> $HOME/.profile
echo 'export GOPATH=$HOME/go' >> $HOME/.profile
echo 'export GOBIN=$GOPATH/bin' >> $HOME/.profile
echo 'export PATH=$PATH:/usr/local/go/bin:$GOBIN' >> $HOME/.profile
source $HOME/.profile`
Confirm installation
go version
Clone the repo
cd $HOME
git clone https://github.com/initia-labs/initia.git
git checkout v0.2.21 # <-- remember to check for up to date version
Intall Initia Node (initiad).
Usually, you’d run make install to install the binary. Here though, we’ll make some modifications so that the reuslting binary uses pebbledb as its database backend:
go mod edit -replace github.com/cometbft/cometbft-db=github.com/cometbft/cometbft-db@v0.12.0
go mod tidy
make BUILD_TAGS=pebbledb LDFLAGS="-w -s -X github.com/cosmos/cosmos-sdk/types.DBBackend=pebbledb \
-X github.com/cosmos/cosmos-sdk/version.Version=v0.2.21 \
-X github.com/cosmos/cosmos-sdk/version.Commit=$(git log -1 --format='%H') \
-X github.com/cosmos/cosmos-sdk/version.ServerName=initiad \
-X github.com/cosmos/cosmos-sdk/version.ClientName=initiad \
-X github.com/cosmos/cosmos-sdk/version.Name=initia \
-X github.com/cosmos/cosmos-sdk/version.AppName=initia" build
cp build/initiad $GOBIN/initiad
Verify installation
initiad version --long
Initilatise configurations
initiad init pebblenode --chain-id initiation-1
cd $HOME/.initia/config
rm genesis
wget -O genesis.json https://snapshots.polkachu.com/testnet-genesis/initia/genesis.json
Set seeds (h/t polkachu)
seeds="ade4d8bc8cbe014af6ebdf3cb7b1e9ad36f412c0@testnet-seeds.polkachu.com:25756,86bd5cb6e762f673f1706e5889e039d5406b4b90@seed.initia.testnet.node75.org:20456"
sed -i "s/^seeds *=.*/seeds = \"$seeds\"/" $HOME/.initia/config/config.toml
Set minimum gas prices
min_gas_price="0.002uinit,0.002move\/944f8dd8dc49f96c25fea9849f16436dcfa6d564eec802f3ef7f8b3ea85368ff"
sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"$min_gas_price\"/" $HOME/.initia/config/app.toml
Set pruning to custom
pruning="custom"
pruning_keep_recent="100"
pruning_interval="10"
sed -i "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.initia/config/app.toml
sed -i "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.initia/config/app.toml
sed -i "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.initia/config/app.toml
sed -i -e "s/^min-retain-blocks *=.*/min-retain-blocks = 3000/" ${HOME}/.initia/config/app.toml
Set PebbleDB backend
db_backend="pebbledb"
sed -i "s/^db_backend *=.*/db_backend = \"$db_backend\"/" $HOME/.initia/config/config.toml
sed -i "s/^app-db-backend *=.*/app-db-backend = \"$db_backend\"/" $HOME/.initia/config/app.toml
Install systemd service
sudo tee /etc/systemd/system/initiad.service > /dev/null <<EOF
[Unit]
Description=Initia node Service
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=$GOBIN/initiad start
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
Statesync: save this as a file statesync.sh and execute it
#!/bin/bash
SNAP_RPC="https://rpc.initiation-1.initia.xyz:443"
curl -s $SNAP_RPC/status > /dev/null
if [ $? -ne 0 ]; then
echo "failed querying rpc, exiting"
exit
fi
if [ ! -d $HOME/.initia ]; then
echo "home .initia does not exist, exiting"
exit
fi
if [ ! -f /etc/systemd/system/initiad.service ]; then
echo "servvice initiad does not exist, exiting"
exit
fi
LATEST_HEIGHT=$(curl -s $SNAP_RPC/block | jq -r .result.block.header.height); \
BLOCK_HEIGHT=$((LATEST_HEIGHT - 7500)); \
TRUST_HASH=$(curl -s "$SNAP_RPC/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash)
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\"|" $HOME/.initia/config/config.toml
sudo systemctl stop initiad
if [ -d $HOME/.initia/data ]; then
mv $HOME/.initia/data/priv_validator_state.json
$HOME/.initia/priv_validator_state.json
rm -rf $HOME/.initia/data* $HOME/.initia/wasm*
mkdir $HOME/.initia/data
cp $HOME/.initia/priv_validator_state.json
$HOME/.initia/data/priv_validator_state.json
fi
sudo systemctl start initiad
Your node should now be syncing via statesync, using pebbleDB! Make sure to open up your firewall to allow incoming traffic on port 26656 as well to increase your peering.
No activity yet