ProHoster > Blog > башкаруу > Сыноо кардары TON (Telegram Open Network) жана акылдуу келишимдер үчүн жаңы Fift тили
Сыноо кардары TON (Telegram Open Network) жана акылдуу келишимдер үчүн жаңы Fift тили
Бир жылдан ашык убакыт мурун Telegram мессенджеринин өзүнүн борбордон ажыратылган тармагын чыгаруу пландары тууралуу белгилүү болгон. Телеграмма Open Network. Андан кийин Николай Дуров тарабынан жазылган жана келечектеги тармактын түзүмүн сүрөттөгөн көлөмдүү техникалык документ пайда болду. Сагынып калгандар үчүн бул документти кайра окуп чыгууну сунуштайм (1-бөлүк, 2-бөлүк; үчүнчү бөлүгү, тилекке каршы, дагы эле чиймелерде чаң чогултуп жатат).
Ошондон бери, бир нече күн мурун TON өнүктүрүү абалы жөнүндө эч кандай олуттуу кабар болгон эмес (биринде расмий эмес каналдар) бетке шилтеме пайда болгон жок https://test.ton.org/download.htmlкайда жайгашкан:
◦ ton-test-liteclient-full.tar.xz — TON тест тармагы үчүн жеңил кардар булактары;
◦ ton-lite-client-test1.config.json — тесттик тармакка кошулуу үчүн конфигурация файлы;
◦ README - кардарды чогултуу жана ишке киргизүү жөнүндө маалымат;
◦ КАНТИП — кардарды колдонуу менен акылдуу келишимди түзүү боюнча этап-этабы менен нускамалар;
◦ ton.pdf — TON тармагынын техникалык баяндамасы менен жаңыланган документ (2-жылдын 2019-мартында);
◦ tvm.pdf — TVM техникалык мүнөздөмөсү (TON Virtual Machine, TON virtual machine);
◦ tblkch.pdf — TON блокчейнинин техникалык мүнөздөмөсү;
◦ fifthbase.pdf — ТОНдо акылдуу келишимдерди түзүү үчүн иштелип чыккан жаңы Fift тилинин сүрөттөлүшү.
Кайталап айтам, баракчаны жана бардык бул документтерди Telegramдан расмий ырастоо болгон эмес, бирок бул материалдардын көлөмү аларды абдан ишеничтүү кылат. Жарыяланган кардарды ишке киргизиңиз өз тобокелине.
Сыноо кардарын куруу
Биринчиден, келгиле, сыноо кардарын курууга жана иштетүүгө аракет кылалы - бактыга жараша, README бул жөнөкөй процессти майда-чүйдөсүнө чейин сүрөттөйт. Мен муну мисал катары macOS 10.14.5 аркылуу жасайм; Башка системаларда куруунун ийгилигине кепилдик бере албайм.
Жүктөп алыңыз жана таңгактан чыгарыңыз булак архиви. Акыркы версиясын жүктөп алуу маанилүү, анткени бул этапта артка шайкештикке кепилдик жок.
Системада make, cmake (3.0.2 версиясы же андан жогору), OpenSSL (анын ичинде C баш файлдары), g++ же clang акыркы версиялары орнотулганын текшериңиз. Мен эч нерсе орнотуунун кереги жок болчу, баары ошол замат чогулду.
Булактар папкага салынган деп коёлу ~/lite-client. Андан өзүнчө, чогулган долбоор үчүн бош папканы түзүңүз (мисалы, ~/liteclient-build), жана андан (cd ~/liteclient-build) буйруктарды чакырыңыз:
Эгер баары туура аткарылса, сиз төмөнкүдөй нерсени көрүшүңүз керек:
Көрүнүп тургандай, бир нече жеткиликтүү буйруктар бар:
◦ help — бул буйруктардын тизмесин көрсөтүү;
◦ quit - чыгып кет;
◦ time — серверде учурдагы убакытты көрсөтүү;
◦ status — байланыш жана жергиликтүү маалымат базасынын абалын көрсөтүү;
◦ last — блокчейндин абалын жаңыртуу (акыркы блокту жүктөп алуу). Тармактын учурдагы абалын көрүп турганыңызга ынануу үчүн бул буйрукту ар кандай суроо-талаптардан мурун иштетүү маанилүү.
◦ sendfile<filename> — TON тармагына жергиликтүү файлды жүктөө. Тармак менен өз ара аракеттенүү ушундайча ишке ашат - анын ичинде, мисалы, жаңы акылдуу келишимдерди түзүү жана эсептердин ортосунда акча каражаттарын которуу өтүнүчү;
◦ getaccount<address> — учурдагы көрсөтүү (буйрук аткарылган учурда) last) көрсөтүлгөн дареги бар эсептин абалы;
◦ privkey<filename> — жеке ачкычты жергиликтүү файлдан жүктөө.
Эгерде, кардарды баштаганда, сиз папканы ага опцияны колдонуп өткөрүп берсеңиз -D, анда ал ага мастерчейндин акыркы блогун кошот:
Эми биз кызыктуураак нерселерге өтсөк болот - Fift тилин үйрөнүңүз, акылдуу келишим түзүүгө аракет кылыңыз (мисалы, тесттик капчыкты түзүңүз), аны тармакка жүктөңүз жана эсептердин ортосунда акча которууга аракет кылыңыз.
Language Fift
Документтен fifthbase.pdf сиз Telegram командасы акылдуу келишимдерди түзүү үчүн жаңы стек тилин жаратканын биле аласыз беш (сандан көрүнөт бешинчи, Forth тилине окшош, Fifth менен көп окшоштуктары бар тил).
Документ абдан көлөмдүү, 87 барактан турат жана мен анын мазмунун ушул макаланын алкагында майда-чүйдөсүнө чейин айтып бербейм (жок дегенде мен аны окуп бүтө элекмин :). Мен негизги пункттарга токтолуп, бул тилде бир нече коддуу мисалдарды берем.
Негизги деңгээлде Fiftтин синтаксиси абдан жөнөкөй: анын коду төмөнкүлөрдөн турат сөздөр, адатта боштуктар же сызыктар менен ажыратылат (өзгөчө учур: кээ бир сөздөр өзүнөн кийин бөлүүчүнү талап кылбайт). каалаган сөз белгилүү бирге туура келген белгилердин регистрге сезимтал ырааттуулугу определение (болжол менен котормочу бул сөзгө туш болгондо эмне кылышы керек). Эгерде сөздүн аныктамасы жок болсо, котормочу аны сан катары талдап, стекке коюуга аракет кылат. Айтмакчы, бул жердеги сандар – күтүлбөгөн жерден – 257 биттик бүтүн сандар, ал эми бөлчөктөр такыр жок – тагыраак айтканда, алар дароо эле бүтүн сандардын түгөйүнө айланып, рационалдуу бөлчөктүн алуучу жана бөлүүчүсүн түзүшөт.
Сөздөр стектин жогору жагындагы баалуулуктар менен өз ара аракеттенишет. Сөздөрдүн өзүнчө түрү - префикс — стекти эмес, баштапкы файлдан кийинки символдорду колдонот. Мисалы, сап литералдары ушундайча ишке ашырылат - цитата белгиси (") кийинки (жабуучу) цитатаны издеген жана алардын ортосундагы сапты стекке түртүүчү префикс сөз. Бир лайнерлер да ушундай мамиле кылышат (//) жана көп сап (/*) комментарийлер.
Бул жерде тилдин дээрлик бүт ички түзүлүшү аяктайт. Калганынын баары (анын ичинде башкаруу конструкциялары) сөздөр катары аныкталат (же ички, мисалы, арифметикалык операциялар жана жаңы сөздөрдү аныктоо; же "стандарттык китепканада" аныкталган Fift.fif, папкада жайгашкан crypto/fift булактарда).
Fift программасында жөнөкөй мисал:
{ dup =: x dup * =: y } : setxy
3 setxy x . y . x y + .
7 setxy x . y . x y + .
Биринчи сап жаңы сөздү аныктайт setxy (префикске көңүл буруңуз {, бул жабуунун алдында блокту түзөт } жана префикс :, бул чындыгында сөздү аныктайт). setxy стектин башынан бир санды алат, аны глобалдык катары аныктайт (же кайра аныктайт). туруктууx, жана бул сандын квадраты туруктуу y (Туруктуулардын маанилери кайра аныкталышы мүмкүн экенин эске алып, мен аларды өзгөрмө деп атаганды жакшы көрөм, бирок мен тилдеги ат коюу конвенциясын сактайм).
Кийинки эки сап стекке бир номерди коюп, чалышат setxy, анда туруктуулардын маанилери көрсөтүлөт x, y (сөз чыгаруу үчүн колдонулат .), эки константа тең стекке жайгаштырылат, жыйынтыкталат жана натыйжа да басылып чыгарылат. Натыйжада биз көрөбүз:
3 9 12 ok
7 49 56 ok
(«OK» сабы интерактивдүү киргизүү режиминде учурдагы сапты иштеп чыккандан кийин котормочу тарабынан басылып чыгат)
Бул коркунучтуу файл акылдуу келишим түзүү үчүн - ал файлга жайгаштырылат new-wallet-query.boc аткарылгандан кийин. Көңүл буруңуз, бул жерде TON виртуалдык машинасы үчүн башка ассемблер тили колдонулат (мен ага кеңири токтолбойм), анын көрсөтмөлөрү блокчейнге жайгаштырылат.
Ошентип, TVM үчүн ассемблер Fiftте жазылган - бул ассемблердин булактары файлда crypto/fift/Asm.fif жана коддун жогорудагы бөлүгүнүн башында туташтырылган.
Эмне дейм, Николай Дуров жаңы программалоо тилдерин түзүүнү жакшы көрөт окшойт :)
Акылдуу келишим түзүү жана TON менен өз ара аракеттенүү
Ошентип, биз жогоруда сүрөттөлгөндөй TON кардарын жана Fift котормочуну чогултуп, тил менен тааныштык деп коёлу. Кантип азыр акылдуу келишим түзүү керек? Бул файлда сүрөттөлгөн КАНТИП, булактарга тиркелет.
TON менен эсептер
Мен сүрөттөгөндөй TON карап чыгуу, бул тармак бирден ашык блокчейнди камтыйт - бир жалпы бири бар, деп аталган. "мастер чынжыр", ошондой эле 32 биттик сан менен аныкталган кошумча "иш чынжырларынын" ыктыярдуу саны. Мастерчейндин -1 идентификатору бар, ага кошумча 0 идентификатору бар “базалык” жумушчу чынжырды да колдонсо болот.Ар бир жумушчу чынжырдын өзүнүн конфигурациясы болушу мүмкүн. Ички ар бир жумушчу чынжыр shardchains бөлүнөт, бирок бул эстен чыгарбоо керек ишке ашыруу детал болуп саналат.
Бир жумушчу чынжырдын ичинде өзүнүн account_id идентификаторлору бар көптөгөн аккаунттар сакталат. Мастер чынжыр жана нөл жумушчу чынжыр үчүн алар 256 бит узундугун түзөт. Ошентип, эсептин идентификатору, мисалы, мындайча жазылган:
Бул "чийки" формат: адегенде иш чынжырчасынын идентификатору, андан кийин кош чекит жана он алтылык белгидеги эсеп ID.
Мындан тышкары, кыскартылган формат бар - жумушчу чынжырдын номери жана эсеп дареги экилик формада коддолгон, аларга текшерүү суммасы кошулат жана мунун баары Base64те коддолгон:
Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb
Бул жазуу форматын билип, биз буйрукту колдонуп, сыноо кардары аркылуу эсептин учурдагы абалын сурай алабыз
[ 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}
Биз көрсөтүлгөн жумушчу чынжырдын DHT сакталган түзүмүн көрөбүз. Мисалы, талаада storage.balance учурдагы эсеп балансы болуп саналат, д storage.state.code - акылдуу келишим коду, жана storage.state.data - анын учурдагы маалыматтары. Сураныч, TON маалымат сактагычы - Клетка, клеткалар - дарак сымал, ар бир уячанын өзүнүн маалыматтары да, кошумча уячалары да болушу мүмкүн экенин эске алыңыз. Бул акыркы саптарда чегинүү катары көрсөтүлгөн.
Акылдуу келишим түзүү
Эми ушундай структураны өзүбүз түзөлү (бул BOC деп аталат - клеткалардын баштыгы) Fift тилин колдонуу. Бактыга жараша, сиз акылдуу келишимди өзүңүз жазуунун кереги жок - папкада crypto/block булак архивинен файл бар new-wallet.fif, бул бизге жаңы капчыкты түзүүгө жардам берет. Аны чогултулган кардар менен папкага көчүрөлү (~/liteclient-build, эгерде сиз жогорудагы нускамаларды аткарсаңыз). Мен анын мазмунун Fiftтеги коддун мисалы катары келтирдим.
бул <source-directory> таңгактан чыгарылган булактарга жол менен алмаштырылышы керек («~» белгиси, тилекке каршы, бул жерде колдонууга болбойт, толук жол керек). Ачкычты колдонуунун ордуна -I чөйрө өзгөрмөсүн аныктай аласыз FIFTPATH жана бул жолду ага сал.
Файлдын аты менен Fiftти ишке киргизгенден бери new-wallet.fif, ал аны аткарат жана чыгат. Эгер файлдын атын калтырсаңыз, котормочу менен интерактивдүү ойной аласыз.
Аткаруудан кийин, консолдо ушул сыяктуу нерсе көрсөтүлүшү керек:
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)
Бул ID менен капчык дегенди билдирет -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (же ошол эле нерсе, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) ийгиликтүү түзүлдү. Тиешелүү код файлда болот new-wallet-query.boc, анын дареги new-wallet.addr, жана купуя ачкыч ичинде new-wallet.pk (сак болуңуз – скриптти кайра иштетүү бул файлдарды кайра жазат).
Албетте, TON тармагы бул капчык жөнүндө азырынча билбейт, ал ушул файлдар түрүндө гана сакталат. Эми ал тармакка жүктөлүшү керек. Бирок, маселе акылдуу келишим түзүү үчүн комиссия төлөшү керек, жана сиздин эсеп балансы дагы эле нөл болуп саналат.
Жумуш режиминде бул көйгөй биржадан граммды сатып алуу (же башка капчыктан которуу) менен чечилет. Ооба, азыркы сыноо режиминде атайын акылдуу келишим түзүлдү, андан сиз 20 граммга чейин сурасаңыз болот.
Башка бирөөнүн акылдуу келишимине суроо-талапты түзүү
Биз граммдарды ушинтип солго жана оңго тараткан акылдуу келишимге өтүнүч келтиребиз. Ошол эле папкада crypto/block файлды табуу 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
Ошондой эле биз аны чогултулган кардар менен папкага сактайбыз, бирок биз бешинчи сапты оңдойбуз - саптын алдында "constant dest_addr". Келгиле, аны мурда түзгөн капчыктын дареги менен алмаштыралы (толук, кыскартылган эмес). Башына “-1:” деп жазуунун кереги жок, анын ордуна “0x” деп башына коюңуз.
Сиз ошондой эле сызыкты өзгөртө аласыз 6.666 Gram*/ constant amount — бул сиз сурап жаткан грамдагы сумма (20дан ашык эмес). Эгер сиз бүтүн санды көрсөтсөңүз да, ондук чекти калтырыңыз.
Акыр-аягы, сиз сызыкты тууралоо керек 0x00000011 constant seqno. Бул жерде биринчи сан - граммдарды берүү эсебинде сакталган учурдагы катар номери. Кайдан алсам болот? Жогоруда айтылгандай, кардарды баштап, иштетиңиз:
last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d
0000000D саны (сиздики чоңураак болот) тизмеге алмаштырылышы керек болгон катар номери testgiver.fif.
Болду, файлды сактап, иштетиңиз (./crypto/fift testgiver.fif). Чыгуу файл болот wallet-query.boc. Бул түзүлөт билдирүү башка бирөөнүн акылдуу келишимине - "ушунча граммды баланча эсепке которуу" өтүнүчү.
Кардардын жардамы менен биз аны тармакка жүктөйбүз:
> 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
Азыр чалсаң last, анан кайра биз граммды сураган эсептин статусун сурасак, анын катар номери бирге көбөйгөнүн көрүшүбүз керек - бул биздин эсепке акча жөнөтүлгөнүн билдирет.
Акыркы кадам калды - капчыгыбыздын кодун жүктөп алыңыз (анын балансы буга чейин толукталган, бирок акылдуу келишим кодусуз биз аны башкара албайбыз). Биз аткарабыз sendfile new-wallet-query.boc - жана ушуну менен, сизде TON тармагында өз капчыгыңыз бар (ал азыр сыноо болсо да).
Чыгуучу транзакцияларды түзүү
Түзүлгөн эсептин балансынан акча которуу үчүн файл бар crypto/block/wallet.fif, ал да чогулган кардар менен папкага жайгаштырылышы керек.
Мурунку кадамдарга окшоп, сиз өткөрүп жаткан сумманы, алуучунун дарегин (dest_addr) жана капчыгыңыздын секносун тууралашыңыз керек (ал капчыкты инициализациялагандан кийин 1ге барабар жана ар бир чыккан транзакциядан кийин 1ге көбөйөт - сиз Каттоо эсебиңиздин абалын суроо менен караңыз). Тесттер үчүн, мисалы, менин капчыгымды колдоно аласыз - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.
Ишке киргизүүдө (./crypto/fift wallet.fif) скрипт сиздин капчыгыңыздын дарегин (сиз өткөрүп жаткан жерден) жана анын жеке ачкычын файлдардан алат new-wallet.addr и new-wallet.pk, жана кабыл алынган билдирүү жазылат new-wallet-query.boc.
Мурдагыдай эле, транзакцияны түз жүргүзүү үчүн чалыңыз sendfile new-wallet-query.boc кардарда. Андан кийин, блокчейндин абалын жаңыртууну унутпаңыз (last) жана капчыгыбыздын балансы жана секно өзгөргөнүн текшериңиз (getaccount <account_id>).
Болду, эми биз ТОНдо акылдуу келишимдерди түзүп, аларга суроо-талаптарды жөнөтө алабыз. Көрүнүп тургандай, учурдагы функция, мисалы, графикалык интерфейси бар дагы достук капчыкты жасоо үчүн жетиштүү (бирок, ал мессенжердин бир бөлүгү катары жеткиликтүү болот деп күтүлүүдө).
Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.
Сиз TON, TVM, Fift анализи менен макалаларды улантууну каалайсызбы?
Ооба, мен ТОНдун жалпы баяндамасы менен макалалар сериясынын бүтүшүн күтүп жатам
Ооба, бешинчи тил жөнүндө көбүрөөк окуу кызыктуу
Ооба, мен TON Virtual Machine жана анын ассемблери жөнүндө көбүрөөк билгим келет
Жок, мунун эч бири кызык эмес
39 колдонуучу добуш берди. 12 колдонуучу добуш берүүдөн баш тартты.
Telegramдын TONду ишке киргизүү пландары жөнүндө кандай ойдосуз?
Бул долбоордон үмүтүм чоң
Мен жөн гана анын өнүгүшүнө кызыгуу менен көз салып жатам.
Мен ишенбейм жана анын ийгилигинен күмөнүм бар.
Мен бул демилгени ийгиликсиз жана кеңири масса үчүн керексиз деп эсептейм
47 колдонуучу добуш берди. 12 колдонуучу добуш берүүдөн баш тартты.