liteserver 오류 읽는 법

liteserver는 모든 쿼리에 대해 요청된 객체 또는 정수 code와 message를 담은 liteServer.error로 응답합니다. TONNode 게이트웨이도 자신의 거부에 같은 봉투를 사용하므로, 라이브러리는 이를 다른 노드 오류와 똑같이 보여줍니다. tonutils-go는 코드를 ton.LSError에 보관하고, pytoniq는 .code와 .message를 가진 LiteServerError를 발생시키며, ton-lite-client는 메시지가 텍스트뿐인 Error를 던집니다.

코드는 두 곳에서 오며, 표는 어느 쪽인지 표시합니다.

  • 게이트웨이 코드 — 400, 403, 429, 500, 502 — 는 ADNL 연결과 노드 사이에 있는 TONNode 게이트웨이가 생성합니다. 게이트웨이는 메서드를 플랜과 대조하고, 속도 제한과 동시성 상한을 적용하며, 쿼리를 라이트 노드나 아카이브 노드로 라우팅합니다. 이 행들은 LiteServers 문서 5장을 다시 정리한 것입니다.
  • 노드 코드는 ton-blockchain/ton의 노드 소프트웨어에서 옵니다. -400은 LiteQuery 실패 텍스트가 전송될 때의 기본 코드이고, -503 timeout은 노드 자체의 쿼리별 기한이며, 651과 652는 common/errorcode.h의 ErrorCode::notready와 ErrorCode::timeout입니다. 두 행은 서버가 아니라 C++ 클라이언트(lite-client, tonlib) 자체가 발생시키는 것이며, 다른 언어는 그런 상황에서 자체 예외를 발생시킵니다.

가장 중요한 것들

403 archive history is not included in this plan. 기록을 순회할 때 중요한 유일한 신호입니다. 쿼리가 라이트 노드가 더 이상 보관하지 않는 블록을 필요로 했고(라이트 노드는 현재 블록 생성 속도 기준으로 약 이틀치 기록을 보관하는데, 이는 약속이 아니라 대략의 규모입니다) 플랜에 아카이브 범위가 없는 경우입니다. 재시도할 수 없습니다. 플랜에 아카이브를 추가하거나 더 최근 블록을 요청하세요. 4장은 경계가 어디인지 설명하고, 키에 대해 경계를 측정하는 프로브를 포함합니다.

429, 세 가지 다른 제한. too many requests는 키별 속도 제한으로, 비용 단위로 계산되는 leaky bucket입니다. 일반 읽기는 5, getTransactions 한 페이지는 최대 16, 블록 전체는 50입니다. too many concurrent requests for this key는 진행 중 상한으로, 플랜 RPS의 절반이며 최소 8, 최대 128입니다. gateway is saturated는 모든 고객을 통틀어 진행 중 쿼리 256개라는 전역 상한입니다. 앞의 둘은 클라이언트가 속도를 조절해야 한다는 뜻이고, 마지막은 백엔드가 힘들다는 뜻이며 올바른 대응은 백오프입니다. 7장에 비용 표와 속도를 조절하는 클라이언트 코드 조각이 있습니다.

502 backend node timeout. 노드가 게이트웨이의 시간 창 안에 응답하지 않았습니다. 라이트 노드 7초, 아카이브 20초입니다. 클라이언트 타임아웃을 이 값보다 높게 설정하세요. 더 짧은 타임아웃은 실제 502를 로컬 타임아웃으로 바꾸고 진단 정보를 잃게 합니다.

651과 "not in db" 계열. block … is not applied, block … is not in db, lt not in db는 모두 ErrorCode::notready를 가집니다. 이 노드에 요청한 것이 준비되어 있지 않다는 뜻입니다. 아직 따라잡는 중이거나, 블록이 노드의 상태보다 앞서 있거나, 블록이나 논리 시간이 저장소보다 오래된 경우입니다. 새 블록은 저절로 나타나고, 오래된 블록에는 아카이브가 필요합니다.

무엇을 재시도할까

429는 백오프를 두고, 502는 즉시 한 번 재시도하세요. 403은 재시도하지 마세요. 어느 변형도 두 번째 시도에서 성공하지 않습니다. 트랜잭션 순회에서 나온 -400도 재시도하지 마세요. 경계이지 일시적 장애가 아닙니다. 651의 경우 노드 상태보다 새로운 블록은 잠시 후 재시도하고, 저장소보다 오래된 블록은 재시도를 멈추세요.

멤풀 스트림 오류

멤풀 스트림은 자체 오류 목록을 가진 별개의 프로토콜입니다. JSON error 메시지와 4401, 4429 같은 WebSocket 종료 코드가 있으며, 이 표에서는 다루지 않습니다.