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

# Quét lịch sử giao dịch

> Tìm kiếm phía máy chủ trong lịch sử của một địa chỉ để tìm các giao dịch gọi lệnh chương trình hoặc tương tác với mint token, rồi trả về các kết quả đã phân tích, chữ ký của chúng hoặc số lượng.

Nội dung yêu cầu, lược đồ phản hồi và các ví dụ trên trang này được tạo từ định nghĩa OpenAPI.

Scan duyệt lịch sử của một địa chỉ, giữ lại các giao dịch khớp với tiêu chí `match` của bạn và chỉ phân tích các giao dịch đó. Hãy dùng tính năng này thay vì phân trang qua [Lịch sử giao dịch đã phân tích](https://www.helius.dev/docs/vi/api-reference/parsed-events/transaction-history.md) rồi lọc ở phía máy khách.

Theo mặc định, mỗi mục trong `data` sử dụng cùng cấu trúc `TransactionResult` do [Phân tích giao dịch](https://www.helius.dev/docs/vi/api-reference/parsed-events/transactions.md) trả về. Đặt `returnShape` để chỉ nhận các chữ ký khớp hoặc chỉ nhận số lượng. Phản hồi cũng bao gồm phần tóm tắt `scan` cho biết quá trình quét đã tiến đến đâu và lý do dừng.

## Cách Scan hoạt động

1. Scan tìm nạp lịch sử của địa chỉ theo các trang có tối đa 1.000 giao dịch, theo `sortOrder`, trong các giới hạn `slot`, `time` và chữ ký mà bạn đặt.
2. Scan giữ lại các giao dịch khớp với mọi tiêu chí được đặt trong `match`.
3. Scan dừng khi điều kiện đầu tiên trong số này xảy ra: tìm thấy `limit` kết quả khớp (chỉ với cấu trúc `transactions` mặc định), đã quét `budget.maxScannedTransactions`, đến cuối lịch sử hoặc khoảng thời gian, hoặc đạt giới hạn thời gian của yêu cầu.

Một lần quét dừng sớm vẫn là `200`. Hãy gọi lại với `paginationToken` được trả về miễn là trường này còn hiện diện, ngay cả khi `data` trống.

## Tiêu chí khớp

`match` là bắt buộc. Đặt `programs`, `mints` hoặc cả hai. Khi đặt cả hai, giao dịch phải khớp với cả hai.

### Khớp theo chương trình

`programs` liệt kê tối đa 20 chương trình, mỗi chương trình chỉ xuất hiện một lần. Một giao dịch khớp khi có lệnh của bất kỳ chương trình nào trong số đó, ở cấp cao nhất hoặc bên trong (CPI), trong `scope` của chương trình.

Với mỗi chương trình, bạn có thể thu hẹp điều kiện khớp:

* `instructions`: tên lệnh từ bất kỳ phiên bản IDL nào của chương trình, theo cách viết trong IDL hoặc ở dạng snake\_case. Tên không có trong các IDL của chương trình sẽ trả về `400`.
* `discriminators`: tiền tố dữ liệu lệnh, mỗi tiền tố dài từ 1 đến 8 byte được mã hóa hex, có thể kèm tiền tố `0x`. Dùng các tiền tố này cho chương trình không có IDL.
* Đặt một trong hai danh sách hoặc cả hai. Khi có cả hai, một lệnh khớp nếu đó là một trong các lệnh được đặt tên hoặc dữ liệu của lệnh bắt đầu bằng một trong các discriminator. Bỏ qua cả hai để khớp với mọi lệnh của chương trình.
* Mỗi danh sách chấp nhận tối đa 50 mục cho mỗi chương trình.

Để xác nhận tên lệnh đã giải mã của một chương trình, hãy dùng phương thức Parsed Streams [`describeProgram`](https://www.helius.dev/docs/vi/parsed-streams/quickstart#khám-phá).

### Khớp theo mint

`mints` liệt kê tối đa 20 đối tượng có dạng `{ "mint": "...", "scope": "address" }`, mỗi mint chỉ xuất hiện một lần. Một giao dịch khớp khi một trong các số dư token trước hoặc sau giao dịch thuộc một trong các mint, trong `scope` của mint đó.

Khi quét ví theo mint, hãy đặt `tokenAccounts` thành `balanceChanged`. Theo mặc định, lịch sử bỏ qua các giao dịch chỉ tương tác với tài khoản token của ví mà không tương tác với chính ví, bao gồm nhiều giao dịch chuyển token đến.

### Khớp với SOL gốc

SOL gốc không có số dư token, vì vậy Scan khớp dựa trên lamport. Dùng mint SOL gốc `So11111111111111111111111111111111111111111` (SOL được bọc là `So11111111111111111111111111111111111111112`):

* Với phạm vi `address`, giao dịch khớp khi số lamport của địa chỉ được quét thay đổi.
* Với phạm vi `transaction`, giao dịch khớp khi số lamport của bất kỳ tài khoản nào thay đổi.

Phí được tính cho bên trả phí không được tính. Mỗi tài khoản được so sánh riêng, vì vậy số lamport rời khỏi một tài khoản rồi quay lại trong cùng giao dịch không được tính. Việc khớp SOL gốc phát hiện SOL do chương trình chi trả mà không có lệnh chuyển, chẳng hạn như một giao dịch bán trên Pump.fun. Nó cũng phát hiện các chuyển động phát sinh, chẳng hạn như tiền tip Jito và tiền thuê được thanh toán cho hoặc hoàn lại từ các tài khoản.

### Phạm vi khớp

Mỗi chương trình và mỗi mint nhận một `scope`:

| `scope` | Lệnh của chương trình được tính khi | Số dư token của mint được tính khi |
| - | - | - |
| `address` (mặc định) | Một trong các tài khoản của lệnh là `address`, một tài khoản token do `address` sở hữu, hoặc một tài khoản token có mint là `address`, hoặc `address` chính là chương trình. | Tài khoản token của mint là `address` hoặc do `address` sở hữu, hoặc mint của tài khoản là `address`. |
| `transaction` | Lệnh xuất hiện ở bất kỳ đâu trong giao dịch. | Số dư xuất hiện ở bất kỳ đâu trong giao dịch. |

Dùng phạm vi `transaction` khi địa chỉ được quét có trong giao dịch nhưng không có trong lệnh hoặc số dư mà bạn muốn khớp. Ví dụ: địa chỉ chỉ trả phí, thực thi giao dịch đa chữ ký hoặc bị thiếu trong CPI sự kiện Anchor. Khi quét mint của một token để tìm các giao dịch cũng chứa USDC, mục USDC cần dùng phạm vi `transaction`.

Quyền sở hữu tài khoản token được lấy từ `owner` được ghi trên mỗi số dư token. Các giao dịch cũ không ghi thông tin này chỉ khớp với phạm vi `address` trên chính `address`.

## Cấu trúc trả về

`returnShape` xác định nội dung phản hồi chứa cho các kết quả khớp:

| `returnShape` | `data` | Dùng để |
| - | - | - |
| `transactions` (mặc định) | Các kết quả khớp đã phân tích, tối đa `limit`. | Đọc các lệnh, giao dịch chuyển và phần tóm tắt đã giải mã. |
| `signatures` | Một đối tượng `{ signature, slot, transactionIndex, blockTime }` cho mỗi kết quả khớp. | Thu thập các chữ ký khớp mà không phân tích chúng. |
| `count` | Bị lược bỏ. `scan.matchedTransactions` là số lượng kết quả khớp. | Đếm kết quả khớp trong một phạm vi. |

`signatures` và `count` bỏ qua `limit` và `rawTransaction`. Chúng trả về mọi kết quả khớp trong phạm vi mà một yêu cầu quét, vì vậy chúng chỉ dừng ở `windowEnd`, `budget` hoặc `deadline`. Để đếm toàn bộ lịch sử, hãy tiếp tục gọi với `paginationToken` và cộng các giá trị `scan.matchedTransactions`.

Mỗi mục trong `data` có `returnShape: "signatures"` trông như sau:

```json theme={"system"}
{
  "signature": "5zmGhmd3JZxXzz8MnA8MM1K7PXRwA1z35n3xT6ZJGRz3sAi25p8jaZuPWFCB4nEPx7DUke9y3pwrd4V7xAFozQBy",
  "slot": 460869102,
  "transactionIndex": 203,
  "blockTime": 1792848886
}
```

Cả ba cấu trúc đều có cùng chi phí vì số credit phụ thuộc vào các trang lịch sử được quét, không phụ thuộc vào nội dung được trả về.

## Yêu cầu mẫu

### Các giao dịch mua và bán trên Pump.fun

Quét lịch sử của chương trình Pump.fun để tìm các lệnh `buy` và `sell`:

```json theme={"system"}
{
  "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      }
    ]
  },
  "limit": 100
}
```

Pump.fun cũng có các biến thể như `buy_exact_sol_in`, `buy_v2` và `sell_v2`. Hãy liệt kê mọi tên lệnh bạn muốn khớp.

### Giao dịch mua và bán một token

Để lấy các giao dịch Pump.fun của một token, hãy quét địa chỉ mint của token thay vì chương trình. Lịch sử của mint chỉ chứa hoạt động của token đó và mỗi lệnh mua hoặc bán đều liệt kê mint làm tài khoản, vì vậy lệnh sẽ khớp với phạm vi `address` mặc định:

```json theme={"system"}
{
  "address": "<MINT_ADDRESS>",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      }
    ]
  }
}
```

Để chỉ giữ lại các giao dịch của token cũng liên quan đến tài khoản token USDC, hãy thêm USDC với phạm vi `transaction`. Với phạm vi `address` mặc định, số dư USDC sẽ phải thuộc về địa chỉ mint nên sẽ không có kết quả nào khớp:

```json theme={"system"}
{
  "address": "<MINT_ADDRESS>",
  "match": {
    "mints": [
      { "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "scope": "transaction" }
    ]
  }
}
```

### Giao dịch của một ví trên hai chương trình

Liệt kê nhiều chương trình để khớp với lời gọi đến bất kỳ chương trình nào trong số đó. Yêu cầu này chỉ trả về chữ ký của các giao dịch Pump.fun và PumpSwap của một ví:

```json theme={"system"}
{
  "address": "<WALLET_ADDRESS>",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      },
      {
        "programId": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA",
        "instructions": ["buy", "sell"]
      }
    ]
  },
  "returnShape": "signatures"
}
```

### Hoạt động USDC của một ví trong một khoảng thời gian

Quét lịch sử của một ví để tìm các giao dịch đã tương tác với USDC trong năm 2025. `tokenAccounts: "balanceChanged"` bao gồm các giao dịch chuyển chỉ tương tác với tài khoản token USDC của ví:

```json theme={"system"}
{
  "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
  "match": {
    "mints": [{ "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }]
  },
  "tokenAccounts": "balanceChanged",
  "time": { "gte": 1735689600, "lte": 1767225599 }
}
```

Để chỉ lấy số lượng giao dịch khớp, hãy thêm `"returnShape": "count"`.

### Chuyển động SOL của một ví

Quét một ví để tìm các giao dịch đã thay đổi số dư SOL của ví ngoài khoản phí đã trả trong năm 2025. Điều này bao gồm SOL do chương trình chi trả mà không có lệnh chuyển:

```json theme={"system"}
{
  "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
  "match": {
    "mints": [{ "mint": "So11111111111111111111111111111111111111111" }]
  },
  "time": { "gte": 1735689600, "lte": 1767225599 }
}
```

## Phân trang và lý do dừng

`scan.stoppedOn` cho biết lý do yêu cầu kết thúc:

| `stoppedOn` | Ý nghĩa | `paginationToken` |
| - | - | - |
| `windowEnd` | Đã đến cuối lịch sử hoặc khoảng thời gian được yêu cầu. | Không có. Quá trình quét đã hoàn tất. |
| `limit` | Đã trả về `limit` kết quả khớp. Chỉ áp dụng với cấu trúc `transactions` mặc định. | Tiếp tục ngay sau kết quả khớp cuối cùng được trả về để không bỏ qua kết quả nào. |
| `budget` | Đã quét `budget.maxScannedTransactions` giao dịch. | Tiếp tục ở trang lịch sử tiếp theo. |
| `deadline` | Đã đạt giới hạn thời gian của yêu cầu. | Tiếp tục ở trang lịch sử tiếp theo. Trang bị ngắt do hết thời hạn sẽ được tìm nạp lại trong lần gọi tiếp theo. |

`scan.scannedThrough` cung cấp slot và thời gian khối của giao dịch cuối cùng được quét để bạn có thể báo cáo tiến trình qua các lịch sử dài.

Một lần quét tìm lệnh hiếm có thể dùng hết ngân sách mà không tìm thấy kết quả khớp. Khi đó, phản hồi có mảng `data` trống nhưng vẫn trả về `paginationToken`, vì vậy hãy tiếp tục quét:

```json theme={"system"}
{
  "data": [],
  "paginationToken": "460903064:422",
  "scan": {
    "stoppedOn": "budget",
    "scannedTransactions": 2000,
    "matchedTransactions": 0,
    "scannedThrough": { "slot": 460903064, "blockTime": 1792856105 },
    "creditsCharged": 12
  }
}
```

Vòng lặp này tiếp tục quét cho đến khi duyệt hết lịch sử:

```javascript scan-pumpfun-trades.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/scan?api-key=${API_KEY}`;
const PUMP_PROGRAM = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";

async function scan(paginationToken) {
  const response = await fetch(URL, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      address: PUMP_PROGRAM,
      match: {
        programs: [{ programId: PUMP_PROGRAM, instructions: ["buy", "sell"] }],
      },
      limit: 100,
      ...(paginationToken && { paginationToken }),
    }),
  });

  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }

  return response.json();
}

let paginationToken;

do {
  const page = await scan(paginationToken);

  for (const result of page.data) {
    console.log(result.signature, result.parsed?.slot);
  }

  console.log(
    `stopped on ${page.scan.stoppedOn}: scanned ${page.scan.scannedTransactions}, ` +
      `matched ${page.scan.matchedTransactions}, charged ${page.scan.creditsCharged} credits`
  );

  // Keep going while a token is returned, even when this page had no matches.
  paginationToken = page.paginationToken;
} while (paginationToken);
```

> [!TIP]
>
> Hãy quét địa chỉ có phạm vi hẹp nhất có thể. Mọi giao dịch trong lịch sử của địa chỉ đều được tính vào ngân sách, vì vậy địa chỉ càng có ít giao dịch không liên quan thì mỗi yêu cầu càng tìm thấy nhiều kết quả khớp.

## Credit

Mỗi lần quét tốn **10 credit cộng thêm 1 credit cho mỗi trang lịch sử được quét**. Một trang chứa tối đa 1.000 giao dịch, vì vậy một lần quét với ngân sách mặc định là 10.000 giao dịch tốn tối đa 20 credit. Trang bị ngắt do hết thời hạn sẽ không được quét và không bị tính phí.

Mỗi phản hồi báo cáo khoản phí trong `scan.creditsCharged`. Xem [Credit](https://www.helius.dev/docs/vi/billing/credits.md) để biết giá của các gói.

## Lỗi

| Trạng thái | Khi nào |
| - | - |
| `400` | Nội dung không hợp lệ hoặc có trường không xác định; `match` không đặt cả `programs` lẫn `mints`; một chương trình hoặc mint được liệt kê nhiều lần; địa chỉ hoặc mint không hợp lệ; tên lệnh không có trong các IDL của chương trình; danh sách vượt quá giới hạn; `scope`, `returnShape`, `rawTransaction` hoặc `tokenAccounts` có giá trị không xác định; `limit` nằm ngoài khoảng từ 1 đến 100 với cấu trúc `transactions`; hoặc `budget.maxScannedTransactions` nằm ngoài khoảng từ 1 đến 10.000. |
| `500` | Yêu cầu thất bại trên máy chủ, chẳng hạn vì không thể giải mã một giao dịch được lưu trữ trong phạm vi quét. Không trả về kết quả từng phần. |
| `503` | Dịch vụ đã đạt công suất tối đa hoặc trang lịch sử đầu tiên không hoàn tất trước giới hạn thời gian của yêu cầu. Hãy thử lại yêu cầu. |

Lỗi ở cấp yêu cầu trả về nội dung JSON có thông báo `error`, chẳng hạn như `{"error": "limit must be between 1 and 100"}`. Nội dung có trường không xác định, chẳng hạn như `includeRawTransaction` (hãy dùng `rawTransaction`), hoặc có `mints` ở dạng chuỗi thuần thay vì đối tượng `{ "mint": "..." }`, sẽ trả về `{"error": "invalid request payload"}`.

## Tham số yêu cầu

**address** `string` *required*

Địa chỉ có lịch sử cần quét.

**match** `object` *required*

Những gì một giao dịch phải khớp. Đặt `programs`, `mints` hoặc cả hai. Khi đặt cả hai, giao dịch phải khớp với cả hai.

**match.programs** `array`

Các chương trình cần khớp, tối đa 20 chương trình và mỗi chương trình chỉ xuất hiện một lần. Một giao dịch khớp khi có lệnh của bất kỳ chương trình nào trong số đó, ở cấp cao nhất hoặc bên trong (CPI), trong `scope` của chương trình.

**match.programs\[].programId** `string` *required*

Địa chỉ chương trình.

**match.programs\[].instructions** `array`

Tên lệnh từ bất kỳ phiên bản IDL nào của chương trình, theo cách viết trong IDL hoặc ở dạng snake\_case. Tối đa 50. Có thể kết hợp với `discriminators`.

**match.programs\[].discriminators** `array`

Tiền tố dữ liệu lệnh, mỗi tiền tố dài từ 1 đến 8 byte được mã hóa hex, có thể kèm tiền tố `0x`. Tối đa 50. Có thể kết hợp với `instructions`.

**match.programs\[].scope** `string` (default: address)

Các lệnh nào của chương trình được tính. `address` chỉ tính các lệnh có một tài khoản là `address`, một tài khoản token do `address` sở hữu, hoặc một tài khoản token có mint là `address`; hoặc tính mọi lệnh khi `address` chính là chương trình. `transaction` tính mọi lệnh của chương trình trong giao dịch.

* `address`
* `transaction`

**match.mints** `array`

Các mint cần khớp, tối đa 20 mint và mỗi mint chỉ xuất hiện một lần. Một giao dịch khớp khi một trong các số dư token trước hoặc sau giao dịch thuộc một trong các mint này, trong `scope` của mint.

**match.mints\[].mint** `string` *required*

Địa chỉ mint token. Mint SOL gốc `So11111111111111111111111111111111111111111` khớp theo thay đổi lamport thay vì số dư token, không tính phí.

**match.mints\[].scope** `string` (default: address)

Các số dư token nào của mint được tính. `address` chỉ tính các số dư có tài khoản token là `address` hoặc do địa chỉ đó sở hữu, hoặc có mint là `address`. Đối với SOL gốc, chỉ các thay đổi đối với số lamport của `address` được tính. `transaction` tính mọi số dư của mint trong giao dịch. Đối với SOL gốc, thay đổi số lamport của bất kỳ tài khoản nào cũng được tính.

* `address`
* `transaction`

**returnShape** `string` (default: transactions)

Nội dung phản hồi chứa cho các kết quả khớp: `transactions` (các kết quả khớp đã phân tích trong `data`, tối đa `limit`), `signatures` (`signature`, `slot`, `transactionIndex` và `blockTime` cho mỗi kết quả khớp trong `data`), hoặc `count` (không có `data`; `scan.matchedTransactions` là số lượng kết quả khớp). `signatures` và `count` bỏ qua `limit` và `rawTransaction`.

* `transactions`
* `signatures`
* `count`

**limit** `number` (default: 100)

Số kết quả khớp tối đa cần trả về với cấu trúc `transactions`, từ 1 đến 100.

**budget** `object`

Giới hạn lượng lịch sử mà một yêu cầu quét.

**budget.maxScannedTransactions** `number` (default: 10000)

Số giao dịch tối đa cần quét trong yêu cầu này, từ 1 đến 10.000.

**beforeSignature** `string`

Quét các giao dịch trước chữ ký này.

**afterSignature** `string`

Quét các giao dịch sau chữ ký này.

**paginationToken** `string`

Con trỏ do lần quét trước trả về. Có cấu trúc `slot:transactionIndex`.

**sortOrder** `string` (default: desc)

Thứ tự quét lịch sử và trả về các kết quả khớp.

* `asc`
* `desc`

**commitment** `string` (default: confirmed)

Mức cam kết dùng để tìm nạp lịch sử. `processed` không được hỗ trợ.

* `confirmed`
* `finalized`

**status** `string` (default: succeeded)

Kết quả thực thi cần bao gồm. Việc lọc diễn ra trước khi khớp, vì vậy các giao dịch bị loại trừ không được tính vào ngân sách.

* `succeeded`
* `failed`
* `any`

**tokenAccounts** `string` (default: none)

Có bao gồm các giao dịch chỉ tham chiếu đến tài khoản token do `address` sở hữu, chứ không phải chính `address` hay không: `none` loại trừ chúng, `balanceChanged` bao gồm các giao dịch làm thay đổi số dư của tài khoản token và `all` bao gồm tất cả. Dùng `balanceChanged` khi quét ví theo mint.

* `none`
* `balanceChanged`
* `all`

**minContextSlot** `number`

Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá.

**rawTransaction** `string` (default: none)

Kiểu mã hóa của giao dịch Solana gốc được trả về dưới dạng `rawTransaction` trên mỗi kết quả thành công, trong cấu trúc `getTransaction`. Chỉ áp dụng cho cấu trúc `transactions`.

* `none`
* `json`
* `jsonParsed`
* `base64`

**slot** `object`

Các giới hạn so sánh slot. Mỗi giới hạn đều không bắt buộc.

**slot.gt** `number`

Khớp với các giá trị lớn hơn giá trị này.

**slot.gte** `number`

Khớp với các giá trị lớn hơn hoặc bằng giá trị này.

**slot.lt** `number`

Khớp với các giá trị nhỏ hơn giá trị này.

**slot.lte** `number`

Khớp với các giá trị nhỏ hơn hoặc bằng giá trị này.

**time** `object`

Các giới hạn so sánh thời gian khối theo giây Unix. Mỗi giới hạn đều không bắt buộc.

**time.gt** `number`

Khớp với các giá trị lớn hơn giá trị này.

**time.gte** `number`

Khớp với các giá trị lớn hơn hoặc bằng giá trị này.

**time.lt** `number`

Khớp với các giá trị nhỏ hơn giá trị này.

**time.lte** `number`

Khớp với các giá trị nhỏ hơn hoặc bằng giá trị này.


## OpenAPI

````yaml vi/openapi/parsed-events.yaml POST /v1/parsed-events/scan
openapi: 3.0.3
info:
  title: Sự kiện đã phân tích
  version: 0.1.0
  description: >-
    Phân tích cú pháp các giao dịch Solana và lịch sử giao dịch đã phân tích
    bằng Sự kiện đã phân tích.
servers:
  - url: https://mainnet.helius-rpc.com
security:
  - ApiKeyQuery: []
paths:
  /v1/parsed-events/scan:
    post:
      tags:
        - Sự kiện đã phân tích
      summary: Quét lịch sử giao dịch
      description: >-
        Tìm kiếm trong lịch sử của một địa chỉ các giao dịch gọi một trong tập
        hợp chương trình, liên quan đến một trong tập hợp token mint hoặc cả
        hai, rồi trả về các kết quả khớp đã phân tích, chữ ký của chúng hoặc số
        lượng.
      operationId: scanParsedTransactionHistory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScanRequest'
            examples:
              Pump.fun buys and sells:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - buy
                          - sell
                  limit: 1
              Rare instruction, budget stop:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - set_params
                  budget:
                    maxScannedTransactions: 2000
              Count matches:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - set_params
                  returnShape: count
                  budget:
                    maxScannedTransactions: 2000
              Token transactions with a USDC account:
                value:
                  address: <MINT_ADDRESS>
                  match:
                    mints:
                      - mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                        scope: transaction
                  returnShape: signatures
      responses:
        '200':
          description: >-
            Các kết quả khớp theo `returnShape` được yêu cầu và bản tóm tắt quá
            trình quét. Kết quả một phần vẫn trả về 200; tiếp tục bằng
            `paginationToken` chừng nào trường này còn được trả về.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScanPage'
              examples:
                Stopped on limit:
                  value:
                    data:
                      - signature: >-
                          5zmGhmd3JZxXzz8MnA8MM1K7PXRwA1z35n3xT6ZJGRz3sAi25p8jaZuPWFCB4nEPx7DUke9y3pwrd4V7xAFozQBy
                        parserStatus: OK
                        parsed:
                          slot: 460869102
                          blockTime: 1792848886
                          fee: 45000
                          feePayer: Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA
                          transactionStatus: OK
                          error: null
                          decodedError: null
                          nativeTransfers:
                            - fromUserAccount: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              toUserAccount: 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              amount: 4207183
                          tokenTransfers:
                            - fromUserAccount: 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              toUserAccount: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              fromTokenAccount: 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                              toTokenAccount: 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                              rawTokenAmount: 612181177082
                              decimals: 6
                              tokenStandard: Fungible
                              mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                          summary:
                            type: swap
                            description: >-
                              BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s đã
                              hoán đổi 0.004207183 SOL lấy 612181.177082
                              3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump qua
                              Pump.fun
                            parsedData:
                              type: swap
                              protocol: pump_fun
                              kind: buy
                              in_amount: '4207183'
                              actual_out_amount: '612181177082'
                              input_mint: So11111111111111111111111111111111111111112
                              output_mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                              inner_swaps: []
                          instructions:
                            - instructionIndex: 0
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: ComputeBudget111111111111111111111111111111
                              rawAccounts: []
                              rawData: HMypLP
                              summary: null
                              programName: compute_budget
                              instructionName: set_compute_unit_limit
                              decoded:
                                args:
                                  units: '400000'
                                accounts: []
                            - instructionIndex: 1
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: ComputeBudget111111111111111111111111111111
                              rawAccounts: []
                              rawData: 3gJqkocMWaMm
                              summary: null
                              programName: compute_budget
                              instructionName: set_compute_unit_price
                              decoded:
                                args:
                                  micro_lamports: '100000'
                                accounts: []
                            - instructionIndex: 2
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                              rawAccounts:
                                - Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA
                                - 13ec7XdrjF3h3YcqBTFDSReRcUFwbCnJaAQspM4j6DDJ
                                - CNtxytSi1JNJgmBM444pGXK5eUEy5B2Q3haBHw2fzdoG
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - '11111111111111111111111111111111'
                                - TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                - 4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                - GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                - Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                - FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                - 8FoNgzmjuSmiy86EPCWxvv1q7oJSu2WGA7wPymwki2LJ
                                - MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                                - 6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                - 5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                              rawData: 23s1EunhJwrvzz8YSBTPv5WDZGm8uym8KQXhF3u
                              summary: null
                              programName: null
                              instructionName: null
                              decoded: null
                            - instructionIndex: 2
                              innerInstructionIndex: 0
                              stackHeight: 2
                              programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawAccounts:
                                - 4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                - GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - '11111111111111111111111111111111'
                                - TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                - HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                - Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                - FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                - 6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                - 5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                              rawData: i43WeUBGKA8F2B6dwt5RBzavSKrhGu93LB
                              summary:
                                type: swap
                                description: >-
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  đã hoán đổi 0.004207183 SOL lấy 612181.177082
                                  3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  qua Pump.fun
                                parsedData:
                                  type: swap
                                  protocol: pump_fun
                                  kind: buy
                                  in_amount: '4207183'
                                  actual_out_amount: '612181177082'
                                  input_mint: So11111111111111111111111111111111111111112
                                  output_mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  inner_swaps: []
                              programName: pump
                              instructionName: buy
                              decoded:
                                args:
                                  amount: '612181177082'
                                  max_sol_cost: '4207183'
                                  track_volume:
                                    - false
                                accounts:
                                  - name: global
                                    pubkey: >-
                                      4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                    isSigner: false
                                    isWritable: false
                                  - name: fee_recipient
                                    pubkey: >-
                                      GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                    isSigner: false
                                    isWritable: true
                                  - name: mint
                                    pubkey: >-
                                      3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                    isSigner: false
                                    isWritable: false
                                  - name: bonding_curve
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: false
                                    isWritable: true
                                  - name: associated_bonding_curve
                                    pubkey: >-
                                      7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                    isSigner: false
                                    isWritable: true
                                  - name: associated_user
                                    pubkey: >-
                                      7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                    isSigner: false
                                    isWritable: true
                                  - name: user
                                    pubkey: >-
                                      BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                    isSigner: true
                                    isWritable: true
                                  - name: system_program
                                    pubkey: '11111111111111111111111111111111'
                                    isSigner: false
                                    isWritable: false
                                  - name: token_program
                                    pubkey: >-
                                      TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                    isSigner: false
                                    isWritable: false
                                  - name: creator_vault
                                    pubkey: >-
                                      HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                    isSigner: false
                                    isWritable: true
                                  - name: event_authority
                                    pubkey: >-
                                      Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                    isSigner: false
                                    isWritable: false
                                  - name: program
                                    pubkey: >-
                                      6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                    isSigner: false
                                    isWritable: false
                                  - name: global_volume_accumulator
                                    pubkey: >-
                                      Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                    isSigner: false
                                    isWritable: false
                                  - name: user_volume_accumulator
                                    pubkey: >-
                                      FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                    isSigner: false
                                    isWritable: true
                                  - name: fee_config
                                    pubkey: >-
                                      8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                    isSigner: false
                                    isWritable: false
                                  - name: fee_program
                                    pubkey: >-
                                      pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                    isSigner: false
                                    isWritable: false
                                  - name: remainingAccount1
                                    pubkey: >-
                                      6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                    isSigner: false
                                    isWritable: false
                                  - name: remainingAccount2
                                    pubkey: >-
                                      5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                                    isSigner: false
                                    isWritable: false
                            - instructionIndex: 2
                              innerInstructionIndex: 1
                              stackHeight: 3
                              programId: pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                              rawAccounts:
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawData: >-
                                KX69VKtJ7u4E7dVvicNyuayxqa9Hr4EfndWiJBCjUyq1hDLtgcYW6pEh1tPqbHSkqHTQ8uiASv1QK1
                              summary: null
                              programName: pump_fees
                              instructionName: null
                              decoded: null
                            - instructionIndex: 2
                              innerInstructionIndex: 2
                              stackHeight: 3
                              programId: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                              rawAccounts:
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              rawData: jHqzogtBj1ey3
                              summary:
                                type: transfer
                                description: >-
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                  đã chuyển 612181.177082
                                  3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  từ
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                  đến
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                parsedData: null
                              programName: token_2022
                              instructionName: transfer_checked
                              decoded:
                                args:
                                  amount: '612181177082'
                                  decimals: 6
                                accounts:
                                  - name: source_account
                                    pubkey: >-
                                      7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                    isSigner: false
                                    isWritable: true
                                  - name: mint
                                    pubkey: >-
                                      3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                    isSigner: false
                                    isWritable: false
                                  - name: destination_account
                                    pubkey: >-
                                      7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                    isSigner: false
                                    isWritable: true
                                  - name: owner_or_delegate
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: true
                                    isWritable: false
                            - instructionIndex: 2
                              innerInstructionIndex: 3
                              stackHeight: 3
                              programId: '11111111111111111111111111111111'
                              rawAccounts:
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              rawData: 3Bxs4E6xqUKPTjRy
                              summary:
                                type: transfer
                                description: >-
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  đã chuyển 0.004207183 SOL đến
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                parsedData: null
                              programName: system
                              instructionName: transfer
                              decoded:
                                args:
                                  lamports: '4207183'
                                accounts:
                                  - name: funding_account
                                    pubkey: >-
                                      BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                    isSigner: true
                                    isWritable: true
                                  - name: recipient_account
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: false
                                    isWritable: true
                            - instructionIndex: 2
                              innerInstructionIndex: 4
                              stackHeight: 3
                              programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawAccounts:
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                              rawData: >-
                                8jV3ThAnvn3jwQVVxYoxU8MvQQneX8ryEqnGqWTeKGi8UcTcTFd5VQ8KLpzRZhN2g6qpShcNYKQ6aEiZojgETaWrW1Mn92Drm2irNbjBdHGCTkuK3SBZb4HSn6KPZiJehmZL1aPNtVSRmGh2ojKXZLFtokDPK31XJJJZYBMowkVME4yWDsiA81AKAyJYq3afuYidCUgWsSfzSo8tZZRtCpSaeUd3M5JeyiE9V45vsDuPYsyBxmVFWf3qKWEcQuCDYu5HctwzvAeqU6Hmr1st5Kd62GrbHxua73RLuXpHotAjm3wYD6BkKEtKDpSnq47ewySqeUgF8MrTc121NwjKhedGJfp1VWv4TULoKaNTuA9KRzYVsTNgjYuwSgiXxQF2F1ePSHexBQdTiMbL1STcahdzuLvZoRkEUQX1WE9ayykQ1uiJ1FPFNCitKm6YwpLLLVwDDi8Rf2J5aeHxtLorKV5UWn1CnRukDpSJxAC91mmc6qNcJ6XQW5VxJMdhJcSSmSr1hi4dUt1vW6gspsMxEMUzGtiyBZeo
                              summary: null
                              programName: pump
                              instructionName: TradeEvent
                              decoded:
                                args:
                                  buyback_fee: '0'
                                  buyback_fee_basis_points: '0'
                                  cashback: '0'
                                  cashback_fee_basis_points: '0'
                                  creator: 2G5ZssGjViBdr4DdwYaQ23JQeNG8TRsrnHKs9pabUoCz
                                  creator_fee: '0'
                                  creator_fee_basis_points: '0'
                                  current_sol_volume: '0'
                                  fee: '0'
                                  fee_basis_points: '0'
                                  fee_recipient: GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                  holder_rewards: '0'
                                  holder_rewards_bps: '0'
                                  is_buy: true
                                  ix_name: buy
                                  last_update_timestamp: '0'
                                  mayhem_mode: true
                                  mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  quote_amount: '4207183'
                                  quote_mint: '11111111111111111111111111111111'
                                  real_quote_reserves: '27976582'
                                  real_sol_reserves: '27976582'
                                  real_token_reserves: '793353696151809'
                                  shareholders: []
                                  sol_amount: '4207183'
                                  timestamp: '1792848886'
                                  token_amount: '612181177082'
                                  total_claimed_tokens: '0'
                                  total_unclaimed_tokens: '0'
                                  track_volume: false
                                  user: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  virtual_quote_reserves: '8676477109'
                                  virtual_sol_reserves: '8676477109'
                                  virtual_token_reserves: '1073253696151809'
                                accounts: []
                            - instructionIndex: 2
                              innerInstructionIndex: 5
                              stackHeight: 2
                              programId: MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                              rawAccounts:
                                - 8FoNgzmjuSmiy86EPCWxvv1q7oJSu2WGA7wPymwki2LJ
                              rawData: >-
                                HaAvdxyruSvtMDoMtGvePmYV4dda7tWKCLFHadQoSjYsbWWixs1eN1wCF27wUxZao1NfTPQGxhVs9GXmaVGUZ5mgBAEUUWKK4se3JtE5oKMHzxp6GRbR7wagdMtwKQEaJbXuMb9c75n3gPnTTFrxTjJrtBCejTAEQpd6mv9HUaxpt2u83Cts4WgXdvWqiHqk7xXkXQwV6M1VXmAfwZYg4CSjzAmooqqAdzbHuf243dbws8uDS4GrteXQiAYow3395wuNqLWzrcHropQTzvaDtpfAupYXEt2AZHPEuUsVhtt5n8xAieU5d4oHSjAvgBczW9cktco7Wto3kEo53QaJfbdEz4V9Jnx6ib2fdvW2EpLXUprJLcP9voTKAuuCZCTbQKSbwJWRG9UCPTssTDR3m9eE38WcqtK1v2jeRtbtK
                              summary: null
                              programName: null
                              instructionName: null
                              decoded: null
                    paginationToken: '460869102:203'
                    scan:
                      stoppedOn: limit
                      scannedTransactions: 1
                      matchedTransactions: 1
                      scannedThrough:
                        slot: 460869102
                        blockTime: 1792848886
                      creditsCharged: 11
                Stopped on budget, no matches:
                  value:
                    data: []
                    paginationToken: '460903064:422'
                    scan:
                      stoppedOn: budget
                      scannedTransactions: 2000
                      matchedTransactions: 0
                      scannedThrough:
                        slot: 460903064
                        blockTime: 1792856105
                      creditsCharged: 12
                Count shape:
                  value:
                    paginationToken: '460903064:422'
                    scan:
                      stoppedOn: budget
                      scannedTransactions: 2000
                      matchedTransactions: 0
                      scannedThrough:
                        slot: 460903064
                        blockTime: 1792856105
                      creditsCharged: 12
        '400':
          description: Yêu cầu không hợp lệ. Thông báo `error` nêu rõ vấn đề.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: >-
                      không tìm thấy các lệnh match.programs trong IDL của
                      6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P: not_a_real_ix
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          description: >-
            Dịch vụ đã đạt giới hạn dung lượng hoặc trang lịch sử đầu tiên không
            hoàn tất trước thời hạn của yêu cầu. Hãy thử lại yêu cầu.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: dịch vụ không khả dụng
components:
  schemas:
    ScanRequest:
      type: object
      description: >-
        Nội dung yêu cầu để quét lịch sử của một địa chỉ nhằm tìm các giao dịch
        khớp.
      required:
        - address
        - match
      additionalProperties: false
      properties:
        address:
          type: string
          description: Địa chỉ có lịch sử được quét.
        match:
          $ref: '#/components/schemas/ScanMatch'
        returnShape:
          type: string
          description: >-
            Nội dung phản hồi chứa cho các kết quả khớp: `transactions` (các kết
            quả khớp đã phân tích trong `data`, tối đa `limit`), `signatures`
            (`signature`, `slot`, `transactionIndex` và `blockTime` cho mỗi kết
            quả khớp trong `data`) hoặc `count` (không có `data`;
            `scan.matchedTransactions` là số lượng kết quả khớp). `signatures`
            và `count` bỏ qua `limit` và `rawTransaction`.
          enum:
            - transactions
            - signatures
            - count
          default: transactions
        limit:
          type: integer
          description: >-
            Số kết quả khớp tối đa cần trả về với cấu trúc `transactions`, từ 1
            đến 100.
          minimum: 1
          maximum: 100
          default: 100
        budget:
          $ref: '#/components/schemas/ScanBudget'
        beforeSignature:
          type: string
          description: Quét các giao dịch trước chữ ký này.
        afterSignature:
          type: string
          description: Quét các giao dịch sau chữ ký này.
        paginationToken:
          type: string
          description: >-
            Con trỏ do lần quét trước trả về. Có cấu trúc
            `slot:transactionIndex`.
        sortOrder:
          type: string
          description: Thứ tự quét lịch sử và trả về các kết quả khớp.
          enum:
            - asc
            - desc
          default: desc
        commitment:
          type: string
          description: >-
            Mức commitment dùng để truy xuất lịch sử. `processed` không được hỗ
            trợ.
          enum:
            - confirmed
            - finalized
          default: confirmed
        status:
          type: string
          description: >-
            Kết quả thực thi cần bao gồm. Quá trình lọc diễn ra trước khi đối
            sánh, vì vậy các giao dịch bị loại trừ không được tính vào ngân
            sách.
          enum:
            - succeeded
            - failed
            - any
          default: succeeded
        tokenAccounts:
          allOf:
            - $ref: '#/components/schemas/TokenAccountsFilter'
          description: >-
            Có bao gồm các giao dịch chỉ tham chiếu đến tài khoản token thuộc sở
            hữu của `address`, chứ không tham chiếu trực tiếp đến `address`, hay
            không: `none` loại trừ chúng, `balanceChanged` bao gồm các giao dịch
            làm thay đổi số dư tài khoản token và `all` bao gồm tất cả. Dùng
            `balanceChanged` khi quét ví theo mint.
        minContextSlot:
          type: integer
          description: Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá.
        rawTransaction:
          allOf:
            - $ref: '#/components/schemas/RawTransactionEncoding'
          description: >-
            Kiểu mã hóa của giao dịch Solana gốc được trả về dưới dạng
            `rawTransaction` trong mỗi kết quả thành công, theo cấu trúc
            `getTransaction`. Chỉ áp dụng cho cấu trúc `transactions`.
        slot:
          allOf:
            - $ref: '#/components/schemas/ComparisonBounds'
          description: Các giới hạn so sánh slot. Mỗi giới hạn đều không bắt buộc.
        time:
          allOf:
            - $ref: '#/components/schemas/ComparisonBounds'
          description: >-
            Các giới hạn so sánh thời gian khối theo giây Unix. Mỗi giới hạn đều
            không bắt buộc.
    ScanPage:
      type: object
      description: >-
        Các kết quả khớp theo `returnShape` được yêu cầu và bản tóm tắt quá
        trình quét.
      properties:
        data:
          description: >-
            Các kết quả khớp theo `sortOrder`. Với `transactions`, mỗi mục có
            cùng cấu trúc `TransactionResult` do
            `/v1/parsed-events/transactions` trả về; với `signatures`, mỗi mục
            là một `ScanSignature`. Không có trường này với `count`. Có thể
            trống khi có `paginationToken`.
          oneOf:
            - type: array
              title: Giao dịch
              items:
                $ref: '#/components/schemas/TransactionResult'
            - type: array
              title: Chữ ký
              items:
                $ref: '#/components/schemas/ScanSignature'
        paginationToken:
          type: string
          description: >-
            Con trỏ nơi lần quét tiếp theo tiếp tục. Không có khi quá trình quét
            đã đến cuối lịch sử hoặc cửa sổ.
        scan:
          $ref: '#/components/schemas/ScanSummary'
    ErrorResponse:
      type: object
      description: Phản hồi lỗi ở cấp yêu cầu.
      properties:
        error:
          type: string
          description: Thông báo lỗi.
    ScanMatch:
      type: object
      description: >-
        Các điều kiện mà một giao dịch phải khớp. Đặt `programs`, `mints` hoặc
        cả hai. Khi đặt cả hai, giao dịch phải khớp cả hai.
      additionalProperties: false
      properties:
        programs:
          type: array
          description: >-
            Các chương trình cần đối sánh, tối đa 20 chương trình, mỗi chương
            trình chỉ xuất hiện một lần. Một giao dịch khớp khi có lệnh của bất
            kỳ chương trình nào trong số đó, ở cấp cao nhất hoặc bên trong
            (CPI), trong `scope` của chương trình.
          maxItems: 20
          items:
            $ref: '#/components/schemas/ScanProgramMatch'
        mints:
          type: array
          description: >-
            Các mint cần đối sánh, tối đa 20 mint, mỗi mint chỉ xuất hiện một
            lần. Một giao dịch khớp khi một trong các số dư token trước hoặc sau
            giao dịch thuộc một trong các mint này, trong `scope` của mint.
          maxItems: 20
          items:
            $ref: '#/components/schemas/ScanMintMatch'
    ScanBudget:
      type: object
      description: Giới hạn lượng lịch sử mà một yêu cầu quét.
      additionalProperties: false
      properties:
        maxScannedTransactions:
          type: integer
          description: Số giao dịch tối đa cần quét trong yêu cầu này, từ 1 đến 10.000.
          minimum: 1
          maximum: 10000
          default: 10000
    TokenAccountsFilter:
      type: string
      description: >-
        Có bao gồm các giao dịch chỉ tham chiếu đến tài khoản token thuộc sở hữu
        của `address`, chứ không tham chiếu trực tiếp đến `address`, hay không:
        `none` loại trừ chúng, `balanceChanged` bao gồm các giao dịch làm thay
        đổi số dư tài khoản token và `all` bao gồm tất cả.
      enum:
        - none
        - balanceChanged
        - all
      default: none
    RawTransactionEncoding:
      type: string
      description: >-
        Kiểu mã hóa của giao dịch Solana gốc được trả về dưới dạng
        `rawTransaction` trong mỗi kết quả thành công, theo cấu trúc
        `getTransaction`. `none` không trả về giao dịch thô.
      enum:
        - none
        - json
        - jsonParsed
        - base64
      default: none
    ComparisonBounds:
      type: object
      description: Các giới hạn so sánh dạng số. Mỗi trường là tùy chọn.
      additionalProperties: false
      properties:
        gt:
          type: integer
          description: Khớp với các giá trị lớn hơn giá trị này.
        gte:
          type: integer
          description: Khớp với các giá trị lớn hơn hoặc bằng giá trị này.
        lt:
          type: integer
          description: Khớp với các giá trị nhỏ hơn giá trị này.
        lte:
          type: integer
          description: Khớp với các giá trị nhỏ hơn hoặc bằng giá trị này.
    TransactionResult:
      type: object
      description: Kết quả phân tích cú pháp cho từng chữ ký.
      properties:
        signature:
          type: string
          description: Chữ ký giao dịch của mục này.
        parserStatus:
          type: string
          description: >-
            `OK` khi phân tích cú pháp thành công hoặc `ERROR` khi không thể
            truy xuất hay phân tích cú pháp mục này.
          enum:
            - OK
            - ERROR
        parsed:
          allOf:
            - $ref: '#/components/schemas/ParsedTransaction'
          description: Đối tượng giao dịch đã phân tích. Có mặt khi `parserStatus` là `OK`.
        parserError:
          allOf:
            - $ref: '#/components/schemas/ParserError'
          description: Lỗi ở cấp mục. Có mặt khi `parserStatus` là `ERROR`.
        rawTransaction:
          type: object
          description: >-
            Giao dịch Solana gốc theo cấu trúc `getTransaction` với kiểu mã hóa
            `rawTransaction` được yêu cầu. Với `base64`, `transaction` là
            `[data, "base64"]`. Chỉ xuất hiện khi yêu cầu giao dịch thô.
          additionalProperties: true
    ScanSignature:
      type: object
      description: >-
        Một kết quả khớp được trả về khi `returnShape` được đặt thành
        `signatures`.
      properties:
        signature:
          type: string
          description: Chữ ký giao dịch.
        slot:
          type: integer
          description: Slot chứa giao dịch.
        transactionIndex:
          type: integer
          description: Vị trí của giao dịch trong slot.
        blockTime:
          type: integer
          nullable: true
          description: Thời gian khối theo giây Unix, nếu có.
    ScanSummary:
      type: object
      description: Quá trình quét đã tiến đến đâu và lý do dừng.
      properties:
        stoppedOn:
          type: string
          description: >-
            Lý do quá trình quét dừng: `windowEnd` (cuối lịch sử hoặc cửa sổ),
            `limit` (đã trả về `limit` kết quả khớp), `budget` (đã quét
            `maxScannedTransactions`) hoặc `deadline` (đã đạt giới hạn thời gian
            của yêu cầu).
          enum:
            - windowEnd
            - limit
            - budget
            - deadline
        scannedTransactions:
          type: integer
          description: Các giao dịch được quét trong yêu cầu này.
        matchedTransactions:
          type: integer
          description: >-
            Số kết quả khớp được tìm thấy trong yêu cầu này. Khi `returnShape`
            được đặt thành `count`, đây là kết quả.
        scannedThrough:
          allOf:
            - $ref: '#/components/schemas/ScannedThrough'
          description: Giao dịch cuối cùng đã quét. Không có khi chưa quét giao dịch nào.
        creditsCharged:
          type: integer
          description: >-
            Số credit bị tính: 10 cho mỗi yêu cầu cộng với 1 cho mỗi trang lịch
            sử được quét (tối đa 1.000 giao dịch mỗi trang).
    ScanProgramMatch:
      type: object
      description: >-
        Khớp các giao dịch có lệnh của `programId`, ở cấp cao nhất hoặc bên
        trong (CPI). Đặt `instructions`, `discriminators` hoặc cả hai để thu hẹp
        phạm vi đối sánh; không đặt trường nào để khớp với mọi lệnh của chương
        trình.
      required:
        - programId
      additionalProperties: false
      properties:
        programId:
          type: string
          description: Địa chỉ chương trình.
        instructions:
          type: array
          description: >-
            Tên lệnh từ bất kỳ phiên bản IDL nào của chương trình, theo cách
            viết trong IDL hoặc theo snake_case. Tối đa 50. Có thể kết hợp với
            `discriminators`.
          maxItems: 50
          items:
            type: string
        discriminators:
          type: array
          description: >-
            Tiền tố dữ liệu lệnh, mỗi tiền tố dài từ 1 đến 8 byte được mã hóa
            hex, với tiền tố `0x` không bắt buộc. Tối đa 50. Có thể kết hợp với
            `instructions`.
          maxItems: 50
          items:
            type: string
        scope:
          allOf:
            - $ref: '#/components/schemas/MatchScope'
          description: >-
            Những lệnh nào của chương trình được tính. `address` chỉ tính các
            lệnh có tài khoản là `address`, tài khoản token do `address` sở hữu
            hoặc tài khoản token có mint là `address`; hoặc tính mọi lệnh khi
            `address` là chương trình. `transaction` tính mọi lệnh của chương
            trình trong giao dịch.
    ScanMintMatch:
      type: object
      description: >-
        Khớp các giao dịch có số dư token trước hoặc sau giao dịch thuộc `mint`,
        trong `scope`. Mint SOL gốc
        `So11111111111111111111111111111111111111111` thay vào đó khớp theo thay
        đổi lamport, không tính phí được thu từ người trả phí.
      required:
        - mint
      additionalProperties: false
      properties:
        mint:
          type: string
          description: >-
            Địa chỉ mint token. Mint SOL gốc
            `So11111111111111111111111111111111111111111` khớp theo thay đổi
            lamport thay vì số dư token, không tính phí.
        scope:
          allOf:
            - $ref: '#/components/schemas/MatchScope'
          description: >-
            Những số dư token nào của mint được tính. `address` chỉ tính các số
            dư có tài khoản token là `address`, do địa chỉ đó sở hữu hoặc có
            mint là `address`. Với SOL gốc, chỉ các thay đổi đối với lamport của
            `address` được tính. `transaction` tính mọi số dư của mint trong
            giao dịch. Với SOL gốc, thay đổi đối với lamport của bất kỳ tài
            khoản nào cũng được tính.
    ParsedTransaction:
      type: object
      description: Mô hình giao dịch parser-v2.
      properties:
        slot:
          type: integer
          description: Slot chứa giao dịch.
        blockTime:
          type: integer
          description: Dấu thời gian Unix của khối, nếu có.
          nullable: true
        fee:
          type: integer
          description: Phí giao dịch tính bằng lamport.
        feePayer:
          type: string
          description: Tài khoản trả phí, nếu có.
          nullable: true
        transactionStatus:
          type: string
          description: >-
            `OK` khi giao dịch thực thi thành công hoặc `ERROR` khi thực thi
            thất bại.
          enum:
            - OK
            - ERROR
        nativeTransfers:
          type: array
          description: Các lần chuyển SOL ở cấp giao dịch, tính bằng lamport.
          items:
            $ref: '#/components/schemas/NativeTransfer'
        tokenTransfers:
          type: array
          description: Các lần chuyển SPL Token và Token-2022 ở cấp giao dịch.
          items:
            $ref: '#/components/schemas/TokenTransfer'
        summary:
          allOf:
            - $ref: '#/components/schemas/ParsedSummary'
          description: Bản tóm tắt tốt nhất ở cấp giao dịch, nếu có.
          nullable: true
        instructions:
          type: array
          description: >-
            Các lệnh cấp cao nhất và lệnh bên trong đã được phân tích theo thứ
            tự thực thi.
          items:
            $ref: '#/components/schemas/ParsedInstruction'
    ParserError:
      type: object
      description: Lỗi trình phân tích ở cấp mục.
      properties:
        code:
          type: string
          description: Mã lỗi trình phân tích mà máy có thể đọc.
        message:
          type: string
          description: Thông báo lỗi trình phân tích dễ đọc.
    ScannedThrough:
      type: object
      description: Vị trí của giao dịch cuối cùng đã quét.
      properties:
        slot:
          type: integer
          description: Slot của giao dịch cuối cùng đã quét.
        blockTime:
          type: integer
          nullable: true
          description: Thời gian khối của giao dịch cuối cùng đã quét, tính theo giây Unix.
    MatchScope:
      type: string
      description: >-
        Vị trí mà các lệnh của chương trình hoặc số dư token của mint phải xuất
        hiện để được tính.
      enum:
        - address
        - transaction
      default: address
    NativeTransfer:
      type: object
      description: Chuyển động SOL được phát hiện ở cấp giao dịch.
      properties:
        fromUserAccount:
          type: string
          description: Tài khoản gửi lamport.
          nullable: true
        toUserAccount:
          type: string
          description: Tài khoản nhận lamport.
          nullable: true
        amount:
          type: integer
          description: Số lượng tính bằng lamport.
    TokenTransfer:
      type: object
      description: Chuyển động SPL Token hoặc Token-2022 được phát hiện ở cấp giao dịch.
      properties:
        fromUserAccount:
          type: string
          description: Chủ sở hữu hoặc bên có thẩm quyền ở phía nguồn, nếu xác định được.
          nullable: true
        toUserAccount:
          type: string
          description: Chủ sở hữu ở phía đích, nếu xác định được.
          nullable: true
        fromTokenAccount:
          type: string
          description: Tài khoản token nguồn.
          nullable: true
        toTokenAccount:
          type: string
          description: Tài khoản token đích.
          nullable: true
        rawTokenAmount:
          type: integer
          description: Số lượng token thô dạng số nguyên.
        decimals:
          type: integer
          description: Số chữ số thập phân của mint được dùng để diễn giải số lượng thô.
        tokenStandard:
          type: string
          description: >-
            Tiêu chuẩn token khi xác định được, chẳng hạn như `Fungible` hoặc
            `UnknownStandard`.
        mint:
          type: string
          description: Địa chỉ mint của token.
    ParsedSummary:
      type: object
      description: Bản tóm tắt dễ đọc về một giao dịch hoặc lệnh.
      properties:
        type:
          type: string
          description: >-
            Loại tóm tắt, chẳng hạn như `swap`, `transfer` hoặc
            `create_account`.
        description:
          type: string
          description: Văn bản tóm tắt dễ đọc.
        parsedData:
          type: object
          description: >-
            Payload có cấu trúc phía sau bản tóm tắt, nếu có — ví dụ: siêu dữ
            liệu hoán đổi gồm `protocol`, `kind`, số lượng và mint. Cấu trúc
            thay đổi tùy theo loại tóm tắt và giao thức.
          nullable: true
          additionalProperties: true
    ParsedInstruction:
      type: object
      description: Lệnh cấp cao nhất hoặc lệnh bên trong đã được phân tích.
      properties:
        instructionIndex:
          type: integer
          description: Chỉ mục lệnh cấp cao nhất.
        innerInstructionIndex:
          type: integer
          description: Chỉ mục lệnh bên trong thuộc lệnh cấp cao nhất, nếu áp dụng.
          nullable: true
        stackHeight:
          type: integer
          description: Chiều cao ngăn xếp, nếu có.
          nullable: true
        programId:
          type: string
          description: ID chương trình đã thực thi lệnh.
        rawAccounts:
          type: array
          description: >-
            Các khóa công khai của tài khoản thô được phân giải từ chỉ mục tài
            khoản của lệnh.
          items:
            type: string
        rawData:
          type: string
          description: Dữ liệu lệnh thô.
        summary:
          allOf:
            - $ref: '#/components/schemas/ParsedSummary'
          description: Bản tóm tắt ở cấp lệnh, nếu có.
          nullable: true
        programName:
          type: string
          description: Tên chương trình mà trình phân tích nhận biết, nếu có.
          nullable: true
        instructionName:
          type: string
          description: Tên lệnh đã giải mã, nếu có.
          nullable: true
        decoded:
          allOf:
            - $ref: '#/components/schemas/DecodedInstruction'
          description: Các đối số và tài khoản đã giải mã, khi giải mã thành công.
          nullable: true
    DecodedInstruction:
      type: object
      description: Các đối số lệnh và tài khoản có tên đã được giải mã.
      properties:
        args:
          type: object
          description: >-
            Các đối số lệnh đã giải mã. Tên và cấu trúc đối số phụ thuộc vào
            lệnh.
          additionalProperties: true
        accounts:
          type: array
          description: Các tài khoản lệnh đã giải mã với tên mà trình phân tích nhận biết.
          items:
            $ref: '#/components/schemas/DecodedAccount'
    DecodedAccount:
      type: object
      description: Tài khoản có tên được một lệnh đã giải mã sử dụng.
      properties:
        name:
          type: string
          description: Tên tài khoản mà trình phân tích nhận biết.
        pubkey:
          type: string
          description: Khóa công khai của tài khoản.
        isSigner:
          type: boolean
          description: Cho biết tài khoản có ký giao dịch hay không.
        isWritable:
          type: boolean
          description: Cho biết tài khoản có thể ghi đối với lệnh hay không.
  responses:
    InternalError:
      description: >-
        Yêu cầu thất bại trên máy chủ, chẳng hạn vì không thể giải mã một giao
        dịch đã lưu trong phạm vi được yêu cầu. Toàn bộ yêu cầu thất bại; không
        trả về kết quả một phần.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            default:
              value:
                error: lỗi máy chủ nội bộ
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.