Apa yang tidak ditagih: kode error dan aturan penagihan

Rincian aturan penagihan untuk kode status HTTP, error JSON-RPC, dan Data API, beserta tindakan yang direkomendasikan bagi pengembang.

BlockVectra mengukur permintaan dalam Compute Units (CU). Panggilan JSON-RPC dan Data API ditagih hanya setelah respons diperoleh. Panduan ini merangkum aturan penentuan penagihan untuk kode status HTTP, panggilan JSON-RPC, dan Data API, beserta tindakan yang direkomendasikan bagi pengembang.

Kode status HTTP dan aturan penagihan

Aturan penentuan penagihan dan penanganan respons pada tingkat HTTP adalah sebagai berikut:

Status HTTPBody ResponsSkenarioDitagih?Tindakan yang Direkomendasikan
200Respons JSON-RPC (tunggal atau batch)Respons normal; semua error pada lapisan JSON-RPC (error parsing, penolakan metode, kegagalan upstream, error node) juga berstatus 200Dievaluasi per panggilanPeriksa result atau error untuk setiap panggilan; jika error dikembalikan, lihat penanganan error JSON-RPC di bawah
204KosongSemua panggilan dalam permintaan adalah notifikasiNotifikasi ditagih seperti biasaTidak diperlukan tindakan tambahan
400KosongPesan HTTP salah format (baris permintaan atau header tidak dapat di-parse, encoding chunked tidak valid), atau lebih dari 10 s antara dua pembacaan body permintaanTidakPeriksa sintaks permintaan HTTP, header, dan kesinambungan transmisi
402JSON, -32020Saldo tidak mencukupi, kuota habis; jika saldo diketahui, error.data menyertakan balance_units dan balance_cuTidakPeriksa saldo Anda pada halaman penagihan di Konsol atau melalui GET /v1/topup/deposit-address (MCP get_deposit_address); lakukan top up on-chain ke alamat khusus akun Anda (lihat panduan top up Agent)
403KosongMetode selain POST atau OPTIONS pada /v1/{chain} atau /v1/{chain}/{api_key} (terlepas dari apakah nama rantai dikenal)TidakUbah metode permintaan HTTP menjadi POST (atau preflight OPTIONS lintas origin)
401JSON, -32024 (missing_api_key atau invalid_api_key)API key tidak disertakan pada rantai yang dikenal, API key tidak dikenal atau dinonaktifkanTidakSertakan API key aktif pada header x-api-key (API key yang baru dibuat atau dirotasi memerlukan beberapa detik untuk berlaku; tunggu sebentar dan coba lagi)
404JSON, -32600 (reason = unknown_chain)POST ke {chain} yang tidak dikenalTidakCocokkan nama rantai pada URL dengan Rantai yang Didukung (harus persis berupa slug huruf kecil)
404body kosongPath tidak cocok (misalnya POST /v1, /v1/, POST /v1/{chain}/)TidakSertakan rantai pada URL (/v1/{chain})
408KosongLebih dari 35 s sejak pembacaan header permintaan hingga pengembalian responsMungkin: panggilan yang sudah diteruskan ke node ditagih seperti biasa setelah node meresponsJangan mencoba ulang panggilan yang mengubah state (misalnya eth_sendRawTransaction) tanpa pemeriksaan; putusnya koneksi klien tidak membatalkan panggilan yang sudah diteruskan
413KosongBody permintaan > 2 MiB (2,097,152 byte)TidakJaga body permintaan di bawah 2 MiB; pecah batch menjadi permintaan yang lebih kecil
414 / 431KosongURI terlalu panjang (414) atau header permintaan terlalu besar (431)TidakPendekkan URI permintaan atau kurangi header permintaan HTTP
429JSON, -32005 atau -32022; menyertakan Retry-After untuk batas laju (-32005); batas burst/ukuran batch (-32022) tidak menyertakannyaSaldo bucket habis → -32005; CU satu permintaan melebihi kapasitas burst → -32022; kuota laju panggilan akun habis → -32005; jumlah panggilan dalam satu permintaan melebihi batas → -32022TidakUntuk -32005 dengan Retry-After, tunggu jumlah detik yang ditentukan sebelum mencoba lagi; untuk -32022, pecah permintaan atau kurangi ukuran batch (mencoba ulang tanpa perubahan tidak akan pernah berhasil)
503JSON, -32021, dengan Retry-AfterData penagihan sementara tidak tersedia; server sementara menolak permintaan (bukan masalah saldo, tidak perlu top up); API key yang baru dibuat mengembalikan ini hingga data penagihan tersinkronisasi (biasanya beberapa detik)TidakBukan masalah saldo, tidak perlu top up; tunggu jumlah detik yang ditentukan dalam Retry-After dan coba lagi

Catatan: Saat diakses melalui Cloudflare, Cloudflare dapat mengembalikan halaman error 52x atau 1015; halaman tersebut tidak dihasilkan oleh layanan ini.

Header respons biaya dan saldo: Saat mengirim x-bv-meter: 1 pada permintaan HTTP (berlaku untuk JSON-RPC dan Data API), respons yang menagih setidaknya satu panggilan mengembalikan x-bv-cu-charged (Compute Units yang ditagih untuk permintaan ini, atau total panggilan yang ditagih dalam batch) dan x-bv-balance-units (sisa unit saldo akun tepat setelah biaya ini dikenakan, negatif saat saldo terlampaui; tidak disertakan jika saldo tidak diketahui). Permintaan tanpa x-bv-meter: 1, respons tanpa panggilan yang ditagih, dan respons error 402, 403, 429, atau 503 tidak menyertakan kedua header tersebut. Header respons ini dapat diakses oleh skrip browser melalui CORS, sedangkan WebSocket tidak menggunakannya. Saldo dikurangi total penggunaan yang belum diselesaikan, yang dibulatkan ke atas satu kali ke unit utuh; penyelesaian per jam membulatkan ke bawah, sehingga saldo yang dilaporkan dapat naik hingga satu unit setelah penyelesaian.

Kode error JSON-RPC dan aturan penagihan

Kode error yang sama dapat berasal dari platform atau node, dan penagihannya berbeda:

  • Error yang dihasilkan oleh platform sendiri: tidak pernah ditagih;
  • Error yang dikembalikan oleh node: diteruskan apa adanya dan ditagih sesuai bobot metode, dengan pengecualian hanya untuk kode error node yang tercantum di bawah.

Rincian aturan

  • Error node yang tidak ditagih: -32002 (timeout batch), -32003 (respons batch terlalu besar), dan -32600 (batch ditolak seluruhnya) dari node menunjukkan bahwa node menghentikan panggilan lebih awal; error tersebut dan semua notifikasi dalam batch yang sama tidak ditagih. -32601 (metode yang diekspos belum diimplementasikan) dan -32603 (kegagalan internal node) dari node tidak ditagih melalui HTTP atau WebSocket dan tidak memengaruhi panggilan atau notifikasi lain dalam batch. Selain itu, 4444 (blok yang telah dipangkas) dan -32000 (state historis di luar jendela riwayat state node, yang ditentukan oleh state_window_blocks dalam GET /v1/chains) tidak ditagih dan tidak memengaruhi panggilan lain dalam batch.
  • Error node yang ditagih: Error lain yang dikembalikan oleh node ditagih sesuai bobot metode jika melaporkan hasil eksekusi rantai, seperti execution reverted (-32000 atau 3 dengan data), serta -32602 invalid argument dari node sendiri.
  • Pemeriksaan saldo dan sinkronisasi: -32020 menunjukkan saldo akun tidak mencukupi dan memerlukan top up; jika saldo diketahui, error.data.balance_units dan error.data.balance_cu memuat sisa saldo (dapat negatif). API key yang baru dibuat dapat mengembalikan -32021 (503) selama beberapa detik; tunggu sesuai Retry-After dan coba lagi.
  • Kegagalan upstream: -32603 yang dihasilkan platform akibat kegagalan komunikasi upstream atau respons salah format (upstream unavailable, no response from upstream, malformed upstream response) menyertakan data.reason: upstream_unavailable.
  • Penagihan notifikasi: Notifikasi (204) ditagih sesuai bobot metodenya.

Tabel kode error JSON-RPC

KodeSumberHTTPPesanAlasanDitagih?Tindakan yang Direkomendasikan
-32700BlockVectra200parse error-Tidak (menggunakan 1 token batas laju CU)Perbaiki sintaks JSON permintaan
-32600BlockVectra200invalid requestinvalid_requestTidak (menggunakan 1 token batas laju CU)Perbaiki sintaks dan struktur permintaan JSON-RPC
-32600BlockVectra200batch too large: max <N> callsbatch_too_large (+max)TidakPecah batch menjadi panggilan dengan jumlah di bawah batas (batas batch standar adalah 100)
-32600BlockVectra200invalid request: ambiguous member nameinvalid_requestTidakHapus nama anggota yang duplikat atau ambigu dalam objek JSON
-32601BlockVectra200method not available: <method>-TidakPanggil hanya metode yang diizinkan untuk rantai ini (lihat Rantai yang Didukung)
-32600BlockVectra404unknown chainunknown_chainTidakPeriksa nama rantai pada URL
-32602BlockVectra200eth_getLogs block range too large: max <N> blocks-TidakPersempit rentang blok eth_getLogs (batas ditentukan per rantai, misalnya 1000 blok)
-32602BlockVectra200tracer not allowed-TidakGunakan tracer native yang diizinkan (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer, atau jangan sertakan)
-32602BlockVectra200trace timeout not allowed-TidakAtur string durasi Go yang valid dengan timeout ≤ 30s
-32010BlockVectra200node is syncing; calls are temporarily unavailable-TidakNode sedang melakukan sinkronisasi, coba lagi nanti (kecuali untuk eth_chainId)
-32011BlockVectra200historical state is not available beyond the most recent <N> blocks-TidakKueri blok yang lebih baru (blok tujuan harus berada dalam jendela state; hindari tag safe/finalized/earliest)
-32000BlockVectra200transaction not foundnot_foundTidakVerifikasi hash transaksi (0x + 64 karakter heksadesimal)
-32000BlockVectra200block not foundnot_foundTidakVerifikasi hash atau nomor blok
-32000BlockVectra200upstream response too largeresponse_too_largeTidakPersempit cakupan kueri atau pecah permintaan
-32005BlockVectra200-overloadedTidakServer sementara kelebihan beban, coba lagi nanti
-32005BlockVectra429rate limit exceededkey_rate_limit / free_plan_call_limit / concurrency_limitTidakKurangi frekuensi permintaan; patuhi Retry-After jika tersedia
-32022BlockVectra429request cost <N> CU exceeds burst capacity <M> CUrequest_exceeds_burstTidakPecah permintaan atau batch agar CU satu permintaan berada di bawah kapasitas burst
-32022BlockVectra429request has <N> calls, exceeding the free-plan limit of <M> calls per secondfree_plan_batch_too_large (+max)TidakPecah batch agar berada di bawah batas per detik, atau tingkatkan ke paket berbayar
-32603BlockVectra200upstream unavailableupstream_unavailableTidakKegagalan komunikasi upstream, coba lagi nanti
-32603BlockVectra200no response from upstreamupstream_unavailableTidakUpstream tidak merespons, coba lagi nanti
-32603BlockVectra200malformed upstream responseupstream_unavailableTidakRespons upstream salah format, coba lagi nanti
-32603BlockVectra200--TidakError internal yang jarang terjadi, coba lagi nanti
-32020BlockVectra402insufficient balancebalance_exhausted / free_grant_exhausted (+topup_url, dan +balance_units / balance_cu jika saldo diketahui)TidakPeriksa saldo Anda pada halaman Penagihan di Konsol atau melalui GET /v1/topup/deposit-address (MCP get_deposit_address); lakukan top up on-chain ke alamat khusus akun Anda (lihat panduan top up Agent)
-32021BlockVectra503billing data temporarily unavailable-TidakData penagihan sedang disinkronkan (bukan masalah saldo); tunggu jumlah detik Retry-After dan coba lagi
4444Node200pruned history unavailable-TidakBlok yang diminta telah dipangkas oleh node; tidak ditagih; tidak memengaruhi batch
-32000Node200historical state ... is not available-TidakDi luar jendela riwayat state node; tidak ditagih; tidak memengaruhi batch
-32000Node200old data not available due to pruning...-TidakDi luar jendela riwayat node (jendela ditentukan oleh state_window_blocks); tidak ditagih; tidak memengaruhi batch
-32002Node200<node message>-TidakNode mengalami timeout pada batch dan menghentikan panggilan; tidak ditagih; notifikasi dalam batch juga tidak ditagih
-32003Node200<node message>-TidakRespons batch node terlalu besar dan panggilan dihentikan; tidak ditagih; notifikasi dalam batch juga tidak ditagih
-32601Node200<node message>-TidakMetode yang diekspos belum diimplementasikan oleh node; gunakan metode lain yang didukung
-32603Node200<node message>-TidakKegagalan internal node; coba lagi dengan backoff
-32600Node200<node message>-TidakSeluruh batch ditolak oleh node; tidak ditagih; notifikasi dalam batch juga tidak ditagih
LainnyaNode200<node message>-Ya (bobot metode)Hasil eksekusi rantai (misalnya execution reverted, -32602 dari node); periksa parameter panggilan kontrak

Aturan penagihan Data API

Data API menyajikan data rantai hanya-baca melalui endpoint REST. Penagihan dan penanganan error-nya mengikuti aturan berikut:

Rincian aturan

  • Hanya respons berhasil 2xx yang ditagih.
  • Operasi yang tidak tersedia di luar cakupan (seperti rantai yang tidak didukung atau blok di luar cakupan trace) mengembalikan HTTP 422 no_coverage, yang tidak ditagih tetapi diperhitungkan terhadap batas laju.
  • Respons HTTP 401, 402, 404, dan 429 tidak ditagih. Untuk header respons (x-bv-meter: 1), lihat Kode status HTTP dan aturan penagihan.

Tabel kode status Data API

Status HTTPKode Error / SkenarioDitagih?Tindakan yang Direkomendasikan
200Respons data berhasilYa (bobot CU operasi Data API)Parse data, meta, dan next_cursor dalam struktur respons
400Parameter permintaan salah format atau bidang wajib tidak disertakanTidakPeriksa dan perbaiki parameter kueri atau body
402Saldo habis (error.code: "insufficient_balance", menyertakan balance_units dan balance_cu jika saldo diketahui)TidakPeriksa saldo Anda pada halaman penagihan di Konsol atau melalui GET /v1/topup/deposit-address (MCP get_deposit_address); lakukan top up on-chain ke alamat khusus akun Anda (lihat panduan top up Agent)
401API key tidak disertakan, tidak dikenal, atau dinonaktifkan (error.code: "missing_api_key" atau "invalid_api_key")TidakSertakan API key aktif pada header x-api-key
404Rantai tidak dikenal atau tidak publik (error.code: "not_found"), atau objek yang diminta tidak adaTidakPeriksa slug rantai pada URL (harus persis dalam huruf kecil) dan path permintaan
409Blok atau jendela yang diminta berada di atas tinggi indeks saat ini (error.code: "not_indexed_yet", menyertakan indexed_through)TidakKueri blok hingga indexed_through atau coba lagi nanti
422Operasi khusus rantai tidak tersedia (misalnya rantai tidak didukung atau di luar cakupan trace, error.code: "no_coverage")Tidak (diperhitungkan terhadap batas laju)Periksa fitur yang didukung melalui GET /v1/status (data_features gratis dan tanpa API key)
429Batas laju terlampaui (error.code: "rate_limited"), atau biaya satu permintaan melebihi kapasitas burst API key (error.code: "cost_exceeds_burst")TidakKurangi frekuensi permintaan; pecah permintaan yang terlalu besar (permintaan yang melebihi burst tidak akan pernah berhasil jika dikirim tanpa perubahan)
503Layanan data sementara tidak tersedia (error.code: "unavailable"), atau rantai sedang sibuk (error.code: "gateway_overloaded")TidakCoba lagi nanti dan patuhi Retry-After jika tersedia

Kueri saldo (GET /v1/account)

Pemegang API key dapat memeriksa saldo dan rincian kuota API key secara langsung tanpa dikenakan biaya atau mengurangi Compute Units (CU):

curl -H "x-api-key: $BLOCKVECTRA_API_KEY" https://api.blockvectra.com/v1/account
  • Gratis dan tidak ditagih: GET /v1/account gratis. Endpoint ini tidak pernah ditagih, tidak mengurangi CU, dan mengembalikan HTTP 200 dengan saldo saat ini meskipun nol atau negatif (tidak pernah mengembalikan 402).
  • Autentikasi: Autentikasi API key hanya menggunakan header x-api-key (API key pada path dan token Bearer tidak diterima). Header yang tidak disertakan mengembalikan 401 missing_api_key; API key tidak valid atau dicabut mengembalikan 401 invalid_api_key. (API key kedaluwarsa mengembalikan 403 key_expired; layanan yang sementara tidak tersedia mengembalikan 503 auth_unavailable atau billing_unavailable dengan Retry-After.)
  • Pembatasan laju: Memiliki batas tersendiri sebesar 5 permintaan per detik per ID API key, terpisah dari pengukuran CU dan penagihan. Melampaui batas mengembalikan HTTP 429 rate_limited dengan header Retry-After.

Bidang respons:

  • key_id: String identitas API key.
  • plan: Jenis paket akun (free jika akun memiliki kuota laju panggilan paket gratis; paid jika tidak).
  • balance_units: Sisa saldo akun dalam unit (dapat nol atau negatif).
  • balance_cu: Sisa saldo yang dikonversi menjadi Compute Units (CU).
  • balance_as_of_age_ms: Milidetik yang telah berlalu sejak saldo dibaca dari sumber datanya.
  • key: Batas dan rincian kuota khusus API key:
    • cu_per_sec: Laju pengisian ulang token bucket dalam CU per detik.
    • burst_cu: Kapasitas burst token bucket dalam CU.
    • cu_cap: Batas CU sepanjang masa berlaku API key ini, atau null jika tanpa batas.
    • cu_cap_remaining: Sisa CU di bawah cu_cap, atau null jika tanpa batas (dapat nol atau negatif).
    • expires_at: Timestamp kedaluwarsa RFC 3339, atau null jika API key tidak pernah kedaluwarsa.

Contoh respons:

{
  "key_id": "<key_id>",
  "plan": "<plan>",
  "balance_units": <integer>,
  "balance_cu": <integer>,
  "balance_as_of_age_ms": <integer>,
  "key": {
    "cu_per_sec": <integer>,
    "burst_cu": <integer>,
    "cu_cap": <integer_or_null>,
    "cu_cap_remaining": <integer_or_null>,
    "expires_at": "<expires_at_or_null>"
  }
}

Harga dan peningkatan paket

Biaya spesifik untuk semua panggilan yang ditagih ditentukan oleh bobot CU yang dipublikasikan:

  • Untuk memeriksa bobot semua metode dan operasi, lihat tabel bobot metode dan Aturan Pengukuran CU JSON-RPC.
  • Untuk harga paket dan rincian penyelesaian, lihat halaman Harga.
  • Meningkatkan ke paket berbayar: top up berbayar menghapus batas panggilan per detik Paket Gratis; setiap API key tetap tunduk pada batas laju CU dan burst.

Proses top up on-chain

Jika saldo akun Anda tidak mencukupi atau Anda membutuhkan throughput yang lebih tinggi, lakukan top up on-chain di konsol dengan langkah berikut:

  1. Masuk ke Konsol: Masuk ke Konsol BlockVectra.
  2. Buka Halaman Penagihan: Buka halaman Penagihan.
  3. Dapatkan Alamat Khusus Anda: Pada kartu top up on-chain, salin alamat top up khusus akun Anda atau pindai kode QR.
  4. Transfer Dana: Transfer hanya menggunakan jaringan yang didukung dan USDC / USDT / USDG yang tercantum pada halaman. Jaringan yang didukung dan jumlah top up minimum ditampilkan di konsol.
  5. Saldo Masuk Otomatis: Setelah terdeteksi on-chain, transaksi ditampilkan sebagai "Sedang diproses"; setelah dikreditkan, kredit otomatis ditambahkan ke saldo Anda.

Catatan Penting:

  • Gunakan hanya jaringan dan token yang secara eksplisit tercantum di konsol. Transfer pada rantai yang tidak didukung atau dengan token yang salah tidak dapat dikreditkan secara otomatis.
  • Pastikan setiap transfer memenuhi jumlah top up minimum yang ditampilkan di konsol.
  • Setelah top up berbayar pertama Anda dikreditkan, akun Anda ditingkatkan ke akun berbayar, menghapus batas panggilan per detik Paket Gratis.

Agent atau program server dapat langsung memanggil endpoint top up menggunakan API key; lihat panduan top up terprogram untuk Agent.

Penagihan push Webhook

Push memiliki bobot terpisah untuk peristiwa data yang terkirim, kueri riwayat yang berhasil, dan alamat-hari yang ditagih. Panggilan pengelolaan selain riwayat peristiwa, percobaan pengiriman yang gagal, percobaan ulang otomatis, dan peristiwa kontrol gratis. Setiap peristiwa yang terkirim ditagih satu kali; replay oleh pelanggan dan peristiwa kanonis yang dikirim ulang setelah reorg merupakan pengiriman baru yang ditagih. Biaya alamat menggunakan jumlah alamat maksimum setiap langganan saat online selama hari UTC; kuota alamat gratis akun dibagi di seluruh langganan, dengan langganan yang lebih lama menggunakannya terlebih dahulu. Alamat dalam dua langganan dihitung dua kali; menambahkan rantai mengubah biaya peristiwa, bukan biaya alamat.

Lihat panduan Blockchain Webhook API untuk penyiapan, verifikasi tanda tangan, dan pemulihan pengiriman. Panduan pembayaran stablecoin mencakup validasi receipt dan backfill dengan polling; langganan WebSocket menggunakan pengukuran koneksi dan notifikasinya sendiri. Error permintaan tercantum dalam referensi error. Bobot di bawah berasal dari GET /v1/plans.

PenggunaanUnit penagihanCU
push.address_dayHari-alamat tertagih33
push.historyPermintaan riwayat berhasil25
push.logPeristiwa data terkirim150
push.native_transferPeristiwa data terkirim150
push.token_transferPeristiwa data terkirim150

Alamat gratis per akun per hari UTC: 1000

Alokasi alamat gratis per akun per hari UTC, dibagikan oleh semua grup langganan terlepas dari paket. Untuk setiap grup, hitung jumlah alamat maksimum saat online selama hari tersebut; alokasikan kuota dalam urutan ID grup menaik. Alamat yang sama dalam dua grup dihitung dua kali; jumlah rantai dalam grup tidak melipatgandakan jumlah alamatnya. Grup yang offline atau dihapus sepanjang hari tidak menyumbang apa pun. Untuk setiap grup, jumlah yang tersisa setelah bagian kuotanya dikalikan dengan bobot CU `push.address_day` di `method_weights`. Kuota terkonfigurasi saat ini berasal dari kebijakan harga yang sama yang digunakan untuk biaya hari-alamat; ini bukan batas kapasitas akun atau kuota terpisah per grup.

Contoh: 10 peristiwa native.transfer terkirim, 2 permintaan riwayat berhasil, dan 10 hari-alamat tertagih berbiaya 10 × 150 + 2 × 25 + 10 × 33 = 1880 CU. Hari-alamat tertagih dihitung setelah kuota alamat gratis akun.

Langkah selanjutnya

Terakhir diperbarui:

Di halaman ini