Testklient för TON (Telegram Open Network) och det nya sprÄket Fift för smarta kontrakt

För mer Àn ett Är sedan blev planerna för meddelandetjÀnsten Telegram att slÀppa sitt eget decentraliserade nÀtverk kÀnt. Telegram Open Network. DÄ blev ett omfattande tekniskt dokument tillgÀngligt som antas ha skrivits av Nikolaj Durov och beskrev strukturen för det framtida nÀtverket. För dem som missade det rekommenderar jag att lÀsa min sammanfattning av detta dokument (del 1, del 2; tyvÀrr ligger den tredje delen fortfarande i utkasten).

Sedan dess har det inte funnits nÄgra betydande nyheter om utvecklingsstatusen för TON, förrÀn för ett par dagar sedan (i en av icke officiella kanaler) dök en lÀnk upp till en sida https://test.ton.org/download.html, dÀr följande finns:
◩ ton-test-liteclient-full.tar.xz — kĂ€llkoden för en lĂ€tt klient för testnĂ€tverket TON;
◩ ton-lite-client-test1.config.json — konfigurationsfil för att ansluta till testnĂ€tverket;
◩ README — information om byggnation och start av klienten;
◩ HOWTO — steg-för-steg-instruktioner för att skapa en smart kontrakt med hjĂ€lp av klienten;
◩ ton.pdf — uppdaterat dokument (frĂ„n den 2 mars 2019) med en teknisk översikt över nĂ€tverket TON;
◩ tvm.pdf — teknisk beskrivning av TVM (TON Virtual Machine, den virtuella maskinen TON);
◩ tblkch.pdf — teknisk beskrivning av blockkedjan TON;
◩ fiftbase.pdf — beskrivning av det nya sprĂ„ket Fift, avsett för att skapa smarta kontrakt i TON.

Jag upprepar, det har inte funnits nÄgra officiella bekrÀftelser frÄn Telegram angÄende sidan och alla dessa dokument, men volymen av dessa material gör dem tillrÀckligt trovÀrdiga. Lanseringen av den publicerade klienten görs pÄ egen risk.

Bygg av testklienten

Först ska vi försöka bygga och köra testklienten — lyckligtvis README beskriver denna okomplicerade process i detalj. Jag kommer att göra det med exemplet macOS 10.14.5, jag kan inte garantera att det fungerar pĂ„ andra system.

  1. Ladda ner och packa upp arkivet med kÀllkod. Det Àr viktigt att ladda ner den senaste versionen eftersom bakÄtkompatibilitet inte garanteras vid detta stadium.

  2. Se till att de senaste versionerna av make, cmake (version 3.0.2 eller högre), OpenSSL (inklusive huvudfilerna C), g++ eller clang Àr installerade i systemet. Jag behövde inte installera nÄgot extra, allt byggdes direkt.

  3. Anta att kÀllkoden Àr utdelad i mappen ~\/lite-client. Separera den och skapa en tom mapp för det byggda projektet (till exempel, ~\/liteclient-build), och frÄn den (cd ~\/liteclient-build) kör kommandona:

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

    Testklient för TON (Telegram Open Network) och det nya sprÄket Fift för smarta kontrakt

    För att bygga tolken för sprÄket Fift för smarta kontrakt (om det nedan), kör ocksÄ

    cmake --build . --target fift

  4. Ladda ner den aktuella konfigurationsfilen för att ansluta till testnÀtet och lÀgg den i mappen med den samlade klienten.

  5. FĂ€rdig, kan du starta klienten:

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

Om allt har gjorts rÀtt bör du se nÄgot sÄdant:

Testklient för TON (Telegram Open Network) och det nya sprÄket Fift för smarta kontrakt

Antalet tillgÀngliga kommandon Àr, som vi ser, fÄ:
◩ help — visa denna lista av kommandon;
◩ quit — gĂ„ ut;
◩ time — visa aktuell tid pĂ„ servern;
◩ status — visa status för anslutningen och den lokala databasen;
◩ last — uppdatera blockchain-statusen (ladda ner den senaste blocken). Det Ă€r viktigt att utföra detta kommando innan nĂ„gra förfrĂ„gningar för att vara sĂ€ker pĂ„ att du ser den aktuella statusen för nĂ€tverket.
◩ sendfile <filename> — ladda upp en lokal fil till TON-nĂ€tverket. Detta Ă€r hur interaktionen med nĂ€tverket fungerar — inklusive till exempel skapande av nya smarta kontrakt och förfrĂ„gningar för att överföra medel mellan konton;
◩ getaccount

— visa det aktuella (vid kommandots utförande) tillstĂ„ndet av kontot med den angivna adressen; lastprivkey
◩ — ladda upp den privata nyckeln frĂ„n en lokal fil. <filename> Om du vid start av klienten anger en mapp med hjĂ€lp av alternativet

-D , kommer den att lÀgga den senaste blocken av masterkedjan i den:.\/test-lite-client -C ton-lite-client-test1.config.json -D ~\/ton-db-dir

Nu kan vi gĂ„ vidare till mer intressanta saker — studera sprĂ„ket Fift, prova att kompilera ett smart kontrakt (till exempel skapa en testplĂ„nbok), ladda upp det till nĂ€tverket och försöka överföra medel mellan konton.

SprÄket Fift

I dokumentet

kan man fĂ„ reda pĂ„ att för att skapa smarta kontrakt har Telegram-teamet skapat ett nytt stack-baserat sprĂ„k fiftbase.pdf (uppenbarligen frĂ„n siffran Fift fifth , pĂ„ samma sĂ€tt som Forth — ett sprĂ„k som har mycket gemensamt med Fift).Dokumentet Ă€r rĂ€tt omfattande, 87 sidor, och jag kommer inte att Ă„terberĂ€tta innehĂ„llet i detalj i denna artikel (Ă„tminstone för att jag sjĂ€lv inte har lĂ€st klart det :). Jag ska fokusera pĂ„ huvudpunkterna och ge nĂ„gra kodexempel pĂ„ detta sprĂ„k.

PÄ grundlÀggande nivÄ Àr syntaxen i Fift ganska enkel: koden bestÄr av

ord , som vanligtvis Ă€r Ă„tskilda av mellanslag eller radbrytningar (ett specialfall: vissa ord behöver inte ett avgrĂ€nsande tecken efter sig). Vilket som helst— Ă€r en skiftlĂ€geskĂ€nslig sekvens av tecken som motsvarar en viss ordet definition definition (grovt sagt, det som tolken ska göra nĂ€r den möter detta ord). Om ordet inte har nĂ„gon definition försöker tolken att tolka det som ett tal och placera det pĂ„ stacken. För övrigt, hĂ€r Ă€r talen – överraskande nog – 257-bitars hela, och det finns inga brĂ„k – snarare, de omvandlas direkt till ett par hela som utgör tĂ€ljare och nĂ€mnare för en rationell brĂ„kdel.

Ord interagerar vanligtvis med vĂ€rdena som ligger pĂ„ toppen av stacken. En sĂ€rskild typ av ord – prefixord – anvĂ€nder inte stacken, utan de efterföljande tecknen frĂ„n kĂ€llfilen. Till exempel Ă€r strĂ€ngliteral sĂ„ hĂ€r implementerade – tecknet " (") Ă€r ett prefixord som söker nĂ€sta (avslutande) citationstecken och placerar strĂ€ngen mellan dem pĂ„ stacken. PĂ„ samma sĂ€tt fungerar enradiga (//) och flerradiga (/*) kommentarer.

Detta avslutar nÀstan hela den inre strukturen av sprÄket. Allt annat (inklusive kontrollstrukturer) definieras som ord (antingen interna, som aritmetiska operationer och definition av nya ord; eller definierade i "standardbiblioteket" Fift.fif, som ligger i mappen crypto/fift i kÀllorna).

Ett enkelt exempel pÄ ett program i Fift:

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

I den första raden definieras ett nytt ord setxy (observera prefixet {, som skapar ett block till den avslutande } och prefixet :, som faktiskt definierar ordet). setxy tar ett tal frÄn toppen av stacken, definierar (eller omdefinierar) det som en global konstant x, och kvadraten av detta tal som en konstant y (med tanke pÄ att vÀrdena för konstanter kan omdefinieras, skulle jag hellre kalla dem variabler, men jag följer namngivningen i sprÄket).

I de följande tvÄ raderna placeras ett tal pÄ stacken, anropas setxy, sedan visas konstanternas vÀrden x, y (för att skriva ut anvÀnds ordet .), bÄda konstanterna placeras pÄ stacken, summeras och resultatet skrivs ocksÄ ut. Som resultat kommer vi att se:

3 9 12 ok
7 49 56 ok

(Raden "ok" skrivs ut av tolken nÀr den Àr klar med att bearbeta den aktuella raden i det interaktiva inmatningslÀget)

HÀr Àr ett fullt exempel pÄ kod:

"Asm.fif" inkludera

-1 konstant wc  \\ skapa en plånbok i workchain -1 (masterchain)

\\ Skapa ny enkel plånbok
&lt;{  SETCP0 DUP IFNOTRET INC 32 THROWIF  \\ återvänd om recv_internal, misslyckas om inte recv_external
    512 INT LDSLICEX DUP 32 PLDU   \\ signera cs cnt
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  \\ signera cs cnt cnt&#039; pubk
    s1 s2 XCPU            \\ signera cs cnt pubk cnt&#039; cnt
    EQUAL 33 THROWIFNOT   \\ ( seqno mismatch? )
    s2 PUSH HASHSU        \\ signera cs cnt pubk hash
    s0 s4 s4 XC2PU        \\ pubk cs cnt hash sign pubk
    CHKSIGNU              \\ pubk cs cnt ?
    34 THROWIFNOT         \\ signatur 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
}&gt;c
\\ kod
<b 0 32 u, newkeypair swap dup constant wallet_pk "new-wallet.pk" b>fil
   B, 
b&gt; \\ data
\\ inga bibliotek
<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>$ typ cr
256 u&gt;B "new-wallet.addr" B&gt;fil
<b 0 32 u, b>
dup ."signera meddelande: " <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 ."Extern meddelande för initiering är " <s csr. cr
2 boc+>B dup Bx. cr
"new-wallet-query.boc" tuck B&gt;fil
."(Sparad i fil " typ .")" cr

Denna skrĂ€mmande fil Ă€r avsedd för att skapa ett smart kontrakt – det kommer att placeras i filen new-wallet-query.boc Efter utförandet. Observera att en annan, assembleringssprĂ„k anvĂ€nds för TON Virtual Machine (jag kommer inte att gĂ„ in pĂ„ det hĂ€r i detalj), vars instruktioner kommer att placeras i blockkedjan.

SĂ„ledes Ă€r assemblersprĂ„ket för TVM skrivet i Fift – kĂ€llkoden till denna assembler finns i filen crypto/fift/Asm.fif och kopplas in i början av ovanstĂ„ende kodstycke.

Vad jag kan sĂ€ga, verkar det som att Nikolai Dorov helt enkelt Ă€lskar att skapa nya programmeringssprĂ„k 🙂

Skapandet av smarta kontrakt och interaktion med TON

SÄ, lÄt oss anta att vi har samlat TON-klienten och Fift-tolken, som beskrivits ovan, och Àr bekanta med sprÄket. Hur skapar man nu ett smart kontrakt? Detta beskrivs i filen HOWTO, som Àr bifogad kÀllkoden.

Konton i TON

Som jag beskrev i översynen av TON, innehĂ„ller detta nĂ€tverk mer Ă€n en blockkedja – det finns en gemensam, sĂ„ kallad "masterchain", samt ett godtyckligt antal ytterligare "workchains", identifierade med ett 32-bitarsnummer. Masterchain har identifieraren -1, utöver detta kan Ă€ven en "grundlĂ€ggande" workchain med identifieraren 0 anvĂ€ndas. Varje workchain kan ha sin egen konfiguration. Inom varje workchain delas det internt upp i shardchains, men det Ă€r redan en implementeringsdetalj som man inte nödvĂ€ndigtvis behöver hĂ„lla i Ă„tanke.

Inom en workchain lagras mÄnga konton, som har sina egna identifierare account_id. För masterchain och den nollsta workchainen har de en lÀngd pÄ 256 bitar. SÄledes skrivs identifieraren för kontot, till exempel, sÄ hÀr:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Detta Àr det "rÄa" formatet: först identifieraren för workchain, sedan ett kolon, och identifieraren för kontot i hexadecimal form.

Dessutom finns det ett förkortat format – numret pĂ„ workchainen och adressen till kontot kodas i binĂ€r form, en kontrollsumma lĂ€ggs till och allt detta kodas i Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Med denna formatkunskap kan vi begÀra det aktuella tillstÄndet för nÄgot konto via testklienten med kommandot

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Vi fÄr ungefÀr ett sÄdant svar:

[ 3][t 2][1558746708.815218925][test-lite-client.cpp:631][!testnode] begÀr konto status för -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D
[ 3][t 2][1558746708.858564138][test-lite-client.cpp:652][!testnode] fick konto status för -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D med avseende pÄ block (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F och (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F
konto status Àr (konto
  addr:(addr_std
    anycast:inga 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:inga)
  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:inga
        special:inga
        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}

Vi ser strukturen som lagras i DHT för den angivna arbetskedjan. Till exempel, i fĂ€ltet storage.balance finns det nuvarande saldot för kontot, i storage.state.code — koden för smartkontraktet, och i storage.state.data — dess aktuella data. Observera att databaslagringen i TON — Cell, celler — Ă€r hierarkisk, dĂ€r varje cell kan ha bĂ„de egna data och underliggande celler. Detta visas med indrag i de sista raderna.

Komplettering av smartkontraktet

Nu ska vi skapa en sĂ„dan struktur (den kallas BOC — bag of cells) med hjĂ€lp av sprĂ„ket Fift. Tack och lov behöver vi inte skriva smartkontraktet sjĂ€lva — i mappen crypto/block frĂ„n arkivet med kĂ€llkod finns det en fil new-wallet.fif, som hjĂ€lper oss att skapa en ny plĂ„nbok. Vi kopierar den till mappen med den samlade klienten (~\/liteclient-build, om du följde instruktionerna ovan). InnehĂ„llet i den har jag tidigare angett som ett exempel pĂ„ kod i Fift.

Vi kör denna fil pÄ följande sÀtt:

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

HĂ€r <source-directory> mĂ„ste ersĂ€ttas med sökvĂ€gen till de uppackade kĂ€llorna (tyvĂ€rr kan symbolen „~“ inte anvĂ€ndas hĂ€r, en fullstĂ€ndig sökvĂ€g behövs). IstĂ€llet för att anvĂ€nda nyckeln -I kan du definiera en miljövariabel FIFTPATH och placera denna sökvĂ€g i den.

Eftersom Fift startade vi med filnamnet new-wallet.fif, kommer det att köras och avslutas. Om filnamnet hoppar över kan du leka med tolkaren i interaktivt lÀge.

I konsolen efter körning bör det visas nÄgot liknande:

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

ny plÄnboksadress = -1 : 4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 
0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ
signeringsmeddelande: x{00000000}

Extern meddelande för initialisering Àr x{89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

B5EE9C724104030100000000D60002CF89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001001020084FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED5400480000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B6290698B
(Sparat till filen new-wallet-query.boc)

Detta innebĂ€r att plĂ„nboken med identifieraren -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (eller, vilket Ă€r detsamma, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) har skapats framgĂ„ngsrikt. Den tillhörande koden kommer att finnas i filen new-wallet-query.boc, dess adress — i new-wallet.addr, och den privata nyckeln — i new-wallet.pk (var försiktig — att köra skriptet igen kommer att skriva över dessa filer).

SjÀlvklart vet TON-nÀtverket Ànnu inte om denna plÄnbok, den lagras bara i dessa filer. Nu mÄste den laddas upp till nÀtverket. Problemet Àr att för att skapa ett smart kontrakt mÄste en avgift betalas, och saldot pÄ ditt konto Àr för nÀrvarande noll.

I driftlÀge kan detta problem lösas genom att köpa gram pÄ en börs (eller överföra frÄn en annan plÄnbok). Just nu finns det en speciell smart kontrakt i testlÀge dÀr man kan be om upp till 20 gram helt gratis.

Att skapa en begÀran till ett annat smart kontrakt

BegÀran till smart kontraktet som ger bort gram sÄ hÀr gör vi. I samma mapp crypto/block hittar vi filen 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 ."omslutande meddelande: " <s csr. cr
<b b{1000100} s, wc 8 i, wallet_addr 256 u, 0 gram, b{00} s,
 swap <s b>
dup ."resulterande externa meddelande: " <s csr. cr
2 boc+>B dup Bx. cr
"plånbok-fråga.boc" B&gt;fil

Den sparar vi ocksĂ„ i mappen med den sammanstĂ€llda klienten, men vi Ă€ndrar den femte raden — innan raden "constant dest_addr". Vi byter ut den mot adressen till den plĂ„nbok som du skapade tidigare (fullstĂ€ndig, icke-förkortad). Du behöver inte skriva "-1:" i början, istĂ€llet sĂ€tter du "0x" i början.

Du kan ocksĂ„ Ă€ndra raden 6.666 Gram* / konstant mĂ€ngd — det Ă€r mĂ€ngden i gram som du begĂ€r (högst 20). Även om du anger ett heltal, lĂ€mna decimalpunkten.

Till sist behöver vi justera raden 0x00000011 konstant seqno. Det första numret hÀr Àr det aktuella sekvensnumret som lagras pÄ kontot som utfÀrdar gram. Var fÄr man det ifrÄn? Som nÀmnts ovan, starta klienten och utför:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

I slutet av smartkontraktets data kommer det att finnas

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

Numret 0000000D (du kommer att ha ett större) Àr sekvensnumret som mÄste sÀttas in i testgiver.fif.

Det Ă€r allt, spara filen och kör (. /crypto/fift testgiver.fif). UtgĂ„ngen kommer att ge filen wallet-query.boc. Detta Ă€r det genererade problemet till ett annat smartkontrakt — begĂ€ran "översĂ€tt sĂ„ mĂ„nga gram till ett visst konto".

Med hjÀlp av klienten laddar vi upp det till nÀtverket:

> sendfile wallet-query.boc
[ 1][t 1][1558747399.456575155][test-lite-client.cpp:577][!testnode]    skickar förfrÄgan frÄn filen wallet-query.boc
[ 3][t 2][1558747399.500236034][test-lite-client.cpp:587][!query]   extern meddelandestatus Àr 1

Om vi nu anropar last, och sedan begĂ€r statusen för kontot som vi bad om gram, bör vi se att dess sekvensnummer har ökat med ett — det betyder att det har skickat pengar till vĂ„rt konto.

Det sista steget - vi laddar upp koden för vĂ„r plĂ„nbok (saldo Ă€r redan pĂ„fyllt, men utan smartkontraktkod kan vi inte hantera den). Utför sendfile new-wallet-query.boc — och allt klart, du har en egen plĂ„nbok pĂ„ TON-nĂ€tverket (Ă€ven om det bara Ă€r en testversion).

Skapa utgÄende transaktioner

För att överföra pengar frÄn saldot pÄ det skapade kontot finns det en fil crypto/block/wallet.fif, som ocksÄ mÄste placeras i mappen med den ihopsatta klienten.

PĂ„ samma sĂ€tt som de tidigare stegen mĂ„ste du justera summan du överför, mottagarens adress (dest_addr) och sekvensnumret för din plĂ„nbok (det Ă€r 1 efter plĂ„nbokens initiering och ökar med 1 efter varje utgĂ„ende transaktion - du kan se det genom att begĂ€ra statusen för ditt konto). För tester kan du anvĂ€nda, till exempel, min plĂ„nbok — 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Vid körning (. /crypto/fift wallet.fif) kommer skriptet att ta adressen för din plÄnbok (dÀrifrÄn du överför) och dess privata nyckel frÄn filerna new-wallet.addr och new-wallet.pk, och det resulterande meddelandet kommer att spelas in i new-wallet-query.boc.

Som tidigare, för att genomföra transaktionen direkt, anropar vi sendfile new-wallet-query.boc i klienten. Efter detta fÄr vi inte glömma att uppdatera blockkedjans tillstÄnd (last) och kontrollerar att balansen och seqno för vÄr plÄnbok har Àndrats (getaccount).

Testklient för TON (Telegram Open Network) och det nya sprÄket Fift för smarta kontrakt

Det Àr allt, nu kan vi skapa smarta kontrakt i TON och skicka förfrÄgningar till dem. Som vi ser har den nuvarande funktionaliteten redan tillrÀckligt med kapacitet för att till exempel skapa en mer anvÀndarvÀnlig plÄnbok med grafiskt grÀnssnitt (Àven om det förvÀntas bli tillgÀngligt som en del av meddelandeappen).

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Är du intresserad av att fortsĂ€tta artiklarna om analysen av TON, TVM, Fift?

  • Ja, jag vĂ€ntar pĂ„ att artikelserien med en allmĂ€n översikt av TON ska avslutas.

  • Ja, jag skulle vilja lĂ€sa mer om sprĂ„ket Fift.

  • Ja, jag vill veta mer om TON Virtual Machine och assemblern för den.

  • Nej, jag Ă€r inte intresserad av nĂ„got av detta.

39 anvÀndare har röstat. 12 anvÀndare avstod.

Vad tycker du om Telegrams planer pÄ att lansera TON?

  • Jag har stora förhoppningar pĂ„ detta projekt.

  • Jag följer bara intresserad dess utveckling.

  • Jag Ă€r skeptisk, jag tvivlar pĂ„ dess framgĂ„ng.

  • Jag tenderar att betrakta denna initiativ som misslyckad och onödig för allmĂ€nheten.

47 anvÀndare har röstat. 12 anvÀndare har avstÄtt.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster