TON (Telegram Open Network) toetskliënt en nuwe Fift-taal vir slim kontrakte

Meer as 'n jaar gelede het dit bekend geword oor die planne van die Telegram-boodskapper om sy eie gedesentraliseerde netwerk vry te stel Open Netwerk telegram. Toe het 'n lywige tegniese dokument beskikbaar geword, wat vermoedelik deur Nikolai Durov geskryf is en die struktuur van die toekomstige netwerk beskryf. Vir diegene wat dit gemis het, beveel ek aan dat u my hervertelling van hierdie dokument lees (deel 1, deel 2; die derde deel, helaas, vergaar nog steeds stof in konsepte).

Sedertdien was daar geen noemenswaardige nuus oor die status van TON-ontwikkeling nie, tot 'n paar dae gelede (in een van nie-amptelike kanale) die skakel na die bladsy het nie verskyn nie https://test.ton.org/download.htmlwaar is geleë:
ton-toets-liteclient-full.tar.xz — ligte kliëntbronne vir die TON-toetsnetwerk;
ton-lite-kliënt-toets1.config.json - konfigurasielêer om aan die toetsnetwerk te koppel;
README - inligting oor die samestelling en bekendstelling van die kliënt;
HOE — stap-vir-stap instruksies oor hoe om 'n slim kontrak met die kliënt te skep;
ton.pdf — bygewerkte dokument (gedateer 2 Maart 2019) met 'n tegniese oorsig van die TON-netwerk;
tvm.pdf — tegniese beskrywing van TVM (TON Virtual Machine, TON virtuele masjien);
tblkch.pdf - tegniese beskrywing van die TON-blokketting;
vyfde basis.pdf — 'n beskrywing van die nuwe Fift-taal, ontwerp om slim kontrakte in TON te skep.

Ek herhaal, daar was geen amptelike bevestiging van die bladsy en al hierdie dokumente van Telegram nie, maar die volume van hierdie materiaal maak dit redelik aanneemlik. Begin die gepubliseerde kliënt op eie risiko.

Bou 'n toetskliënt

Om mee te begin, kom ons probeer om 'n toetskliënt te bou en te bestuur - goed, README beskryf hierdie eenvoudige proses in detail. Ek sal dit doen deur die voorbeeld van macOS 10.14.5 te gebruik, ek kan nie instaan ​​vir die sukses van die samestelling op ander stelsels nie.

  1. Laai af en pak uit bron argief. Dit is belangrik om die nuutste weergawe af te laai aangesien terugwaartse versoenbaarheid nie op hierdie stadium gewaarborg word nie.

  2. Maak seker dat jy die nuutste weergawes van make, cmake (weergawe 3.0.2 of hoër), OpenSSL (insluitend C headers), g++ of clang op jou stelsel geïnstalleer het. Ek hoef niks te installeer nie, alles het dadelik bymekaar gekom.

  3. Gestel die bronne word in 'n gids uitgepak ~/lite-client. Afsonderlik daarvan skep ons 'n leë gids vir die saamgestelde projek (byvoorbeeld, ~/liteclient-build), en daaruit (cd ~/liteclient-build) roep die opdragte:

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

    TON (Telegram Open Network) toetskliënt en nuwe Fift-taal vir slim kontrakte

    Om die Fift-taaltolk vir slim kontrakte te bou (hieronder beskryf), bel ons ook

    cmake --build . --target fift

  4. Laai tans die huidige af konfigurasie lêer om aan die toetsnetwerk te koppel en dit in die vouer met die saamgestelde kliënt te plaas.

  5. Is klaar, kan jy die kliënt bestuur:

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

As alles korrek gedoen is, moet jy iets soos volg sien:

TON (Telegram Open Network) toetskliënt en nuwe Fift-taal vir slim kontrakte

Soos u kan sien, is daar min beskikbare opdragte:
help - vertoon hierdie lys van opdragte;
quit - gaan uit;
time - wys die huidige tyd op die bediener;
status - wys die status van die verbinding en die plaaslike databasis;
last - werk die toestand van die blokketting op (laai die laaste blok af). Dit is belangrik om hierdie opdrag voor enige navrae uit te voer om seker te maak dat jy die werklike toestand van die netwerk sien.
sendfile <filename> — laai 'n plaaslike lêer op na die TON-netwerk. Dit is hoe interaksie met die netwerk plaasvind, insluitend, byvoorbeeld, die skep van nuwe slim kontrakte en versoeke om fondse tussen rekeninge oor te dra;
getaccount <address> - wys die huidige (ten tyde van die opdraguitvoering last) die status van die rekening met die gespesifiseerde adres;
privkey <filename> - laai die private sleutel vanaf 'n plaaslike lêer.

As, wanneer u die kliënt begin, 'n gids daarheen deurgee deur die opsie te gebruik -D, dan sal dit die laaste blok van die meesterketting daarby voeg:

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

Nou kan ons aanbeweeg na meer interessante dinge - leer die Fift-taal, probeer om 'n slim kontrak saam te stel (skep byvoorbeeld 'n toetsbeursie), laai dit op die netwerk en probeer om fondse tussen rekeninge oor te dra.

Vyf Taal

Uit dokument vyfde basis.pdf jy kan uitvind dat die Telegram-span 'n nuwe stapeltaal geskep het om slim kontrakte te skep Vyf (blykbaar uit die syfer vyfde, soortgelyk aan Forth, 'n taal waarmee Fift baie in gemeen het).

Die dokument is redelik lywig, 87 bladsye, en ek sal nie die inhoud daarvan in detail oorvertel binne die raamwerk van hierdie artikel nie (ten minste, want ek het dit self nog nie klaar gelees nie :)). Ek sal stilstaan ​​by die hoofpunte en 'n paar kodevoorbeelde in hierdie taal gee.

Op 'n basiese vlak is Fift se sintaksis redelik eenvoudig: sy kode bestaan ​​uit woorde, gewoonlik geskei deur spasies of nuwe reëls (spesiale geval: sommige woorde benodig nie 'n skeiding na hulself nie). Enige слово is 'n hooflettersensitiewe volgorde van karakters wat met sommige ooreenstem definisie (Rofweg gesproke, wat die tolk moet doen wanneer hy hierdie woord teëkom). As daar geen woorddefinisie is nie, probeer die tolk om dit as 'n getal te ontleed en dit op die stapel te druk. Terloops, die getalle hier - ewe skielik - is 257-bis heelgetalle, en daar is glad nie breuke nie - meer presies, dit verander dadelik in 'n paar heelgetalle wat die teller en noemer van 'n rasionale breuk vorm.

Woorde is geneig om met die waardes aan die bokant van die stapel te reageer. Aparte tipe woorde - voorvoegsel - gebruik nie die stapel nie, maar die karakters wat hulle vanaf die bronlêer volg. Byvoorbeeld, dit is hoe string letterlike geïmplementeer word - die aanhaling karakter (") is 'n voorvoegselwoord wat na die volgende (slot)aanhaling soek, en die tou tussen hulle op die stapel druk. One-liners tree op 'n soortgelyke manier op (//) en multilyn (/*) kommentaar.

Dit is waar byna die hele interne struktuur van die taal eindig. Alles anders (insluitend beheerkonstrukte) word gedefinieer as woorde (óf intern, soos rekenkundige bewerkings en nuwe woorddefinisies; óf gedefinieer in die "standaard biblioteek" Fift.fif, wat in die gids is crypto/fift in bronne).

'n Eenvoudige voorbeeld van 'n Fift-program:

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

Die eerste reël definieer 'n nuwe woord setxy (let op die voorvoegsel {, wat 'n blok skep voor die sluiting } en voorvoegsel :, wat eintlik die woord definieer). setxy neem 'n nommer van die bokant van die stapel, definieer (of herdefinieer) dit as 'n globale konstant x, en die kwadraat van hierdie getal as 'n konstante y (gegewe dat die waardes van konstantes herdefinieer kan word, sal ek dit eerder veranderlikes noem, maar ek volg die benaming in die taal).

Die volgende twee reëls druk 'n nommer op die stapel, bel setxy, dan word die waardes van die konstantes vertoon x, y (die uitvoer gebruik die woord .), word beide konstantes op die stapel gedruk, opgesom, en die resultaat word ook vertoon. As gevolg hiervan sal ons sien:

3 9 12 ok
7 49 56 ok

(Die reël "ok" word deur die tolk uitgevoer wanneer dit klaar is met die verwerking van die huidige reël in interaktiewe invoermodus)

En hier is 'n volledige kode voorbeeld:

"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

Hierdie scary-soek lêer is vir die skep van 'n slim kontrak - dit sal in die lêer geplaas word new-wallet-query.boc na teregstelling. Neem asseblief kennis dat 'n ander samestellingstaal vir die TON virtuele masjien hier gebruik word (ek sal nie in detail daaroor uitwei nie), waarvan die instruksies op die blokketting geplaas sal word.

Dus, die samesteller vir TVM is in Fift geskryf - die bronkode vir hierdie samesteller is in die lêer crypto/fift/Asm.fif en word aan die begin van die bogenoemde stuk kode verbind.

Wat kan ek sê, blykbaar, Nikolai Durov hou daarvan om nuwe programmeertale te skep🙂

Skep van 'n slim kontrak en interaksie met TON

So kom ons sê ons het die TON-kliënt en Fift-tolk gebou soos hierbo beskryf en die taal leer ken. Hoe om nou 'n slim kontrak te skep? Dit word in die lêer beskryf. HOEaan die bron geheg.

Rekeninge in TON

Soos ek beskryf het in TON Review, hierdie netwerk bevat meer as een blokketting - daar is een algemene, sg. "meesterketting", sowel as 'n arbitrêre aantal bykomende "werkkettings", geïdentifiseer deur 'n 32-bis-nommer. Die meesterketting het 'n identifiseerder van -1, daarby kan 'n “basis” werkketting ook gebruik word met 'n identifiseerder van 0. Elke werkketting kan sy eie konfigurasie hê. Intern word elke werkketting in skerfkettings verdeel, maar dit is 'n implementeringsdetail wat nie nodig is om in gedagte te hou nie.

Binne een werkketting word baie rekeninge gestoor wat hul eie rekening_id identifiseerders het. Vir meesterketting en nulwerkketting is hulle 256 bisse lank. Dus, die rekening-ID word byvoorbeeld soos volg geskryf:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Dit is die rou formaat: eers die werkketting-ID, dan 'n dubbelpunt, en die rekening-ID in heksadesimale notasie.

Daarbenewens is daar 'n verkorte formaat - die werkkettingnommer en rekeningadres word in binêre vorm geënkodeer, 'n kontrolesom word daarby gevoeg, en dit alles word in Base64 geënkodeer:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

As ons hierdie rekordformaat ken, kan ons die huidige toestand van een of ander rekening deur die toetskliënt versoek deur die opdrag te gebruik

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ons kry 'n antwoord soos volg:

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

Ons sien die struktuur wat in die DHT van die gespesifiseerde werkketting gestoor word. Byvoorbeeld, in die veld storage.balance is die huidige saldo van die rekening, in storage.state.code is die kode van die slim kontrak, en in storage.state.data - sy huidige data. Neem asseblief kennis dat die TON-databerging - Sel, selle - boomagtig is, elke sel kan beide sy eie data en kinderselle hê. Dit word as inkeping op die laaste reëls getoon.

Bou 'n slim kontrak

Kom ons skep nou self so 'n struktuur (dit word BOC genoem - sak selle) met behulp van die Fift-taal. Gelukkig hoef jy nie self 'n slim kontrak te skryf nie - in die gids crypto/block uit die bron-argief is daar 'n lêer new-wallet.fif, wat ons sal help om 'n nuwe beursie te skep. Kopieer dit na die gids met die saamgestelde kliënt (~/liteclient-buildas jy die instruksies hierbo gevolg het). Ek het die inhoud hierbo aangehaal as 'n voorbeeld van kode in Fift.

Ons voer hierdie lêer soos volg uit:

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

Hier <source-directory> moet vervang word met die pad na die uitgepakte bronne (die “~”-simbool kan nie hier gebruik word nie, ongelukkig is die volledige pad nodig). In plaas daarvan om 'n sleutel te gebruik -I jy kan 'n omgewingsveranderlike definieer FIFTPATH en plaas hierdie pad daarin.

Sedert ons Fift met 'n lêernaam geloods het new-wallet.fif, sal dit dit uitvoer en uitgaan. As jy die lêernaam weglaat, kan jy interaktief met die tolk speel.

Na uitvoering moet iets soos hierdie in die konsole verskyn:

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)

Dit beteken dat die beursie met die ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (of, wat dieselfde is, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) is suksesvol geskep. Die ooreenstemmende kode sal in die lêer wees new-wallet-query.boc, sy adres is in new-wallet.addr, en die private sleutel is in new-wallet.pk (wees versigtig - om die skrip weer te laat loop sal hierdie lêers oorskryf).

Natuurlik weet die TON-netwerk nog nie van hierdie beursie nie, dit word slegs in die vorm van hierdie lêers gestoor. Nou moet dit na die netwerk opgelaai word. Die probleem is wel dat om 'n slim kontrak te skep, jy 'n kommissie moet betaal, en jou rekeningsaldo is steeds nul.

In die werkmodus sal hierdie probleem opgelos word deur gram op die beurs te koop (of deur oor te dra van 'n ander beursie). Wel, in die huidige toetsmodus is ’n spesiale slimkontrak bekendgestel, waaruit jy net so tot 20 gram kan vra.

Vorm 'n versoek na iemand anders se slim kontrak

'n Versoek na 'n slim kontrak wat gram links en regs versprei, ons doen dit. In dieselfde gids crypto/block vind lêer 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

Ons sal dit ook in die gids met die saamgestelde kliënt stoor, maar ons sal die vyfde reël regstel - voor die reël "constant dest_addr". Kom ons vervang dit met die adres van die beursie wat jy voorheen geskep het (vol, nie afgekort nie). "-1:" hoef nie aan die begin geskryf te word nie, plaas eerder "0x" aan die begin.

Jy kan ook die lyn verander 6.666 Gram*/ constant amount is die hoeveelheid in gram wat jy versoek (nie meer as 20). Selfs as jy 'n heelgetal spesifiseer, laat die desimale punt.

Ten slotte moet ons die lyn regmaak 0x00000011 constant seqno. Die eerste nommer hier is die huidige rynommer, wat gestoor word in die rekening wat gram uitreik. Waar om dit te kry? Soos hierbo genoem, begin die kliënt en hardloop:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Heel aan die einde sal die slimkontrakdata bevat

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

Die nommer 0000000D (jy sal meer hê) en daar is 'n rynommer wat vervang moet word in testgiver.fif.

Dit is dit, stoor die lêer en hardloop (./crypto/fift testgiver.fif). Die uitvoer sal 'n lêer wees wallet-query.boc. Dit is die gevormde die boodskap na iemand anders se slim kontrak - 'n versoek "dra soveel gram na so en so 'n rekening oor."

Gebruik die kliënt en laai dit op na die netwerk:

> 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

As nou bel last, en versoek dan weer die status van die rekening waaruit ons vir gram gevra het, dan moet ons sien dat sy volgordenommer met een toegeneem het - dit beteken dat dit geld na ons rekening gestuur het.

Die laaste stap wat oorbly is om die kode van ons beursie op te laai (sy balans is reeds aangevul, maar ons sal dit nie sonder die slimkontrakkode kan bestuur nie). Ons voer uit sendfile new-wallet-query.boc - en dit is dit, jy het jou eie beursie in die TON-netwerk (al is dit vir eers net 'n toets een).

Skep uitgaande transaksies

Om geld uit die saldo van die geskepde rekening oor te dra, is daar 'n lêer crypto/block/wallet.fif, wat ook in die lêergids met die saamgestelde kliënt geplaas moet word.

Soortgelyk aan die vorige stappe, moet jy die bedrag wat jy oordra, die ontvangeradres (dest_addr) en jou beursie seqno regstel (dit is gelyk aan 1 na beursie-inisialisering en verhoog met 1 na elke uitgaande transaksie - jy kan dit sien deur navraag doen oor jou rekeningstatus). Vir toetse kan jy byvoorbeeld my beursie gebruik - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Met opstart (./crypto/fift wallet.fif) die skrip sal die adres van jou beursie (waar jy vandaan oorplaas) en sy private sleutel uit die lêers neem new-wallet.addr и new-wallet.pk, en die ontvangde boodskap sal na geskryf word new-wallet-query.boc.

Soos voorheen, om die transaksie direk uit te voer, bel ons sendfile new-wallet-query.boc in die kliënt. Daarna, moenie vergeet om die toestand van die blokketting op te dateer nie (last) en maak seker dat die balans en volgorde van ons beursie verander het (getaccount <account_id>).

TON (Telegram Open Network) toetskliënt en nuwe Fift-taal vir slim kontrakte

Dis al, nou kan ons slim kontrakte in TON skep en versoeke aan hulle stuur. Soos u kan sien, is die huidige funksionaliteit reeds genoeg om byvoorbeeld 'n vriendeliker beursie met 'n grafiese koppelvlak te maak (daar word egter verwag dat dit in elk geval as deel van die boodskapper beskikbaar sal word).

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Stel jy belang om voort te gaan met artikels met ontleding van TON, TVM, Fift?

  • Ja, ek wag vir die voltooiing van 'n reeks artikels met 'n algemene oorsig van TON

  • Ja, dit is interessant om meer oor die Vyf-taal te lees

  • Ja, ek wil meer leer oor TON virtuele masjien en samesteller daarvoor

  • Nee, ek stel nie belang in enige hiervan nie.

39 gebruikers het gestem. 12 gebruikers het buite stemming gebly.

Hoe voel jy oor Telegram se planne om TON bekend te stel?

  • Ek het groot verwagtinge vir hierdie projek.

  • Ek volg dit net met belangstelling.

  • Ek is skepties, ek twyfel of dit suksesvol is

  • Ek is geneig om hierdie inisiatief as 'n mislukking te beskou, onnodig vir die breë massas

47 gebruikers het gestem. 12 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking