Overview
Lava presents a transformative approach to blockchain data access with its innovative modular network, designed to attract fast, reliable, and cost-efficient infrastructure providers. This review delves into the core features and benefits that make Lava a standout solution in the blockchain ecosystem.
Introduction to Lava Lava stands out as the first modular data access layer for blockchains, introducing a novel concept called specs. This modular primitive allows contributors to add support for new chains and data services seamlessly. Initially focusing on RPC (Remote Procedure Call), Lava is set to expand its capabilities by integrating with indexing and API partners, such as Subsquid.
How Lava Works Lava operates by connecting data consumers with a network of data providers, including node operators. The protocol incentivizes providers to deliver high-quality service, ensuring optimal speed, uptime, and data accuracy. By leveraging a peer-to-peer network, Lava creates a scalable and dynamic market for blockchain data services.
Key Features
-
Quality of Service (QoS): Consumers can monitor and rate providers based on performance metrics. Providers must attach their QoS score when requesting rewards, ensuring that only high-quality service is rewarded.
-
Data Reliability: Lava employs fraud and fault detection mechanisms, using statistical inference and verifiable random selections to ensure data accuracy. This system penalizes providers found to be at fault, maintaining a trustworthy network.
-
Privacy & Anonymity: Random distribution of relays between top providers ensures that consumers receive services from varied providers, enhancing privacy. Direct consumer-provider communications further ensure anonymity.
-
Scalability: Lava's architecture is designed for scalability, incorporating features like a single-step reward system and direct communication between providers and dApps to enhance efficiency.
-
Decentralized Access: Lava promotes decentralized access, with all relays conducted peer-to-peer (P2P), ensuring a truly decentralized network.
-
Open Source: Committed to transparency and innovation, Lava's code is open source, allowing developers to investigate and contribute to its continuous improvement.
Conclusion Lava's modular approach and commitment to quality, reliability, privacy, and scalability position it as a pioneering force in the blockchain data access space. Its innovative architecture and decentralized ethos make it a valuable asset for developers and data consumers seeking efficient and reliable multi-chain access.
Public Endpoints
Guide
This guide provides a complete and reliable setup for running a Lava mainnet 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 Lava 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/lavanet/lava lava cd lava git checkout 5.5.1 make install lavad version --long | grep -e version -e commit # version: 5.5.1 # commit: b52a38c46bcc0ef519f57637ec1865f5671cfa07
Initialization
Initialize the node (replace VALIDATOR_NAME with your own)
lavad init VALIDATOR_NAME --chain-id lava-testnet-2 && \ lavad config chain-id lava-testnet-2 && \ lavad config keyring-backend os
Genesis
Download genesis
wget https://storage.crouton.digital/testnet/lava/files/genesis.json -O $HOME/.lava/config/genesis.json
Addrbook
Download addrbook
wget https://storage.crouton.digital/testnet/lava/files/addrbook.json -O $HOME/.lava/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/.lava/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/.lava/config/app.toml echo "export NODE=http://localhost:$(($NODE_NUMBER + 266))57" >> $HOME/.bash_profile && \ source $HOME/.bash_profile && \ lavad config node $NODE
Create a service file
sudo tee /etc/systemd/system/lavad.service > /dev/null <<EOF [Unit] Description=lava_node After=network.target [Service] User=$USER Type=simple ExecStart=$(which lavad) start --home $HOME/.lava Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF
Start the node
sudo systemctl daemon-reload && \ sudo systemctl enable lavad && \ sudo systemctl restart lavad && \ sudo journalctl -u lavad -f -o cat
Restore node from snapshot
sudo apt install lz4 -y && \ sudo systemctl stop lavad && \ cp $HOME/.lava/data/priv_validator_state.json $HOME/.lava/priv_validator_state.json.backup && \ rm -rf $HOME/.lava/data && \ curl https://storage.crouton.digital/testnet/lava/snapshots/lava_latest.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.lava && \ mv $HOME/.lava/priv_validator_state.json.backup $HOME/.lava/data/priv_validator_state.json && \ sudo systemctl restart lavad && \ sudo journalctl -u lavad -f
State Sync
Restore node from state sync
SNAP_RPC="https://lava-testnet-rpc.crouton.digital:443" && \ sudo systemctl stop lavad && \ cp $HOME/.lava/data/priv_validator_state.json $HOME/.lava/priv_validator_state.json.backup && \ lavad tendermint unsafe-reset-all --home $HOME/.lava --keep-addr-book && \ peers="c0165f15a0489f8619e1f7cc0484c5ecab55b48a@65.109.93.124:19956" && \ sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.lava/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/.lava/config/config.toml && \ mv $HOME/.lava/priv_validator_state.json.backup $HOME/.lava/data/priv_validator_state.json && \ sudo systemctl restart lavad && \ sudo journalctl -u lavad -f
Upgrade Node
VER="v5.5.1" git clone https://github.com/lavanet/lava lava && \ cd $HOME && \ rm -rf lava && \ git clone https://github.com/lavanet/lava lava && \ cd lava && \ git checkout tags/$VER -b $VER && \ make install && \ sudo systemctl restart lavad && \ sudo journalctl -u lavad -f
Delete Node
sudo systemctl stop lavad && \ sudo systemctl disable lavad && \ sudo rm -rf /etc/systemd/system/lavad.service && \ sudo rm "$(which lavad)" && \ sudo rm -rf "$HOME/.lava"
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" lavad keys add wallet
Validator management
lavad tx staking create-validator \ --amount 1000000ulava \ --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 lava-testnet-2 \ --gas auto \ --gas-adjustment 1.4 \ --gas-prices 0.002ulava \ -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" lavad q staking validator $(lavad 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" lavad tx distribution withdraw-all-rewards --from wallet --chain-id lava-testnet-2 --gas-adjustment=1.15 --gas auto --gas-prices 0.002ulava -y


