TON (Telegram Open Network) teszt kliens és az új Fift nyelv a smart szerződésekhez

Több mint egy éve vált ismertté, hogy a Telegram messenger saját decentralizált hálózatot kíván indítani. Telegram Open Network. Ekkor került nyilvánosságra egy részletes műszaki dokumentum, amely feltehetőleg Durov Nikolaj által készült, és leírta a jövőbeli hálózat szerkezetét. Aki lemaradt, ajánlom, hogy nézze meg az erről készült összefoglalómat (1. rész, 2. rész; a harmadik rész sajnos még mindig tervezetben pihen).

Azóta nem volt jelentős hír a TON fejlesztésének státuszáról, amíg pár nappal ezelőtt (egyik nem hivatalos csatornán) megjelent egy hivatkozás egy oldalra https://test.ton.org/download.html, ahol a következők találhatóak:
◦ ton-test-liteclient-full.tar.xz — a TON teszthálózatához tartozó könnyűkliense forráskódja;
◦ ton-lite-client-test1.config.json — konfigurációs fájl a teszthálózatra való csatlakozáshoz;
◦ README — információ a kliens összeállításáról és futtatásáról;
◦ HOGYAN KELL — lépésről lépésre útmutató okos szerződés létrehozásához a klienssel;
◦ ton.pdf — frissített dokumentum (2019. március 2-i) a TON hálózat technikai áttekintésével;
◦ tvm.pdf — a TVM (TON Virtual Machine, TON virtuális gép) műszaki leírása;
◦ tblkch.pdf — a TON blokklánc műszaki leírása;
◦ fiftbase.pdf — a Fift új nyelv leírása, amely a TON okos szerződéseinek létrehozására szolgál.

Ismétlem, a Telegram részéről nem volt hivatalos megerősítés az oldalról és az összes dokumentumról, de a anyagok terjedelme elég hihetővé teszi azokat. A közzétett kliens futtatása saját felelősségedre történik. saját felelősségedre.

Teszt kliens összeállítása

Először próbáljuk meg összeállítani és elindítani a teszt klienst – szerencsére, README részletesen leírja ezt az egyszerű folyamatot. MacOS 10.14.5 példáján fogom ezt csinálni, a más rendszerekre való összeállítás sikerességéért nem tudok garanciát vállalni.

  1. Töltsd le és csomagold ki a forráskódokkal teli archívumot.Fontos, hogy az utolsó verziót töltsd le, mivel a visszafelé kompatibilitás ezen a ponton nem garantált.

  2. Győződj meg róla, hogy a rendszereden a legfrissebb verziók vannak telepítve: make, cmake (3.0.2-es vagy újabb verzió), OpenSSL (a C fejlécekkel együtt), g++ vagy clang. Nekem nem kellett semmit telepítenem, minden azonnal összeállt.

  3. Tegyük fel, hogy a forráskódok kicsomagolva a következő mappába mentek: ~/lite-client. Külön mappát hozunk létre a beépített projekthez (például, ~/liteclient-build), és abból (cd ~/liteclient-build) hívjuk meg a parancsokat:

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

    TON (Telegram Open Network) teszt kliens és az új Fift nyelv a smart szerződésekhez

    Az okos szerződésekhez szükséges Fift nyelv értelmezőjének összeállításához (erről lentebb) szintén hívjuk meg

    cmake --build . --target fift

  4. Letöltjük a legfrissebbet konfigurációs fájl , hogy csatlakozzunk a teszthálózathoz, és elhelyezzük azt a kliens összegyűjtött mappájában.

  5. Kész, elindíthatjuk a klienst:

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

Ha mindent helyesen csináltál, akkor valami ilyesmit kell látnod:

TON (Telegram Open Network) teszt kliens és az új Fift nyelv a smart szerződésekhez

Látható, hogy rendelkezésre álló parancsokból nem sok van:
◦ help — megjeleníti ezt a parancslistát;
◦ quit — kilép;
◦ time — megmutatja a szerver aktuális időt;
◦ status — megmutatja a kapcsolat állapotát és a helyi adatbázist;
◦ last — frissíti a blokklánc állapotát (letölti az utolsó blokkot). Ezt a parancsot fontos végrehajtani bármilyen kérés előtt, hogy biztos lehess benne, hogy a hálózat aktuális állapotát látod.
◦ sendfile <filename> — feltölt egy helyi fájlt a TON hálózatba. Itt történik a hálózattal való interakció — például új okos szerződések létrehozása és forrástárgyak közötti tranzakciók kérdése;
◦ getaccount

— megmutatja a megadott címhez tartozó fiók aktuális (a parancs végrehajtásának időpontjában) állapotát; lastprivkey
◦ — letölti a titkos kulcsot egy helyi fájlból. <filename> Ha a kliens indításakor megadhatsz neki egy mappát az opcióval

, akkor az utolsó blokkot a masterchaine-be helyezi: -D, akkor az utolsó blokkot a masterchainbe helyezi:

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

Most áttérhetünk érdekesebb dolgokra — megismerni a Fift nyelvet, megpróbálni okos szerződést fordítani (például létrehozni egy teszt pénztárcát), feltölteni a hálózatra, és próbálkozni az eszközök közötti pénzküldéssel.

A Fift nyelv

A dokumentumból fiftbase.pdf kiderül, hogy a Telegram új, verem alapú nyelvet hozott létre okos szerződések készítésére Fift (valószínűleg a számnevéből, fifth,a Forth-ra hasonlítva — a Fift sok közös vonása van a Forth nyelvvel).

A dokumentum meglehetősen terjedelmes, 87 oldalas, és nem fogom részletesen elmondani a tartalmát ebben a cikkben (legalábbis, mert én sem fejeztem be az olvasását :). A főbb pontokra fogok koncentrálni, és bemutatok néhány kódrészletet ezen a nyelven.

Alapvető szinten a Fift szintaxisa meglehetősen egyszerű: a kód szavakból áll, amelyek általában szóközökkel vagy sortörésekkel vannak elválasztva (különleges eset: néhány szónak nincs szüksége elválasztóra). Bármely— a kis- és nagybetűktől függő karakterlánc, amelyhez egy adott a "replica" szót (például az snd_ctl_add_slave() függvény helyett az snd_ctl_add_replica() lett használva), ami tartozik. a meghatározás (egyszerűen szólva, amit az értelmezőnek tennie kell, amikor találkozik ezzel a szóval). Ha a szónak nincs meghatározása, az értelmező megpróbálja számmá értelmezni, és a veremre helyezni. Egyébként, a számok itt — meglepően — 257 bites egész számok, és tizedesek nincsenek — pontosabban, azonnal két egész számra változnak, alkotva a számlálót és a nevezőt a racionális törtnél.

A szavak általában a verem tetején lévő értékekkel lépnek kapcsolatba. A szavak külön típusa — prefix — nem a veremet használja, hanem a mögötte lévő karaktereket az eredeti fájlból. Például így valósulnak meg a sztring literálok — a 'idő' karakter (") egy prefix szó, ami megkeresi a következő (záró) idézőjelet, és a közöttük lévő szöveget a veremre helyezi. Hasonló módon viselkednek az egysoros (//) és többsoros (/*) kommentárok.

Ezzel szinte véget ér a nyelv belső struktúrája. Minden más (beleértve az irányító szerkezeteket) szavakként van definiálva (vagy belső, mint például a matematikai műveletek és új szavak definiálása; vagy a 'standard könyvtárban' definiált Fift.fif, amely a crypto/fift mappában található a forrásfájlok között).

Egy egyszerű példa egy Fift programra:

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

Az első sorban egy új szót definiálunk setxy (figyeljük meg a prefixet {, amely egy blokkot teremt a záró } és a prefixet :, amely valójában definiálja a szót). setxy veszi a verem tetején lévő számot, és globális konstansként x, a szám négyzete — mint konstans y (figyelembe véve, hogy a konstansok értéke felülírható, inkább változóknak nevezném őket, de követem a nyelv elnevezését).

A következő két sorban egy szám kerül a veremre, majd setxycall-ot hívunk, ezután pedig a konstansok értékeit jelenítjük meg x, y (a megjelenítéshez a 'print' szót használjuk), mindkét konstans felkerül a veremre, összeadódik, és az eredmény is megjelenik. Ennek eredményeként látni fogjuk: .3 9 12 ok 7 49 56 ok

(A 'ok' sort az értelmező jeleníti meg, amikor befejezi a jelenlegi sor feldolgozását interaktív bemeneti módban)

Nos, és a teljes példa kódra:

Ez a félelmetesnek tűnő fájl egy okos szerződés létrehozására szolgál — a 'new-wallet-query.boc' fájlba lesz helyezve.

"Asm.fif" include

-1 állandó wc  		// tárca létrehozása a workchain -1 (masterchain)

// Új egyszerű tárca létrehozása
&lt;{  SETCP0 DUP IFNOTRET INC 32 THROWIF  		// térj vissza, ha recv_internal, kudarc, ha recv_external
    512 INT LDSLICEX DUP 32 PLDU   		// aláírás cs cnt
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  		// aláírás cs cnt cnt&#039; pubk
    s1 s2 XCPU            		// aláírás cs cnt pubk cnt&#039; cnt
    EQUAL 33 THROWIFNOT   		// (seqno eltérés?)
    s2 PUSH HASHSU        		// aláírás cs cnt pubk hash
    s0 s4 s4 XC2PU        		// pubk cs cnt hash aláírás pubk
    CHKSIGNU              		// pubk cs cnt ?
    34 THROWIFNOT         		// aláírás eltérés
    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
// kód
<b 0 32 u, newkeypair swap dup constant wallet_pk "new-wallet.pk" b>fájl
   B, 
b&gt; 	// adatok
// nincsenek könyvtárak
<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ípus cr
256 u&gt;B "new-wallet.addr" B&gt;file
<b 0 32 u, b>
dup ."aláírási üzenet: " <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 ."Külső üzenet az inicializáláshoz: " <s csr. cr
2 boc+>B dup Bx. cr
"new-wallet-query.boc" tuck B&gt;file
."(Mentve a fájlba " type .")" cr

new-wallet-query.boc new-wallet-query.boc a végrehajtás után. Ne feledje, hogy itt egy másik, a TON Virtuális Géphez készült assembly nyelvet is használnak (erről nem fogok részletesen beszélni), melynek utasításai a blokkláncba kerülnek.

Így a TVM assembly a Fift nyelven íródott — ennek az assemblernek a forráskódja a következő fájlban található crypto/fift/Asm.fif és a fent említett kód rész elején csatlakozik.

Mit mondhatnék, Nikolaj Durov láthatóan szereti új programozási nyelvek létrehozását 🙂

Okos szerződés létrehozása és interakció a TON-nal

Tehát feltételezzük, hogy összegyűjtöttük a TON klienst és a Fift értelmezőt, ahogyan az fentebb le van írva, és megismertük a nyelvet. Most hogyan lehet okos szerződést létrehozni? Erről a csatolt fájlban található információ. HOGYAN KELL, amely a forráskódhoz van csatolva.

Fiókok a TON-ban

Ahogyan az a TON áttekintésben, ez a hálózat több blokkláncot is tartalmaz — van egy közös, úgynevezett 'mesterlánc', valamint tetszőleges számú további 'munkalánc', amelyeket 32 bites szám azonosít. A mesterlánc azonosítója -1, ennek mellett egy 'alap' munkalánc is használható, amelynek azonosítója 0. Minden munkaláncnak lehet saját konfigurációja. Belsőleg minden munkalánc shardláncokra oszlik, de ez már a megvalósítás részlete, amit nem szükséges észben tartani.

Egy munkaláncon belül sok fiók tárolódik, amelyeknek saját azonosítóik (account_id) vannak. A mesterlánc és a nulladik munkalánc esetében ezek hossza 256 bit. Így az azonosító, például így van rögzítve:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ez egy 'nyers' formátum: először a munkalánc azonosító, majd kettőspont, és végül az account azonosító hexadecimális ábrázolásban.

Ezen kívül létezik egy rövidített formátum — a munkalánc száma és az account címe binárisan kódolva van, hozzáadódik egy ellenőrző összeg, és az egész Base64-kódolásra kerül:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Tudva ezt a rögzítési formát, lekérdezhetjük egy account aktuális állapotát egy tesztklienstől a következő parancs segítségével:

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Körülbelül ilyen választ fogunk kapni:

[ 3][t 2][1558746708.815218925][test-lite-client.cpp:631][!testnode]    kérve a fiók állapotát -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D
[ 3][t 2][1558746708.858564138][test-lite-client.cpp:652][!testnode]    megkaptuk a fiók állapotát -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D blokkok szerint (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F és (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F
az fiók állapota (fiók
  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}

Látjuk a struktúrát, amely a megadott munkagép DHT-jában tárolódik. Például a mezőben storage.balance van a fiók aktuális egyenlege, a storage.state.code — a smart contract kódja, a storage.state.data — az aktuális adatai. Ne feledje, hogy a TON adatok tárolása — Cell, a cellák — egy fába rendezett struktúra, ahol minden cellának lehet saját adata és gyermek cellái is. Ezt az utolsó sorokban lévő behúzások mutatják.

A smart contract létrehozása

Most hozzunk létre egy ilyen struktúrát (ezt BOC-nak hívják — bag of cells) a Fift nyelv segítségével. Szerencsére nem lesz szükségünk okos szerződés írására — a crypto/block mappában az eredeti állománycsomagból található egy fájl new-wallet.fif, amely segíteni fog egy új pénztárca létrehozásában. Másoljuk át a buildelt kliens mappájába (~/liteclient-build, ha követték a fenti útmutatót). Ugyanennek a fájlnak a tartalmát egy példaként a Fift kódra már megadtam.

A fájlt a következő módon hajtjuk végre:

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

Itt <source-directory> cserélje ki a kibővített források elérési útjára (sa símbolos „~” sajnos nem használható, teljes elérési útra van szükség). Az -I kulcs helyett -I meghatározhatja a környezeti változót FIFTPATH és helyezze el ebben az elérési útvonalat.

Mivel a Fift fájlnevével indultunk, new-wallet.fif, végrehajtja, majd befejezi. Ha a fájlnevet kihagyjuk, akkor interaktív módban játszhatunk az értelmezővel.

A végrehajtás után a konzolon valami ilyesminek kell megjelennie:

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

új pénztárca címe = -1 : 4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 
0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ
aláíró üzenet: x{00000000}

Külső üzenet az inicializáláshoz x{89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001_}
 x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
 x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}

B5EE9C724104030100000000D60002CF89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001001020084FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED5400480000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B6290698B
(Mentve a fájlba new-wallet-query.boc)

Ez azt jelenti, hogy a pénztárca az azonosítóval -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (vagy más szavakkal, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) sikeresen létrehozva. A hozzárendelt kód a fájlban található, new-wallet-query.bocaz címe pedig a new-wallet.addr, a privát kulcs pedig a new-wallet.pk (legyen óvatos — a script újbóli futtatása felülírja ezeket a fájlokat).

Természetesen a TON hálózat még nem tud erről a pénztárcáról, mivel csak ezek a fájlok léteznek. Most ezt a hálózatba kell betölteni. A probléma annyi, hogy a smart contract létrehozásához díjat kell fizetni, de a fiókjának egyenlege jelenleg nulla.

Működő módban ezt a problémát grammok vásárlásával oldhatja meg a tőzsdén (vagy átutalással egy másik pénztárcából). A jelenlegi tesztmódban pedig egy speciális smart contract van, amelyből ingyen kérhet akár 20 grammot is.

Kérés egy másik smart contract felé

Kérést küldünk a gramokat osztogató smart contractnak így. Abban a mappában, crypto/block keresünk egy fájlt 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 ."bevontó üzenet: " <s csr. cr
<b b{1000100} s, wc 8 i, wallet_addr 256 u, 0 gram, b{00} s,
 swap <s b>
dup ."eredményül kapott külső üzenet: " <s csr. cr
2 boc+>B dup Bx. cr
"wallet-query.boc" B&gt;fájl

Ezt is elmentjük a kliens összegyűjtött mappájába, de javítani kell az ötödik sort — az "constant dest_addr" sor előtt cseréljük le az előző pénztárca címére (teljes, nem rövidített). Az elején nem szükséges a "-1:", helyette "0x"-t tegyen az elejére.

Esetleg cserélheti a sort 6.666 Gram*/ állandó mennyiség — ez az a grammban kifejezett összeg, amelyet kérsz (maximum 20). Még ha egész számot is adsz meg, hagyd meg a tizedespontot.

Végül ki kell javítani a sort 0x00000011 állandó seqno. Az első szám itt a jelenlegi sequence number, amelyet az accounthoz tárolnak, amely gramokat oszt ki. Honnan szerezzük be? Ahogy már említettük, indítsd el az ügyfelet és hajtsd végre:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

A végén az okosszerződés adataiban fogsz találni

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

A szám 0000000D (nálad nagyobb lesz) a sequence number, amelyet be kell illesztened a testgiver.fif.

Minden, mentjük a fájlt és elindítjuk (./crypto/fift testgiver.fif). A kimenet egy fájl lesz wallet-query.boc. Ez a kialakított üzenet idegen okosszerződéshez – a kérés "kérlek, küldj át annyi grammot ennyi számlára".

Az ügyfél segítségével feltöltjük a hálózatba:

> sendfile wallet-query.boc
[ 1][t 1][1558747399.456575155][test-lite-client.cpp:577][!testnode] küldjük a lekérdezést a wallet-query.boc fájlból
[ 3][t 2][1558747399.500236034][test-lite-client.cpp:587][!query] külső üzenet státusza 1

Ha most meghívod last, majd ismételten lekéred a státuszt annak a számlának, amelytől a gramokat kértük, akkor látnunk kell, hogy a sequence number egy egységgel nőtt – ez azt jelenti, hogy a pénzt elküldték a mi számlánkra.

Már csak egy lépés maradt – töltsd fel a pénztárcád kódját (a mérleged már feltöltve van, de a smart contract kódja nélkül nem tudjuk kezelni). Ezt futtatjuk: sendfile new-wallet-query.boc — és kész, most már van saját pénztárcád a TON hálózatban (bár egyelőre csak tesztelésre).

Kimeneti tranzakciók létrehozása

Ahhoz, hogy pénzt küldj a létrehozott számla egyenlegéről, szükséges a fájl crypto/block/wallet.fif, amelyet szintén el kell helyezni a felépített ügyfél mappájában.

Hasonlóan az előző lépésekhez, itt is módosítani kell az átadni kívánt összeget, a címzett címét (dest_addr) és a pénztárcád seqno-ját (ez 1, miután inicializáltad a pénztárcát, és minden kimeneti tranzakció után eggyel nő – ezt láthatod, amikor lekéred a számlád állapotát). Teszteléshez használhatod például az én pénztárcámat – 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

A futtatás során (./crypto/fift wallet.fif) a script azonosítja a pénztárcád címét (ahonnan átutalsz) és a privát kulcsát a fájlokból, new-wallet.addr és new-wallet.pk, és a kapott üzenetet elmenti a new-wallet-query.boc.

Mint eddig, hogy közvetlenül végrehajtsuk a tranzakciót, hívjuk meg sendfile new-wallet-query.boc a kliensben. Ezt követően ne felejtsük el frissíteni a blokklánc állapotát (last) és ellenőrizzük, hogy a pénztárcánk egyenlege és seqno értéke megváltozott-e (getaccount).

TON (Telegram Open Network) teszt kliens és az új Fift nyelv a smart szerződésekhez

És ennyi, most már tudunk okosszerződéseket létrehozni a TON-ban és kérdéseket küldeni hozzájuk. Ahogy látjuk, a jelenlegi funkcionalitás már elegendő ahhoz, hogy például barátságosabb pénztárcát készíthessünk grafikus felhasználói felülettel (bár várható, hogy ez már a messengeren keresztül is elérhető lesz).

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Érdeklik önt a TON, TVM, Fift részletes elemzéseivel foglalkozó cikkek folytatása?

  • Igen, várom a cikkek ciklusának befejezését a TON általános áttekintéséről

  • Igen, szeretnék többet olvasni a Fift nyelvről

  • Igen, többet szeretnék megtudni a TON Virtuális Gépről és a számára készült assembler nyelvről

  • Nem, nem érdekel semmi ebből

39 felhasználó szavazott. 12 felhasználó tartózkodott.

Hogyan viszonyul a Telegram TON indítási terveihez?

  • Nagy várakozásokkal tekintek erre a projektre

  • Csak kíváncsian figyelem a fejlődését

  • Kétségeim vannak, szkeptikus vagyok a sikerével kapcsolatban

  • Hajlamos vagyok ezt az kezdeményezést kudarcra ítélni, a széles tömegek számára haszontalannak tartom

47 felhasználó szavazott. 12 felhasználó tartózkodott.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster