> For the complete documentation index, see [llms.txt](https://docs.validator247.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.validator247.com/mainnet/entangle.md).

# Entangle

**Info**&#x20;

> [https://twitter.com/Entanglefi\
> https://discord.gg/entangle](<https://twitter.com/Entanglefi&#xA;https://discord.gg/entangle>)

## **Public Endpoints**

> RPC <https://entangle-rpc.validator247.com>
>
> API [ https://entangle-api.validator247.com](< https://entangle-api.validator247.com>)

## **Explorer  - Delegate / Stake for me !**

> <https://explorer.entangle.fi/validators/entvaloper12spzgnh3aqrpnyv4kmev2qqkp3hszw7nw48jd9>

## **Update system**

```
sudo apt update

sudo apt-get install git curl build-essential make jq gcc snapd chrony lz4 tmux unzip bc -y
```

## **Install Go**

```
rm -rf $HOME/go
sudo rm -rf /usr/local/go
cd $HOME
curl https://dl.google.com/go/go1.20.5.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -
cat <<'EOF' >>$HOME/.profile
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GO111MODULE=on
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF
source $HOME/.profile
go version
```

## **Install Node**

```
cd $HOME

rm -rf entangle-blockchain

git clone https://github.com/Entangle-Protocol/entangle-blockchain.git

cd entangle-blockchain

git checkout main

make install

entangled version
```

## **Initialize Node**

```
entangled init <Your_NodeName> --chain-id=entangle_33033-1
```

## **Download Genesis & Addrbook**

```
curl -L -o addrbook.json https://raw.githubusercontent.com/Validator247/Entangle-Mainnet/main/addrbook.json
curl -L -o genesis.json https://raw.githubusercontent.com/Validator247/Entangle-Mainnet/main/genesis.json

```

## **Create Service**

```
sudo tee /etc/systemd/system/entangled.service > /dev/null <<EOF
[Unit]
Description=entangled Daemon
After=network-online.target

[Service]
User=$USER
ExecStart=$(which entangled) start --home /root/.entangled --chain-id entangle_33033-1
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable entangled
```

## **State Sync**&#x20;

Stop node and reset the data

> ```
> sudo systemctl stop entangled
> cp $HOME/.entangled/data/priv_validator_state.json $HOME/.entangled/priv_validator_state.json.backup
> entangled tendermint unsafe-reset-all --home $HOME/.entangled --keep-addr-book
> ```

#### Configure the state sync <a href="#get-and-configure-the-state-sync-information" id="get-and-configure-the-state-sync-information"></a>

```
STATE_SYNC_RPC=https://entangle-rpc.validator247.com:443
LATEST_HEIGHT=$(curl -s $STATE_SYNC_RPC/block | jq -r .result.block.header.height)
SYNC_BLOCK_HEIGHT=$(($LATEST_HEIGHT - 1000))
SYNC_BLOCK_HASH=$(curl -s "$STATE_SYNC_RPC/block?height=$SYNC_BLOCK_HEIGHT" | jq -r .result.block_id.hash)

sed -i \
  -e "s|^enable *=.*|enable = true|" \
  -e "s|^rpc_servers *=.*|rpc_servers = \"$STATE_SYNC_RPC,$STATE_SYNC_RPC\"|" \
  -e "s|^trust_height *=.*|trust_height = $SYNC_BLOCK_HEIGHT|" \
  -e "s|^trust_hash *=.*|trust_hash = \"$SYNC_BLOCK_HASH\"|" \
  $HOME/.entangled/config/config.toml

mv $HOME/.entangled/priv_validator_state.json.backup $HOME/.entangled/data/priv_validator_state.json
```

Restart Node & Check Logs&#x20;

```
sudo systemctl restart entangled
sudo journalctl -u entangled -f -o cat
```

## **Snapshot**

```
sudo systemctl stop entangled

cp $HOME/.entangled/data/priv_validator_state.json $HOME/.entangled/priv_validator_state.json.backup
entangled tendermint unsafe-reset-all --home ~/.entangled/ --keep-addr-book
curl https://snapshot.validatorvn.com/entangle/data.tar.lz4 | lz4 -dc - | tar -xf - -C $HOME/.entangled
mv $HOME/.entangled/priv_validator_state.json.backup $HOME/.entangled/data/priv_validator_state.json

sudo systemctl restart entangled && sudo journalctl -u entangled -f -o cat
```

## **Launch Node**

```
sudo systemctl restart entangled
journalctl -u entangled -f -o cat

```

#### Key management <a href="#key-management" id="key-management"></a>

Add new key

```
entangled keys add wallet
```

Recover existing key

```
entangled keys add wallet --recover
```

Get bech32 to hex wallet

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

List all keys

```
entangled keys list
```

Delete key

```
entangled keys delete wallet
```

Export key to the file

```
entangled keys export wallet
```

Import key from the file

```
entangled keys import wallet wallet.backup
```

Wallet balance

```
entangled q bank balances $(entangled keys show wallet -a)
```

#### Token management <a href="#token-management" id="token-management"></a>

Withdraw rewards from all validators

```
entangled tx distribution withdraw-all-rewards --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

Withdraw rewards and commissions from your validator

```
entangled tx distribution withdraw-rewards $(entangled keys show wallet --bech val -a) --commission --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

Delegate tokens to yourself

```
entangled tx staking delegate $(entangled keys show wallet --bech val -a) 1000000000000000000aNGL --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

Delegate tokens to validator

```
entangled tx staking delegate <TO_VALOPER_ADDRESS> 1000000000000000000aNGL --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

Redelegate tokens to another validator

```
entangled tx staking redelegate $(entangled keys show wallet --bech val -a) <TO_VALOPER_ADDRESS> 1000000000000000000aNGL --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

Unbond tokens from your validator

```
entangled tx staking unbond $(entangled keys show wallet --bech val -a) 1000000000000000000aNGL --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

Send tokens to the wallet

```
entangled tx bank send wallet <TO_WALLET_ADDRESS> 1000000000000000000aNGL --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

#### Validator management <a href="#validator-management" id="validator-management"></a>

Validator info

```
entangled status 2>&1 | jq .ValidatorInfo
```

Validator details

```
entangled q staking validator $(entangled keys show wallet --bech val -a)
```

Check if validator key is correct

```
[[ $(entangled q staking validator $(entangled keys show wallet --bech val -a) -oj | jq -r .consensus_pubkey.key) = $(entangled status | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "\n\e[1m\e[32mTrue\e[0m\n" || echo -e "\n\e[1m\e[31mFalse\e[0m\n"
```

List all active validators

```
entangled q staking validators -oj --limit=3000 | jq '.validators[] | select(.status=="BOND_STATUS_BONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl
```

List all inactive validators

```
entangled q staking validators -oj --limit=3000 | jq '.validators[] | select(.status=="BOND_STATUS_UNBONDED")' | jq -r '(.tokens|tonumber/pow(10; 6)|floor|tostring) + " \t " + .description.moniker' | sort -gr | nl
```

Edit existing validator

```
entangled tx staking edit-validator \  --new-moniker "YOUR_MONIKER_NAME" \  --identity "YOUR_KEYBASE_ID" \  --details "YOUR_DETAILS" \  --website "YOUR_WEBSITE_URL" \  --security-contact "YOUR_EMAIL_ADDRESS" \  --chain-id entangle_33033-1 \  --commission-rate 0.05 \  --from wallet \  --gas-adjustment 1.4 \  --gas 500000 \  --gas-prices 10aNGL \  -y
```

Jail reason

```
entangled query slashing signing-info $(entangled tendermint show-validator)
```

Unjail validator

```
entangled tx slashing unjail --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

#### Governance <a href="#governance" id="governance"></a>

List all proposals

```
entangled query gov proposals
```

View proposal by ID

```
entangled query gov proposal 1
```

Vote “YES”

```
entangled tx gov vote 1 yes --from wallet --chain-id entangle_33033-1 --gas-adjustment 1.4 --gas 500000 --gas-prices 10aNGL -y
```

#### Maintenance <a href="#maintenance" id="maintenance"></a>

Get sync info

```
entangled status 2>&1 | jq .SyncInfo
```

Enable Prometheus

```
sed -i -e "s/prometheus = false/prometheus = true/" $HOME/.entangled/config/config.toml
```

Set minimum gas price

```
sed -i -e "s|^minimum-gas-prices *=.*|minimum-gas-prices = \"10aNGL\"|" $HOME/.entangled/config/app.toml
```

Disable indexer

```
sed -i -e 's|^indexer *=.*|indexer = "null"|' $HOME/.entangled/config/config.toml
```

Enable indexer

```
sed -i -e 's|^indexer *=.*|indexer = "kv"|' $HOME/.entangled/config/config.toml
```

Update pruning

```
sed -i -e 's|^pruning *=.*|pruning = "custom"|' $HOME/.entangled/config/app.tomlsed -i -e 's|^pruning-keep-recent  *=.*|pruning-keep-recent = "100"|' $HOME/.entangled/config/app.tomlsed -i -e 's|^pruning-keep-every *=.*|pruning-keep-every = "0"|' $HOME/.entangled/config/app.tomlsed -i -e 's|^pruning-interval *=.*|pruning-interval = "10"|' $HOME/.entangled/config/app.toml
```

Filter peers and max peers

```
sed -i -e 's|^filter_peers *=.*|filter_peers = "true"|' $HOME/.entangled/config/config.tomlsed -i -e 's|^max_num_inbound_peers *=.*|max_num_inbound_peers = "50"|' $HOME/.entangled/config/config.tomlsed -i -e 's|^max_num_outbound_peers *=.*|max_num_outbound_peers = "20"|' $HOME/.entangled/config/config.toml
```

Update ports

```
CUSTOM_PORT=156sed -i -e "s%^proxy_app = \"tcp://127.0.0.1:26658\"%proxy_app = \"tcp://127.0.0.1:${CUSTOM_PORT}58\"%; s%^laddr = \"tcp://127.0.0.1:26657\"%laddr = \"tcp://127.0.0.1:${CUSTOM_PORT}57\"%; s%^pprof_laddr = \"localhost:6060\"%pprof_laddr = \"localhost:${CUSTOM_PORT}60\"%; s%^laddr = \"tcp://0.0.0.0:26656\"%laddr = \"tcp://0.0.0.0:${CUSTOM_PORT}56\"%; s%^prometheus_listen_addr = \":26660\"%prometheus_listen_addr = \":${CUSTOM_PORT}66\"%" $HOME/.entangled/config/config.tomlsed -i -e "s%^address = \"tcp://0.0.0.0:1317\"%address = \"tcp://0.0.0.0:${CUSTOM_PORT}17\"%; s%^address = \":8080\"%address = \":${CUSTOM_PORT}80\"%; s%^address = \"0.0.0.0:9090\"%address = \"0.0.0.0:${CUSTOM_PORT}90\"%; s%^address = \"0.0.0.0:9091\"%address = \"0.0.0.0:${CUSTOM_PORT}91\"%" $HOME/.entangled/config/app.toml
```

Reset chain data

```
entangled tendermint unsafe-reset-all --keep-addr-book --home $HOME/.entangled
```

Delete node

```
sudo systemctl stop entangledsudo systemctl disable entangledsudo rm -rf /etc/systemd/system/entangled.servicesudo systemctl daemon-reloadsudo rm -f $(which entangled)sudo rm -rf $HOME/.entangledsudo rm -rf $HOME/entangle-blockchain
```

#### Service Management <a href="#service-management" id="service-management"></a>

Status service

```
sudo systemctl status entangled
```

Start service

```
sudo systemctl start entangled
```

Stop service

```
sudo systemctl stop entangled
```

Restart service

```
sudo systemctl restart entangled
```

Logs service

```
sudo journalctl -u entangled -f --no-hostname -o cat
```

Reload service

```
sudo systemctl daemon-reload
```

Enable service

```
sudo systemctl enable entangled
```

Disable service

```
sudo systemctl disable entangled
```
