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

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 bir eth_getLogs isteğinin kapsayabileceği maksimum blok sayısıdır. Zincire göre farklılık gösterir — bunu sabit kodlamak yerine GET /v1/chains üzerinden okuyun (zincirler Desteklenen Zincirler sayfasında listelenmiştir). Daha geniş bir aralık, -32602 eth_getLogs block range too large JSON-RPC hatasıyla reddedilir (faturalandırılmaz).
  • Düğüm senkronizasyonu: bir zincirin düğümü senkronize değilken, eth_getLogs -32010 döndürür (faturalandırılmaz).
  • Durum penceresi: GET /v1/chains uç noktasının state_window_blocks olarak bildirdiği durum penceresi, eth_call ve eth_getBalance gibi durum okuma yöntemleri için geçerlidir, eth_getLogs iç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 unavailable dö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ç noktastandardBlok penceresi
GET /{chain}/addresses/{address}/transfersZorunlu: erc20 veya erc721. erc1155, 422 no_coverage döndürürfrom_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}/transfersZorunlu: erc20, erc721 veya erc1155from_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:

  • limit varsayılan olarak 50'dir; 500'ün üzerindeki değerler 500'e kırpılır ve 0 veya tamsayı olmayan bir değer 400 bad_request döndürür.
  • next_cursor yalnızca başka bir sayfa olduğunda görünür. Son sayfada bu anahtar tamamen yoktur, asla null olmaz.
  • Sonraki sayfayı almak için döndürülen değeri değiştirmeden cursor olarak 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örevDaha uygun olanNeden
En son birkaç yüz bloktaki olaylareth_getLogsO 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ş transferleriGET /{chain}/addresses/{address}/transfersBir 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 transferleriGET /{chain}/tokens/{token}/transfersTam 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ı izlenmesieth_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_getLogs30
data.address_transfers25
data.token_transfers25

Güncel fiyatlar ve bakiye yükleme seçenekleri için Fiyatlandırma sayfasına bakın.

Sonraki adımlar

Son güncelleme:

Bu sayfada