Test client TON (Telegram Open Network) en nije Fift-taal foar tûke kontrakten

Mear dan in jier lyn waard it bekend oer de plannen fan 'e Telegram-messenger om in eigen desintralisearre netwurk frij te litten Iepen netwurk telegram. Doe kaam der in voluminous technysk dokumint, dat soe wêze skreaun troch Nikolai Durov en beskreau de struktuer fan it takomstige netwurk. Foar dyjingen dy't it misten, ried ik oan dat jo myn wertelling fan dit dokumint lêze (diel fan 1, diel fan 2; it tredde diel, helaas, sammelet noch stof yn tocht).

Sûnt dy tiid is d'r gjin signifikant nijs west oer de status fan TON-ûntwikkeling oant in pear dagen lyn (yn ien fan net-offisjele kanalen) de keppeling nei de side ferskynde net https://test.ton.org/download.html, wêr lizze:
ton-test-liteclient-full.tar.xz - boarnen fan in ljocht kliïnt foar it TON-testnetwurk;
ton-lite-client-test1.config.json - konfiguraasjetriem foar ferbining mei it testnetwurk;
README - ynformaasje oer it bouwen en lansearjen fan de klant;
HOWTO - stap-foar-stap ynstruksjes oer it meitsjen fan in tûk kontrakt mei in klant;
ton.pdf - bywurke dokumint (datearre 2 maart 2019) mei in technysk oersjoch fan it TON-netwurk;
tvm.pdf - technyske beskriuwing fan TVM (TON Virtual Machine, TON firtuele masine);
tblkch.pdf - technyske beskriuwing fan 'e TON blockchain;
fifthbase.pdf - beskriuwing fan 'e nije Fift-taal, ûntworpen foar it meitsjen fan tûke kontrakten yn TON.

Ik werhelje, d'r wie gjin offisjele befêstiging fan 'e side en al dizze dokuminten fan Telegram, mar it folume fan dizze materialen makket se frij plausibel. Starte de publisearre kliïnt op eigen risiko.

Bouwe in test client

Litte wy earst besykje in testkliïnt te bouwen en út te fieren - gelokkich, README beskriuwt dit ienfâldige proses yn detail. Ik sil dit dwaan mei macOS 10.14.5 as foarbyld; Ik kin net garandearje foar it sukses fan 'e build op oare systemen.

  1. Download en útpakke boarne argyf. It is wichtich om de lêste ferzje te downloaden, om't efterkompatibiliteit op dit stuit net garandearre is.

  2. Soargje derfoar dat de lêste ferzjes fan make, cmake (ferzje 3.0.2 of heger), OpenSSL (ynklusyf C-headerbestannen), g++ of clang binne ynstalleare op it systeem. Ik hoegde neat te ynstallearjen, alles kaam fuort byinoar.

  3. Litte wy oannimme dat de boarnen binne útpakt yn in map ~/lite-client. Meitsje apart dêrfan in lege map foar it gearstalde projekt (bygelyks, ~/liteclient-build), en fan it (cd ~/liteclient-build) neame de kommando's:

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

    Test client TON (Telegram Open Network) en nije Fift-taal foar tûke kontrakten

    Om de Fift-taaltolk foar tûke kontrakten te bouwen (mear oer hjirûnder), belje wy ek

    cmake --build . --target fift

  4. Download de aktuele konfiguraasjetriem om te ferbinen mei it testnetwurk en set it yn 'e map mei de gearstalde kliïnt.

  5. Klear, kinne jo de kliïnt begjinne:

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

As alles goed is dien, soene jo sa'n ding moatte sjen:

Test client TON (Telegram Open Network) en nije Fift-taal foar tûke kontrakten

Sa't wy kinne sjen, binne d'r in pear beskikbere kommando's:
help - werjaan dizze list mei kommando's;
quit - útgean;
time - lit de aktuele tiid sjen op 'e tsjinner;
status - de ferbining en de status fan 'e lokale database sjen litte;
last - update de tastân fan 'e blockchain (downloade it lêste blok). It is wichtich om dit kommando út te fieren foar alle oanfragen om der wis fan te wêzen dat jo de aktuele steat fan it netwurk sjogge.
sendfile <filename> - upload in lokaal bestân nei it TON-netwurk. Dit is hoe't ynteraksje mei it netwurk plakfynt - ynklusyf, bygelyks, it meitsjen fan nije tûke kontrakten en fersiken om fûnsen oer te meitsjen tusken akkounts;
getaccount <address> - de aktuele sjen litte (op it momint dat it kommando waard útfierd) last) de status fan it akkount mei it opjûne adres;
privkey <filename> - lade de privee kaai fan in lokaal bestân.

As jo, by it starten fan 'e klant, in map nei it oerdrage mei de opsje -D, dan sil hy it lêste blok fan 'e masterchain deryn tafoegje:

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

No kinne wy ​​​​trochgean nei mear nijsgjirrige dingen - learje de Fift-taal, besykje in tûk kontrakt te kompilearjen (bygelyks meitsje in testportemonnee), upload it nei it netwurk en besykje fûnsen oer te setten tusken akkounts.

Taal Fiif

Ut it dokumint fifthbase.pdf jo kinne útfine dat it Telegram-team in nije stacktaal hat makke om tûke kontrakten te meitsjen Fift (skynber út it sifer fyfde, fergelykber mei Forth, in taal dêr't Fifth in protte mienskiplik mei hat).

It dokumint is frijwat voluminous, 87 siden, en ik sil de ynhâld net yn detail yn it ramt fan dit artikel wer fertelle (teminsten om't ik it sels noch net klear bin :). Ik sil rjochtsje op de haadpunten en jou in pear koade foarbylden yn dizze taal.

Op in basisnivo is de syntaksis fan Fift frij simpel: syn koade bestiet út wurden, meastentiids skieden troch spaasjes of rigelôfbrekken (spesjaal gefal: guon wurden hawwe gjin skiedingsteken nei harsels nedich). Elk it wurd is in haadlettergefoelige folchoarder fan tekens dy't oerienkomt mei in bepaalde Bestimming fan (sawat, wat de tolk dwaan moat as er dit wurd tsjinkomt). As d'r gjin definysje fan in wurd is, besiket de tolk it as nûmer te parsearjen en op 'e stapel te setten. Trouwens, de nûmers hjir binne - ynienen - 257-bit heule getallen, en der binne gjin fraksjes - krekter, se wurde fuortendaliks in pear heule getallen, en foarmje de teller en neamer fan in rasjonele fraksje.

Wurden hawwe de neiging om te ynteraksje mei wearden oan 'e boppekant fan' e stapel. In apart type wurden - foarheaksel - brûkt de stapel net, mar de folgjende tekens út it boarnebestân. Dit is bygelyks hoe't tekenrige letteren wurde ymplementearre - it quote karakter (") is in foarheaksel wurd dat siket nei de folgjende (slutende) quote, en triuwt de tekenrige tusken harren op 'e steapel. One-liners gedrage har op deselde manier (//) en multiline (/*) opmerkings.

Dêr hâldt hast de hiele ynterne struktuer fan de taal op. Al it oare (ynklusyf kontrôlekonstruksjes) wurdt definiearre as wurden (sawol ynterne, lykas rekenkundige operaasjes en de definysje fan nije wurden; of definiearre yn 'e "standertbibleteek" Fift.fif, dy't yn 'e map stiet crypto/fift yn 'e boarnen).

In ienfâldich foarbyldprogramma yn Fift:

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

De earste rigel definiearret in nij wurd setxy (note it foarheaksel {, dy't in blok makket foar de ôfslutende } en foarheaksel :, dy't it wurd eins definiearret). setxy nimt in nûmer út 'e top fan' e steapel, definiearret (of redefines) it as globaal konstant x, en it kwadraat fan dit getal as in konstante y (Sjoen dat de wearden fan konstanten opnij definieare kinne, soe ik se leaver fariabelen neame, mar ik folgje de nammejouwing yn 'e taal).

De folgjende twa rigels sette in nûmer op 'e steapel en belje setxy, dan wurde de wearden fan 'e konstanten werjûn x, y (it wurd wurdt brûkt foar útfier .), wurde beide konstanten op 'e stapel pleatst, gearfette, en it resultaat wurdt ek printe. As gefolch sille wy sjen:

3 9 12 ok
7 49 56 ok

(De rigel "ok" wurdt printe troch de tolk as it klear is mei it ferwurkjen fan de hjoeddeistige rigel yn ynteraktive ynfiermodus)

No, in folslein koade foarbyld:

"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

Dit skriklike bestân is foar it meitsjen fan in tûk kontrakt - it sil yn in bestân pleatst wurde new-wallet-query.boc nei útfiering. Tink derom dat in oare gearstallingstaal hjir wurdt brûkt foar TON Virtual Machine (ik sil der net yn detail oer wenje), wêrfan de ynstruksjes sille wurde pleatst op 'e blockchain.

Sa is de assembler foar TVM skreaun yn Fift - de boarnen fan dizze assembler binne yn it bestân crypto/fift/Asm.fif en binne ferbûn oan it begjin fan it boppesteande stik koade.

Wat kin ik sizze, blykber hâldt Nikolai Durov gewoan fan it meitsjen fan nije programmeartalen :)

In tûk kontrakt oanmeitsje en ynteraksje mei TON

Dat, lit ús oannimme dat wy de TON-kliïnt en de Fift-tolk lykas hjirboppe beskreaun hawwe gearstald en bekend wurden mei de taal. Hoe kinne jo no in tûk kontrakt meitsje? Dit wurdt beskreaun yn de triem HOWTO, taheakke oan de boarnen.

Rekken yn TON

As ik beskreaun yn TON resinsje, Dit netwurk befettet mear as ien blockchain - der is ien mienskiplike, de saneamde. "masterchain", lykas in willekeurige oantal ekstra "workchains", identifisearre troch in 32-bit nûmer. De masterketen hat in identifier fan -1; dêrnjonken kin ek in "base" workchain brûkt wurde mei in identifier fan 0. Elke workchain kin in eigen konfiguraasje hawwe. Yntern is elke workchain opdield yn shardchains, mar dit is in ymplemintaasjedetail dat net hoecht te hâlden yn gedachten.

Binnen ien workchain wurde in protte akkounts opslein dy't har eigen account_id identifiers hawwe. Foar de master ketting en nul wurk keten, se binne 256 bits lang. Sa wurdt de akkount identifier skreaun, bygelyks, sa:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Dit is it "rauwe" formaat: earst de workchain ID, dan in kolon, en de akkount ID yn heksadesimale notaasje.

Derneist is d'r in ferkoarte opmaak - it workchain-nûmer en it akkountadres binne kodearre yn binêre foarm, in kontrôlesum wurdt tafoege oan har, en dit alles is kodearre yn Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Troch dit rekordformaat te witten, kinne wy ​​​​de hjoeddeistige steat fan in akkount oanfreegje fia in testkliïnt mei it kommando

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Wy krije sa'n ding:

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

Wy sjogge de struktuer dy't opslein is yn 'e DHT fan' e oantsjutte workchain. Bygelyks yn it fjild storage.balance is it aktuele akkount saldo, yn storage.state.code - smart kontrakt koade, en yn storage.state.data - syn hjoeddeistige gegevens. Tink derom dat de TON-gegevensopslach - Sel, sellen - beameftich is, elke sel kin sawol syn eigen gegevens as bernsellen hawwe. Dit wurdt werjûn as ynspringen yn 'e lêste rigels.

Bouwe in tûk kontrakt

Litte wy no sels sa'n struktuer meitsje (it hjit BOC - tas fan sellen) mei de Fift-taal. Gelokkich hoege jo net sels in tûk kontrakt te skriuwen - yn 'e map crypto/block der is in triem út it boarne argyf new-wallet.fif, dy't ús helpe sil in nije wallet meitsje. Litte wy it kopiearje nei de map mei de gearstalde kliïnt (~/liteclient-build, as jo de ynstruksjes hjirboppe folge hawwe). Ik neamde de ynhâld hjirboppe as in foarbyld fan koade op Fift.

Fier dit bestân as folget út:

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

it is <source-directory> moat wurde ferfongen troch it paad nei de útpakte boarnen (it symboal "~" kin hjir spitigernôch net brûkt wurde, it folsleine paad is nedich). Yn stee fan it brûken fan in kaai -I jo kinne in omjouwingsfariabele definiearje FIFTPATH en set dit paad deryn.

Sûnt wy lansearre Fift mei de triemnamme new-wallet.fif, it sil it útfiere en útgean. As jo ​​de triemnamme weilitte, kinne jo ynteraktyf mei de tolk boartsje.

Nei útfiering soe sokssawat as dit moatte wurde werjûn yn 'e konsole:

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 betsjut dat de slûf mei de ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (of, wat is itselde, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) mei súkses makke. De oerienkommende koade sil yn it bestân wêze new-wallet-query.boc, syn adres is yn new-wallet.addr, en de privee kaai is yn new-wallet.pk (wês foarsichtich - it werjaan fan it skript sil dizze bestannen oerskriuwe).

Fansels wit it TON-netwurk noch net oer dizze wallet; it wurdt allinich opslein yn 'e foarm fan dizze bestannen. No moat it opladen wurde nei it netwurk. It probleem is lykwols dat om in tûk kontrakt te meitsjen moatte jo in kommisje betelje, en jo akkountsaldo is noch nul.

Yn wurkmodus sil dit probleem oplost wurde troch it keapjen fan grammen op 'e útwikseling (of oerdracht fan in oare beurs). No, yn 'e hjoeddeistige testmodus is in spesjaal tûk kontrakt makke, wêrfan jo gewoan oant 20 gram kinne freegje.

It generearjen fan in fersyk nei in oar syn smart kontrakt

Wy meitsje in fersyk oan in tûk kontrakt dat ferspriedt gram lofts en rjochts sa. Yn deselde map crypto/block fine de triem 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

Wy sille it ek bewarje yn 'e map mei de gearstalde kliïnt, mar wy sille de fyfde rigel korrigearje - foar de rigel "constant dest_addr". Litte wy it ferfange troch it adres fan 'e beurs dy't jo earder makke hawwe (folslein, net ôfkoarte). It is net nedich om "-1:" oan it begjin te skriuwen, ynstee fan "0x" oan it begjin.

Jo kinne ek feroarje de line 6.666 Gram*/ constant amount - dit is it bedrach yn grammen dat jo oanfreegje (net mear as 20). Sels as jo in hiel getal oantsjutte, lit it desimale punt.

Uteinlik moatte jo de line korrigearje 0x00000011 constant seqno. It earste nûmer hjir is de hjoeddeiske folchoarder nûmer, dat wurdt opslein yn de rekken útjaan gram. Wêr kin ik krije it út? Lykas hjirboppe oanjûn, start de kliïnt en rinne:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Oan 'e ein sille de smart kontraktgegevens befetsje

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

It nûmer 0000000D (dyn sil grutter wêze) is it folchoardernûmer dat ferfongen wurde moat yn testgiver.fif.

Dat is it, bewarje it bestân en rinne (./crypto/fift testgiver.fif). De útfier sil in bestân wêze wallet-query.boc. Dit is wat wurdt foarme berjocht nei it tûke kontrakt fan in oar - in fersyk "oerdracht safolle gram nei sa'n en sa'n akkount."

Mei de kliïnt uploade wy it nei it netwurk:

> 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 jo ​​no belje last, en dan wer de status oanfreegje fan it akkount wêrfan wy om gram fregen, dan moatte wy sjen dat syn folchoardernûmer mei ien is ferhege - dit betsjut dat it jild nei ús akkount stjoerde.

De lêste stap bliuwt - download de koade fan ús beurs (syn saldo is al oanfolle, mar sûnder de tûke kontraktkoade kinne wy ​​it net beheare). Wy útfiere sendfile new-wallet-query.boc - en dat is it, jo hawwe jo eigen beurs op it TON-netwurk (sels as it no mar in test is).

It meitsjen fan útgeande transaksjes

Om jild oer te setten fan it saldo fan it oanmakke akkount, is d'r in bestân crypto/block/wallet.fif, dy't ek yn 'e map pleatst wurde moat mei de gearstalde kliïnt.

Fergelykber mei de foarige stappen moatte jo it bedrach oanpasse dat jo oermeitsje, it adres fan 'e ûntfanger (dest_addr), en de seqno fan jo wallet (it is gelyk oan 1 nei it initialisearjen fan 'e wallet en ferheget mei 1 nei elke útgeande transaksje - jo kinne sjoch it troch de status fan jo akkount oan te freegjen). Foar testen kinne jo bygelyks myn beurs brûke - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

By it opstarten (./crypto/fift wallet.fif) it skript sil it adres fan jo slûf nimme (fan wêr't jo oerdrage) en syn privee kaai fan 'e bestannen new-wallet.addr и new-wallet.pk, en it ûntfongen berjocht wurdt skreaun nei new-wallet-query.boc.

Lykas earder, om direkt de transaksje út te fieren, skilje sendfile new-wallet-query.boc yn de klant. Ferjit hjirnei net de tastân fan 'e blockchain te aktualisearje (last) en kontrolearje dat it saldo en seqno fan ús wallet binne feroare (getaccount <account_id>).

Test client TON (Telegram Open Network) en nije Fift-taal foar tûke kontrakten

Dat is alles, no kinne wy ​​tûke kontrakten oanmeitsje yn TON en fersiken nei har stjoere. Sa't jo sjen kinne, is de hjoeddeistige funksjonaliteit al genôch om bygelyks in freonliker wallet te meitsjen mei in grafyske ynterface (lykwols wurdt ferwachte dat it al beskikber sil wêze as diel fan 'e messenger).

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Binne jo ynteressearre yn it trochgean fan 'e artikels mei analyze fan TON, TVM, Fift?

  • Ja, ik wachtsje op it foltôgjen fan 'e searje artikels mei in algemien oersjoch fan TON

  • Ja, it is nijsgjirrich om mear te lêzen oer de taal Fift

  • Ja, ik wol mear leare oer TON Virtual Machine en de assembler dêrfoar

  • Nee, neat fan dit is nijsgjirrich

39 brûkers stimden. 12 brûkers ûntholden har.

Wat tinke jo oer de plannen fan Telegram om TON te lansearjen?

  • Ik haw hege hoop foar dit projekt

  • Ik folgje har ûntwikkeling gewoan mei belangstelling.

  • Ik bin skeptysk en twifelje oan it sukses.

  • Ik bin oanstriid om dit inisjatyf te beskôgjen as in mislearring en net nedich foar de brede massa

47 brûkers stimden. 12 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment