> ## Documentation Index
> Fetch the complete documentation index at: https://injectivelabs-mintlify-25e241d4.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ネットワークへの参加

メインネット、テストネット、またはローカル開発ネットワーク上でInjectiveノードをセットアップして同期します。

<Tabs>
  <Tab title="メインネット">
    Injectiveメインネットのchain-idは`injective-1`です。

    <Columns cols={3}>
      <Card title="同期オプション" href="#同期オプション" arrow="true" cta="セクションへ移動" icon="panel-left-close">
        スナップショット復元、state sync、block sync
      </Card>

      <Card title="ノードソフトウェア" href="#ノードソフトウェア" arrow="true" cta="セクションへ移動" icon="panel-left-close">
        injectivedのインストール、設定、実行
      </Card>

      <Card title="ハードウェア" href="#ハードウェア" arrow="true" cta="セクションへ移動" icon="panel-left-close">
        最小および推奨仕様
      </Card>
    </Columns>

    ***

    ### 同期オプション

    ノードにチェーンデータをブートストラップする方法を選択します。ほとんどのオペレーターにとって、スナップショット復元がノードを稼働させる最速の方法です。

    **オプション1. スナップショット復元（推奨）**

    事前に構築されたスナップショットをダウンロードし、データディレクトリに展開します。これは新しいノードを同期する最も高速で信頼性の高い方法です。

    Injectiveは公式のプルーニング済みスナップショット（goleveldb、約2〜3 GB）を提供しており、コミュニティも追加の選択肢を管理しています。ダウンロードリンク、使用手順、コミュニティプロバイダーについては、[Chain Portalのスナップショットページ](https://portal.injective.network/snapshots)を参照してください。

    <Callout icon="warning" color="#FFA500" iconType="regular">
      **バリデーター：** スナップショット復旧の際には、`priv_validator_state.json`のバックアップと復元が必須です。完全な手順については、[バリデーターのトラブルシューティングガイド](/jp/infra/coordinated-upgrades#スナップショットからの復旧)を参照してください。
    </Callout>

    ```bash theme={null}
    # Example: download and extract
    sudo systemctl stop injectived
    rm -rf ~/.injectived/data
    wget -O snapshot.lz4 <SNAPSHOT_URL>
    lz4 -d snapshot.lz4 | tar xf - -C ~/.injectived/
    sudo systemctl start injectived
    ```

    **オプション2. State Sync（CometBFT P2P）**

    State syncは、すべての過去のブロックをリプレイする代わりに、CometBFT P2Pレイヤーを介してピアからステートマシンのスナップショットをダウンロードすることでノードをブートストラップします。信頼できる2つのRPCサーバーが必要です。利用可能なエンドポイントについては、[Chain PortalのRPCプロバイダーページ](https://portal.injective.network/rpcs)を参照してください。`config.toml`の`[statesync]`で設定します：

    ```toml theme={null}
    [statesync]
    enable = true
    rpc_servers = "<rpc_server_1>,<rpc_server_2>"
    trust_height = <recent_height>
    trust_hash = "<block_hash_at_trust_height>"
    trust_period = "168h0m0s"
    ```

    trust heightとhashを取得するには：

    ```bash theme={null}
    # Get a recent height and its hash from a trusted RPC
    LATEST=$(curl -s https://sentry.tm.injective.network/block | jq -r '.result.block.header.height')
    TRUST_HEIGHT=$((LATEST - 2000))
    TRUST_HASH=$(curl -s "https://sentry.tm.injective.network/block?height=$TRUST_HEIGHT" | jq -r '.result.block_id.hash')
    echo "trust_height = $TRUST_HEIGHT"
    echo "trust_hash = \"$TRUST_HASH\""
    ```

    <Warning>
      **State syncは`wasm/`ディレクトリを復元しません。** CometBFTのstate syncはIAVLのstateツリーを復元しますが、`~/.injectived/data/wasm/`に保存されているCosmWasmのコンパイル済みコントラクトバイトコードは復元しません。これらのファイルがないと、同期完了直後にノードは**AppHashの不一致**を引き起こします。

      これに遭遇した場合は、以下のいずれかを行ってください：

      1. **スナップショット復元**（オプション1）に切り替える。Injectiveの公式スナップショットには`wasm/`ディレクトリが含まれています
      2. 信頼できるソースから`wasm/`ディレクトリを入手し、ノードを起動する前に`~/.injectived/data/wasm/`に配置する

      **PebbleDBユーザー：** Injectiveの公式スナップショットはgoleveldbのみを使用しています。PebbleDBのスナップショットは維持されていません。PebbleDBを実行していてスナップショット復元が使用できない場合、state syncを使用する際には`wasm/`ディレクトリを別途入手する必要があります。
    </Warning>

    **オプション3. Block Sync（完全リプレイ）**

    デフォルトの動作です。ノードはピアからすべてのブロックをダウンロードしてリプレイします。最も時間がかかる方法ですが、外部スナップショットは不要です。最近のスナップショット高から同期する場合を除き、メインネットでは実用的ではありません。

    **同期方法の比較：**

    | 方法             | 速度     | wasmを含むか？                              | 備考                             |
    | -------------- | ------ | -------------------------------------- | ------------------------------ |
    | **スナップショット復元** | 高速（数分） | はい（公式スナップショット）                         | ほとんどのオペレーターに推奨                 |
    | **State Sync** | 高速（数分） | **いいえ** - wasmを手動で復元しないとAppHashの不一致が発生 | `config.toml`の`[statesync]`で設定 |
    | **Block Sync** | 低速（数日） | 該当なし（実行により構築）                          | デフォルト、genesisからのメインネット同期には非実用的 |

    #### ピアディスカバリー

    ノードがネットワークと同期するにはピアが必要です。`~/.injectived/config/config.toml`の`[p2p]`セクションにシードまたはpersistent peersを追加してください。コミュニティプロバイダーが最新のシードおよびピアリストを管理しています：

    * [Polkachu Injective Seeds](https://polkachu.com/seeds/injective)
    * [Decentrio Injective Infrastructure](https://decentrio.ventures/infrastructure/injective)（シード、ピア、アドレスブック）

    より高速なピアディスカバリーのために、事前構築されたアドレスブックをダウンロードすることもできます：

    ```bash theme={null}
    # Decentrio address book
    wget -O ~/.injectived/config/addrbook.json \
      https://backend.decentrio.ventures/snapshots/injective/addrbook.json
    ```

    ***

    ### ノードソフトウェア

    #### `injectived`のインストール

    各[Injective coreリリース](https://github.com/InjectiveFoundation/injective-core/releases/latest)には、`injectived`、[`peggo`](/infra/validator-mainnet/peggo)（Peggyブリッジオーケストレーター）、`libwasmvm`が1つのzipに含まれています。バリデーターはノードと並行して`peggo`を実行する必要があります。非バリデーターノードオペレーターに必要なのは`injectived`のみです。

    ```bash theme={null}
    # Download the latest release
    wget https://github.com/InjectiveFoundation/injective-core/releases/latest/download/linux-amd64.zip
    unzip linux-amd64.zip
    sudo mv injectived /usr/bin
    sudo mv libwasmvm.x86_64.so /usr/lib

    # Validators also need peggo
    sudo mv peggo /usr/bin
    ```

    #### 新しいInjectiveノードの初期化

    Injectiveノードを実行する前に、チェーンとgenesisファイルを初期化します：

    ```bash theme={null}
    # <moniker>引数はノードのカスタムユーザー名です。人間が読める形式にしてください。
    export MONIKER=<moniker>
    injectived init $MONIKER --chain-id injective-1
    ```

    `init`コマンドを実行すると、`~/.injectived`に`injectived`のデフォルト設定ファイルが作成されます。

    #### メインネットに参加するための設定の準備

    メインネットのgenesisファイルをダウンロードします。Injectiveは公式スナップショットと併せてこれを提供しています：

    ```bash theme={null}
    # メインネットのgenesisファイルをダウンロード
    wget -O ~/.injectived/config/genesis.json \
      http://injective-mainnet-snapshots.s3-website.gra.io.cloud.ovh.net/genesis.json
    ```

    チェックサムを検証します：

    ```bash theme={null}
    sha256sum ~/.injectived/config/genesis.json
    # Expected: 573b89727e42b41d43156cd6605c0c8ad4a1ce16d9aad1e1604b02864015d528
    ```

    ピアディスカバリー用のシードを設定し（同期オプションセクションの[ピアディスカバリー](#ピアディスカバリー)を参照）、`~/.injectived/config/config.toml`で`timeout_commit`を`300ms`に設定してください。

    #### `app.toml`と`config.toml`を使用したノードの設定

    2つの設定ファイルが`~/.injectived/config`内に自動生成されます：

    * `config.toml`: コンセンサスレイヤー（CometBFT）を設定します。[詳細はコンセンサスレイヤーのドキュメントを参照してください](https://docs.cometbft.com/v0.38/core/configuration)。
    * `app.toml`: stateプルーニング戦略、テレメトリ、gRPCおよびRESTサーバーの設定、state syncなど、ノードのアプリケーションおよび実行レイヤーを設定します。

    #### `injectived`用の`systemd`サービスの設定（オプション）

    `/etc/systemd/system/injectived.service`の設定を編集します：

    ```bash theme={null}
    [Unit]
      Description=injectived

    [Service]
      WorkingDirectory=/usr/bin
      ExecStart=/bin/bash -c '/usr/bin/injectived --log-level=error start'
      Type=simple
      Restart=always
      RestartSec=5
      User=root

    [Install]
      WantedBy=multi-user.target
    ```

    systemdサービスの起動と再起動：

    ```bash theme={null}
    sudo systemctl daemon-reload
    sudo systemctl restart injectived
    sudo systemctl status injectived

    # システム起動時の自動起動を有効にする
    sudo systemctl enable injectived

    # ログを確認する場合
    journalctl -u injectived -f
    ```

    スナップショットデータを正しいディレクトリにロードする前にサービスを停止し、ロード後に開始する必要があります。

    ```bash theme={null}
    # ノードを停止する
    sudo systemctl stop injectived

    # ノードを起動する
    sudo systemctl start injectived
    ```

    ***

    ### ハードウェア

    ノードオペレーターは、最適なパフォーマンスを達成するためにベアメタルサーバーにデプロイすることを推奨します。バリデーターノードは、高いアップタイムを確保するために、推奨されるハードウェア仕様、特にCPU要件を満たす必要があります。

    |       *最小要件*      |        *推奨*       |
    | :---------------: | :---------------: |
    |    RAMメモリ 128GB   |    RAMメモリ 128GB   |
    |      CPU 12コア     |      CPU 16コア     |
    | CPUベースクロック 3.7GHz | CPUベースクロック 4.2GHz |
    |   ストレージ 2TB NVMe  |   ストレージ 2TB NVMe  |
    |   ネットワーク 1Gbps+   |   ネットワーク 1Gbps+   |

    ***

    **サポート**

    ご質問がある場合は、[Discord](https://discord.gg/injective)、[Telegram](https://t.me/joininjective)、または[メール](mailto:contact@injectivelabs.org)でInjectiveチームに連絡できます。
  </Tab>

  <Tab title="テストネット">
    #### ハードウェア仕様

    ノードオペレーターは、最適なパフォーマンスを達成するためにベアメタルサーバーにデプロイすることを推奨します。また、バリデーターノードは推奨されるハードウェア仕様、特にCPU要件を満たし、高いアップタイムを確保する必要があります。

    |       *最小要件*      |        *推奨*       |
    | :---------------: | :---------------: |
    |    RAMメモリ 128GB   |    RAMメモリ 128GB   |
    |      CPU 12コア     |      CPU 16コア     |
    | CPUベースクロック 3.7GHz | CPUベースクロック 4.2GHz |
    |   ストレージ 2TB NVMe  |   ストレージ 2TB NVMe  |
    |   ネットワーク 1Gbps+   |   ネットワーク 1Gbps+   |

    #### `injectived`と`peggo`のインストール

    最新のリリースについては[Injective releases repo](https://github.com/InjectiveLabs/testnet/releases)を参照してください。非バリデーターノードオペレーターは`peggo`をインストールする必要はありません。

    ```bash theme={null}
    wget https://github.com/InjectiveLabs/testnet/releases/latest/download/linux-amd64.zip
    unzip linux-amd64.zip
    sudo mv peggo /usr/bin
    sudo mv injectived /usr/bin
    sudo mv libwasmvm.x86_64.so /usr/lib 
    ```

    #### 新しいInjectiveチェーンノードの初期化

    Injectiveノードを実行する前に、チェーンとノードのgenesisファイルを初期化する必要があります：

    ```bash theme={null}
    # <moniker>引数はノードのカスタムユーザー名です。人間が読める形式にしてください。
    export MONIKER=<moniker>
    # Injectiveテストネットのchain-idは"injective-888"です
    injectived init $MONIKER --chain-id injective-888
    ```

    `init`コマンドを実行すると、`~/.injectived`に`injectived`のデフォルト設定ファイルが作成されます。

    #### テストネットに参加するための設定の準備

    テストネットのgenesisファイルとアプリケーション設定ファイルでデフォルト設定を更新し、シードノードでpersistent peersを設定する必要があります。

    ```bash theme={null}
    git clone https://github.com/InjectiveLabs/testnet.git

    # genesisファイルを設定ディレクトリにコピー
    aws s3 cp --no-sign-request s3://injective-snapshots/testnet/genesis.json .
    mv genesis.json ~/.injectived/config/

    # 設定ファイルを設定ディレクトリにコピー
    cp testnet/corfu/70001/app.toml  ~/.injectived/config/app.toml
    cp testnet/corfu/70001/config.toml ~/.injectived/config/config.toml
    ```

    genesisのチェックサムを検証することもできます - a4abe4e1f5511d4c2f821c1c05ecb44b493eec185c0eec13b1dcd03d36e1a779

    ```bash theme={null}
    sha256sum ~/.injectived/config/genesis.json
    ```

    #### `injectived`用の`systemd`サービスの設定

    `/etc/systemd/system/injectived.service`の設定を編集します：

    ```bash theme={null}
    [Unit]
      Description=injectived

    [Service]
      WorkingDirectory=/usr/bin
      ExecStart=/bin/bash -c '/usr/bin/injectived --log-level=error start'
      Type=simple
      Restart=always
      RestartSec=5
      User=root

    [Install]
      WantedBy=multi-user.target
    ```

    systemdサービスの起動と再起動

    ```bash theme={null}
    sudo systemctl daemon-reload
    sudo systemctl restart injectived
    sudo systemctl status injectived

    # システム起動時の自動起動を有効にする
    sudo systemctl enable injectived

    # ログを確認する場合
    journalctl -u injectived -f
    ```

    #### ネットワークとの同期

    スナップショットをダウンロードしてネットワークと同期するには、[Polkachu Injective Testnet Node Snapshot](https://polkachu.com/testnets/injective/snapshots)を参照してください。

    **サポート**

    ご質問がある場合は、[Discord](https://discord.gg/injective)、[Telegram](https://t.me/joininjective)、または[メール](mailto:contact@injectivelabs.org)でInjectiveチームに連絡できます。
  </Tab>

  <Tab title="ローカルネットワーク">
    ローカルノードを簡単にセットアップするには、[injective-core](https://github.com/InjectiveFoundation/injective-core)リポジトリから`setup.sh`スクリプトをダウンロードして実行します。インストール済みの`injectived`のバージョンに一致するバージョンのスクリプトを使用してください。

    ```bash theme={null}
    # バージョンタグは、お使いのinjectivedバイナリに一致するものに置き換えてください
    # 例えば、v1.18.3用のスクリプトを使用する場合：
    wget https://raw.githubusercontent.com/InjectiveFoundation/injective-core/v1.18.3/setup.sh
    chmod +x ./setup.sh # スクリプトを実行可能にする
    ./setup.sh
    ```

    <Callout icon="warning" color="#FFA500" iconType="regular">
      レガシーの[injective-chain-releases](https://github.com/InjectiveLabs/injective-chain-releases)リポジトリにある`setup.sh`スクリプトは古く、`injectived` v1.14.1以前とのみ互換性があります。常に、お使いのチェーンバージョンに対応する[InjectiveFoundation/injective-core](https://github.com/InjectiveFoundation/injective-core)リポジトリのスクリプトを使用してください。
    </Callout>

    以下のコマンドでノードを起動します：

    ```bash theme={null}
    injectived start # このコマンドの実行後、ブロックの生成が開始されます
    ```

    スクリプトの動作の詳細説明やセットアッププロセスをより細かく制御したい場合は、以下を参照してください。

    #### チェーンの初期化

    Injectiveノードを実行する前に、チェーンとノードのgenesisファイルを初期化する必要があります：

    ```bash theme={null}
    # <moniker>引数はノードのカスタムユーザー名です。人間が読める形式にしてください。
    injectived init <moniker> --chain-id=injective-1
    ```

    上記のコマンドにより、ノードの実行に必要なすべての設定ファイルとデフォルトのgenesisファイルが作成されます。genesisファイルはネットワークの初期状態を定義します。すべての設定ファイルはデフォルトで`~/.injectived`にありますが、`--home`フラグを渡すことでこのフォルダの場所を上書きできます。`~/.injectived`以外のディレクトリを使用する場合は、`injectived`コマンドを実行するたびに`--home`フラグで場所を指定する必要があります。既存のgenesisファイルがある場合は、`--overwrite`または`-o`フラグで上書きできます。

    `~/.injectived`フォルダは以下の構造を持ちます：

    ```bash theme={null}
    .                                   # ~/.injectived
      |- data                           # ノードが使用するデータベースを含みます。
      |- config/
          |- app.toml                   # アプリケーション関連の設定ファイル。
          |- config.toml                # Tendermint関連の設定ファイル。
          |- genesis.json               # genesisファイル。
          |- node_key.json              # p2pプロトコルでのノード認証に使用する秘密鍵。
          |- priv_validator_key.json    # コンセンサスプロトコルでバリデーターとして使用する秘密鍵。
    ```

    #### `genesis.json`ファイルの修正

    この時点で、`genesis.json`ファイルの修正が必要です：

    * stakingの`bond_denom`、crisisの`denom`、govの`denom`、mintの`denom`の値を`"inj"`に変更します。これはInjectiveのネイティブトークンです。

    以下のコマンドを実行することで簡単に変更できます：

    ```bash theme={null}
    cat $HOME/.injectived/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json
    cat $HOME/.injectived/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json
    cat $HOME/.injectived/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json
    cat $HOME/.injectived/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json
    ```

    <Callout icon="info" color="#07C1FF" iconType="regular">
      上記のコマンドは、デフォルトの`.injectived`ディレクトリを使用している場合にのみ動作します。特定のディレクトリの場合は、上記のコマンドを修正するか、`genesis.json`ファイルを手動で編集して変更を反映してください。
    </Callout>

    #### バリデーターアカウントのキーの作成

    チェーンを開始する前に、少なくとも1つのアカウントでstateを初期化する必要があります。そのためには、まず`test` keyringバックエンドで`my_validator`という名前の新しいアカウントをkeyringに作成します（別の名前や別のバックエンドを選択しても構いません）：

    ```bash theme={null}
    injectived keys add my_validator --keyring-backend=test

    # 生成されたアドレスを後で使用するために変数に格納します。
    MY_VALIDATOR_ADDRESS=$(injectived keys show my_validator -a --keyring-backend=test)
    ```

    ローカルアカウントを作成したら、チェーンのgenesisファイルでそのアカウントに`inj`トークンを付与します。これにより、チェーンのgenesis時点からこのアカウントの存在がチェーンに認識されます：

    ```bash theme={null}
    injectived add-genesis-account $MY_VALIDATOR_ADDRESS 100000000000000000000000000inj --chain-id=injective-1
    ```

    `$MY_VALIDATOR_ADDRESS`は、keyring内の`my_validator`キーのアドレスを保持する変数です。Injectiveのトークンは`{amount}{denom}`形式です：`amount`は18桁精度の10進数で、`denom`はdenomination key付きの一意のトークン識別子（例：`inj`）です。ここでは`inj`トークンを付与しています。`inj`は`injectived`でstakingに使用されるトークン識別子です。

    #### チェーンへのバリデーターの追加

    アカウントにトークンが付与されたら、チェーンにバリデーターを追加する必要があります。バリデーターは、チェーンに新しいブロックを追加するためにコンセンサスプロセスに参加する特別なフルノードです。任意のアカウントがバリデーターオペレーターになる意向を宣言できますが、十分なdelegationを持つアカウントのみがアクティブセットに入ることができます。このガイドでは、上記の`init`コマンドで作成したローカルノードをチェーンのバリデーターとして追加します。バリデーターは、`gentx`と呼ばれるgenesisファイルに含まれる特別なトランザクションを通じて、チェーンの最初の起動前に宣言できます：

    ```bash theme={null}
    # gentxを作成します。
    injectived genesis gentx my_validator 1000000000000000000000inj --chain-id=injective-1 --keyring-backend=test

    # gentxをgenesisファイルに追加します。
    injectived genesis collect-gentxs
    ```

    `gentx`は以下の3つのことを行います：

    1. 作成した`validator`アカウントをバリデーターオペレーターアカウント（バリデーターを制御するアカウント）として登録します。
    2. 指定された`amount`のstakingトークンをセルフデリゲートします。
    3. オペレーターアカウントを、ブロックの署名に使用されるTendermintノードのpubkeyにリンクします。`--pubkey`フラグが指定されていない場合、上記の`injectived init`コマンドで作成されたローカルノードのpubkeyがデフォルトで使用されます。

    `gentx`の詳細については、以下のコマンドを使用してください：

    ```bash theme={null}
    injectived genesis gentx --help
    ```

    #### `app.toml`と`config.toml`を使用したノードの設定

    2つの設定ファイルが`~/.injectived/config`内に自動生成されます：

    * `config.toml`: Tendermintの設定に使用されます（詳細は[Tendermintのドキュメント](https://docs.tendermint.com/v0.34/tendermint-core/configuration.html)を参照）。
    * `app.toml`: Cosmos SDK（Injectiveの基盤）によって生成され、stateプルーニング戦略、テレメトリ、gRPCおよびRESTサーバーの設定、state sync等の設定に使用されます。

    両ファイルには詳細なコメントが記載されています。ノードの調整については直接ファイルを参照してください。

    調整する設定の一例として、`app.toml`内の`minimum-gas-prices`フィールドがあります。これは、バリデーターノードがトランザクションの処理に受け入れる最低ガス価格を定義します。空の場合は、何らかの値（例：`10inj`）を設定してください。そうしないとノードは起動時に停止します。このチュートリアルでは、最低ガス価格を0に設定します：

    ```toml theme={null}
     # バリデーターがトランザクションの処理に受け入れる最低ガス価格。
     # トランザクションの手数料は、この設定で指定された任意のdenominationの
     # 最低額を満たす必要があります（例：0.25token1;0.0001token2）。
     minimum-gas-prices = "0inj"
    ```

    #### Localnetの実行

    すべてのセットアップが完了したら、ノードを起動できます：

    ```bash theme={null}
    injectived start # このコマンドの実行後、ブロックの生成が開始されます
    ```

    このコマンドでは単一のノードを実行できます。チェーンとの対話には十分ですが、複数のノードを同時に実行してコンセンサスの動作を確認することもできます。
  </Tab>
</Tabs>
