Testaa asiakas TON (Telegram Open Network) ja uusi Fift-kieli älykkäille sopimuksille

Yli vuosi sitten tuli tieto Telegram Messengerin suunnitelmista julkaista oma hajautettu verkko Telegram avoin verkko. Sitten tuli saataville laaja tekninen asiakirja, jonka väitetään kirjoittaneen Nikolai Durov ja jossa kuvattiin tulevan verkon rakenne. Niille, jotka jäivät siitä paitsi, suosittelen lukemaan tämän asiakirjan uudelleen kertomisen (osa 1, osa 2; kolmas osa, valitettavasti, kerää edelleen pölyä luonnoksiin).

Sen jälkeen TON-kehityksen tilasta ei ole ollut merkittäviä uutisia vasta pari päivää sitten (yhdessä epävirallisia kanavia) linkki sivulle ei ilmestynyt https://test.ton.org/download.html, missä sijaitsevat:
ton-test-liteclient-full.tar.xz — valoasiakkaan lähteet TON-testiverkkoon;
ton-lite-client-test1.config.json — määritystiedosto testiverkkoon yhdistämistä varten;
LUEMINUT — tiedot asiakkaan rakentamisesta ja käynnistämisestä;
MITEN — vaiheittaiset ohjeet älykkään sopimuksen luomiseen asiakkaan avulla;
ton.pdf — päivitetty asiakirja (päivätty 2. maaliskuuta 2019), joka sisältää teknisen yleiskatsauksen TON-verkosta;
tvm.pdf — TVM:n (TON-virtuaalikone, TON-virtuaalikone) tekninen kuvaus;
tblkch.pdf — TON-lohkoketjun tekninen kuvaus;
fivebase.pdf — kuvaus uudesta Fift-kielestä, joka on suunniteltu älykkäiden sopimusten luomiseen TONissa.

Toistan, sivulle ja kaikille näille asiakirjoille ei ollut virallista vahvistusta Telegramista, mutta näiden materiaalien määrä tekee niistä melko uskottavia. Käynnistä julkaistu asiakas omalla vastuulla.

Testiasiakkaan rakentaminen

Ensin yritetään rakentaa ja ajaa testiasiakas - onneksi LUEMINUT kuvaa tätä yksinkertaista prosessia yksityiskohtaisesti. Teen tämän käyttämällä esimerkkinä macOS 10.14.5:tä; en voi taata muiden järjestelmien rakentamisen onnistumista.

  1. Lataa ja pura lähdearkisto. On tärkeää ladata uusin versio, koska taaksepäin yhteensopivuutta ei taata tässä vaiheessa.

  2. Varmista, että uusimmat versiot make-, cmake- (versio 3.0.2 tai uudempi), OpenSSL- (mukaan lukien C-otsikkotiedostot), g++- tai clang-versiot on asennettu järjestelmään. Minun ei tarvinnut asentaa mitään, kaikki järjestyi heti.

  3. Oletetaan, että lähteet on purettu kansioon ~/lite-client. Luo siitä erikseen tyhjä kansio kootulle projektille (esim. ~/liteclient-build), ja siitä (cd ~/liteclient-build) kutsu komennot:

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

    Testaa asiakas TON (Telegram Open Network) ja uusi Fift-kieli älykkäille sopimuksille

    Kehitämme Fift-kielitulkin älykkäille sopimuksille (lisätietoja alla), soitamme myös

    cmake --build . --target fift

  4. Lataa nykyinen asetustiedosto muodostaaksesi yhteyden testiverkkoon ja sijoittaaksesi sen kansioon kootun asiakkaan kanssa.

  5. Lopettaa, voit käynnistää asiakkaan:

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

Jos kaikki on tehty oikein, sinun pitäisi nähdä jotain tällaista:

Testaa asiakas TON (Telegram Open Network) ja uusi Fift-kieli älykkäille sopimuksille

Kuten näemme, käytettävissä on muutamia komentoja:
help — näyttää tämän komentoluettelon;
quit - mene ulos;
time — näyttää kellonajan palvelimella;
status — näyttää yhteyden ja paikallisen tietokannan tilan;
last - päivitä lohkoketjun tila (lataa viimeinen lohko). On tärkeää suorittaa tämä komento ennen pyyntöjä varmistaaksesi, että näet verkon nykyisen tilan.
sendfile <filename> — lataa paikallinen tiedosto TON-verkkoon. Näin tapahtuu vuorovaikutusta verkon kanssa - mukaan lukien esimerkiksi uusien älykkäiden sopimusten luominen ja pyynnöt siirtää varoja tilien välillä;
getaccount <address> - näyttää nykyisen (komennon suoritushetkellä) last) määritetyllä osoitteella olevan tilin tila;
privkey <filename> — lataa yksityinen avain paikallisesta tiedostosta.

Jos asiakasohjelmaa käynnistettäessä siirrät kansion siihen käyttämällä vaihtoehtoa -D, sitten hän lisää siihen masterchainin viimeisen lohkon:

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

Nyt voimme siirtyä kiinnostavampiin asioihin - opettele Fift-kieli, yritä laatia älykäs sopimus (esimerkiksi luoda testilompakko), ladata se verkkoon ja yrittää siirtää varoja tilien välillä.

Kieli Fift

Dokumentista fivebase.pdf saat selville, että Telegram-tiimi on luonut uuden pinokielen älykkäiden sopimusten luomiseen Viisi (ilmeisesti numerosta viides, joka on samanlainen kuin Forth, kieli, jonka kanssa Fifthillä on paljon yhteistä).

Dokumentti on melko laaja, 87 sivua, enkä kerro sen sisältöä sen tarkemmin tämän artikkelin puitteissa (ainakaan siksi, että en ole itse lukenut sitä loppuun :). Keskityn pääkohtiin ja annan pari koodiesimerkkiä tällä kielellä.

Perustasolla Fiftin syntaksi on melko yksinkertainen: sen koodi koostuu sanat, erotetaan yleensä välilyönneillä tai rivinvaihdoilla (erikoistapaus: jotkut sanat eivät vaadi erotinta perään). Minkä tahansa слово on kirjainkoolla erottuva merkkijono, joka vastaa tiettyä merkkiä määritelmä (suunnilleen mitä tulkin tulisi tehdä, kun hän kohtaa tämän sanan). Jos sanalle ei ole määritelmää, tulkki yrittää jäsentää sen numerona ja laittaa sen pinoon. Muuten, täällä olevat luvut ovat - yhtäkkiä - 257-bittisiä kokonaislukuja, eikä murtolukuja ole ollenkaan - tarkemmin sanottuna, ne muuttuvat välittömästi kokonaislukupariksi, muodostaen rationaalisen murtoluvun osoittajan ja nimittäjän.

Sanoilla on tapana olla vuorovaikutuksessa pinon yläosassa olevien arvojen kanssa. Erillinen sanatyyppi - etuliite — ei käytä pinoa, vaan lähdetiedoston myöhempiä merkkejä. Esimerkiksi tällä tavalla merkkijonoliteraalit toteutetaan - lainausmerkki (") on etuliitesana, joka etsii seuraavaa (päättävää) lainausta ja työntää niiden välisen merkkijonon pinoon. Yksilinjaiset käyttäytyvät samalla tavalla (//) ja monirivinen (/*) kommentteja.

Tähän päättyy melkein koko kielen sisäinen rakenne. Kaikki muu (mukaan lukien ohjausrakenteet) määritellään sanoiksi (joko sisäisiksi, kuten aritmeettiset operaatiot ja uusien sanojen määritelmät, tai "vakiokirjastossa" Fift.fif, joka on kansiossa crypto/fift lähteissä).

Yksinkertainen esimerkkiohjelma Fiftissä:

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

Ensimmäinen rivi määrittelee uuden sanan setxy (huomaa etuliite {, joka luo lohkon ennen sulkevaa } ja etuliite :, joka itse asiassa määrittelee sanan). setxy ottaa luvun pinon yläosasta, määrittelee (tai määrittelee uudelleen) sen globaaliksi vakio x, ja tämän luvun neliö vakiona y (Koska vakioiden arvot voidaan määritellä uudelleen, kutsuisin niitä mieluummin muuttujiksi, mutta noudatan kielen nimeämiskäytäntöä).

Seuraavat kaksi riviä laittavat numeron pinoon ja soitat setxy, niin vakioiden arvot näytetään x, y (sanaa käytetään tulostukseen .), molemmat vakiot asetetaan pinoon, lasketaan yhteen ja tulos myös tulostetaan. Tuloksena näemme:

3 9 12 ok
7 49 56 ok

(Tulkki tulostaa rivin "ok", kun se lopettaa nykyisen rivin käsittelyn interaktiivisessa syöttötilassa)

No, täydellinen koodiesimerkki:

"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

Tämä pelottavan näköinen tiedosto on tarkoitettu älykkään sopimuksen luomiseen - se sijoitetaan tiedostoon new-wallet-query.boc teloituksen jälkeen. Huomaa, että TON-virtuaalikoneessa käytetään toista kokoonpanokieltä (en käsittele sitä yksityiskohtaisesti), jonka ohjeet sijoitetaan lohkoketjuun.

Siten TVM:n assembler on kirjoitettu Fift-kielellä - tämän assemblerin lähteet ovat tiedostossa crypto/fift/Asm.fif ja ne on yhdistetty yllä olevan koodinpätkän alussa.

Mitä voin sanoa, ilmeisesti Nikolai Durov vain rakastaa uusien ohjelmointikielien luomista :)

Älykkään sopimuksen luominen ja vuorovaikutus TONin kanssa

Oletetaan siis, että olemme koonneet TON-asiakkaan ja Fift-tulkin edellä kuvatulla tavalla ja tutustuneet kieleen. Kuinka luoda älykäs sopimus nyt? Tämä on kuvattu tiedostossa MITEN, liitetty lähteisiin.

Tilit TON

Kuten kuvailin kohdassa TON arvostelu, tämä verkko sisältää useamman kuin yhden lohkoketjun - on yksi yhteinen, ns. "pääketju" sekä mielivaltainen määrä muita "työketjuja", jotka tunnistetaan 32-bittisellä numerolla. Masterchainin tunniste on -1, sen lisäksi voidaan käyttää myös "perus"-työketjua, jonka tunniste on 0. Jokaisella työketjulla voi olla oma konfiguraationsa. Sisäisesti jokainen työketju on jaettu shardchaineihin, mutta tämä on toteutusyksityiskohta, jota ei tarvitse pitää mielessä.

Yhteen työketjuun on tallennettu monia tilejä, joilla on omat account_id-tunnisteensa. Pääketjussa ja nollatyöketjussa ne ovat 256 bittiä pitkiä. Siten tilin tunnus kirjoitetaan esimerkiksi näin:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Tämä on "raaka" muoto: ensin työketjun tunnus, sitten kaksoispiste ja tilin tunnus heksadesimaalimuodossa.

Lisäksi on lyhennetty muoto - työketjun numero ja tilin osoite on koodattu binäärimuodossa, niihin lisätään tarkistussumma, ja kaikki tämä on koodattu Base64:ään:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Kun tiedämme tämän tietuemuodon, voimme pyytää tilin nykyistä tilaa testiasiakkaan kautta komennolla

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Saamme jotain tällaista:

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

Näemme rakenteen, joka on tallennettu määritetyn työketjun DHT:hen. Esimerkiksi kentällä storage.balance on vaihtotilin saldo, in storage.state.code - älykäs sopimuskoodi ja sisään storage.state.data - sen nykyiset tiedot. Huomaa, että TON-tietovarasto - Solu, solut - on puumainen, jokaisessa solussa voi olla sekä omat tiedot että lapsisolut. Tämä näkyy sisennyksenä viimeisillä riveillä.

Älykkään sopimuksen rakentaminen

Luodaan nyt itse tällainen rakenne (se on nimeltään BOC - pussi soluja) käyttämällä Fift-kieltä. Onneksi sinun ei tarvitse kirjoittaa älykästä sopimusta itse - kansioon crypto/block lähdearkistosta on tiedosto new-wallet.fif, joka auttaa meitä luomaan uuden lompakon. Kopioidaan se kansioon kootun asiakkaan kanssa (~/liteclient-build, jos noudatit yllä olevia ohjeita). Mainitsin sen sisällön yllä esimerkkinä Fiftin koodista.

Suorita tämä tiedosto seuraavasti:

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

Täällä <source-directory> on korvattava polulla pakkaamattomiin lähteisiin ("~"-symbolia ei valitettavasti voi käyttää tässä, koko polku tarvitaan). Avaimen käytön sijaan -I voit määrittää ympäristömuuttujan FIFTPATH ja laita tämä polku siihen.

Koska käynnistimme Fiftin tiedostonimellä new-wallet.fif, se suorittaa sen ja poistuu. Jos jätät tiedoston nimen pois, voit pelata tulkin kanssa interaktiivisesti.

Suorituksen jälkeen konsolissa pitäisi näkyä jotain tällaista:

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)

Tämä tarkoittaa, että lompakko ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (tai mikä on sama, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) luotu onnistuneesti. Vastaava koodi tulee tiedostoon new-wallet-query.boc, hänen osoitteensa on new-wallet.addr, ja yksityinen avain on sisällä new-wallet.pk (ole varovainen - komentosarjan uudelleen suorittaminen korvaa nämä tiedostot).

Tietenkään TON-verkko ei vielä tiedä tästä lompakosta, se on tallennettu vain näiden tiedostojen muodossa. Nyt se on ladattava verkkoon. Ongelmana on kuitenkin, että älykkään sopimuksen luomiseksi sinun on maksettava palkkio, ja tilisi saldo on edelleen nolla.

Työtilassa tämä ongelma ratkaistaan ​​ostamalla grammoja vaihdosta (tai siirtämällä toisesta lompakosta). No, nykyisessä testitilassa on luotu erityinen älysopimus, josta voi pyytää jopa 20 grammaa sellaisenaan.

Luodaan pyyntö jonkun muun älykkääseen sopimukseen

Teemme pyynnön älysopimukselle, joka jakaa grammoja vasemmalle ja oikealle näin. Samassa kansiossa crypto/block etsi tiedosto 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

Tallennamme sen myös kansioon kootun asiakkaan kanssa, mutta korjaamme viidennen rivin - ennen riviä "constant dest_addr". Korvataan se aiemmin luomasi lompakon osoitteella (täysi, ei lyhennetty). Ei tarvitse kirjoittaa "-1:" alkuun, vaan laita "0x" alkuun.

Voit myös vaihtaa linjaa 6.666 Gram*/ constant amount — tämä on pyytämäsi määrä grammoina (enintään 20). Vaikka määrität kokonaisluvun, jätä desimaalipilkku.

Lopuksi sinun on korjattava viiva 0x00000011 constant seqno. Ensimmäinen numero tässä on nykyinen järjestysnumero, joka on tallennettu tilille grammoina. Mistä saan sen? Kuten yllä todettiin, käynnistä asiakas ja suorita:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Älykkäiden sopimusten tiedot sisältävät aivan lopussa

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

Numero 0000000D (omasi on suurempi) on järjestysnumero, joka on korvattava testgiver.fif.

Siinä kaikki, tallenna tiedosto ja suorita (./crypto/fift testgiver.fif). Tulos on tiedosto wallet-query.boc. Tätä muodostuu сообщение jonkun muun älykkääseen sopimukseen - pyyntö "siirrä niin monta grammaa sellaiselle ja sellaiselle tilille".

Lataamme sen verkkoon asiakkaan avulla:

> 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

Jos nyt soitat last, ja pyydä sitten uudelleen sen tilin tilaa, jolta pyysimme grammoja, niin meidän pitäisi nähdä, että sen järjestysnumero on kasvanut yhdellä - tämä tarkoittaa, että se lähetti rahaa tilillemme.

Viimeinen vaihe jää - lataa lompakkomme koodi (sen saldo on jo täydennetty, mutta ilman älykästä sopimuskoodia emme pysty hallitsemaan sitä). Me toteutamme sendfile new-wallet-query.boc - ja siinä kaikki, sinulla on oma lompakkosi TON-verkossa (vaikka se olisikin toistaiseksi vain koe).

Lähtevien tapahtumien luominen

Rahan siirtämiseksi luodun tilin saldosta on tiedosto crypto/block/wallet.fif, joka on myös sijoitettava kootun asiakkaan kansioon.

Samoin kuin edellisissä vaiheissa, sinun on säädettävä siirrettävää summaa, vastaanottajan osoitetta (dest_addr) ja lompakon järjestystä (se on yhtä suuri kuin 1 lompakon alustamisen jälkeen ja kasvaa 1:llä jokaisen lähtevän tapahtuman jälkeen - voit nähdä sen pyytämällä tilisi tilaa). Testeihin voit käyttää esimerkiksi lompakkoani - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Käynnistyksessä (./crypto/fift wallet.fif) komentosarja ottaa lompakkosi osoitteen (josta siirrät) ja sen yksityisen avaimen tiedostoista new-wallet.addr и new-wallet.pk, ja vastaanotettu viesti kirjoitetaan osoitteeseen new-wallet-query.boc.

Kuten ennenkin, suorita tapahtuma suoraan soittamalla sendfile new-wallet-query.boc asiakkaassa. Tämän jälkeen älä unohda päivittää lohkoketjun tilaa (last) ja tarkista, että lompakkomme saldo ja seqno ovat muuttuneet (getaccount <account_id>).

Testaa asiakas TON (Telegram Open Network) ja uusi Fift-kieli älykkäille sopimuksille

Siinä kaikki, nyt voimme luoda älykkäitä sopimuksia TONissa ja lähettää heille pyyntöjä. Kuten näette, nykyinen toiminnallisuus riittää jo esimerkiksi ystävällisemmän lompakon tekemiseen graafisella käyttöliittymällä (oletetaan kuitenkin, että se tulee saataville jo osana messengeriä).

Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. Kirjaudu sisään, ole kiltti.

Oletko kiinnostunut jatkamaan artikkeleita TONin, TVM:n, Fiftin analyysillä?

  • Kyllä, odotan TONin yleiskatsauksen sisältävän artikkelisarjan valmistumista

  • Kyllä, on mielenkiintoista lukea lisää Fift-kielestä

  • Kyllä, haluan oppia lisää TON Virtual Machinesta ja sen kokoonpanosta

  • Ei, mikään näistä ei ole kiinnostavaa

39 käyttäjää äänesti. 12 käyttäjää pidättyi äänestämästä.

Mitä mieltä olet Telegramin suunnitelmista käynnistää TON?

  • Minulla on suuret toiveet tämän projektin suhteen

  • Seuraan vain mielenkiinnolla sen kehitystä.

  • Olen skeptinen ja epäilen sen onnistumista.

  • Olen taipuvainen pitämään tätä aloitetta epäonnistuneena ja tarpeettomana laajojen massojen kannalta

47 käyttäjää äänesti. 12 käyttäjää pidättyi äänestämästä.

Lähde: will.com

Lisää kommentti