Skip to content

trusted-point/hedge-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

Repository files navigation

banner

About Hedge Blockchain

  • Hedge Blockchain Hedge Blockchain stands out as a state-of-the-art platform aimed at elevating the security, transparency, and efficiency of transactions.

  • Leveraging advanced M-sig transaction protocols, Hedge pioneers a blockchain network that ensures swifter and more dependable on-chain transactions.

Hedge Website Hedge Github Hedge Twitter Hedge Discord Hedge Blog

Navigation

Hardware requirements

- Memory: 8 GB RAM
- CPU: 4 cores
- Disk: 200 GB NVME
- Bandwidth: 1 Gbps
- Linux amd64 arm64 (Ubuntu LTS release)

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.0025uhedge


  • State sync: Guide
  • Fresh Snapshot: URL / Guide (Being updated every 10 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.21.3" && \
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

3. Download hedged binary

cd $HOME
wget -O hedged https://github.com/hedgeblock/testnets/releases/download/v0.1.0/hedged_linux_amd64_v0.1.0
sudo chmod +x hedged
mv $HOME/hedged $HOME/go/bin
hedged version

4. Set up variables

# Customize if you need
echo 'export MONIKER="My_Node"' >> ~/.bash_profile
echo 'export CHAIN_ID="berberis-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
hedged init $MONIKER --chain-id $CHAIN_ID
hedged config chain-id $CHAIN_ID
hedged config node tcp://localhost:$RPC_PORT
hedged 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://rpc-hedge-testnet.trusted-point.com/genesis.json -O $HOME/.hedge/config/genesis.json

7. Add seeds and peers to the 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/.hedge/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/.hedge/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/.hedge/config/app.toml"

10. Set min gas price

sed -i "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025uhedge\"/" $HOME/.hedge/config/app.toml

11. Enable indexer (Optional)

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

12. Create a service file

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

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

[Install]
WantedBy=multi-user.target
EOF

13. Start the node

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

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

14. Create a wallet for your validator

hedged 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. Request tokens from the faucet

Copy the validator public key generated during the wallet setup process. You can find it by running the following command:

hedged tendermint show-validator --home $HOME/.hedge

Send the copied validator public key in the Discord #faucet channel to get tokens.

-> FAUCET <-

16. Check wallet balance

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

hedged status | jq .SyncInfo.catching_up
hedged q bank balances $(hedged keys show $WALLET_NAME -a) 

17. Create a validator

hedged tx staking create-validator \
  --amount=1000000uhedge \
  --pubkey=$(hedged 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="Hedge to the moon!" \
  --fees 2000uhedge --gas 200000 \
  -y

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

State sync

1. Stop the node

sudo systemctl stop hedged

2. Backup priv_validator_state.json

cp $HOME/.hedge/data/priv_validator_state.json $HOME/.hedge/priv_validator_state.json.backup

3. Reset DB

hedged tendermint unsafe-reset-all --home $HOME/.hedge --keep-addr-book

4. Setup required variables (One command)

PEERS="cb7cfc03fbfc78fed10b24394041db54ef8658b7@peer-hedge-testnet.trusted-point.com:26995" && \
RPC="https://rpc-hedge-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/.hedge/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/.hedge/priv_validator_state.json.backup $HOME/.hedge/data/priv_validator_state.json

5. Start the node

sudo systemctl restart hedged && sudo journalctl -u hedged -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

hedged status | jq .SyncInfo

7. Disable state sync

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

Download fresh addrbook.json

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

sudo systemctl stop hedged && \
wget -O $HOME/.hedge/config/addrbook.json https://rpc-hedge-testnet.trusted-point.com/addrbook.json

2. Restart the node

sudo systemctl restart hedged && sudo journalctl -u hedged -f -o cat

3. Check the synchronization status

hedged 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-hedge-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/.hedge/config/config.toml"
    echo -e "\nConfiguration file updated successfully.\n"
fi

2. Restart the node

sudo systemctl restart hedged && sudo journalctl -u hedged -f -o cat

3. Check the synchronization status

hedged status | jq .SyncInfo

Peers are being updated every 5 minutes

Download Snapshot

1. Download latest snapshot from our endpoint

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

2. Stop the node

sudo systemctl stop hedged

3. Backup priv_validator_state.json

cp $HOME/.hedge/data/priv_validator_state.json $HOME/.hedge/priv_validator_state.json.backup

4. Reset DB

hedged tendermint unsafe-reset-all --home $HOME/.hedge --keep-addr-book

5. Extract files fromt the arvhive

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

6. Move priv_validator_state.json back

mv $HOME/.hedge/priv_validator_state.json.backup $HOME/.hedge/data/priv_validator_state.json

7. Restart the node

sudo systemctl restart hedged && sudo journalctl -u hedged -f -o cat

8. Check the synchronization status

hedged status | jq .SyncInfo

Snapshot is being updated every 3 hours

Useful commands

Check node status

hedged status | jq

Query your validator

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

Query missed blocks counter & jail details of your validator

hedged q slashing signing-info $(hedged tendermint show-validator)

Unjail your validator

hedged tx slashing unjail --from $WALLET_NAME --fees 2000uhedge --gas 200000 -y

Delegate tokens to your validator

hedged tx staking delegate $(hedged keys show $WALLET_NAME --bech val -a)  <AMOUNT>uhedge --from $WALLET_NAME --fees 2000uhedge --gas 200000 -y

Get your p2p peer address

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

Edit your validator

hedged tx staking edit-validator --website="<WEBSITE>" --details="<DESCRIPTION>" --moniker="<NEW_MONIKER>" --from=$WALLET_NAME --fees 2000uhedge --gas 200000 -y

Send tokens between wallets

hedged tx bank send $WALLET_NAME <TO_WALLET> <AMOUNT>uhedge --fees 2000uhedge --gas 200000 -y

Query your wallet balance

hedged q bank balances $WALLET_NAME

Monitor server load

sudo apt update
sudo apt install htop -y
htop

Query active validators

hedged 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

hedged 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 hedged -f -o cat

Restart the node

sudo systemctl restart hedged

Stop the node

sudo systemctl stop hedged

Upgrade the node

HEDGE_VERSION=<version>

cd $HOME
wget -O hedged https://github.com/hedgeblock/testnets/releases/download/$HEDGE_VERSION/hedged_linux_amd64_v0.1.0
sudo chmod +x hedged
mv $HOME/hedged $HOME/go/bin
hedged version

# Restrt the node
sudo systemctl restart hedged && sudo journalctl -u hedged -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/.hedge/config/ 
sudo systemctl stop hedged
sudo systemctl disable hedged
sudo rm /etc/systemd/system/hedged.service
rm -rf $HOME/.hedge

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/.hedge/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/.hedge/config/app.toml

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published