XDC Subnet建ててみる

https://xinfinorg.github.io/xdc-subnet-docs/deployment/launch_subnet

:::note
検証環境
* CPU: 4core
* Memory: 8GB
* Storage: 200GB
* OS: Ubuntu 20.04

:::

# 必要なパッケージのインストール
```shell
sudo apt update
```
```shell
sudo apt-get install apt-transport-https ca-certificates curl git software-properties-common gnupg ufw -y
```

# docker インストール

```shell
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
```
```shell
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
```
```shell
sudo apt-get update
```
```shell
sudo apt-get install docker-ce -y
```

# docker compose インストール
```shell
curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```
```shell
chmod +x /usr/local/bin/docker-compose
```
:::note
dockerのインストールはXinfin-Nodeの```setup.sh```を参照
[GitHub](https://github.com/XinFinOrg/XinFin-Node/blob/master/setup/Setup.sh)
:::

## dockerの権限付与
```shell
sudo usermod -aG docker $USER
```
:::note warn
権限の読み込みのため、一度ログオフして入り直す
:::

# ファイアウォールの設定
:::note
VPSで構築する場合、セットアップ時にWebブラウザから接続するのにポートの開放が必要なため。
ローカルマシン上で実施する場合は、ファイアウォールの設定は不要
:::
:::note warn
ufwを設定する場合、必ずSSHのポートも開けておくこと。（デフォルトは22番）
これをしないと、ログオフしたら2度と接続できない。
:::
```shell
sudo ufw status
```
```Staus: inactive```の場合、ufwを有効化する
```shell
sudo ufw enable
```
```shell
sudo ufw allow 5210
```
```shell:確認
sudo ufw status verbose
```
:::note warn
SSHポートと5210ポートがオープンされていることを確認
:::


# Subnetセットアップ

```shell
curl -O https://raw.githubusercontent.com/XinFinOrg/XinFin-Node/master/subnet/deployment-generator/scripts/generate.sh
```
```shell
chmod +x generate.sh
./generate.sh
cd generated
```

![スクリーンショット 2024-11-14 22.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/0d008740-681c-0611-6715-6194fc96dff5.png)
![スクリーンショット 2024-11-14 22.05.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/4097aeb0-889f-3d98-45e3-9b00a8c54f1c.png)

:::note
セットアップメモ

* ```Operating System```はVPSでLinuxだったとしても```Mac```を選択
Linuxはさらに値の入力が必要になり、Private IP/Public IPともに同じ値を入れてみたところ、後続でエラーになった。もしかするとこの値をちゃんとしてるとイイのかも
![スクリーンショット 2024-11-15 8.34.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/100f5160-171f-3a01-bb56-4b831c2bffde.png)

* ```Parentnet Wallet PK```は下の```Generate Address```にて取得。```Private Key```の値を登録

* Faucetサイトから作成した```Address```に対してXDCを送金する。
Testnet(Apothem) Faucetの場合は、Addressはxdc prefixでなければならないことに注意
:::

```Submit```を押すと
Web画面はこんな感じ
![スクリーンショット 2024-11-14 22.24.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/187e39e7-9930-7da6-bdb6-0d997f2b91aa.png)

## 指示に従いセットアップを続ける
```commands.txt```を見ながら順番にコマンドを実行していく。
```shell
cd generated
cat commands.txt
```
:::note
以下は、```commands.txt```の内容
:::
### 1. Deploy Subnet nodes
```shell
docker compose --env-file docker-compose.env --profile machine1 pull
docker compose --env-file docker-compose.env --profile machine1 up -d
```

### 2. After 60 seconds, confirm the Subnet is running correctly
```shell
./scripts/check-mining.sh
```
![スクリーンショット 2024-11-15 8.37.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/f210067d-a341-2bef-11c6-fd39a98685cd.png)

### 3. Deploy Checkpoint Smart Contract (CSC)
```shell
docker pull xinfinorg/csc:v0.2.1
docker run --env-file contract_deploy.env  --network generated_docker_net  xinfinorg/csc:v0.2.1 full
```
![スクリーンショット 2024-11-15 8.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/37004c3c-288b-a44c-84b3-5afd7b719558.png)
![スクリーンショット 2024-11-15 8.42.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/5d0338ba-e493-3898-c093-b06e4161d44e.png)

### 4. Add CSC configuration to common.env
:::note warn
common.envはrootがオーナーになっているので注意
:::
```shell
sudo nano common.env
```
![スクリーンショット 2024-11-15 8.51.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/09548670-727b-55d8-ba49-242052f245f7.png)

:::note
VPSで建てたので、下記も直しておく。（まずローカルでは接続できないので・・・）
![スクリーンショット 2024-11-15 8.59.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/9590fe5d-a8c2-1129-5e05-364477ae004e.png)
```ufw```でポートもオープン
```shell
sudo ufw allow 5213
sudo ufw allow 8545
```
:::

### 5. Start services (relayer, backend, frontend)
```shell
docker compose --env-file docker-compose.env --profile services pull
docker compose --env-file docker-compose.env --profile services up -d
```

### 6. Confirm Subnet services through browser UI
```
Frontend: http://127.0.0.1:5214
Relayer: http://127.0.0.1:5215
```
:::note 
VPSの場合は、URLは自身のIPに変換してWebブラウザから接続する
:::
```port:5214```
![スクリーンショット 2024-11-15 9.15.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/8a15e12c-ef0f-26f5-5fd3-073aed34dbfd.png)
```port:5215```
![スクリーンショット 2024-11-15 9.19.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/8eb489c2-3c9e-2cd2-3ca9-a43c4966b8c1.png)

## 停止
```
docker compose --env-file docker-compose.env --profile services down 
docker compose --env-file docker-compose.env --profile machine1 down
```

# ログのローテーション設定をしておく
:::note
ログがやばそうなので念の為
他にもログが出てるかもしれないので、順次アップデート
:::
```shell
sudo nano /etc/logrotate.d/xdcsubnet-logs
```
```:/etc/logrotate.d/xdcsubnet-logs
/home/Doraemon/XDCSubnet/generated/stats-service/logs/*/*.log
/home/Doraemon/XDCSubnet/generated/xdcchain*/xdc.log
        {
            size 100M
            rotate 10
            copytruncate
            daily
            missingok
            notifempty
            compress
            delaycompress
            sharedscripts
            postrotate
                    invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true
            endscript
        }
```
```shell:ログローテーション実行
sudo /usr/sbin/logrotate -f /etc/logrotate.d/xdcsubnet-logs 
```

# Management
```port:5214```

![スクリーンショット 2024-11-15 16.16.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/19b5fdfd-b24e-ae0f-d574-4894aea0e7ac.png)
```grandmaster```で接続すると何か起きるらしい

:::note
```grandmaster```の情報はここにある
```
subnetを構築したディレクトリ
 └ generated/
    └ keys.json  ←これ！
```
```
cat keys.json
```
![スクリーンショット 2024-11-15 16.23.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/89b97d75-d31c-d160-9964-a1ddaa6a53a3.png)
:::

```Metamask```にインポートし、接続してみる

![スクリーンショット 2024-11-15 16.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/035e67ab-3fd8-24ea-fc74-2e78d34afc8d.png)
![スクリーンショット 2024-11-15 20.11.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/311eadb2-0d1e-8ce9-dffb-4f57bcc71048.png)
いろいろ出てきた。
これからゆっくり情報収集。

# Faucet Server
Subnetを利用するためのトークンを付与できる

## 実行
:::note
カレントディレクトリは```generated/```であることに注意してください。
:::
```shell
./scripts/faucet-server.sh
```
![スクリーンショット 2024-11-16 20.40.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/56e8396e-f92b-13d5-bd9b-7837bfa8b235.png)

:::note warn
port開けなくてもいけちゃうなぁ・・・
:::

:::note alert
送金に失敗しました。
![スクリーンショット 2024-11-16 20.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/eb0505af-ece1-347e-eb74-4b3825b05647.png)
原因はRPCno接続に失敗。
URLがローカルIPアドレスになっているのがダメっぽい？
プログラムを見ると、```common.env```を見てるみたいなので、編集する。
```
sudo nano common.env
```
![スクリーンショット 2024-11-16 20.55.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/da249577-f981-dc44-80df-880f096bb4af.png)

faucet用のdockerが上がったままになっているので、停止
![スクリーンショット 2024-11-16 21.04.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/e51ca4c6-9cec-34c0-b82a-507a831d4bac.png)
```shell
docker stop <CONTAINER ID>
```
```shell:新しいSUBNET_URLで再実行
./scripts/faucet-server.sh
```
![スクリーンショット 2024-11-16 21.09.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/e9b72cca-fe71-ade3-67d2-70bd0ed8b585.png)
成功しました。
:::
:::note warn
止め方がよくわからない。。。
とりあえず、```CTRL+C```を３回で止めます。
dockerコンテナが残ったままなので、次の起動に影響あるので止めておきます。
```
docker ps
```
```CONTAINER ID```を確認して
```
docker stop <CONTAINER ID>
```
:::

Metamaskで自分のネットワークのRPCでインポートするとちゃんと送金されていました。
![スクリーンショット 2024-11-16 21.29.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/a8949480-0cb4-3381-92b8-d78b756a900e.png)



# Blockchain Explorer
## 必要なパッケージをインストール
```shell
sudo apt install docker-compose
```

```shell
git clone https://github.com/web3labs/chainlens-free
```

```shell
cd chainlens-free/docker-compose
docker-compose pull
```
:::note
ここの例では```PORT```8599でサービスをオープンする例
:::
## UFWでポートオープン
```shell
sudo ufw allow 8599
```

## 実行
```shell
NODE_ENDPOINT=http://<IP_ADDRESS>:8545 PORT=8599 docker-compose up -d
```

Webブラウザから```http://<IP_ADDRESS>:8599```に接続
![スクリーンショット 2024-11-16 18.46.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/22f2a5f7-40a3-33a6-1ac0-9d393eab2c8a.png)

しばらくして画面を更新すると
![スクリーンショット 2024-11-16 18.49.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/c2a5b3f6-25f7-a405-b784-19261311d087.png)
![スクリーンショット 2024-11-16 18.51.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/726ce010-587b-8053-bf2a-00ca947378a9.png)

自分のSubnetのBlockchain Explorerができるそうです。

:::note
先ほどfaucetで送金したトランザクションも表示されました。（更新はちょっと遅い）
![スクリーンショット 2024-11-16 21.34.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/2813cca4-e0dd-150e-6f3c-8e63cd99aa97.png)
![スクリーンショット 2024-11-16 21.36.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/fac21d59-ea0a-2462-34d4-816446613b8a.png)

:::

## 停止

```shell:一覧
docker-compose ps
```
![スクリーンショット 2024-11-16 18.56.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/40f65bcd-2bc3-ca13-68aa-9f9d2323282e.png)

```shell:停止
docker-compose down
```
![スクリーンショット 2024-11-16 18.59.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/74ffb14d-4936-1861-d9fb-47e992358c6f.png)

# SubSwap
https://subswap-frontend-eta.vercel.app/bridge

![スクリーンショット 2024-11-20 20.46.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/91c21a44-bf46-db0c-0d87-1396bf7b94c4.png)

:::note warn
RPC URLはhttpsでなければなりません。
![スクリーンショット 2024-11-20 21.07.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/94e94c32-66d0-9482-a2c8-a8760372a4a9.png)
:::

```https```の準備をしたら（だいぶ省略）
![スクリーンショット 2024-11-23 14.38.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/488ece85-7220-27fb-ddd1-dfc874134914.png)
![スクリーンショット 2024-11-23 14.39.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090248/0f4c47c0-c652-42b7-1578-eb081b67904e.png)