Test Client TON (Telegram Open Network) an nei Fift Sprooch fir Smart Kontrakter

Viru méi wéi engem Joer gouf et bekannt iwwer d'Pläng vum Telegram Messenger fir säin eegent dezentraliséiertem Netz ze verëffentlechen Open Network Telegram. Dunn ass e voluminösen techneschen Dokument verfügbar, dat angeblech vum Nikolai Durov geschriwwe gouf an d'Struktur vum zukünftegen Netzwierk beschriwwen huet. Fir déi, déi et verpasst hunn, ech recommandéieren Iech meng Erzielung vun dësem Dokument ze liesen (Deel vun 1, Deel vun 2; den drëtten Deel, leider, sammelt nach ëmmer Stëbs am Entworf).

Zënterhier gouf et keng bedeitend Neiegkeeten iwwer de Status vun der TON Entwécklung bis virun e puer Deeg (an engem vun inoffiziell Channels) de Link op d'Säit ass net erschéngt https://test.ton.org/download.html, wou sinn:
ton-test-liteclient-full.tar.xz - Quelle vun engem Liicht Client fir TON Test Reseau;
ton-lite-client-test1.config.json - Konfiguratiounsdatei fir mat dem Testnetz ze verbannen;
README - Informatioun iwwer de Bau an de Start vum Client;
WÉI - Schrëtt-fir-Schrëtt Instruktioune fir e Smart Kontrakt mat engem Client ze kreéieren;
tonn.pdf - aktualiséiert Dokument (datéiert 2. Mäerz 2019) mat engem techneschen Iwwerbléck vum TON Netz;
tvm.pdf - technesch Beschreiwung vun TVM (TON Virtuell Maschinn, TON virtuell Maschinn);
tblkch.pdf - technesch Beschreiwung vun der TON Blockchain;
fifthbase.pdf - Beschreiwung vun der neier Fift Sprooch, entwéckelt fir Smart Kontrakter am TON ze kreéieren.

Ech widderhuelen, et gouf keng offiziell Bestätegung vun der Säit an all dësen Dokumenter vum Telegram, awer de Volume vun dëse Materialien mécht se ganz plausibel. Start de publizéierten Client op eegene Risiko.

Bauen engem Test Client

Als éischt, loosst eis probéieren en Test Client ze bauen an ze lafen - glécklecherweis, README beschreift dësen einfache Prozess am Detail. Ech maachen dat mat macOS 10.14.5 als Beispill; Ech kann net fir den Erfolleg vun der Build op anere Systemer bestätegen.

  1. Eroflueden an auspacken Quellenarchiv. Et ass wichteg déi lescht Versioun erofzelueden well Réckkompatibilitéit op dëser Etapp net garantéiert ass.

  2. Vergewëssert Iech datt déi lescht Versioune vu Make, cmake (Versioun 3.0.2 oder méi héich), OpenSSL (inklusiv C Header Dateien), g++ oder clang um System installéiert sinn. Ech hu näischt ze installéieren, alles koum direkt zesummen.

  3. Loosst eis unhuelen datt d'Quellen an en Dossier ausgepackt sinn ~/lite-client. Separat dovun, erstellt en eidelen Dossier fir de versammelt Projet (zum Beispill, ~/liteclient-build), an dovunner (cd ~/liteclient-build) rufft d'Befehle un:

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

    Test Client TON (Telegram Open Network) an nei Fift Sprooch fir Smart Kontrakter

    Fir de Fift Sproochen Dolmetscher fir Smart Kontrakter ze bauen (méi doriwwer ënnen), ruffe mir och

    cmake --build . --target fift

  4. Download déi aktuell Konfiguratiounsdatei fir mat dem Testnetz ze verbannen an en an den Dossier mat dem gesammeltem Client ze setzen.

  5. Gemaach, Dir kënnt de Client starten:

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

Wann alles richteg gemaach ass, sollt Dir eppes wéi dat gesinn:

Test Client TON (Telegram Open Network) an nei Fift Sprooch fir Smart Kontrakter

Wéi mir kënne gesinn, sinn et e puer verfügbar Kommandoen:
help - weist dës Lëscht vun de Kommandoen;
quit - raus goen;
time - weisen déi aktuell Zäit um Server;
status - d'Verbindung an d'lokal Datebankstatus weisen;
last - Update den Zoustand vun der Blockchain (Luet de leschte Block erof). Et ass wichteg dëst Kommando virun all Ufro ze lafen fir sécher ze sinn datt Dir den aktuellen Zoustand vum Netz gesitt.
sendfile <filename> - lued eng lokal Datei op den TON Netzwierk erop. Dëst ass wéi d'Interaktioun mam Netz geschitt - dorënner, zum Beispill, d'Schafung vun neie Smart Kontrakter an Ufroe fir Fongen tëscht Konten ze transferéieren;
getaccount <address> - weisen den aktuellen (zu der Zäit wou de Kommando ausgefouert gouf) last) de Status vum Kont mat der spezifizéierter Adress;
privkey <filename> - lued de private Schlëssel vun enger lokaler Datei.

Wann Dir, wann Dir de Client start, en Dossier op en mat der Optioun transferéiert -D, da wäert hien de leschte Block vun der Masterchain derbäi addéieren:

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

Elo kënne mir op méi interessant Saachen réckelen - d'Fift Sprooch léieren, probéieren e Smart Kontrakt ze kompiléieren (zum Beispill, en Test Portemonnaie erstellen), lued et an d'Netz an probéiert Fongen tëscht Konten ze transferéieren.

Sprooch Fift

Aus dem Dokument fifthbase.pdf Dir kënnt erausfannen datt d'Telegram Team eng nei Stacksprooch erstallt huet fir Smart Kontrakter ze kreéieren Fift (anscheinend aus der Ziffer fënneften, ähnlech wéi Forth, eng Sprooch mat där Fifth vill gemeinsam huet).

D'Dokument ass zimlech voluminös, 87 Säiten, an ech wäert säin Inhalt am Detail am Kader vun dësem Artikel net erzielen (op d'mannst well ech et selwer net fäerdeg gelies hunn :). Ech konzentréieren op d'Haaptpunkte a ginn e puer Code Beispiller an dëser Sprooch.

Op Basisniveau ass dem Fift seng Syntax ganz einfach: säi Code besteet aus Wierder, meeschtens getrennt duerch Plazen oder Zeilenbriechungen (Spezialfall: e puer Wierder brauche kee Separator no sech). All d 'Wuert ass eng case-sensibel Sequenz vun Zeechen, déi zu engem bestëmmte entsprécht Determinatioun vu (ongeféier, wat den Dolmetscher maache soll wann en dëst Wuert begéint). Wann et keng Definitioun vun engem Wuert gëtt, probéiert den Dolmetscher et als Zuel ze analyséieren an op de Stack ze setzen. Iwwregens sinn d'Zuelen hei - op eemol - 257-Bit ganz Zuelen, an et gi keng Fraktiounen - méi präzis, si ginn direkt an e Paar ganz Zuelen, déi den Teller an den Nenner vun enger rationaler Fraktioun bilden.

Wierder tendéieren mat Wäerter uewen um Stack ze interagéieren. Eng separat Zort vu Wierder - Präfix - benotzt net de Stack, awer déi spéider Zeechen aus der Quelldatei. Zum Beispill, dëst ass wéi String literals ëmgesat ginn - den Zitat Charakter (") ass e Präfix Wuert dat no der nächster (ofschloss) Zitat sicht, an de String tëscht hinnen op de Stack dréckt. One-Liner behuelen sech déiselwecht Manéier (//) a multiline (/*) Kommentaren.

Dëst ass wou bal déi ganz intern Struktur vun der Sprooch endet. Alles anescht (Kontrollkonstruktioun abegraff) gëtt als Wierder definéiert (entweder intern, wéi arithmetesch Operatiounen an d'Definitioun vun neie Wierder; oder an der "Standardbibliothéik" definéiert Fift.fif, déi am Dossier ass crypto/fift an de Quellen).

En einfache Beispillprogramm am Fift:

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

Déi éischt Zeil definéiert en neit Wuert setxy (notéiert de Präfix {, deen e Block virun der Ofschloss erstellt } an Präfix :, wat eigentlech d'Wuert definéiert). setxy hëlt eng Zuel vun der Spëtzt vum Stack, definéiert (oder redefinéiert) et als global konstant x, an de Quadrat vun dëser Zuel als Konstant y (Gitt datt d'Wäerter vun de Konstanten nei definéiert kënne ginn, géif ech se éischter Variablen nennen, awer ech verfollegen d'Nennungskonventioun an der Sprooch).

Déi nächst zwou Linnen eng Nummer op de Stack an ruffen setxy, da ginn d'Wäerter vun de Konstanten ugewisen x, y (d'Wuert gëtt fir Ausgang benotzt .), béid Konstanten ginn op de Stack gesat, summéiert, an d'Resultat gëtt och gedréckt. Als Resultat wäerte mir gesinn:

3 9 12 ok
7 49 56 ok

(D'Linn "ok" gëtt vum Dolmetscher gedréckt wann et fäerdeg ass déi aktuell Linn am interaktiven Input Modus ze veraarbechten)

Gutt, e ganzt Code Beispill:

"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

Dës grujeleg sicht Datei ass fir e Smart Kontrakt ze kreéieren - et gëtt an enger Datei gesat new-wallet-query.boc no Ausféierung. Notéiert w.e.g. datt eng aner Versammlungssprooch hei fir TON Virtual Machine benotzt gëtt (ech wäert et net am Detail ophalen), d'Instruktioune vun deenen op der Blockchain gesat ginn.

Also ass den Assembler fir TVM a Fift geschriwwen - d'Quelle vun dësem Assembler sinn an der Datei crypto/fift/Asm.fif a sinn um Ufank vum uewe genannte Code verbonnen.

Wat kann ech soen, anscheinend huet den Nikolai Durov just gär nei Programméierungssproochen erstallt :)

E Smart Kontrakt erstellen an mat TON interagéieren

Also, loosst eis unhuelen datt mir den TON Client an de Fift Dolmetscher versammelt hunn wéi uewen beschriwwen a mat der Sprooch vertraut ginn. Wéi kreéiert ech elo e Smart Kontrakt? Dëst ass am Dossier beschriwwen WÉI, an de Quellen verbonnen.

Konten an TON

Wéi ech beschriwwen an TON iwwerpréiwen, Dëst Netz enthält méi wéi ee Blockchain - et gëtt eng gemeinsam, de sougenannte. "Meeschtesch Kette", wéi och eng arbiträr Zuel vun zousätzlech "Aarbecht Ketten", identifizéiert vun enger 32-bëssen Zuel. D'Masterchain huet en Identifizéierer vun -1; Zousätzlech kann och eng "Basis" Workchain mat engem Identifizéierer vun 0 benotzt ginn. All Workchain kann seng eege Konfiguratioun hunn. Intern ass all Workchain a Shardchains opgedeelt, awer dëst ass en Implementatiounsdetail deen net am Kapp behalen muss.

Bannent enger Workchain gi vill Konte gespäichert déi hiren eegene account_id Identifizéierer hunn. Fir d'Meeschtesch Kette an null Aarbecht Kette si 256 Stécker laang. Also gëtt de Kontidentifizéierer zum Beispill esou geschriwwen:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Dëst ass de "raw" Format: éischt d'Workchain ID, dann e Colon, an d'Konto ID an hexadezimaler Notatioun.

Zousätzlech gëtt et e verkierzte Format - d'Workchain Nummer an d'Kontoadress ginn a binärer Form kodéiert, e Checksum gëtt derbäigesat, an all dat ass am Base64 kodéiert:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Wann Dir dëst Rekordformat kennt, kënne mir den aktuellen Zoustand vun engem Kont duerch en Testclient mat dem Kommando ufroen

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Mir kréien esou eppes:

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

Mir gesinn d'Struktur déi am DHT vun der spezifizéierter Workchain gespäichert ass. Zum Beispill, am Feld storage.balance ass den aktuelle Kont Gläichgewiicht, an storage.state.code - Smart Kontrakt Code, an an storage.state.data - seng aktuell Donnéeën. Notéiert w.e.g. datt d'TON Datenspeicherung - Zell, Zellen - Bamähnlech ass, all Zell kann souwuel seng eegen Daten wéi och Kannerzellen hunn. Dëst gëtt als Indentatioun an de leschte Zeilen ugewisen.

Bauen e Smart Kontrakt

Loosst eis elo selwer esou eng Struktur erstellen (et gëtt BOC genannt - Sak vun Zellen) mat der Fift Sprooch. Glécklecherweis musst Dir net selwer e Smart Kontrakt schreiwen - am Dossier crypto/block et gëtt e Fichier aus dem Quellarchiv new-wallet.fif, déi hëlleft eis eng nei Portemonnaie schafen. Loosst eis et an den Dossier kopéieren mam gesammelten Client (~/liteclient-build, wann Dir d'Instruktioune hei uewen gefollegt hutt). Ech hunn säin Inhalt uewen als e Beispill vu Code op Fift zitéiert.

Fëllt dës Datei wéi follegt aus:

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

et ass <source-directory> muss duerch de Wee op déi ausgepackt Quellen ersat ginn (d'Symbol "~" kann leider net hei benotzt ginn, de komplette Wee ass néideg). Amplaz e Schlëssel ze benotzen -I Dir kënnt eng Ëmfeld Variabel definéieren FIFTPATH a setzt dëse Wee an et.

Zënter datt mir Fift mam Dateinumm lancéiert hunn new-wallet.fif, et wäert et ausféieren an erausgoen. Wann Dir de Dateinumm ausléisst, kënnt Dir interaktiv mam Dolmetscher spillen.

No der Ausféierung soll esou eppes an der Konsole ugewise ginn:

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)

Dat heescht, datt de Portmonni mat der ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (oder, wat ass datselwecht, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) erfollegräich erstallt. De entspriechende Code wäert an der Datei sinn new-wallet-query.boc, seng Adress ass an new-wallet.addr, an de private Schlëssel ass an new-wallet.pk (pass op - d'Skript nach eng Kéier lafen wäert dës Dateien iwwerschreiwe).

Natierlech weess de TON Netz nach net iwwer dëse Portemonnaie, et gëtt nëmmen a Form vun dësen Dateien gespäichert. Elo muss et an d'Netz eropgeluede ginn. Wéi och ëmmer, de Problem ass datt fir e Smart Kontrakt ze kreéieren musst Dir eng Kommissioun bezuelen, an Äre Kontbalance ass nach ëmmer null.

Am Aarbechtsmodus gëtt dëse Problem geléist andeems Dir Gramm um Austausch kaaft (oder vun engem anere Portemonnaie transferéiert). Gutt, am aktuellen Testmodus ass e spezielle Smart Kontrakt erstallt, aus deem Dir bis zu 20 Gramm just esou froe kënnt.

Generéiere vun enger Ufro un engem Smart Kontrakt vun engem aneren

Mir maachen eng Ufro un engem Smart Kontrakt datt Gramm lénks a riets verdeelt esou. Am selwechten Dossier crypto/block fannen Fichier 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

Mir späicheren et och am Dossier mam montéierte Client, awer mir korrigéieren déi fënneft Linn - virun der Linn "constant dest_addr". Loosst eis et mat der Adress vum Portemonnaie ersetzen, deen Dir virdru erstallt hutt (voll, net verkierzt). Et ass net néideg "-1:" am Ufank ze schreiwen, amplaz "0x" am Ufank ze setzen.

Dir kënnt och d'Linn änneren 6.666 Gram*/ constant amount - dëst ass de Betrag a Gramm deen Dir ufrot (net méi wéi 20). Och wann Dir eng ganz Zuel uginn, loosst den Dezimalpunkt.

Endlech musst Dir d'Linn korrigéieren 0x00000011 constant seqno. Déi éischt Nummer hei ass déi aktuell Sequenznummer, déi am Kont erausginn Gramm gespäichert ass. Wou kann ech et aus? Wéi uewen uginn, start de Client a lafen:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Um Enn wäerten déi intelligent Kontraktdaten enthalen

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

D'Zuel 0000000D (Är wäert méi grouss sinn) ass d'Sequenznummer déi muss ersat ginn testgiver.fif.

Dat ass et, späichert d'Datei a lafen (./crypto/fift testgiver.fif). D'Ausgab wäert eng Datei sinn wallet-query.boc. Dëst ass wat geformt gëtt Message zu engem aneren säi Smart Kontrakt - eng Ufro "Transfert sou vill Gramm op esou an esou e Kont."

Mat dem Client lued mir et an d'Netz erop:

> 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

Wann Dir elo rufft last, an dann nach eng Kéier de Status vum Kont ufroen, aus deem mir fir Gramm gefrot hunn, da sollte mir gesinn datt seng Sequenznummer ëm ee eropgaang ass - dat heescht datt et Suen op eise Kont geschéckt huet.

De leschte Schrëtt bleift - de Code vun eisem Portemonnaie eroflueden (säi Gläichgewiicht ass scho ersat ginn, awer ouni de Smart Kontrakt Code kënne mir et net verwalten). Mir féieren aus sendfile new-wallet-query.boc - an dass d'et, Dir hutt Är eege Portemonnaie am TON Reseau (och wann et nëmmen en Test fir de Moment ass).

Schafen erausginn Transaktiounen

Fir Suen aus dem Gläichgewiicht vum erstallte Kont ze transferéieren, gëtt et e Fichier crypto/block/wallet.fif, déi och an den Dossier mat dem zesummegesate Client plazéiert muss ginn.

Ähnlech wéi déi virdru Schrëtt, musst Dir de Betrag unzepassen, deen Dir transferéiert, d'Adress vum Empfänger (dest_addr), an de Seqno vun Ärem Portemonnaie (et ass gläich wéi 1 no der Initialiséierung vum Portemonnaie an erhéicht ëm 1 no all erausginn Transaktioun - Dir kënnt kuckt et andeems Dir de Status vun Ärem Kont ufrot). Fir Tester kënnt Dir zum Beispill mäi Portemonnaie benotzen - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Beim Startup (./crypto/fift wallet.fif) de Skript hëlt d'Adress vun Ärem Portemonnaie (vu wou Dir transferéiert) a säi private Schlëssel aus de Fichieren new-wallet.addr и new-wallet.pk, an de kritt Message gëtt geschriwwe ginn new-wallet-query.boc.

Wéi virdrun, fir direkt d'Transaktioun ze maachen, rufft sendfile new-wallet-query.boc am Client. Duerno vergiesst net den Zoustand vun der Blockchain ze aktualiséieren (last) a kontrolléiert datt d'Gläichgewiicht an de Seqno vun eisem Portemonnaie geännert hunn (getaccount <account_id>).

Test Client TON (Telegram Open Network) an nei Fift Sprooch fir Smart Kontrakter

Dat ass alles, elo kënne mir Smart Kontrakter am TON erstellen an Ufroe un hinnen schécken. Wéi Dir gesitt, ass déi aktuell Funktionalitéit scho genuch fir zum Beispill e méi frëndleche Portemonnaie mat enger grafescher Interface ze maachen (awer et gëtt erwaart datt et schonn als Deel vum Messenger verfügbar ass).

Nëmme registréiert Benotzer kënnen un der Ëmfro deelhuelen. Umellen, wann ech glift.

Sidd Dir interesséiert d'Artikelen weider mat Analyse vun TON, TVM, Fift?

  • Jo, ech waarden op d'Réalisatioun vun der Serie vun Artikelen mat engem allgemengen Iwwerbléck vun TON

  • Jo, et ass interessant méi iwwer d'Fift Sprooch ze liesen

  • Jo, ech wëll méi iwwer TON Virtual Machine an den Assembler dofir léieren

  • Nee, näischt vun dësem ass interessant

39 Benotzer hunn gestëmmt. 12 Benotzer hu sech enthalen.

Wat mengt Dir iwwer Telegram Pläng fir TON ze lancéieren?

  • Ech hunn héich Hoffnungen fir dëse Projet

  • Ech verfollegen seng Entwécklung just mat Interessi.

  • Ech sinn skeptesch an Zweiwel säin Erfolleg.

  • Ech sinn geneigt dës Initiativ als Echec an onnéideg fir déi breet Mass ze betruechten

47 Benotzer hunn gestëmmt. 12 Benotzer hu sech enthalen.

Source: will.com

Setzt e Commentaire