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

> 列出程序的解码指令名称、事件和帐户角色，以便您可以构建实际匹配的解析流过滤器。

基于过滤器的 API 最常见的失败是过滤器有效但没有匹配，通常是猜测的指令或角色名称。`describeProgram` 通过返回匹配器比较的确切名称来防止这种情况发生。

推荐流程：使用 `describeProgram` 获取确切的指令和角色名称，用这些名称构建过滤器，然后[订阅](/docs/zh/api-reference/parsed-streams/parsedtransactionsubscribe)。[跟踪 Jupiter Swaps](/docs/zh/parsed-streams/guides/track-jupiter-swaps) 指南从头到尾进行了讲解。

## 请求主体

<ParamField body="params" type="array" required>
  <Expandable title="查询" defaultOpen>
    <ParamField body="program" type="string" required>
      程序地址 (base58) 或目录名称。**推荐使用地址**：名称在程序版本之间可能不明确（多个目录条目名称为 `jupiter`，名称查找可能解析为旧版本）。如果按名称查找，请检查 `result.id` 是否是您打算订阅的程序。
    </ParamField>
  </Expandable>
</ParamField>

## 响应

<ResponseField name="id" type="string">
  程序地址 (base58)。
</ResponseField>

<ResponseField name="name" type="string">
  程序目录名称。
</ResponseField>

<ResponseField name="instructions" type="string[]">
  解码后的指令名称，与匹配器进行比较时完全一致。在 `instructionNames` 过滤器字段中使用这些名称。
</ResponseField>

<ResponseField name="events" type="string[]">
  解析器识别的此程序的事件名称。
</ResponseField>

<ResponseField name="roles" type="string[]">
  解码帐户角色名称。在 `accounts.roles` 过滤器字段中用作键 — 完全匹配，不进行大小写折叠。
</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>
