Барлық мақалалар
6 мин оқу

TON лайтсервері неге «not ready» дейді және оны қалай жоямыз

TON лайтсервері «not ready» немесе ADNL-таймаут қайтара ма? Себебін жария конфигтен табамыз және қатені ретрайлармен әрі TONNode hosted-кілтімен жоямыз.

TONлайтсерверADNLnot readyMCPTON нодалары

Лайтсервер not ready: қарапайым сұрау жібердіңіз — жауабына «not ready» түсті

Сіз әмиянның балансын тексеретін немесе контрактінің get-әдісін шақыратын агент жазып отырсыз. Код дұрыс, мекенжай дұрыс, лайтсервер конфигі ресми global-config.json-нан алынған. Бірақ жауаптың орнына жүйелі түрде не not ready, не мүлдем ештеңе келмейді — қосылым жай ғана ілініп тұрып, ADNL-таймаут бойынша үзіледі. Оның үстіне бұл әрқашан қайталана бермейді: таңертең жұмыс істейді, жүктеме көбейгенде — жоқ. Таныс па? Бұл сіздің кодыңыздағы баг та емес, «TON құлап қалғаны» да емес. Бұл — жаһандық конфигтегі жария лайтсерверлердің болжамды мінез-құлқы. TON liteserver not ready неге пайда болатынын, клиент жағында не шынымен көмектесіп, ненің көмектеспейтінін талдап көрейік.

TON лайтсервердегі «not ready» мен ADNL-таймаут нені білдіреді

not ready — бұл лайтсервердің тікелей жауабы: «мен әлі синхрондалмадым, саған жауап бере алмаймын». TON-да блокчейннің екі деңгейі бар: мастерчейн (masterchain) және шардчейндерге/шардтарға (shardchains) бөлінетін basechain (воркчейн 0). Мастерчейн — кітаптың мазмұны іспетті, ал шардтар — транзакциялар мен аккаунт күйі жататын тараулардың өзі. Нода мастерчейн басын (head) көбіне тиісті shard-блоктарды қуып жетуден бұрын алады. Дәл сол сәтте мастерчейн basechain-нен озып кетеді, ал аккаунт күйі соңғы shard-блокта тұрады — оны әзірге тексеру мүмкін емес. Нода сізге ескірген немесе толық емес деректер бергенше, адал түрде not ready деп жауап береді.

ADNL-таймаут — сол дерттің көрші симптомы. ADNL — лайтсервер клиентпен сөйлесетін TON-ның нативті транспорт протоколы (ол жерде ешқандай HTTP жоқ). Нода шамадан тыс жүктелгенде, ол ADNL-сұрауға бөлінген терезеде жай ғана жауап бермейді, сонда клиент бизнес-логикаға да жетпей, таймаут бойынша үзіледі.

Мұнда қабаттарды шатастырмау маңызды. not ready мен ADNL-таймаут лайтсервердің нативті ADNL-протоколы деңгейінде тұрады. Бұл — toncenter пен tonapi.io тәрізді HTTP-шлюздер лимит асқанда қайтаратын HTTP 429 Too Many Requests-пен бірдей емес. Басқа қабаттар, басқа кодтар, басқа себептер. Егер сіз дәл 429-бен күресіп жатсаңыз — бұл бөлек әңгіме: toncenter-дегі 429-ды түзету туралы талдау. Ал TON-чаттардағы «228 қатесі» туралы мем — қауымдастықтың әзілі, нақты код емес; лайтсервер олай жауап бермейді.

Жаһандық конфигтегі жария лайтсерверлер жүктеме кезінде неге істен шығады

Мәселенің тамыры қарапайым. ton.org/global-config.json ішіндегі лайтсерверлер — ортақ әрі лимиттелген. Бұл — бүкіл әлемдегі мыңдаған әзірлеуші, бот, индексатор мен агент бір мезгілде соғып тұратын жария ресурс. Мұндай ресурстың үш жүйелі шектеуі бар:

  • Ортақ жүктеме. Пулды бүкіл экожүйемен бөлісесіз. Пик кезінде нода не желі басын қуып жетіп үлгермейді (not ready содан шығады), не жай ғана уақытында жауап бермейді (ADNL-таймаут).
  • Терең тарих жоқ. Жария нодалар терең мұрағат сақтамайды. Егер сізге lt/hash жұбы бойынша ескі транзакция керек болса, ол онда әлдеқашан жоқ болуы мүмкін — тарихпен жұмыс туралы бөлек lt пен hash жайлы материал бар.
  • Ешқандай кепілдік жоқ. Бұл — «қалай бар, солай» ресурсы. Сізде басымдық жоқ, өткізу қабілетін ешкім уәде етпейді: бүгін сәті түсті, ертең — жоқ.

Яғни not ready — «күте тұрып өткізуге» болатын кездейсоқтық емес, жүктеме астындағы ортақ ресурстың заңды мінез-құлқы. Ал сіздің ешқандай кодыңыз бөтеннің шамадан тыс жүктелген нодасын жылдамырақ синхрондауға мәжбүрлей алмайды.

Клиенттік фикстер: ретрайлар, эндпоинттерді ротациялау және таймауттар

Инфрақұрылымды өзгертпес бұрын клиенттен барын сығып алыңыз. Бұл тәсілдер шынымен жұмыс істейді, бірақ олардың шегі бар — нодалар бәрібір ортақ болып қала береді.

1. Экспоненциалды бэкоффпен ретрайлар

not ready көбіне өткінші: 200–800 мс өткенде сол лайтсервердің өзі керекті shard-блокты қолданып та үлгереді. Өсіп отыратын кідіріспен жасалған қарапайым қайталау қателердің байқарлықтай үлесін алып тастайды.

async function withRetry<T>(fn: () => Promise<T>, tries = 4): Promise<T> {
  let lastErr: unknown;
  for (let i = 0; i < tries; i++) {
    try {
      return await fn();
    } catch (e) {
      lastErr = e;
      // 'not ready' мен ADNL-таймауттарды ретраймыз, бірақ бизнес-қателерді емес
      await new Promise((r) => setTimeout(r, 200 * 2 ** i));
    }
  }
  throw lastErr;
}

2. Эндпоинттерді ротациялау

Пулда конфигтен алынған бірнеше лайтсервер ұстаңыз да, ағымдағысы not ready берсе немесе таймаутқа кетсе, келесісіне ауысыңыз. Бір нода артта қалса — көршісі басын қуып жеткен болуы мүмкін.

3. Ұлғайтылған таймаут

Әдепкі ADNL-таймаут шамадан тыс жүктелген жария нода үшін кейде тым қатал. Аздаған қосымша уақыт (бірнеше секунд) жалған үзілістерді азайтады. Бірақ таймаутты шексіздікке дейін созсаңыз — жай ғана ілініп қалған сұрауларды жинайсыз; бұл ем емес, анестезия.

Тағы бір пайдалы тәсіл — нақты сұрауға дейінгі жеңіл healthcheck. Бұған get_masterchain_info (мастерчейн басы) тамаша келеді: нода желі басын қуып жеткенде дәл осы операция бірінші болып жаңа seqno береді, ал not ready-ді тек нода мастерчейн басының өзін әлі қуып жетпегенде ғана қайтарады. Жаңа seqno берді ме — нода жұмыс істеп тұр, енді get_account_state, get_balance, run_get_method жасауға болады.

Адал қорытынды: ретрайлар + ротация + таймауттар қателер жиілігін төмендетеді, бірақ себебін жоймайды. Жария нодалар by design шамадан тыс жүктелген — сіз жай ғана есікті сыпайырақ қағасыз, ал оның артында сол баяғы кезек тұр. TON-ға қатынаудың басқа тәсілдері 2026 жылға арналған toncenter баламаларының шолуында жинақталған.

Өз нодасыз шешім: біздің лайтсервердегі TONNode hosted-кілті

not ready-ді түбегейлі жоюдың бір ғана жолы бар — ортақ нодаларға баруды тоқтату. TON-ның өз нодасын көтеру мен оған қызмет көрсету қымбатқа түседі әрі әуресі көп: синхрондау, диск, жаңарту, мониторинг. Аралық нұсқа — ортақ пулға бармай, кілт арқылы кепілдендірілген өткізу қабілеті мен басым қатынау алу.

TONNode — бұл TON үшін hosted MCP-сервер. MCP (Model Context Protocol) — ЖИ-агенттер (Claude, Cursor, ChatGPT/Codex, кез келген MCP-клиент) құралдарды шақыратын стандарт. Кодыңыз жаһандық конфигті парсылап, not ready төңірегінде әуре болғанның орнына, агент дайын құралды шақырады, ал оның артында — сіздің Bearer-кілтіңізбен жұмыс істейтін https://mcp.tonnode.io/mcp hosted-эндпоинті. Бұл — ортақ кезектің орнына кепілдендірілген өткізу қабілеті.

@tonnode/mcp пакеті — open source (MIT, npm-де және GitHub-та tonnode/mcp бар) — TON-ның нативті ADNL-протоколы бойынша, HTTP-қабаттарсыз жұмыс істейді. Яғни сіз транспортты баяу HTTP-шлюзге ауыстырмайсыз, сол баяғы адал ADNL-де қаласыз — бірақ өз кілтіңіз бойынша басым қатынаумен.

Диагностика мен күнделікті оқу үшін мыналар пайдаға асады:

  • get_masterchain_info — мастерчейн басы, табиғи healthcheck.
  • get_account_state — аккаунттың күйі, жалаушалары және соңғы транзакциясы.
  • get_balance — GRAM-мен баланс.
  • run_get_method — контрактінің кез келген read-only get-әдісі.

Егер сіз TON-дағы MCP-ді енді ғана бастап жүрсеңіз, TON үшін MCP гайды бойынша танысып шығыңыз.

Қалай қосуға болады: жергілікті npx немесе кілтпен hosted-эндпоинт

Тегін әрі жергілікті

Дерек оқитын құралдардың толық жинағы ешқандай баптаусыз, жария конфиг бойынша, банк картасынсыз және кілтсіз жергілікті жұмыс істейді:

{
  "mcpServers": {
    "ton": {
      "command": "npx",
      "args": ["-y", "@tonnode/mcp"]
    }
  }
}

Бұл — әзірлеу мен жергілікті эксперименттер үшін тамаша. Бірақ есте сақтаңыз: жергілікті npx капот астында бәрібір сол ортақ лайтсерверлерге барады, сондықтан жүктеме астындағы not ready-ден құтқармайды — ол тәуелділіктермен әурелеуден құтқарады және құралдардың бірыңғай интерфейсін береді.

Кілтпен hosted

Ортақ нодалардан кету үшін транспортты өз Bearer-кілтіңізбен HTTP-MCP-ге ауыстырыңыз (құралдарды шақырудың өзі біздің нодаға ADNL бойынша кетеді):

{
  "mcpServers": {
    "ton": {
      "type": "http",
      "url": "https://mcp.tonnode.io/mcp",
      "headers": { "Authorization": "Bearer tn_live_…" }
    }
  }
}

Агентпен жұмыста бұл қалай көрінеді

Қосылғаннан кейін агентке әдеттегі промпттың өзі жетеді — құралдарды өзі таңдайды:

Алдымен healthcheck үшін get_masterchain_info. Содан кейін EQC… үшін get_account_state — күйі мен соңғы транзакциясын көрсет. Одан соң сол мекенжай бойынша get_balance.

Капот астында бұл — тізбек: get_masterchain_info (нода тірі және басын қуып жетті) → get_account_state (күйі, жалаушалары, соңғы транзакциясы) → get_balance (GRAM балансы). Бөтеннің кезегі төңірегінде ешқандай ретрай жоқ — сұрау кепілдендірілген өткізу қабілетіне кетеді. Айтпақшы, GRAM — бұл атауы өзгертілген Toncoin (өзгерту 2026 жылдың маусымында өтті); желі бұрынғысынша TON деп аталады.

Тегін Hobby кілті (60 сұрау/мин) жүйеге кірген бойда, банк картасынсыз беріледі. Әрі қарай өсу шамасына қарай: Pro — $29/ай, 300 сұрау/мин; Scale — $199/ай, 1200 сұрау/мин. Маңызды бір жайт: TONNode-тың 16 құралының бәрі барлық тарифте қолжетімді — сіз функционал үшін емес, тек өткізу қабілеті үшін төлейсіз.

Өз арнайы лайтсерверіңіз — сұрау бойынша, self-serve емес

Кейде hosted-тариф аздық етеді де, арнайы бөлінген (single-tenant) лайтсервер керек болады — тек сіздің трафигіңізге арналған, көршілері мүлдем жоқ. Мұндай нұсқа бар, бірақ адалын айтайық: бұл — өзіне-өзі қызмет көрсету емес. Дашбордта «single-tenant қосу» түймесі жоқ — бұл қолмен рәсімделеді: бізге жазыңыз, жүктеме мен конфигурацияны талқылаймыз.

Тарих тереңдігі туралы тағы бір адал ескертпе. TONNode-тың мұрағаттық нодасы қазір синхрондалып жатыр және әзірге сұрауларға қызмет көрсетпейді. «Мұрағаттық тереңдік» — роадмаптың тармағы, дайын функция емес. Егер сізге дәл бүгін бүкіл уақыттағы терең тарих аса маңызды болса, мұны бөлек жоспарлаңыз. Қазір не дайын, ал не жоспарда екені — роадмапта.

Қысқаша

  • not ready = нода синхрондалмаған: мастерчейн шардтан озып кеткен, соңғы shard-блоктағы аккаунт күйін әзірге тексеру мүмкін емес.
  • Жаһандық конфигтегі жария лайтсерверлер — ортақ әрі лимиттелген: not ready, ADNL-таймауттар, терең тарих жоқ. Мұны toncenter/tonapi-дегі HTTP 429-бен шатастыруға болмайды — басқа қабат.
  • Клиенттік фикстер (бэкоффпен ретрайлар, эндпоинттерді ротациялау, таймауттар) қателер жиілігін азайтады, бірақ себебін жоймайды.
  • get_masterchain_info — сіздің healthcheck-іңіз: ол тек нода мастерчейн басын мүлдем қуып жетпегенде ғана not ready деп қызарады.
  • Нағыз ем — ортақ ресурстан кепілдендірілген өткізу қабілетіне көшу.

Тегін Hobby hosted-кілтін алыңыз да, ортақ нодаларда «not ready» аулауды доғарыңызtonnode.io/dashboard?plan=hobby

Әрі қарай жүктеме өскен сайын — тарифтер және роадмап.

Агентіңізге TON-ға қолжетімділік беріңіз

16 MCP-құрал: оқу, кастодиалды емес сваптар, кроссчейн және әмияндар. Тегін тариф — 60 сұрау/мин, карта керек емес.