Giter Club home page Giter Club logo

0g-tools's Introduction

banner

About Zero Gravity (0G)

  • Zero Gravity is a pioneering data availability system featuring a decentralized storage layer designed for super scalability and security.

  • By segregating data availability workflows into distinct publishing and storage lanes, 0G optimizes scalability through efficient partitioning while ensuring data availability through consensus-based sampling, mitigating broadcasting bottlenecks.

  • Its incentive-based storage mechanism fosters network participation, promoting scalability and enabling support for diverse data types across Layer 2 networks and decentralized AI platforms. network.

0G Website 0G Github 0G Twitter 0G Discord 0G Blog

Navigation

Hardware requirements

- Memory: 64 GB RAM
- CPU: 8 cores
- Disk: 1 TB NVME SSD
- Bandwidth: 100mbps Gbps for Download / Upload
- Linux amd64 arm64 (The guide was tested on Ubuntu 20.04 LTS)

TrustedPoint Services

Parameter Value
indexing kv
pruning custom (100/50)
min-retain-blocks 0
snapshot-interval 2000
snapshot-keep-recent 2
minimum-gas-prices 0.00252ua0gi


  • State sync: Guide
  • Fresh Snapshot: URL / Guide (Being updated every 3 hours)
  • Fresh addrbook: URL / Guide (Being updated every 5 minutes)
  • Live Peers scanner: URL / Guide (Being updated every 5 minutes)

Installation guide

1. Install required packages

sudo apt update && \
sudo apt install curl git jq build-essential gcc unzip wget lz4 -y

2. Install Go

cd $HOME && \
ver="1.22.0" && \
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" >> ~/.bash_profile && \
source ~/.bash_profile && \
go version

3. Build 0gchaind binary

git clone -b v0.1.0 https://github.com/0glabs/0g-chain.git
cd 0g-chain
make install
0gchaind version

4. Set up variables

# Customize if you need
echo 'export MONIKER="My_Node"' >> ~/.bash_profile
echo 'export CHAIN_ID="zgtendermint_16600-1"' >> ~/.bash_profile
echo 'export WALLET_NAME="wallet"' >> ~/.bash_profile
echo 'export RPC_PORT="26657"' >> ~/.bash_profile
source $HOME/.bash_profile

5. Initialize the node

cd $HOME
0gchaind init $MONIKER --chain-id $CHAIN_ID
0gchaind config chain-id $CHAIN_ID
0gchaind config node tcp://localhost:$RPC_PORT
0gchaind config keyring-backend os # You can set it to "test" so you will not be asked for a password

6. Download genesis.json

wget https://github.com/0glabs/0g-chain/releases/download/v0.1.0/genesis.json -O $HOME/.0gchain/config/genesis.json

7. Add seeds and peers to the config.toml

SEEDS="[email protected]:26656,[email protected]:26656,[email protected]:26656,[email protected]:26656" && \
sed -i.bak -e "s/^seeds *=.*/seeds = \"${SEEDS}\"/" $HOME/.0gchain/config/config.toml

8. Change ports (Optional)

# Customize if you need
EXTERNAL_IP=$(wget -qO- eth0.me) \
PROXY_APP_PORT=26658 \
P2P_PORT=26656 \
PPROF_PORT=6060 \
API_PORT=1317 \
GRPC_PORT=9090 \
GRPC_WEB_PORT=9091
sed -i \
    -e "s/\(proxy_app = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$PROXY_APP_PORT\"/" \
    -e "s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$RPC_PORT\"/" \
    -e "s/\(pprof_laddr = \"\)\([^:]*\):\([0-9]*\).*/\1localhost:$PPROF_PORT\"/" \
    -e "/\[p2p\]/,/^\[/{s/\(laddr = \"tcp:\/\/\)\([^:]*\):\([0-9]*\).*/\1\2:$P2P_PORT\"/}" \
    -e "/\[p2p\]/,/^\[/{s/\(external_address = \"\)\([^:]*\):\([0-9]*\).*/\1${EXTERNAL_IP}:$P2P_PORT\"/; t; s/\(external_address = \"\).*/\1${EXTERNAL_IP}:$P2P_PORT\"/}" \
    $HOME/.0gchain/config/config.toml
sed -i \
    -e "/\[api\]/,/^\[/{s/\(address = \"tcp:\/\/\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$API_PORT\4/}" \
    -e "/\[grpc\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$GRPC_PORT\4/}" \
    -e "/\[grpc-web\]/,/^\[/{s/\(address = \"\)\([^:]*\):\([0-9]*\)\(\".*\)/\1\2:$GRPC_WEB_PORT\4/}" \
    $HOME/.0gchain/config/app.toml

9. Configure pruning to save storage (Optional)

sed -i \
    -e "s/^pruning *=.*/pruning = \"custom\"/" \
    -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"100\"/" \
    -e "s/^pruning-interval *=.*/pruning-interval = \"10\"/" \
    "$HOME/.0gchain/config/app.toml"

10. Set min gas price

sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0ua0gi\"/" $HOME/.0gchain/config/app.toml

11. Enable indexer (Optional)

sed -i "s/^indexer *=.*/indexer = \"kv\"/" $HOME/.0gchain/config/config.toml

12. Create a service file

sudo tee /etc/systemd/system/0gd.service > /dev/null <<EOF
[Unit]
Description=0G Node
After=network.target

[Service]
User=$USER
Type=simple
ExecStart=$(which 0gchaind) start --home $HOME/.0gchain
Restart=on-failure
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

13. Start the node

sudo systemctl daemon-reload && \
sudo systemctl enable 0gd && \
sudo systemctl restart 0gd && \
sudo journalctl -u 0gd -f -o cat

P.S. Consider downloading snapshot or using state-sync for the quick sync.

14. Create a wallet for your validator

0gchaind keys add $WALLET_NAME

# DO NOT FORGET TO SAVE THE SEED PHRASE
# You can add --recover flag to restore existing key instead of creating

15. Extract the HEX address to request some tokens from the faucet

echo "0x$(0gchaind debug addr $(0gchaind keys show $WALLET_NAME -a) | grep hex | awk '{print $3}')"

16. Request tokens from the faucet

-> FAUCET <-

17. Check wallet balance

Make sure your node is fully synced unless it won't work.

0gchaind status | jq .SyncInfo.catching_up

If your node is in sync, then proceed with the following command:

0gchaind q bank balances $(0gchaind keys show $WALLET_NAME -a) 

18. Create a validator

0gchaind tx staking create-validator \
  --amount=1000000ua0gi \
  --pubkey=$(0gchaind tendermint show-validator) \
  --moniker=$MONIKER \
  --chain-id=$CHAIN_ID \
  --commission-rate=0.05 \
  --commission-max-rate=0.10 \
  --commission-max-change-rate=0.01 \
  --min-self-delegation=1 \
  --from=$WALLET_NAME \
  --identity="" \
  --website="" \
  --details="0G to the moon!" \
  --gas=500000 --gas-prices=99999ua0gi \
  -y

Do not forget to save priv_validator_key.json file located in $HOME/.0gchain/config/

State sync

1. Stop the node

sudo systemctl stop 0gd

2. Backup priv_validator_state.json

cp $HOME/.0gchain/data/priv_validator_state.json $HOME/.0gchain/priv_validator_state.json.backup

3. Reset DB

0gchaind tendermint unsafe-reset-all --home $HOME/.0gchain --keep-addr-book

4. Setup required variables (One command)

PEERS="1248487ea585730cdf5d3c32e0c2a43ad0cda973@peer-zero-gravity-testnet.trusted-point.com:26326" && \
RPC="https://rpc-zero-gravity-testnet.trusted-point.com:443" && \
LATEST_HEIGHT=$(curl -s --max-time 3 --retry 2 --retry-connrefused $RPC/block | jq -r .result.block.header.height) && \
TRUST_HEIGHT=$((LATEST_HEIGHT - 1500)) && \
TRUST_HASH=$(curl -s --max-time 3 --retry 2 --retry-connrefused "$RPC/block?height=$TRUST_HEIGHT" | jq -r .result.block_id.hash) && \

if [ -n "$PEERS" ] && [ -n "$RPC" ] && [ -n "$LATEST_HEIGHT" ] && [ -n "$TRUST_HEIGHT" ] && [ -n "$TRUST_HASH" ]; then
    sed -i \
        -e "/\[statesync\]/,/^\[/{s/\(enable = \).*$/\1true/}" \
        -e "/^rpc_servers =/ s|=.*|= \"$RPC,$RPC\"|;" \
        -e "/^trust_height =/ s/=.*/= $TRUST_HEIGHT/;" \
        -e "/^trust_hash =/ s/=.*/= \"$TRUST_HASH\"/" \
        -e "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" \
        $HOME/.0gchain/config/config.toml
    echo -e "\nLATEST_HEIGHT: $LATEST_HEIGHT\nTRUST_HEIGHT: $TRUST_HEIGHT\nTRUST_HASH: $TRUST_HASH\nPEERS: $PEERS\n\nALL IS FINE"
else
    echo -e "\nError: One or more variables are empty. Please try again or change RPC\nExiting...\n"
fi

4. Move priv_validator_state.json back

mv $HOME/.0gchain/priv_validator_state.json.backup $HOME/.0gchain/data/priv_validator_state.json

5. Start the node

sudo systemctl restart 0gd && sudo journalctl -u 0gd -f -o cat

You should see the following logs. It may take up to 5 minutes for the snapshot to be discovered. If doesn't work, try downloading snapshot

2:39PM INF sync any module=statesync msg="Discovering snapshots for 15s" server=node
2:39PM INF Discovered new snapshot format=3 hash="?^๏ฟฝ๏ฟฝI๏ฟฝ๏ฟฝ\r๏ฟฝ=๏ฟฝO๏ฟฝE๏ฟฝ?๏ฟฝCQD๏ฟฝ6๏ฟฝ\x18๏ฟฝF:๏ฟฝ๏ฟฝ\x006๏ฟฝ" height=602000 module=statesync server=node
2:39PM INF Discovered new snapshot format=3 hash="%๏ฟฝ๏ฟฝ๏ฟฝ\x16\x03๏ฟฝT0๏ฟฝv๏ฟฝf๏ฟฝC๏ฟฝ๏ฟฝ5๏ฟฝ<TlLb๏ฟฝ5๏ฟฝ๏ฟฝl!๏ฟฝM" height=600000 module=statesync server=node
2:42PM INF VerifyHeader hash=CFC07DAB03CEB02F53273F5BDB6A7C16E6E02535B8A88614800ABA9C705D4AF7 height=602001 module=light server=node

After some time you should see the following logs. It make take 5 minutes for the node to catch up the rest of the blocks

2:43PM INF indexed block events height=602265 module=txindex server=node
2:43PM INF executed block height=602266 module=state num_invalid_txs=0 num_valid_txs=0 server=node
2:43PM INF commit synced commit=436F6D6D697449447B5B31313720323535203139203132392031353920313035203136352033352031353320313220353620313533203139352031372036342034372033352034372032333220373120313939203720313734203620313635203338203336203633203235203136332039203134395D3A39333039417D module=server
2:43PM INF committed state app_hash=75FF13819F69A523990C3899C311402F232FE847C707AE06A526243F19A30995 height=602266 module=state num_txs=0 server=node
2:43PM INF indexed block events height=602266 module=txindex server=node
2:43PM INF executed block height=602267 module=state num_invalid_txs=0 num_valid_txs=0 server=node
2:43PM INF commit synced commit=436F6D6D697449447B5B323437203134322032342031313620323038203631203138362032333920323238203138312032333920313039203336203420383720323238203236203738203637203133302032323220313431203438203337203235203133302037302032343020313631203233372031312036365D3A39333039427D module=server

6. Check the synchronization status

0gchaind status | jq .SyncInfo

7. Disable state sync

sed -i -e "/\[statesync\]/,/^\[/{s/\(enable = \).*$/\1false/}" $HOME/.0gchain/config/config.toml

Download fresh addrbook.json

1. Stop the node and use wget to download the file

sudo systemctl stop 0gd && \
wget -O $HOME/.0gchain/config/addrbook.json https://rpc-zero-gravity-testnet.trusted-point.com/addrbook.json

2. Restart the node

sudo systemctl restart 0gd && sudo journalctl -u 0gd -f -o cat

3. Check the synchronization status

0gchaind status | jq .SyncInfo

The file is being updated every 5 minutes

Add fresh persistent peers

1. Extract persistent_peers from our endpoint

PEERS=$(curl -s --max-time 3 --retry 2 --retry-connrefused "https://rpc-zero-gravity-testnet.trusted-point.com/peers.txt")
if [ -z "$PEERS" ]; then
    echo "No peers were retrieved from the URL."
else
    echo -e "\nPEERS: "$PEERS""
    sed -i "s/^persistent_peers *=.*/persistent_peers = \"$PEERS\"/" "$HOME/.0gchain/config/config.toml"
    echo -e "\nConfiguration file updated successfully.\n"
fi

2. Restart the node

sudo systemctl restart 0gd && sudo journalctl -u 0gd -f -o cat

3. Check the synchronization status

0gchaind status | jq .SyncInfo

Peers are being updated every 5 minutes

Download Snapshot

1. Download latest snapshot from our endpoint

wget https://rpc-zero-gravity-testnet.trusted-point.com/latest_snapshot.tar.lz4

2. Stop the node

sudo systemctl stop 0gd

3. Backup priv_validator_state.json

cp $HOME/.0gchain/data/priv_validator_state.json $HOME/.0gchain/priv_validator_state.json.backup

4. Reset DB

0gchaind tendermint unsafe-reset-all --home $HOME/.0gchain --keep-addr-book

5. Extract files fromt the arvhive

lz4 -d -c ./latest_snapshot.tar.lz4 | tar -xf - -C $HOME/.0gchain

6. Move priv_validator_state.json back

mv $HOME/.0gchain/priv_validator_state.json.backup $HOME/.0gchain/data/priv_validator_state.json

7. Restart the node

sudo systemctl restart 0gd && sudo journalctl -u 0gd -f -o cat

8. Check the synchronization status

0gchaind status | jq .SyncInfo

Snapshot is being updated every 3 hours

Useful commands

Check node status

0gchaind status | jq

Query your validator

0gchaind q staking validator $(0gchaind keys show $WALLET_NAME --bech val -a) 

Query missed blocks counter & jail details of your validator

0gchaind q slashing signing-info $(0gchaind tendermint show-validator)

Unjail your validator

0gchaind tx slashing unjail --from $WALLET_NAME --gas=500000 --gas-prices=99999ua0gi -y

Delegate tokens to your validator

0gchaind tx staking delegate $(0gchaind keys show $WALLET_NAME --bech val -a)  <AMOUNT>ua0gi --from $WALLET_NAME --gas=500000 --gas-prices=99999ua0gi -y

Get your p2p peer address

0gchaind status | jq -r '"\(.NodeInfo.id)@\(.NodeInfo.listen_addr)"'

Edit your validator

0gchaind tx staking edit-validator --website="<WEBSITE>" --details="<DESCRIPTION>" --new-moniker="<NEW_MONIKER>" --identity="<KEY BASE PREFIX>" --from=$WALLET_NAME --gas=500000 --gas-prices=99999ua0gi -y

Send tokens between wallets

0gchaind tx bank send $WALLET_NAME <TO_WALLET> <AMOUNT>ua0gi --gas=500000 --gas-prices=99999ua0gi -y

Query your wallet balance

0gchaind q bank balances $(0gchaind keys show $WALLET_NAME -a)

Monitor server load

sudo apt update
sudo apt install htop -y
htop

Query active validators

0gchaind q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

Query inactive validators

0gchaind q staking validators -o json --limit=1000 \
| jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' \
| jq -r '.tokens + " - " + .description.moniker' \
| sort -gr | nl

Check logs of the node

sudo journalctl -u 0gd -f -o cat

Restart the node

sudo systemctl restart 0gd

Stop the node

sudo systemctl stop 0gd

Upgrade the node

0G_VERSION=<version>

cd $HOME
rm -rf $HOME/0g-chain
git clone -b $0G_VERSION https://github.com/0glabs/0g-chain.git
./0g-chain/networks/testnet/install.sh
source .profile
0gchaind version
# Restart the node
sudo systemctl restart 0gd && sudo journalctl -u 0gd -f -o cat

Delete the node from the server

# !!! IF YOU HAVE CREATED A VALIDATOR, MAKE SURE TO BACKUP `priv_validator_key.json` file located in $HOME/.0gchain/config/ 
sudo systemctl stop 0gd
sudo systemctl disable 0gd
sudo rm /etc/systemd/system/0gd.service
rm -rf $HOME/.0gchain $HOME/0g-chain

Example gRPC usage

wget https://github.com/fullstorydev/grpcurl/releases/download/v1.7.0/grpcurl_1.7.0_linux_x86_64.tar.gz
tar -xvf grpcurl_1.7.0_linux_x86_64.tar.gz
chmod +x grpcurl
./grpcurl  -plaintext  localhost:$GRPC_PORT list
### MAKE SURE gRPC is enabled in app.toml
# grep -A 3 "\[grpc\]" /home/og-testnet-validator/.0gchain/config/app.toml

Example REST API query

curl localhost:$API_PORT/cosmos/staking/v1beta1/validators
### MAKE SURE API is enabled in app.toml
# grep -A 3 "\[api\]" /home/og-testnet-validator/.0gchain/config/app.toml

Monitoring

To enhance the observability and monitoring of your nodes and network status, you are encouraged to utilize our public dashboard. This platform offers real-time insights and analytics, enabling you to track performance, identify potential issues, and make informed decisions for optimal network health.

0G Dashboard

0g-tools's People

Contributors

bartosian avatar botxx15 avatar hacker-web-vi avatar rost1989 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

0g-tools's Issues

Got Error 126 while running 'make install'

make install
/bin/sh: 1: go: Exec format error
CGO_ENABLED="1" go install -tags "netgo ledger" -ldflags '-X github.com/cosmos/cosmos-sdk/version.Name=evmos -X github.com/cosmos/cosmos-sdk/version.AppName=evmosd -X github.com/cosmos/cosmos-sdk/version.Version=1.0.0-testnet -X github.com/cosmos/cosmos-sdk/version.Commit=b52c268d6a66949195bc89e2e2f6b755c4d0dd3b -X github.com/cometbft/cometbft/version.TMCoreSemVer= -X "github.com/cosmos/cosmos-sdk/version.BuildTags=netgo,ledger" -w -s' -trimpath ./...
/bin/sh: 1: go: Exec format error
make: *** [Makefile:143: install] Error 126

Can't start evmosd

I've followed the instructions from https://0glabs.gitbook.io/0g-doc/run-a-node/validator-node

But I am getting the error below:

mcs@DESKTOP:~$ evmosd start
12:52AM INF Unlocking keyring module=server
12:52AM INF starting ABCI with Tendermint module=server
12:52AM INF starting node with ABCI Tendermint in-process module=server
12:52AM INF service start impl=multiAppConn module=proxy msg="Starting multiAppConn service" server=node
12:52AM INF service start connection=query impl=localClient module=abci-client msg="Starting localClient service" server=node
12:52AM INF service start connection=snapshot impl=localClient module=abci-client msg="Starting localClient service" server=node
12:52AM INF service start connection=mempool impl=localClient module=abci-client msg="Starting localClient service" server=node
12:52AM INF service start connection=consensus impl=localClient module=abci-client msg="Starting localClient service" server=node
12:52AM INF service start impl=EventBus module=events msg="Starting EventBus service" server=node
12:52AM INF service start impl=PubSub module=pubsub msg="Starting PubSub service" server=node
12:52AM INF service start impl=IndexerService module=txindex msg="Starting IndexerService service" server=node
12:52AM INF ABCI Handshake App Info hash= height=0 module=consensus protocol-version=0 server=node software-version=1.0.0-testnet
12:52AM INF ABCI Replay Blocks appHeight=0 module=consensus server=node stateHeight=0 storeHeight=0
12:52AM INF InitChain chainID=zgtendermint_9000-1 initialHeight=1 module=server
12:52AM INF initializing blockchain state from genesis.json module=server
12:52AM INF created new capability module=ibc name=ports/transfer
12:52AM INF port binded module=x/ibc/port port=transfer
12:52AM INF claimed capability capability=1 module=transfer name=ports/transfer
12:52AM INF created new capability module=ibc name=ports/icahost
12:52AM INF port binded module=x/ibc/port port=icahost
12:52AM INF claimed capability capability=2 module=icahost name=ports/icahost
panic: validator set is empty after InitGenesis, please ensure at least one validator is initialized with a delegation greater than or equal to the DefaultPowerReduction ({824639172448})

Got error when use state-sync or download snapshot

- StateSync
I got this error when setup required variables

parse error: Invalid numeric literal at line 1, column 7

image

- Download snapshot
After download snapshot, extract file, restore backup file and restart node. I got this error
image

expected 'aligned' got 'evmos': internal logic error: invalid request

When I use "echo "0x$(evmosd debug addr $(evmosd keys show $WALLET_NAME -a) | grep hex | awk '{print $3}')""
I caught the error message:
Error: rpc error: code = InvalidArgument desc = rpc error: code = InvalidArgument desc = invalid address: hrp does not match bech32 prefix: expected 'aligned' got 'evmos': internal logic error: invalid request
Help me please!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.