Išbandykite klientą TON („Telegram Open Network“) ir naują „Fift“ kalbą išmaniosioms sutartims

Daugiau nei prieš metus tapo žinoma apie „Telegram Messenger“ planus išleisti savo decentralizuotą tinklą Atviro tinklo telegrama. Tada tapo prieinamas didelis techninis dokumentas, kurį tariamai parašė Nikolajus Durovas ir kuriame buvo aprašyta būsimo tinklo struktūra. Tiems, kurie jo praleido, rekomenduoju perskaityti mano šio dokumento atpasakojimą (Dalis 1, Dalis 2; trečioji dalis, deja, vis dar renka dulkes juodraščiuose).

Nuo to laiko nebuvo jokių reikšmingų naujienų apie TON plėtros būklę iki poros dienų (vienoje iš neoficialūs kanalai) nuoroda į puslapį nepasirodė https://test.ton.org/download.html, kur yra:
ton-test-liteclient-full.tar.xz — TON testavimo tinklo šviesos kliento šaltiniai;
ton-lite-client-test1.config.json — konfigūracijos failas, skirtas prisijungti prie bandomojo tinklo;
SKAITYK MANE — informacija apie kliento kūrimą ir paleidimą;
KAIP — nuoseklios instrukcijos, kaip sudaryti išmaniąją sutartį naudojant klientą;
ton.pdf — atnaujintas dokumentas (2 m. kovo 2019 d.) su technine TON tinklo apžvalga;
tvm.pdf — TVM (TON Virtual Machine, TON virtual machine) techninis aprašymas;
tblkch.pdf — techninis TON blokų grandinės aprašymas;
Fivebase.pdf — naujosios „Fift“ kalbos, skirtos išmaniosioms sutartims TON kurti, aprašymas.

Kartoju, nebuvo oficialaus puslapio ir visų šių dokumentų patvirtinimo iš „Telegram“, tačiau šios medžiagos apimtis daro juos gana patikimus. Paleiskite paskelbtą klientą savo rizika.

Bandomojo kliento kūrimas

Pirmiausia pabandykime sukurti ir paleisti bandomąjį klientą – laimei, SKAITYK MANE išsamiai aprašo šį paprastą procesą. Tai padarysiu kaip pavyzdį naudodamas „macOS 10.14.5“; negaliu garantuoti, kad kitose sistemose bus sėkmingai kuriama.

  1. Atsisiųskite ir išpakuokite šaltinių archyvas. Svarbu atsisiųsti naujausią versiją, nes atgalinis suderinamumas šiame etape negarantuojamas.

  2. Įsitikinkite, kad sistemoje yra įdiegtos naujausios make, cmake (3.0.2 ar naujesnės versijos), OpenSSL (įskaitant C antraštės failus), g++ arba clang versijos. Man nereikėjo nieko montuoti, viskas susidėjo iš karto.

  3. Tarkime, kad šaltiniai išpakuoti į aplanką ~/lite-client. Atskirai nuo jo sukurkite tuščią surinkto projekto aplanką (pavyzdžiui, ~/liteclient-build), o iš jo (cd ~/liteclient-build) iškvieskite komandas:

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

    Išbandykite klientą TON („Telegram Open Network“) ir naują „Fift“ kalbą išmaniosioms sutartims

    Norėdami sukurti „Fift“ kalbos vertėją išmaniosioms sutartims (daugiau apie tai žemiau), taip pat skambiname

    cmake --build . --target fift

  4. Atsisiųskite dabartinį konfigūracijos failą prisijungti prie bandomojo tinklo ir įdėti jį į aplanką su surinktu klientu.

  5. Priimta, galite pradėti klientą:

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

Jei viskas padaryta teisingai, turėtumėte pamatyti kažką panašaus:

Išbandykite klientą TON („Telegram Open Network“) ir naują „Fift“ kalbą išmaniosioms sutartims

Kaip matome, yra keletas galimų komandų:
help — rodyti šį komandų sąrašą;
quit - išeiti;
time — rodyti esamą laiką serveryje;
status — rodyti ryšio ir vietinės duomenų bazės būseną;
last - atnaujinti blokų grandinės būseną (atsisiųsti paskutinį bloką). Svarbu paleisti šią komandą prieš bet kokias užklausas, kad įsitikintumėte, jog matote dabartinę tinklo būseną.
sendfile <filename> — įkelti vietinį failą į TON tinklą. Taip vyksta sąveika su tinklu – įskaitant, pavyzdžiui, naujų išmaniųjų sutarčių kūrimą ir prašymus pervesti lėšas tarp sąskaitų;
getaccount <address> - parodyti dabartinę (komandos vykdymo metu) last) sąskaitos su nurodytu adresu būsena;
privkey <filename> — įkelti privatų raktą iš vietinio failo.

Jei paleisdami klientą perkeliate aplanką į jį naudodami parinktį -D, tada jis pridės paskutinį pagrindinės grandinės bloką:

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

Dabar galime pereiti prie įdomesnių dalykų – išmokti Fift kalbos, pabandyti sudaryti išmaniąją sutartį (pavyzdžiui, sukurti bandomąją piniginę), įkelti ją į tinklą ir pabandyti pervesti lėšas tarp sąskaitų.

Penkta kalba

Iš dokumento Fivebase.pdf galite sužinoti, kad „Telegram“ komanda sukūrė naują dėklo kalbą išmaniosioms sutartims kurti Penkta (matyt, iš skaičiaus penktas, panaši į Forth, kalbą, su kuria penktoji turi daug bendro).

Dokumentas yra gana didelis, 87 puslapiai, ir aš šiame straipsnyje jo turinio išsamiai neperpasakosiu (bent jau todėl, kad pats jo nebaigiau skaityti :). Aš sutelksiu dėmesį į pagrindinius dalykus ir pateiksiu keletą kodų pavyzdžių šia kalba.

Pagrindiniame lygyje „Fift“ sintaksė yra gana paprasta: jos kodą sudaro žodžiai, dažniausiai atskiriami tarpais arba eilučių lūžiais (ypatingas atvejis: kai kuriems žodžiams nereikia skyriklio po savęs). Bet koks žodis yra didžiųjų ir mažųjų raidžių raidžių seka, atitinkanti tam tikrą nustatymas (apytiksliai, ką vertėjas turėtų daryti, kai susiduria su šiuo žodžiu). Jei žodžio apibrėžimo nėra, vertėjas bando jį išanalizuoti kaip skaičių ir sudėti į krūvą. Beje, čia esantys skaičiai yra – staiga – 257 bitų sveikieji skaičiai, o trupmenų iš viso nėra – tiksliau, jie iš karto virsta sveikųjų skaičių pora, sudarydami racionalios trupmenos skaitiklį ir vardiklį.

Žodžiai linkę sąveikauti su vertybėmis, esančiomis krūvos viršuje. Atskiras žodžių tipas - priešdėlis — nenaudoja krūvos, o vėlesnius simbolius iš šaltinio failo. Pavyzdžiui, taip įgyvendinami eilučių literalai – kabutės simbolis (") yra priešdėlio žodis, kuris ieško kitos (baigimo) kabutės ir įstumia tarp jų esančią eilutę į krūvą. Vieno laido įdėklai elgiasi taip pat (//) ir kelių eilučių (/*) komentarai.

Čia baigiasi beveik visa vidinė kalbos struktūra. Visa kita (įskaitant valdymo konstrukcijas) apibrėžiama kaip žodžiai (vidiniai, pvz., aritmetinės operacijos ir naujų žodžių apibrėžimas; arba apibrėžta „standartinėje bibliotekoje“). Fift.fif, kuris yra aplanke crypto/fift šaltiniuose).

Paprastas „Fift“ programos pavyzdys:

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

Pirmoji eilutė apibrėžia naują žodį setxy (atkreipkite dėmesį į priešdėlį {, kuris sukuria bloką prieš uždaromąjį } ir priešdėlis :, kuris iš tikrųjų apibrėžia žodį). setxy paima skaičių iš krūvos viršaus, apibrėžia (arba iš naujo) jį kaip visuotinį pastovus x, o šio skaičiaus kvadratas kaip konstanta y (Atsižvelgiant į tai, kad konstantų reikšmes galima apibrėžti iš naujo, aš jas verčiau vadinčiau kintamaisiais, bet vadovaujuosi kalbos įvardijimo taisyklėmis).

Kitos dvi eilutės įdėkite skaičių ant krūvos ir skambinkite setxy, tada rodomos konstantų reikšmės x, y (žodis naudojamas išvestiei .), abi konstantos dedamos ant krūvos, sumuojamos, o rezultatas taip pat išspausdinamas. Rezultate pamatysime:

3 9 12 ok
7 49 56 ok

(Eilutė „ok“ išspausdinama vertėjo, kai baigia apdoroti dabartinę eilutę interaktyvaus įvesties režimu)

Na, viso kodo pavyzdys:

"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

Šis baisiai atrodantis failas skirtas sumaniai sutarčiai sukurti – jis bus patalpintas į failą new-wallet-query.boc po egzekucijos. Atkreipkite dėmesį, kad TON virtualiai mašinai čia naudojama kita asamblėjos kalba (smulkiau prie jos neapsigyvensiu), kurios instrukcijos bus patalpintos blokų grandinėje.

Taigi, TVM surinkėjas parašytas Fift - šio surinkėjo šaltiniai yra faile crypto/fift/Asm.fif ir yra sujungti pirmiau nurodyto kodo pradžioje.

Ką aš galiu pasakyti, matyt, Nikolajus Durovas tiesiog mėgsta kurti naujas programavimo kalbas :)

Sukurti protingą sutartį ir bendrauti su TON

Taigi, tarkime, kad surinkome TON klientą ir „Fift“ vertėją, kaip aprašyta aukščiau, ir susipažinome su kalba. Kaip dabar sukurti išmaniąją sutartį? Tai aprašyta faile KAIP, pridedamas prie šaltinių.

Sąskaitos TON

Kaip aprašiau TON apžvalga, šiame tinkle yra ne viena blokų grandinė – yra viena bendra, vadinamoji. „pagrindinė grandinė“, taip pat savavališkas skaičius papildomų „darbo grandinių“, identifikuojamų 32 bitų skaičiumi. Masterchain identifikatorius yra -1, be jo galima naudoti ir "bazinę" darbo grandinę, kurios identifikatorius yra 0. Kiekviena darbo grandinė gali turėti savo konfigūraciją. Viduje kiekviena darbo grandinė yra padalinta į shardchains, tačiau tai yra įgyvendinimo detalė, kurios nereikia turėti omenyje.

Vienoje darbo grandinėje saugoma daug paskyrų, turinčių savo account_id identifikatorius. Pagrindinės grandinės ir nulinės darbo grandinės ilgis yra 256 bitai. Taigi sąskaitos identifikatorius parašytas, pavyzdžiui, taip:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Tai yra „neapdorotas“ formatas: pirmiausia darbo grandinės ID, tada dvitaškis ir paskyros ID šešioliktaine žyma.

Be to, yra sutrumpintas formatas - darbo grandinės numeris ir sąskaitos adresas yra užkoduoti dvejetaine forma, prie jų pridedama kontrolinė suma ir visa tai užkoduota Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Žinodami šį įrašo formatą, galime paprašyti dabartinės paskyros būsenos per bandomąjį klientą naudodami komandą

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Gausime kažką panašaus:

[ 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}

Matome struktūrą, kuri yra saugoma nurodytos darbo grandinės DHT. Pavyzdžiui, lauke storage.balance yra einamosios sąskaitos likutis, in storage.state.code - išmanusis sutarties kodas ir į storage.state.data - dabartiniai duomenys. Atkreipkite dėmesį, kad TON duomenų saugykla - Cell, cell - yra medžio pavidalo, kiekvienas langelis gali turėti ir savo duomenis, ir antrinius langelius. Tai rodoma kaip įtrauka paskutinėse eilutėse.

Sudarykite protingą sutartį

Dabar sukurkime tokią struktūrą patys (ji vadinama BOC - ląstelių maišas) naudojant Fift kalbą. Laimei, jums nereikia pačiam rašyti protingos sutarties - aplanke crypto/block yra failas iš šaltinio archyvo new-wallet.fif, kuri padės mums susikurti naują piniginę. Nukopijuokime jį į aplanką su surinktu klientu (~/liteclient-build, jei vykdėte aukščiau pateiktas instrukcijas). Aukščiau pateikiau jo turinį kaip „Fift“ kodo pavyzdį.

Vykdykite šį failą taip:

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

Čia <source-directory> turi būti pakeistas keliu į išpakuotus šaltinius (simbolio „~“, deja, čia naudoti negalima, reikia viso kelio). Užuot naudoję raktą -I galite apibrėžti aplinkos kintamąjį FIFTPATH ir įvesti šį kelią.

Kadangi paleidome „Fift“ su failo pavadinimu new-wallet.fif, jis jį įvykdys ir išeis. Jei nepateiksite failo pavadinimo, galėsite interaktyviai žaisti su vertėju.

Po vykdymo konsolėje turėtų būti rodomas kažkas panašaus:

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)

Tai reiškia, kad piniginė su ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (arba kas tas pats, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) sėkmingai sukurtas. Atitinkamas kodas bus faile new-wallet-query.boc, jo adresas yra new-wallet.addrir privatus raktas yra new-wallet.pk (būkite atsargūs – paleidus scenarijų dar kartą šie failai bus perrašyti).

Žinoma, TON tinklas apie šią piniginę dar nežino, ji saugoma tik šių failų pavidalu. Dabar jį reikia įkelti į tinklą. Tačiau problema ta, kad norint sudaryti išmaniąją sutartį reikia mokėti komisinį mokestį, o sąskaitos likutis vis tiek lygus nuliui.

Darbo režimu ši problema bus išspręsta perkant gramus biržoje (arba pervedant iš kitos piniginės). Na, o dabartiniu testavimo režimu sukurta speciali išmanioji sutartis, iš kurios tiesiog taip galima paprašyti iki 20 gramų.

Užklausos dėl kažkieno išmaniosios sutarties generavimas

Pateikiame užklausą dėl išmaniosios sutarties, kuri taip paskirsto gramus į kairę ir į dešinę. Tame pačiame aplanke crypto/block rasti failą 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

Taip pat išsaugosime aplanke su surinktu klientu, tačiau pataisysime penktą eilutę - prieš eilutę "constant dest_addr“. Pakeiskime jį anksčiau sukurtos piniginės adresu (pilna, nesutrumpinta). Pradžioje nereikia rašyti „-1:“, vietoj to įdėkite „0x“ pradžioje.

Taip pat galite pakeisti eilutę 6.666 Gram*/ constant amount — tai jūsų prašoma suma gramais (ne daugiau kaip 20). Net jei nurodote sveiką skaičių, palikite dešimtainį kablelį.

Galiausiai reikia pataisyti liniją 0x00000011 constant seqno. Pirmasis skaičius čia yra dabartinis eilės numeris, kuris saugomas paskyroje, išduodančioje gramus. Iš kur galiu jį gauti? Kaip minėta aukščiau, paleiskite klientą ir paleiskite:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Pačioje pabaigoje išmaniosios sutarties duomenys bus įtraukti

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

Skaičius 0000000D (jūsų bus didesnis) yra eilės numeris, kurį reikia pakeisti testgiver.fif.

Tai viskas, išsaugokite failą ir paleiskite (./crypto/fift testgiver.fif). Išvestis bus failas wallet-query.boc. Tai ir susidaro Pranešimas į kažkieno protingą sutartį - prašymas „pervesti tiek gramų į tokią ir tokią sąskaitą“.

Naudodamiesi klientu, įkeliame jį į tinklą:

> 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

Jei dabar paskambinsi last, o tada dar kartą paprašykite sąskaitos, iš kurios prašėme gramų, būsenos, tada turėtume pamatyti, kad jos eilės numeris padidėjo vienu – tai reiškia, kad ji atsiuntė pinigus į mūsų sąskaitą.

Lieka paskutinis žingsnis – atsisiųskite mūsų piniginės kodą (jos likutis jau pasipildė, bet be išmaniosios sutarties kodo negalėsime jo tvarkyti). Vykdome sendfile new-wallet-query.boc - ir viskas, jūs turite savo piniginę TON tinkle (net jei kol kas tai tik bandomoji).

Išeinančių operacijų kūrimas

Norėdami pervesti pinigus iš sukurtos sąskaitos likučio, yra failas crypto/block/wallet.fif, kurį taip pat reikia įdėti į aplanką su surinktu klientu.

Panašiai kaip ir ankstesniuose žingsniuose, reikia koreguoti pervedamą sumą, gavėjo adresą (dest_addr) ir piniginės seką (ji lygi 1 inicijavus piniginę ir didėja 1 po kiekvienos išeinančios operacijos – galite pamatysite tai užklausę savo paskyros būseną). Testams galite naudoti, pavyzdžiui, mano piniginę - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Paleidžiant (./crypto/fift wallet.fif) scenarijus iš failų paims jūsų piniginės adresą (iš kur perkeliate) ir privatųjį raktą new-wallet.addr и new-wallet.pk, o gautas pranešimas bus parašytas new-wallet-query.boc.

Kaip ir anksčiau, norėdami tiesiogiai atlikti operaciją, skambinkite sendfile new-wallet-query.boc kliente. Po to nepamirškite atnaujinti „blockchain“ būsenos (last) ir patikrinkite, ar pasikeitė mūsų piniginės likutis ir seka (getaccount <account_id>).

Išbandykite klientą TON („Telegram Open Network“) ir naują „Fift“ kalbą išmaniosioms sutartims

Tai viskas, dabar galime sukurti išmaniąsias sutartis TON ir siųsti jiems užklausas. Kaip matote, dabartinio funkcionalumo jau pakanka, kad, pavyzdžiui, būtų galima sukurti draugiškesnę piniginę su grafine sąsaja (tačiau tikimasi, kad ji jau taps prieinama kaip messenger dalis).

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Ar norėtumėte tęsti straipsnius su TON, TVM, Fift analize?

  • Taip, aš laukiu straipsnių serijos su bendra TON apžvalga pabaigos

  • Taip, įdomu daugiau paskaityti apie „Fift“ kalbą

  • Taip, noriu daugiau sužinoti apie TON virtualią mašiną ir jos surinkėją

  • Ne, tai nėra įdomu

Balsavo 39 vartotojų. 12 vartotojai susilaikė.

Ką manote apie „Telegram“ planus paleisti TON?

  • Į šį projektą dedu dideles viltis

  • Tiesiog su susidomėjimu seku jos raidą.

  • Esu skeptiškai nusiteikęs ir abejoju jo sėkme.

  • Esu linkęs šią iniciatyvą laikyti nesėkminga ir plačioms masėms nereikalinga

Balsavo 47 vartotojų. 12 vartotojai susilaikė.

Šaltinis: www.habr.com

Добавить комментарий