ProHoster > Blog > İdarə > TON (Telegram Open Network) test müştərisi və ağıllı müqavilələr üçün yeni Fift dili
TON (Telegram Open Network) test müştərisi və ağıllı müqavilələr üçün yeni Fift dili
Bir ildən çoxdur ki, Telegram messencerinin özünün mərkəzləşdirilməmiş şəbəkəsini buraxmaq planları haqqında məlum olub. Telegram Açıq Şəbəkə. Sonra, ehtimal ki, Nikolay Durov tərəfindən yazılmış və gələcək şəbəkənin strukturunu təsvir edən həcmli texniki sənəd əldə edildi. Onu qaçıranlar üçün bu sənədin təkrar izahını oxumağınızı tövsiyə edirəm (1 hissəsi, 2 hissəsi; üçüncü hissə, təəssüf ki, hələ də qaralamalarda toz yığır).
O vaxtdan bəri, bir neçə gün əvvələ qədər TON-un inkişafının vəziyyəti ilə bağlı əhəmiyyətli bir xəbər yoxdur (birində qeyri-rəsmi kanallar) səhifənin linki görünmədi https://test.ton.org/download.htmlharada yerləşir:
◦ ton-test-liteclient-full.tar.xz — TON test şəbəkəsi üçün yüngül müştəri mənbələri;
◦ ton-lite-client-test1.config.json — test şəbəkəsinə qoşulmaq üçün konfiqurasiya faylı;
◦ README - müştərinin yığılması və işə salınması haqqında məlumat;
◦ NECƏ — müştəridən istifadə edərək ağıllı müqavilənin yaradılmasına dair addım-addım təlimatlar;
◦ ton.pdf — TON şəbəkəsinin texniki icmalı ilə yenilənmiş sənəd (2 mart 2019-cu il tarixli);
◦ tvm.pdf — TVM-in texniki təsviri (TON Virtual Machine, TON virtual machine);
◦ tblkch.pdf — TON blokçeyninin texniki təsviri;
◦ fifthbase.pdf — TON-da ağıllı müqavilələr yaratmaq üçün nəzərdə tutulmuş yeni Fift dilinin təsviri.
Yenə deyirəm, səhifənin və bütün bu sənədlərin Telegram-dan rəsmi təsdiqi yox idi, lakin bu materialların həcmi onları kifayət qədər inandırıcı edir. Dərc edilmiş müştərini işə salın öz riski ilə.
Test müştərisinin yaradılması
Başlamaq üçün test müştərisini qurmağa və işə salmağa çalışaq - yaxşı, README bu sadə prosesi ətraflı təsvir edir. Mən bunu macOS 10.14.5 nümunəsindən istifadə edərək edəcəm, digər sistemlərdə montajın uğuruna zəmanət verə bilmərəm.
Yükləyin və paketdən çıxarın mənbə arxivi. Ən son versiyanı yükləmək vacibdir, çünki bu mərhələdə geriyə uyğunluq təmin edilmir.
Sisteminizdə make, cmake (versiya 3.0.2 və ya daha yüksək), OpenSSL (o cümlədən C başlıqları), g++ və ya clang-ın ən son versiyalarının quraşdırıldığına əmin olun. Heç bir şey quraşdırmalı deyildim, hər şey dərhal birləşdi.
Mənbələrin bir qovluğa açıldığını düşünək ~/lite-client. Bundan ayrıca, yığılmış layihə üçün boş bir qovluq yaradırıq (məsələn, ~/liteclient-build), və ondan (cd ~/liteclient-build) əmrləri çağırın:
Hər şey düzgün aparılırsa, belə bir şey görməlisiniz:
Gördüyünüz kimi, bir neçə mövcud əmr var:
◦ help - bu əmrlərin siyahısını göstərin;
◦ quit - çölə çıxmaq;
◦ time — serverdə cari vaxtı göstərmək;
◦ status - əlaqənin vəziyyətini və yerli məlumat bazasını göstərmək;
◦ last — blokçeynin vəziyyətini yeniləyin (sonuncu bloku endirin). Şəbəkənin faktiki vəziyyətini gördüyünüzə əmin olmaq üçün hər hansı sorğudan əvvəl bu əmri yerinə yetirmək vacibdir.
◦ sendfile<filename> — TON şəbəkəsinə yerli fayl yükləyin. Şəbəkə ilə qarşılıqlı əlaqə belə baş verir, məsələn, yeni ağıllı müqavilələrin yaradılması və hesablar arasında pul köçürmə sorğuları;
◦ getaccount<address> — cari göstərin (əmr icrası zamanı last) göstərilən ünvanla hesabın vəziyyəti;
◦ privkey<filename> — şəxsi açarı yerli fayldan yükləyin.
Müştərini işə salarkən, seçimdən istifadə edərək qovluğu ona ötürün -D, sonra masterchain-in son blokunu ona əlavə edəcək:
İndi daha maraqlı şeylərə keçə bilərik - Fift dilini öyrənin, ağıllı müqavilə tərtib etməyə çalışın (məsələn, test cüzdanı yaradın), onu şəbəkəyə yükləyin və hesablar arasında vəsait köçürməyə cəhd edin.
Beş dil
Sənəddən fifthbase.pdf Telegram komandasının ağıllı müqavilələr yaratmaq üçün yeni bir yığın dili yaratdığını öyrənə bilərsiniz beş (görünür rəqəmdən beşinci, Beşincinin çox ortaq cəhətləri olan Forth dilinə bənzəyir).
Sənəd kifayət qədər həcmlidir, 87 səhifədir və bu məqalə çərçivəsində onun məzmununu təfərrüatlı şəkildə təkrarlamayacağam (ən azı, çünki özüm oxuyub bitirməmişəm :). Əsas məqamlar üzərində dayanacağam və bu dildə bir neçə kod nümunəsi verəcəyəm.
Əsas səviyyədə Fift-in sintaksisi olduqca sadədir: onun kodu aşağıdakılardan ibarətdir sözlər, adətən boşluq və ya sətir fasilələri ilə ayrılır (xüsusi hal: bəzi sözlər özlərindən sonra ayırıcı tələb etmir). Hər hansı söz bəzilərinə uyğun gələn simvolların hərf-həssas ardıcıllığıdır müəyyənləşdirilməsi (kobud desək, tərcüməçi bu sözlə qarşılaşdıqda nə etməlidir). Əgər sözün tərifi yoxdursa, tərcüməçi onu ədəd kimi təhlil etməyə və yığının üzərinə itələməyə çalışır. Yeri gəlmişkən, buradakı rəqəmlər - birdən-birə - 257 bitlik tam ədədlərdir və kəsrlər ümumiyyətlə yoxdur - daha dəqiq desək, onlar dərhal rasional kəsrin payını və məxrəcini təşkil edən bir cüt tam ədədə çevrilirlər.
Sözlər yığının yuxarısındakı dəyərlərlə qarşılıqlı əlaqədə olur. Sözlərin ayrı növü - prefiks - yığından deyil, mənbə faylından onları izləyən simvollardan istifadə edir. Məsələn, sətir literalları belə həyata keçirilir - sitat simvolu (") növbəti (bağlama) sitatı axtaran və aralarındakı sətiri yığının üzərinə itələyən prefiks sözdür. Tək laynerlər eyni şəkildə davranırlar (//) və çoxsətirli (/*) şərhlər.
Dilin demək olar ki, bütün daxili quruluşu burada sona çatır. Qalan hər şey (nəzarət konstruksiyaları daxil olmaqla) sözlər kimi müəyyən edilir (yaxud daxili, məsələn hesab əməliyyatları və yeni sözlərin müəyyən edilməsi; və ya "standart kitabxanada" müəyyən edilir. Fift.fifqovluğunda olan crypto/fift mənbələrdə).
Fift proqramının sadə nümunəsi:
{ dup =: x dup * =: y } : setxy
3 setxy x . y . x y + .
7 setxy x . y . x y + .
Birinci sətir yeni sözü müəyyən edir setxy (prefiksə diqqət yetirin {, bağlanmadan əvvəl blok yaradır } və prefiks :, əslində sözü müəyyən edir). setxy yığının yuxarı hissəsindən bir ədəd götürür, onu qlobal olaraq təyin edir (və ya yenidən təyin edir). Sabitx, və sabit olaraq bu ədədin kvadratı y (Sabitlərin dəyərlərinin yenidən təyin oluna biləcəyini nəzərə alsaq, mən onları dəyişən adlandırmaq istərdim, amma dildə adlandırma konvensiyasına əməl edirəm).
Növbəti iki sətir bir nömrəni yığının üzərinə itələyir, zəng edin setxy, sonra sabitlərin dəyərləri göstərilir x, y (çıxış sözündən istifadə edir .), hər iki sabit yığının üzərinə itələnir, yekunlaşdırılır və nəticə də göstərilir. Nəticədə görəcəyik:
3 9 12 ok
7 49 56 ok
("OK" xətti interaktiv giriş rejimində cari xəttin işlənməsini bitirdikdə tərcüməçi tərəfindən çıxarılır)
Bu qorxulu görünüşlü fayl ağıllı müqavilə yaratmaq üçündür - o, fayla yerləşdiriləcək new-wallet-query.boc edamdan sonra. Nəzərə alın ki, burada TON Virtual Maşın üçün başqa bir montaj dili istifadə olunur (bu barədə ətraflı danışmayacağam), təlimatları blokçeyndə yerləşdiriləcək.
Beləliklə, TVM üçün assembler Fift-də yazılmışdır - bu assembler üçün mənbə kodu fayldadır crypto/fift/Asm.fif və yuxarıdakı kod parçasının əvvəlində birləşdirilir.
Nə deyə bilərəm ki, Nikolay Durov sadəcə yeni proqramlaşdırma dilləri yaratmağı sevir 🙂
Ağıllı müqavilənin yaradılması və TON ilə qarşılıqlı əlaqə
Beləliklə, fərz edək ki, TON müştərisini və Fift tərcüməçisini yuxarıda təsvir olunduğu kimi yığdıq və dillə tanış olduq. İndi ağıllı müqaviləni necə yaratmaq olar? Bu faylda təsvir edilmişdir NECƏmənbəyə əlavə olunur.
TON-da hesablar
-də təsvir etdiyim kimi TON baxışı, bu şəbəkə birdən çox blockchain ehtiva edir - bir ümumi, sözdə var. “masterchain”, həmçinin 32 bitlik nömrə ilə müəyyən edilmiş ixtiyari sayda əlavə “iş zəncirləri”. Masterchain -1 identifikatoruna malikdir, ona əlavə olaraq 0 identifikatoru olan “baza” iş zəncirindən də istifadə edilə bilər.Hər bir işçi zəncirinin öz konfiqurasiyası ola bilər. Daxili olaraq, hər bir işçi zəncir zəncirinə bölünür, lakin bu, yadda saxlamaq lazım olmayan bir icra detalıdır.
Bir iş zəncirində öz account_id identifikatorları olan bir çox hesab saxlanılır. Masterchain və null workchain üçün onlar 256 bit uzunluğundadır. Beləliklə, hesab ID-si, məsələn, belə yazılır:
Bu, "xam" formatdır: əvvəlcə işçi zəncirinin identifikatoru, sonra iki nöqtə və hexadecimal notationda hesab ID-si.
Bundan əlavə, qısaldılmış bir format var - iş zəncirinin nömrəsi və hesab ünvanı ikili formada kodlanır, onlara yoxlama məbləği əlavə olunur və bütün bunlar Base64-də kodlanır:
Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb
Bu qeyd formatını bilərək, komandadan istifadə edərək test müştərisi vasitəsilə bəzi hesabın cari vəziyyətini sorğulaya bilərik
[ 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}
Göstərilən iş zəncirinin DHT-də saxlanılan strukturu görürük. Məsələn, sahədə storage.balance hesabın cari qalığıdır, in storage.state.code - ağıllı müqavilə kodu və daxil storage.state.data - onun cari məlumatları. Nəzərə alın ki, TON məlumat yaddaşı - Hüceyrə, hüceyrələr - ağaca bənzəyir, hər bir xananın həm öz verilənləri, həm də uşaq hüceyrələri ola bilər. Bu, son sətirlərdə girinti kimi göstərilir.
Ağıllı müqavilə qurmaq
İndi özümüz belə bir struktur yaradaq (buna BOC deyilir - hüceyrə çantası) Fift dilindən istifadə etməklə. Xoşbəxtlikdən, özünüz ağıllı bir müqavilə yazmağa ehtiyac yoxdur - qovluqda crypto/block mənbə arxivindən bir fayl var new-wallet.fif, bu bizə yeni pul kisəsi yaratmağa kömək edəcək. Gəlin onu yığılmış müştəri ilə qovluğa kopyalayaq (~/liteclient-build, yuxarıdakı təlimatlara əməl etmisinizsə). Mən onun məzmununu Fift-də kod nümunəsi kimi yuxarıda qeyd etdim.
Burada <source-directory> qablaşdırılmamış mənbələrə gedən yol ilə əvəz edilməlidir (burada “~” simvolu istifadə edilə bilməz, təəssüf ki, tam yol lazımdır). Açardan istifadə etmək əvəzinə -I mühit dəyişənini təyin edə bilərsiniz FIFTPATH və bu yolu ona daxil edin.
Fift-i fayl adı ilə işə saldığımızdan new-wallet.fif, onu icra edəcək və çıxacaq. Fayl adını buraxsanız, tərcüməçi ilə interaktiv şəkildə oynaya bilərsiniz.
İcradan sonra konsolda belə bir şey görünməlidir:
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)
Bu o deməkdir ki, pul kisəsi şəxsiyyət vəsiqəsi ilə -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (və ya eyni olan, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) uğurla yaradılmışdır. Müvafiq kod faylda olacaq new-wallet-query.boc, onun ünvanı var new-wallet.addr, və şəxsi açar içəridədir new-wallet.pk (ehtiyatlı olun - skriptin yenidən işə salınması bu faylların üzərinə yazılacaq).
Əlbəttə ki, TON şəbəkəsi hələ bu pul kisəsi haqqında bilmir, o, yalnız bu fayllar şəklində saxlanılır. İndi onu şəbəkəyə yükləmək lazımdır. Düzdür, problem ondadır ki, ağıllı müqavilə yaratmaq üçün komissiya ödəməlisən və hesab balansı hələ də sıfırdır.
İş rejimində bu problem birjada qram almaqla (və ya başqa cüzdandan köçürməklə) həll olunacaq. Yaxşı, indiki test rejimində xüsusi ağıllı müqavilə işə salınıb, ondan 20 qrama qədər istəyə bilərsiniz.
Qramları sola və sağa paylayan ağıllı bir müqavilə tələbi, biz bunu edirik. Eyni qovluqda crypto/block faylı tapı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+ 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
Biz də onu yığılmış müştəri ilə qovluğa saxlayacağıq, lakin beşinci sətri düzəldəcəyik - xəttdən əvvəl "constant dest_addr". Gəlin onu əvvəllər yaratdığınız pul kisəsinin ünvanı ilə əvəz edək (tam, qısaldılmış deyil). "-1:" əvvəlində yazmaq lazım deyil, əvəzinə əvvəlində "0x" qoyun.
Siz həmçinin xətti dəyişə bilərsiniz 6.666 Gram*/ constant amount tələb etdiyiniz qramla məbləğdir (20-dən çox deyil). Tam ədəd göstərsəniz belə, ondalık nöqtəni buraxın.
Nəhayət, xətti düzəltmək lazımdır 0x00000011 constant seqno. Burada birinci nömrə qram verən hesabda saxlanılan cari sıra nömrəsidir. Haradan almaq olar? Yuxarıda qeyd edildiyi kimi, müştərini işə salın və işə salın:
last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
Ən sonunda ağıllı müqavilə məlumatları ehtiva edəcəkdir
0000000D nömrəsi (sizdə daha çox olacaq) və ardıcıllıqla əvəz edilməli olan bir sıra nömrəsi var. testgiver.fif.
Budur, faylı saxla və işə salın (./crypto/fift testgiver.fif). Çıxış bir fayl olacaq wallet-query.boc. Bu formalaşandır сообщение başqasının ağıllı müqaviləsinə - "filan hesaba bu qədər qram köçürmək" tələbi.
Müştəridən istifadə edərək onu şəbəkəyə yükləyin:
> 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
İndi zəng etsə last, və sonra yenidən qram tələb etdiyimiz hesabın statusunu tələb edin, onda onun ardıcıl nömrəsinin bir artdığını görməliyik - bu o deməkdir ki, bizim hesabımıza pul göndərdi.
Qalan son addım pul kisəmizin kodunu yükləməkdir (onun balansı artıq doldurulub, lakin ağıllı müqavilə kodu olmadan onu idarə edə bilməyəcəyik). həyata keçiririk sendfile new-wallet-query.boc - vəssalam, TON şəbəkəsində öz cüzdanınız var (hazırda yalnız bir sınaq olsa da).
Giden əməliyyatlar yaradın
Yaradılmış hesabın balansından pul köçürmək üçün bir fayl var crypto/block/wallet.fif, bu da yığılmış müştəri ilə qovluğa yerləşdirilməlidir.
Əvvəlki addımlara bənzər olaraq, köçürdüyünüz məbləği, alıcının ünvanını (dest_addr) və pul kisəsi seqnosunu düzəltməlisiniz (pul kisəsi işə salındıqdan sonra 1-ə bərabərdir və hər gedən əməliyyatdan sonra 1 artır - bunu görə bilərsiniz. hesabınızın statusunu sorğulayır). Testlər üçün, məsələn, mənim cüzdanımdan istifadə edə bilərsiniz - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.
Başlanğıcda (./crypto/fift wallet.fif) skript cüzdanınızın ünvanını (köçürdüyünüz yerdən) və onun şəxsi açarını fayllardan götürəcək new-wallet.addr и new-wallet.pk, və alınan mesaj ona yazılacaq new-wallet-query.boc.
Əvvəlki kimi, əməliyyatı birbaşa həyata keçirmək üçün zəng edirik sendfile new-wallet-query.boc müştəridə. Bundan sonra blokçeynin vəziyyətini yeniləməyi unutmayın (last) və pul kisəmizin balansının və seqnosunun dəyişdiyini yoxlayın (getaccount <account_id>).
Hamısı budur, indi TON-da ağıllı müqavilələr yarada və onlara sorğu göndərə bilərik. Gördüyünüz kimi, cari funksionallıq, məsələn, qrafik interfeysi olan daha dost pul kisəsi hazırlamaq üçün artıq kifayətdir (lakin onun hər halda messencerin bir hissəsi kimi əlçatan olacağı gözlənilir).
Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. Daxil olunxahiş edirəm.
TON, TVM, Fift təhlili ilə məqalələrin davamı ilə maraqlanırsınız?
Bəli, TON-un ümumi icmalı ilə məqalələr silsiləsinin tamamlanmasını gözləyirəm
Bəli, Fift dili haqqında daha çox oxumaq maraqlıdır
Bəli, mən TON Virtual Maşın və onun üçün assembler haqqında daha çox öyrənmək istəyirəm
Xeyr, bunların heç biri məni maraqlandırmır.
39 istifadəçi səs verib. 12 istifadəçi bitərəf qalıb.
Telegram-ın TON-u işə salmaq planlarına münasibətiniz necədir?
Bu layihəyə böyük ümidlərim var.
Sadəcə onun inkişafını maraqla izləyirəm.
Mən skeptikəm, onun uğuruna şübhə edirəm
Mən bu təşəbbüsü uğursuz, geniş kütlələr üçün lazımsız hesab edirəm
47 istifadəçi səs verib. 12 istifadəçi bitərəf qalıb.