Сыноо кардары 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 аркылуу жасайм; Башка системаларда куруунун ийгилигине кепилдик бере албайм.

  1. Жүктөп алыңыз жана таңгактан чыгарыңыз булак архиви. Акыркы версиясын жүктөп алуу маанилүү, анткени бул этапта артка шайкештикке кепилдик жок.

  2. Системада make, cmake (3.0.2 версиясы же андан жогору), OpenSSL (анын ичинде C баш файлдары), g++ же clang акыркы версиялары орнотулганын текшериңиз. Мен эч нерсе орнотуунун кереги жок болчу, баары ошол замат чогулду.

  3. Булактар ​​папкага салынган деп коёлу ~/lite-client. Андан өзүнчө, чогулган долбоор үчүн бош папканы түзүңүз (мисалы, ~/liteclient-build), жана андан (cd ~/liteclient-build) буйруктарды чакырыңыз:

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

    Сыноо кардары TON (Telegram Open Network) жана акылдуу келишимдер үчүн жаңы Fift тили

    акылдуу келишимдер үчүн Fift тил котормочу куруу үчүн (төмөндө бул тууралуу көбүрөөк), биз да чалабыз

    cmake --build . --target fift

  4. Учурдагы жүктөп алыңыз тарам билэ сыноо тармагына туташуу жана аны чогултулган кардар менен папкага коюу.

  5. Даяр, сиз кардарды баштасаңыз болот:

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

Эгер баары туура аткарылса, сиз төмөнкүдөй нерсени көрүшүңүз керек:

Сыноо кардары TON (Telegram Open Network) жана акылдуу келишимдер үчүн жаңы Fift тили

Көрүнүп тургандай, бир нече жеткиликтүү буйруктар бар:
help — бул буйруктардын тизмесин көрсөтүү;
quit - чыгып кет;
time — серверде учурдагы убакытты көрсөтүү;
status — байланыш жана жергиликтүү маалымат базасынын абалын көрсөтүү;
last — блокчейндин абалын жаңыртуу (акыркы блокту жүктөп алуу). Тармактын учурдагы абалын көрүп турганыңызга ынануу үчүн бул буйрукту ар кандай суроо-талаптардан мурун иштетүү маанилүү.
sendfile <filename> — TON тармагына жергиликтүү файлды жүктөө. Тармак менен өз ара аракеттенүү ушундайча ишке ашат - анын ичинде, мисалы, жаңы акылдуу келишимдерди түзүү жана эсептердин ортосунда акча каражаттарын которуу өтүнүчү;
getaccount <address> — учурдагы көрсөтүү (буйрук аткарылган учурда) last) көрсөтүлгөн дареги бар эсептин абалы;
privkey <filename> — жеке ачкычты жергиликтүү файлдан жүктөө.

Эгерде, кардарды баштаганда, сиз папканы ага опцияны колдонуп өткөрүп берсеңиз -D, анда ал ага мастерчейндин акыркы блогун кошот:

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

Эми биз кызыктуураак нерселерге өтсөк болот - 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» сабы интерактивдүү киргизүү режиминде учурдагы сапты иштеп чыккандан кийин котормочу тарабынан басылып чыгат)

Ооба, толук коддуу мисал:

"Asm.fif" include

-1 constant wc  // create a wallet in workchain -1 (masterchain)

// Create new simple wallet
<{  SETCP0 DUP IFNOTRET INC 32 THROWIF  // return if recv_internal, fail unless recv_external
    512 INT LDSLICEX DUP 32 PLDU   // sign cs cnt
    c4 PUSHCTR CTOS 32 LDU 256 LDU ENDS  // sign cs cnt cnt' pubk
    s1 s2 XCPU            // sign cs cnt pubk cnt' cnt
    EQUAL 33 THROWIFNOT   // ( seqno mismatch? )
    s2 PUSH HASHSU        // sign cs cnt pubk hash
    s0 s4 s4 XC2PU        // pubk cs cnt hash sign pubk
    CHKSIGNU              // pubk cs cnt ?
    34 THROWIFNOT         // signature mismatch
    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
// code
<b 0 32 u, 
   newkeypair swap dup constant wallet_pk 
   "new-wallet.pk" B>file
   B, 
b> // data
// no libraries
<b b{00110} s, rot ref, swap ref, b>  // create StateInit
dup ."StateInit: " <s csr. cr
dup hash dup constant wallet_addr
."new wallet address = " wc . .": " dup x. cr
wc over 7 smca>$ type cr
256 u>B "new-wallet.addr" B>file
<b 0 32 u, b>
dup ."signing message: " <s csr. cr
dup hash wallet_pk ed25519_sign_uint rot
<b b{1000100} s, wc 8 i, wallet_addr 256 u, b{000010} s, swap <s s, b{0} s, swap B, swap <s s, b>
dup ."External message for initialization is " <s csr. cr
2 boc+>B dup Bx. cr
"new-wallet-query.boc" tuck B>file
."(Saved to file " type .")" cr

Бул коркунучтуу файл акылдуу келишим түзүү үчүн - ал файлга жайгаштырылат new-wallet-query.boc аткарылгандан кийин. Көңүл буруңуз, бул жерде TON виртуалдык машинасы үчүн башка ассемблер тили колдонулат (мен ага кеңири токтолбойм), анын көрсөтмөлөрү блокчейнге жайгаштырылат.

Ошентип, TVM үчүн ассемблер Fiftте жазылган - бул ассемблердин булактары файлда crypto/fift/Asm.fif жана коддун жогорудагы бөлүгүнүн башында туташтырылган.

Эмне дейм, Николай Дуров жаңы программалоо тилдерин түзүүнү жакшы көрөт окшойт :)

Акылдуу келишим түзүү жана TON менен өз ара аракеттенүү

Ошентип, биз жогоруда сүрөттөлгөндөй TON кардарын жана Fift котормочуну чогултуп, тил менен тааныштык деп коёлу. Кантип азыр акылдуу келишим түзүү керек? Бул файлда сүрөттөлгөн КАНТИП, булактарга тиркелет.

TON менен эсептер

Мен сүрөттөгөндөй TON карап чыгуу, бул тармак бирден ашык блокчейнди камтыйт - бир жалпы бири бар, деп аталган. "мастер чынжыр", ошондой эле 32 биттик сан менен аныкталган кошумча "иш чынжырларынын" ыктыярдуу саны. Мастерчейндин -1 идентификатору бар, ага кошумча 0 идентификатору бар “базалык” жумушчу чынжырды да колдонсо болот.Ар бир жумушчу чынжырдын өзүнүн конфигурациясы болушу мүмкүн. Ички ар бир жумушчу чынжыр shardchains бөлүнөт, бирок бул эстен чыгарбоо керек ишке ашыруу детал болуп саналат.

Бир жумушчу чынжырдын ичинде өзүнүн account_id идентификаторлору бар көптөгөн аккаунттар сакталат. Мастер чынжыр жана нөл жумушчу чынжыр үчүн алар 256 бит узундугун түзөт. Ошентип, эсептин идентификатору, мисалы, мындайча жазылган:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Бул "чийки" формат: адегенде иш чынжырчасынын идентификатору, андан кийин кош чекит жана он алтылык белгидеги эсеп ID.

Мындан тышкары, кыскартылган формат бар - жумушчу чынжырдын номери жана эсеп дареги экилик формада коддолгон, аларга текшерүү суммасы кошулат жана мунун баары Base64те коддолгон:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Бул жазуу форматын билип, биз буйрукту колдонуп, сыноо кардары аркылуу эсептин учурдагы абалын сурай алабыз

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Биз мындай нерсени алабыз:

[ 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теги коддун мисалы катары келтирдим.

Бул файлды төмөнкүдөй аткарыңыз:

./crypto/fift -I"<source-directory>/crypto/fift" new-wallet.fif

бул <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

Акыр-аягы, акылдуу келишим маалыматтарын камтыйт

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

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 (Telegram Open Network) жана акылдуу келишимдер үчүн жаңы Fift тили

Болду, эми биз ТОНдо акылдуу келишимдерди түзүп, аларга суроо-талаптарды жөнөтө алабыз. Көрүнүп тургандай, учурдагы функция, мисалы, графикалык интерфейси бар дагы достук капчыкты жасоо үчүн жетиштүү (бирок, ал мессенжердин бир бөлүгү катары жеткиликтүү болот деп күтүлүүдө).

Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.

Сиз TON, TVM, Fift анализи менен макалаларды улантууну каалайсызбы?

  • Ооба, мен ТОНдун жалпы баяндамасы менен макалалар сериясынын бүтүшүн күтүп жатам

  • Ооба, бешинчи тил жөнүндө көбүрөөк окуу кызыктуу

  • Ооба, мен TON Virtual Machine жана анын ассемблери жөнүндө көбүрөөк билгим келет

  • Жок, мунун эч бири кызык эмес

39 колдонуучу добуш берди. 12 колдонуучу добуш берүүдөн баш тартты.

Telegramдын TONду ишке киргизүү пландары жөнүндө кандай ойдосуз?

  • Бул долбоордон үмүтүм чоң

  • Мен жөн гана анын өнүгүшүнө кызыгуу менен көз салып жатам.

  • Мен ишенбейм жана анын ийгилигинен күмөнүм бар.

  • Мен бул демилгени ийгиликсиз жана кеңири масса үчүн керексиз деп эсептейм

47 колдонуучу добуш берди. 12 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу