TON-i (Telegram Open Network) testklient ja uus Fift-keel nutilepingute jaoks

Üle aasta tagasi tuli teade, et messengeri Telegram kavatseb vĂ€lja anda omaenda detsentraliseeritud vĂ”rgu. Telegram Open Network. Sel ajal ilmus ulatuslik tehniline dokument, mille usutavasti kirjutas Nikolai Durov ja mis kirjeldas tulevase vĂ”rgu struktuuri. Neile, kes jĂ€id ilma — soovitan tutvuda minu kokkuvĂ”ttega sellest dokumendist (osa 1, Osa 2; kolmas osa, kahjuks, ikka veel lebab mustandites).

Sellest ajast alates ei ole olnud mingeid olulisi uudiseid TONi arenduse staatusest, kuni paar pĂ€eva tagasi (ĂŒhes mitteametlikes kanalites) ilmus link lehele https://test.ton.org/download.html, kus on paigutatud:
◩ ton-test-liteclient-full.tar.xz — kergklientide lĂ€htekoodid TONi testvĂ”rgu jaoks;
◩ ton-lite-client-test1.config.json — konfiguratsioonifail testvĂ”rgu ĂŒhendamiseks;
◩ nĂ€iteks, mis kuvatakse armatuurlaudade peal koos Prometheuse pĂ€ringutega, mis tĂ€idavad armatuure. — teave kliendi ĂŒlesehitamise ja kĂ€ivitamise kohta;
◩ HOWTO — samm-sammuline juhend nutilepingute loomise kohta kliendiga;
◩ ton.pdf — uuendatud dokument (2. mĂ€rts 2019) TONi vĂ”rgu tehnilise ĂŒlevaate kohta;
◩ tvm.pdf — TONi virtuaalse masina (TON Virtual Machine) tehniline kirjeldus;
◩ tblkch.pdf — TONi plokiahela tehniline kirjeldus;
◩ fiftbase.pdf — uus Fift keeles, mis on mĂ”eldud nutilepingute loomiseks TONis.

Kordan, ametlikke kinnitusi lehe ja kÔikide nende dokumentide osas Telegramilt ei ole olnud, kuid nende materjalide maht teeb need piisavalt usutavaks. Avaldatud kliendi kÀivitamine toimub oma riski ja vastutuse all.

Testkliendi koostamine

Katsume esmalt testkliendi kokku panna ja kĂ€ivitada — Ă”nneks nĂ€iteks, mis kuvatakse armatuurlaudade peal koos Prometheuse pĂ€ringutega, mis tĂ€idavad armatuure. kirjeldab seda lihtsat protsessi. Teen seda macOS 10.14.5 nĂ€itel, ei saa lubada eduka koostamise kinnitamist teiste sĂŒsteemide jaoks.

  1. Laadige alla ja lahtipakige allikakoodide arhiv.Oluline on laadida alla viimane versioon, kuna tagurpidi ĂŒhilduvus sellel hetkel ei ole garantii.

  2. Veenduge, et sĂŒsteemis on installitud uusimad versioonid make, cmake (versioonid 3.0.2 vĂ”i uuemad), OpenSSL (sh C-pealkirjad), g++ vĂ”i clang. Mul ei olnud vaja midagi lisaks alla laadida, kĂ”ik koostati kohe.

  3. Oletame, et lĂ€htekoodid on lahtipakitud kausta ~\/lite-client. Eraldi loome tĂŒhi kaust koostatud projekti jaoks (nĂ€iteks, ~\/liteclient-build), ja sellest (cd ~\/liteclient-build) kutsume esile kĂ€sklused:

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

    TON-i (Telegram Open Network) testklient ja uus Fift-keel nutilepingute jaoks

    Nutilepingute tÔlgendaja kokkupanemiseks (millest allpool), kutsub samuti vÀlja

    cmake --build . --target fift

  4. Laadige alla praegune konfiguratsioonifail testimisvĂ”rku ĂŒhendamiseks ja asetage see kokku pandud kliendi kausta.

  5. Valmis, saate kliendi kÀivitada:

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

Kui kÔik on Ôigesti tehtud, nÀete midagi sellist:

TON-i (Telegram Open Network) testklient ja uus Fift-keel nutilepingute jaoks

Saadaval kÀsud, nagu nÀeme, on vÀhe:
◩ help — kuvada selle kĂ€skude loendi;
◩ quit — vĂ€lja logida;
◩ time — nĂ€idata serveri praegust aega;
◩ staatus — nĂ€idata ĂŒhenduse ja kohaliku andmebaasi olekut;
◩ last — vĂ€rskendada plokiahelat (laadida viimase ploki). Seda kĂ€sku on oluline tĂ€ita enne kĂ”iki pĂ€ringuid, et olla kindel, et nĂ€ete tĂ”eliselt vĂ”rgu praegust seisundit.
◩ sendfile <filename> — laadida kohaliku faili TON-vĂ”rku. Selle kaudu toimub suhe vĂ”rku — sealhulgas nĂ€iteks uute nutilepingute loomine ja rahakannete pĂ€ringud kontode vahel;
◩ getaccount

— nĂ€idata praegust (kĂ€skluse tĂ€itmise hetkel last) olekut kohta, millel on mÀÀratud aadress;
◩ privkey <filename> — laadida privaatvĂ”ti kohalikust failist.

Kui kÀivitate kliendi ja edastate talle kausta, kasutades valikut -D, siis salvestab see sinna viimase ploki peaehelast:

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

NĂŒĂŒd saame liikuda huvitavamate asjade juurde — uurida Fift keelt, proovida kompileerida nutilepingut (nĂ€iteks luua testrahakoti), laadida see vĂ”rku ja proovida rahaĂŒlekandeid kontode vahel.

Fifti keel

Dokumendist fiftbase.pdf saab teada, et nutilepingute loomiseks lĂ”i Telegrami meeskond uue virnastatud keele Fift (ilmselt, arvust fifth, sarnaselt Forth'iga — keelega, millega Fift'il on palju ĂŒhist).

Dokument on piisavalt mahukas, 87 lehekĂŒlge, ja ma ei kavatse selle sisu siin pĂ”hjalikult ĂŒle rÀÀkida (vĂ€hemalt seetĂ”ttu, et ma ise isegi ei ole seda veel lĂ”petanud :). Peatun peamistel punktidel ja toon vĂ€lja paar koodi nĂ€idet selles keeles.

Baastasandil on Fifti sĂŒntaks piisavalt lihtne: selle kood koosneb sĂ”nadest, mis on tavaliselt eraldatud tĂŒhikutega vĂ”i reavahetustega (erand: mĂ”ned sĂ”nad ei vaja pĂ€rast end eraldajat). Iga «replica» (nĂ€iteks funktsioon snd_ctl_add_slave() vahetati vĂ€lja snd_ctl_add_replica() vastu), mis pĂ”hjustas — on suuruselt sĂ”ltuv sĂŒmbolite jada, mille vastavuse omab teatud defineerimine (rÀÀkides peamiselt, mida tĂ”lkija peab tegema, kui ta selle sĂ”na kohale jĂ”uab). Kui sĂ”na mÀÀratlust pole, pĂŒĂŒab tĂ”lkija selle tĂ”lgendada numbrina ja asetada selle kuhja. Üldiselt on need numbrid 257-bitised tĂ€isarvud ja murdarveid pole ĂŒldse — tĂ€hendab, et need muudetakse kohe paariks tĂ€isarvuks, mis moodustavad ratsionaalse murdarvu nimetaja ja löögi.

SĂ”nad suhtlevad tavaliselt ĂŒlemisel kuhja tasemel asuvate vÀÀrtustega. Üks sĂ”nade tĂŒĂŒp on eelfikseeriv — ei kasuta kuhja, vaid jĂ€rgnevate mĂ€rkide enesetĂ€histamiseks allikafailis. NĂ€iteks on stringi literatuuride rakendused — mĂ€rk «lainurk» (") on eelfikseeriv sĂ”na, mis otsib jĂ€rgmist (sulgev) lainurka ja paigutab stringi nende vahele kuhja. Samamoodi kĂ€ituvad ĂŒhearvulised (//) ja mitmerealised (/*) kommentaarid.

Sellega lÔppeb peaaegu kogu keele sisemine ehitus. KÔik muu (sealhulgas juhtimisstruktuurid) on mÀÀratletud sÔnadena (kas siis sise- nagu aritmeetilised toimingud ja uute sÔnade mÀÀratlemine; vÔi standardteegis paigutatuna Fift.fif, mis asub kaustas crypto/fift allikates).

Lihtne nÀide Fift-programmist:

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

Esimeses reas mÀÀratletakse uus sĂ”na setxy ({sĂ”jaring}) — tĂ€helepanu see eelfikseeriv sĂ”na loob ploki sulgemiseks {ja eelfikseeriv sĂ”na } , mis mÀÀratleb sĂ”na). :VĂ”tab numbri kuhja tipust, mÀÀrab (vĂ”i ĂŒle mÀÀrab) selle globaalseks setxy konstandiks , ja selle numbri ruut — konstandiks x({arvestades, et konstantide vÀÀrtusi saab ĂŒle mÀÀrata, peaksin ma neid pigem muutujateks nimetama, kuid ma jĂ€rgnen keele nimetamise jĂ€rgi). y Kahes jĂ€rgmises reas paigutatakse kuhja number, kutsutakse vĂ€lja

, pÀrast mida vÀljastatakse konstantide vÀÀrtusi setxy({vÀljundi jaoks kasutatakse sÔna x, y }), mÔlemad konstantid paigutatakse kuhja, liidetakse kokku ja ka tulemus vÀljendatakse. SeejÀrel nÀeme: .3 9 12 ok 7 49 56 ok

(Rida «ok» vĂ€ljendab tĂ”lkija, kui ta lĂ”petab praeguse rea töötlemise interaktiivses sisendireĆŸiimis)

Ja tÀielik koodinÀide:

See hirmsa vĂ€limusega fail on mĂ”eldud nutikontakti loomiseks — see paigutatakse faili

"Asm.fif" sisaldab

-1 konstant wc  \/\/ loo rahakott tööketis -1 (masterchain)

\/\/ Loo uus lihtne rahakott
&lt;{  SETCP0 DUP IFNOTRET INC 32 THROWIF  \/\/ tagasta, kui recv_internal, ebaõnnestub, kui recv_external
    512 INT LDSLICEX DUP 32 PLDU   \/\/ allkirjasta cs cnt
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  \/\/ allkirjasta cs cnt cnt&#039; pubk
    s1 s2 XCPU            \/\/ allkirjasta cs cnt pubk cnt&#039; cnt
    EQUAL 33 THROWIFNOT   \/\/ ( seqno ütlematu? )
    s2 PUSH HASHSU        \/\/ allkirjasta cs cnt pubk hash
    s0 s4 s4 XC2PU        \/\/ pubk cs cnt hash allkiri pubk
    CHKSIGNU              \/\/ pubk cs cnt ?
    34 THROWIFNOT         \/\/ allkiri ei klapi
    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
}&gt;c
\/\/ kood
<b 0 32 u, newkeypair swap dup constant wallet_pk "new-wallet.pk" b>fail
   B, 
b&gt; \/\/ andmed
\/\/ ei mingit teeki
<b b{00110} s, rot ref, swap b>  // create StateInit
dup ."StateInit: " <s csr. cr
dup hash dup constant wallet_addr
."new wallet address = " wc . .": " x. cr
wc over 7 smca>$ tüüp cr
256 u&gt;B "uus-rahakott.addr" B&gt;fail
<b 0 32 u, b>
dup ."allkirjastamise sõnum: " <s csr. cr
dup hash wallet_pk ed25519_sign_uint rot
<b b{1000100} s, wc 8 i, wallet_addr 256 u, b{000010} swap <s b{0} b, b>
dup ."Väline sõnum initsialiseerimiseks on " <s csr. cr
2 boc+>B dup Bx. cr
"uus-rahakoti-päring.boc" tuck B&gt;fail
."(Salvestatud faili " tüüp .")" cr

new-wallet-query.boc new-wallet-query.boc pĂ€rast tĂ€iustamist. Pange tĂ€hele, et siin kasutatakse veel ĂŒhte, assembleri keelt TON Virtuaalmasina jaoks (millele ma ei peatuks detailselt), mille kĂ€sklused paigutatakse plokiahelasse.

Seega, TVM assembler on kirjutatud Fiftis — selle assembleri allikakood asub failis crypto/fift/Asm.fif ja see lisatakse eespool tsiteeritud koodi algusesse.

Mida ma saan öelda, ilmselt armastab Nikolai Durov lihtsalt uusi programmeerimiskeeli luua 🙂

Nutika lepingu loomine ja interaktsioon TON-iga

Nii et oletame, et oleme kokku pannud TON kliendi ja Fift tĂ”lgendi, nagu eelnevalt kirjeldatud, ja oleme tutvunud keele alustega. Kuidas nĂŒĂŒd nutikat lepingut luua? Sellest rÀÀgitakse failis HOWTO, mis on allikakoodide juurde lisatud.

TON-i kontod

Kuidas ma eespool kirjeldasin TON-i ĂŒlevaates, see vĂ”rk sisaldab rohkem kui ĂŒhte plokiahelat — on ĂŒks ĂŒhine, nn „meistriahel”, ja ka kĂ”ikvĂ”imalikke lisa „tööhalli”, mida tuvastatakse 32-bitise numbriga. Meistriahelal on identifikaator -1, samuti vĂ”ib kasutada „baasi” tööhalli identifikaatoriga 0. Igal tööhalli vĂ”ib olla oma seadistus. Sisemiselt jaguneb iga tööhall shard-ahelateks, kuid see on juba teostuse ĂŒksikasjalik, mida ei pea meeles pidama.

Ühes tööhallis hoitakse palju kontosid, millel on oma identifikaatorid account_id. Meistriahela ja nulltööhalli jaoks on need 256-bitised. Seega kirjutatakse konto identifikaator nĂ€iteks niimoodi:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

See on „toores” formaat: kĂ”igepealt on tööhalli identifikaator, siis kaksteist ja konto identifikaator heksadesimalvormis.

Lisaks on ka lĂŒhendatud formaat — tööhalli number ja konto aadress kodeeritakse binaarsetena, millele lisatakse kontrollsumma ja kĂ”ik see kodeeritakse Base64-s:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Tundes seda formaati, saame kĂŒsida mĂ”ne konto praegust olekut testkliendi kaudu kĂ€suga

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Saame umbes sellise vastuse:

[ 3][t 2][1558746708.815218925][test-lite-client.cpp:631][!testnode]    konto oleku state'i taotlemine -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D
[ 3][t 2][1558746708.858564138][test-lite-client.cpp:652][!testnode]    saadi konto oleku -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D vastavalt plokkidele (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F ja (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F
konto oleku on (konto
  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}

KĂŒlastame struktuuri, mis salvestatakse DHT antud töökohtade ahelas. NĂ€iteks vĂ€ljades storage.balance on konto praegune saldo, storage.state.code — nutilepingute kood, ja storage.state.data — selle praegused andmed. Pange tĂ€hele, et TONi andmehoidla - Cell, mille rakud - on puustruktuurne, iga rakul vĂ”ivad olla nii omad andmed kui ka alamrakud. Seda nĂ€idatakse viimastes ridadis sissejuhatuste kaudu.

Nutilepingu koostamine

NĂŒĂŒd loome ise sellise struktuuri (mis on tuntud kui BOC — bag of cells) Fift keele abil. Õnneks ei pea nutilepingut ise kirjutama — arhiivis, mis sisaldab lĂ€htefaile, on kaust crypto/block ja seal on fail new-wallet.fif, mis aitab meil luua uue rahakoti. Kopeerime selle kogutud kliendi kausta (~\/liteclient-build, kui te tegite ĂŒlaltoodud juhiste kohaselt). Selle sisu esitasin eespool Fift koodinĂ€itena.

KÀivitage see fail jÀrgmiselt:

.\/crypto\/fift -I"\/crypto\/fift" new-wallet.fif

Siin <source-directory> tuleb asendada lahti pakitud lĂ€htefailide teega (sĂŒmbol „~” ei sobi siin, vajalik on tĂ€ielik tee). Key'i asemel vĂ”ib mÀÀrata keskkonnamuutuja -I FIFTPATH ja panna sellele oma tee. Đž ĐżĐŸĐŒĐ”ŃŃ‚ĐžŃ‚ŃŒ ŃŃ‚ĐŸŃ‚ путь ĐČ ĐœĐ”Ń‘.

Kuna Fift kÀivitati faili nimega new-wallet.fif, see tÀidab selle ja lÔpetab. Kui faili nime ei mÀÀra, saab tÔlgendajaga interaktiivselt mÀngida.

Konsolisse peab pÀrast tÀitmist ilmuma midagi sellist:

StateInit: x{34_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

uus rahakoti aadress = -1 : 4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 
0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ
allkirjastamis sÔnum: x{00000000}

KÀivitamiseks vajalik vÀline sÔnum on x{89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

B5EE9C724104030100000000D60002CF89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001001020084FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED5400480000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B6290698B
(Salvestatud failiks new-wallet-query.boc)

See tĂ€hendab, et rahakott identifikaatoriga -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (vĂ”i, sama asja öeldes, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) on edukalt loodud. Sellele vastav kood asub failis new-wallet-query.boc, selle aadress on new-wallet.addr, ja privaatne vĂ”ti on failis new-wallet.pk (olge ettevaatlik — skripti taaskĂ€ivitamine kirjutab need failid ĂŒle).

Muidugi ei tea TON-vĂ”rk selle rahakoti olemasolust, see on ainult nende failide kujul. NĂŒĂŒd on vaja see laadida vĂ”rku. Probleem on aga see, et nutilepingu loomiseks on vaja maksta tasu, kuid teie konto saldo on hetkel null.

Töös olekus lahendatakse see probleem grammide ostmisega börsil (vĂ”i teise rahakoti ĂŒlekandmisega). Hetkel on testreĆŸiimil aga loodud spetsiaalne nutileping, mille kaudu saab kuni 20 grammi tasuta kĂŒsida.

Taotlus teise nutilepingu poole

Taotlus nutilepingu poole, mis jagab grammide mingeid limite, teeme nii. Samas kaustas crypto/block leiame faili 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+ "gift" $, b>
<b seqno 32 u, 1 8 swap ref, b>
dup ."ümbrik sõnum: " <s csr. cr
<b b{1000100} s, wc 8 i, wallet_addr 256 u, 0 gram, b{00} s,
 swap <s b>
dup ."tulemuseks väline sõnum: " <s csr. cr
2 boc+>B dup Bx. cr
"rahakoti-päring.boc" B&gt;fail

Salvestame selle samuti kokku pandud kliendi kausta, kuid muudame viiendat rida — read, mis ĂŒtleb "constant dest_addr". Asendame selle rahakoti aadressiga, mille te eelnevalt lĂ”ite (tĂ€ielik, mitte lĂŒhendatud). "-1:" algusesse kirjutama ei pea, selle asemel kirjutage alguses "0x".

Samuti saab rida muuta 6.666 Gram*\/ konstantnekog mĂ€dasumma — see on grammides summa, mida te palute (mitte rohkem kui 20). Isegi kui nĂ€itate tervet arvu, jĂ€tke vahepealne komakoht.

LÔpuks tuleb rida parandada 0x00000011 konstantne seqno. Esimene number siin on praegune sequence number, mis salvestatakse kontole, mis jagab gramme. Kust seda saada? Nagu varem öeldi, kÀivitage klient ja tÀitke:

last\ngetaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

LÔpus on andmetes nutilepingus

...
x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}\n x{0000000D}

Number 0000000D (teie oma on suurem) ongi sequence number, mille tuleb sisestada testgiver.fif.

KĂ”ik, salvestame faili ja kĂ€ivitame (.\/crypto\/fift testgiver.fif). VĂ€ljundina saame faili wallet-query.boc. See ongi koostatud teate teise nutilepingu juurde — palve «kanna nii palju gramme sellisele kontole».

Kliendi abil laadime selle vĂ”rgus ĂŒles:

> sendfile wallet-query.boc\n[ 1][t 1][1558747399.456575155][test-lite-client.cpp:577][!testnode]    saadame pÀringut failist wallet-query.boc\n[ 3][t 2][1558747399.500236034][test-lite-client.cpp:587][!query]   vÀline sÔnumi olek on 1

Kui nĂŒĂŒd kutsuda last, ja siis uuesti kĂŒsida konto staatust, millelt me palusime gramme, peaksime nĂ€gema, et tema sequence number tĂ”usis ĂŒhe vĂ”rra — see tĂ€hendab, et ta saatis raha meie kontole.

Viimane samm — laadime ĂŒles meie rahakoti koodi (tasakaal on juba tĂ€iendatud, kuid ilma nutilepingu koodita me ei saa sellega hallata). TĂ€idame sendfile new-wallet-query.boc — ja kĂ”ik, teil on oma rahakott TON-vĂ”rgus (kuigi praegu ainult testversioonis).

VĂ€ljaminevate tehingute loomine

Kuna raha saab edastada loodud konto tasakaalult, on olemas fail crypto\/block\/wallet.fif, mis tuleb samuti paigutada kogutud kliendi kausta.

Sarnaselt eelnevate sammudega tuleb seal parandada summa, mida te edastate, saaja aadress (dest_addr) ja teie rahakoti seqno (see on 1 pĂ€rast rahakoti aktiveerimist ja suureneb 1 vĂ”rra pĂ€rast iga vĂ€ljaminevat tehingut — nĂ€ete seda, kui kĂŒsite oma konto olekut). Testimiseks saate kasutada nĂ€iteks minu rahakotti — 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

KÀivitamisel (.\/crypto\/fift wallet.fif) skript vÔtab teie rahakoti aadressi (kust edastate) ja selle privaatsÔna failidest new-wallet.addr ja new-wallet.pk, ja salvestab saadud sÔnumi new-wallet-query.boc.

Nagu ikka, et tehingut otse teostada, kutsume sendfile new-wallet-query.boc klient. PÀrast seda Àrge unustage uuendada plokiahela olekut (last) ja kontrollige, et meie rahakoti saldo ja seqno on muutunud (getaccount).

TON-i (Telegram Open Network) testklient ja uus Fift-keel nutilepingute jaoks

NĂŒĂŒd on kĂ”ik, oskame luua nutikaid lepinguid TON-is ja saata neile pĂ€ringuid. Nagu nĂ€eme, on praegusest funktsionaalsusest piisavalt, et nĂ€iteks valmistada ette kasutajasĂ”bralikum rahakott graafilise liidesega (kuigi seda oodatakse, et see on juba osa sĂ”numitoojast).

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Kas olete huvitatud artiklite jÀtkamisest, mis kÀsitlevad TONi, TVM-i, Fifti?

  • Jah, ootan artiklite tsĂŒkli lĂ”petamist ĂŒldise ĂŒlevaate TONist

  • Jah, on huvitav lugeda rohkem Fifti keele kohta

  • Jah, tahan rohkem teada TON Virtuaalmasinast ja assemblerist selle jaoks

  • Ei, see ei huvi mind

HÀÀletas 39 kasutajat. 12 kasutajat olid erapooletud.

Kuidas suhtute Telegrami plaanidesse TON-i kÀivitamiseks?

  • Usun sellele projektile suurt lootust

  • JĂ€lgin lihtsalt huviga selle arengut

  • Olen skeptiline, kahtlen selle edus

  • Pean seda algatust ebaĂ”nnestunuks, millel pole laiemale massidele vajadust

HÀÀletas 47 kasutajat. 12 kasutajat olid erapooletud.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster