TON (Telegram Open Network) nga kliyente sa pagsulay ug bag-ong Fift nga pinulongan alang sa mga smart nga kontrata

Kapin sa usa ka tuig ang milabay, nahibal-an bahin sa mga plano sa Telegram messenger nga buhian ang kaugalingon nga desentralisado nga network. Bukas telegrama sa Network. Dayon ang usa ka dako nga teknikal nga dokumento nahimong anaa, nga, lagmit, gisulat ni Nikolai Durov ug gihulagway ang istruktura sa umaabot nga network. Para sa mga nasipyat niini, girekomendar nako nga basahon nimo ang akong pagsaysay pag-usab niini nga dokumento (bahin 1, bahin 2; ang ikatulo nga bahin, alaut, nagtigum pa sa abug sa mga draft).

Sukad niadto, wala’y hinungdanon nga balita bahin sa kahimtang sa pag-uswag sa TON, hangtod sa pila ka adlaw ang milabay (sa usa sa dili opisyal nga mga channel) ang link sa panid wala makita https://test.ton.org/download.htmlasa nahimutang:
β—¦ ton-test-liteclient-full.tar.xz - kahayag nga tinubdan sa kliyente alang sa TON test network;
β—¦ ton-lite-client-test1.config.json - configuration file alang sa pagkonektar sa test network;
β—¦ README - impormasyon bahin sa asembliya ug paglansad sa kliyente;
β—¦ UNSAON - sunod-sunod nga mga panudlo kung giunsa paghimo ang usa ka intelihente nga kontrata gamit ang kliyente;
β—¦ tonelada.pdf - gi-update nga dokumento (petsahan Marso 2, 2019) nga adunay usa ka teknikal nga pagtan-aw sa network sa TON;
β—¦ tvm.pdf β€” teknikal nga paghulagway sa TVM (TON Virtual Machine, TON virtual machine);
β—¦ tblkch.pdf - teknikal nga paghulagway sa TON blockchain;
β—¦ fivebase.pdf - usa ka paghulagway sa bag-ong Fift nga pinulongan, nga gidisenyo sa paghimo sa mga smart nga kontrata sa TON.

Gisubli ko, wala’y opisyal nga kumpirmasyon sa panid ug tanan nga kini nga mga dokumento gikan sa Telegram, apan ang gidaghanon sa kini nga mga materyal naghimo niini nga katuohan. Pagdalagan ang gipatik nga kliyente sa kaugalingon nga risgo.

Pagtukod og usa ka pagsulay nga kliyente

Sa pagsugod, atong sulayan ang pagtukod ug pagpadagan sa usa ka pagsulay nga kliyente - maayo, README naghulagway niining yano nga proseso sa detalye. Buhaton nako kini gamit ang panig-ingnan sa macOS 10.14.5, dili ako makagarantiya sa kalampusan sa asembliya sa ubang mga sistema.

  1. Pag-download ug pag-unpack tinubdan archive. Importante nga i-download ang pinakabag-o nga bersyon kay dili garantiya ang backward compatibility niining yugtoa.

  2. Siguroha nga ikaw adunay pinakabag-o nga bersyon sa make, cmake (bersyon 3.0.2 o mas taas), OpenSSL (lakip ang C header), g++, o clang nga na-install sa imong sistema. Wala ko kinahanglan nga mag-install bisan unsa, ang tanan nahiusa dayon.

  3. Ibutang ta nga ang mga tinubdan gi-unpack sa usa ka folder ~/lite-client. Gilain gikan niini, naghimo kami usa ka walay sulod nga folder alang sa gitigum nga proyekto (pananglitan, ~/liteclient-build), ug gikan niini (cd ~/liteclient-build) tawga ang mga sugo:

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

    TON (Telegram Open Network) nga kliyente sa pagsulay ug bag-ong Fift nga pinulongan alang sa mga smart nga kontrata

    Aron matukod ang Fift language interpreter para sa mga smart nga kontrata (gihulagway sa ubos), nanawag usab kami

    cmake --build . --target fift

  4. Pag-download sa kasamtangan configuration file aron makonektar sa test network ug ibutang kini sa folder nga adunay nagpundok nga kliyente.

  5. Tapos na, mahimo nimong ipadagan ang kliyente:

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

Kung ang tanan nahimo sa husto, nan kinahanglan nimo nga makita ang usa ka butang nga sama niini:

TON (Telegram Open Network) nga kliyente sa pagsulay ug bag-ong Fift nga pinulongan alang sa mga smart nga kontrata

Sama sa imong nakita, adunay pipila nga magamit nga mga mando:
β—¦ help - ipakita kini nga listahan sa mga sugo;
β—¦ quit - gawas;
β—¦ time β€” ipakita ang karon nga oras sa server;
β—¦ status - ipakita ang kahimtang sa koneksyon ug ang lokal nga database;
β—¦ last β€” i-update ang kahimtang sa blockchain (i-download ang kataposang block). Importante nga ipadagan kini nga sugo sa dili pa ang bisan unsang pangutana aron masiguro nga imong makita ang aktuwal nga kahimtang sa network.
β—¦ sendfile <filename> β€” pag-upload ug lokal nga file sa TON network. Ingon niini kung giunsa mahitabo ang interaksyon sa network, lakip, pananglitan, ang paghimo sa bag-ong mga smart nga kontrata ug mga hangyo nga ibalhin ang mga pondo tali sa mga account;
β—¦ getaccount <address> - ipakita ang kasamtangan (sa panahon sa pagpatuman sa command last) ang kahimtang sa account nga adunay gipiho nga adres;
β—¦ privkey <filename> - load ang pribado nga yawe gikan sa usa ka lokal nga file.

Kung, sa pagsugod sa kliyente, ipasa ang usa ka folder niini gamit ang kapilian -D, unya idugang niini ang katapusang bloke sa masterchain niini:

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

Karon makapadayon na kita sa mas makaiikag nga mga butang - pagkat-on sa Fift nga pinulongan, pagsulay sa pag-compile sa usa ka smart nga kontrata (pananglitan, paghimo og test wallet), i-upload kini sa network ug sulayi ang pagbalhin sa mga pondo tali sa mga account.

Lima ka Pinulongan

Gikan sa dokumento fivebase.pdf imong mahibal-an nga ang Telegram team nagmugna og usa ka bag-ong stack nga pinulongan aron makahimo og mga smart nga kontrata Singko (dayag gikan sa numero ikalima nga, susama sa Forth, usa ka pinulongan diin ang Fift adunay daghan nga komon).

Ang dokumento daghan kaayo, 87 nga mga panid, ug dili nako isaysay pag-usab ang mga sulod niini sa detalye sulod sa gambalay niini nga artikulo (labing menos, tungod kay ako mismo wala makahuman sa pagbasa niini :). Maghisgot ako sa mga nag-unang punto ug maghatag usa ka magtiayon nga mga pananglitan sa code sa kini nga pinulongan.

Sa usa ka sukaranan nga lebel, ang syntax sa Fift yano ra: ang code niini naglangkob sa mga pulong, kasagarang gibulag sa mga luna o mga bag-ong linya (espesyal nga kaso: ang ubang mga pulong wala magkinahanglan ug separator human sa ilang kaugalingon). Bisan unsa ang pulong usa ka case-sensitive nga han-ay sa mga karakter nga katumbas sa pipila kahulugan (sa halos pagkasulti, unsa ang kinahanglan buhaton sa tighubad kung makit-an kini nga pulong). Kung walay kahulugan sa pulong, ang tighubad mosulay sa pag-parse niini isip numero ug iduso kini ngadto sa stack. Pinaagi sa dalan, ang mga numero dinhi - sa kalit - mao ang 257-bit integer, ug wala'y mga fractional - nga mas tukma, sila dayon nahimong usa ka pares nga integer nga nahimong numerator ug denominator sa usa ka rational fraction.

Ang mga pulong lagmit nga makig-uban sa mga kantidad sa ibabaw sa stack. Lahi nga matang sa mga pulong - prefix - dili gigamit ang stack, apan ang mga karakter nga nagsunod kanila gikan sa gigikanan nga file. Pananglitan, kini mao ang paagi nga ang mga string literal gipatuman - ang quote character (") usa ka prefix nga pulong nga mangita sa sunod (panapos) nga kinutlo, ug iduso ang pisi tali kanila ngadto sa stack. Ang mga one-liner naggawi sa parehas nga paagi (//) ug multiline (/*) mga komento.

Dinhi natapos ang halos tibuok internal nga istruktura sa pinulongan. Ang tanan nga uban pa (lakip ang mga pagtukod sa kontrol) gihubit ingon mga pulong (bisan sa sulod, sama sa mga operasyon sa aritmetika ug paghubit sa bag-ong mga pulong; o gihubit sa "standard library" Fift.fif, nga anaa sa folder crypto/fift sa mga tinubdan).

Usa ka yano nga pananglitan sa usa ka programa sa Fift:

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

Ang una nga linya naghubit sa usa ka bag-ong pulong setxy (Tan-awa ang prefix {, nga nagmugna og block sa dili pa ang pagsira } ug prefix :, nga sa aktuwal naghubit sa pulong). setxy nagkuha og numero gikan sa ibabaw sa stack, naghubit (o nag-usab) niini isip usa ka global makanunayon x, ug ang kuwadrado niini nga numero isip usa ka makanunayon y (Tungod kay ang mga kantidad sa mga makanunayon mahimong mabag-o, mas gusto nako nga tawagan sila nga mga variable, apan gisunod nako ang pagngalan sa pinulongan).

Ang sunod nga duha ka linya magduso og numero ngadto sa stack, tawag setxy, unya ang mga kantidad sa mga kanunay gipakita x, y (ang output naggamit sa pulong .), ang duha nga mga kanunay giduso sa stack, gisumada, ug ang resulta gipakita usab. Ingon nga resulta, atong makita:

3 9 12 ok
7 49 56 ok

(Ang linya nga "ok" gi-output sa tighubad kung nahuman na ang pagproseso sa karon nga linya sa interactive input mode)

Ug ania ang usa ka kompleto nga pananglitan sa code:

"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

Kining makahahadlok nga tan-awon nga file kay para sa paghimo ug smart contract - kini ibutang sa file new-wallet-query.boc human sa pagpatay. Palihug timan-i nga ang laing pinulongan sa asembliya alang sa TON Virtual Machine gigamit dinhi (Dili ko kini hisgotan sa detalye), ang mga instruksyon nga ibutang sa blockchain.

Busa, ang assembler alang sa TVM gisulat sa Fift - ang source code alang niini nga assembler anaa sa file crypto/fift/Asm.fif ug konektado sa sinugdanan sa ibabaw nga piraso sa code.

Unsa ang akong isulti, dayag, si Nikolai Durov ganahan lang nga maghimo og bag-ong mga programming languages β€‹β€‹β€‹β€‹πŸ™‚

Paghimo sa usa ka maalamon nga kontrata ug pakig-uban sa TON

Mao nga ingnon ta nga among gitukod ang kliyente sa TON ug tighubad sa Fift sama sa gihulagway sa taas ug nahibal-an namon ang pinulongan. Giunsa paghimo ang usa ka smart nga kontrata karon? Kini gihulagway sa file. UNSAONgilakip sa tinubdan.

Mga account sa TON

Sama sa akong gihulagway sa Pagrepaso sa TON, kini nga network adunay labaw pa sa usa ka blockchain - adunay usa nga kasagaran, gitawag. "masterchain", ingon man usa ka arbitraryong gidaghanon sa mga dugang nga "workchain", nga giila sa usa ka 32-bit nga numero. Ang masterchain adunay identifier nga -1, dugang pa niini, ang usa ka "base" nga workchain nga adunay identifier nga 0 mahimo usab nga gamiton. Ang matag workchain mahimong adunay kaugalingong configuration. Sa sulod, ang matag workchain gibahin sa mga shardchain, apan kini usa ka detalye sa pagpatuman nga dili kinahanglan nga hinumdoman.

Sulod sa usa ka workchain, daghang mga account ang gitipigan, nga adunay ilang kaugalingong account_id identifiers. Alang sa masterchain ug null workchain, kini 256 ka bit ang gitas-on. Busa, ang account ID gisulat, pananglitan, sama niini:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Kini ang hilaw nga format: una ang workchain ID, dayon usa ka colon, ug ang account ID sa hexadecimal notation.

Dugang pa, adunay usa ka pinamubo nga format - ang numero sa workchain ug adres sa account gi-encode sa binary nga porma, usa ka checksum ang idugang kanila, ug kining tanan gi-encode sa Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Nahibal-an kini nga format sa rekord, mahimo naton hangyoon ang karon nga kahimtang sa pipila nga account pinaagi sa pagsulay nga kliyente gamit ang mando

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Atong makuha ang tubag sama niini:

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

Nakita namon ang istruktura nga gitipigan sa DHT sa gitakda nga workchain. Pananglitan, sa kapatagan storage.balance mao ang kasamtangan nga balanse sa account, sa storage.state.code mao ang code sa smart contract, ug sa storage.state.data - ang kasamtangan nga datos niini. Palihug timan-i nga ang pagtipig sa datos sa TON - Cell, mga selula - sama sa kahoy, ang matag cell mahimong adunay kaugalingon nga datos ug mga selula sa bata. Gipakita kini isip indentation sa katapusang mga linya.

Pagtukod og usa ka smart nga kontrata

Karon maghimo kita sa ingon nga istruktura sa atong kaugalingon (gitawag kini nga BOC - bag sa mga selula) gamit ang Fift nga pinulongan. Maayo na lang, dili nimo kinahanglan nga magsulat usa ka intelihente nga kontrata sa imong kaugalingon - sa folder crypto/block gikan sa tinubdan nga archive adunay usa ka file new-wallet.fif, nga makatabang kanato sa paghimo og bag-ong pitaka. Kopyaha kini sa folder nga adunay gipundok nga kliyente (~/liteclient-buildkung gisunod nimo ang mga panudlo sa ibabaw). Gikutlo nako ang mga sulod niini sa ibabaw isip usa ka pananglitan sa code sa Fift.

Gipatuman namo kini nga file sama sa mosunod:

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

kini mao ang <source-directory> kinahanglan nga pulihan sa agianan padulong sa wala maputos nga mga gigikanan (ang simbolo nga "~" dili magamit dinhi, sa kasubo, ang tibuuk nga agianan kinahanglan). Imbes mogamit ug yawe -I mahimo nimong ipasabut ang usa ka variable sa palibot FIFTPATH ug ibutang kini nga dalan ngadto niini.

Sukad nga gilusad namo ang Fift nga adunay filename new-wallet.fif, kini mopatuman niini ug mogawas. Kung imong laktawan ang ngalan sa file, mahimo kang makigdula sa tighubad nga interactive.

Pagkahuman sa pagpatuman, usa ka butang nga sama niini kinahanglan nga makita sa console:

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)

Kini nagpasabot nga ang pitaka nga adunay ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (o, nga pareho ra, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) malampuson nga nahimo. Ang katugbang nga code anaa sa file new-wallet-query.boc, ang iyang adres naa sa new-wallet.addr, ug ang pribadong yawe anaa new-wallet.pk (pag-amping - ang pagpadagan sa script pag-usab mag-overwrite niini nga mga file).

Siyempre, ang network sa TON wala pa mahibal-an bahin niini nga pitaka, kini gitipigan lamang sa porma niini nga mga file. Karon kinahanglan kini i-upload sa network. Tinuod, ang problema mao nga sa paghimo sa usa ka smart nga kontrata, kinahanglan nimo nga magbayad usa ka komisyon, ug ang balanse sa imong account zero gihapon.

Sa working mode, kini nga problema masulbad pinaagi sa pagpalit sa mga gramo sa exchange (o pinaagi sa pagbalhin gikan sa laing pitaka). Aw, sa karon nga mode sa pagsulay, usa ka espesyal nga intelihente nga kontrata ang gilansad, diin mahimo ka makapangayo hangtod sa 20 gramo nga ingon niana.

Pagporma og hangyo sa smart contract sa uban

Usa ka hangyo sa usa ka intelihenteng kontrata nga nag-apod-apod sa mga gramo sa wala ug tuo, gibuhat namon kini. Sa samang folder crypto/block pangitaa ang file 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

I-save usab namo kini sa folder nga adunay gitigum nga kliyente, apan among tul-iron ang ikalima nga linya - sa wala pa ang linya "constant dest_addr". Ilisan nato kini sa address sa pitaka nga imong gibuhat kaniadto (puno, dili minubo). "-1:" dili kinahanglan nga isulat sa sinugdanan, hinoon ibutang ang "0x" sa sinugdanan.

Mahimo usab nimo usbon ang linya 6.666 Gram*/ constant amount mao ang kantidad sa gramo nga imong gipangayo (dili molapas sa 20). Bisan kung imong gitakda ang usa ka integer, ibilin ang decimal nga punto.

Sa katapusan, kinahanglan naton nga ayohon ang linya 0x00000011 constant seqno. Ang una nga numero dinhi mao ang karon nga sequence number, nga gitipigan sa account nga nag-isyu sa mga gramo. Asa kini makuha? Sama sa gihisgutan sa ibabaw, sugdi ang kliyente ug pagdagan:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Sa katapusan, ang datos sa intelihente nga kontrata maglangkob

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

Ang numero nga 0000000D (dugang pa nimo) ug adunay sequence number nga kinahanglan ilisan sa testgiver.fif.

Mao na, i-save ang file ug dagan (./crypto/fift testgiver.fif). Ang output mahimong usa ka file wallet-query.boc. Kini ang naporma ang mensahe sa smart nga kontrata sa laing tawo - usa ka hangyo nga "ibalhin ang daghang mga gramo sa ingon ug ingon nga account."

Gamit ang kliyente, i-upload kini sa network:

> 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

Kung karon tawag last, ug dayon hangyoa pag-usab ang kahimtang sa account diin kami nangayo alang sa mga gramo, nan kinahanglan namon nga makita nga ang pagkasunod-sunod nga numero niini nadugangan sa usa - kini nagpasabut nga nagpadala kini salapi sa among account.

Ang katapusang lakang nga nahabilin mao ang pag-upload sa code sa among pitaka (ang balanse niini napuno na, apan dili kami makadumala niini kung wala ang smart contract code). Atong ipatuman sendfile new-wallet-query.boc - ug mao na, naa kay kaugalingong pitaka sa TON network (bisan usa lang ka pagsulay sa pagkakaron).

Paghimo og mga outbound nga mga transaksyon

Aron mabalhin ang salapi gikan sa balanse sa gibuhat nga account, adunay usa ka file crypto/block/wallet.fif, nga kinahanglan usab nga ibutang sa folder nga adunay gitigum nga kliyente.

Sama sa nangaging mga lakang, kinahanglan nimo nga tul-iron ang kantidad nga imong gibalhin, ang adres sa nakadawat (dest_addr), ug ang imong pitaka seqno (kini katumbas sa 1 pagkahuman sa pagsugod sa pitaka ug pagtaas sa 1 pagkahuman sa matag paggawas nga transaksyon - makita nimo kini pinaagi sa pagpangutana sa kahimtang sa imong account). Alang sa mga pagsulay, mahimo nimong gamiton, pananglitan, ang akong pitaka - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Sa pagsugod (./crypto/fift wallet.fif) kuhaon sa script ang adres sa imong pitaka (diin ka magbalhin gikan) ug ang pribadong yawe niini gikan sa mga file new-wallet.addr ΠΈ new-wallet.pk, ug ang nadawat nga mensahe isulat sa new-wallet-query.boc.

Sama kaniadto, aron direkta nga ipatuman ang transaksyon, kami nagtawag sendfile new-wallet-query.boc sa kliyente. Pagkahuman niana, ayaw kalimti ang pag-update sa kahimtang sa blockchain (last) ug susiha nga nausab ang balanse ug seqno sa among pitaka (getaccount <account_id>).

TON (Telegram Open Network) nga kliyente sa pagsulay ug bag-ong Fift nga pinulongan alang sa mga smart nga kontrata

Kana lang, karon makahimo na kami og mga smart nga kontrata sa TON ug magpadala og mga hangyo ngadto kanila. Sama sa imong nakita, ang kasamtangan nga pag-andar igo na aron, pananglitan, maghimo usa ka labi ka mahigalaon nga pitaka nga adunay usa ka graphical interface (bisan pa, gilauman nga kini magamit ingon bahin sa mensahero bisan pa niana).

Ang mga rehistradong tiggamit lamang ang makaapil sa survey. Sign in, walay sapayan.

Interesado ka ba sa pagpadayon sa mga artikulo nga adunay pagtuki sa TON, TVM, Fift?

  • Oo, naghulat ako sa pagkompleto sa usa ka serye sa mga artikulo nga adunay kinatibuk-ang pagtan-aw sa TON

  • Oo, makapaikag nga basahon ang dugang bahin sa Fift nga pinulongan

  • Oo, gusto kong makat-on og dugang mahitungod sa TON Virtual Machine ug assembler alang niini

  • Dili, dili ako interesado sa bisan unsa niini.

39 ka tiggamit ang nagboto. 12 ka tiggamit ang nag-abstain.

Unsa ang imong gibati bahin sa mga plano sa Telegram nga ilunsad ang TON?

  • Dako ang akong paglaum alang niini nga proyekto.

  • Gisunod ko lang kini uban ang interes.

  • Nagduhaduha ko, nagduda ko sa kalampusan niini

  • Giisip nako nga kini nga inisyatiba usa ka kapakyasan, nga wala kinahanglana alang sa kadaghanan

47 ka tiggamit ang nagboto. 12 ka tiggamit ang nag-abstain.

Source: www.habr.com

Idugang sa usa ka comment