Genel Bakış
getTransactionsForAddress, işlem imzası aramasını ve tam işlem alımını tek bir verimli çağrıda birleştirir. getSignaturesForAddress ’e ve ardından her imza için getTransaction ’a ayrı istekler yapmak yerine, tek bir istekte her şeyi alırsınız.
Bu yöntem şunları destekler:
İki yönlü sıralama (en eskiden en yeniye veya en yeniden en eskiye)
Zaman ve slot tabanlı filtreleme
İşlem durumu filtreleme (başarılı/başarısız)
Token hesabı filtreleme
İmleç tabanlı sayfalama
Bu Yöntemi Neden Kullanmalısınız
N+1 Problemi
Standart Solana RPC yöntemleriyle işlem geçmişi getirmek birden fazla çağrı gerektirir:
İşlem imzalarının listesini almak için getSignaturesForAddress çağrısı yapın
Tam işlem verisini almak için her imza için getTransaction çağrısı yapın
100 işlemli bir cüzdan için bu 101 API çağrısı demektir. 1.000 işlem için 1.001 çağrı. Bu gecikme, karmaşıklık ve daha yüksek maliyet yaratır.
getTransactionsForAddress, tek bir çağrıda tam işlem verisi döndürerek bunu çözer — istek başına 100 tam işlem veya 1.000 imzaya kadar.
Ek Yetenekler
Verimlilik ötesinde bu yöntem, standart RPC’de mevcut olmayan özellikler sunar:
İki yönlü sıralama : Bir adresi ilk işleminden takip etmek için en eskiden en yeniye (asc) sorgulama
Zaman tabanlı filtreleme : Belirli bir tarih aralığındaki işlemleri alın
Slot tabanlı filtreleme : Belirli blok aralıklarından işlem sorgulama
Durum filtreleme : Yalnızca başarılı veya yalnızca başarısız işlemleri alın
Token hesabı dahil etme : İlgili token hesaplarından işlemleri yakalayın
Token Hesabı Desteği
Standart getSignaturesForAddress yalnızca sorgulanan adrese doğrudan atıfta bulunan işlemleri döndürür. Bu önemli bir kategoriyi kaçırır: token transferleri .
Tokenlar bir cüzdana gönderildiğinde, işlem cüzdan adresinin kendisine değil cüzdanın İlgili Token Hesabına (ATA) atıfta bulunur. Bu, standart yöntemlerin size eksik bir tablo sunduğu anlamına gelir.
tokenAccounts: "all" ile getTransactionsForAddress, adresin sahip olduğu tüm token hesaplarından işlemleri otomatik olarak dahil ederek eksiksiz işlem geçmişi sağlar.
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": "getTransactionsForAddress",
"params": [
"WALLET_ADDRESS",
{
"filters": {
"tokenAccounts": "all"
}
}
]
}'
Yalnızca adrese doğrudan atıfta bulunan işlemleri istiyorsanız tokenAccounts: "none" ayarlayın.
Parametreler
Sorgulanacak Solana adresi (base-58 kodlu genel anahtar)
Sorgu için kesinleşme düzeyi:
"finalized" - Yalnızca kesinleşmiş blokları sorgula (varsayılan)
"confirmed" - Onaylanmış blokları sorgula
Not: "processed" bu yöntem için desteklenmez. Döndürülecek ayrıntı düzeyi:
"signatures" - Yalnızca imzaları döndür (1000 sonuca kadar)
"full" - Tam işlem verisi döndür (100 sonuca kadar)
Varsayılan: "full" Döndürülecek maksimum sonuç sayısı.
transactionDetails: "full" için: maks. 100
transactionDetails: "signatures" için: maks. 1000
Varsayılan: 100 Sıralama yönü:
"desc" - En yeni işlemler önce (varsayılan)
"asc" - En eski işlemler önce
Sayfalama imleci. Bu imzadan önceki sonuçları döndür.
Sayfalama imleci. Bu imzadan sonraki sonuçları döndür.
Token hesabı ilişkisine göre filtrele:
"all" - Tüm token hesaplarından işlemleri dahil et
"none" - Token hesabı işlemlerini hariç tut
Varsayılan: "all" Unix zaman damgası. Bu zamandan önceki işlemleri döndür.
Unix zaman damgası. Bu zamandan sonraki işlemleri döndür.
Bu slottan önceki işlemleri döndür.
Bu slottan sonraki işlemleri döndür.
İşlem durumuna göre filtrele:
"success" - Yalnızca başarılı işlemler
"failed" - Yalnızca başarısız işlemler
Yanıt
Yanıt formatı transactionDetails parametresine bağlıdır.
transactionDetails: "full" ile
Tam işlem nesneleri dizisi, her biri şunları içerir: İşlem imzası (base-58 kodlu)
Bloğun Unix zaman damgası
İşlemin blok içindeki konumu. Bu alan getTransactionsForAddress’e özgüdür ve standart RPC yöntemlerinde mevcut değildir.
Mesaj, imzalar ve meta veri dahil tam işlem verisi
Ücret, bakiyeler ve günlükler dahil işlem meta verisi
transactionDetails: "signatures" ile
İmza nesneleri dizisi, her biri şunları içerir: İşlem imzası (base-58 kodlu)
Bloğun Unix zaman damgası
İşlemin blok içindeki konumu.
İşlem başarısız olduysa hata nesnesi, aksi halde null
Kod Örnekleri
Temel İstek
Bir adres için en son işlemleri alın:
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": "getTransactionsForAddress",
"params": [
"ADDRESS_HERE"
]
}'
Yalnızca İmzaları Alın
Tam işlem verisi olmadan 1000’e kadar imza alın:
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": "getTransactionsForAddress",
"params": [
"ADDRESS_HERE",
{
"transactionDetails": "signatures",
"limit": 1000
}
]
}'
Zaman Filtreli En Eskiden En Yeniye
Belirli bir zaman aralığından en eskiden en yeniye sıralanmış işlemleri alın:
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": "getTransactionsForAddress",
"params": [
"ADDRESS_HERE",
{
"sortOrder": "asc",
"filters": {
"afterTime": 1704067200,
"beforeTime": 1706745600
}
}
]
}'
Yalnızca Başarılı İşlemler
Yalnızca başarılı işlemleri döndürmek için filtreleyin:
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": "getTransactionsForAddress",
"params": [
"ADDRESS_HERE",
{
"filters": {
"status": "success"
}
}
]
}'
Sayfalanmış İstek
Daha fazla sonuç getirmek için imleç tabanlı sayfalama kullanın:
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": "getTransactionsForAddress",
"params": [
"ADDRESS_HERE",
{
"limit": 100,
"before": "LAST_SIGNATURE_FROM_PREVIOUS_RESPONSE"
}
]
}'
TypeScript Örneği
import { Connection } from '@solana/web3.js' ;
const connection = new Connection ( 'https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY' );
interface GetTransactionsOptions {
transactionDetails ?: 'full' | 'signatures' ;
limit ?: number ;
sortOrder ?: 'asc' | 'desc' ;
before ?: string ;
after ?: string ;
filters ?: {
tokenAccounts ?: 'all' | 'none' ;
beforeTime ?: number ;
afterTime ?: number ;
beforeSlot ?: number ;
afterSlot ?: number ;
status ?: 'success' | 'failed' ;
};
}
async function getTransactionsForAddress (
address : string ,
options : GetTransactionsOptions = {}
) {
const response = await fetch ( 'https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY' , {
method: 'POST' ,
headers: { 'Content-Type' : 'application/json' },
body: JSON . stringify ({
jsonrpc: '2.0' ,
id: 1 ,
method: 'getTransactionsForAddress' ,
params: [ address , options ],
}),
});
const data = await response . json ();
return data . result ;
}
// Son işlemleri al
const recent = await getTransactionsForAddress ( 'ADDRESS_HERE' );
// Zaman filtreliyle en eskiden en yeniye işlemleri al
const historical = await getTransactionsForAddress ( 'ADDRESS_HERE' , {
sortOrder: 'asc' ,
filters: {
afterTime: Math . floor ( Date . now () / 1000 ) - 86400 * 30 , // Son 30 gün
},
});
// Tüm işlemlerde sayfalama yap
async function getAllTransactions ( address : string ) {
const allTransactions = [];
let before : string | undefined ;
while ( true ) {
const batch = await getTransactionsForAddress ( address , {
limit: 100 ,
before ,
});
if ( ! batch || batch . length === 0 ) break ;
allTransactions . push ( ... batch );
before = batch [ batch . length - 1 ]. signature ;
}
return allTransactions ;
}
Kullanım Senaryoları
Token Lansmanı Analizi
İlk basıcıları ve erken sahipleri belirlemek için bir token mint’inin en erken işlemlerini bulun. Başlangıçtan itibaren başlamak için sortOrder: "asc" kullanın:
const earlyActivity = await getTransactionsForAddress ( tokenMintAddress , {
sortOrder: 'asc' ,
limit: 100 ,
filters: {
tokenAccounts: 'all' ,
},
});
Cüzdan Finansman Geçmişi
Eksiksiz işlem geçmişini sorgulayarak bir cüzdanın fonlarının kaynağını izleyin:
const fundingHistory = await getTransactionsForAddress ( walletAddress , {
sortOrder: 'asc' ,
filters: {
tokenAccounts: 'all' ,
},
transactionDetails: 'full' ,
});
// İlk işlemler genellikle finansman kaynaklarını ortaya çıkarır
const firstTransactions = fundingHistory . slice ( 0 , 10 );
Başarısız İşlem Analizi
Yalnızca başarısız işlemleri filtreleyerek işlem hatalarını hata ayıklayın:
const failedTxs = await getTransactionsForAddress ( walletAddress , {
filters: {
status: 'failed' ,
},
transactionDetails: 'full' ,
});
// Hata nedenlerini anlamak için hata günlüklerini analiz et
failedTxs . forEach ( tx => {
console . log ( tx . signature , tx . meta ?. err , tx . meta ?. logMessages );
});
Cüzdan İşlem Akışı Oluşturun
Cüzdan arayüzü için sayfalanmış işlem geçmişi oluşturun:
async function getWalletFeed ( wallet : string , cursor ?: string ) {
return getTransactionsForAddress ( wallet , {
limit: 20 ,
before: cursor ,
transactionDetails: 'full' ,
filters: {
tokenAccounts: 'all' ,
},
});
}
Alım Satım Deseni Analizi
Belirli bir zaman penceresinde başarılı alım satımları filtreleyin:
const trades = await getTransactionsForAddress ( traderWallet , {
filters: {
status: 'success' ,
afterTime: startOfMonth ,
beforeTime: endOfMonth ,
},
transactionDetails: 'full' ,
});
Uyumluluk Denetimi
Düzenleyici uyumluluk için eksiksiz işlem geçmişi oluşturun:
async function auditAddress ( address : string ) {
const allTxs = await getAllTransactions ( address );
return {
totalTransactions: allTxs . length ,
successful: allTxs . filter ( tx => ! tx . err ). length ,
failed: allTxs . filter ( tx => tx . err ). length ,
firstTransaction: allTxs [ allTxs . length - 1 ],
lastTransaction: allTxs [ 0 ],
};
}
Sayfalama
Çok sayıda işlemi olan adresler için sonuçlar arasında sayfalama yapmanız gerekir. Yöntem, before ve after parametrelerini kullanan imleç tabanlı sayfalamayı destekler.
Daha Yeni İşlemleri Getirme (Varsayılan)
sortOrder: "desc" (varsayılan) ile işlemler en yeniden eskiye döndürülür. Daha eski işlemler almak için before kullanın:
// İlk istek
const page1 = await getTransactionsForAddress ( address , { limit: 100 });
// Son imzayı imleç olarak kullanarak sonraki sayfayı alın
const lastSignature = page1 [ page1 . length - 1 ]. signature ;
const page2 = await getTransactionsForAddress ( address , {
limit: 100 ,
before: lastSignature ,
});
Daha Eski İşlemleri Önce Getirme
sortOrder: "asc" ile işlemler en eskiden yeniye döndürülür. Daha yeni işlemler almak için after kullanın:
// En eski işlemleri önce alın
const page1 = await getTransactionsForAddress ( address , {
sortOrder: 'asc' ,
limit: 100 ,
});
// Zaman içinde ilerlemeye devam edin
const lastSignature = page1 [ page1 . length - 1 ]. signature ;
const page2 = await getTransactionsForAddress ( address , {
sortOrder: 'asc' ,
limit: 100 ,
after: lastSignature ,
});
Eksiksiz Sayfalama Örneği
Bir adres için tüm işlemleri getirin:
async function getAllTransactions ( address : string ) {
const allTransactions = [];
let cursor : string | undefined ;
while ( true ) {
const batch = await getTransactionsForAddress ( address , {
limit: 100 ,
before: cursor ,
transactionDetails: 'full' ,
});
if ( ! batch || batch . length === 0 ) break ;
allTransactions . push ( ... batch );
cursor = batch [ batch . length - 1 ]. signature ;
// İsteğe bağlı: Hız sınırlarına uymak için gecikme ekleyin
await new Promise ( resolve => setTimeout ( resolve , 100 ));
}
return allTransactions ;
}
En İyi Uygulamalar
Sayım için signatures modunu kullanın : Yalnızca işlemleri saymak veya listelemek istediğinizde daha iyi performans ve daha yüksek limitler için transactionDetails: "signatures" kullanın.
Erken filtreleyin : Döndürülen veri miktarını azaltmak ve yanıt sürelerini iyileştirmek için zaman, slot veya durum filtrelerini uygulayın.
Sayfalama uygulayın : Çok sayıda işlemi olan adresler için her zaman before imlecini kullanarak sayfalama yapın.
Sonuçları önbelleğe alın : İşlem verisi onaylandıktan sonra değişmez. Gereksiz isteklerden kaçınmak için geçmiş sonuçları önbelleğe alın.
Hız sınırlarını yönetin : Çok sayıda ardışık istek yaparken üstel geri çekilme uygulayın.
Yaygın Hatalar
Kod Mesaj Çözüm -32600 Invalid request JSON-RPC formatını ve gerekli alanları kontrol edin -32602 Invalid params Adres formatını ve seçenek değerlerini doğrulayın -32005 Request limit exceeded Limiti azaltın veya hız sınırlaması uygulayın
Standart Yöntemlerle Karşılaştırma
Özellik getSignaturesForAddress + getTransaction getTransactionsForAddress API çağrıları Birden fazla (1 + N) Tek Sıralama Yalnızca en yeniden eskiye İki yönlü Zaman filtreleme Desteklenmiyor Destekleniyor Durum filtreleme Desteklenmiyor Destekleniyor Maks. imza Çağrı başına 1000 Çağrı başına 1000 Maks. tam işlem Çağrı sayısıyla sınırlı Çağrı başına 100