Nwalee TON onye ahịa (Telegram Open Network) yana asụsụ Fift ọhụrụ maka nkwekọrịta smart

Ihe karịrị otu afọ gara aga, ọ bịara mara banyere atụmatụ nke onye ozi Telegram ịhapụ netwọk nke ya Mepee Telegram network. Mgbe ahụ, akwụkwọ nkà na ụzụ dị egwu dị, nke e boro Nikolai Durov dere ma kọwaa usoro nke netwọk n'ọdịnihu. Maka ndị tụfuru ya, a na m akwado ka ị gụọ akụkọ m na-edegharị akwụkwọ a (akụkụ 1, akụkụ 2; nke atọ, Ewoo, ka na-anakọta uzuzu na draft).

Kemgbe ahụ, enwebeghị akụkọ dị mkpa gbasara ọnọdụ mmepe TON ruo ụbọchị ole na ole gara aga (na otu n'ime ọwa na-akwadoghị) njikọ na ibe ahụ apụtaghị https://test.ton.org/download.html, ebe dị:
ton-ule-liteclient-full.tar.xz - isi mmalite nke onye ahịa ọkụ maka netwọk ule TON;
ton-lite-client-test1.config.json - faịlụ nhazi maka ijikọ na netwọk ule;
README - ozi gbasara iwulite na ịmalite onye ahịa;
OTÚ - ntuziaka nzọụkwụ site na ịmepụta nkwekọrịta smart site na iji onye ahịa;
ton.pdf - akwụkwọ emelitere (nke emere na Machị 2, 2019) yana nyocha teknụzụ nke netwọkụ TON;
tvm.pdf - nkọwa teknụzụ nke TVM (TON Virtual Machine, TON mebere igwe);
tblkch.pdf - nkọwa teknụzụ nke blockchain TON;
nke ise.pdf - nkọwa nke asụsụ Fift ọhụrụ, emebere maka imepụta nkwekọrịta smart na TON.

M na-ekwughachi, enweghị nkwenye gọọmentị nke ibe na akwụkwọ ndị a niile sitere na Telegram, mana olu nke ihe ndị a na-eme ka ha bụrụ ihe ezi uche dị na ya. Mepee onye ahịa ebipụtara n'ihe ize ndụ nke onwe.

Iwuli onye ahịa ule

Mbụ, ka anyị gbalịa wulite ma mee onye ahịa ule - ọ dabara nke ọma, README na-akọwa usoro a dị mfe n'ụzọ zuru ezu. M ga-eme nke a site na iji macOS 10.14.5 dị ka ihe atụ; Enweghị m ike ịkwụ ụgwọ maka ịga nke ọma nke iwu na sistemụ ndị ọzọ.

  1. Budata ma bupụ ya isi mmalite Archive. Ọ dị mkpa ibudata ụdị ọhụrụ n'ihi na anaghị ekwe nkwa ndakọrịta azụ n'oge a.

  2. Gbaa mbọ hụ na etinyere ụdị nke make, cmake (ụdị 3.0.2 ma ọ bụ karịa), OpenSSL (gụnyere faịlụ nkụnye eji isi mee C), g++ ma ọ bụ clang na sistemụ. Enweghị m ịwụnye ihe ọ bụla, ihe niile gbakọtara ozugbo.

  3. Ka anyị were na-ebupughị isi mmalite ndị ahụ n'ime nchekwa ~/lite-client. Dị iche na ya, mepụta folda efu maka ọrụ a gbakọtara (dịka ọmụmaatụ, ~/liteclient-build), na site na ya (cd ~/liteclient-build) kpọọ iwu ndị a:

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

    Nwalee TON onye ahịa (Telegram Open Network) yana asụsụ Fift ọhụrụ maka nkwekọrịta smart

    Iji wuo onye ntụgharị asụsụ Fift maka nkwekọrịta smart (ihe gbasara ya n'okpuru), anyị na-akpọkwa

    cmake --build . --target fift

  4. Budata nke dị ugbu a nhazi faịlụ iji jikọọ na netwọk ule wee tinye ya na nchekwa ya na onye ahịa gbakọtara.

  5. Emela, ị nwere ike ịmalite onye ahịa:

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

Ọ bụrụ na emechara ihe niile nke ọma, ị ga-ahụ ihe dị ka nke a:

Nwalee TON onye ahịa (Telegram Open Network) yana asụsụ Fift ọhụrụ maka nkwekọrịta smart

Dịka anyị nwere ike ịhụ, enwere iwu ole na ole dị:
help - gosi ndepụta iwu a;
quit - pụọ;
time - gosi oge dị ugbu a na ihe nkesa;
status - gosi njikọ na ọnọdụ nchekwa data mpaghara;
last - melite steeti blockchain (budata ngọngọ ikpeazụ). Ọ dị mkpa ịme iwu a tupu arịrịọ ọ bụla iji jide n'aka na ị na-ahụ ọnọdụ netwọk ugbu a.
sendfile <filename> - bulite faịlụ mpaghara na netwọkụ TON. Nke a bụ otú mmekọrịta na netwọk si eme - gụnyere, dịka ọmụmaatụ, ịmepụta nkwekọrịta smart smart ọhụrụ na arịrịọ maka ịnyefe ego n'etiti akaụntụ;
getaccount <address> - gosi ihe dị ugbu a (n'oge e mere iwu ahụ) last) ọnọdụ nke akaụntụ na adreesị akọwapụtara;
privkey <filename> - Ibunye igodo nzuzo site na faịlụ mpaghara.

Ọ bụrụ na, mgbe ịmalite onye ahịa, ị na-ebufe folda na ya site na iji nhọrọ -D, mgbe ahụ, ọ ga-agbakwunye ngọngọ ikpeazụ nke masterchain n'ime ya:

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

Ugbu a, anyị nwere ike ịga n'ihu na ihe ndị ọzọ na-adọrọ mmasị - mụta asụsụ Fift, gbalịa ikpokọta nkwekọrịta smart (dịka ọmụmaatụ, ịmepụta obere akpa ule), bulite ya na netwọk ma gbalịa ịnyefe ego n'etiti akaụntụ.

Asụsụ ise

Site na akwụkwọ ahụ nke ise.pdf ị nwere ike ịchọpụta na ndị otu Telegram emepụtala asụsụ nchịkọta ọhụrụ iji mepụta nkwekọrịta smart Ise (o doro anya site na ọnụọgụgụ ise, yiri Forth, asụsụ nke ise nwere ọtụtụ ihe jikọrọ ya).

Akwụkwọ a dị oke egwu, ibe 87, agaghị m akọwaghachi ọdịnaya ya n'ụzọ zuru ezu n'ime usoro isiokwu a (opekata mpe n'ihi na agụchabeghị m ya n'onwe m :). M ga-elekwasị anya na isi ihe ma nye ihe atụ koodu abụọ n'asụsụ a.

N'ọkwa bụ isi, syntax Fift dị mfe: koodu ya nwere okwu, na-ekewakarị site na oghere ma ọ bụ nkwụsịtụ ahịrị (ihe pụrụ iche: okwu ụfọdụ anaghị achọ onye na-ekewapụ onwe ha). Nke ọ bụla okwu ahụ bụ usoro nwere mmetụta nke mkpụrụedemede dabara na ụfọdụ nkọwa (ihe siri ike, ihe onye ntụgharị kwesịrị ime mgbe ọ zutere okwu a). Ọ bụrụ na enweghị nkọwapụta nke okwu, onye ntụgharị okwu na-anwa ịtụgharị ya dị ka ọnụọgụ ma tinye ya na ngwugwu. Site n'ụzọ, ọnụ ọgụgụ ebe a - na mberede - 257-bit integers, na ọ dịghị ụmụ irighiri ihe ọ bụla - ọzọ kpomkwem, ha ozugbo ghọọ a ụzọ nke integers, na-akpụ numerator na denominator nke a ezi akụkụ.

Okwu na-ejikarị ụkpụrụ emekọrịta ihe n'elu nchịkọta. Ụdị okwu dị iche iche - prefix - anaghị eji nchịkọta, mana mkpụrụedemede ndị na-esote sitere na faịlụ isi mmalite. Dịka ọmụmaatụ, otu a ka esi emejuputa atumatu eriri - agwa okwu (") bụ okwu prefix nke na-achọ okwu na-esote (mmechi), ma na-akwanye eriri n'etiti ha na nchịkọta. Otu-liners na-akpa àgwà otu ụzọ ahụ (//na multiline (/*) kwuru.

Nke a bụ ebe ihe fọrọ nke nta ka ọ bụrụ usoro niile dị n'ime nke asụsụ na-akwụsị. A kọwapụtara ihe ọ bụla ọzọ (gụnyere njikwa njikwa) dị ka okwu (ma nke dị n'ime, dị ka arụmọrụ mgbakọ na mwepụ na nkọwa nke okwu ọhụrụ; ma ọ bụ kọwaa na "ọbá akwụkwọ ọkọlọtọ") Fift.fif, nke dị na folda ahụ crypto/fift na isi mmalite).

Mmemme ihe atụ dị mfe na Fift:

{ dup =: x dup * =: y } : setxy
3 setxy x . y . x y + .
7 setxy x . y . x y + .

Ahịrị nke mbụ na-akọwa mkpụrụokwu ọhụrụ setxy (rịba ama prefix {, nke na-emepụta ngọngọ tupu mmechi } na nganiihu :, nke na-akọwa okwu n'ezie). setxy na-ewe nọmba site n'elu nke ngwugwu ahụ, kọwaa (ma ọ bụ kọwapụta) ya dị ka nke zuru ụwa ọnụ na-adịgide adịgide x, na square nke nọmba a dị ka mgbe niile y (Nyere na ụkpụrụ nke constants nwere ike ịkọwapụta, ọ ga-akara m mma ịkpọ ha mgbanwe, mana m na-agbaso mgbakọ aha na asụsụ).

Ahịrị abụọ na-esote tinye nọmba na tojupụtara wee kpọọ setxy, mgbe ahụ, a na-egosipụta ụkpụrụ nke ndị na-agbanwe agbanwe x, y (a na-eji okwu ahụ maka mmepụta .), A na-etinye ihe ndị na-adịgide adịgide na nchịkọta, chịkọtara, na-ebipụtakwa nsonaazụ ya. N'ihi ya, anyị ga-ahụ:

3 9 12 ok
7 49 56 ok

(Onye ntụgharị okwu na-ebipụta ahịrị “ok” mgbe ọ rụchara nhazi ahịrị dị ugbu a na ọnọdụ ntinye mmekọrịta)

Ọfọn, nkọwa koodu zuru oke:

"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

Faịlụ a na-atụ egwu bụ maka ịmepụta nkwekọrịta smart - a ga-etinye ya na faịlụ new-wallet-query.boc mgbe e gbuchara. Biko mara na a na-eji asụsụ mgbakọ ọzọ ebe a maka TON Virtual Machine (Agaghị m ebi na ya n'ụzọ zuru ezu), ntụziaka nke a ga-etinye na blockchain.

Ya mere, e dere onye na-agbakọta maka TVM na Fift - isi mmalite nke mgbakọ a dị na faịlụ ahụ. crypto/fift/Asm.fif ma jikọọ na mmalite nke koodu dị n'elu.

Kedu ihe m nwere ike ikwu, o doro anya na Nikolai Durov nwere mmasị ịmepụta asụsụ mmemme ọhụrụ :)

Ịmepụta nkwekọrịta smart na mmekọrịta na TON

Yabụ, ka anyị were na anyị ekpokọtala onye ahịa TON na onye ntụgharị okwu Fift dị ka akọwara n'elu wee mara asụsụ ahụ nke ọma. Kedu ka esi emepụta nkwekọrịta smart ugbu a? A kọwara nke a na faịlụ OTÚ, jikọtara na isi mmalite.

Akaụntụ dị na TON

Dị ka m kọwara na TON nyochaa, netwọk a nwere ihe karịrị otu blockchain - enwere otu nke a na-ahụkarị, nke a na-akpọ. "agbụ nna ukwu", yana ọnụ ọgụgụ aka ike nke "agbụ ọrụ", nke nọmba 32-bit chọpụtara. Masterchain nwere njirimara nke -1; na mgbakwunye na ya, a pụkwara iji ọrụ ọrụ "base" nwere ihe nchọpụta nke 0. Onye ọ bụla na-arụ ọrụ nwere ike inwe nhazi nke ya. N'ime ime, nke ọ bụla na-arụ ọrụ na-ekewa n'ime shardchains, ma nke a bụ nkọwa mmejuputa iwu nke na-adịghị mkpa ka e buru n'uche.

N'ime otu chain ọrụ, a na-echekwa ọtụtụ akaụntụ nwere njirimara akaụntụ_id nke ha. Maka agbụ nna ukwu na yinye ọrụ efu, ha dị 256 bit ogologo. Ya mere, edere ihe njirimara akaụntụ, dịka ọmụmaatụ, dịka nke a:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Nke a bụ usoro “raw”: nke mbụ ID ọrụ chain, emesia colon, yana ID akaụntụ na ndetu hexadecimal.

Na mgbakwunye, enwere usoro dị mkpụmkpụ - akara nọmba workchain na adreesị akaụntụ n'ụdị ọnụọgụ abụọ, a na-agbakwunye ha ndenye ego, ma etinyere ihe niile a na Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

N'ịmara usoro ndekọ a, anyị nwere ike ịrịọ ọnọdụ akaụntụ ugbu a site na onye ahịa nyocha site na iji iwu ahụ

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Anyị ga-enweta ihe dị ka nke a:

[ 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}

Anyị na-ahụ nhazi nke echekwara na DHT nke ọrụ ọrụ akọwapụtara. Dịka ọmụmaatụ, n'ọhịa storage.balance bụ nkwụnye ego akaụntụ ugbu a, in storage.state.code - smart nkwekọrịta koodu, na na storage.state.data - data ya ugbu a. Biko mara na nchekwa data TON - Cell, cell - dị ka osisi, sel ọ bụla nwere ike ịnwe ma data nke ya na mkpụrụ ndụ ụmụaka. Egosiri nke a dị ka ntinye n'ahịrị ikpeazụ.

Iwuli nkwekọrịta smart

Ugbu a, ka anyị mepụta ụdị usoro a n'onwe anyị (a na-akpọ ya BOC - akpa cell) iji asụsụ ise. Ọ dabara nke ọma, ịgaghị ede nkwekọrịta smart n'onwe gị - na nchekwa crypto/block enwere faịlụ sitere na ebe nchekwa isi mmalite new-wallet.fif, nke ga-enyere anyị aka ịmepụta obere akpa ọhụrụ. Ka anyị jiri onye ahịa gbakọtara detuo ya na folda ahụ (~/liteclient-build, ma ọ bụrụ na ị gbasoro ntuziaka dị n'elu). Ekwuru m ihe ndị dị n'ime ya n'elu dịka ọmụmaatụ koodu na Fift.

Mepee faịlụ a dị ka ndị a:

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

ọ bụ <source-directory> ga-eji ụzọ gaa na isi mmalite ndị a na-ebughị ibu dochie ya (akara "~", ọ dị mwute ikwu, enweghị ike iji ya mee ihe ebe a, a chọrọ ụzọ zuru ezu). Kama iji igodo -I ị nwere ike ịkọwapụta mgbanwe gburugburu ebe obibi FIFTPATH ma tinye ụzọ a n'ime ya.

Ebe ọ bụ na anyị malitere Fift na aha faịlụ new-wallet.fif, ọ ga-emezu ya wee pụọ. Ọ bụrụ na ịhapụ aha faịlụ ahụ, ị ​​nwere ike iji onye ntụgharị egwu egwu egwu.

Mgbe emechara, a ga-egosipụta ihe dị ka nke a na console:

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)

Nke a pụtara na obere akpa nwere ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (ma ọ bụ, gịnị bụ otu, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) emepụtara nke ọma. Koodu kwekọrọ ga-adị na faịlụ ahụ new-wallet-query.boc, adreesị ya dị new-wallet.addr, na igodo nzuzo abanyela new-wallet.pk (kpachara anya - ịmegharị edemede ọzọ ga-edegharị faịlụ ndị a).

N'ezie, netwọk TON amabeghị banyere obere akpa a; a na-echekwa ya naanị n'ụdị faịlụ ndị a. Ugbu a ịkwesịrị ibugo ya na netwọkụ. Agbanyeghị, nsogbu bụ na iji mepụta nkwekọrịta smart ị ga-akwụ ụgwọ ọrụ, nguzozi akaụntụ gị ka bụ efu.

Na ọnọdụ ọrụ, a ga-edozi nsogbu a site na ịzụta gram na mgbanwe (ma ọ bụ na-ebufe site na obere akpa ọzọ). Ọfọn, na ọnọdụ ule ugbu a, e mepụtara nkwekọrịta smart pụrụ iche, nke ị nwere ike ịrịọ maka gram 20 dị ka nke ahụ.

Ịmepụta arịrịọ maka nkwekọrịta smart nke onye ọzọ

Anyị na-arịọ arịrịọ maka nkwekọrịta smart nke na-ekesa gram aka ekpe na aka nri dị ka nke a. N'ime otu nchekwa ahụ crypto/block chọta faịlụ ahụ 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

Anyị ga-echekwa ya na nchekwa ya na onye ahịa gbakọtara, mana anyị ga-edozi ahịrị nke ise - tupu ahịrị "constant dest_addr". Ka anyị jiri adreesị nke obere akpa nke ị mepụtara na mbụ dochie ya (zuru ezu, ọ bụghị nkenke). Ọ dịghị mkpa ide "-1:" na mmalite, kama tinye "0x" na mmalite.

Ị nwekwara ike ịgbanwe ahịrị 6.666 Gram*/ constant amount - nke a bụ ego gram nke ị na-arịọ (ọ bụghị ihe karịrị 20). Ọbụlagodi na ị kọwapụta ọnụọgụgụ zuru ezu, hapụ isi ihe iri.

N'ikpeazụ, ịkwesịrị imezi eriri ahụ 0x00000011 constant seqno. Nọmba mbụ ebe a bụ nọmba usoro dị ugbu a, nke echekwara na akaụntụ na-ewepụta gram. Ebee ka m ga-esi nweta ya? Dị ka ekwuru n'elu, malite onye ahịa wee gbaa ọsọ:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Na njedebe, data nkwekọrịta smart ga-enwe

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

Nọmba 0000000D (nke gị ga-ebuwanye ibu) bụ nọmba usoro nke a ga-edochi anya n'ime testgiver.fif.

Nke ahụ bụ ya, chekwaa faịlụ ma gbaa ọsọ (./crypto/fift testgiver.fif). Ihe mmepụta ga-abụ faịlụ wallet-query.boc. Nke a bụ ihe a kpụrụ ozi gaa na nkwekọrịta smart nke onye ọzọ - arịrịọ "nyefee ọtụtụ gram na akaụntụ dị otú ahụ."

Iji onye ahịa, anyị na-ebugo ya na netwọk:

> 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

Ọ bụrụ na ị kpọọ ugbu a last, wee rịọkwa ọkwa nke akaụntụ nke anyị rịọrọ maka gram, mgbe ahụ, anyị ga-ahụ na ọnụọgụ usoro ya abawanyela site na otu - nke a pụtara na o zigara ego na akaụntụ anyị.

Nzọụkwụ ikpeazụ fọdụrụ - budata koodu nke obere akpa anyị (e mejupụtala nguzozi ya, mana na-enweghị koodu nkwekọrịta smart anyị agaghị enwe ike ijikwa ya). Anyị na-eme sendfile new-wallet-query.boc - ma nke ahụ bụ ya, ị nwere obere akpa gị na netwọk TON (ọbụlagodi na ọ bụ naanị ule ugbu a).

Ịmepụta azụmahịa na-apụ apụ

Iji nyefee ego site na nguzozi nke akaụntụ emepụtara, enwere faịlụ crypto/block/wallet.fif, nke dịkwa mkpa ka etinye ya na nchekwa ya na onye ahịa gbakọtara.

Yiri usoro ndị gara aga, ịkwesịrị ịhazigharị ego ị na-ebufe, adreesị onye nnata (dest_addr), na seqno nke obere akpa gị (ọ hà nhata 1 mgbe ịmalitechara obere akpa ahụ ma na-abawanye site na 1 mgbe azụmahịa ọ bụla na-apụ apụ - ị nwere ike. hụ ya site na ịrịọ ọkwa nke akaụntụ gị) . Maka ule, ị nwere ike iji, dịka ọmụmaatụ, obere akpa m - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Na mmalite (./crypto/fift wallet.fif) edemede ahụ ga-ewere adreesị nke obere akpa gị (site na ebe ị na-ebufe) na igodo nzuzo ya na faịlụ new-wallet.addr и new-wallet.pk, na ozi enwetara ga-dere new-wallet-query.boc.

Dị ka ọ dị na mbụ, iji mee azụmahịa ahụ ozugbo, kpọọ sendfile new-wallet-query.boc na onye ahịa. Mgbe nke a gasịrị, echefula imelite ọnọdụ nke blockchain (last) ma lelee na nguzozi na seqno nke obere akpa anyị agbanweela (getaccount <account_id>).

Nwalee TON onye ahịa (Telegram Open Network) yana asụsụ Fift ọhụrụ maka nkwekọrịta smart

Nke ahụ bụ, ugbu a, anyị nwere ike ịmepụta smart contracts na TON na-ezigara ha arịrịọ. Dị ka ị pụrụ ịhụ, ọrụ dị ugbu a ezuola, dịka ọmụmaatụ, mee obere akpa enyi na enyi na interface eserese (agbanyeghị, a na-atụ anya na ọ ga-adịrịrị dị ka akụkụ nke onye ozi).

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

Ị nwere mmasị ịga n'ihu na isiokwu na nyocha nke TON, TVM, Fift?

  • Ee, m na-echere mmezu nke usoro isiokwu na nkọwa zuru ezu nke TON

  • Ee, ọ na-atọ ụtọ ịgụkwu gbasara asụsụ Fift

  • Ee, achọrọ m ịmụtakwu maka TON Virtual Machine na onye na-agbakọta maka ya

  • Mba, ọ dịghị nke ọ bụla n'ime ihe ndị a na-adọrọ mmasị

Ndị ọrụ 39 tụrụ vootu. Ndị ọrụ 12 anabataghị.

Kedu ihe ị chere gbasara atụmatụ Telegram ịmalite TON?

  • Enwere m olile anya dị elu maka ọrụ a

  • Ana m agbaso mmepe ya na mmasị.

  • Enwere m obi abụọ ma nwee obi abụọ na ọ ga-aga nke ọma.

  • Enwere m mmasị ịtụle atụmatụ a dị ka ọdịda na enweghị isi maka ọha mmadụ

Ndị ọrụ 47 tụrụ vootu. Ndị ọrụ 12 anabataghị.

isi: www.habr.com

Tinye a comment