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

# Parsed Events로 Pump.fun 토큰 발행 조회

> Parsed Events를 사용하여 주소의 기록을 페이지로 설정하고 Pump.fun의 생성 및 create_v2 지침을 추출하여 각 토큰 발행을 생성자, 이름, 심볼 및 URI와 함께 기록합니다.

이 가이드는 **Pump.fun에서 지갑이 배포한 모든 토큰**을 조회합니다. 지갑의 파싱된 기록을 검색하고 기록이 소진될 때까지 Pump.fun이 토큰을 시작하는 두 가지 지시를 선택합니다.

Parsed Streams 가이드 [Pump.fun 발행 추적](/docs/ko/parsed-streams/guides/track-pumpfun-mints)와의 역사적 대응물입니다: 동일한 프로그램, 동일한 지시 이름, 동일한 디코딩된 필드 — 실시간이 아닌 요청 시 가져옵니다.

<Steps>
  <Step title="프로그램 조회">
    Pump.fun은 버전에 따라 두 가지 지시를 통해 토큰을 시작합니다: `create` 및 `create_v2`. Parsed Events는 Parsed Streams가 사용하는 동일한 IDL 카탈로그를 통해 지시를 디코딩하므로, 일치시키기 전에 [`describeProgram`](/docs/ko/parsed-streams/quickstart#디스커버리) 메서드를 통해 정확한 디코딩된 이름 및 계정 역할을 확인하십시오:

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

    응답의 `instructions` 목록에서 `create` 및 `create_v2`을 확인하고, 원하는 계정을 `roles` 목록에서 확인하십시오 — 일반적으로 새 **발행** 주소와 `creator` 계정 역할 또는 `args`의 `creator` 필드 중 하나입니다. 두 지시 버전이 반드시 같은 모양을 공유하지는 않으므로, 아래 코드에서는 하나를 가정하는 대신 arg와 몇 가지 역할 이름을 모두 확인합니다.
  </Step>

  <Step title="요청 빌드">
    생성자 지갑의 기록을 페이지별로 가져옵니다:

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

    스트리밍 필터와의 세 가지 차이점을 미리 알고 있어야 합니다:

    * `address`는 항상 필요합니다 — 프로그램 전체 스캔은 지원되지 않으므로 Pump.fun에서 모든 배포가 아닌 특정 지갑의 배포를 가져옵니다. 파이어호스의 경우 [Parsed Streams](/docs/ko/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 발행 추적" icon="rocket" href="/docs/ko/parsed-streams/guides/track-pumpfun-mints">
    실시간 버전: 새로운 배포가 도착할 때마다 기록하는 재연결 안전 리스너.
  </Card>
</CardGroup>
