Ana içeriğe atla

Genel Bakış

OrbitFlare, Solana’nın başlatılmasından bu yana her blok, işlem ve hesap durumunu koruyan tam arşiv düğümleri çalıştırır. Standart RPC sağlayıcıları genellikle depolamadan tasarruf etmek için eski verileri budayarak yalnızca son epoch’ları saklar. OrbitFlare ile Solana geçmişindeki herhangi bir slotu sorgulayabilirsiniz.

Kullanım Senaryoları

Geçmiş blok zinciri verileri çeşitli önemli iş akışlarını mümkün kılar:
  • Olay kurtarma: İndeksleyici kesintisi veya webhook hataları sonrasında kaçırılan işlemleri geri doldurun
  • Uyumluluk: Denetimler ve düzenleyici gereksinimler için işlem kayıtlarını alın
  • Araştırma: Zaman içinde zincir üstü eğilimleri, token dağılımlarını ve protokol metriklerini analiz edin
  • Gezgin uygulamaları: Eksiksiz geçmişi gösteren blok gezginleri ve gösterge tabloları oluşturun

İlgili RPC Yöntemleri

Bu yöntemler OrbitFlare’in arşiv düğümlerinde geçmiş sorguları destekler:

Blok Yöntemleri

YöntemAçıklama
getBlockHerhangi bir slot için tam blok verisi alın
getBlocksİki slot arasındaki onaylanmış blokların listesini alın
getBlocksWithLimitBir slottan başlayarak limitle onaylanmış blokları alın
getBlockTimeBir blok için tahmini Unix zaman damgasını alın
getBlockHeightMevcut blok yüksekliğini alın
getFirstAvailableBlockBlok verisi olan en düşük slotu alın

İşlem Yöntemleri

YöntemAçıklama
getTransactionİmzayla onaylanmış bir işlem alın
getSignaturesForAddressBir adres için işlem imzaları alın
getSignatureStatusesİşlem imzalarının durumunu alın

Hesap Yöntemleri

YöntemAçıklama
getAccountInfoHesap verisi alın (yalnızca mevcut durum)
getMultipleAccountsBir çağrıda birden fazla hesap için veri alın
getProgramAccountsBir program tarafından sahip olunan tüm hesapları alın

Slot Yöntemleri

YöntemAçıklama
getSlotMevcut slotu alın
minimumLedgerSlotDüğümün veri sakladığı en düşük slotu alın

Örnekler

Geçmişten Bir Blok Alın

getBlock kullanarak slot 100.000.000 için blok verisi getirin:
curl https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBlock",
  "params": [
    100000000,
    {
      "encoding": "json",
      "transactionDetails": "full",
      "rewards": false,
      "maxSupportedTransactionVersion": 0
    }
  ]
}'

Blok Zaman Damgasını Alın

getBlockTime kullanarak belirli bir bloğun ne zaman üretildiğini bulun:
curl https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBlockTime",
  "params": [100000000]
}'

Bir Aralıktaki Blokları Listeleyin

getBlocks kullanarak iki slot arasındaki tüm onaylanmış blokları alın:
curl https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBlocks",
  "params": [100000000, 100000100]
}'

Bir İşlem Alın

getTransaction kullanarak imzayla işlem ayrıntılarını alın:
curl https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getTransaction",
  "params": [
    "5wHu1qwD7q5menP8rgbzknAHruqg7rq1BwLNjmKnMwVH2VNhVvPLT6jGfKNLwKUTG4Xn2vRvDz5Q6Z8zCLN5gLp1",
    {
      "encoding": "json",
      "maxSupportedTransactionVersion": 0
    }
  ]
}'

Bir Adres için İşlem Geçmişi Alın

getSignaturesForAddress kullanarak bir adres için imzaları alın:
curl https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getSignaturesForAddress",
  "params": [
    "Vote111111111111111111111111111111111111111",
    {"limit": 100}
  ]
}'

TypeScript Örnekleri

Geçmiş Blok Verisi Getirme

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

const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY');

async function getHistoricalBlock(slot: number) {
  const block = await connection.getBlock(slot, {
    maxSupportedTransactionVersion: 0,
  });

  if (block) {
    console.log(`Block ${slot}:`);
    console.log(`  Transactions: ${block.transactions.length}`);
    console.log(`  Block time: ${block.blockTime}`);
    console.log(`  Parent slot: ${block.parentSlot}`);
  }

  return block;
}

// 2023'ün başından bir blok getir
const block = await getHistoricalBlock(175000000);

Eksiksiz İşlem Geçmişi Oluşturun

Tam geçmiş oluşturmak için getSignaturesForAddress ile getTransaction’ı birleştirin:
import { Connection, PublicKey } from '@solana/web3.js';

const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR_LICENSE_KEY');

async function getFullTransactionHistory(address: string) {
  const pubkey = new PublicKey(address);
  const allTransactions = [];
  let before: string | undefined;

  // Tüm imzalar arasında sayfalama yap
  while (true) {
    const signatures = await connection.getSignaturesForAddress(pubkey, {
      limit: 1000,
      before,
    });

    if (signatures.length === 0) break;

    // Tam işlem verisini toplu olarak getir
    for (let i = 0; i < signatures.length; i += 10) {
      const batch = signatures.slice(i, i + 10);
      const txs = await Promise.all(
        batch.map(sig =>
          connection.getTransaction(sig.signature, {
            maxSupportedTransactionVersion: 0,
          })
        )
      );
      allTransactions.push(...txs.filter(tx => tx !== null));
    }

    before = signatures[signatures.length - 1].signature;
  }

  return allTransactions;
}

Zaman Aralığındaki Blokları Sorgulayın

Belirli bir zaman dilimindeki blokları bulun:
async function getBlocksInTimeRange(startTime: number, endTime: number) {
  // Başlangıç slotu tahmini al
  const currentSlot = await connection.getSlot();
  const currentTime = Math.floor(Date.now() / 1000);

  // Solana saniyede ~2-3 blok üretir
  const slotsPerSecond = 2.5;
  const estimatedStartSlot = currentSlot - Math.floor((currentTime - startTime) * slotsPerSecond);

  const blocks = [];
  let slot = estimatedStartSlot;

  while (true) {
    const blockTime = await connection.getBlockTime(slot);

    if (blockTime && blockTime >= startTime && blockTime <= endTime) {
      const block = await connection.getBlock(slot, {
        maxSupportedTransactionVersion: 0,
      });
      if (block) blocks.push({ slot, block });
    }

    if (blockTime && blockTime > endTime) break;
    slot++;
  }

  return blocks;
}

Performans İpuçları

  1. İsteklerinizi toplu yapın: Birden fazla blok veya işlemi tek bir çağrıda getirmek için JSON-RPC toplu istekler kullanın
  2. Büyük sorguları sayfalayın: getSignaturesForAddress yöntemi çağrı başına 1000 imzaya kadar döndürür — sayfalama için before parametresini kullanın
  3. Dikkatli paralelize edin: Hız ve hız sınırları arasında denge kurmak için 10-20’lik paralel toplu işlem parçaları halinde işlem getirin
  4. Değişmez verileri önbelleğe alın: Geçmiş bloklar ve işlemler onaylandıktan sonra hiçbir zaman değişmez — yerel olarak önbelleğe alın
  5. maxSupportedTransactionVersion kullanın: Sürümlü işlemleri işlemek için bu parametreyi her zaman dahil edin

Sınırlamalar

Hesap durum geçmişi: Solana düğümleri geçmiş anlık görüntüleri değil mevcut hesap durumunu saklar. Bir hesabı değiştiren işlemleri alabilirsiniz, ancak belirli bir geçmiş slottaki hesabın bakiyesini veya verisini alamazsınız. Hız sınırları: Geçmiş sorgular daha fazla kaynak tüketebilir. Planınızın hız sınırlarını kontrol edin ve uygun kısıtlama uygulayın.

Daha Hızlı İşlem Geçmişi

Verimli adres geçmişi sorguları için, imza aramasını ve işlem alımını filtreleme ve sıralama seçenekleriyle tek bir çağrıda birleştiren getTransactionsForAddress kullanın.

Yönetilen Geri Doldurmalar

Özel ETL ardışık düzenleri yazmadan büyük ölçekli geçmiş veri teslimatına ihtiyaç duyan ekipler için OrbitFlare Yönetilen Geri Doldurmalar hizmeti sunar.
Yönetilen Geri Doldurmalar kurumsal bir hizmettir. Gereksinimlerinizi görüşmek için Discord’da ekiple iletişime geçin veya sales@orbitflare.com adresine e-posta gönderin.

Ne Yapar

OrbitFlare mühendisleri, yapılandırılmış Solana geçmiş verilerini doğrudan depolamanıza çıkarır ve iletir:
Çıktı FormatıDesteklenen Hedefler
JSON (satır sınırlı)AWS S3, Google Cloud Storage
ParquetAWS S3, Google Cloud Storage
SQLPostgreSQL, ClickHouse

Ne Teslim Edilebilir

  • Belirli bir program, cüzdan veya token mint için tüm işlemler
  • Herhangi bir slot aralığı için tam blok verisi
  • Token transfer geçmişi (SPL Token / Token-2022)
  • Gereksinimlerinize göre özel sorgular ve veri şekilleri

SLA

ÖğeAyrıntı
Teslim süresiStandart geri doldurmalar için 3–5 iş günü
Veri kapsamıGenesis (Mart 2020)‘ten günümüze
FormatJSON, Parquet veya SQL — tercihinize göre
Özel destekİş süresi boyunca atanan mühendis

Ne Zaman Kullanılır

Yönetilen Geri Doldurmalar şunlar için en uygundur:
  • Yeni bir indeksleyici veya analitik veritabanı tohumlama
  • Tek seferlik uyumluluk veya denetim verisi talepleri
  • Geçmiş ML/AI eğitim veri setleri
  • Uzun kesintiden sonra geri doldurma
Yeni verilerin devam eden akışı için bunun yerine gRPC akışı uç noktalarını kullanın.