Klijent tat-test TON (Telegram Open Network) u lingwa ġdida Fift għal kuntratti intelliġenti

Aktar minn sena ilu, sar magħruf dwar il-pjanijiet tal-messaġġier Telegram biex jirrilaxxa n-netwerk deċentralizzat tiegħu stess Netwerk Miftuħ tat-Telegramma. Imbagħad sar disponibbli dokument tekniku voluminuż, li allegatament kien miktub minn Nikolai Durov u ddeskriva l-istruttura tan-netwerk futur. Għal dawk li qbiżtu, nirrakkomanda li taqra l-ġdid tiegħi ta' dan id-dokument (Parti 1, Parti 2; it-tielet parti, sfortunatament, għadha tiġbor it-trab fl-abbozzi).

Minn dakinhar, ma kien hemm l-ebda aħbar sinifikanti dwar l-istatus tal-iżvilupp TON sa ftit tal-jiem ilu (f'wieħed minn kanali mhux uffiċjali) il-link għall-paġna ma dehritx https://test.ton.org/download.htmlfejn jinsabu:
ton-test-liteclient-full.tar.xz — sorsi tal-klijenti tad-dawl għan-netwerk tat-test TON;
ton-lite-client-test1.config.json — fajl ta' konfigurazzjoni għall-konnessjoni man-netwerk tat-test;
README - informazzjoni dwar l-assemblaġġ u t-tnedija tal-klijent;
KIF — struzzjonijiet pass pass dwar kif jinħoloq kuntratt intelliġenti bl-użu tal-klijent;
ton.pdf — dokument aġġornat (datat it-2 ta’ Marzu 2019) b’ħarsa ġenerali teknika tan-netwerk TON;
tvm.pdf — deskrizzjoni teknika ta' TVM (TON Virtual Machine, TON Virtual Machine);
tblkch.pdf — deskrizzjoni teknika tal-blockchain TON;
fifthbase.pdf — deskrizzjoni tal-lingwa l-ġdida Fift, iddisinjata biex toħloq kuntratti intelliġenti f'TON.

Nirrepeti, ma kien hemm l-ebda konferma uffiċjali tal-paġna u dawn id-dokumenti kollha minn Telegram, iżda l-volum ta 'dawn il-materjali jagħmilhom pjuttost plawżibbli. Tnedija tal-klijent ippubblikat għar-riskju tiegħu stess.

Bini ta 'klijent tat-test

L-ewwel, ejja nippruvaw nibnu u tmexxi klijent tat-test - fortunatament, README jiddeskrivi dan il-proċess sempliċi fid-dettall. Se nagħmel dan bl-użu ta' macOS 10.14.5 bħala eżempju; ma nistax niggarantixxi għas-suċċess tal-bini fuq sistemi oħra.

  1. Niżżel u spakkja arkivju tas-sors. Huwa importanti li tniżżel l-aħħar verżjoni peress li l-kompatibilità b'lura mhix garantita f'dan l-istadju.

  2. Kun żgur li l-aħħar verżjonijiet ta 'make, cmake (verżjoni 3.0.2 jew ogħla), OpenSSL (inklużi C header files), g++ jew clang huma installati fis-sistema. Ma kelli għalfejn ninstalla xejn, kollox ġie flimkien mill-ewwel.

  3. Ejja nassumu li s-sorsi huma mhux ippakkjati f'folder ~/lite-client. Separatament minnha, oħloq folder vojt għall-proġett immuntat (per eżempju, ~/liteclient-build), u minnha (cd ~/liteclient-build) sejjaħ il-kmandi:

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

    Klijent tat-test TON (Telegram Open Network) u lingwa ġdida Fift għal kuntratti intelliġenti

    Biex nibnu l-interpretu tal-lingwa Fift għal kuntratti intelliġenti (aktar dwaru hawn taħt), insejħu wkoll

    cmake --build . --target fift

  4. Niżżel dak attwali fajl tal-konfigurazzjoni biex tikkonnettja man-netwerk tat-test u poġġih fil-folder mal-klijent immuntat.

  5. Jagħmel, tista' tibda l-klijent:

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

Jekk kollox isir b'mod korrett, għandek tara xi ħaġa bħal din:

Klijent tat-test TON (Telegram Open Network) u lingwa ġdida Fift għal kuntratti intelliġenti

Kif nistgħu naraw, hemm ftit kmandi disponibbli:
help — juri din il-lista ta' kmandi;
quit - Oħroġ;
time — turi l-ħin kurrenti fuq is-server;
status — turi l-konnessjoni u l-istatus tad-database lokali;
last — taġġorna l-istat tal-blockchain (niżżel l-aħħar blokk). Huwa importanti li tmexxi dan il-kmand qabel kwalunkwe talba biex tkun żgur li tara l-istat attwali tan-netwerk.
sendfile <filename> — ittella' fajl lokali fin-netwerk TON. Hekk isseħħ l-interazzjoni man-netwerk – inkluż, pereżempju, il-ħolqien ta’ kuntratti intelliġenti ġodda u talbiet għat-trasferiment ta’ fondi bejn il-kontijiet;
getaccount <address> — uri l-kurrent (fil-ħin li ġie esegwit il-kmand) last) l-istatus tal-kont bl-indirizz speċifikat;
privkey <filename> — tagħbija ċ-ċavetta privata minn fajl lokali.

Jekk, meta tibda l-klijent, tittrasferixxi folder lejh billi tuża l-għażla -D, imbagħad huwa se jżid l-aħħar blokk tal-masterchain fiha:

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

Issa nistgħu ngħaddu għal aktar affarijiet interessanti - nitgħallmu l-lingwa Fift, ipprova tikkumpila kuntratt intelliġenti (pereżempju, toħloq kartiera tat-test), ittellaha fin-netwerk u tipprova tittrasferixxi fondi bejn il-kontijiet.

Lingwa Ħames

Mid-dokument fifthbase.pdf tista 'ssir taf li t-tim tat-Telegram ħoloq lingwa ġdida tal-munzell biex toħloq kuntratti intelliġenti Ħamsa (milli jidher min-numeral ħames, simili għal Forth, lingwa li magħha Fifth għandha ħafna komuni).

Id-dokument huwa pjuttost voluminuż, 87 paġna, u mhux se nerġa’ nirrakkonta l-kontenut tiegħu fid-dettall fil-qafas ta’ dan l-artikolu (għall-inqas għax ma spiċċajtx naqrah jien :). Se niffoka fuq il-punti ewlenin u nagħti ftit eżempji ta 'kodiċi f'din il-lingwa.

Fuq livell bażiku, is-sintassi ta 'Fift hija pjuttost sempliċi: il-kodiċi tagħha jikkonsisti minn kliem, normalment separati bi spazji jew waqfiet tal-linji (każ speċjali: xi kliem ma jeħtiġux separatur warajhom). Kwalunkwe kelma hija sekwenza ta' karattri li tikkorrispondi għal ċertu każ determinazzjoni ta ' (bejn wieħed u ieħor, x'għandu jagħmel l-interpretu meta jiltaqa' ma' din il-kelma). Jekk ma jkunx hemm definizzjoni ta' kelma, l-interpretu jipprova jparsaha bħala numru u jpoġġiha fuq il-munzell. Mill-mod, in-numri hawn huma - f'daqqa waħda - interi ta '257 bit, u m'hemm l-ebda frazzjonijiet - b'mod aktar preċiż, immedjatament jinbidlu f'par interi, li jiffurmaw in-numeratur u d-denominatur ta' frazzjoni razzjonali.

Il-kliem għandhom tendenza li jinteraġixxu mal-valuri fil-quċċata tal-munzell. Tip separat ta' kliem - prefiss — ma jużax il-munzell, iżda l-karattri sussegwenti mill-fajl sors. Per eżempju, dan huwa kif string literals huma implimentati - il-karattru kwotazzjoni (") hija kelma prefiss li tfittex il-kwotazzjoni li jmiss (tal-għeluq), u timbotta s-sekwenza bejniethom fuq il-munzell. One-liners jaġixxu bl-istess mod (//) u multiline (/*) kummenti.

Dan huwa fejn kważi tispiċċa l-istruttura interna kollha tal-lingwa. Kull ħaġa oħra (inklużi kostruzzjonijiet ta' kontroll) hija definita bħala kliem (jew intern, bħal operazzjonijiet aritmetiċi u d-definizzjoni ta' kliem ġdid; jew definit fil-"librerija standard" Fift.fif, li tinsab fil-folder crypto/fift fis-sorsi).

Eżempju ta' programm sempliċi fil-Ħamsa:

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

L-ewwel linja tiddefinixxi kelma ġdida setxy (innota l-prefiss {, li toħloq blokk qabel dak tal-għeluq } u prefiss :, li fil-fatt tiddefinixxi l-kelma). setxy jieħu numru mill-quċċata tal-munzell, jiddefinixxi (jew jiddefinixxi mill-ġdid) bħala globali kostanti x, u l-kwadru ta' dan in-numru bħala kostanti y (Minħabba li l-valuri tal-kostanti jistgħu jiġu definiti mill-ġdid, nippreferi nsejjaħhom varjabbli, iżda nsegwi l-konvenzjoni tal-ismijiet fil-lingwa).

Iż-żewġ linji li jmiss ipoġġu numru fuq il-munzell u ċempel setxy, imbagħad jintwerew il-valuri tal-kostanti x, y (il-kelma tintuża għall-output .), iż-żewġ kostanti jitqiegħdu fuq il-munzell, magħduda, u r-riżultat huwa wkoll stampat. Bħala riżultat se naraw:

3 9 12 ok
7 49 56 ok

(Il-linja "ok" tiġi stampata mill-interpretu meta tispiċċa l-ipproċessar tal-linja kurrenti fil-mod ta 'input interattiv)

Ukoll, eżempju ta 'kodiċi sħiħ:

"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

Dan il-fajl li jħares biża huwa għall-ħolqien ta 'kuntratt intelliġenti - se jitqiegħed f'fajl new-wallet-query.boc wara l-eżekuzzjoni. Jekk jogħġbok innota li hawnhekk tintuża lingwa ta 'assemblaġġ oħra għal TON Virtual Machine (mhux se nitkellem dwarha fid-dettall), li l-istruzzjonijiet tagħha se jitqiegħdu fuq il-blockchain.

Għalhekk, l-assembler għal TVM huwa miktub f'Fift - is-sorsi ta 'dan l-assembler huma fil-fajl crypto/fift/Asm.fif u huma konnessi fil-bidu tal-biċċa tal-kodiċi ta 'hawn fuq.

X'nista 'ngħid, apparentement Nikolai Durov iħobb biss joħloq lingwi ta' programmar ġodda :)

Ħolqien ta 'kuntratt intelliġenti u interazzjoni ma' TON

Mela, ejja nassumu li għamilna l-klijent TON u l-interpretu Fift kif deskritt hawn fuq u sirna familjari mal-lingwa. Kif toħloq kuntratt intelliġenti issa? Dan huwa deskritt fil-fajl KIF, mehmuża mas-sorsi.

Kontijiet f'TON

Kif iddeskrivejt fi Reviżjoni TON, dan in-netwerk fih aktar minn blockchain waħda - hemm waħda komuni, l-hekk imsejħa. "katina prinċipali", kif ukoll numru arbitrarju ta '"ktajjen tax-xogħol", identifikati b'numru ta' 32-bit. Il-masterchain għandu identifikatur ta '-1; minbarra dan, tista' tintuża wkoll workchain "bażi" b'identifikatur ta '0. Kull workchain jista' jkollha l-konfigurazzjoni tagħha stess. Internament, kull workchain hija maqsuma fi shardchains, iżda dan huwa dettall ta 'implimentazzjoni li m'għandux għalfejn jinżamm f'moħħu.

Fi ħdan workchain waħda, huma maħżuna ħafna kontijiet li għandhom l-identifikaturi account_id tagħhom stess. Għall-katina prinċipali u l-katina tax-xogħol żero, huma twal 256 bit. Għalhekk, l-identifikatur tal-kont huwa miktub, pereżempju, bħal dan:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Dan huwa l-format "prima": l-ewwel l-ID tal-katina tax-xogħol, imbagħad kolon, u l-ID tal-kont f'notazzjoni eżadeċimali.

Barra minn hekk, hemm format imqassar - in-numru tal-katina tax-xogħol u l-indirizz tal-kont huma kodifikati f'forma binarja, tiġi miżjuda checksum magħhom, u dan kollu huwa kkodifikat f'Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Billi nkunu nafu dan il-format tar-rekord, nistgħu nitolbu l-istat attwali ta 'kont permezz ta' klijent tat-test bl-użu tal-kmand

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Se nieħdu xi ħaġa bħal din:

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

Naraw l-istruttura li hija maħżuna fid-DHT tal-katina tax-xogħol speċifikata. Per eżempju, fil-qasam storage.balance huwa l-bilanċ tal-kont kurrenti, fi storage.state.code - kodiċi tal-kuntratt intelliġenti, u in storage.state.data - id-data attwali tagħha. Jekk jogħġbok innota li l-ħażna tad-dejta TON - Ċellula, ċelloli - hija bħal siġra, kull ċellula jista 'jkollha kemm id-dejta tagħha kif ukoll iċ-ċelluli tfal. Dan jidher bħala indentazzjoni fl-aħħar linji.

Bini ta' kuntratt intelliġenti

Issa ejja noħolqu struttura bħal din aħna stess (jissejjaħ BOC - borża ta 'ċelluli) bl-użu tal-lingwa Fift. Fortunatament, m'għandekx għalfejn tikteb kuntratt intelliġenti lilek innifsek - fil-folder crypto/block hemm fajl mill-arkivju tas-sors new-wallet.fif, li tgħinna noħolqu kartiera ġdida. Ejja nikkopjah fil-folder mal-klijent immuntat (~/liteclient-build, jekk segwejt l-istruzzjonijiet ta’ hawn fuq). Iċċitat il-kontenut tiegħu hawn fuq bħala eżempju ta 'kodiċi fuq Fift.

Esegwi dan il-fajl kif ġej:

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

Hawnhekk <source-directory> trid tiġi sostitwita bil-mogħdija għas-sorsi mhux ippakkjati (is-simbolu "~", sfortunatament, ma jistax jintuża hawn, il-mogħdija sħiħa hija meħtieġa). Minflok tuża ċavetta -I tista' tiddefinixxi varjabbli ambjentali FIFTPATH u poġġi din it-triq fiha.

Peress li nedejna Fift bl-isem tal-fajl new-wallet.fif, se tesegwixxiha u toħroġ. Jekk tħalli barra l-isem tal-fajl, tista' tilgħab mal-interpretu b'mod interattiv.

Wara l-eżekuzzjoni, xi ħaġa bħal din għandha tintwera fil-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)

Dan ifisser li l-kartiera bl-ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (jew, x'inhu l-istess, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) maħluqa b'suċċess. Il-kodiċi korrispondenti se jkun fil-fajl new-wallet-query.boc, l-indirizz tiegħu jinsab fi new-wallet.addr, u ċ-ċavetta privata tinsab fi new-wallet.pk (Oqgħod attent - it-tħaddim mill-ġdid tal-iskript se jissostitwixxi dawn il-fajls).

Naturalment, in-netwerk TON għadu ma jafx dwar dan il-kartiera; huwa maħżun biss fil-forma ta 'dawn il-fajls. Issa jeħtieġ li jittella man-netwerk. Madankollu, il-problema hija li biex toħloq kuntratt intelliġenti trid tħallas kummissjoni, u l-bilanċ tal-kont tiegħek għadu żero.

Fil-modalità tax-xogħol, din il-problema tissolva billi tixtri grammi fuq l-iskambju (jew it-trasferiment minn kartiera oħra). Ukoll, fil-modalità tat-test attwali, inħoloq kuntratt intelliġenti speċjali, li minnu tista 'titlob sa 20 gramma eżatt hekk.

Ġenerazzjoni ta' talba lil kuntratt intelliġenti ta' xi ħadd ieħor

Aħna nagħmlu talba lil kuntratt intelliġenti li jqassam grammi xellug u lemin bħal dan. Fl-istess folder crypto/block issib fajl 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

Se nissejvjah ukoll fil-folder mal-klijent immuntat, iżda se nikkoreġu l-ħames linja - qabel il-linja "constant dest_addr". Ejja tibdilha bl-indirizz tal-kartiera li ħloqt qabel (sħiħ, mhux imqassar). M'hemmx għalfejn tikteb "-1:" fil-bidu, minflok poġġi "0x" fil-bidu.

Tista 'wkoll tibdel il-linja 6.666 Gram*/ constant amount — dan huwa l-ammont fi grammi li qed titlob (mhux aktar minn 20). Anke jekk tispeċifika numru sħiħ, ħalli l-punt deċimali.

Fl-aħħarnett, għandek bżonn tikkoreġi l-linja 0x00000011 constant seqno. L-ewwel numru hawnhekk huwa n-numru tas-sekwenza attwali, li huwa maħżun fil-grammi tal-ħruġ tal-kont. Minn fejn nista' niksebha? Kif intqal hawn fuq, ibda l-klijent u mexxi:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Fl-aħħar nett, id-dejta tal-kuntratt intelliġenti se jkun fiha

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

In-numru 0000000D (tiegħek se jkun akbar) huwa n-numru tas-sekwenza li għandu jiġi sostitwit f' testgiver.fif.

Dak hu, issalva l-fajl u mexxi (./crypto/fift testgiver.fif). L-output se jkun fajl wallet-query.boc. Dan huwa dak li huwa ffurmat Сообщение lil kuntratt intelliġenti ta 'xi ħadd ieħor - talba "ittrasferixxi tant grammi għal kont bħal dan."

Bl-użu tal-klijent, intellgħuha fin-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

Jekk issa ċempel last, u mbagħad terġa 'titlob l-istatus tal-kont li minnu tlabna grammi, allura għandna naraw li n-numru tas-sekwenza tiegħu żdied b'wieħed - dan ifisser li bagħat flus fil-kont tagħna.

L-aħħar pass jibqa ' - niżżel il-kodiċi tal-kartiera tagħna (il-bilanċ tiegħu diġà ġie mimli mill-ġdid, iżda mingħajr il-kodiċi tal-kuntratt intelliġenti mhux se nkunu nistgħu namministrawh). Aħna nwettqu sendfile new-wallet-query.boc - u hekk, għandek il-kartiera tiegħek fin-netwerk TON (anke jekk għalissa hija biss waħda tat-test).

Ħolqien ta 'tranżazzjonijiet ħerġin

Biex tittrasferixxi flus mill-bilanċ tal-kont maħluq, hemm fajl crypto/block/wallet.fif, li jeħtieġ ukoll li jitqiegħed fil-folder mal-klijent immuntat.

Simili għall-passi ta 'qabel, għandek bżonn taġġusta l-ammont li qed tittrasferixxi, l-indirizz tar-riċevitur (dest_addr), u s-seqno tal-kartiera tiegħek (huwa ugwali għal 1 wara l-inizjalizzazzjoni tal-kartiera u jiżdied b'1 wara kull tranżazzjoni ħerġin - tista' araha billi titlob l-istatus tal-kont tiegħek). Għat-testijiet, tista' tuża, pereżempju, il-kartiera tiegħi - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Fuq l-istartjar (./crypto/fift wallet.fif) l-iskrittura se tieħu l-indirizz tal-kartiera tiegħek (minn fejn tittrasferixxi) u ċ-ċavetta privata tagħha mill-fajls new-wallet.addr и new-wallet.pk, u l-messaġġ riċevut se jinkiteb lil new-wallet-query.boc.

Bħal qabel, biex twettaq direttament it-tranżazzjoni, ċempel sendfile new-wallet-query.boc fil-klijent. Wara dan, tinsiex taġġorna l-istat tal-blockchain (last) u iċċekkja li l-bilanċ u seqno tal-kartiera tagħna nbidlu (getaccount <account_id>).

Klijent tat-test TON (Telegram Open Network) u lingwa ġdida Fift għal kuntratti intelliġenti

Dak kollu, issa nistgħu noħolqu kuntratti intelliġenti f'TON u nibgħatulhom talbiet. Kif tistgħu taraw, il-funzjonalità attwali hija diġà biżżejjed biex, pereżempju, tagħmel kartiera aktar faċli b'interface grafika (madankollu, huwa mistenni li diġà ssir disponibbli bħala parti mill-messaġġier).

Utenti reġistrati biss jistgħu jipparteċipaw fl-istħarriġ. Idħol, ta 'xejn.

Interessat li tkompli l-artikli b'analiżi ta' TON, TVM, Fift?

  • Iva, qed nistenna għat-tlestija tas-serje ta 'artikoli b'ħarsa ġenerali ġenerali ta' TON

  • Iva, huwa interessanti li taqra aktar dwar il-lingwa Fift

  • Iva, irrid nitgħallem aktar dwar TON Virtual Machine u l-assemblatur għaliha

  • Le, xejn minn dan mhu interessanti

Ivvutaw 39 utent. 12 utenti astjenew.

X'taħseb dwar il-pjanijiet ta' Telegram biex tniedi TON?

  • Għandi tama kbira għal dan il-proġett

  • Jien biss insegwi l-iżvilupp tagħha b'interess.

  • Jiena xettiku u niddubita s-suċċess tagħha.

  • Jien inklinat li nqis din l-inizjattiva bħala falliment u bla bżonn għall-mases wiesgħa

Ivvutaw 47 utent. 12 utenti astjenew.

Sors: www.habr.com

Żid kumment