> ## 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.

# Ambil Mint Token Pump.fun dengan Parsed Events

> Telusuri riwayat alamat Solana halaman demi halaman dengan Helius Parsed Events dan ekstrak instruksi create Pump.fun — mint token, pembuat, nama, simbol, dan URI.

Panduan ini mengambil **setiap token yang telah diluncurkan oleh dompet di Pump.fun**. Panduan ini menelusuri riwayat dompet yang telah diuraikan halaman demi halaman dan memilih dua instruksi yang digunakan Pump.fun untuk meluncurkan token, hingga seluruh riwayat selesai ditelusuri.

Ini adalah padanan historis dari panduan Parsed Streams [Lacak Mint Pump.fun](/docs/id/parsed-streams/guides/track-pumpfun-mints): program yang sama, nama instruksi yang sama, dan kolom hasil dekode yang sama — diambil sesuai permintaan, bukan dikirim secara real-time.

<Steps>
  <Step title="Look Up the Program">
    Pump.fun meluncurkan token melalui dua instruksi, bergantung pada versinya: `create` dan `create_v2`. Parsed Events mendekode instruksi melalui katalog IDL yang sama dengan yang digunakan Parsed Streams. Karena itu, konfirmasikan nama hasil dekode dan peran akun yang tepat menggunakan metode [`describeProgram`](/docs/id/parsed-streams/quickstart#penemuan) sebelum mencocokkannya:

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

    Periksa daftar `instructions` dalam respons untuk `create` dan `create_v2`, serta daftar `roles` untuk akun yang Anda inginkan — biasanya alamat **mint** baru, serta peran akun `creator` atau kolom `creator` di `args`. Kedua versi instruksi tersebut tidak selalu memiliki struktur yang sama. Karena itu, kode di bawah memeriksa argumen dan beberapa nama peran, bukan mengasumsikan satu struktur tertentu.
  </Step>

  <Step title="Build the Request">
    Ambil riwayat dompet pembuat halaman demi halaman:

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

    Ada tiga perbedaan dari filter streaming yang perlu Anda ketahui sejak awal:

    * `address` selalu wajib — pemindaian di seluruh program tidak didukung. Jadi, Anda mengambil peluncuran dari satu dompet, bukan setiap peluncuran di Pump.fun. Untuk aliran data lengkap, gunakan [Parsed Streams](/docs/id/parsed-streams/guides/track-pumpfun-mints).
    * Permintaan tidak memiliki filter instruksi di sisi server. Riwayat mengembalikan semua yang pernah berinteraksi dengan alamat tersebut, lalu Anda memilih instruksi Pump.fun di sisi klien pada langkah berikutnya.
    * Tidak ada opsi `includeFailed`. Riwayat mengembalikan transaksi yang berhasil maupun gagal. Jadi, periksa `parsed.transactionStatus` di sisi klien — peluncuran yang gagal tidak pernah menghasilkan mint aktif.
  </Step>

  <Step title="Page Through History">
    Setiap hasil memuat **semua** instruksi dalam transaksi. Pindai `parsed.instructions` untuk menemukan kecocokan `create`/`create_v2`, lalu terus kirim kembali `paginationToken` hingga kolom tersebut tidak lagi muncul:

    ```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://mainnet.helius-rpc.com/v1/parsed-events/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="Extract Each Deploy">
    Ambil mint, pembuat, dan metadata dari instruksi yang telah didekode, persis seperti yang dilakukan listener streaming:

    ```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}`);
    }
    ```

    Pastikan `ix.decoded` tersedia sebelum memercayai `args` dan `accounts` — build program Pump.fun yang tidak dikenali akan muncul sebagai `mint: null`, sehingga hanya `rawData` dan `rawAccounts` yang dapat digunakan.
  </Step>
</Steps>

## Langkah Berikutnya

<CardGroup cols={2}>
  <Card title="Track Pump.fun Mints" icon="rocket" href="/docs/id/parsed-streams/guides/track-pumpfun-mints">
    Versi real-time: listener yang aman saat tersambung ulang dan mencatat setiap peluncuran baru saat terjadi.
  </Card>
</CardGroup>
