diff --git a/pokt-network/README.md b/pokt-network/README.md new file mode 100644 index 00000000..f3db7bfe --- /dev/null +++ b/pokt-network/README.md @@ -0,0 +1,131 @@ +# POKT Network node on Akash Network + +- [Resources](#resources) +- [Развертка ноды POKT Network на Akash Network](#развертка-ноды-pokt-network-на-akash-network) + - [Ресурсы](#ресурсы) + + + +Fill in the variables in the [SDL file](/pokt_network/deploy.yml): + +| Variable | Description | +| :--------------: | :-------------------------------------------------------------------------------------------------------------------------: | +| `SSH_PASS` | Password to connect to the node via SSH (root user). | +| `VERSION` | Set actual version POKT Network. | +| `CHAIN` | Set POKT chain, **mainnet** or **testnet**. | +| `KEYFILE_BASE64` | Encrypted contents of the keyfile.json file using BASE64. | +| `KEY_PASS` | Password to keyfile.json. | +| `ADDRESS` | Account address. | +| `CHAINS_LINK` | Link to download chains.json file, or use CHAINS_BASE64 to transfer the contents of the chains.json file in encrypted form. | +| `SEEDS` | Set seeds [address](https://docs.pokt.network/node/seeds/) . | + +## Resources + +- If you want use **ephimeral** storage (_WARNING! Data will be lost when the container is restarted!_): + +```yaml +profiles: + compute: + app: + resources: + cpu: + units: 4.0 + memory: + size: 24Gi + storage: + size: 500Gi +``` + +- If you want use **persistens** storage: + +1. Uncomment in `app` section: + +```yaml +params: + storage: + data: + mount: /root/ +``` + +2. Uncomment in `profiles` section: + +```yaml +profiles: + compute: + app: + resources: + cpu: + units: 4.0 + memory: + size: 16Gi + storage: + size: 10Gi + - name: data + size: 500Gi + attributes: + persistent: true + class: beta3 +``` + +## Развертка ноды POKT Network на Akash Network + +Заполните переменные в [SDL файле](/pokt_network/deploy.yml): + +| Переменная | Описание | +| :--------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| `SSH_PASS` | Пароль, для подключения к контейнеру по протоколу SSH (пользователь root). | +| `VERSION` | Установите актуальную версию POKT Network. | +| `CHAIN` | Установите нужную цепочку, **mainnet** или **testnet**. | +| `KEYFILE_BASE64` | Зашифрованное содержимое файла keyfile.json с помощью BASE64. | +| `KEY_PASS` | Пароль от keyfile.json. | +| `ADDRESS` | Адрес аккаунта. | +| `CHAINS_LINK` | Ссылка для скачивания файла chains.json file, или используйте CHAINS_BASE64 для доставки содержимого chains.json внутрь контейнера в зашифрованном ввиде с помощью BASE64 . | +| `SEEDS` | Установите перечени SEED нод, [доступно на сайте](https://docs.pokt.network/node/seeds/). | + +### Ресурсы + +- Если вы хотите использовать **эфимерное** хранилище (_ПРЕДУПРЕЖДЕНИЕ! При перезагрузке контейнера данные будут сброщшены!_): + +```yaml +profiles: + compute: + app: + resources: + cpu: + units: 8 + memory: + size: 24Gi + storage: + - size: 300Gi +``` + +- Если вы хотите использовать **постоянное** хранилище: + +1. Раскомментируйте в секции `app`: + +```yaml +params: + storage: + data: + mount: /root/ +``` + +2. Раскомментируйте в секции `profiles`: + +```yaml +profiles: + compute: + app: + resources: + cpu: + units: 4.0 + memory: + size: 24Gi + storage: + size: 10Gi + - name: data + size: 500Gi + attributes: + persistent: true + class: beta3 +``` diff --git a/pokt-network/deploy.yml b/pokt-network/deploy.yml new file mode 100644 index 00000000..26daf179 --- /dev/null +++ b/pokt-network/deploy.yml @@ -0,0 +1,56 @@ +--- +version: "2.0" +services: + app: + image: ubuntu:22.04 + env: + - "SSH_PASS=" # If you need SSH access to the container(user root), set this variable; + - "VERSION=RC-0.10.4" # Set actual version POKT; + - "CHAIN=" #Set POKT chain, mainnet or testnet; + - "KEYFILE_BASE64=" # Encrypted contents of the keyfile.json file using BASE64; + - "KEY_PASS=" # Password to keyfile.json; + - "ADDRESS=" # Account address; + - "CHAINS_LINK=" # Link to download chains.json file, or use CHAINS_BASE64 to transfer the contents of the chains.json file in encrypted form; + - "SEEDS=7c0d7ec36db6594c1ffaa99724e1f8300bbd52d0@seed1.mainnet.pokt.network:26662,cdcf936d70726dd724e0e6a8353d8e5ba5abdd20@seed2.mainnet.pokt.network:26663,74b4322a91c4a7f3e774648d0730c1e610494691@seed3.mainnet.pokt.network:26662,b3235089ff302c9615ba661e13e601d9d6265b15@seed4.mainnet.pokt.network:26663" # Set seeds address https://docs.pokt.network/node/seeds/ ; + command: + - bash + - "-c" + args: # Make sure this gist does not mention a "revision" (hash) of the gist so the next time the container boots it can get newer version of the script. This field is immutable. + - >- + apt-get update && apt-get upgrade -yqq; apt-get install -yqq curl; curl -s + https://raw.githubusercontent.com/akash-network/awesome-akash/master/pokt_network/main.sh | bash + expose: + - port: 8081 + to: + - global: true + as: 80 + # # If you wish to bring your own domain, uncomment the following line and replace the domain name with your own. + # accept: + # - poktonakt.spankpool.com + - port: 26656 + to: + - global: true + - port: 22 + to: + - global: true + profiles: + compute: + pokt-node: + resources: + cpu: + units: 8 + memory: + size: 24Gi + storage: + - size: 300Gi + placement: + akash: + pricing: + pokt-node: + denom: uakt + amount: 10000 + deployment: + pokt-node: + akash: + profile: pokt-node + count: 1 diff --git a/pokt_network/example_chains.json b/pokt-network/example_chains.json similarity index 100% rename from pokt_network/example_chains.json rename to pokt-network/example_chains.json diff --git a/pokt-network/main.sh b/pokt-network/main.sh new file mode 100644 index 00000000..9835e2fd --- /dev/null +++ b/pokt-network/main.sh @@ -0,0 +1,114 @@ +#!/bin/bash +TZ=Europe/London && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +apt-get install -y -qq wget gcc make git nvme-cli nano unzip runit pv aria2 lz4 +runsvdir -P /etc/service & +if [[ -n $SSH_PASS ]] +then +apt-get install -y ssh +echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config && (echo $SSH_PASS; echo $SSH_PASS) | passwd root && service ssh restart +fi + +if ! [ -x "$(command -v go)" ]; then + wget https://go.dev/dl/go1.20.1.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.20.1.linux-amd64.tar.gz + PATH=$PATH:/usr/local/go/bin && echo $PATH + go version && echo 'export PATH='$PATH:/usr/local/go/bin >> /root/.bashrc +fi + +mkdir -p /root/.pocket/config + +if [ ! -d "pocket-core" ]; then + git clone https://github.com/pokt-network/pocket-core.git +fi + +cd pocket-core + +# Fetch all tags from the remote +git fetch --tags + +# If the current checked out tag isn't the specified version, switch to it +CURRENT_TAG=$(git describe --tags) +if [ "$CURRENT_TAG" != "$VERSION" ]; then + git checkout tags/$VERSION + # Build the binary for the new tag + go build -o /usr/bin/pocket /pocket-core/app/cmd/pocket_core/main.go && pocket version +fi + +# ============================= Setting a custom keyfile.json ======================= +if [[ -n $KEYFILE_BASE64 ]] +then +echo $KEYFILE_BASE64 | base64 -d > /tmp/keyfile.json +apt-get install -y expect +cat > /root/import < /root/create_validator < /root/.pocket/config/chains.json +fi +mkdir -p $HOME/.pocket/config + +# This errors due to missing GENESIS_LINK envar, but this doesn't seem to be needed for the mainnet? +curl -o $HOME/.pocket/config/genesis.json $GENESIS_LINK + +echo "== Downloading snapshot ==" + +mkdir -p $HOME/.pocket/data +if [ ! "$(ls -A $HOME/.pocket/data)" ]; then + echo "No data in $HOME/.pocket/data. Downloading..." + latestFile=$(curl https://pocket-snapshot.liquify.com/files/pruned/latest.txt) + echo "Downloading the snapshot" + curl -s "https://pocket-snapshot.liquify.com/files/pruned/$latestFile" | tar xf - -C "$HOME/.pocket" +else + echo "Data exists in $HOME/.pocket/data. Skipping download." +fi + +echo "== Finished Downloading snapshot ==" + +echo "=== Run node ===" +mkdir -p /root/pocket/log +cat > /root/pocket/run <&1 +exec pocket start --simulateRelay --seeds="$SEEDS" --$CHAIN +EOF +mkdir /tmp/log/ +cat > /root/pocket/log/run < /etc/timezone -apt-get install -y wget gcc make git nvme-cli nano unzip runit pv -runsvdir -P /etc/service & -if [[ -n $SSH_PASS ]] -then -apt-get install -y ssh -echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config && (echo $SSH_PASS; echo $SSH_PASS) | passwd root && service ssh restart -fi -wget https://go.dev/dl/go1.20.1.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.20.1.linux-amd64.tar.gz -PATH=$PATH:/usr/local/go/bin && echo $PATH -go version && echo 'export PATH='$PATH:/usr/local/go/bin >> /root/.bashrc -mkdir -p /root/.pocket/config -git clone https://github.com/pokt-network/pocket-core.git && cd pocket-core -git checkout tags/$VERSION && go build -o /usr/bin/pocket /pocket-core/app/cmd/pocket_core/main.go && pocket version -# ============================= Setting a custom keyfile.json ======================= -if [[ -n $KEYFILE_BASE64 ]] -then -echo $KEYFILE_BASE64 | base64 -d > /tmp/keyfile.json -apt-get install -y expect -cat > /root/import < /root/create_validator < /root/.pocket/config/chains.json -fi -mkdir -p $HOME/.pocket/config -curl -o $HOME/.pocket/config/genesis.json $GENESIS_LINK - -if [[ -n $LINK_SNAPSHOT ]] -then -export LINK_SNAPSHOT=$LINK_SNAPSHOT -mkdir -p $HOME/.pocket/data - -SIZE=`wget --spider $LINK_SNAPSHOT 2>&1 | awk '/Length/ {print $2}'` -echo == Download snapshot == -(wget -nv -O - $LINK_SNAPSHOT | pv -petrafb -s $SIZE -i 5 | tar -xz -C $HOME/.pocket/data) 2>&1 | stdbuf -o0 tr '\r' '\n' -fi -echo === Run node === -mkdir -p /root/pocket/log -cat > /root/pocket/run <&1 -exec pocket start --seeds="$SEEDS" --$CHAIN -EOF -mkdir /tmp/log/ -cat > /root/pocket/log/run <