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

# 解析されたイベントを使用してPump.funトークンミントをフェッチ

> 解析されたイベントでアドレスの履歴をページごとに閲覧し、Pump.funのcreateとcreate_v2の命令を抽出し、クリエイター、名前、シンボル、URIとともにすべてのトークンミントを記録します。

このガイドでは、**ウォレットがPump.funで展開したすべてのトークン**をフェッチします。ウォレットの解析履歴をページングし、Pump.funがトークンをローンチするために使用する2つの指示を選び出し、履歴が尽きるまで続けます。

これは、解析ストリームガイド「[Pump.fun Mintsのトラッキング](/docs/ja/parsed-streams/guides/track-pumpfun-mints)」の履歴に基づいた対応物です。同じプログラム、同じ命令名、同じデコードフィールドが、リアルタイムでプッシュされるのではなく、リクエストに応じてフェッチされます。

<Steps>
  <Step title="プログラムを確認">
    Pump.funは、バージョンに応じて2つの指示を通じてトークンをローンチします：`create`と`create_v2`です。解析イベントは、解析ストリームが使用するのと同じIDLカタログを通じて命令をデコードするため、正確なデコード名やアカウントロールをその[`describeProgram`](/docs/ja/parsed-streams/quickstart#discovery)メソッドで確認してからマッチングします。

    ```json Request theme={"system"}
    { "jsonrpc": "2.0", "id": 1, "method": "describeProgram", "params": [{ "program": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P" }] }
    ```

    `instructions`リストで`create`と`create_v2`、そして`roles`リストで希望のアカウントを確認してください。通常は新規の**ミント**アドレスで、`creator`アカウントロールか`creator`フィールドが`args`に含まれます。コードがargといくつかのロール名をチェックするのは、2つの命令バージョンが必ずしも同じ形を持たないためです。
  </Step>

  <Step title="リクエストを作成">
    クリエイタウォレットの履歴をページごとにフェッチします：

    ```json theme={"system"}
    {
      "address": "<CREATOR_WALLET>",
      "limit": 100,
      "sortOrder": "desc",
      "commitment": "confirmed"
    }
    ```

    ストリーミングフィルタとの主な3つの違いがあります：

    * `address`は常に必要です。プログラム全体のスキャンはサポートされていないため、Pump.funでのすべてのデプロイではなく、1つのウォレットのデプロイをフェッチします。ファイアホースには、[Parsed Streams](/docs/ja/parsed-streams/guides/track-pumpfun-mints)を使用してください。
    * リクエストには、サーバー側の命令フィルタがありません。履歴には、アドレスが接触したすべてのものが返されます。次のステップでクライアント側でPump.funの命令を選び出します。
    * `includeFailed`スイッチはありません。履歴は成功したトランザクションと失敗したトランザクションの両方を返します。クライアント側で`parsed.transactionStatus`を確認してください。失敗したデプロイでは、ライブミントは生成されません。
  </Step>

  <Step title="履歴をページング">
    各結果には、トランザクションの**すべての**命令が含まれています。`parsed.instructions`で、`create` / `create_v2`のヒットをスキャンし、`paginationToken`が消えるまで渡し続けます：

    ```javascript pumpfun-mint-history.js theme={"system"}
    const API_KEY = process.env.HELIUS_API_KEY;

    if (!API_KEY) {
      console.error("Missing HELIUS_API_KEY.");
      process.exit(1);
    }

    const URL = `https://<ENDPOINT>/transaction-history?api-key=${API_KEY}`;
    const PUMP_PROGRAM = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";
    const CREATE_INSTRUCTIONS = ["create", "create_v2"];
    const CREATOR = process.argv[2];

    if (!CREATOR) {
      console.error("Usage: node pumpfun-mint-history.js <CREATOR_WALLET>");
      process.exit(1);
    }

    async function fetchPage(paginationToken) {
      const body = {
        address: CREATOR,
        limit: 100,
        sortOrder: "desc",
        commitment: "confirmed",
      };
      if (paginationToken) body.paginationToken = paginationToken;

      const response = await fetch(URL, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(body),
      });
      if (!response.ok) {
        throw new Error(`HTTP ${response.status}: ${await response.text()}`);
      }
      return response.json();
    }

    async function main() {
      let paginationToken;
      let deployCount = 0;

      do {
        const page = await fetchPage(paginationToken);

        for (const result of page.data) {
          if (result.parserStatus !== "OK") continue;
          // Failed deploys never produce a live mint.
          if (result.parsed.transactionStatus !== "OK") continue;

          for (const ix of result.parsed.instructions) {
            if (ix.programId !== PUMP_PROGRAM) continue;
            if (!CREATE_INSTRUCTIONS.includes(ix.instructionName)) continue;
            deployCount += 1;
            handleDeploy(result, ix, deployCount);
          }
        }

        paginationToken = page.paginationToken;
      } while (paginationToken);

      console.log(`${deployCount} pump deploys found for ${CREATOR}`);
    }

    main();
    ```
  </Step>

  <Step title="各デプロイを抽出">
    ストリーミングリスナーと同様に、デコードされた命令からミント、クリエイター、およびメタデータを引き出します：

    ```javascript theme={"system"}
    // Pull an account pubkey out of a decoded instruction by its role name.
    function accountByRole(decoded, role) {
      return decoded?.accounts?.find((a) => a.name === role)?.pubkey ?? null;
    }

    function handleDeploy(result, ix, deployCount) {
      const args = ix.decoded?.args ?? {};
      const mint = accountByRole(ix.decoded, "mint");
      const creator =
        args.creator ??
        accountByRole(ix.decoded, "creator") ??
        accountByRole(ix.decoded, "user");

      console.log(`pump deploy #${deployCount} (${ix.instructionName})`);
      console.log(`    mint:    ${mint}`);
      console.log(`    creator: ${creator}`);
      console.log(`    name:    ${args.name ?? "?"}`);
      console.log(`    symbol:  ${args.symbol ?? "?"}`);
      console.log(`    uri:     ${args.uri ?? "?"}`);
      console.log(`    slot=${result.parsed.slot} sig=${result.signature}`);
    }
    ```

    `ix.decoded`が存在することを確認してください。 `args`と`accounts`を信頼する前に、Pump.funプログラムの未認識ビルドは、`mint: null`として表示され、機能するのは`rawData`と`rawAccounts`のみです。
  </Step>
</Steps>

## 次のステップ

<CardGroup cols={2}>
  <Card title="Pump.fun Mintsのトラッキング" icon="rocket" href="/docs/ja/parsed-streams/guides/track-pumpfun-mints">
    リアルタイムバージョン：新しいデプロイが着地するたびにログを取る、再接続セーフなリスナー。
  </Card>
</CardGroup>
