Testa klients TON (Telegram Open Network) un jauna Fift valoda viedajiem līgumiem

Vairāk nekā pirms gada kļuva zināms par Telegram Messenger plāniem atbrÄ«vot savu decentralizēto tÄ«klu Atvērtā tÄ«kla telegramma. Tad kļuva pieejams apjomÄ«gs tehniskais dokuments, kuru it kā rakstÄ«jis Nikolajs Durovs un kurā aprakstÄ«ta topoŔā tÄ«kla struktÅ«ra. Tiem, kas palaida garām, iesaku izlasÄ«t manu Ŕī dokumenta pārstāstu (1. daļa, 2. daļa; treŔā daļa, diemžēl, joprojām savāc putekļus caurvējā).

KopÅ” tā laika nav bijis nekādu bÅ«tisku ziņu par TON attÄ«stÄ«bas statusu vēl pirms pāris dienām (vienā no neoficiālie kanāli) saite uz lapu neparādÄ«jās https://test.ton.org/download.html, kur atrodas:
ā—¦ ton-test-liteclient-full.tar.xz ā€” gaismas klienta avoti TON testa tÄ«klam;
ā—¦ ton-lite-client-test1.config.json ā€” konfigurācijas fails savienojumam ar testa tÄ«klu;
ā—¦ README ā€” informācija par klienta izveidi un palaiÅ”anu;
ā—¦ KĀ ā€” soli pa solim instrukcijas viedā lÄ«guma izveidoÅ”anai, izmantojot klientu;
ā—¦ ton.pdf ā€” precizēts dokuments (datēts ar 2.) ar TON tÄ«kla tehnisko pārskatu;
ā—¦ tvm.pdf ā€” TVM (TON Virtual Machine, TON virtuālā maŔīna) tehniskais apraksts;
ā—¦ tblkch.pdf ā€” TON blokķēdes tehniskais apraksts;
ā—¦ fivebase.pdf ā€” jaunās Fift valodas apraksts, kas paredzēta viedo lÄ«gumu izveidei TON valodā.

Es atkārtoju, ka lapai un visiem Å”iem dokumentiem no Telegram oficiāla apstiprinājuma nebija, taču Å”o materiālu apjoms padara tos diezgan ticamus. Palaidiet publicēto klientu uz savu risku.

Testa klienta izveide

Vispirms mēģināsim izveidot un palaist testa klientu ā€” par laimi, README sÄ«ki apraksta Å”o vienkārÅ”o procesu. Es to darÄ«Å”u, kā piemēru izmantojot operētājsistēmu macOS 10.14.5; es nevaru galvot par veiksmÄ«gu bÅ«vniecÄ«bu citās sistēmās.

  1. Lejupielādējiet un izpakojiet avotu arhÄ«vs. Ir svarÄ«gi lejupielādēt jaunāko versiju, jo atpakaļsaderÄ«ba Å”ajā posmā netiek garantēta.

  2. Pārliecinieties, vai sistēmā ir instalētas jaunākās make, cmake (versija 3.0.2 vai jaunāka versija), OpenSSL (ieskaitot C galvenes failus), g++ vai clang versijas. Man nekas nebija jāinstalē, viss sanāca uzreiz.

  3. Pieņemsim, ka avoti ir izpakoti mapē ~/lite-client. AtseviŔķi no tā izveidojiet tukÅ”u mapi saliktajam projektam (piemēram, ~/liteclient-build), un no tā (cd ~/liteclient-build) izsauc komandas:

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

    Testa klients TON (Telegram Open Network) un jauna Fift valoda viedajiem līgumiem

    Lai izveidotu Fift valodas tulku viedajiem līgumiem (vairāk par to tālāk), mēs arī zvanām

    cmake --build . --target fift

  4. Lejupielādējiet paÅ”reizējo konfigurācijas fails lai izveidotu savienojumu ar testa tÄ«klu un ievietotu to mapē ar salikto klientu.

  5. Apdare, jūs varat sākt klientu:

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

Ja viss ir izdarīts pareizi, jums vajadzētu redzēt kaut ko līdzīgu:

Testa klients TON (Telegram Open Network) un jauna Fift valoda viedajiem līgumiem

Kā redzam, ir pieejamas dažas komandas:
ā—¦ help ā€” parādÄ«t Å”o komandu sarakstu;
ā—¦ quit - ej ārā;
ā—¦ time ā€” parādÄ«t paÅ”reizējo laiku serverÄ«;
ā—¦ status ā€” parādÄ«t savienojuma un lokālās datu bāzes statusu;
ā—¦ last ā€” atjaunināt blokķēdes stāvokli (lejupielādēt pēdējo bloku). Ir svarÄ«gi palaist Å”o komandu pirms jebkādiem pieprasÄ«jumiem, lai pārliecinātos, ka redzat paÅ”reizējo tÄ«kla stāvokli.
ā—¦ sendfile <filename> ā€” augÅ”upielādējiet lokālo failu TON tÄ«klā. Tādā veidā notiek mijiedarbÄ«ba ar tÄ«klu ā€“ tostarp, piemēram, jaunu viedo lÄ«gumu izveide un lÄ«dzekļu pārskaitÄ«Å”anas pieprasÄ«jumi starp kontiem;
ā—¦ getaccount <address> ā€” parādÄ«t paÅ”reizējo (komandas izpildÄ«Å”anas laikā) last) konta statuss ar norādÄ«to adresi;
ā—¦ privkey <filename> ā€” ielādējiet privāto atslēgu no vietējā faila.

Ja, startējot klientu, pārsÅ«tāt uz to mapi, izmantojot opciju -D, viņŔ tam pievienos pēdējo galvenās ķēdes bloku:

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

Tagad varam pāriet uz interesantākām lietām ā€“ apgÅ«t Fift valodu, mēģināt sastādÄ«t viedo lÄ«gumu (piemēram, izveidot testa maku), augÅ”upielādēt to tÄ«klā un mēģināt pārskaitÄ«t lÄ«dzekļus starp kontiem.

Valoda Fift

No dokumenta fivebase.pdf jūs varat uzzināt, ka Telegram komanda ir izveidojusi jaunu steka valodu, lai izveidotu viedos līgumus Piektā (acīmredzot no cipara piektais, līdzīgi kā Forth, valoda, ar kuru Fifth ir daudz kopīga).

Dokuments ir diezgan apjomÄ«gs, 87 lappuses, un Ŕī raksta ietvaros tā saturu sÄ«kāk nepārstāstÄ«Å”u (vismaz tāpēc, ka pats neesmu pabeidzis lasÄ«t :). Es koncentrÄ“Å”os uz galvenajiem punktiem un sniegÅ”u pāris kodu piemērus Å”ajā valodā.

PamatlÄ«menÄ« Fiftas sintakse ir pavisam vienkārÅ”a: tā kods sastāv no vārdiem, parasti atdala ar atstarpēm vai rindiņu pārtraukumiem (Ä«paÅ”s gadÄ«jums: dažiem vārdiem aiz sevis nav nepiecieÅ”ams atdalÄ«tājs). JebkurÅ” vārds ir reÄ£istrjutÄ«ga rakstzÄ«mju secÄ«ba, kas atbilst noteiktai noteikt (aptuveni, kas tulkam bÅ«tu jādara, saskaroties ar Å”o vārdu). Ja vārdam nav definÄ«cijas, tulks mēģina to parsēt kā skaitli un ievietot kaudzē. Starp citu, skaitļi Å”eit ir - pēkŔņi - 257 bitu veseli skaitļi, un daļskaitļu nav vispār - precÄ«zāk, tie uzreiz pārvērÅ”as par veselu skaitļu pāri, veidojot racionālas daļas skaitÄ«tāju un saucēju.

Vārdi mēdz mijiedarboties ar vērtÄ«bām kaudzes augÅ”pusē. AtseviŔķs vārdu veids - priedēklis ā€” neizmanto steku, bet nākamās rakstzÄ«mes no avota faila. Piemēram, Ŕādi tiek Ä«stenoti virkņu literāļi - pēdiņas rakstzÄ«me (") ir prefiksa vārds, kas meklē nākamo (aizveroÅ”o) citātu un nospiež virkni starp tām uz kaudzÄ«ti. Viena oderējums uzvedas tāpat (//) un daudzrindu (/*) komentāri.

Å eit beidzas gandrÄ«z visa valodas iekŔējā struktÅ«ra. Viss pārējais (tostarp vadÄ«bas konstrukcijas) ir definēts kā vārdi (vai nu iekŔēji, piemēram, aritmētiskās darbÄ«bas un jaunu vārdu definÄ«cija; vai definēts "standarta bibliotēkā"). Fift.fif, kas atrodas mapē crypto/fift avotos).

VienkārÅ”s programmas piemērs programmā Fift:

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

Pirmā rinda definē jaunu vārdu setxy (Ņemiet vērā prefiksu {, kas izveido bloku pirms noslēdzoŔā } un prefiksu :, kas faktiski definē vārdu). setxy ņem skaitli no kaudzes augÅ”daļas, definē (vai no jauna definē) to kā globālu nemainÄ«gs x, un Ŕī skaitļa kvadrāts kā konstante y (Ņemot vērā, ka konstantu vērtÄ«bas var definēt no jauna, es drÄ«zāk tos sauktu par mainÄ«gajiem, bet es ievēroju nosaukÅ”anas konvenciju valodā).

Nākamajās divās rindās ielieciet numuru uz kaudzes un zvaniet setxy, tad tiek parādītas konstantu vērtības x, y (vārds tiek izmantots izvadei .), abas konstantes tiek ievietotas kaudzē, summētas, un rezultāts tiek arī izdrukāts. Rezultātā mēs redzēsim:

3 9 12 ok
7 49 56 ok

(Tulks izdrukā rindiņu ā€œokā€, kad tas pabeidz paÅ”reizējās rindas apstrādi interaktÄ«vās ievades režīmā)

Nu, pilns koda piemērs:

"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

Å is biedējoŔā izskata fails ir paredzēts viedā lÄ«guma izveidei ā€“ tas tiks ievietots failā new-wallet-query.boc pēc izpildes. LÅ«dzu, ņemiet vērā, ka TON virtuālajai maŔīnai Å”eit tiek izmantota cita montāžas valoda (sÄ«kāk par to nekavÄ“Å”os), kuras norādÄ«jumi tiks ievietoti blokķēdē.

Tādējādi TVM montētājs ir rakstÄ«ts Fift ā€” Ŕī montētāja avoti ir failā crypto/fift/Asm.fif un ir savienoti iepriekÅ” minētā koda sākumā.

Ko lai saka, acÄ«mredzot Nikolajam Durovam vienkārÅ”i patÄ«k radÄ«t jaunas programmÄ“Å”anas valodas :)

Vieda līguma izveide un mijiedarbība ar TON

Tātad, pieņemsim, ka esam salikuÅ”i TON klientu un Fift tulku, kā aprakstÄ«ts iepriekÅ”, un iepazinuÅ”ies ar valodu. Kā izveidot viedo lÄ«gumu tagad? Tas ir aprakstÄ«ts failā KĀ, pievienots avotiem.

Konti TON

Kā es aprakstÄ«ju TON apskats, Å”ajā tÄ«klā ir vairāk nekā viena blokķēde ā€“ ir viena izplatÄ«ta, tā sauktā. "galvenā ķēde", kā arÄ« patvaļīgs papildu "darba ķēžu" skaits, kas identificētas ar 32 bitu skaitli. Masterchain ir identifikators -1, papildus tam var izmantot arÄ« ā€œbāzesā€ darba ķēdi ar identifikatoru 0. Katrai darba ķēdei var bÅ«t sava konfigurācija. IekŔēji katra darba ķēde ir sadalÄ«ta shardķēdēs, taču tā ir ievieÅ”anas detaļa, kas nav jāpatur prātā.

Vienā darba ķēdē tiek glabāti daudzi konti, kuriem ir savi account_id identifikatori. Galvenajai ķēdei un nulles darba ķēdei tie ir 256 biti gari. Tādējādi konta identifikators tiek rakstÄ«ts, piemēram, Ŕādi:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Å is ir ā€œneapstrādātsā€ formāts: vispirms darba ķēdes ID, pēc tam kols un konta ID heksadecimālajā apzÄ«mējumā.

Turklāt ir saīsināts formāts - darba ķēdes numurs un konta adrese tiek kodēti binārā formā, tiem tiek pievienota kontrolsumma, un tas viss tiek kodēts Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Zinot Å”o ieraksta formātu, mēs varam pieprasÄ«t konta paÅ”reizējo stāvokli, izmantojot testa klientu, izmantojot komandu

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Mēs iegūsim kaut ko līdzīgu:

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

Mēs redzam struktÅ«ru, kas tiek saglabāta norādÄ«tās darba ķēdes DHT. Piemēram, laukā storage.balance ir tekoŔā konta atlikums, in storage.state.code - viedā lÄ«guma kods un iekŔā storage.state.data - tā paÅ”reizējie dati. LÅ«dzu, ņemiet vērā, ka TON datu krātuve - Å Å«na, Ŕūnas - ir koka veida, katrā Ŕūnā var bÅ«t gan savi dati, gan bērnu Ŕūnas. Tas tiek parādÄ«ts kā atkāpe pēdējās rindās.

Gudra līguma veidoŔana

Tagad izveidosim paÅ”i Ŕādu struktÅ«ru (to sauc par BOC - Ŕūnu maiss), izmantojot Fift valodu. Par laimi, jums paÅ”am nav jāraksta viedais lÄ«gums - mapē crypto/block ir fails no avota arhÄ«va new-wallet.fif, kas mums palÄ«dzēs izveidot jaunu maku. Kopēsim to uz mapi ar salikto klientu (~/liteclient-build, ja ievērojāt iepriekÅ” sniegtos norādÄ«jumus). IepriekÅ” es citēju tā saturu kā Fift koda piemēru.

Izpildiet Ŕo failu Ŕādi:

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

Å eit <source-directory> jāaizstāj ar ceļu uz neizpakotajiem avotiem (simbolu ā€œ~ā€ diemžēl Å”eit nevar izmantot, ir nepiecieÅ”ams pilns ceļŔ). Tā vietā, lai izmantotu atslēgu -I varat definēt vides mainÄ«go FIFTPATH un ielieciet tajā Å”o ceļu.

KopÅ” mēs uzsākām Fift ar faila nosaukumu new-wallet.fif, tas to izpildÄ«s un izies. Ja izlaižat faila nosaukumu, varat interaktÄ«vi spēlēt ar tulku.

Pēc izpildes konsolē jāparāda kaut kas lÄ«dzÄ«gs Å”im:

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)

Tas nozÄ«mē, ka maku ar ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (vai kas ir tas pats, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) veiksmÄ«gi izveidots. AttiecÄ«gais kods bÅ«s failā new-wallet-query.boc, viņa adrese ir norādÄ«ta new-wallet.addr, un privātā atslēga ir ievadÄ«ta new-wallet.pk (esiet piesardzÄ«gs ā€” vēlreiz palaižot skriptu, Å”ie faili tiks pārrakstÄ«ti).

Protams, TON tÄ«kls par Å”o maku vēl nezina, tas tiek glabāts tikai Å”o failu veidā. Tagad tas ir jāaugÅ”upielādē tÄ«klā. Tomēr problēma ir tā, ka, lai izveidotu viedo lÄ«gumu, jums ir jāmaksā komisijas maksa, un jÅ«su konta atlikums joprojām ir nulle.

Darba režīmā Ŕī problēma tiks atrisināta, pērkot gramus biržā (vai pārskaitot no cita maka). Nu paÅ”reizējā testa režīmā ir izveidots Ä«paÅ”s viedlÄ«gums, no kura var prasÄ«t lÄ«dz 20 gramiem tāpat vien.

PieprasÄ«juma Ä£enerÄ“Å”ana kāda cita viedajam lÄ«gumam

Mēs pieprasām viedo lÄ«gumu, kas Ŕādi sadala gramus pa labi un pa kreisi. Tajā paŔā mapē crypto/block atrast failu 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

Mēs to saglabāsim arÄ« mapē ar samontēto klientu, bet labosim piekto rindiņu - pirms rindas ā€œconstant dest_addr". Aizstāsim to ar iepriekÅ” izveidotā maka adresi (pilna, nevis saÄ«sināta). Sākumā nav jāraksta ā€œ-1:ā€, tā vietā jāliek ā€œ0xā€ sākumā.

Varat arÄ« mainÄ«t lÄ«niju 6.666 Gram*/ constant amount ā€” Ŕī ir jÅ«su pieprasÄ«tā summa gramos (ne vairāk kā 20). Pat ja norādāt veselu skaitli, atstājiet decimālzÄ«mi.

Visbeidzot, jums ir jālabo lÄ«nija 0x00000011 constant seqno. Pirmais cipars Å”eit ir paÅ”reizējais kārtas numurs, kas tiek saglabāts kontā, kas izsniedz gramus. No kurienes es to varu dabÅ«t? Kā minēts iepriekÅ”, startējiet klientu un palaidiet:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

PaŔās beigās tiks ietverti viedā līguma dati

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

Skaitlis 0000000D (jūsējais būs lielāks) ir kārtas numurs, kas jāaizstāj ar testgiver.fif.

Tas arÄ« viss, saglabājiet failu un palaidiet (./crypto/fift testgiver.fif). Izvade bÅ«s fails wallet-query.boc. Tas ir tas, kas veidojas сŠ¾Š¾Š±Ń‰ŠµŠ½ŠøŠµ uz kāda cita viedo lÄ«gumu - lÅ«gums ā€œpārskaitÄ«t tik daudz gramu uz tādu un tādu kontuā€.

Izmantojot klientu, mēs to augÅ”upielādējam tÄ«klā:

> 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

Ja tagad piezvanīsi last, un pēc tam vēlreiz pieprasiet tā konta statusu, no kura mēs prasījām gramus, tad mums vajadzētu redzēt, ka tā kārtas numurs ir palielinājies par vienu - tas nozīmē, ka tas nosūtīja naudu uz mūsu kontu.

Atliek pēdējais solis - lejupielādējiet mÅ«su maka kodu (tā atlikums jau ir papildināts, bet bez viedā lÄ«guma koda mēs to nevarēsim pārvaldÄ«t). Mēs veicam sendfile new-wallet-query.boc ā€” un tas arÄ« viss, jums ir savs maciņŔ TON tÄ«klā (pat ja tas pagaidām ir tikai pārbaudes lÄ«dzeklis).

IzejoŔo darījumu veidoŔana

Lai pārskaitītu naudu no izveidotā konta atlikuma, ir fails crypto/block/wallet.fif, kas arī jāievieto mapē ar samontēto klientu.

LÄ«dzÄ«gi kā iepriekŔējās darbÄ«bās, jums ir jāpielāgo pārskaitāmā summa, saņēmēja adrese (dest_addr) un maka secÄ«ba (tas ir vienāds ar 1 pēc maka inicializācijas un palielinās par 1 pēc katra izejoŔā darÄ«juma ā€” varat skatiet to, pieprasot sava konta statusu) . Pārbaudēm varat izmantot, piemēram, manu maku - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Startējot (./crypto/fift wallet.fif) skripts no failiem paņems jÅ«su maka adresi (no kurienes jÅ«s pārsÅ«tāt) un tā privāto atslēgu new-wallet.addr Šø new-wallet.pk, un saņemtā ziņa tiks rakstÄ«ta uz new-wallet-query.boc.

Tāpat kā iepriekÅ”, lai tieÅ”i veiktu darÄ«jumu, zvaniet sendfile new-wallet-query.boc klientā. Pēc tam neaizmirstiet atjaunināt blokķēdes stāvokli (last) un pārbaudiet, vai ir mainÄ«jies mÅ«su maka atlikums un secÄ«ba (getaccount <account_id>).

Testa klients TON (Telegram Open Network) un jauna Fift valoda viedajiem līgumiem

Tas arÄ« viss, tagad mēs varam izveidot viedos lÄ«gumus TON un nosÅ«tÄ«t tiem pieprasÄ«jumus. Kā redzams, ar paÅ”reizējo funkcionalitāti jau pietiek, lai, piemēram, izveidotu draudzÄ«gāku maku ar grafisko interfeisu (tomēr paredzams, ka tas jau kļūs pieejams kā daļa no messenger).

Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.

Vai jūs interesē turpināt rakstus ar TON, TVM, Fift analīzi?

  • Jā, es gaidu, kad beigsies rakstu sērija ar vispārÄ«gu TON pārskatu

  • Jā, ir interesanti lasÄ«t vairāk par Fift valodu

  • Jā, es vēlos uzzināt vairāk par TON virtuālo maŔīnu un tās montētāju

  • Nē, nekas no tā nav interesants

Nobalsoja 39 lietotāji. 12 lietotāji atturējās.

Ko jūs domājat par Telegram plāniem uzsākt TON?

  • Es lieku lielas cerÄ«bas uz Å”o projektu

  • Es tikai ar interesi sekoju tās attÄ«stÄ«bai.

  • Esmu skeptisks un Å”aubos par tā panākumiem.

  • Es sliecos Å”o iniciatÄ«vu uzskatÄ«t par neveiksmÄ«gu un plaŔām masām nevajadzÄ«gu

Nobalsoja 47 lietotāji. 12 lietotāji atturējās.

Avots: www.habr.com

Pievieno komentāru