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 (, ; 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 ) megjelent egy hivatkozás egy oldalra , ahol a következők találhatóak:
◦ — a TON teszthálózatához tartozó könnyűkliense forráskódja;
◦ — konfigurációs fájl a teszthálózatra való csatlakozáshoz;
◦ — információ a kliens összeállításáról és futtatásáról;
◦ — lépésről lépésre útmutató okos szerződés létrehozásához a klienssel;
◦ — frissített dokumentum (2019. március 2-i) a TON hálózat technikai áttekintésével;
◦ — a TVM (TON Virtual Machine, TON virtuális gép) műszaki leírása;
◦ — a TON blokklánc műszaki leírása;
◦ — 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, 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.
Töltsd le és csomagold ki a Fontos, hogy az utolsó verziót töltsd le, mivel a visszafelé kompatibilitás ezen a ponton nem garantált.
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.
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
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 megcmake --build . --target fiftLetöltjük a legfrissebbet , hogy csatlakozzunk a teszthálózathoz, és elhelyezzük azt a kliens összegyűjtött mappájában.
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:

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-dirMost á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 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
<{ 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' pubk
s1 s2 XCPU // aláírás cs cnt pubk cnt' 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
}>c
// kód
<b 0 32 u, newkeypair swap dup constant wallet_pk "new-wallet.pk" b>fájl
B,
b> // 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>B "new-wallet.addr" B>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>file
."(Mentve a fájlba " type .")" crnew-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ó. , amely a forráskódhoz van csatolva.
Fiókok a TON-ban
Ahogyan az a , 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:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0dEz 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+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkbTudva 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:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0dKö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.fifItt <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>fájlEzt 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:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0dA 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 1Ha 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).

É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.
É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

