Barcha maqolalar
7 daq oʻqish

Jetton decimals TONda nima (USDT = 6, 9 emas)

TONda jetton decimals — nega USDT = 6, koʻpchilik jettonlar esa 9, get_jetton_info decimals ni qanday qaytaradi va bu balanslar uchun nega muhim.

jetton decimalsUSDT TONdajetton metadataTEP-64TON MCPraw-birliklar

Siz USDT balansini koʻrsatadigan agent yozyapsiz. Jetton-hamyon balansini soʻraysiz, 5000000 ni olasiz, uni 10^9 ga boʻlasiz — va ekranda haqiqiy 5 USDT oʻrniga 0.005 USDT paydo boʻladi. Tranzaksiyalar oʻtadi, RPC javob beradi, get-metod son qaytaradi — summa esa baribir roppa-rosa 1000 barobar xato chiqadi. Aybdor — deyarli hamma odatiga koʻra hardkod qilib qoʻyadigan bitta raqam: decimals.

Agar siz AI agentni TONga ulayotgan boʻlsangiz yoki jetton summalarini qoʻlda hisoblayotgan boʻlsangiz, decimals — istalgan balans va swapdan oldin tushunib olish kerak boʻlgan birinchi narsa. Keling, koʻrib chiqamiz: nega USDTda decimals = 6, TON uchun odatiy boʻlgan 9 emas; bu son umuman qayerdan kelib chiqqan va uni taxmin qilmasdan, bitta chaqiruvda qanday olish mumkin.

TONda jetton decimals: raw-birliklar va odam oʻqiydigan son

Blokcheyn kasr sonlarni saqlay olmaydi. Umuman. TONda ham, deyarli hamma joydagi kabi, istalgan summa kontraktda butun son koʻrinishida yotadi — bular raw-birliklar deb ataladi (minimal boʻlinmas birliklar). Kontrakt lugʻatida hech qanday 5.5 yoʻq va boʻlishi ham mumkin emas — faqat 5500000 kabi butun son bor.

Shu butun sondan odam koʻradigan summani olish uchun masshtab kerak. Aynan shu masshtab decimals hisoblanadi — saqlanayotgan butun son odam oʻqiydigan summaga nisbatan qancha surilganini koʻrsatuvchi oʻnning darajasi:

human = raw / 10^decimals
raw   = human * 10^decimals

Oʻxshatish oddiy. Hamyoningizdagi pul — soʻmda, lekin bankning buxgalteriyasida hammasi tiyinda, butun sonlarda hisoblanadi: 100 tiyin = 1 soʻm, yaʼni decimals = 2. Odamga soʻmni koʻrsatmoqchimisiz — tiyinlarni 10^2 = 100 ga boʻlasiz. Jettonlar bilan ham aynan shunday, faqat oʻnning darajasi boshqacha.

Kalit nuqta: blokcheynning oʻzi sonda «vergul» qayerdaligini bilmaydi. U butun raw-birliklar bilan ishlaydi. Foydalanuvchiga koʻrsatishda vergulni qayerga qoʻyishni klient hal qiladi — u jetton metadatasidan decimals ni oʻqiydi. decimals da xato qildingizmi — vergul siljidi, summa esa maʼnosiz songa aylandi.

TONda USDT decimals = 6, koʻpchilik jettonlarda esa 9

Yodda saqlash kerak boʻlgan ikkita raqam:

  • TONdagi USDT (Tether) → decimals = 6. Demak 1 USDT = 1 000 000 raw-birlik.
  • TONdagi qolgan jettonlarning koʻpchiligi → decimals = 9. Bu ayni paytda default qiymat hamdir: agar metadatada decimals maydoni umuman koʻrsatilmagan boʻlsa, klient standartga koʻra uni 9 ga teng deb hisoblashi shart.

Toʻqqizlik qayerdan kelib chiqqan. GRAMning oʻzi (avvalgi Toncoin, 2026-yil iyunda qayta nomlangan — tarmoq esa hamon TON deb ataladi) 9 ta belgiga ega: 1 GRAM = 10^9 nanogramm, va bu yerdagi «nano» aynan raw-birlikdir. TON jetton standarti bu qiymatni default sifatida meros qilib oldi va tarmoqdagi tokenlarning katta koʻpchiligi aynan decimals = 9 bilan yashaydi. Dasturchilar / 1e9 ni oʻylab ham oʻtirmay yozishga oʻrganib qolgan.

USDT esa — Ethereum dunyosidan kelgan mehmon: u yerda Tether tarixan 6 ta belgi bilan ishlaydi. Emitent odatiy aniqlikni TONda ham saqlab qoldi. Shu sababli USDT — «shunchaki 9 ni hardkod qilgan» deyarli har bir kishi qoqiladigan aynan oʻsha istisno. Va aynan shu jetton toʻlovlar uchun eng koʻp ishlatiladi.

Xatoning narxini hisoblaymiz. Aytaylik, jetton-hamyonda 5 000 000 raw-birlik USDT yotibdi:

  • toʻgʻri (decimals = 6): 5 000 000 / 10^6 = 5 USDT;
  • notoʻgʻri (decimals = 9): 5 000 000 / 10^9 = 0.005.

Xato roppa-rosa 10^(9−6) = 1000 barobar. Va aksincha: agar foydalanuvchi «5 USDT yubor» deb kiritsa, siz esa 10^9 ga koʻpaytirsangiz, 1000 barobar koʻp summani joʻnatmoqchi boʻlasiz. Toʻlov boti uchun bu «toʻlandi» va «rad etildi» oʻrtasidagi farq.

decimals qayerdan olinadi: jetton metadatasi va TEP-64 standarti

Muhim jihat: decimals — bu hamyon kodidagi maydon ham, protokol konstantasi ham emas. Bu — TEP-64 (Token Data Standard) standartida tavsiflangan aniq bir jetton metadatasining bir qismi. Har bir jetton oʻzining decimals ini, nomini, simvolini va rasmini oʻzi eʼlon qiladi.

TEP-64 metadatani uchta formatda saqlashga ruxsat beradi:

  • on-chain — barcha maydonlar toʻgʻridan-toʻgʻri jetton kontraktidagi lugʻatda (dictionary) yotadi; hech narsani yuklab olish shart emas;
  • off-chain — kontraktda faqat havola (uri) boʻladi, barcha maydonlar (name, symbol, decimals, image) yozilgan JSON esa shu URI boʻyicha veb-serverda yoki IPFSda yotadi;
  • semi-chain (gibrid) — maydonlarning bir qismi on-chain lugʻatda, bir qismi uri boʻyicha; klient off-chain kontentni yuklab oladi va uni lugʻatdagi qiymatlar bilan merj qiladi.

TEP-64 boʻyicha birlashtirish qoidasi shunday: agar lugʻatda uri kaliti mavjud boʻlsa, klient havola boʻyicha off-chain kontentni yuklab olishi va uni on-chain lugʻatdagi qiymatlar bilan birlashtirishi shart. Har xil format — oʻqishning har xil narxi: on-chain bitta get-metod bilan oʻqiladi, off-chain esa yana HTTP-soʻrovni ham talab qiladi. Bu uchta holatni qoʻlda qayta ishlash — oʻzi alohida «zavq», va aynan shu yerda bu ishni sizning oʻrningizga bitta tool bajargani qulay.

USDT metadatasi: get_jetton_info qanday qilib decimals = 6 ni beradi

TONdagi USDT metadatani off-chain formatda saqlaydi: jettonning master-kontraktida off-chain JSONga havola yotadi, shu JSONda esa name, symbol va eng muhimi decimals = 6 yozilgan. Jetton kartochkasini halol yigʻish uchun klient kontraktni oʻqishi, havolani olishi, u boʻyicha JSONni yuklab olishi va maydonlarni parslashi kerak.

TEP-64 formatini yodda tutish va lugʻat kataklarini qoʻlda parslash shart emas: bu aynan bitta tool oʻz zimmasiga oladigan ish. get_jetton_info kontraktga oʻzi boradi, metadatani parslaydi va tayyor decimals = 6 ni qaytaradi — keyingi butun arifmetika esa aynan shu son ustiga quriladi.

decimals ni bitta chaqiruv bilan qanday olish: get_jetton_info

Lugʻatni qoʻlda oʻqish, formatni (on/off/semi-chain) aniqlash, URI boʻyicha yurish va JSONni merj qilish oʻrniga — get_jetton_info bor. Bu TONNode MCP-serverining tooli: u jettonning master-kontrakt manzilini qabul qiladi va tayyor yigʻilgan metadatani qaytaradi — nom, simvol, decimals va emissiya.

TONNode — bu TON uchun hosted MCP-server. MCP (Model Context Protocol) — AI agentlar (Claude, Cursor, ChatGPT/Codex, istalgan MCP-klient) toollarni chaqiradigan standart. Bepul va lokal ulang — oʻqish uchun toʻliq toollar toʻplami bilan:

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

@tonnode/mcp paketi — open source (MIT), TONning nativ ADNL-protokoli boʻyicha ishlaydi, HTTP-qatlamlarsiz. Keyin agentga oddiy inson tilidagi soʻrov yetarli:

get_jetton_info tooli orqali TONdagi USDT jettonining decimals ini aniqla (master-kontrakt manzili falon) va 5 000 000 raw balans uchun bu odam oʻqiydigan USDTda qancha boʻlishini hisobla.

get_jetton_info decimals = 6 ni qaytaradi, keyingi butun arifmetika esa taxmin ustiga emas, shu son ustiga quriladi. Ixtiyoriy jetton uchun aynan shu chaqiruv uning oʻz qiymatini qaytaradi (koʻpincha 9, lekin doim tekshirish kerak). Asosiy qoida:

9 ni hardkod qilmang. Har bir jetton uchun decimals ni get_jetton_info dan oʻqing.

Toʻqqizlik tokenlarning koʻpchiligi uchun ishlaydi va USDTda jimgina buziladi — bu esa aynan real pul eng koʻp aylanadigan jetton. AI agentga nega limitlarga toʻla ommaviy RPC emas, aynan alohida MCP-kirish kerakligi TONdagi agentlar uchun MCP-server haqidagi maqolada koʻrib chiqilgan.

Nega notoʻgʻri decimals balanslar va swaplarni buzadi

decimals — bu koʻrsatish uchun kosmetika emas. U summa «raw ⇄ odam» chegarasini kesib oʻtadigan barcha joylarga kiradi va xato butun zanjir boʻylab tarqaladi.

Balanslar

get_jetton_balance jetton balansini raw-birliklarda qaytaradi (kerakli jetton-hamyon on-chain hisoblanadi, uni oʻzingiz qidirishingiz shart emas). Bu butun sonning oʻzi decimals siz hech narsani anglatmaydi — 10^decimals ga boʻlmaguningizcha uni foydalanuvchiga toʻgʻri koʻrsata olmaysiz:

raw = 5 000 000
decimals = 6  → 5 USDT      ✅
decimals = 9  → 0.005       ❌ (1000 barobar kam)

Agentdagi toʻgʻri tartib: avval get_jetton_infodecimals ni olish, keyin get_jetton_balance → raw ni 10^decimals ga boʻlish. Ommaviy laytserverlar esa shunday oʻqish soʻrovlarida limitlarga qanday qilib tiqilib qolishi — TONning ommaviy laytserverlari limitlari tahlilida.

Swaplar

get_swap_quote GRAM⇄jetton DEX boʻyicha qatʼiy kotirovka beradi (Omniston protokoli orqali, likvidlik STON.fi + DeDust) — kiritilayotgan summani ham, olinadigan summa bahosini ham — yana jettonning raw-birliklarida. Bu yerda notoʻgʻri decimals ikki marta uradi. Aytaylik, foydalanuvchi 10 USDT ni swap qilmoqchi: decimals = 6 da kotirovkaga 10 000 000 raw uzatish kerak. Xato bilan 9 ni qoʻlladingizmi — 10 000 000 000 raw soʻradingiz, yaʼni hamyonda yoʻq 10 000 USDT ga swap. Javobni parslashdagi teskari xato esa kutilayotgan summani 1000 barobar kamaytiradi va foydalanuvchi kursni talonchilik deb hisoblaydi.

Aynan shu prinsip cross-chain kotirovkalarda va istalgan tranzaksiyalarda ham amal qiladi: blokcheynda hammasi butun raw-birliklarda, va odam oʻqiydigan summalarga yagona koʻprik — toʻgʻri decimals.

Amaliyotda tekshirish: get_jetton_balance va get_swap_quote

Agent bironta ham hardkod qilingan raqamsiz oʻzi bajarib chiqadigan qisqa stsenariy yigʻamiz.

Bosqichma-bosqich stsenariy

1. decimals ni aniqlash. get_jetton_info(USDT master) → decimals = 6.

2. Balansni oʻqish. get_jetton_balance(egasi, USDT master) → 5 000 000 (raw). Hisoblaymiz: 5 000 000 / 10^6 = 5 USDT. Agar 9 ni olganingizda edi, 0.005 chiqar edi. Bu — sizning signal testingiz: USDTda kutilmaganda juda kichkina son koʻrdingizmi, birinchi navbatda 6 oʻrniga 9 ni qoʻllab qoʻymaganingizni tekshiring.

3. Kotirovka soʻrash. 5 USDT ni GRAMga swap qilmoqchimiz. Rawda bu 5 × 10^6 = 5 000 000 — aynan shu summani get_swap_quote ga beramiz. Natija ham rawda keladi, GRAM esa 9 belgili, demak foydalanuvchiga koʻrsatish uchun javobni 10^9 ga boʻlamiz.

4. Metadataga ishonmayapsizmi? On-chain toʻgʻridan-toʻgʻri qayta tekshirish mumkin. run_get_method kontraktning istalgan read-only get-metodini chaqiradi — xuddi shu usul bilan master-kontraktdan get_jetton_data ni soʻrash va raqamlar mos kelishiga ishonch hosil qilish mumkin. Bu moslashuvchanroq, lekin TEP-64 formatini bilishni va lugʻatni qoʻlda parslashni talab qiladi; tezlik va ishonchlilik muhim boʻlganda get_jetton_info masalani bitta javob bilan yopadi. TONning RPC-provayderlari get-metodlar va arxivga kirish boʻyicha bir-biridan nimasi bilan farq qilishi — TON RPC-provayderlarining halol taqqoslashida.

Agentga prompt

Butun stsenariy uchun prompt oddiygina koʻrinadi:

TONdagi USDT ni ol. get_jetton_info orqali decimals ni oʻqi. get_jetton_balance orqali mening balansimni rawda ol va odam oʻqiydigan USDTga oʻgir. Keyin get_swap_quote orqali 5 USDT ni GRAMga swap qilish kotirovkasini hisobla — oʻqilgan decimals boʻyicha 5 USDT ni rawga oʻgirishni unutma.

Agent stsenariylari uchun yana bir tafsilot: TONNodeʼning swap toollari qatʼiy nokastodial. Server hech qachon imzolamaydi va kalitlarni saqlamaydi — build_swap_tx imzolanmagan TonConnect-xabarni qaytaradi, uni esa foydalanuvchining hamyoni imzolaydi. Hatto toʻgʻri decimals ham serverga mablagʻ ustidan nazorat bermaydi: u faqat hisoblaydi va tranzaksiyani shakllantiradi. TONdagi swaplarda millisekundlar va kechikishlar qayerda yoʻqolishi — TONda tezkor treyding tahlilida.

Qisqacha

  • decimals — blokcheyndagi raw-birliklar bilan odam oʻqiydigan summa orasidagi oʻnning darajasi: human = raw / 10^decimals.
  • TONda default — 9 belgi; USDT — 6 (1 USDT = 1 000 000 raw). Adashtirish = 1000 barobar xato.
  • decimals kodda emas, jetton metadatasida (TEP-64) yashaydi. USDTda metadata off-chain saqlanadi, lekin get_jetton_info baribir decimals = 6 ni bitta javob bilan beradi.
  • 9 ni hardkod qilmang. decimals ni get_jetton_info orqali oʻqing va barcha balanslar (get_jetton_balance) hamda kotirovkalarni (get_swap_quote) shu son ustiga quring.

Bepul Hobby kalitini oling (daqiqasiga 60 soʻrov, kartasiz) va istalgan jettonning decimals ini get_jetton_info orqali hoziroq oʻqing: https://tonnode.io/dashboard?plan=hobby

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.