eth_getLogs ile Token Transfers API Karşılaştırması: ERC-20 transfer geçmişi
Sözleşme olay logları için eth_getLogs'u veya indekslenmiş ERC-20 transfer geçmişi için Token Transfers API'yi seçin. Blok aralıklarını, sayfalamayı, kapsamı ve kesinliği karşılaştırın.
Cüzdan geçmişi veya ERC-20 transfer mutabakatı için Token Transfers API ile başlayın. Sözleşme olay loglarına ihtiyaç duyduğunuzda eth_getLogs kullanın. Geliştiriciler ve AI Agent'lar aynı blokzincir veri API'si aracılığıyla indekslenmiş adres transferlerini sorgulayabilir. Cüzdan varlıkları rehberi token bakiyelerini, transfer geçmişini ve meta verileri birleştirir; Data API referansı istek parametrelerini ve yanıt şemalarını tanımlar.
Bu rehberin tamamlamanıza yardımcı olduğu görevler
- İzleme veya log geriye dönük doldurma için sınırlı blok aralıklarında kimlik doğrulamalı RPC aracılığıyla sözleşme olay loglarını sorgulayın.
- İmleç sayfalaması ve kapsam kontrolleri ile blokzincir veri API'si aracılığıyla adres veya token sözleşmesine göre indekslenmiş ERC-20 transfer geçmişini sorgulayın.
Logları ve transferleri okumanın iki yolu
eth_getLogs bir JSON-RPC yöntemidir: JSON-RPC uç noktası aracılığıyla blok loglarını döndürür. Data API, token transfer geçmişini zincir kapsamlı iki uç nokta aracılığıyla sunar:
GET /{chain}/addresses/{address}/transfers— bir adresi içeren transferler.GET /{chain}/tokens/{token}/transfers— tek bir token sözleşmesi için transferler.
Her ikisi de aynı API anahtarını kullanır ve yöntem ağırlığına göre CU cinsinden ölçülür (aşağıdaki ağırlıklara bakın). Hangisinin uygun olduğu verilerin ne kadar yeni olduğuna, bir blok penceresine ihtiyacınız olup olmadığına ve nasıl sayfalandırdığınıza bağlıdır.
eth_getLogs için geçerli olan sınırlar
eth_getLogs, genel GET /v1/chains yanıtının yayınladığı zincir başına sınırlarla sınırlandırılmıştır:
- Blok aralığı:
max_logs_block_range, tek bireth_getLogsisteğinin kapsayabileceği maksimum blok sayısıdır. Zincire göre farklılık gösterir — bunu sabit kodlamak yerineGET /v1/chainsüzerinden okuyun (zincirler Desteklenen Zincirler sayfasında listelenmiştir). Daha geniş bir aralık,-32602 eth_getLogs block range too largeJSON-RPC hatasıyla reddedilir (faturalandırılmaz). - Düğüm senkronizasyonu: bir zincirin düğümü senkronize değilken,
eth_getLogs-32010döndürür (faturalandırılmaz). - Durum penceresi:
GET /v1/chainsuç noktasınınstate_window_blocksolarak bildirdiği durum penceresi,eth_callveeth_getBalancegibi durum okuma yöntemleri için geçerlidir,eth_getLogsiçin geçerli değildir. - Düğüm budaması: blok ve log okumaları durum penceresiyle sınırlı değildir, ancak düğümün saklanan geçmişiyle sınırlıdır. Budanmış veriler
4444 pruned history unavailabledöndürür (faturalandırılmaz).
fromBlock ve toBlock filtre alanları atlandığında veya null olduğunda, varsayılan olarak latest değerini alır.
HTTP üzerinden eth_subscribe çağırmak -32601 method not available döndürür. /v1/chains içinde ws değerinin true olduğu zincirlerde eth_subscribe WebSocket üzerinden kullanılabilir (bkz. Desteklenen Zincirler); aksi takdirde, en yeni bloklar üzerinde eth_getLogs yoklaması yapın.
Data API transfer uç noktalarının sağladıkları
İki uç nokta farklı parametreler gerektirir:
| Uç nokta | standard | Blok penceresi |
|---|---|---|
GET /{chain}/addresses/{address}/transfers | Zorunlu: erc20 veya erc721. erc1155, 422 no_coverage döndürür | from_block ve to_block alanlarının her ikisi de zorunludur. Sonuçlar azalan sırada (block_number, log_index) göre sıralanır. direction (in, out veya any; varsayılan any) yöne göre filtreler ve token isteğe bağlı olarak sonuçları tek bir sözleşmeyle kısıtlar. |
GET /{chain}/tokens/{token}/transfers | Zorunlu: erc20, erc721 veya erc1155 | from_block ve to_block isteğe bağlıdır. Eksik bir to_block varsayılan olarak as_of_block değerini alır; bunun üzerindeki açık bir to_block veya from_block, clamp kaçışı olmaksızın kesin bir 409 not_indexed_yet döndürür. |
Sayfalama
Her iki uç nokta da keyset ile sayfalandırılır:
limitvarsayılan olarak 50'dir; 500'ün üzerindeki değerler 500'e kırpılır ve0veya tamsayı olmayan bir değer400 bad_requestdöndürür.next_cursoryalnızca başka bir sayfa olduğunda görünür. Son sayfada bu anahtar tamamen yoktur, aslanullolmaz.- Sonraki sayfayı almak için döndürülen değeri değiştirmeden
cursorolarak geri iletin. Bir imleç yalnızca onu oluşturan zincir, uç nokta ve sorgu parametreleri için geçerlidir.
Kapsam ve kesinlik
Data API transferleri, her zincirin coverage.from_block değerinden meta.as_of_block değerine kadar geçmiş token transferlerini indeksler. Hangi zincirlerin bunu sağladığını görmek için Desteklenen Zincirler sayfasına bakın.
Her transfer öğesi token, standard, from, to, block_number, block_timestamp, tx_hash, tx_index ve log_index içerir. ERC-20 öğeleri amount ekler; ERC-721 öğeleri token_id ekler; ERC-1155 öğeleri operator, token_id, value ve batch_index ekler.
Hangisi kullanılmalı
| Tipik görev | Daha uygun olan | Neden |
|---|---|---|
| En son birkaç yüz bloktaki olaylar | eth_getLogs | O zincirin max_logs_block_range sınırını aşmadığı sürece tek bir istek yakın tarihli bir aralığı kapsayabilir. |
| Bir adresin geçmiş transferleri | GET /{chain}/addresses/{address}/transfers | Bir from_block/to_block penceresi, direction ve token filtreleri ve imleç sayfalaması içeren adres kapsamlı sorgu; sonuçlar as_of_block değerine kadar sunulur. |
| Bir tokenın tüm transferleri | GET /{chain}/tokens/{token}/transfers | Tam sonuç seti için isteğe bağlı bir pencere ve imleç sayfalaması ile erc20, erc721 ve erc1155 kapsamına sahip token sözleşmesi odaklı sorgu. |
| Yeni olayların canlı izlenmesi | eth_subscribe (WebSocket zincirleri) / eth_getLogs (yoklama) | Desteklenen yerlerde WebSocket üzerinden yeni tepe bloklara veya loglara abone olun ya da yakın tarihli blok aralıklarını yoklayın. |
eth_getLogs ile logları sorgulama
export BLOCKVECTRA_API_KEY=rgw_your_api_key
# fromBlock / toBlock varsayılan olarak latest değerini alır. Yeni olayları takip etmek
# için açık bir yakın tarihli aralık belirleyin ve aralığı zincirin max_logs_block_range sınırı içinde tutun.
curl -s "https://api.blockvectra.com/v1/robinhood_mainnet" \
-H 'Content-Type: application/json' \
-H "x-api-key: $BLOCKVECTRA_API_KEY" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getLogs",
"params": [{
"address": "0x1111111111111111111111111111111111111111",
"fromBlock": "latest",
"toBlock": "latest"
}]
}'Data API ile transferleri sorgulama
export BLOCKVECTRA_API_KEY=rgw_your_api_key
# from_block / to_block burada isteğe bağlıdır; to_block atlandığında varsayılan olarak as_of_block alınır.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/tokens/0x1111111111111111111111111111111111111111/transfers?standard=erc20" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"Bunun yerine adrese göre sorgulamak için from_block ve to_block zorunludur:
# clamp=true, 409 döndürmek yerine çok geniş bir pencereyi veya as_of_block üzerindeki
# bir to_block değerini kırpar.
curl -s "https://api.blockvectra.com/v1/data/robinhood_mainnet/addresses/0x1111111111111111111111111111111111111111/transfers?standard=erc20&from_block=0&to_block=73000000&direction=any&clamp=true" \
-H "x-api-key: $BLOCKVECTRA_API_KEY"Çağrı başına CU
Her yöntem CU ağırlığına göre faturalandırılır. Aşağıdaki ağırlıklar platform planları API'sinden okunur:
Çağrı başına CU ağırlığı
| Metot | Çağrı başına CU |
|---|---|
eth_getLogs | 30 |
data.address_transfers | 25 |
data.token_transfers | 25 |
Güncel fiyatlar ve bakiye yükleme seçenekleri için Fiyatlandırma sayfasına bakın.
Sonraki adımlar
Son güncelleme:
Infura karşılaştırması
Yoğun okuma görevleri için BlockVectra döngü kredilerini kullanın, aylık RPC aboneliği olmadan yöntem bazında ödeme yapın ve hesap oluşturma ile sabit kripto para fonlamasını otomatikleştirin.
Tek anahtar, çok zincir
Aynı API anahtarı desteklenen her zincirde çalışır. URL'lerin nasıl yapılandırıldığını, zincirlerin programatik olarak nasıl keşfedildiğini ve bakiyeler ile limitlerin nasıl havuzlandığını öğrenin.