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

# Cách sử dụng getBlockProduction

> Tìm hiểu các trường hợp sử dụng, ví dụ mã, tham số yêu cầu, cấu trúc phản hồi và mẹo dành cho getBlockProduction.

Phương thức RPC [`getBlockProduction`](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) cung cấp thông tin về hoạt động sản xuất khối trong epoch hiện tại hoặc một phạm vi slot được chỉ định. Phương thức này có thể truy xuất dữ liệu cho tất cả trình xác thực hoặc một danh tính trình xác thực cụ thể. Thông tin này hữu ích để giám sát hiệu suất của trình xác thực và tìm hiểu các mô hình sản xuất khối trên mạng.

## Các trường hợp sử dụng phổ biến

* **Giám sát hiệu suất của trình xác thực:** Theo dõi số khối được tạo và các slot lãnh đạo của một trình xác thực cụ thể.
* **Phân tích hiệu suất epoch:** Xem tổng quan về hoạt động sản xuất khối của tất cả trình xác thực trong epoch hiện tại hoặc một epoch trước đó.
* **Xác định các slot bị bỏ lỡ:** Kiểm tra xem trình xác thực có bỏ lỡ các slot lãnh đạo được chỉ định hay không.
* **Kiểm tra tình trạng mạng:** Thu thập dữ liệu về hiệu quả sản xuất khối tổng thể.

## Tham số yêu cầu

Phương thức `getBlockProduction` chấp nhận một đối tượng cấu hình không bắt buộc với các tham số sau:

1. **`commitment`** (chuỗi, không bắt buộc): Chỉ định mức cam kết dùng cho truy vấn. Nếu bỏ qua, mức cam kết mặc định của nút sẽ được sử dụng.
2. **`range`** (đối tượng, không bắt buộc): Xác định phạm vi slot cần truy vấn.
   * `firstSlot` (u64): Slot đầu tiên cần lấy thông tin sản xuất khối (bao gồm slot này).
   * `lastSlot` (u64, không bắt buộc): Slot cuối cùng cần lấy thông tin sản xuất khối (bao gồm slot này). Nếu bỏ qua, phương thức sẽ trả về dữ liệu sản xuất khối của epoch hiện tại cho đến slot hiện tại.
3. **`identity`** (chuỗi, không bắt buộc): Khóa công khai được mã hóa base58 của danh tính trình xác thực. Nếu được cung cấp, phản hồi sẽ chỉ bao gồm thông tin sản xuất khối của trình xác thực cụ thể này. Nếu bỏ qua, phương thức sẽ trả về thông tin của tất cả trình xác thực trong phạm vi được chỉ định (hoặc epoch hiện tại).

**Lưu ý:** Phải cung cấp ít nhất một trong hai giá trị `identity` hoặc `range.firstSlot`. Nếu không cung cấp `identity` thì bắt buộc phải có tham số `range`.

## Cấu trúc phản hồi

Trường `result` của phản hồi JSON-RPC sẽ là một đối tượng chứa:

* `context` (đối tượng):
  * `slot` (u64): Slot tại thời điểm truy xuất thông tin.
* `value` (đối tượng):
  * `byIdentity` (đối tượng): Một đối tượng trong đó các khóa là chuỗi danh tính trình xác thực (khóa công khai được mã hóa base58), còn các giá trị là những đối tượng chứa:
    * `leaderSlots` (u64): Số slot lãnh đạo được chỉ định cho trình xác thực này trong phạm vi/epoch được truy vấn.
    * `blocksProduced` (u64): Số khối do trình xác thực này tạo ra trong phạm vi/epoch được truy vấn.
  * `range` (đối tượng):
    * `firstSlot` (u64): Slot đầu tiên của phạm vi được truy vấn.
    * `lastSlot` (u64): Slot cuối cùng của phạm vi được truy vấn.

## Mẹo dành cho nhà phát triển

* **Hiểu ranh giới epoch**: Khi truy vấn bằng `identity` mà không có `range`, dữ liệu được trả về thuộc epoch hiện tại cho đến slot mới nhất mà nút đã xử lý. Nếu cần dữ liệu của một epoch trước đó *đầy đủ* cho một trình xác thực cụ thể, bạn cần xác định `firstSlot` và `lastSlot` của epoch đó.
* **Khả năng cung cấp dữ liệu của nút**: Phạm vi dữ liệu sản xuất khối trong quá khứ có thể khác nhau giữa các nút RPC. Một số phạm vi slot quá cũ có thể không có trên tất cả các nút.
* **Giám sát hiệu suất**: `getBlockProduction` đóng vai trò quan trọng khi xây dựng bảng điều khiển hoặc cảnh báo liên quan đến thời gian hoạt động của trình xác thực và tỷ lệ sản xuất khối thành công.
* **Kết hợp với `getLeaderSchedule`**: Để phân tích chuyên sâu hơn, bạn có thể đối chiếu dữ liệu `getBlockProduction` với kết quả của `getLeaderSchedule` để xem những slot lãnh đạo cụ thể nào đã được tạo hoặc bị bỏ lỡ.
* **Danh tính so với tất cả trình xác thực**: Truy vấn không có `identity` có thể trả về lượng dữ liệu lớn, đặc biệt nếu không chỉ định `range` hoặc chỉ định một `range` rộng. Hãy lưu ý đến kích thước phản hồi và yêu cầu xử lý.

## Ví dụ

### 1. Lấy dữ liệu sản xuất khối của epoch hiện tại (tất cả trình xác thực)

Ví dụ này truy xuất dữ liệu sản xuất khối của tất cả trình xác thực trong epoch hiện tại.

<CodeGroup>
  ```bash cURL theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getEpochBlockProduction() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction();
      console.log('Block Production for Current Epoch:', JSON.stringify(blockProduction, null, 2));
      // Example: Accessing data for a specific validator (if present)
      // const specificValidatorIdentity = " deaktivCQ2sV2KF1y7n4qX1xUFk6VXL79CdfjrmLdshs"; // Replace with actual identity
      // if (blockProduction.value.byIdentity[specificValidatorIdentity]) {
      //   console.log(\`Data for \${specificValidatorIdentity}:\`, blockProduction.value.byIdentity[specificValidatorIdentity]);
      // }
    } catch (error) {
      console.error('Error fetching block production:', error);
    }
  }

  getEpochBlockProduction();
  ```
</CodeGroup>

### 2. Lấy dữ liệu sản xuất khối của một trình xác thực cụ thể trong epoch hiện tại

Ví dụ này truy xuất dữ liệu sản xuất khối của một danh tính trình xác thực cụ thể trong epoch hiện tại.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY with the actual validator's base58 public key.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY"
        }
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getValidatorBlockProduction(validatorIdentity) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({ identity: validatorIdentity });
      console.log(\`Block Production for \${validatorIdentity}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity}:\`, error);
    }
  }

  // Replace with the validator identity you want to query
  const validatorIdentity = "So11111111111111111111111111111111111111112"; // Example: Solana Foundation
  getValidatorBlockProduction(validatorIdentity);
  ```
</CodeGroup>

### 3. Lấy dữ liệu sản xuất khối cho một phạm vi slot và trình xác thực cụ thể

Ví dụ này truy xuất dữ liệu sản xuất khối của một trình xác thực cụ thể trong phạm vi slot đã xác định.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY, START_SLOT, and END_SLOT.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY",
          "range": {
            "firstSlot": START_SLOT, # e.g., 200000000
            "lastSlot": END_SLOT    # e.g., 200010000
          }
        }
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({
        identity: validatorIdentity,
        range: {
          firstSlot: firstSlot,
          lastSlot: lastSlot,
        },
      });
      console.log(\`Block Production for \${validatorIdentity} in range \${firstSlot}-\${lastSlot}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity} in range:\`, error);
    }
  }

  // Replace with your desired parameters
  const validatorIdentity = "Beefy1So11111111111111111111111111111111111"; // Example validator
  const firstSlot = 200000000; // Example start slot
  const lastSlot = 200010000;   // Example end slot
  getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot);
  ```
</CodeGroup>

Hướng dẫn này giúp bạn hiểu rõ cách sử dụng phương thức RPC `getBlockProduction` để phân tích hoạt động sản xuất khối trên Solana.

## Phương thức liên quan

<CardGroup cols={2}>
  <Card title="getLeaderSchedule" href="/docs/vi/api-reference/rpc/http/getleaderschedule">
    Lấy toàn bộ lịch lãnh đạo để đối chiếu với dữ liệu sản xuất
  </Card>

  <Card title="getVoteAccounts" href="/docs/vi/api-reference/rpc/http/getvoteaccounts">
    Lấy thông tin về tất cả trình xác thực tham gia bỏ phiếu
  </Card>
</CardGroup>
