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

# describeProgram

> Liệt kê tên lệnh đã giải mã, sự kiện và vai trò tài khoản của một chương trình để bạn có thể tạo các bộ lọc Parsed Streams thực sự khớp.

Lỗi phổ biến nhất với API dựa trên bộ lọc là bộ lọc hợp lệ nhưng không khớp với dữ liệu nào, thường do phỏng đoán tên lệnh hoặc vai trò. `describeProgram` ngăn lỗi này bằng cách trả về chính xác các tên mà trình so khớp sử dụng để đối chiếu — tên lệnh đã giải mã, tên sự kiện và vai trò tài khoản cho bất kỳ chương trình nào trong hơn 3.600 chương trình thuộc danh mục.

`describeProgram` là một phương thức JSON-RPC được gửi qua kết nối WebSocket. Phương thức này hiện chỉ có trên `wss://fs-beta.helius-rpc.com/?api-key=<API_KEY>`, không có trên điểm cuối Gatekeeper (`wss://beta.helius-rpc.com`) mà bạn dùng để đăng ký. Hãy mở một kết nối riêng đến `fs-beta` để khám phá, sau đó đăng ký trên Gatekeeper.

Quy trình đề xuất: dùng `describeProgram` để lấy chính xác tên lệnh và vai trò, tạo bộ lọc bằng các tên đó, sau đó [đăng ký](/docs/vi/api-reference/parsed-streams/parsedtransactionsubscribe). Hướng dẫn [Theo dõi giao dịch hoán đổi Jupiter](/docs/vi/parsed-streams/guides/track-jupiter-swaps) trình bày toàn bộ quy trình từ đầu đến cuối.

## Phần thân

<ParamField body="params" type="array" required>
  <Expandable title="Query" defaultOpen>
    <ParamField body="program" type="string" required>
      Địa chỉ chương trình (base58) hoặc tên trong danh mục. **Nên dùng địa chỉ**: tên có thể không rõ ràng giữa các phiên bản chương trình (nhiều mục trong danh mục có tên là `jupiter` và việc tra cứu theo tên có thể phân giải thành phiên bản cũ hơn). Nếu tra cứu theo tên, hãy kiểm tra để đảm bảo `result.id` là chương trình mà bạn muốn đăng ký.
    </ParamField>
  </Expandable>
</ParamField>

## Phản hồi

<ResponseField name="id" type="string">
  Địa chỉ của chương trình (base58).
</ResponseField>

<ResponseField name="name" type="string">
  Tên của chương trình trong danh mục.
</ResponseField>

<ResponseField name="instructions" type="string[]">
  Tên lệnh đã giải mã, chính xác như cách trình so khớp đối chiếu. Hãy dùng các tên này trong trường bộ lọc `instructionNames`.
</ResponseField>

<ResponseField name="events" type="string[]">
  Tên sự kiện mà trình phân tích cú pháp nhận dạng cho chương trình này.
</ResponseField>

<ResponseField name="roles" type="string[]">
  Tên vai trò tài khoản đã giải mã. Hãy dùng các tên này làm khóa trong trường bộ lọc `accounts.roles` — chúng phải khớp chính xác và không chuyển đổi chữ hoa, chữ thường.
</ResponseField>

<RequestExample>
  ```json Request theme={"system"}
  { "jsonrpc": "2.0", "id": 1, "method": "describeProgram", "params": [{ "program": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" }] }
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={"system"}
  {
    "jsonrpc": "2.0", "id": 1,
    "result": {
      "id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4",
      "name": "jupiter",
      "instructions": ["route", "shared_accounts_route", "exact_out_route"],
      "events": ["SwapEvent"],
      "roles": ["user_transfer_authority", "destination_token_account"]
    }
  }
  ```
</ResponseExample>
