Adapting Plugin Nodes to XDC 2.0: Gas Fee Update Guide

<details><summary>【English】</summary>

<!--(上に空行が必要)-->

# Adapting Plugin Nodes to XDC 2.0: Gas Fee Update Guide

Welcome to the guide for adapting to the latest XDC gas fee changes for Plugin nodes. This guide aims to assist Plugin node operators in updating their node settings to accommodate the impacts of the recent upgrade to XDC version 2.0 on the gas fees required per transaction.

**[How to Update Your Plugin Node for the Latest XDC Gas Fee](https://docs.goplugin.co/plugin-2.0-node-operators/how-to-update-your-plugin-node-for-the-latest-xdc-gas-fee)**

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/bd56b2ad-ae7d-4b4d-43fb-d031ad438762.png)


The above official Plugin documentation details the upgrade steps needed to reflect the new pricing system. This document guides Plugin node operators on how to update their node settings to prevent transactions from being stuck in a pending state due to insufficient gas fees.

Following the official guide, this guide specifically recommends changing the minimum gas price in the `config.toml` file from the default `1 gwei` to `12.5 gwei`. By making this change, you can prevent job failures, ensure smooth transaction processing, and avoid operational disruptions.

Through this guide, we aim to support your node in efficiently meeting the latest network requirements.

Here are the necessary steps to resolve gas-related issues on Plugin nodes:

## Problem
- **Default Gas Price Setting**: The default setting of `[EVM.GasEstimator] PriceMin = '1 gwei'` can lead to 'under min gas' errors, causing jobs to get stuck in an `in_progress` state.
- **Impact on Jobs**: Once an error occurs, subsequent jobs remain in an `unstarted` state, halting processing.

## Solution


### 1. Configuration File Update:
- Update the `config.toml` file to set `[EVM.GasEstimator] PriceMin = '12.5 gwei'` as the minimum gas price. This adjustment prevents insufficient gas errors and ensures that jobs complete successfully.

    :::note warn
    Note: Although `[EVM.GasEstimator] PriceMin = '1 gwei'` is set, transactions can still be executed above the minimum gas cost of `12.5 gwei` for XDC2.0.
    :::

#### 1-1. Navigate to the directory containing the `config.toml` file:
```sh:1-1
cd ~/pluginV2/
```

#### 1-2. Edit the `config.toml` file using `nano`:
- Open the config.toml file with the nano editor
```sh:1-2-1
nano config.toml
```

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/745733aa-f8dc-28a7-711b-099d7e9ad052.png)

- Once the file is open, add the following code to the end of the file:
```toml:1-2-2
[EVM.GasEstimator]
PriceMin = '12.5 gwei'
```

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/9745e560-bb63-14e9-45ac-355e1b0d2704.png)

#### 1-3. Save the `config.toml` file.

:::note
**How to Save in nano**
To save a file edited with nano, follow these steps:

1. Press the `"Ctrl"` and `"X"` keys simultaneously on your keyboard.
1. Press the `"Y"` key to confirm the changes you want to save.
1. Press the `"Enter"` key to exit the editor.
Following these steps will save the changes to the edited file and exit the nano editor.
:::


### 2. System Restart:
- After making the above changes, use PM2, the Node.js process manager, to restart the node. Use the following command:

```bash:2
pm2 restart NodeStartPM2
```
![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/957e73fa-6973-2c49-c4f8-ad0c6b420778.png)



### 3. Verify on the Dashboard
- Log in to the dashboard and check if the node is running correctly and if the `config.toml` has been properly applied. The following command can be useful for logging in to the dashboard:
```sh:3
echo https://$(ip a | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1'):6689 && cat ~/pluginV2/apicredentials.txt 
```
- Once logged in, click the gear icon in the upper right corner, then click on `Configuration`. Next, check that `[EVM.GasEstimator]PriceMin = '12.5 gwei'` is properly reflected in the `TOML Configuration`.

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/1cdd704e-8dee-7525-87b7-c8772089e180.png)

These steps will ensure that jobs are processed properly and the network functions smoothly. After making configuration changes, monitor the system to see how it responds and make further adjustments as necessary.


## Handling Jobs That Get Stuck
If the log shows an `under min gas` error, jobs can get stuck in an `in_progress` state. When this error occurs, subsequent jobs remain in an `unstarted` state, causing processing to halt. In such cases, follow these steps to delete entries from PostgreSQL.

### Database Cleaning:
- Check and delete records from the `eth_txes` table where the `state` is 'unstarted', 'in_progress', or 'unconfirmed'.

- Connect to the `plugin_mainnet_db` database as the `postgres` user using the following command:
```sql:
sudo -i -u postgres psql -d plugin_mainnet_db
```
- The following command can make the output more readable:
`\x auto` is a command to change the display format in `psql`. It enables the "expanded display," which automatically formats wide output to show each field on a new line.
```sql:
\x auto
```

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/76e8edec-3800-26cf-d32e-4c6ce3ae074b.png)

- Next, run the following SQL command to review the records targeted for deletion:
```sql:
SELECT * FROM eth_txes WHERE state IN ('unstarted', 'in_progress', 'unconfirmed');
```
![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/33d23382-fd49-3ca3-5be6-195bd435412e.png)


- After confirming there are no issues, proceed to delete the records with this command:
```sql:
DELETE FROM eth_txes WHERE state IN ('unstarted', 'in_progress', 'unconfirmed');
```
![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/69be08f8-81ae-8c7c-e78f-f35b0acb909a.png)

- To exit the PostgreSQL command-line tool `psql`, you can use one of the following methods:

    - Type the `\q` command and press the Enter key.
    - Press `Ctrl` + `D` simultaneously on your keyboard.

These actions will terminate the `psql` session and return you to the original shell.

#### Author:
- **11ppm**
- **[X](https://x.com/11ppm11)**
Moderator for XDC's native decentralized oracle, Plugin.
Follow on [X](https://x.com/11ppm11) for more updates and insights.

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/d66cf254-730e-12fa-00f9-bc4d2cc84d65.png)

</details>

<details><summary>【日本語】</summary>

<!--(上に空行が必要)-->

# XDC2.0対応:プラグインノード・アップデートガイド

Pluginノードの最新のXDCガス料金の変更に対応するためのガイドにようこそ。このガイドは、XDCの最近のバージョン2.0へのアップグレードがトランザクションごとの必要ガス料金に与える影響に対処し、Pluginノードオペレーターが自身のノード設定を更新する手助けをすることを目的としています。


**[How to Update Your Plugin Node for the Latest XDC Gas Fee](https://docs.goplugin.co/plugin-2.0-node-operators/how-to-update-your-plugin-node-for-the-latest-xdc-gas-fee)**

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/4b923b05-55e3-5305-f276-6d87ffacaff7.png)


上記のPlugin公式のドキュメントには、新しい料金体系を反映させるためのアップグレード手順が詳細に記載されています。このドキュメントは、不十分なガス料金によってトランザクションが保留状態になるのを避けるために、ノード設定をどのように更新するかをPluginノードオペレーターに指南します。

公式ガイドに沿って、本ガイドでは、特に `config.toml` ファイルの最小ガス価格をデフォルトの `1 gwei` から `12.5 gwei` に設定変更することを推奨しています。この変更を行うことで、ジョブの失敗を防ぎ、トランザクション処理をスムーズにし、運用上の中断を回避することができます。

このガイドを通じて、あなたのノードが最新のネットワーク要件に適切に対応し、効率的に運用できるようサポートします。

では、早速Pluginノードのガス関連の問題を解決するために必要なステップを以下に示します：


## 問題
- **デフォルトのガス価格設定**：デフォルトで設定されている `[EVM.GasEstimator] PriceMin = '1 gwei'` が原因で「under min gas」というエラーが発生し、ジョブが `in_progress` 状態で詰まってしまいます。
- **ジョブへの影響**：エラーが発生すると、次以降のジョブが `unstarted` 状態になり、処理が停止します。

## 解決策
### 1. 設定ファイルの変更：
- `config.toml` ファイルに `[EVM.GasEstimator] PriceMin = '12.5 gwei'` と設定を追記し、これを最低ガス価格とします。この設定により、ガスが不足する問題を防ぎ、ジョブが正常に完了できるようになります。

    :::note warn
    メモ：config.tomlに`[EVM.GasEstimator] PriceMin = '1 gwei'` が設定されていても、XDC2.0の最低ガス代である`12.5gwei`以上でトランザクションを実行することが可能です。
    :::

#### 1-1. `config.toml`ファイルがあるディレクトリへ移動します
```sh:1-1
cd ~/pluginV2/
```

#### 1-2. `config.toml`ファイルを`nano`で編集します

- config.tomlファイルをnanoエディタで開きます。
```sh:1-2-1
nano config.toml
```

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/745733aa-f8dc-28a7-711b-099d7e9ad052.png)

- ファイルを開いたら、以下のコードをファイルの末尾に追加します。

```toml:1-2-2
[EVM.GasEstimator]
PriceMin = '12.5 gwei'
```

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/9745e560-bb63-14e9-45ac-355e1b0d2704.png)

#### 1-3. `config.toml`ファイルを保存します

:::note
**nanoで保存する方法**
nano で編集したファイルを保存する方法は、次の手順に従ってください：

1. キーボードで `"Ctrl"` キーと `"X"` キーを同時に押します。
1. キーボードで `"Y"` キーを押して変更を保存することを確認します。
1. キーボードで `"Enter"` キーを押してエディターを終了します。
これらの手順により、編集したファイルの変更が保存され、nanoエディターが終了します。
:::




### 2. システムの再起動：
- 上記の変更を行った後、Node.jsのプロセスマネージャであるPM2を使用してノードを再起動します。使用するコマンドは以下の通りです：
```bash:2
pm2 restart NodeStartPM2
```
![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/329de4cc-bba2-d2fb-0819-1aae48a8a41b.png)

### 3. ダッシュボードで確認
- ダッシュボードにログインして、ノードが正しく起動し、config.tomlが正しく反映されているかを確認します。ダッシュボードにログインするために、以下のコマンドは便利です。
```sh:3
echo https://$(ip a | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1'):6689 && cat ~/pluginV2/apicredentials.txt 
```
- ログインしたら、右上の歯車マークをクリックし、次に`Configration`をクリックします。そして`TOML Configuration`に`[EVM.GasEstimator]PriceMin = '12.5 gwei'`が反映されていることを確認してください。

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/1cdd704e-8dee-7525-87b7-c8772089e180.png)


これらのステップにより、ジョブが適切に処理され、ネットワークがスムーズに機能するようになります。設定変更後は、システムがどのように反応するかを監視し、必要に応じてさらに調整を行ってください。

## ジョブが詰まった場合の対処
ログに`under min gas`というエラーが発生し、ジョブが `in_progress` 状態で詰まってしまいます。エラーが発生すると、次以降のジョブが `unstarted` 状態になり、処理が停止します。その場合、次の手順でPostgreSQLを削除します。

### データベースのクリーニング：
- `eth_txes` テーブルから `state` が 'unstarted'、'in_progress'、または 'unconfirmed' のレコードを確認し、削除します。

- 次のコマンドで、`postgres`ユーザーとして`plugin_mainnet_db`データベースに接続します。
```sql:
sudo -i -u postgres psql -d plugin_mainnet_db
```
- 次のコマンドを実行しておくと見やすくなります。
`\x auto`は`psql`の表示形式を変更するコマンドです。これにより、出力が広い場合に行ごとに分けて表示される「拡張表示」が自動的に有効になります。
```sql:
\x auto
```


![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/76e8edec-3800-26cf-d32e-4c6ce3ae074b.png)


- 次に削除対象のレコードを確認するために以下のSQLコマンドを実行します：
```sql:
SELECT * FROM eth_txes WHERE state IN ('unstarted', 'in_progress', 'unconfirmed');
```

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/5e0412cf-4c24-371f-3dd0-d29cd395b464.png)



- 確認後、問題がなければ以下のコマンドでレコードを削除します：
```sql:
DELETE FROM eth_txes WHERE state IN ('unstarted', 'in_progress', 'unconfirmed');
```
![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/69be08f8-81ae-8c7c-e78f-f35b0acb909a.png)

- PostgreSQLのコマンドラインツール `psql` から抜け出すには、以下のいずれかの方法を使用します：

    - `\q` コマンドを入力してエンターキーを押します
    -  キーボードで `Ctrl` + `D` を同時に押します

これらの操作により、`psql` セッションが終了し、元のシェルに戻ります。


#### 著者:
- **11ppm**
- **[X](https://x.com/11ppm11)**
XDCのネイティブ分散型オラクル、Pluginのモデレーターです。  
最新情報やインサイトについては、[X](https://x.com/11ppm11)でフォローしてください。

![Screenshot by Dropbox Capture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518907/d66cf254-730e-12fa-00f9-bc4d2cc84d65.png)

</details>