> ## Documentation Index
> Fetch the complete documentation index at: https://docs.magicblock.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# ローカルバリデータ設定

> 完全ローカルな Ephemeral Rollup スタック、Surfpool、またはローカル VRF オラクルを使って Native Rust や Anchor のプログラムを実行・テストします。

## なぜローカルセットアップを使うのか？

Solana プログラムの delegation やリアルタイム挙動をテストする際には、**素早いフィードバックループ** が重要です。

**ローカル Ephemeral Rollup Validator** を動かすことで、次のことが可能になります。

* ネットワーク遅延やレート制限なしで delegation や挙動を素早く確認
* Solana runtime の取引をローカルでシミュレート
* 自分の用途に合わせて validator 構成を調整

***

## クイックスタート: ローカル Ephemeral Validator

Anchor と Native Rust の delegation およびテストスクリプトを確認できます。

<CardGroup cols={2}>
  <Card title="Anchor" icon="anchor" href="/jp/pages/get-started/how-integrate-your-program/anchor" iconType="duotone">
    Anchor プログラムと統合する
  </Card>

  <Card title="Native Rust" icon="rust" href="/jp/pages/get-started/how-integrate-your-program/rust" iconType="duotone">
    Native Rust プログラムと統合する
  </Card>
</CardGroup>

## ローカルセットアップの選択肢

Ephemeral Rollups はローカルで次の 3 通りの方法で実行できます。

* `mb-test-validator` をベースレイヤーにし、ローカル `ephemeral-validator` を組み合わせた完全ローカル構成
* ベースレイヤーの代替としてローカル Surfpool を使いつつ、rollup 自体もローカルで動かす構成
* ローカル `ephemeral-validator` を Devnet などの公開ベースレイヤーに直接接続する構成

すべてを自分のマシン上で動かしたいなら完全ローカル構成を使います。Surfpool のワークフローを維持しながらローカル Ephemeral Rollup を試したいなら Surfpool を使います。ローカル Solana validator を起動せずにローカル rollup プロセスだけ使いたいなら Devnet オプションを使います。

### 重要: 正しいバリデータ ID でプログラムをアップグレードする

ローカル ER バリデータを使う場合は、アカウントが委任されるベースレイヤーに接続してください。特定の ER バリデータ ID に PDA を委任するなら、commit と undelegation がベースレイヤーで正しく完了するよう、プログラム内の delegation 設定も更新してください。

<Note>
  <p>
    これらの公開バリデータは開発用として利用できます。委任命令には、
    対象となる ER バリデータを必ず追加してください。
  </p>

  **メインネット**

  <ul>
    <li>
      アジア (as.magicblock.app):{" "}
      <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
    </li>

    <li>
      EU (eu.magicblock.app):{" "}
      <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
    </li>

    <li>
      米国 (us.magicblock.app):{" "}
      <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
    </li>

    <li>
      TEE (mainnet-tee.magicblock.app):{" "}
      <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
    </li>
  </ul>

  **Devnet**

  <ul>
    <li>
      アジア (devnet-as.magicblock.app):{" "}
      <code>MAS1Dt9qreoRMQ14YQuhg8UTZMMzDdKhmkZMECCzk57</code>
    </li>

    <li>
      EU (devnet-eu.magicblock.app):{" "}
      <code>MEUGGrYPxKk17hCr7wpT6s8dtNokZj5U2L57vjYMS8e</code>
    </li>

    <li>
      米国 (devnet-us.magicblock.app):{" "}
      <code>MUS3hc9TCw4cGC12vHNoYcCGzJG1txjgQLZWVoeNHNd</code>
    </li>

    <li>
      TEE (devnet-tee.magicblock.app):{" "}
      <code>MTEWGuqxUpYZGFJQcp8tLN7x5v9BSeoFHYWQQ3n3xzo</code>
    </li>
  </ul>

  **ローカルネット**

  <ul>
    <li>
      ローカル ER (localhost:7799):{" "}
      <code>mAGicPQYBMvcYveUZA5F5UNNwyHvfYh5xkLS2Fr1mev</code>
    </li>
  </ul>
</Note>

<Tabs>
  <Tab title="完全ローカル">
    <Steps>
      <Step title="Ephemeral Validator CLI をインストール">
        ```bash theme={null}
        npm install -g @magicblock-labs/ephemeral-validator@latest
        ```
      </Step>

      <Step title="ローカル Solana ベースレイヤーを起動">
        `mb-test-validator` は完全ローカル構成のベースレイヤーとして使えるローカル Solana validator を起動します。

        ```bash theme={null}
        mb-test-validator --reset
        ```

        この構成では RPC に `http://localhost:8899`、WebSocket に `ws://localhost:8900` を使います。
      </Step>

      <Step title="localhost にプログラムをデプロイまたはアップグレード">
        <Tabs>
          <Tab title="Rust Native">
            ```bash theme={null}
            cargo build-sbf
            solana config set --url localhost
            solana program deploy YOUR_PROGRAM_PATH
            ```
          </Tab>

          <Tab title="Anchor">
            ```bash theme={null}
            anchor build && anchor deploy \
              --provider.cluster localnet
            ```
          </Tab>
        </Tabs>
      </Step>

      <Step title="ローカル ephemeral validator を起動">
        ローカル Ephemeral Rollup をローカル Solana validator に接続します。

        ```bash theme={null}
        ephemeral-validator --remotes "http://localhost:8899" --remotes "ws://localhost:8900" -l "7799" --lifecycle ephemeral
        ```
      </Step>

      <Step title="ローカル rollup に対してテストを実行">
        ローカル rollup は RPC が `http://localhost:7799`、WebSocket が `ws://localhost:7800` で公開されます。

        <Tabs>
          <Tab title="Rust Native">
            ```bash theme={null}
            EPHEMERAL_PROVIDER_ENDPOINT=http://localhost:7799 \
            EPHEMERAL_WS_ENDPOINT=ws://localhost:7800 \
            PROVIDER_ENDPOINT=http://localhost:8899 \
            WS_ENDPOINT=ws://localhost:8900 \
            yarn test
            ```
          </Tab>

          <Tab title="Anchor">
            ```bash theme={null}
            EPHEMERAL_PROVIDER_ENDPOINT="http://localhost:7799" \
            EPHEMERAL_WS_ENDPOINT="ws://localhost:7800" \
            anchor test \
              --provider.cluster localnet \
              --skip-local-validator \
              --skip-build \
              --skip-deploy
            ```
          </Tab>
        </Tabs>
      </Step>
    </Steps>
  </Tab>

  <Tab title="Surfpool">
    <Steps>
      <Step title="Surfpool をインストール">
        ```bash theme={null}
        curl -sL https://run.surfpool.run/ | bash
        ```
      </Step>

      <Step title="Ephemeral Validator CLI をインストール">
        ```bash theme={null}
        npm install -g @magicblock-labs/ephemeral-validator@latest
        ```
      </Step>

      <Step title="Surfpool を起動">
        この例では Surfpool はローカルで動かしつつ、上流のベースレイヤーとして Solana Devnet を使います。

        ```bash theme={null}
        surfpool start --rpc-url https://api.devnet.solana.com
        ```

        Surfpool は ephemeral validator が接続するローカル RPC / WebSocket エンドポイントを提供します。
      </Step>

      <Step title="ephemeral validator を起動">
        validator を Surfpool のローカル RPC / WebSocket エンドポイントに向けます。

        ```bash theme={null}
        ephemeral-validator --remotes "http://localhost:8899" --remotes "ws://localhost:8900" -l "7799" --lifecycle ephemeral
        ```
      </Step>

      <Step title="rollup にテストトランザクションを送る">
        ```bash theme={null}
        solana transfer <your address> 0 -u "http://localhost:7799"
        ```
      </Step>

      <Step title="トランザクションを確認">
        そのトランザクションは ER TUI に表示され、内容を確認したりエクスプローラーで開いたりできます。

        この手順は [Surfpool を使って Ephemeral Rollups をローカルで動かす方法](https://x.com/PiccoGabriele/status/2030045550230524212) をもとにしています。
      </Step>
    </Steps>
  </Tab>

  <Tab title="Devnet">
    <Steps>
      <Step title="Devnet にプログラムをデプロイまたはアップグレード">
        MagicBlock delegation を追加したプログラムを Devnet にデプロイします。

        <Tabs>
          <Tab title="Rust Native">
            ```bash theme={null}
            cargo build-sbf
            solana config set --url devnet
            solana program deploy YOUR_PROGRAM_PATH
            ```
          </Tab>

          <Tab title="Anchor">
            ```bash theme={null}
            anchor build && anchor deploy \
              --provider.cluster devnet
            ```
          </Tab>
        </Tabs>
      </Step>

      <Step title="ローカル ephemeral validator をインストールして実行">
        ```bash theme={null}
        npm install -g @magicblock-labs/ephemeral-validator@latest
        ```

        ```bash theme={null}
        RUST_LOG=info ephemeral-validator \
          --lifecycle ephemeral \
          --remote-url "https://rpc.magicblock.app/devnet" \
          --rpc-port 7799
        ```
      </Step>

      <Step title="ローカル rollup に対してテストを実行">
        <Tabs>
          <Tab title="Rust Native">
            ```bash theme={null}
            EPHEMERAL_PROVIDER_ENDPOINT=http://localhost:7799 \
            EPHEMERAL_WS_ENDPOINT=ws://localhost:7800 \
            yarn test
            ```
          </Tab>

          <Tab title="Anchor">
            ```bash theme={null}
            EPHEMERAL_PROVIDER_ENDPOINT="http://localhost:7799" \
            EPHEMERAL_WS_ENDPOINT="ws://localhost:7800" \
            anchor test \
              --provider.cluster devnet \
              --skip-local-validator \
              --skip-build \
              --skip-deploy
            ```
          </Tab>
        </Tabs>
      </Step>
    </Steps>
  </Tab>
</Tabs>

## ローカルで VRF Oracle を動かす

VRF をエンドツーエンドでテストしたい場合は、ローカルの `vrf-oracle` をローカルテストキューに接続して実行します。

<Steps>
  <Step title="最新の Ephemeral Validator CLI をインストール">
    ```bash theme={null}
    npm install -g @magicblock-labs/ephemeral-validator@latest
    ```
  </Step>

  <Step title="ローカル Solana validator を起動">
    ```bash theme={null}
    mb-test-validator --reset
    ```
  </Step>

  <Step title="ephemeral validator を起動">
    ```bash theme={null}
    ephemeral-validator --remote-url "http://localhost:8899" --rpc-port 7799 --lifecycle ephemeral
    ```
  </Step>

  <Step title="ローカル VRF オラクルを起動">
    このオラクルはリクエストをローカルテストキューに追加します。

    ```bash theme={null}
    VRF_ORACLE_SKIP_PREFLIGHT="true" RPC_URL="http://localhost:8899" WEBSOCKET_URL="ws://localhost:8999" RUST_LOG=info vrf-oracle
    ```

    ローカル validator が別の WebSocket ポートを使う場合は、`WEBSOCKET_URL` を適宜変更してください。
  </Step>
</Steps>
