과금되지 않는 요청: 오류 코드 및 과금 규칙

HTTP 상태 코드, JSON-RPC 오류 및 Data API에 걸친 과금 규칙의 상세 분석과 개발자를 위한 권장 조치 사항.

BlockVectra는 요청을 Compute Unit(CU) 단위로 측정합니다. JSON-RPC 및 Data API 호출은 응답을 수신한 후에만 과금됩니다. 이 가이드에서는 HTTP 상태 코드, JSON-RPC 호출 및 Data API 전반에 걸친 과금 결정 규칙과 개발자를 위한 권장 조치 사항을 정리합니다.

HTTP 상태 코드와 과금 규칙

HTTP 수준 응답에 대한 과금 판정 및 처리 규칙은 다음과 같습니다:

HTTP 상태응답 본문상황과금 여부권장 조치
200JSON-RPC 응답 (단일 또는 배치)정상 응답; 모든 JSON-RPC 계층 오류(파싱 오류, 메서드 거부, 업스트림 실패, 노드 오류)도 200 반환호출별 판정각 호출의 result 또는 error를 검사; 오류가 반환되면 아래 JSON-RPC 오류 처리 참조
204비어 있음요청 내 모든 호출이 알림(notification)임알림은 정상 과금됨추가 조치 필요 없음
400비어 있음잘못된 형식의 HTTP 메시지(요청 라인 또는 헤더 파싱 불가, 유효하지 않은 청크 인코딩), 또는 요청 본문 두 읽기 작업 간 10초 초과 지연미과금HTTP 요청 구문, 헤더 및 전송 지속성을 점검
402JSON, -32020잔액 부족, 무료 제공량 소진; 잔액 확인 가능 시 error.data에 balance_units 및 balance_cu 포함미과금콘솔 결제 관리 페이지 또는 GET /v1/topup/deposit-address(MCP get_deposit_address)에서 잔액을 확인; 계정 전용 주소로 온체인 충전 진행(에이전트 충전 가이드 참조)
403비어 있음/v1/{chain} 또는 /v1/{chain}/{api_key}에 POST 또는 OPTIONS 이외의 메서드 사용(체인 이름 인식 여부 무관)미과금HTTP 요청 메서드를 POST(또는 크로스 오리진 OPTIONS 프리플라이트)로 변경
401JSON, -32024 (missing_api_key 또는 invalid_api_key)인식된 체인에서 키 누락, 알 수 없거나 비활성화된 키미과금x-api-key 헤더에 유효한 API key 전달(새로 생성되었거나 교체된 키는 반영까지 수 초가 소요될 수 있으므로 잠시 후 재시도)
404JSON, -32600 (reason = unknown_chain)알 수 없는 {chain}으로 POST 요청미과금URL의 체인 이름을 지원 체인과 대조 확인(정확한 소문자 slug여야 함)
404빈 본문일치하지 않는 경로(예: POST /v1, /v1/, POST /v1/{chain}/)미과금URL에 체인 포함(/v1/{chain})
408비어 있음요청 헤더를 읽은 시점부터 응답을 반환하기까지 35초 초과가능성 있음: 이미 노드로 전달된 호출은 노드가 응답하면 정상 과금됨상태를 변경하는 호출(예: eth_sendRawTransaction)을 무조건 재시도하지 마세요. 클라이언트 연결이 끊어져도 이미 전달된 호출은 취소되지 않습니다
413비어 있음요청 본문 크기 > 2 MiB (2,097,152 바이트)미과금요청 본문을 2 MiB 미만으로 유지; 배치를 더 작은 요청으로 분할
414 / 431비어 있음URI가 너무 김 (414) 또는 요청 헤더가 너무 큼 (431)미과금요청 URI를 단축하거나 HTTP 요청 헤더 크기를 축소
429JSON, -32005 또는 -32022; 속도 제한(-32005)의 경우 Retry-After 포함; 버스트/배치 크기 제한(-32022)은 미포함버킷 잔액 소진 → -32005; 단일 요청 CU가 버스트 용량 초과 → -32022; 계정 호출 속도 제한 소진 → -32005; 단일 요청 내 호출 수가 제한 초과 → -32022미과금Retry-After가 포함된 -32005의 경우 지정된 초 동안 대기 후 재시도; -32022의 경우 요청을 분할하거나 배치 크기를 축소(그대로 재시도하면 계속 실패함)
503JSON, -32021, Retry-After 포함청구 데이터를 일시적으로 사용할 수 없음; 서버가 요청을 일시적으로 거부함(잔액 문제가 아니므로 충전할 필요 없음); 새로 생성된 키는 청구 데이터가 동기화될 때까지(보통 몇 초) 이를 반환함미과금잔액 문제가 아니므로 충전할 필요 없음; Retry-After에 지정된 초 동안 대기한 후 재시도

참고: Cloudflare를 통해 접속할 때 Cloudflare에서 52x 또는 1015 오류 페이지를 반환할 수 있으며, 이는 서비스에서 생성된 것이 아닙니다.

과금 및 잔액 응답 헤더: HTTP 요청에 x-bv-meter: 1을 전송할 때(JSON-RPC 및 Data API 모두 적용 가능), 하나 이상의 호출에 과금된 응답은 x-bv-cu-charged(해당 요청에 과금된 Compute Unit 수, 또는 배치의 과금된 호출들의 합계)와 x-bv-balance-units(해당 과금 직후 계정의 잔여 잔액 단위, 초과 인출 시 음수; 잔액을 알 수 없는 경우 생략)를 반환합니다. x-bv-meter: 1이 없는 요청, 과금된 항목이 없는 응답, 402, 403, 429 또는 503 오류 응답에서는 두 헤더가 모두 생략됩니다. 이 응답 헤더는 CORS를 통해 브라우저 스크립트에서 접근할 수 있으며 WebSocket에서는 사용되지 않습니다. 잔액은 아직 정산되지 않은 총 사용량을 전체 단위로 한 번 올림하여 차감하며, 시간별 정산 시 내림 처리되므로 정산 후 보고되는 잔액이 최대 1단위까지 증가할 수 있습니다.

JSON-RPC 오류 코드와 과금 규칙

동일한 오류 코드라도 플랫폼 자체에서 발생할 수도 있고 노드에서 반환될 수도 있으며, 과금 여부가 달라집니다:

  • 플랫폼 자체에서 생성된 오류: 일체 과금되지 않음;
  • 노드에서 반환된 오류: 그대로 전달되며 메서드 가중치에 따라 과금되나, 아래 나열된 노드 오류 코드만 예외로 처리됩니다.

규칙 세부 사항

  • 과금되지 않는 노드 오류: 노드의 -32002(배치 타임아웃), -32003(배치 응답 너무 큼), -32600(배치 전체 거부)은 노드가 호출을 조기에 중단했음을 나타내며, 해당 호출 및 동일 배치 내의 모든 알림은 과금되지 않습니다. 노드의 -32601(노출된 메서드 미구현) 및 -32603(노드 내부 오류)은 HTTP 또는 WebSocket을 통해 과금되지 않으며 배치 내 다른 호출이나 알림에 영향을 주지 않습니다. 또한 4444(가지치기된 블록) 및 -32000(노드의 상태 기록 윈도우 외부의 과거 상태, GET /v1/chains의 state_window_blocks로 정의됨)은 과금되지 않으며 배치 내 다른 호출에 영향을 주지 않습니다.
  • 과금되는 노드 오류: 체인의 실행 결과를 보고하는 경우 노드에서 반환된 기타 오류는 메서드 가중치에 따라 과금됩니다. 예를 들어 execution reverted(-32000 또는 data가 포함된 3), 노드 자체의 -32602 invalid argument 등이 있습니다.
  • 잔액 승인 및 동기화: -32020은 계정 잔액 부족을 나타내며 충전이 필요합니다. 잔액을 알 수 있는 경우 error.data.balance_units 및 error.data.balance_cu에 잔여량이 전달됩니다(음수일 수 있음). 새로 생성된 키는 몇 초 동안 -32021(503)을 반환할 수 있으므로 Retry-After 동안 대기한 후 재시도하세요.
  • 업스트림 오류: 업스트림 통신 실패 또는 잘못된 형식의 응답(upstream unavailable, no response from upstream, malformed upstream response)으로 인해 플랫폼에서 생성된 -32603은 data.reason: upstream_unavailable을 전달합니다.
  • 알림 과금: 알림(204)은 해당 메서드 가중치에 따라 과금됩니다.

JSON-RPC 오류 코드 표

코드출처HTTP메시지사유과금 여부권장 조치
-32700BlockVectra200parse error-미과금 (1 CU 속도 제한 토큰 소모)요청 JSON 구문 수정
-32600BlockVectra200invalid requestinvalid_request미과금 (1 CU 속도 제한 토큰 소모)JSON-RPC 요청 구문 및 구조 수정
-32600BlockVectra200batch too large: max <N> callsbatch_too_large (+max)미과금배치를 한도 미만의 호출로 분할 (표준 배치 한도는 100건)
-32600BlockVectra200invalid request: ambiguous member nameinvalid_request미과금JSON 객체에서 중복되거나 모호한 멤버 이름 제거
-32601BlockVectra200method not available: <method>-미과금해당 체인에 허용된 메서드만 호출 (지원 체인 참조)
-32600BlockVectra404unknown chainunknown_chain미과금URL의 체인 이름 확인
-32602BlockVectra200eth_getLogs block range too large: max <N> blocks-미과금eth_getLogs 블록 범위 축소 (체인별로 한도 정의됨, 예: 1000 블록)
-32602BlockVectra200tracer not allowed-미과금허용된 네이티브 트레이서 사용 (callTracer, flatCallTracer, prestateTracer, 4byteTracer, noopTracer, 또는 생략)
-32602BlockVectra200trace timeout not allowed-미과금유효한 Go 지속 시간 문자열을 타임아웃 ≤ 30s로 설정
-32010BlockVectra200node is syncing; calls are temporarily unavailable-미과금노드 동기화 중이므로 나중에 재시도 (eth_chainId 제외)
-32011BlockVectra200historical state is not available beyond the most recent <N> blocks-미과금더 최근 블록 조회 (대상 블록이 상태 윈도우 내에 있어야 함; safe/finalized/earliest 태그 회피)
-32000BlockVectra200transaction not foundnot_found미과금트랜잭션 해시 확인 (0x + 64자리 16진수)
-32000BlockVectra200block not foundnot_found미과금블록 해시 또는 번호 확인
-32000BlockVectra200upstream response too largeresponse_too_large미과금쿼리 범위 축소 또는 요청 분할
-32005BlockVectra200-overloaded미과금서버가 일시적으로 과부하 상태이므로 나중에 재시도
-32005BlockVectra429rate limit exceededkey_rate_limit / free_plan_call_limit / concurrency_limit미과금요청 빈도 감소; Retry-After가 있는 경우 준수
-32022BlockVectra429request cost <N> CU exceeds burst capacity <M> CUrequest_exceeds_burst미과금단일 요청 CU가 버스트 용량 미만이 되도록 요청 또는 배치 분할
-32022BlockVectra429request has <N> calls, exceeding the free-plan limit of <M> calls per secondfree_plan_batch_too_large (+max)미과금배치를 초당 한도에 맞게 분할하거나 유료 플랜으로 업그레이드
-32603BlockVectra200upstream unavailableupstream_unavailable미과금업스트림 통신 실패, 나중에 재시도
-32603BlockVectra200no response from upstreamupstream_unavailable미과금업스트림 응답 없음, 나중에 재시도
-32603BlockVectra200malformed upstream responseupstream_unavailable미과금잘못된 형식의 업스트림 응답, 나중에 재시도
-32603BlockVectra200--미과금드문 내부 오류, 나중에 재시도
-32020BlockVectra402insufficient balancebalance_exhausted / free_grant_exhausted (+topup_url, 잔액 확인 가능 시 +balance_units / balance_cu)미과금콘솔 결제 관리 페이지 또는 GET /v1/topup/deposit-address(MCP get_deposit_address)에서 잔액 확인; 계정 전용 주소로 온체인 충전 진행(에이전트 충전 가이드 참조)
-32021BlockVectra503billing data temporarily unavailable-미과금청구 데이터 동기화 중 (잔액 문제 아님); Retry-After 초 동안 대기 후 재시도
4444Node200pruned history unavailable-미과금요청된 블록이 노드에 의해 가지치기됨; 미과금; 배치에 영향 없음
-32000Node200historical state ... is not available-미과금노드 상태 기록 윈도우 외부; 미과금; 배치에 영향 없음
-32000Node200old data not available due to pruning...-미과금노드 기록 윈도우 외부(state_window_blocks로 윈도우 결정); 미과금; 배치에 영향 없음
-32002Node200<node message>-미과금노드가 배치에서 시간 초과되어 호출 중단; 미과금; 배치 내 알림도 미과금
-32003Node200<node message>-미과금노드 배치 응답이 너무 커서 중단됨; 미과금; 배치 내 알림도 미과금
-32601Node200<node message>-미과금노출된 메서드가 노드에 구현되어 있지 않음; 다른 지원 메서드 사용
-32603Node200<node message>-미과금노드 내부 오류; 백오프 적용하여 재시도
-32600Node200<node message>-미과금노드가 배치 전체를 거부함; 미과금; 배치 내 알림도 미과금
OtherNode200<node message>-과금됨 (메서드 가중치)체인 결과(예: execution reverted, 노드 -32602); 컨트랙트 호출 파라미터 확인

Data API 과금 규칙

Data API는 읽기 전용 체인 데이터를 REST 엔드포인트로 래핑합니다. 과금 및 오류 처리는 다음 규칙을 따릅니다:

규칙 세부 사항

  • 2xx 성공 응답에만 과금됩니다.
  • 지원 범위를 벗어난 사용 불가능한 작업(지원되지 않는 체인 또는 추적 범위를 벗어난 블록 등)은 HTTP 422 no_coverage를 반환하며, 과금되지 않으나 속도 제한에는 산입됩니다.
  • HTTP 401, 402, 404 및 429 응답은 과금되지 않습니다. 응답 헤더(x-bv-meter: 1)에 대해서는 HTTP 상태 코드와 과금 규칙을 참조하세요.

Data API 상태 코드 표

HTTP 상태오류 코드 / 상황과금 여부권장 조치
200데이터 응답 성공과금됨 (Data API 작업 CU 가중치)응답 엔벨로프의 data, meta, next_cursor 파싱
400요청 파라미터 형식이 잘못되었거나 필수 필드 누락미과금쿼리 또는 본문 파라미터 확인 및 수정
402잔액 소진 (error.code: "insufficient_balance", 잔액 확인 가능 시 balance_units 및 balance_cu 포함)미과금콘솔 결제 관리 페이지 또는 GET /v1/topup/deposit-address(MCP get_deposit_address)에서 잔액 확인; 계정 전용 주소로 온체인 충전 진행(에이전트 충전 가이드 참조)
401API key 누락, 알 수 없거나 비활성화됨 (error.code: "missing_api_key" 또는 "invalid_api_key")미과금x-api-key 헤더에 유효한 API key 전달
404알 수 없거나 비공개 체인 (error.code: "not_found"), 또는 요청한 객체가 존재하지 않음미과금URL의 체인 slug(정확한 소문자여야 함) 및 요청 경로 확인
409요청된 블록 또는 윈도우가 현재 인덱싱된 높이보다 높음 (error.code: "not_indexed_yet", indexed_through 포함)미과금indexed_through 이하의 블록을 쿼리하거나 나중에 재시도
422체인별 작업 사용 불가(예: 지원되지 않는 체인이거나 추적 범위 외부, error.code: "no_coverage")미과금 (속도 제한에는 산입됨)GET /v1/status(무료, 키 불필요 data_features)를 통해 지원 기능 확인
429속도 제한 초과(error.code: "rate_limited"), 또는 단일 요청 비용이 키의 버스트 용량을 초과함(error.code: "cost_exceeds_burst")미과금요청 빈도 축소; 과도하게 큰 요청 분할(버스트 용량을 초과하는 요청은 그대로 보내면 절대 성공하지 않음)
503데이터 서비스 일시적 이용 불가(error.code: "unavailable"), 또는 체인이 혼잡함(error.code: "gateway_overloaded")미과금나중에 재시도하고 Retry-After가 있는 경우 준수

잔액 조회 (GET /v1/account)

API key 소유자는 과금이 발생하거나 Compute Unit(CU)을 차감하지 않고도 잔액 및 키 한도 세부 정보를 직접 확인할 수 있습니다:

curl -H "x-api-key: $BLOCKVECTRA_API_KEY" https://api.blockvectra.com/v1/account
  • 무료 및 미과금: GET /v1/account는 무료입니다. 일체 과금되지 않으며, CU를 차감하지 않고, 잔액이 0이거나 음수인 경우에도 HTTP 200과 함께 현재 잔액을 반환합니다(402를 절대 반환하지 않음).
  • 인증: 키 인증에는 x-api-key 헤더만 독점적으로 사용됩니다(경로 키 및 Bearer 토큰은 허용되지 않음). 헤더가 누락되면 401 missing_api_key를 반환하고, 유효하지 않거나 해지된 키는 401 invalid_api_key를 반환합니다. (만료된 키는 403 key_expired를 반환하며, 일시적인 서비스 장애 시 Retry-After와 함께 503 auth_unavailable 또는 billing_unavailable을 반환합니다.)
  • 속도 제한: CU 측정 및 과금과 무관하게 키 ID당 초당 5개 요청의 독립적인 제한이 적용됩니다. 한도를 초과하면 Retry-After 헤더와 함께 HTTP 429 rate_limited를 반환합니다.

응답 필드:

  • key_id: API key의 식별자 문자열.
  • plan: 계정 플랜 유형 (계정에 무료 플랜 호출 속도 할당량이 있는 경우 free, 그렇지 않으면 paid).
  • balance_units: 단위 기준 계정 잔여 잔액 (0 또는 음수일 수 있음).
  • balance_cu: Compute Unit(CU)으로 환산된 잔여 잔액.
  • balance_as_of_age_ms: 데이터 소스에서 잔액을 읽어온 후 경과한 밀리초.
  • key: 키별 제한 및 할당량 세부 정보:
    • cu_per_sec: 초당 CU 기준 토큰 버킷 리필 속도.
    • burst_cu: CU 기준 토큰 버킷 버스트 용량.
    • cu_cap: 해당 키의 총 수명 CU 한도, 한도가 없는 경우 null.
    • cu_cap_remaining: cu_cap 아래 남은 CU, 한도가 없는 경우 null (0 또는 음수일 수 있음).
    • expires_at: RFC 3339 형식의 만료 타임스탬프, 키가 만료되지 않는 경우 null.

응답 예시:

{
  "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>"
  }
}

가격 책정 및 업그레이드

과금되는 모든 호출의 구체적인 비용은 공표된 CU 가중치에 의해 결정됩니다:

  • 모든 메서드와 작업의 가중치를 확인하려면 메서드 가중치 표 및 JSON-RPC CU 측정 규칙을 참조하세요.
  • 플랜 요금 및 정산 세부 정보는 요금 페이지를 참조하세요.
  • 유료 플랜으로 업그레이드: 유료 충전을 진행하면 무료 플랜의 초당 호출 수 제한이 해제되며, 각 키는 여전히 CU 속도 및 버스트 제한의 적용을 받습니다.

온체인 충전 프로세스

계정 잔액이 부족하거나 더 높은 처리량이 필요한 경우, 다음 단계에 따라 콘솔에서 온체인 충전을 진행하세요:

  1. 콘솔 로그인: BlockVectra 콘솔에 로그인합니다.
  2. 결제 관리 페이지로 이동: 결제 관리 페이지로 이동합니다.
  3. 전용 주소 확인: 온체인 충전 카드에서 계정의 전용 충전 주소를 복사하거나 QR 코드를 스캔합니다.
  4. 자금 전송: 페이지에 나열된 지원 네트워크 및 USDC / USDT / USDG만 사용하여 전송하세요. 지원되는 네트워크 및 최소 충전 금액은 콘솔에 표시됩니다.
  5. 자동 크레딧 반영: 온체인에서 감지되면 트랜잭션이 "처리 중"으로 표시되며, 완료되면 크레딧이 잔액에 자동으로 추가됩니다.

주의 사항:

  • 콘솔에 명시적으로 나열된 네트워크와 토큰만 사용하세요. 지원되지 않는 체인이나 잘못된 토큰으로 전송된 금액은 자동으로 반영될 수 없습니다.
  • 각 전송 금액이 콘솔에 안내된 최소 충전 금액 이상인지 확인하세요.
  • 첫 유료 충전이 반영되면 계정이 유료 계정으로 업그레이드되어 무료 플랜의 초당 호출 수 제한이 해제됩니다.

에이전트나 서버 프로그램은 API key를 사용하여 충전 엔드포인트를 직접 호출할 수 있습니다. 에이전트 프로그래밍 방식 충전 가이드를 참조하세요.

Webhook 푸시 과금

푸시는 전달된 데이터 이벤트, 성공한 이력 조회 및 과금 대상 주소-일에 대해 각각 별도의 가중치가 적용됩니다. 이벤트 이력 조회를 제외한 관리 호출, 실패한 전달 시도, 자동 재시도 및 제어 이벤트는 무료입니다. 전달된 각 이벤트는 1회 과금되며, 고객 리플레이 및 블록 재구성(reorg) 후 다시 전달된 표준 체인 이벤트는 새로운 과금 대상 전달로 처리됩니다. 주소 요금은 각 구독이 UTC 일자 중 온라인 상태였던 기간 동안의 최대 주소 수를 기준으로 부과됩니다. 계정 무료 주소 할당량은 구독 간에 공유되며, 먼저 생성된 구독이 우선적으로 이를 사용합니다. 두 개의 구독에 동일한 주소가 포함되면 2회 계산되며, 체인을 추가하면 이벤트 요금은 변경되지만 주소 요금은 증가하지 않습니다.

설정, 서명 검증 및 전달 복구는 블록체인 Webhook API 가이드를 참조하세요. 스테이블코인 결제 가이드에서는 수신 확인 및 폴링 백필을 다루며, WebSocket 구독은 자체적인 연결 및 알림 측정 방식을 사용합니다. 요청 오류는 오류 레퍼런스에 나열되어 있습니다. 아래 가중치는 GET /v1/plans에서 가져옵니다.

용량/항목과금 단위CU
push.address_day과금 대상 주소-일33
push.history성공한 이력 조회 요청25
push.log전달된 데이터 이벤트150
push.native_transfer전달된 데이터 이벤트150
push.token_transfer전달된 데이터 이벤트150

계정당 UTC 일일 무료 주소 수: 1000

플랜과 관계없이 모든 구독 그룹이 공유하는 계정당 UTC 일일 무료 주소 할당량입니다. 각 그룹에 대해 해당 일 동안 온라인 상태였던 최대 주소 수를 집계하며, 그룹 ID 오름차순으로 할당량을 배분합니다. 동일한 주소가 두 그룹에 포함되면 두 번 계산되며, 그룹 내 체인 수가 주소 수에 곱해지지는 않습니다. 하루 종일 오프라인이거나 삭제된 그룹은 포함되지 않습니다. 각 그룹별로 할당량에서 차감된 후 남은 주소 수에 `method_weights`의 `push.address_day` CU 가중치를 곱합니다. 현재 설정된 할당량은 주소-일 요금에 사용되는 요금 정책과 동일한 정책에서 가져오며, 계정 용량 한도나 그룹별 별도 할당량이 아닙니다.

예시: 전달된 native.transfer 이벤트 10개, 성공한 이력 조회 2회, 과금 대상 주소-일 10일의 비용은 10 × 150 + 2 × 25 + 10 × 33 = 1880 CU입니다. 과금 대상 주소-일은 계정 무료 주소 할당량을 공제한 후 계산됩니다.

다음 단계

최종 수정일:

이 페이지의 내용