MĂ« shumĂ« se njĂ« vit mĂ« parĂ« u njoftua pĂ«r planet e mesazhit Telegram pĂ«r tĂ« lansuar njĂ« rrjet tĂ« decentralizuar tĂ« tijin Telegram Open Network. AtĂ«herĂ« u bĂ« i disponueshĂ«m njĂ« dokument teknikor i gjerĂ«, i cili, besohet se, ishte shkruar nga Nikolai Durov dhe pĂ«rshkruante strukturĂ«n e rrjetit tĂ« ardhshĂ«m. PĂ«r ata qĂ« e kanĂ« humbur â rekomandoj tĂ« njiheni me pĂ«rmbledhjen time tĂ« kĂ«tij dokumenti (, ; pjesa e tretĂ«, me keqardhje, ende Ă«shtĂ« nĂ« skica).
Që atëherë nuk ka pasur lajme të rëndësishme për statusin e zhvillimit të TON, deri disa ditë më parë (në një nga ) u shfaq një lidhje në faqen , ku janë publikuar:
⊠â kodet burimore tĂ« klientit tĂ« lehtĂ« pĂ«r rrjetin testues TON;
⊠â skeda e konfigurimit pĂ«r lidhjen me rrjetin testues;
⊠â informacion mbi ndĂ«rtimin dhe lancimin e klientit;
⊠â udhĂ«zues hap pas hapi pĂ«r krijimin e njĂ« kontrate inteligjente me ndihmĂ«n e klientit;
⊠â dokumenti i pĂ«rditĂ«suar (nga 2 mars 2019) me njĂ« pasqyrĂ« teknike tĂ« rrjetit TON;
⊠â pĂ«rshkrimi teknik i TVM (TON Virtual Machine, makina virtuale TON);
⊠â pĂ«rshkrimi teknik i blockchain-it TON;
⊠â pĂ«rshkrimi i gjuhĂ«s sĂ« re Fift, e cila Ă«shtĂ« e destinuar pĂ«r krijimin e kontratave smart nĂ« TON.
Të theksoj, nuk ka konfirmime zyrtare të kësaj faqeje dhe të gjithë këtyre dokumenteve nga Telegrami, por sasia e këtyre materialeve i bën ato mjaft të besueshme. Kryeni publikimin e klientit të botuar në rrezikun tuaj.
Ndërtimi i klientit provues
PĂ«r fillim, do tĂ« pĂ«rpiqemi tĂ« ndĂ«rtojmĂ« dhe tĂ« kryejmĂ« testimin e klientit provues â fatmirĂ«sisht, pĂ«rshkruan kĂ«tĂ« proces tĂ« thjeshtĂ«. Do ta bĂ«j kĂ«tĂ« duke pĂ«rdorur macOS 10.14.5 si shembull, nuk mund tĂ« garantoj pĂ«r suksesin e ndĂ«rtimit nĂ« sisteme tĂ« tjera.
Shkarkoni dhe shkarkoni . ĂshtĂ« e rĂ«ndĂ«sishme tĂ« shkarkoni versionin mĂ« tĂ« fundit, pasi mbĂ«shtetja e prapambetur nĂ« kĂ«tĂ« fazĂ« nuk garantohet.
Sigurohuni që në sistemin tuaj janë të instaluara versionet më të fundit të make, cmake (versionet 3.0.2 ose më lart), OpenSSL (përfshirë skedarët ndihmës C), g++ ose clang. Nuk më duhej të instalonja asgjë jashtë, gjithçka u ndërtua menjëherë.
Supozoni se burimet janë shkarkuar në dosjen
~/lite-client. Veçmas krijoni një dosje të zbrazët për projektin e ndërtuar (p.sh.,~/liteclient-build), dhe nga ajo (cd ~/liteclient-build) thërrisni komandat:cmake ~/lite-client cmake --build . --target test-lite-client
Për të ndërtuar interpretuesin e gjuhës Fift për smart kontratat (për të cilin flitet më poshtë), gjithashtu thërrasimcmake --build . --target fiftShkarkojmë skedarin aktual për lidhjen me rrjetin testues dhe e vendosim në dosjen me klientin e ndërtuar.
Gati, mund të nisim klientin:
./test-lite-client -C ton-lite-client-test1.config.json
Nëse gjithçka është bërë siç duhet, duhet të shihni diçka të tillë:

Komandat e disponueshme, siç e shohim, janë pak:
⊠help â shfaq kĂ«tĂ« listĂ« komandash;
⊠quit â dil;
⊠time â tregon kohĂ«n aktuale nĂ« server;
⊠status â tregon gjendjen e lidhjes dhe lokalizimin e DB;
⊠last â pĂ«rditĂ«son gjendjen e blockchain-it (ngarkon bllokun e fundit). Kjo komandĂ« Ă«shtĂ« e rĂ«ndĂ«sishme tĂ« ekzekutohet para çdo kĂ«rkese, pĂ«r t'u siguruar se po shihni pikĂ«risht gjendjen aktuale tĂ« rrjetit.
⊠sendfile <filename> â ngarko njĂ« skedar lokal nĂ« rrjetin TON. KĂ«shtu ndodhi ndĂ«rveprimi me rrjetin â pĂ«rfshirĂ«, pĂ«r shembull, krijimin e smart kontratave tĂ« reja dhe kĂ«rkesat pĂ«r transferimin e fondeve midis llogarive;
⊠getaccount <address> â shfaq gjendjen aktuale ( nĂ« momentin e ekzekutimit tĂ« komandĂ«s last) tĂ« llogarisĂ« me adresĂ«n e specifikuar;
⊠privkey <filename> â ngarko çelĂ«sin privat nga njĂ« skedar lokal.
Nëse gjatë nisjes së klientit i kaloni atij dosjen nëpërmjet opsionit -D, atëherë ai do të vendosë bllokun e fundit të master chain në të:
./test-lite-client -C ton-lite-client-test1.config.json -D ~/ton-db-dirTani mund tĂ« kalojmĂ« nĂ« gjĂ«ra mĂ« interesante â tĂ« studiojmĂ« gjuhĂ«n Fift, tĂ« provojmĂ« tĂ« kompilojmĂ« njĂ« kontratĂ« smart (pĂ«r shembull, tĂ« krijojmĂ« njĂ« portofol testues), ta ngarkojmĂ« atĂ« nĂ« rrjet dhe tĂ« provojmĂ« tĂ« transferojmĂ« fonde mes llogarive.
Gjuha Fift
Nga dokumenti mund tĂ« mĂ«sojmĂ« se pĂ«r krijimin e kontratave smart, ekipi i Telegram-it krijoi njĂ« gjuhĂ« tĂ« re stack. Fift (duhet tĂ« jetĂ« nga numri fifth, sipas analogjisĂ« me Forth â njĂ« gjuhĂ« me tĂ« cilĂ«n Fift ka shumĂ« pĂ«rbashkĂ«si).
Dokumenti është mjaft i gjërë, me 87 faqe, dhe nuk do ta përmbledh në detaje përmbajtjen e tij në këtë artikull (të paktën, sepse vetë nuk e kam përfunduar leximin :). Do të ndalem në pikat kryesore dhe do të jap disa shembuj kodi në këtë gjuhë.
NĂ« nivelin bazik, sintaksa e Fift Ă«shtĂ« mjaft e thjeshtĂ«: kodi i tij pĂ«rbĂ«het nga fjalĂ«, zakonisht tĂ« ndara me hapĂ«sira ose rreshta tĂ« rinj (rast i veçantĂ«: disa fjalĂ« nuk kĂ«rkojnĂ« njĂ« ndarĂ«s pas tyre). Ădo fjalĂ« Ă«shtĂ« njĂ« sekuencĂ« simbolesh e ndjeshme ndaj rastit, e cila pĂ«rfaqĂ«son njĂ« definicion (pĂ«r tĂ« thĂ«nĂ« shkurt, ajo qĂ« interpretuĂ«si duhet tĂ« bĂ«jĂ« kur takon kĂ«tĂ« fjalĂ«). NĂ«se nuk ka njĂ« definicion pĂ«r fjalĂ«n, interpretuĂ«si pĂ«rpiqet ta analizojĂ« atĂ« si njĂ« numĂ«r dhe ta vendosĂ« nĂ« stack. PĂ«r ta thĂ«nĂ« tĂ« drejtĂ«n, numrat kĂ«tu janĂ« â papritur â tĂ« gjithĂ« mbi 257-bitĂ«, dhe s'ka as numra me thyesa â nĂ« vend tĂ« kĂ«saj, ata kthehen menjĂ«herĂ« nĂ« njĂ« çift tĂ« tĂ«rĂ«sish, qĂ« formojnĂ« numeratorin dhe denominatorin e njĂ« thyesĂ« racionale.
FjalĂ«t, zakonisht, ndĂ«rveprojnĂ« me vlerat qĂ« ndodhen nĂ« majĂ« tĂ« stack-ut. NjĂ« lloj i veçantĂ« fjalĂ«sh â prefikse â nuk pĂ«rdor stack-un, por simbolin qĂ« pason nga skedari burimor. PĂ«r shembull, kĂ«shtu realizohen literalet e vargjeve â simboli "(" Ă«shtĂ« njĂ« fjalĂ« prefikse qĂ« kĂ«rkon thonjĂ«zĂ«n tjetĂ«r (mbyllĂ«se), dhe e vendos vargun mes tyre nĂ« stack. NjĂ«soj siç funksionojnĂ« komentet njĂ«rafĂ«she (") dhe ato shumĂ«rafĂ«she (//)./*KĂ«tu pĂ«rfundon pothuajse e gjithĂ« struktura e brendshme e gjuhĂ«s. Gjithçka tjetĂ«r (pĂ«rfshirĂ« strukturat drejtuese) Ă«shtĂ« pĂ«rcaktuar si fjalĂ« (ose tĂ« brendshme, si operacionet aritmetike dhe pĂ«rcaktimi i fjalĂ«ve tĂ« reja; ose tĂ« pĂ«rcaktuara nĂ« "bibliotekĂ«n standarde"
Fift.fif , e cila ndodhet në dosjencrypto/fift crypto/fift në burimet).
Një shembull i thjeshtë i programit në Fift:
{ dup =: x dup * =: y } : setxy
3 setxy x . y . x y + .
7 setxy x . y . x y + .Në rreshtin e parë përcaktohet një fjalë e re setxy (vini re prefiksin {, i cili krijon një bllok deri në mbylljen e } dhe prefiksin :, i cili në thelb përcakton fjalën). setxy merr numrin nga maja e stack-ut, e përcakton (ose ripërcakton) si një konstante x, ndërsa katrori i këtij numri është si një konstante y (duke pasur parasysh se vlerat e konstantave mund të ripërcaktohen, unë do ta quaja më shumë si variabla, por po ndjek emërtimin në gjuhë).
Në dy rreshtat e ardhshme, numri vendoset në stack, thirret setxy, pastaj vlerat e konstantave shfaqen x, y (për shfaqjen përdoret fjala .), të dyja konstantat vendosen në stack, bashkohen dhe rezultati gjithashtu shfaqet. Si rezultat, do të shohim:
3 9 12 ok
7 49 56 ok(Rreshti «ok» shfaqet nga interpretuësi kur mbaron të përpunojë rreshtin aktual në modin interaktiv të inputit)
Dhe një shembull i plotë i kodit:
"Asm.fif" përfshin
-1 konstante wc \\ krijo një portofol në workchain -1 (masterchain)
\\ Krijo një portofol të thjeshtë të ri
<{ SETCP0 DUP IFNOTRET INC 32 THROWIF \\ kthehu nëse recv_internal, dështoni përveçse recv_external
512 INT LDSLICEX DUP 32 PLDU \\ nënshkruaj cs cnt
c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS \\ nënshkruaj cs cnt cnt' pubk
s1 s2 XCPU \\ nënshkruaj cs cnt pubk cnt' cnt
EQUAL 33 THROWIFNOT \\ ( mos përputhje seqno? )
s2 PUSH HASHSU \\ nënshkruaj cs cnt pubk hash
s0 s4 s4 XC2PU \\ pubk cs cnt hash nënshkrim pubk
CHKSIGNU \\ pubk cs cnt ?
34 THROWIFNOT \\ mos përputhje nënshkrimi
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
\\ kod
<b 0 32 u, newkeypair swap dup constant wallet_pk "new-wallet.pk" b>file
B,
b> \\ të dhënat
\\ nuk ka biblioteka
<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>$ lloji cr
256 u>B "new-wallet.addr" B>file
<b 0 32 u, b>
dup ."nënshkrimi i mesazhit: " <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 ."Mesazhi i jashtëm për inicializim është " <s csr. cr
2 boc+>B dup Bx. cr
"new-wallet-query.boc" tuck B>file
."(Ruajtur në skedar " lloji .")" crKy skedar i dukshĂ«m si i frikshĂ«m Ă«shtĂ« pĂ«r krijimin e njĂ« kontrate inteligjente â ai do tĂ« vendoset nĂ« skedarin new-wallet-query.boc pas pas pĂ«rfundimit. Vini re se kĂ«tu pĂ«rdoret njĂ« gjuhĂ« tjetĂ«r, gjuhĂ« assemble pĂ«r TON Virtual Machine (nuk do tĂ« ndalem nĂ« detaje), instruksionet e sĂ« cilĂ«s do tĂ« vendosen nĂ« blockchain.
KĂ«shtu, assembleri pĂ«r TVM Ă«shtĂ« shkruar nĂ« Fift â burimet e kĂ«tij assembleri ndodhen nĂ« skedarin crypto/fift/Asm.fif dhe lidhen nĂ« fillim tĂ« kodit tĂ« mĂ«sipĂ«rm.
ĂfarĂ« mund tĂ« them, duket se Nikolai Durov thjesht i pĂ«lqen tĂ« krijojĂ« gjuhĂ« tĂ« reja programimi đ
Krijimi i kontratave inteligjente dhe ndërveprimi me TON
Pra, le të supozojmë se ne kemi përfunduar klientin TON dhe interpretorin Fift, siç përshkruhet më sipër, dhe njohëm gjuhën. Si të krijojmë tani një kontratë inteligjente? Kështu flitet në skedarin , bashkëngjitur me burimet.
Këto llogari në TON
Siç e kam pĂ«rshkruar nĂ« , kjo rrjet pĂ«rmban mĂ« shumĂ« se njĂ« blockchain â ka njĂ« tĂ« pĂ«rbashkĂ«t, e njohur si «masterchain», si dhe njĂ« numĂ«r tĂ« pakufizuar tĂ« «workchain»-eve tĂ« tjera, qĂ« identifikohen nga njĂ« numĂ«r 32-bitĂ«sh. Masterchain-i ka njĂ« identifikues -1, pĂ«rveç tij gjithashtu mund tĂ« pĂ«rdoret njĂ« workchain «bazë» me identifikues 0. Ădo workchain mund tĂ« ketĂ« konfigurimin e tij. BrendĂ«sisht, çdo workchain ndahet nĂ« shardchains, por kjo Ă«shtĂ« njĂ« detaj implementimi, qĂ« nuk Ă«shtĂ« e nevojshme ta mbani mend.
Brenda një workchain-i ruhen shumë llogari, të cilat kanë identifikuesit e tyre account_id. Për masterchain-in dhe workchain-in zero, ato kanë gjatësi 256 bit. Kështu, identifikuesi i llogarisë shkruhet, për shembull, kështu:
-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0dKy është formati «i papërpunuar»: së pari identifikuesi i workchain-it, pastaj dy pika, dhe identifikuesi i llogarisë në formatin hexadecimal.
PĂ«r mĂ« tepĂ«r, ka njĂ« format tĂ« shkurtuar â numri i workchain-it dhe adresa e llogarisĂ« kodohen nĂ« formĂ« binary, atyre iu shtohet njĂ« checksum dhe tĂ« gjitha kĂ«to kodohen nĂ« Base64:
Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkbDuke këtë format regjistrimi, mund të kërkojmë gjendjen aktuale të ndonjë llogarie përmes një klienti testi me komandën
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0dDo të marrim një përgjigje të tillë:
[ 3][t 2][1558746708.815218925][test-lite-client.cpp:631][!testnode] po kërkesës së gjendjes së llogarisë për -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D
[ 3][t 2][1558746708.858564138][test-lite-client.cpp:652][!testnode] mori gjendjen e llogarisë për -1:8156775B79325E5D62E742D9B96C30B6515A5CD2F1F64C5DA4B193C03F070E0D në lidhje me blloqet (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F dhe (-1,8000000000000000,72355):F566005749C1B97F18EDE013EBA7A054B9014961BC1AD91F475B9082919A2296:1BD5DE54333164025EE39D389ECE2E93DA2871DA616D488253953E52B50DC03F
gjendja e llogarisë është (llogaria
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}Shfaqim strukturĂ«n qĂ« ruhet nĂ« DHT tĂ« blockchain-it tĂ« specifikuar. PĂ«r shembull, nĂ« fushĂ«n storage.balance ndodhet balanca aktuale e llogarisĂ«, nĂ« storage.state.code â kodi i kontratĂ«s sĂ« mençur, ndĂ«rsa nĂ« storage.state.data â janĂ« tĂ« dhĂ«nat e saj aktuale. Vini re se kjo strukturĂ« e tĂ« dhĂ«nave TON â Cell, qĂ« Ă«shtĂ« me hierarki, ka si tĂ« dhĂ«na tĂ« veta ashtu edhe cellet e fĂ«mijĂ«s. Kjo tregojĂ« nĂ« formĂ«n e hapĂ«sirave nĂ« rreshtat e fundit.
Ndërtimi i kontratës së mençur
Tani le tĂ« krijojmĂ« vetĂ« njĂ« strukturĂ« tĂ« tillĂ« (e cila quhet BOC â bag of cells) me ndihmĂ«n e gjuhĂ«s Fift. FatmirĂ«sisht, nuk do tĂ« duhet tĂ« shkruani me vetĂ« kontratĂ«n e mençur â nĂ« dosjen crypto/block nĂ« arkiv me burimet ka njĂ« skedĂ« new-wallet.fif, e cila do na ndihmojĂ« tĂ« krijojmĂ« njĂ« portofol tĂ« ri. Ta kopjojmĂ« atĂ« nĂ« dosjen me klientin e ndĂ«rtuar (~/liteclient-build, nĂ«se keni vepruar sipas udhĂ«zimeve mĂ« sipĂ«r). TĂ« njĂ«jtin pĂ«rmbajtje e kam sjellĂ« mĂ« sipĂ«r si shembull kodi nĂ« Fift.
E ekzekutojmë këtë skedë në këtë mënyrë:
./crypto/fift -I"/crypto/fift" new-wallet.fifKëtu <source-directory> duhet të zëvendësohet me rrugën për burimet e shkarkuara (simboli «~» këtu, fatkeqësisht, nuk mund të përdoret, është i nevojshëm rruga e plotë). Në vend të përdorimit të çelësit -I mund të përcaktojë një variabël mjedisi FIFTPATH dhe ta vendosë këtë rrugë në të.
Pasiqë Fift e filluam me emrin e skedarit new-wallet.fif, ai do ta ekzekutojë dhe do të përfundojë. Nëse emri i skedarit është i lënë jashtë, atëherë mund të luani me interpretuesin në modin interaktiv.
Pas ekzekutimit, duhet të shfaqet diçka e tillë në konsolë:
StateInit: x{34_}
x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}
një adresë e re portofoli = -1 : 4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2
0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ
mesazhi i nënshkrimit: x{00000000}
Mesazhi i jashtëm për inicializim është x{89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001_}
x{FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
x{0000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B}
B5EE9C724104030100000000D60002CF89FEE120E20C7E953E31546F64C23CD654002C1AA919ADD24DB12DDF85C6F3B58AE41198A28AD8DAF3B9588E7A629252BA3DB88F030D00BC1016110B2073359EAC3C13823C53245B65D056F2C070B940CDA09789585935C7ABA4D2AD4BED139281CFA1200000001001020084FF0020DDA4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED5400480000000055375F730EDC2292E8CB15C42E8036EE9C25AA958EE002D2DE48A205E3A3426B6290698B
(Saved to file new-wallet-query.boc)Kjo do tĂ« thotĂ« se portofoli me identifikuesin -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (ose, qĂ« Ă«shtĂ« e njĂ«jtĂ«, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) Ă«shtĂ« krijuar me sukses. Kodi pĂ«rkatĂ«s do tĂ« gjendet nĂ« skedĂ«n new-wallet-query.boc, adresa e tij Ă«shtĂ« nĂ« new-wallet.addr, ndĂ«rsa çelĂ«si privat Ă«shtĂ« nĂ« new-wallet.pk (kujdes â njĂ« ekzecutim tjetĂ«r i skenarit do tĂ« mbulojĂ« kĂ«to skeda).
Sigurisht, rrjeti TON ende nuk e di për këtë portofol, ai ruhet vetëm në formën e këtyre skedave. Tani duhet ngarkuar në rrjet. Megjithatë, problemi është se për të krijuar një kontratë inteligjente duhet paguar një tarifë, dhe balanca e llogarisë tuaj aktualisht është zero.
Në operim normal, ky problem do të zgjidhet duke blerë gramat në treg (ose duke transferuar nga një portofol tjetër). Në këtë regjion testimi aktual, është krijuar një kontratë inteligjente speciale, nga e cila mund të kërkoni deri në 20 gram falas.
Formimi i kërkesës për një kontratë inteligjente të huaj
Kërkesa për një kontratë inteligjente, që ndan gramat në të gjitha drejtimet, bëhet kështu. Në atë të njëjtën dosje crypto/block gjejmë skedën 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 ."mesazh i përfshirë: " <s csr. cr
<b b{1000100} s, wc 8 i, wallet_addr 256 u, 0 gram, b{00} s,
swap <s b>
dup ."mesazh përfundimtar: " <s csr. cr
2 boc+>B dup Bx. cr
"wallet-query.boc" B>fileKĂ«tĂ« do ta ruajmĂ« gjithashtu nĂ« dosjen me klientin e mbledhur, por do tĂ« korektojmĂ« rreshtin e pestĂ« â para rreshtit «constant dest_addr«. Ne do ta adresin e atij portofoli qĂ« keni krijuar mĂ« parĂ« (tĂ« plotĂ«, jo tĂ« shkurtuar). «-1:» nĂ« fillim nuk Ă«shtĂ« e nevojshme, nĂ« vend tĂ« kĂ«saj vendosni «0x» nĂ« fillim.
Gjithashtu, mund tĂ« ndryshoni rreshtin 6.666 Gram*/ sasi konstante â kjo Ă«shtĂ« sasia nĂ« gram qĂ« po kĂ«rkoni (maksimumi 20). Edhe nĂ«se jepni njĂ« numĂ«r tĂ« plotĂ«, lĂ«reni pikĂ«n dekimale.
SĂ« fundi, duhet tĂ« rregulloni rreshtin 0x00000011 sasi konstante seqno. Numri i parĂ« kĂ«tu â Ă«shtĂ« numri aktual i sekuencĂ«s, i cili ruhet nĂ« llogarinĂ« qĂ« ndan gramĂ«t. Si ta merrni? Siç u tha mĂ« sipĂ«r, hapni klientin dhe ekzekutoni:
last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0dNë fund të të dhënave të kontratës inteligjente do të jetë
...
x{FF0020DDA4F260D31F01ED44D0D31FD166BAF2A1F80001D307D4D1821804A817C80073FB0201FB00A4C8CB1FC9ED54}
x{0000000D}Numri 0000000D (tek ju do të jetë më i madh) është numri i sekuencës që duhet të vendosni në testgiver.fif.
Tani, ruani skedarin dhe filloni (./crypto/fift testgiver.fif). NĂ« daljen do tĂ« marrim skedarin wallet-query.boc. Ky Ă«shtĂ« formatuar mesazhi nĂ« njĂ« kontratĂ« inteligjente tĂ« huaj â kĂ«rkesa «dĂ«rgo kaq gram nĂ« kĂ«tĂ« llogari».
Me ndihmën e klientit, e ngarkojmë atë në rrjet:
> sendfile wallet-query.boc
[ 1][t 1][1558747399.456575155][test-lite-client.cpp:577][!testnode] duke query nga skedari wallet-query.boc
[ 3][t 2][1558747399.500236034][test-lite-client.cpp:587][!query] statusi i mesazhit të jashtme është 1Nëse tani thërrisni last, dhe pastaj kërkoni përsëri statusin e llogarisë për të cilën kërkuam gramë, atëherë duhet të shohim se numri i sekuencës është rritur me një - kjo do të thotë se ai dërgoi para në llogarinë tonë.
Ka mbetur hapi i fundit - ngarkohet kodi i portofolit tonĂ« (balanca e tij Ă«shtĂ« tashmĂ« e rritur, por pa kodin e kontratĂ«s sĂ« smart, ne nuk mund ta menaxhojmĂ«). KryejmĂ« sendfile new-wallet-query.boc â dhe kjo Ă«shtĂ«, tani keni portofolin tuaj nĂ« rrjetin TON (edhe nĂ«se pĂ«r momentin Ă«shtĂ« vetĂ«m testues).
Krijimi i transaksioneve të jashtme
Për të transferuar para nga balanca e llogarisë së krijuar, ekziston një skedar crypto/block/wallet.fif, i cili gjithashtu duhet të vendoset në dosjen me klientin e grumbulluar.
Sikurse hapat e mëparshëm, duhet të rregulloni shifrën që po transferoni, adresën e marrësit (dest_addr), dhe seqno të portofolit tuaj (ai është 1 pas inicializimit të portofolit dhe rritet me 1 pas çdo transaksioni të jashtëm - mund ta shihni duke kërkuar statusin e llogarisë tuaj). Për teste mund të përdorni, për shembull, portofolin tim - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.
Kur lançoni (./crypto/fift wallet.fif) skripti do të marrë adresën e portofolit tuaj (nga ku po transferoni) dhe çelësin e tij privat nga skedarët new-wallet.addr dhe new-wallet.pk, dhe mesazhi i marrë do të shkruhet në new-wallet-query.boc.
Si më parë, për të kryer transaksionin direkt, thërrasim sendfile new-wallet-query.boc në klient. Pas kësaj, mos harroni të përditësoni gjendjen e blockchain-it (last) dhe kontrolloni që bilanci dhe seqno i portofolit tonë janë ndryshuar (getaccount).

Këtu e gjithë, tani dimë si të krijojmë kontrata inteligjente në TON dhe të dërgojmë kërkesa për to. Siç e shohim, funksionaliteti aktual është mjaft për të krijuar një portofol më miqësor me një ndërfaqe grafike (sidoqoftë, pritet që ai të bëhet i disponueshëm si pjesë e aplikacionit të mesazheve).
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutemi.
Jeni të interesuar për vazhdimin e artikujve me analizën e TON, TVM, Fift?
Po, po pres përfundimin e ciklit të artikujve me një përmbledhje të përgjithshme të TON
Po, më intereson të lexoj më shumë rreth gjuhës Fift
Po, dua të di më shumë rreth TON Virtual Machine dhe assemblerit për të
Jo, nuk më intereson asgjë nga këto
39 përdorues votuan. 12 përdorues abstenuan.
ĂfarĂ« mendoni pĂ«r planet e Telegramit pĂ«r tĂ« nisur TON?
Kam shpresat e mëdha për këtë projekt
Thjesht po e ndjek me interes zhvillimin e tij
Jam i vendosur skeptik, dyshoj për suksesin e tij
Mendoj se kjo iniciativë është e dështuar, e panevojshme për masat e gjera
Janë votuar nga 47 përdorues. Abstenuan 12 përdorues.
Burimi: habr.com

