Перейти к основному содержанию

getRecentBlockhash

Этот метод устарел. Пожалуйста, используйте getLatestBlockhash вместо него, который предоставляет более точную и надёжную информацию о blockhash.
Возвращает недавний blockhash и его расписание комиссий. Этот метод будет удалён в будущем релизе.

Параметры

config
object

Ответ

result
object

Руководство по миграции

Для перехода с getRecentBlockhash на getLatestBlockhash:
  1. Замените вызовы метода:
- const { blockhash, feeCalculator } = await connection.getRecentBlockhash();
+ const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash();
  1. Обновите расчёты комиссий:
// Old way
const fee = feeCalculator.lamportsPerSignature * numSignatures;

// New way
const fee = await connection.getFeeForMessage(message);

Примеры кода

Базовый запрос (устаревший)

curl https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getRecentBlockhash",
  "params": []
}'

Запрос с уровнем подтверждения (устаревший)

curl https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getRecentBlockhash",
  "params": [
    {
      "commitment": "confirmed"
    }
  ]
}'

Использование web3.js (устаревший)

import { Connection } from '@solana/web3.js';

const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');

// Get recent blockhash (deprecated)
const { value: { blockhash, feeCalculator } } = await connection.getRecentBlockhash();
console.log('Blockhash:', blockhash);
console.log('Fee per signature:', feeCalculator.lamportsPerSignature);

Примечания

  1. Этот метод устарел и будет удалён в будущем релизе
  2. Используйте getLatestBlockhash для новой разработки
  3. Blockhash действителен в течение ограниченного времени (обычно 150 слотов)
  4. Можно указывать разные уровни подтверждения
  5. Рассмотрите обновление существующего кода для использования новых методов

Рекомендации

  1. Перейдите на getLatestBlockhash для новой разработки
  2. Используйте getFeeForMessage для расчёта комиссий
  3. Отслеживайте истечение blockhash с помощью lastValidBlockHeight
  4. Обрабатывайте сетевые ошибки и выполняйте повторные попытки при необходимости
  5. Используйте подходящий уровень подтверждения в зависимости от ваших потребностей

Распространённые ошибки

КодСообщениеРешение
-32601Method not foundУбедитесь, что вы подключены к узлу Solana RPC
-32602Invalid paramsПроверьте параметры конфигурации
-32007Blockhash information unavailableУзел может выполнять начальную загрузку или синхронизацию

Сценарии использования

  1. Расчёт комиссии за транзакцию
    interface TransactionFee {
      blockhash: string;
      feePerSignature: number;
      totalFee: number;
      metadata: {
        timestamp: number;
        slot: number;
      };
    }
    
    async function calculateTransactionFees(
      numSignatures: number
    ): Promise<TransactionFee> {
      const { context, value } = await connection.getRecentBlockhash();
      
      return {
        blockhash: value.blockhash,
        feePerSignature: value.feeCalculator.lamportsPerSignature,
        totalFee: numSignatures * value.feeCalculator.lamportsPerSignature,
        metadata: {
          timestamp: Date.now(),
          slot: context.slot
        }
      };
    }
    
  2. Мониторинг blockhash
    interface BlockhashInfo {
      blockhash: string;
      slot: number;
      feePerSignature: number;
      metadata: {
        timestamp: number;
        age: number;
      };
    }
    
    class BlockhashMonitor {
      private currentBlockhash: string | null = null;
      private currentSlot: number | null = null;
      
      async monitorBlockhash(
        interval: number = 5000
      ): Promise<BlockhashInfo | null> {
        const { context, value } = await connection.getRecentBlockhash();
        
        if (this.currentBlockhash === value.blockhash) {
          return null;
        }
        
        this.currentBlockhash = value.blockhash;
        this.currentSlot = context.slot;
        
        return {
          blockhash: value.blockhash,
          slot: context.slot,
          feePerSignature: value.feeCalculator.lamportsPerSignature,
          metadata: {
            timestamp: Date.now(),
            age: 0
          }
        };
      }
    }
    
  3. Планирование транзакций
    interface TransactionPlan {
      blockhash: string;
      feePerSignature: number;
      estimatedFees: {
        single: number;
        batch: number;
      };
      metadata: {
        timestamp: number;
        slot: number;
      };
    }
    
    async function planTransactions(
      numTransactions: number,
      signaturesPerTransaction: number
    ): Promise<TransactionPlan> {
      const { context, value } = await connection.getRecentBlockhash();
      const feePerSignature = value.feeCalculator.lamportsPerSignature;
      
      return {
        blockhash: value.blockhash,
        feePerSignature,
        estimatedFees: {
          single: signaturesPerTransaction * feePerSignature,
          batch: numTransactions * signaturesPerTransaction * feePerSignature
        },
        metadata: {
          timestamp: Date.now(),
          slot: context.slot
        }
      };
    }