Мизоҷи санҷиши TON (Шабакаи Open Telegram) ва забони нави Fift барои шартномаҳои интеллектуалӣ

Зиёда аз як сол пеш дар бораи нақшаҳои мессенҷери Telegram оид ба баровардани шабакаи ғайримарказии худ маълум шуд Шабакаи кушодаи Telegram. Пас аз он як ҳуҷҷати ҳаҷми техникӣ дастрас шуд, ки гӯё онро Николай Дуров навиштааст ва сохтори шабакаи ояндаро тавсиф кардааст. Барои онҳое, ки онро пазмон шуда буданд, ман тавсия медиҳам, ки шарҳи ман дар бораи ин ҳуҷҷатро хонед (қисми 1, қисми 2; кисми сейум, афсус, хануз дар накшахо чанг чамъ мекунад).

Аз он вақт инҷониб, дар бораи вазъи рушди ТОН то чанд рӯз пеш (дар яке аз каналҳои ғайрирасмӣ) пайванд ба саҳифа пайдо нашуд https://test.ton.org/download.htmlдар куҷо ҷойгиранд:
ton-test-liteclient-full.tar.xz — манбаъҳои муштарии сабук барои шабакаи санҷишии TON;
ton-lite-client-test1.config.json — файли конфигуратсия барои пайвастшавӣ ба шабакаи санҷишӣ;
README -маълумот дар бораи васл ва ба кор андохтани муштарӣ;
ТАРЗИ — дастурҳои зина ба зина дар бораи чӣ гуна сохтани шартномаи интеллектуалӣ бо истифода аз муштарӣ;
ton.pdf — ҳуҷҷати навшуда (аз 2 марти соли 2019) бо шарҳи техникии шабакаи TON;
tvm.pdf — тавсифи техникии TVM (TON Virtual Machine, TON virtual machine);
tblkch.pdf — тавсифи техникии блокчейни TON;
fifthbase.pdf - тавсифи забони нави Fift, ки барои сохтани шартномаҳои интеллектуалӣ дар TON пешбинӣ шудааст.

Такрор мекунам, ягон тасдиқи расмии саҳифа ва ҳамаи ин ҳуҷҷатҳо аз 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 (Шабакаи Open Telegram) ва забони нави Fift барои шартномаҳои интеллектуалӣ

    Барои сохтани тарҷумони забони Fift барои шартномаҳои интеллектуалӣ (бештар дар бораи он дар зер), мо низ занг мезанем

    cmake --build . --target fift

  4. Навори ҷорӣро зеркашӣ кунед файли конфигуратсия барои пайваст шудан ба шабакаи санҷишӣ ва онро дар ҷузвдон бо муштарии ҷамъшуда ҷойгир кунед.

  5. Иҷро шудааст, шумо метавонед муштариро оғоз кунед:

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

Агар ҳама чиз дуруст анҷом дода шуда бошад, шумо бояд чунин чизеро бинед:

Мизоҷи санҷиши TON (Шабакаи Open Telegram) ва забони нави Fift барои шартномаҳои интеллектуалӣ

Тавре ки мо мебинем, чанд фармонҳои дастрас мавҷуданд:
help — ин рӯйхати фармонҳоро намоиш диҳед;
quit - баромадан;
time — нишон додани вақти ҷорӣ дар сервер;
status — нишон додани пайвастшавӣ ва ҳолати пойгоҳи додаҳои маҳаллӣ;
last — ҳолати блокчейнро навсозӣ кунед (блоки охиринро зеркашӣ кунед). Муҳим аст, ки ин фармонро пеш аз ҳама дархостҳо иҷро кунед, то боварӣ ҳосил кунед, ки шумо ҳолати кунунии шабакаро мебинед.
sendfile <filename> — файли локалиро ба шабакаи TON бор кунед. Ҳамин тавр ҳамкорӣ бо шабака сурат мегирад - аз ҷумла, масалан, эҷоди шартномаҳои нави интеллектуалӣ ва дархостҳо барои интиқоли маблағҳо байни ҳисобҳо;
getaccount <address> — ҷорӣ нишон диҳед (дар вақти иҷро шудани фармон) last) ҳолати ҳисоб бо суроғаи зикршуда;
privkey <filename> — калиди хусусиро аз файли маҳаллӣ бор кунед.

Агар ҳангоми оғоз кардани муштарӣ шумо бо истифода аз опсия папкаро ба он интиқол диҳед -D, пас ӯ блоки охирини masterchain ба он илова мекунад:

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

Акнун мо метавонем ба чизҳои ҷолибтар гузарем - забони Fift-ро омӯзед, кӯшиш кунед, ки шартномаи оқилона тартиб диҳед (масалан, ҳамёни санҷишӣ созед), онро ба шабака бор кунед ва кӯшиш кунед, ки маблағро байни ҳисобҳо интиқол диҳед.

Забони панҷум

Аз хуччат fifthbase.pdf шумо метавонед фаҳмед, ки дастаи Telegram забони нави стекро барои сохтани шартномаҳои интеллектуалӣ эҷод кардааст Панҷ (аз афташ аз ракам панҷум, монанд ба Forth, забоне, ки панҷум бо он муштаракоти зиёд дорад).

Ҳуҷҷат хеле ҳаҷм, 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 истифода мешавад (ман ба таври муфассал дар бораи он таваққуф намекунам), ки дастурҳои он дар blockchain ҷойгир карда мешаванд.

Ҳамин тариқ, ассемблер барои TVM дар Fift навишта шудааст - манбаъҳои ин ассемблер дар файл ҳастанд crypto/fift/Asm.fif ва дар ибтидои рамзи дар боло зикршуда пайваст карда шудаанд.

Ман чӣ гуфта метавонам, аз афташ Николай Дуров танҳо эҷоди забонҳои нави барномасозиро дӯст медорад :)

Эҷоди шартномаи оқилона ва ҳамкорӣ бо TON

Пас, биёед фарз кунем, ки мо муштарии TON ва тарҷумони Fift-ро тавре ки дар боло тавсиф шудааст, ҷамъ кардем ва бо забон ошно шудем. Ҳоло чӣ гуна бояд шартномаи оқилона эҷод кард? Ин дар файл тавсиф шудааст ТАРЗИ, ба манбаъҳо замима карда мешавад.

Ҳисобҳо дар ТОН

Тавре ки ман дар Баррасии TON, ин шабака зиёда аз як blockchain дорад - як чизи умумӣ вуҷуд дорад, ба истилоҳ. "занҷири асосӣ", инчунин шумораи худсаронаи "занҷирҳои корӣ", ки бо рақами 32-бит муайян карда шудаанд. Мастерчейн идентификатори -1 дорад, илова бар он занҷири кории "базавӣ" бо идентификатори 0 низ метавонад истифода шавад.Ҳар як занҷири корӣ метавонад конфигуратсияи худро дошта бошад. Дар дохили он, ҳар як занҷири корӣ ба шардчейнҳо тақсим карда мешавад, аммо ин тафсилоти амалӣ аст, ки дар хотир нигоҳ доштан лозим нест.

Дар як занҷири корӣ, ҳисобҳои зиёде нигоҳ дошта мешаванд, ки идентификаторҳои account_id-и худро доранд. Барои занҷири асосӣ ва занҷири кории сифр, онҳо 256 бит дарозанд. Ҳамин тариқ, идентификатори ҳисоб, масалан, чунин навишта мешавад:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ин формати "хом" аст: аввал ID занҷираи корӣ, баъд ду нуқта ва 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 дар муштарӣ. Пас аз ин, фаромӯш накунед, ки ҳолати blockchain (last) ва санҷед, ки тавозуни ва секнои ҳамёни мо тағир ёфтааст (getaccount <account_id>).

Мизоҷи санҷиши TON (Шабакаи Open Telegram) ва забони нави Fift барои шартномаҳои интеллектуалӣ

Ҳамааш ин аст, ҳоло мо метавонем дар TON шартномаҳои оқилона эҷод кунем ва ба онҳо дархост фиристем. Тавре ки шумо мебинед, функсияи ҷорӣ аллакай кофӣ аст, ки масалан, ҳамёни дӯстона бо интерфейси графикӣ созед (аммо интизор меравад, ки он аллакай ҳамчун як қисми паёмбар дастрас хоҳад шуд).

Танҳо корбарони сабтиномшуда метавонанд дар пурсиш иштирок кунанд. даромад, Лутфан.

Оё шумо ба идомаи мақолаҳо бо таҳлили TON, TVM, Fift таваҷҷӯҳ доред?

  • Бале, ман мунтазири анҷоми силсилаи мақолаҳо бо шарҳи умумии ТОН ҳастам

  • Бале, хондани бештар дар бораи забони Fift ҷолиб аст

  • Бале, ман мехоҳам дар бораи мошини виртуалии TON ва ассемблери он маълумоти бештар гирам

  • Не, ҳеҷ яке аз ин ҷолиб нест

39 корбар овоз доданд. 12 корбар худдорӣ карданд.

Шумо дар бораи нақшаҳои Telegram барои ба кор андохтани TON чӣ назар доред?

  • Ман аз ин лоиҳа умедҳои зиёд дорам

  • Ман танҳо рушди онро бо таваҷҷӯҳ мушоҳида мекунам.

  • Ман шубҳа дорам ва ба муваффақияти он шубҳа дорам.

  • Ман майл дорам, ки ин ташаббусро ноком ва барои оммаи васеъ нолозим донам

47 корбар овоз доданд. 12 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ