Sinov mijozi TON (Telegram Open Network) va aqlli shartnomalar uchun yangi Fift tili

Bir yildan ko'proq vaqt oldin Telegram messenjeri o'zining markazlashtirilmagan tarmog'ini chiqarish rejalari haqida ma'lum bo'lgan edi. Telegram Ochiq Tarmoq. Keyin Nikolay Durov tomonidan yozilgan va kelajakdagi tarmoqning tuzilishi tasvirlangan katta hajmli texnik hujjat paydo bo'ldi. Uni o'tkazib yuborganlar uchun men ushbu hujjatning qayta hikoyasini o'qishni tavsiya qilaman (1-qism, 2-qism; uchinchi qism, afsuski, hali ham qoralamalarda chang yig'moqda).

O'shandan beri, bir necha kun oldin TON rivojlanishining holati to'g'risida muhim yangilik yo'q edi (birida norasmiy kanallar) sahifaga havola ko'rinmadi https://test.ton.org/download.html, qayerda joylashgan:
ton-test-liteclient-full.tar.xz — TON test tarmog'i uchun yorug'lik mijozining manbalari;
ton-lite-client-test1.config.json — test tarmog'iga ulanish uchun konfiguratsiya fayli;
README — mijozni qurish va ishga tushirish haqida ma'lumot;
QANDAY — mijoz yordamida aqlli shartnoma tuzish bo'yicha bosqichma-bosqich ko'rsatmalar;
ton.pdf — TON tarmogʻining texnik koʻrinishi bilan yangilangan hujjat (2-yil 2019-mart);
tvm.pdf — TVM ning texnik tavsifi (TON Virtual Machine, TON virtual machine);
tblkch.pdf — TON blokcheynining texnik tavsifi;
fifthbase.pdf — TONda aqlli shartnomalar yaratish uchun moʻljallangan yangi Fift tilining tavsifi.

Takror aytaman, sahifa va bu hujjatlarning barchasi Telegram’dan rasmiy tasdiqlanmagan, biroq bu materiallarning hajmi ularni juda ishonarli qiladi. Chop etilgan mijozni ishga tushiring o'z xavf-xatarida.

Sinov mijozini yaratish

Birinchidan, sinov mijozini yaratishga va ishga tushirishga harakat qilaylik - xayriyatki, README bu oddiy jarayonni batafsil tasvirlab beradi. Men buni misol sifatida macOS 10.14.5 yordamida qilaman; Boshqa tizimlarda qurish muvaffaqiyatiga kafolat bera olmayman.

  1. Yuklab oling va paketdan chiqaring manba arxivi. Eng so'nggi versiyani yuklab olish juda muhim, chunki bu bosqichda orqaga qarab muvofiqlik kafolatlanmaydi.

  2. Tizimda make, cmake (3.0.2 yoki undan yuqori versiya), OpenSSL (jumladan, C sarlavhasi fayllari), g++ yoki clang soʻnggi versiyalari oʻrnatilganligiga ishonch hosil qiling. Men hech narsa o'rnatishim shart emas edi, hamma narsa darhol birlashdi.

  3. Faraz qilaylik, manbalar papkaga ochilgan ~/lite-client. Undan alohida yig'ilgan loyiha uchun bo'sh papka yarating (masalan, ~/liteclient-build), va undan (cd ~/liteclient-build) buyruqlarni chaqiring:

    cmake ~/lite-client
    cmake --build . --target test-lite-client

    Sinov mijozi TON (Telegram Open Network) va aqlli shartnomalar uchun yangi Fift tili

    Aqlli shartnomalar uchun Fift til tarjimonini yaratish uchun (quyida bu haqda batafsilroq), biz ham qo'ng'iroq qilamiz

    cmake --build . --target fift

  4. Joriyni yuklab oling konfiguratsiya fayli sinov tarmog'iga ulanish va uni yig'ilgan mijoz bilan papkaga qo'yish uchun.

  5. Bajarildi, siz mijozni ishga tushirishingiz mumkin:

    ./test-lite-client -C ton-lite-client-test1.config.json

Agar hamma narsa to'g'ri bajarilgan bo'lsa, siz shunday bir narsani ko'rishingiz kerak:

Sinov mijozi TON (Telegram Open Network) va aqlli shartnomalar uchun yangi Fift tili

Ko'rib turganimizdek, bir nechta buyruqlar mavjud:
help — ushbu buyruqlar ro'yxatini ko'rsatish;
quit - tashqariga chiqish;
time — serverda joriy vaqtni ko'rsatish;
status — ulanish va mahalliy ma'lumotlar bazasi holatini ko'rsatish;
last — blokcheyn holatini yangilang (oxirgi blokni yuklab oling). Tarmoqning joriy holatini ko'rganingizga ishonch hosil qilish uchun har qanday so'rovlardan oldin ushbu buyruqni bajarish muhimdir.
sendfile <filename> — TON tarmog'iga mahalliy faylni yuklang. Tarmoq bilan o'zaro aloqa shunday amalga oshiriladi - masalan, yangi smart-kontraktlar yaratish va hisoblar o'rtasida pul mablag'larini o'tkazish bo'yicha so'rovlar;
getaccount <address> — joriyni ko'rsatish (buyruq bajarilgan vaqtda) last) ko'rsatilgan manzil bilan hisobning holati;
privkey <filename> — shaxsiy kalitni mahalliy fayldan yuklang.

Agar mijozni ishga tushirayotganda, opsiyadan foydalanib, unga jildni o'tkazsangiz -D, keyin u masterchainning oxirgi blokini unga qo'shadi:

./test-lite-client -C ton-lite-client-test1.config.json -D ~/ton-db-dir

Endi biz qiziqarliroq narsalarga o'tishimiz mumkin - Fift tilini o'rganing, aqlli shartnoma tuzishga harakat qiling (masalan, test hamyonini yarating), uni tarmoqqa yuklang va hisoblar o'rtasida pul o'tkazishga harakat qiling.

Beshinchi til

Hujjatdan fifthbase.pdf Telegram jamoasi aqlli shartnomalar yaratish uchun yangi stek tilini yaratganini bilib olishingiz mumkin Besh (ko'rinishidan raqamdan beshinchi, Forth tiliga o'xshash, Fifth bilan juda ko'p umumiylik mavjud).

Hujjat juda katta hajmli, 87 sahifadan iborat va men ushbu maqola doirasida uning mazmunini batafsil aytib bermayman (hech bo'lmaganda o'zim o'qishni tugatmaganim uchun :). Men asosiy fikrlarga e'tibor qarataman va ushbu tilda bir nechta kod misollarini keltiraman.

Asosiy darajada Fiftning sintaksisi juda oddiy: uning kodi quyidagilardan iborat so'zlar, odatda bo'shliqlar yoki qatorlar bilan ajratiladi (maxsus holat: ba'zi so'zlar o'zidan keyin ajratuvchini talab qilmaydi). Har qanday so'z ma'lum bir harfga mos keladigan belgilar ketma-ketligi aniqlash (taxminan, tarjimon bu so'zga duch kelganda nima qilishi kerak). Agar so'zning ta'rifi bo'lmasa, tarjimon uni raqam sifatida tahlil qilishga va stekga qo'yishga harakat qiladi. Aytgancha, bu yerdagi raqamlar - to'satdan - 257 bitli butun sonlar va kasrlar umuman yo'q - aniqrog'i, ular darhol bir juft butun songa aylanadi va ratsional kasrning soni va maxrajini tashkil qiladi.

So'zlar to'plamning yuqori qismidagi qiymatlar bilan o'zaro ta'sir qiladi. So'zlarning alohida turi - prefiks — stekni emas, balki manba faylidagi keyingi belgilarni ishlatadi. Masalan, string literallari shunday amalga oshiriladi - tirnoq belgisi (") keyingi (yopilish) qo‘shtirnoqni qidiradigan va ular orasidagi satrni stekga suruvchi prefiks so‘zdir. Bitta laynerlar xuddi shunday yo'l tutishadi (//) va ko'p qatorli (/*) Izohlar.

Bu erda tilning deyarli butun ichki tuzilishi tugaydi. Qolgan barcha narsalar (shu jumladan boshqaruv tuzilmalari) so'zlar (ichki, masalan, arifmetik amallar va yangi so'zlarning ta'rifi); yoki "standart kutubxona" da belgilangan. Fift.fif, papkada joylashgan crypto/fift manbalarda).

Fiftda oddiy misol dastur:

{ dup =: x dup * =: y } : setxy
3 setxy x . y . x y + .
7 setxy x . y . x y + .

Birinchi qator yangi so'zni belgilaydi setxy (prefiksga e'tibor bering {, bu yopilishdan oldin blokni yaratadi } va prefiks :, bu aslida so'zni belgilaydi). setxy stekning yuqori qismidan raqam oladi, uni global deb belgilaydi (yoki qayta belgilaydi). doimiy x, va bu sonning kvadrati doimiy sifatida y (Kontaktlarning qiymatlari qayta belgilanishi mumkinligini hisobga olib, men ularni o'zgaruvchilar deb atashni afzal ko'raman, lekin men tilda nomlash qoidalariga amal qilaman).

Keyingi ikkita satr stekga raqam qo'yadi va qo'ng'iroq qiladi setxy, keyin konstantalarning qiymatlari ko'rsatiladi x, y (so'z chiqish uchun ishlatiladi .), har ikkala konstanta ham stekga joylashtiriladi, jamlanadi va natija ham chop etiladi. Natijada biz ko'ramiz:

3 9 12 ok
7 49 56 ok

(“OK” qatori joriy satrni interaktiv kiritish rejimida qayta ishlashni tugatgandan so‘ng tarjimon tomonidan chop etiladi)

Xo'sh, to'liq kod misoli:

"Asm.fif" include

-1 constant wc  // create a wallet in workchain -1 (masterchain)

// Create new simple wallet
<{  SETCP0 DUP IFNOTRET INC 32 THROWIF  // return if recv_internal, fail unless recv_external
    512 INT LDSLICEX DUP 32 PLDU   // sign cs cnt
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  // sign cs cnt cnt' pubk
    s1 s2 XCPU            // sign cs cnt pubk cnt' cnt
    EQUAL 33 THROWIFNOT   // ( seqno mismatch? )
    s2 PUSH HASHSU        // sign cs cnt pubk hash
    s0 s4 s4 XC2PU        // pubk cs cnt hash sign pubk
    CHKSIGNU              // pubk cs cnt ?
    34 THROWIFNOT         // signature mismatch
    ACCEPT
    SWAP 32 LDU NIP 
    DUP SREFS IF:<{
      8 LDU LDREF         // pubk cnt mode msg cs
      s0 s2 XCHG SENDRAWMSG  // pubk cnt cs ; ( message sent )
    }>
    ENDS
    INC NEWC 32 STU 256 STU ENDC c4 POPCTR
}>c
// code
<b 0 32 u, 
   newkeypair swap dup constant wallet_pk 
   "new-wallet.pk" B>file
   B, 
b> // data
// no libraries
<b b{00110} s, rot ref, swap ref, b>  // create StateInit
dup ."StateInit: " <s csr. cr
dup hash dup constant wallet_addr
."new wallet address = " wc . .": " dup x. cr
wc over 7 smca>$ type cr
256 u>B "new-wallet.addr" B>file
<b 0 32 u, b>
dup ."signing message: " <s csr. cr
dup hash wallet_pk ed25519_sign_uint rot
<b b{1000100} s, wc 8 i, wallet_addr 256 u, b{000010} s, swap <s s, b{0} s, swap B, swap <s s, b>
dup ."External message for initialization is " <s csr. cr
2 boc+>B dup Bx. cr
"new-wallet-query.boc" tuck B>file
."(Saved to file " type .")" cr

Ushbu qo'rqinchli ko'rinishdagi fayl aqlli shartnoma yaratish uchun mo'ljallangan - u faylga joylashtiriladi new-wallet-query.boc ijro etilgandan keyin. Shuni esda tutingki, bu erda TON Virtual Machine uchun boshqa assembler tili qo'llaniladi (men bu haqda batafsil to'xtalmayman), uning ko'rsatmalari blokcheynga joylashtiriladi.

Shunday qilib, TVM uchun assembler Fiftda yozilgan - bu assemblerning manbalari faylda crypto/fift/Asm.fif va yuqoridagi kod qismining boshida ulanadi.

Nima deyishim mumkin, Nikolay Durov shunchaki yangi dasturlash tillarini yaratishni yaxshi ko'radi :)

Aqlli shartnoma yaratish va TON bilan o'zaro aloqa qilish

Shunday qilib, biz yuqorida aytib o'tilganidek, TON mijozi va Fift tarjimonini yig'dik va til bilan tanishdik deb faraz qilaylik. Endi qanday qilib aqlli shartnoma tuzish mumkin? Bu faylda tasvirlangan QANDAY, manbalarga biriktirilgan.

TONdagi hisoblar

Men tasvirlaganimdek TON sharhi, bu tarmoq bir nechta blokcheynni o'z ichiga oladi - bitta umumiy deb ataladigan mavjud. "master zanjir", shuningdek, 32-bitli raqam bilan aniqlangan qo'shimcha "ish zanjirlari" ning o'zboshimchalik soni. Masterchainning identifikatori -1, unga qo'shimcha ravishda 0 identifikatorli “tayanch” ish zanjiri ham ishlatilishi mumkin.Har bir ish zanjiri o'z konfiguratsiyasiga ega bo'lishi mumkin. Ichkarida, har bir ish zanjiri shardchainlarga bo'lingan, ammo bu yodda tutish kerak bo'lmagan amalga oshirish detalidir.

Bitta ish zanjirida o'zlarining account_id identifikatorlariga ega bo'lgan ko'plab hisoblar saqlanadi. Asosiy zanjir va nol ish zanjiri uchun ular 256 bit uzunlikda. Shunday qilib, hisob identifikatori, masalan, quyidagicha yoziladi:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Bu "xom" format: birinchi navbatda ish zanjiri identifikatori, keyin ikki nuqta va o'n oltilik yozuvdagi hisob identifikatori.

Bundan tashqari, qisqartirilgan format mavjud - ish zanjiri raqami va hisob manzili ikkilik shaklda kodlangan, ularga nazorat summasi qo'shiladi va bularning barchasi Base64 da kodlangan:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Ushbu yozuv formatini bilib, biz buyruq yordamida sinov mijozi orqali hisobning joriy holatini so'rashimiz mumkin

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Biz shunga o'xshash narsani olamiz:

[ 3][t 2][1558746708.815218925][test-lite-client.cpp:631][!testnode]    requesting account state for -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D
[ 3][t 2][1558746708.858564138][test-lite-client.cpp:652][!testnode]    got account state for -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D with respect to blocks (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F and (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F
account state is (account
  addr:(addr_std
    anycast:nothing workchain_id:-1 address:x8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D)
  storage_stat:(storage_info
    used:(storage_used
      cells:(var_uint len:1 value:3)
      bits:(var_uint len:2 value:539)
      public_cells:(var_uint len:0 value:0)) last_paid:0
    due_payment:nothing)
  storage:(account_storage last_trans_lt:74208000003
    balance:(currencies
      grams:(nanograms
        amount:(var_uint len:7 value:999928362430000))
      other:(extra_currencies
        dict:hme_empty))
    state:(account_active
      (
        split_depth:nothing
        special:nothing
        code:(just
          value:(raw@^Cell 
            x{}
             x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
            ))
        data:(just
          value:(raw@^Cell 
            x{}
             x{0000000D}
            ))
        library:hme_empty))))
x{CFF8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D2068086C000000000000000451C90E00DC0E35B7DB5FB8C134_}
 x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
 x{0000000D}

Belgilangan ish zanjirining DHT-da saqlanadigan tuzilmani ko'ramiz. Masalan, dalada storage.balance joriy hisob balansi, d storage.state.code - aqlli shartnoma kodi va ichida storage.state.data - uning joriy ma'lumotlari. E'tibor bering, TON ma'lumotlar ombori - Hujayra, hujayralar - daraxtga o'xshaydi, har bir hujayra o'z ma'lumotlari va yordamchi hujayralarga ega bo'lishi mumkin. Bu oxirgi satrlarda chekinish sifatida ko'rsatilgan.

Aqlli shartnoma tuzish

Keling, bunday tuzilmani o'zimiz yarataylik (u BOC deb ataladi - hujayralar sumkasi) Fift tilidan foydalanish. Yaxshiyamki, siz o'zingiz aqlli shartnoma yozishingiz shart emas - papkada crypto/block manba arxividan fayl mavjud new-wallet.fif, bu bizga yangi hamyonni yaratishga yordam beradi. Keling, uni yig'ilgan mijoz bilan jildga nusxalaymiz (~/liteclient-build, agar siz yuqoridagi ko'rsatmalarga amal qilgan bo'lsangiz). Men uning mazmunini Fift-dagi kod misoli sifatida keltirdim.

Ushbu faylni quyidagi tarzda bajaring:

./crypto/fift -I"<source-directory>/crypto/fift" new-wallet.fif

u <source-directory> Ochilmagan manbalar yo'li bilan almashtirilishi kerak (afsuski, bu erda "~" belgisini ishlatib bo'lmaydi, to'liq yo'l kerak). Kalitni ishlatish o'rniga -I muhit o'zgaruvchisini belgilashingiz mumkin FIFTPATH va bu yo'lni unga qo'ying.

Fayl nomi bilan Fiftni ishga tushirganimizdan beri new-wallet.fif, u uni bajaradi va chiqadi. Agar fayl nomini o'tkazib yuborsangiz, tarjimon bilan interaktiv tarzda o'ynashingiz mumkin.

Amalga oshirilgandan so'ng, konsolda shunga o'xshash narsa ko'rsatilishi kerak:

StateInit: x{34_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

new wallet address = -1 : 4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 
0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ
signing message: x{00000000}

External message for initialization is x{89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

B5EE9C724104030100000000D60002CF89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001001020084FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED5400480000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B6290698B
(Saved to file new-wallet-query.boc)

Bu ID bilan hamyon, degan ma'noni anglatadi -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (yoki bir xil narsa, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) muvaffaqiyatli yaratildi. Tegishli kod faylda bo'ladi new-wallet-query.boc, uning manzili new-wallet.addr, va shaxsiy kalit ichkarida new-wallet.pk (ehtiyot bo'ling - skriptni qayta ishga tushirish ushbu fayllarning ustiga yoziladi).

Albatta, TON tarmog'i bu hamyon haqida hali bilmaydi, u faqat ushbu fayllar ko'rinishida saqlanadi. Endi uni tarmoqqa yuklash kerak. Biroq, muammo shundaki, aqlli shartnoma yaratish uchun siz komissiya to'lashingiz kerak va hisobingizdagi balans hali ham nolga teng.

Ish rejimida bu muammo birjada gramm sotib olish (yoki boshqa hamyondan o'tkazish) orqali hal qilinadi. Xo'sh, joriy test rejimida maxsus aqlli shartnoma yaratildi, undan siz xuddi shunday 20 grammgacha so'rashingiz mumkin.

Birovning aqlli shartnomasiga so'rov yaratish

Biz grammlarni chapga va o'ngga shunday taqsimlaydigan aqlli shartnomaga so'rov yuboramiz. Xuddi shu papkada crypto/block faylni toping testgiver.fif:

// "testgiver.addr" file>B 256 B>u@ 
0x8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
dup constant wallet_addr ."Test giver address = " x. cr

0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2
constant dest_addr

-1 constant wc
0x00000011 constant seqno

1000000000 constant Gram
{ Gram swap */ } : Gram*/

6.666 Gram*/ constant amount

// b x --> b'  ( serializes a Gram amount )
{ -1 { 1+ 2dup 8 * ufits } until
  rot over 4 u, -rot 8 * u, } : Gram, 

// create a message (NB: 01b00.., b = bounce)
<b b{010000100} s, wc 8 i, dest_addr 256 u, amount Gram, 0 9 64 32 + + 1+ 1+ u, "GIFT" $, b>
<b seqno 32 u, 1 8 u, swap ref, b>
dup ."enveloping message: " <s csr. cr
<b b{1000100} s, wc 8 i, wallet_addr 256 u, 0 Gram, b{00} s,
   swap <s s, b>
dup ."resulting external message: " <s csr. cr
2 boc+>B dup Bx. cr
"wallet-query.boc" B>file

Biz uni yig'ilgan mijoz bilan papkaga ham saqlaymiz, lekin biz beshinchi qatorni - satrdan oldin tuzatamiz "constant dest_addr". Keling, uni avval yaratgan hamyon manzili bilan almashtiramiz (to'liq, qisqartirilmagan). Boshiga “-1:” yozishning hojati yo‘q, uning o‘rniga “0x” qo‘ying.

Siz chiziqni ham o'zgartirishingiz mumkin 6.666 Gram*/ constant amount — bu siz soʻragan grammdagi miqdor (20 dan oshmasligi kerak). Agar butun sonni ko'rsatsangiz ham, kasrni qoldiring.

Nihoyat, siz chiziqni tuzatishingiz kerak 0x00000011 constant seqno. Bu erda birinchi raqam joriy tartib raqami bo'lib, u grammlarni beruvchi hisobda saqlanadi. Uni qayerdan olsam bo'ladi? Yuqorida aytib o'tilganidek, mijozni ishga tushiring va ishga tushiring:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Oxirida aqlli shartnoma ma'lumotlari mavjud bo'ladi

...
x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
 x{0000000D}

0000000D raqami (sizniki kattaroq bo'ladi) ketma-ket raqam bo'lib, u bilan almashtirilishi kerak. testgiver.fif.

Hammasi shu, faylni saqlang va ishga tushiring (./crypto/fift testgiver.fif). Chiqish fayl bo'ladi wallet-query.boc. Bu shakllangan narsa xabar boshqa birovning aqlli shartnomasiga - "falon hisobga shuncha gramm o'tkazish" so'rovi.

Mijozdan foydalanib, biz uni tarmoqqa yuklaymiz:

> sendfile wallet-query.boc
[ 1][t 1][1558747399.456575155][test-lite-client.cpp:577][!testnode]    sending query from file wallet-query.boc
[ 3][t 2][1558747399.500236034][test-lite-client.cpp:587][!query]   external message status is 1

Agar hozir qo'ng'iroq qilsangiz last, va keyin yana biz gramm so'ragan hisobning holatini so'rang, keyin biz uning tartib raqami bittaga ko'payganini ko'rishimiz kerak - bu bizning hisobimizga pul yuborganligini anglatadi.

Oxirgi qadam qoladi - hamyonimiz kodini yuklab oling (uning balansi allaqachon to'ldirilgan, ammo aqlli shartnoma kodisiz biz uni boshqara olmaymiz). Biz bajaramiz sendfile new-wallet-query.boc - tamom, sizning TON tarmog'ida o'z hamyoningiz bor (hozircha bu faqat sinov bo'lsa ham).

Chiquvchi tranzaktsiyalarni yaratish

Yaratilgan hisob balansidan pul o'tkazish uchun fayl mavjud crypto/block/wallet.fif, bu ham yig'ilgan mijoz bilan papkaga joylashtirilishi kerak.

Oldingi bosqichlarga o'xshab, siz o'tkazayotgan summani, qabul qiluvchining manzilini (dest_addr) va hamyoningiz seqnosini sozlashingiz kerak (u hamyonni ishga tushirgandan keyin 1 ga teng va har bir chiquvchi tranzaksiyadan keyin 1 ga ortadi - siz hisobingiz holatini so'rash orqali buni ko'ring). Sinovlar uchun siz, masalan, mening hamyonimdan foydalanishingiz mumkin - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Ishga tushganda (./crypto/fift wallet.fif) skript hamyoningiz manzilini (siz o‘tkazgan joydan) va uning shaxsiy kalitini fayllardan oladi new-wallet.addr и new-wallet.pk, va qabul qilingan xabar unga yoziladi new-wallet-query.boc.

Avvalgidek, tranzaktsiyani bevosita amalga oshirish uchun qo'ng'iroq qiling sendfile new-wallet-query.boc mijozda. Shundan so'ng, blokcheyn holatini yangilashni unutmang (last) va hamyonimiz balansi va seqno o'zgarganligini tekshiring (getaccount <account_id>).

Sinov mijozi TON (Telegram Open Network) va aqlli shartnomalar uchun yangi Fift tili

Hammasi shu, endi biz TONda aqlli shartnomalar yaratishimiz va ularga so'rov yuborishimiz mumkin. Ko'rib turganingizdek, joriy funksionallik, masalan, grafik interfeysga ega bo'lgan yanada qulay hamyonni yaratish uchun etarli (ammo, u allaqachon messenjerning bir qismi sifatida mavjud bo'lishi kutilmoqda).

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

TON, TVM, Fift tahlillari bilan maqolalarni davom ettirishga qiziqasizmi?

  • Ha, men TON haqida umumiy ma'lumotga ega bo'lgan maqolalar seriyasining tugashini kutyapman

  • Ha, Fift tili haqida ko'proq o'qish qiziq

  • Ha, men TON virtual mashinasi va uning assembleri haqida ko'proq ma'lumot olishni xohlayman

  • Yo'q, bularning hech biri qiziq emas

39 foydalanuvchi ovoz berdi. 12 nafar foydalanuvchi betaraf qolgan.

Telegram’ning TON’ni ishga tushirish rejalari haqida qanday fikrdasiz?

  • Bu loyihadan umidim katta

  • Men uning rivojlanishini qiziqish bilan kuzatib boraman.

  • Men shubhalanaman va uning muvaffaqiyatiga shubha qilaman.

  • Men bu tashabbusni muvaffaqiyatsiz va keng omma uchun keraksiz deb hisoblashga moyilman

47 foydalanuvchi ovoz berdi. 12 nafar foydalanuvchi betaraf qolgan.

Manba: www.habr.com

a Izoh qo'shish