Barcha maqolalar
6 daq oʻqish

TON trading agent qurish: MCP bilan oʻqish, kotirovka, swap

MCP asosidagi TON trading agent: agent balansni oʻqiydi, qatʼiy kotirovka oladi va non-custodial swap yigʻadi — get_balance, get_swap_quote, build_swap_tx.

TON trading agentAI savdo agentiMCPTON swapnon-custodialOmniston

Har qanday TON trading agenti birinchi boʻlib duch keladigan muammo

Siz AI agentga «narx tushganda 50 USDTni GRAMga swap qil» deysiz — u esa 50 emas, 50 000 USDTlik tranzaksiya joʻnatadi. Sababi: TONdagi USDTda decimals = 6 (50 USDT = 50 000 000 raw-birlik), agent esa sukut boʻyicha toʻqqiz nolli oddiy jetton kabi hisoblab, summani 1000 barobar shishirib yuboradi. 1000 barobar xato, real pul, orqaga qaytarib boʻlmaydigan tranzaksiya. Aynan shu ildizdan teskari xato ham oʻsib chiqadi: agent balansda xom 1000000000 ni koʻradi va ishonch bilan «sizda bir milliard USDT bor» deb hisobot beradi, aslida u yerda 1000 ta.

Bular oʻylab topilgan qoʻrqinchli ertaklar emas, balki LLMni xom RPC orqali TON DeFiʼga toʻgʻridan-toʻgʻri ulagan har bir odam qoqiladigan aynan oʻsha toshlar: chalkashtirilgan decimals, jetton hamyoni manzilisiz jetton balansini oʻqib boʻlmasligi, kontekst orqali sizib chiqqan maxfiy kalit. Quyida — balanslarni oʻqiydigan, qatʼiy kotirovka oladigan va kalitlaringizga bir marta ham tegmasdan swap yigʻadigan TON trading agent (trading agent TON) ni qanday qurish haqida. Vosita — TONNode, TON uchun hosted MCP-server.

TON trading agent nima va unga nega MCP kerak

Trading agent — bu foydalanuvchi soʻroviga koʻra tarmoq holatini oʻqiy oladigan va bitimlarni tayyorlay oladigan LLM (Claude, Cursor, Codex yoki boshqa har qanday MCP-klient): «USDT balansimni koʻrsat», «500 USDTga qancha GRAM olaman», «swap yigʻ». Modelning oʻzi blokcheynni koʻrmaydi — unga asboblar kerak.

Aynan shu ishni MCP (Model Context Protocol) bajaradi — agentlar tashqi asboblarni chaqiradigan standart. Modelga xom ADNL-soʻrovlarni toʻqishni va BOC-yacheykalarni parsing qilishni oʻrgatish oʻrniga, siz unga turi aniq belgilangan funksiyalar toʻplamini berasiz: «balansni ber», «kotirovkani ber», «tranzaksiyani yigʻ». TONNode ana shunday asboblar manbai sifatida ulanadi va agentga tarmoq bilan ishlash uchun roppa-rosa 16 ta funksiya beradi: oʻqish, swap, cross-chain, hamyon generatsiyasi.

Trading agentga ulardan beshtasi kerak va ularning hammasi bepul tarifda mavjud:

oʻqish (get_balance, get_jetton_balance)
   -> decimals ni aniqlash (get_jetton_info)
      -> kotirovka olish (get_swap_quote)
         -> swap yigʻish (build_swap_tx)
            -> hamyon TonConnect orqali imzolaydi

Oxirgi qadamning kalit tafsiloti: imzolaydigan tomon — server emas, foydalanuvchining hamyoni. TONNode imzosiz xabarlarni qaytaradi — bu nega prinsipial masala ekanini oxirida koʻrib chiqamiz.

1-qadam: agent balanslarni oʻqiydi (get_balance, get_jetton_balance)

Biror narsani swap qilishdan oldin agent qoʻlida nima borligini tushunishi kerak. Ikkita asbob:

  • get_balance — manzildagi GRAM balansi. GRAM — bu 2026-yil iyunida nomi oʻzgartirilgan Toncoin; tarmoqning oʻzi hamon TON deb ataladi.
  • get_jetton_balance — jetton balansi: USDT, NOT yoki boshqa istalgani. Bu yerdagi sehr shundaki, jetton hamyoni on-chain hisoblab chiqiladi. Siz egasining manzilini va jettonning master-manzilini uzatasiz, TONNode esa jetton hamyoni manzilini oʻzi keltirib chiqaradi va uning balansini oʻqiydi. Bu manzilni oldindan bilish va biror joyda saqlash shart emas.

Agentga beriladigan prompt tom maʼnoda mana bunday koʻrinadi:

UQAbc...xyz hamyonining balansini tekshir:
unda qancha GRAM va qancha USDT bor?

Kapot ostida model nativ balans uchun get_balance ni, USDT uchun esa get_jetton_balance ni chaqiradi. Bitta muammo bor: qaytadigan narsa hali «insoniy» summalar emas, xom birliklar. Va eng muhimi shu yerdan boshlanadi. USDT balansini jetton hamyoni manzillari bilan ovora boʻlmasdan bitta chaqiruvda olish haqida alohida tahlil bor: /blog/usdt-balance-ton-one-call.

decimals hamma narsani hal qiladi: get_jetton_info va nega USDT = 6

TONda balanslar va summalar raw-birliklarda — kasr qismisiz butun sonlarda saqlanadi. Odam oʻqiy oladigan summani olish uchun xom sonni 10^decimals ga boʻlish kerak. Mana shu yerda tuzoq bor: turli jettonlarda decimals soni turlicha.

  • USDT da decimals = 6. Yaʼni 1 USDT = 1 000 000 raw-birlik.
  • TONdagi jettonlarning aksariyatida decimals = 9 (GRAM dagidek). Yaʼni 1 jetton = 1 000 000 000 raw-birlik.

6 va 9 ni chalkashtirish — summada roppa-rosa 1000 barobar xato qilish demak. Maqola boshidagi oʻsha «bir milliard USDT». Trading agent uchun bu kosmetika emas, ishonchning ildizi: agar u kattalik tartiblarini chalkashtirsa, unga bitim yigʻishni ishonib boʻlmaydi.

Shuning uchun konveyerga get_jetton_info oʻrnatiladi — u jettonning metadatasini qaytaradi: nomi, belgisi, emissiyasi va — eng muhimi — decimals. Agent ichidagi toʻgʻri mantiq:

raw       = get_jetton_balance(...)   // masalan, 1000000000
decimals  = get_jetton_info(...)      // USDT uchun → 6
human     = raw / 10 ** decimals      // 1000000000 / 1e6 = 1000 USDT

Xuddi shu raw decimals = 9 da 1 ta token berardi — farq juda katta. decimals ni promptga hardcode qilmang va modelga ularni xotirasidan «oʻylab topish»ga yoʻl qoʻymang: yangi jettonda u albatta xato qiladi. U har safar get_jetton_info dan tortib olsin va fakt boʻyicha qayta hisoblasin. Bu tuzoq va nega u odamlarga qimmatga tushishi haqida batafsil: /blog/jetton-decimals-ton.

2-qadam: Omniston orqali qatʼiy kotirovka (get_swap_quote)

Balanslar oʻqildi va toʻgʻri birliklarga oʻtkazildi — endi agentga narx kerak. DeFiʼda «chamalab aytilgan narx» ishlamaydi: likvidlik bir nechta DEX boʻylab yoyilgan, kurs harakatlanadi va agent taxminga emas, dolzarb kotirovkaga tayanishi kerak.

get_swap_quote GRAM ⇄ jetton swapiga Omniston protokoli orqali qatʼiy kotirovka beradi; Omniston TONning eng yirik ikkita DEX i — STON.fi va DeDust likvidligini birdaniga agregatsiya qiladi. Agentning oʻzi poollarni soʻrab chiqishi, narxlarni solishtirishi va sirpanishni hisoblashi shart emas: Omniston birlashtirilgan likvidlikdan eng yaxshi marshrutni qaytaradi.

Kotirovka ber: hozir 50 USDTga qancha GRAM olaman?

Model get_swap_quote ni 50000000 summasi bilan chaqiradi (oʻtgan qadamdagi oʻsha raw-birliklar) va aniq raqamlarni oladi: kirishda qancha, chiqishda qancha, qaysi marshrut boʻyicha, qanday sirpanish bilan. Bu — qaror qabul qilish nuqtasi: agar agentda shart boʻlsa («faqat kurs X dan yaxshi boʻlsa swap qil»), u kotirovkani chegara bilan solishtiradi va yo davom etadi, yo keyingi iteratsiyani kutadi. Muhim: kotirovka hali bitim emas. Hech qanday mablagʻ qimirlamaydi, hech nima imzolanmaydi. Bu — bozorni oʻqish, xolos.

3-qadam: imzosiz swapni yigʻish (build_swap_tx) va hamyonda imzolash

Foydalanuvchi kotirovkani koʻrdi va «ha, swap qilamiz» dedi. Agent build_swap_tx ni chaqiradi va TonConnect uchun tayyor boʻlgan, swapning imzolanmagan tranzaksiyasini oladi.

«Imzolanmagan» soʻzini alohida taʼkidlayman. Server toʻgʻri xabarni yigʻadi — qabul qiluvchi manzili, payload, summa, marshrut parametrlari — va uni oʻz holicha qaytaradi. Keyin xabar foydalanuvchining hamyoniga (Tonkeeper, MyTonWallet, TonConnect bilan mos har qanday hamyon) ketadi, foydalanuvchi aynan nimani imzolayotganini koʻradi va oʻzi tasdiqlaydi. Imzoni serverda emas, foydalanuvchining oʻz hamyonida saqlanadigan maxfiy kaliti qoʻyadi.

get_balance / get_jetton_balance   →  nima borligini oʻqish
        ↓
get_jetton_info                    →  decimals ni aniqlash, qayta hisoblash
        ↓
get_swap_quote (Omniston)          →  qatʼiy kotirovka
        ↓
build_swap_tx                      →  imzolanmagan tranzaksiya
        ↓
foydalanuvchi hamyoni (TonConnect) →  imzo va joʻnatish

Har bir qadam — alohida, aniq asbob chaqiruvi. Agent pul bilan hech narsani «oʻz bilganicha oxiriga yetkazmaydi»: u tayyorlaydi, qaror va imzo esa odamda qoladi. Kotirovkadan imzogacha boʻlgan non-custodial swapning toʻliq stsenariysi bosqichma-bosqich shu yerda tahlil qilingan: /blog/agent-swap-ton-noncustodial.

Non-custodial: nega server hech qachon agentning kalitlarini saqlamaydi

Bu marketing iborasi emas, arxitektura chegarasi. TONNodeʼda swap, cross-chain va hamyon generatsiyasi asboblari qatʼiy non-custodial:

  • Server tranzaksiyalarni hech qachon imzolamaydi.
  • Server maxfiy kalitlar va mablagʻlarni hech qachon saqlamaydi.
  • U tashqariga chiqaradigan yagona narsa — imzolanmagan TonConnect-xabarlar.

Bu nega aynan trading agent uchun muhim? Chunki agent taʼrifiga koʻra pul bilan ishlaydi va taʼrifiga koʻra xato qilishi mumkin — soʻrovni notoʻgʻri tushunishi, summani chalkashtirishi, sikldan chiqolmay qolishi. Agar kalitlar serverda yotgan va server oʻzi imzolagan boʻlsa, agentning xatosi mablagʻning siz bilmagan holda yoʻqolishini anglatardi. Non-custodial sxemada oxirgi chegara — siz: hamyoningiz tasdiqlamaguncha birorta tranzaksiya joʻnamaydi.

TON Foundationʼning rasmiy @ton/mcp si bilan solishtiring — bu kastodial agent-hamyon: u operator-kalitni saqlaydi va oʻzi imzolaydi (split-key sxemasi, unda operator-kalit agentda, owner-kalit foydalanuvchida). Uning oʻz kuchli tomonlari bor — odam ishtirokisiz avtonom sarflash, NFT va DNS bilan ishlash, Foundationʼning rasmiy maqomi. Ammo ishonch modeli boshqacha: u yerda agent haqiqatan ham mablagʻni harakatlantira oladi. TONNode ongli ravishda qarama-qarshi chegarani tanlaydi: server umuman hech nimani imzolamaydi. Ikki yondashuvning kengaytirilgan taqqoslovi: /blog/custodial-vs-noncustodial-mcp.

Qanday ulash va 5 daqiqada nimadan boshlash

Yaxshi xabar: trading konveyerini yigʻish uchun pul toʻlash shart emas. Lekin ikkita bepul yoʻlni chalkashtirmaslik muhim — ularning asboblar toʻplami har xil.

Lokal ommaviy konfig toʻliq oʻqish toʻplamini beradi (8 ta asbob: get_masterchain_info, get_balance, get_account_state, get_transactions, run_get_method, get_jetton_balance, parse_address, get_jetton_info). npx orqali, kalitsiz oʻrnatiladi:

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

@tonnode/mcp paketi — open source (MIT), npm va GitHubʼda yotadi (tonnode/mcp), agent bilan tarmoq oʻrtasida HTTP qatlamlarisiz, TONning nativ ADNL-protokoli boʻyicha ishlaydi. Konfigni Claude Desktop, Cursor yoki istalgan MCP-klientga joylashtirasiz — va agent shu zahoti balanslarni oʻqiy oladi hamda get_jetton_info ni chaqira oladi.

Kotirovkalarning oʻzi esa — get_swap_quote va build_swap_txSWAP guruhiga kiradi va hosted-endpoint orqali oʻtadi. Kalit nuqta: bepul Hobby kalitida barcha 16 ta asbob mavjud, jumladan kotirovka ham, swap yigʻish ham. Yaʼni butun trading konveyeri (oʻqish → kotirovka → swap) bepul yigʻiladi — lekin aynan hosted Hobby kaliti orqali, lokal ommaviy konfig orqali emas. Hosted-endpoint uchun konfig:

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

TONNodeʼda roppa-rosa 16 ta asbob bor va barcha tariflarda 16 tasi ham mavjud — siz funksionallik uchun emas, faqat oʻtkazuvchanlik uchun toʻlaysiz:

  • Hobby — abadiy bepul, daqiqasiga 60 soʻrov, kartasiz.
  • Pro — $29/oy, daqiqasiga 300 soʻrov.
  • Scale — $199/oy, daqiqasiga 1200 soʻrov.

Trading konveyerini boshlash va sinovdan oʻtkazish uchun bepul Hobby kaliti zaxirasi bilan yetadi: daqiqasiga 60 soʻrov — bu agentning juda koʻp ketma-ket chaqiruvi. Karta kerak emas, kalit tizimga kirgan zahoti beriladi.

Bepul Hobby kalitini olish (60 req/min, kartasiz): tonnode.io/dashboard?plan=hobby

16 ta asbobning toʻliq roʻyxati: tonnode.io/mcp · Tariflar: tonnode.io/pricing


Beshta asbobdan konveyer yigʻing — get_balance, get_jetton_balance, get_jetton_info, get_swap_quote, build_swap_tx — decimals ni nazoratda tuting va imzoni hamyonga bering. Shunda sizda balanslarni halol oʻqiydigan, qatʼiy kotirovka oladigan va real summalarga swap tayyorlaydigan, birovning kalitlariga bir soniyaga ham kirmagan trading agent hosil boʻladi. TONdagi trading agent aynan shunday ishlashi kerak.

Agentingizga TONga yoʻl oching

16 ta MCP-vosita: oʻqish, nokastodial svoplar, krosscheyn va hamyonlar. Bepul tarif — 60 soʻrov/daq, karta kerak emas.