Probatu bezeroa TON (Telegram Open Network) eta kontratu adimentsuetarako Fift hizkuntza berria

Duela urtebete baino gehiago, Telegram messenger-ek bere sare deszentralizatua askatzeko planak ezagutu zituen Sare irekiko telegrama. Ondoren, dokumentu tekniko handi bat eskuragarri egon zen, ustez Nikolai Durovek idatzi zuena eta etorkizuneko sarearen egitura deskribatu zuena. Galdu zutenei, dokumentu honen berri ematea gomendatzen dizuet (1 zatia, 2 zatia; hirugarren zatia, tamalez, oraindik hautsa biltzen ari da zirriborroetan).

Orduz geroztik, ez da berri esanguratsurik izan TON garapenaren egoerari buruz duela pare bat egun arte (hauetako batean kanal ez ofizialak) ez da orrirako esteka agertu https://test.ton.org/download.html, non kokatzen dira:
β—¦ ton-test-liteclient-full.tar.xz β€” TON proba sarerako argi bezero baten iturriak;
β—¦ ton-lite-client-test1.config.json β€” probako sarera konektatzeko konfigurazio fitxategia;
β—¦ README β€” bezeroa eraikitzeari eta abiarazteari buruzko informazioa;
β—¦ NOLA β€” bezero bat erabiliz kontratu adimendun bat sortzeko urratsez urratseko argibideak;
β—¦ tona.pdf β€” dokumentu eguneratua (2ko martxoaren 2019koa) TON sarearen ikuspegi teknikoarekin;
β—¦ tvm.pdf β€” TVMren deskribapen teknikoa (TON Virtual Machine, TON virtual machine);
β—¦ tblkch.pdf β€” TON bloke-katearen deskribapen teknikoa;
β—¦ bosgarren oinarria.pdf β€” Fift hizkuntza berriaren deskribapena, TON-en kontratu adimendunak sortzeko diseinatua.

Berriro diot, ez zegoen orriaren eta Telegrameko dokumentu guzti horien berrespen ofizialik, baina material horien bolumenak nahiko sinesgarri bihurtzen ditu. Abiarazi argitaratutako bezeroa norberaren ardurapean.

Proba bezero bat eraikitzea

Lehenik eta behin, saia gaitezen probako bezero bat eraikitzen eta exekutatzen - zorionez, README prozesu sinple hau xehetasunez deskribatzen du. Hori macOS 10.14.5 erabiliz egingo dut adibide gisa; Ezin dut bermatu beste sistemetan eraikitzearen arrakasta.

  1. Deskargatu eta deskonpaktatu iturri artxiboa. Garrantzitsua da azken bertsioa deskargatzea fase honetan atzerako bateragarritasuna ez dagoelako bermatuta.

  2. Ziurtatu make, cmake (3.0.2 bertsioa edo berriagoa), OpenSSL (C goiburuko fitxategiak barne), g++ edo clang-en azken bertsioak instalatuta daudela sisteman. Ez nuen ezer instalatu behar, dena berehala elkartu zen.

  3. Demagun iturriak karpeta batean deskonprimituta daudela ~/lite-client. Bertatik bereizita, sortu karpeta huts bat muntatutako proiekturako (adibidez, ~/liteclient-build), eta bertatik (cd ~/liteclient-build) deitu komandoak:

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

    Probatu bezeroa TON (Telegram Open Network) eta kontratu adimentsuetarako Fift hizkuntza berria

    Kontratu adimendunetarako Fift hizkuntzako interpretea eraikitzeko (hori buruz gehiago behean), deitzen dugu

    cmake --build . --target fift

  4. Deskargatu oraingoa konfigurazio fitxategia probako sarera konektatzeko eta muntatutako bezeroarekin karpetan jartzeko.

  5. Done, bezeroa abi dezakezu:

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

Dena ondo egiten bada, honelako zerbait ikusi beharko zenuke:

Probatu bezeroa TON (Telegram Open Network) eta kontratu adimentsuetarako Fift hizkuntza berria

Ikus dezakegunez, komando gutxi daude eskuragarri:
β—¦ help β€” bistaratu komandoen zerrenda hau;
β—¦ quit - atera;
β—¦ time β€” erakutsi zerbitzarian uneko ordua;
β—¦ status β€” erakutsi konexioa eta tokiko datu-basearen egoera;
β—¦ last β€” eguneratu bloke-katearen egoera (deskargatu azken blokea). Garrantzitsua da komando hau exekutatzea eskaeraren aurretik, sarearen uneko egoera ikusten duzula ziurtatzeko.
β—¦ sendfile <filename> β€” igo fitxategi lokal bat TON sarera. Horrela gertatzen da sarearekin elkarreragina - besteak beste, kontratu adimentsu berriak sortzea eta kontuen artean funtsak transferitzeko eskaerak;
β—¦ getaccount <address> β€” erakutsi korrontea (komandoa exekutatu zen unean) last) zehaztutako helbidea duen kontuaren egoera;
β—¦ privkey <filename> β€” Kargatu gako pribatua fitxategi lokal batetik.

Bezeroa abiaraztean karpeta bat transferitzen baduzu aukera erabiliz -D, ondoren, masterchain-aren azken blokea gehituko du bertan:

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

Orain gauza interesgarriagoetara pasa gaitezke: Fift hizkuntza ikasi, kontratu adimendun bat osatzen saiatu (adibidez, proba-zorro bat sortu), sarera igo eta kontuen artean fondoak transferitzen saiatu.

Bosgarren hizkuntza

Dokumentutik bosgarren oinarria.pdf jakin dezakezu Telegram taldeak kontratu adimendunak sortzeko pila-lengoaia berri bat sortu duela Bost (itxuraz zenbakitik bosgarren, Forth-en antzera, Fifth-ek komunean asko dituen hizkuntza).

Dokumentua nahiko zabala da, 87 orrialdekoa, eta ez dut bere edukia zehatz-mehatz kontatuko artikulu honen esparruan (nik neuk irakurtzen amaitu ez dudalako behintzat :). Puntu nagusietan zentratuko naiz eta kode-adibide pare bat emango ditut hizkuntza honetan.

Oinarrizko mailan, Fift-en sintaxia nahiko sinplea da: bere kodea osatzen dute hitzak, normalean zuriunez edo lerro-jauziz bereizita (kasu berezia: hitz batzuek ez dute bereizlerik behar euren ondoren). Edozein hitza maiuskulak eta minuskulak bereizten dituen karaktere-sekuentzia jakin bati dagokiona da zehaztea (gutxi gorabehera, zer egin behar duen interpreteak hitz honekin topo egiten duenean). Hitz baten definiziorik ez badago, interpretea zenbaki gisa analizatzen eta pila batean jartzen saiatzen da. Bide batez, hemengo zenbakiak, bat-batean, 257 biteko zenbaki osoak dira, eta ez dago zatikirik, zehatzago esanda, berehala zenbaki osoen pare bihurtzen dira, zatiki arrazional baten zenbatzailea eta izendatzailea osatuz.

Hitzek pilaren goiko aldean dauden balioekin elkarreragin ohi dute. Hitz mota bereizi bat - aurrizkia β€” ez du pila erabiltzen, iturburu-fitxategiko ondorengo karaktereak baizik. Adibidez, honela inplementatzen dira kate literalak: komatxo karakterea (") aurrizki bat da, hurrengo (itxiera) komatxoa bilatzen duena eta haien arteko katea pilara bultzatzen duena. Lerro bakarrekoek modu berean jokatzen dute (//) eta linea anitzeko (/*) iruzkinak.

Hor amaitzen da hizkuntzaren barne egitura ia osoa. Gainerako guztia (kontrol-eraikuntzak barne) hitz gisa definitzen da (barnekoak, hala nola eragiketa aritmetikoak eta hitz berrien definizioa, edo "liburutegi estandarrean" definituta). Fift.fif, karpetan dagoena crypto/fift iturrietan).

Fift-en adibide sinple bat:

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

Lehen lerroak hitz berri bat definitzen du setxy (kontuan izan aurrizkia {, itxieraren aurretik bloke bat sortzen duena } eta aurrizkia :, hitza benetan definitzen duena). setxy pilaren goiko aldean zenbaki bat hartzen du, global gisa definitzen du (edo birdefinitzen du). konstantea x, eta zenbaki honen karratua konstante gisa y (Konstanteen balioak birdefinitu daitezkeela kontuan hartuta, nahiago nuke aldagai deitu, baina hizkuntzan izendatzeko konbentzioa jarraitzen dut).

Hurrengo bi lerroek pila batean zenbaki bat jartzen dute eta deitu setxy, orduan konstanteen balioak bistaratzen dira x, y (hitza irteerarako erabiltzen da .), bi konstanteak pila batean jartzen dira, batu eta emaitza ere inprimatzen da. Ondorioz, ikusiko dugu:

3 9 12 ok
7 49 56 ok

(Β«AdosΒ» lerroa inprimatzen du interpreteak uneko lerroa sarrera modu interaktiboan prozesatzen amaitzean)

Beno, kode osoko adibide bat:

"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

Fitxategi beldurgarri hau kontratu adimendun bat sortzeko da - fitxategi batean jarriko da new-wallet-query.boc exekutatu ondoren. Kontuan izan hemen TON Makina Birtualerako beste mihiztadura-lengoaia bat erabiltzen dela (ez naiz horretan sakonduko), zeinaren argibideak bloke-katean jarriko direla.

Horrela, TVM-ren muntatzailea Fift-en idatzita dago - muntatzaile honen iturriak fitxategian daude crypto/fift/Asm.fif eta goiko kode zatiaren hasieran konektatuta daude.

Zer esan dezaket, itxuraz Nikolai Durov-ek programazio-lengoaia berriak sortzea maite du :)

Kontratu adimendun bat sortzea eta TONekin elkarreragin

Beraz, demagun goian azaldu bezala TON bezeroa eta Fift interpretea muntatu ditugula eta hizkuntza ezagutzen dugula. Nola sortu orain kontratu adimenduna? Hau fitxategian azaltzen da NOLA, iturriei erantsita.

TON kontuak

atalean deskribatu nuen bezala TON berrikuspena, sare honek bloke-kate bat baino gehiago ditu - komun bat dago, deitzen dena. "kate nagusia", baita "lan kate" osagarrien kopuru arbitrario bat ere, 32 biteko zenbaki batekin identifikatuta. Masterchain-ak -1 identifikatzailea du; horretaz gain, 0 identifikatzailea duen "oinarrizko" lan-kate bat ere erabil daiteke. Lan-kate bakoitzak bere konfigurazioa izan dezake. Barruan, lan-kate bakoitza shardchain-etan banatzen da, baina kontuan izan behar ez den ezarpen xehetasun bat da.

Lan-kate baten barruan, kontu asko gordetzen dira beren account_id identifikatzaileak dituztenak. Kate nagusirako eta zero lan-katerako, 256 bit-eko luzera dute. Horrela, kontuaren identifikatzailea honela idazten da, adibidez:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Hau da "gordina" formatua: lehenik lan-katearen IDa, ondoren bi puntuak eta kontuaren IDa hamaseitar idazkeran.

Horrez gain, formatu laburtu bat dago: lan-katearen zenbakia eta kontuaren helbidea forma bitar batean kodetzen dira, kontrol batuketa bat gehitzen zaie eta hori guztia Base64-n kodetzen da:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Erregistro-formatu hau ezagututa, kontu baten egungo egoera eska dezakegu proba-bezero baten bidez komandoa erabiliz

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Horrelako zerbait lortuko dugu:

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

Zehaztutako lan-katearen DHTan gordetzen den egitura ikusten dugu. Esaterako, eremuan storage.balance kontu korrontearen saldoa da, urtean storage.state.code - smart contract code, eta in storage.state.data - bere egungo datuak. Kontuan izan TON datuen biltegiratzea - ​​Gelaxka, gelaxkak - zuhaitz-itxurakoa dela, gelaxka bakoitzak bere datuak eta zelula umeak izan ditzakeela. Hau koska gisa erakusten da azken lerroetan.

Kontratu adimenduna eraikitzea

Orain guk geuk sortuko dugu halako egitura bat (BOC deitzen da - zelula poltsa) Bost hizkuntza erabiliz. Zorionez, ez duzu zuk zeuk idatzi beharrik kontratu adimendun bat - karpetan crypto/block iturriko artxiboko fitxategi bat dago new-wallet.fif, zorro berri bat sortzen lagunduko diguna. Kopiatu dezagun muntatutako bezeroarekin karpetara (~/liteclient-build, goiko argibideak jarraitu badituzu). Goiko edukia aipatu dut Fift-en kodearen adibide gisa.

Exekutatu fitxategi hau honela:

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

Hemen <source-directory> paketatu gabeko iturrietarako bidearekin ordezkatu behar da ("~" ikurra, zoritxarrez, ezin da hemen erabili, bide osoa behar da). Giltza erabili beharrean -I ingurune-aldagai bat defini dezakezu FIFTPATH eta jarri bide hau.

Fift abiarazi genuenetik fitxategi izenarekin new-wallet.fif, exekutatu eta irtengo da. Fitxategiaren izena kentzen baduzu, interpretearekin jolastu dezakezu interaktiboki.

Exekutatu ondoren, honelako zerbait bistaratu beharko litzateke kontsolan:

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)

Horrek esan nahi du NAN duen zorroa -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (edo, zer da berdina, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) arrakastaz sortu da. Dagokion kodea fitxategian egongo da new-wallet-query.boc, bere helbidea hemen dago new-wallet.addr, eta gako pribatua sartuta dago new-wallet.pk (kontuz - scripta berriro martxan jartzeak fitxategi hauek gainidatziko ditu).

Jakina, TON sareak oraindik ez du zorro honen berri; fitxategi hauen moduan soilik gordetzen da. Orain sarera igo behar da. Hala ere, arazoa da kontratu adimendun bat sortzeko komisio bat ordaindu behar duzula, eta zure kontuaren saldoa zero da oraindik.

Lan egiteko moduan, arazo hau trukean gramoak erosiz (edo beste zorro batetik transferituz) konponduko da. Bada, egungo proba moduan, kontratu adimendun berezi bat sortu da, eta bertatik 20 gramo eska ditzakezu horrela.

Beste norbaiten kontratu adimendunerako eskaera bat sortzea

Eskaera bat egiten diogu ezkerrera eta eskuinera gramoak honela banatzen dituen kontratu adimendun bati. Karpeta berean crypto/block aurkitu fitxategia 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

Era berean, muntatutako bezeroarekin karpetan gordeko dugu, baina bosgarren lerroa zuzenduko dugu - lerroaren aurretik "constant dest_addr". Ordez dezagun aurretik sortu zenuen zorroaren helbidearekin (osoa, laburtua ez). Ez dago hasieran "-1:" idatzi beharrik, hasieran "0x" jarri beharrean.

Lerroa ere alda dezakezu 6.666 Gram*/ constant amount β€” hau da eskatzen ari zaren gramotan (20 baino gehiago). Zenbaki oso bat zehaztu arren, utzi koma hamartarra.

Azkenik, lerroa zuzendu behar duzu 0x00000011 constant seqno. Hemen lehen zenbakia uneko sekuentzia-zenbakia da, kontua igortzen duen gramoetan gordetzen dena. Nondik lor dezaket? Goian esan bezala, hasi bezeroa eta exekutatu:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Azkenean, kontratu adimendunaren datuak izango dira

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

0000000D zenbakia (zurea handiagoa izango da) ordezkatu behar den sekuentzia zenbakia da testgiver.fif.

Hori da, gorde fitxategia eta exekutatu (./crypto/fift testgiver.fif). Irteera fitxategi bat izango da wallet-query.boc. Hau da eratzen dena mezua beste norbaiten kontratu adimendunari - eskaera "transferitu hainbeste gramo halako kontu batera".

Bezeroa erabiliz, sarera igotzen dugu:

> 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

Orain deituz gero last, eta gero berriro eskatu gramoak eskatu genituen kontuaren egoera, orduan ikusi beharko genuke bere sekuentzia-zenbakia bat handitu dela - horrek esan nahi du dirua bidali duela gure kontura.

Azken urratsa geratzen da: deskargatu gure zorroaren kodea (bere saldoa dagoeneko beteta dago, baina kontratu adimendunaren kodea gabe ezin izango dugu kudeatu). burutzen dugu sendfile new-wallet-query.boc - eta kitto, zure zorroa daukazu TON sarean (nahiz eta oraingoz proba bat baino ez izan).

Irteerako transakzioak sortzea

Sortutako kontuaren saldotik dirua transferitzeko, fitxategi bat dago crypto/block/wallet.fif, eta hori ere muntatutako bezeroarekin karpetan jarri behar da.

Aurreko urratsen antzera, transferitzen ari zaren zenbatekoa, hartzailearen helbidea (dest_addr) eta zure zorroaren seqno-a egokitu behar dituzu (1-ren berdina da zorroa hasieratu ondoren eta 1 handitzen da irteerako transakzio bakoitzaren ondoren - dezakezu ikusi zure kontuaren egoera eskatuz) . Probak egiteko, adibidez, nire zorroa erabil dezakezu - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Abiatzean (./crypto/fift wallet.fif) gidoiak zure zorroaren helbidea (transferatzen duzun lekutik) eta bere gako pribatua hartuko ditu fitxategietatik new-wallet.addr ΠΈ new-wallet.pk, eta jasotako mezua helbidera idatziko da new-wallet-query.boc.

Lehen bezala, zuzenean transakzioa egiteko, deitu sendfile new-wallet-query.boc bezeroan. Horren ondoren, ez ahaztu bloke-katearen egoera eguneratzea (last) eta egiaztatu gure zorroaren saldoa eta seqnoa aldatu dela (getaccount <account_id>).

Probatu bezeroa TON (Telegram Open Network) eta kontratu adimentsuetarako Fift hizkuntza berria

Hori da guztia, orain TON-en kontratu adimendunak sor ditzakegu eta haiei eskaerak bidali. Ikusten duzunez, oraingo funtzionaltasuna nahikoa da, adibidez, interfaze grafikoarekin zorro atseginagoa egiteko (hala ere, espero da dagoeneko eskuragarri egongo dela mezulariaren parte gisa).

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Artikuluak TON, TVM, Fift-en analisiarekin jarraitzea interesatzen zaizu?

  • Bai, TONen ikuspegi orokorra duen artikulu sorta amaitzearen zain nago

  • Bai, interesgarria da bost hizkuntzari buruz gehiago irakurtzea

  • Bai, TON makina birtuala eta horren muntatzaileari buruz gehiago ikasi nahi dut

  • Ez, hau ez da interesgarria

39 erabiltzailek eman dute botoa. 12 erabiltzaile abstenitu ziren.

Zer iruditzen zaizu Telegramek TON abiarazteko dituen planei buruz?

  • Itxaropen handia daukat proiektu honetan

  • Bere garapena interesarekin jarraitzen dut.

  • Eszeptikoa naiz eta zalantzan jartzen dut bere arrakasta.

  • Ekimen hau porrottzat eta masa zabalarentzat alferrikakotzat jotzen dut

47 erabiltzailek eman dute botoa. 12 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria