Vavanya i-TON yomxhasi (iTelegram Open Network) kunye nolwimi olutsha lwe-Fift kwiikontraki ezihlakaniphile

Ngaphezu konyaka odlulileyo, kuye kwaziwa malunga nezicwangciso zomthunywa weTelegram ukukhulula inethiwekhi yakhe. Vula inethiwekhi yocingo. Emva koko kwabakho uxwebhu lobugcisa olunamandla, oluthi lubhalwe nguNikolai Durov kwaye lwachaza ubume benethiwekhi yexesha elizayo. Kwabo bayiphosileyo, ndincoma ukuba ufunde ukubalisa kwam kwakhona olu xwebhu (inxalenye yoku-1, inxalenye yoku-2; inxalenye yesithathu, yeha, isaqokelela uthuli kwiidrafti).

Ukusukela ngoko, akukhange kubekho ndaba zibalulekileyo malunga nobume bophuhliso lwe-TON kude kube ziintsuku ezimbalwa ezidlulileyo (kwenye ye amajelo angekho semthethweni) ikhonkco kwiphepha alizange livele https://test.ton.org/download.html, apho zikhoyo:
β—¦ ton-test-liteclient-full.tar.xz - imithombo yomthengi wokukhanya kwinethiwekhi yovavanyo lweTON;
β—¦ ton-lite-client-test1.config.json β€” ifayile yoqwalaselo yokuqhagamshela kwinethiwekhi yovavanyo;
β—¦ README - ulwazi malunga nokwakha kunye nokusungula umxhasi;
β—¦ KWENZIWA KANJANI - imiyalelo yesinyathelo ngesinyathelo ekudaleni isivumelwano esihlakaniphile usebenzisa umxhasi;
β—¦ ton.pdf - uxwebhu oluhlaziyiweyo (ngomhla we-2 ka-Matshi 2019) kunye nombono wobugcisa wenethiwekhi ye-TON;
β—¦ tvm.pdf - inkcazo yobugcisa be-TVM (i-TON Virtual Machine, i-TON virtual machine);
β—¦ tblkch.pdf - inkcazo yobugcisa ye-TON blockchain;
β—¦ isiseko sesihlanu.pdf - inkcazo yolwimi olutsha lwe-Fift, eyenzelwe ukudala izivumelwano ezihlakaniphile kwi-TON.

Ndiyaphinda, kwakungekho siqinisekiso esisemthethweni sephepha kunye nawo onke la maxwebhu avela kwiTelegram, kodwa umthamo wezi zixhobo ubenza bacace. Qalisa umxhasi opapashiweyo ngomngcipheko wakhe.

Ukwakha umxhasi wovavanyo

Okokuqala, makhe sizame ukwakha kwaye siqhube umthengi wovavanyo-ngethamsanqa, README ichaza le nkqubo ilula ngokweenkcukacha. Ndiza kukwenza oku ndisebenzisa i-macOS 10.14.5 njengomzekelo; andinakungqina impumelelo yolwakhiwo kwezinye iinkqubo.

  1. Khuphela kwaye uyikhuphe umthombo ogciniweyo. Kubalulekile ukukhuphela uguqulelo lwamva nje njengoko ukuhambelana ngasemva akuqinisekwanga kweli nqanaba.

  2. Qinisekisa ukuba iinguqulelo zamva nje zokwenza, i-cmake (uguqulelo 3.0.2 okanye ngaphezulu), i-OpenSSL (kubandakanywa neefayile ze-header C), i-g++ okanye i-clang ifakwe kwisistim. Andizange ndifake nantoni na, yonke into yadibana ngoko nangoko.

  3. Makhe sicinge ukuba imithombo ayipakishwanga kwisiqulathi seefayili ~/lite-client. Ngokwahlukileyo kuyo, yenza incwadi engenanto yeprojekthi edityanisiweyo (umzekelo, ~/liteclient-build), kwaye ukusuka kuyo (cd ~/liteclient-build) biza imiyalelo:

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

    Vavanya i-TON yomxhasi (iTelegram Open Network) kunye nolwimi olutsha lwe-Fift kwiikontraki ezihlakaniphile

    Ukwakha i-Fift itoliki yolwimi kwiikontraki ezihlakaniphile (ngaphezulu malunga nayo ngezantsi), sikwabiza

    cmake --build . --target fift

  4. Khuphela ekhoyo ngoku ifayile yoqwalaselo ukudibanisa kumsebenzi womnatha wovavanyo kwaye uyibeke kulawulo kunye nomxhasi odityanisiweyo.

  5. Yenziwe, ungaqala umxhasi:

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

Ukuba yonke into yenziwe ngokuchanekileyo, kuya kufuneka ubone into efana nale:

Vavanya i-TON yomxhasi (iTelegram Open Network) kunye nolwimi olutsha lwe-Fift kwiikontraki ezihlakaniphile

Njengoko sibona, kukho imiyalelo embalwa ekhoyo:
β—¦ help β€” bonisa olu luhlu lwemiyalelo;
β—¦ quit - Phuma;
β—¦ time β€” bonisa ixesha langoku kumncedisi;
β—¦ status β€” bonisa uqhagamshelo kunye nemo yedatha yendawo;
β—¦ last - hlaziya imeko ye-blockchain (khuphela ibhloko yokugqibela). Kubalulekile ukuqhuba lo myalelo phambi kokuba naziphi na izicelo zokuqinisekisa ukuba ubona imeko yangoku yenethiwekhi.
β—¦ sendfile <filename> - layisha ifayile yendawo kwinethiwekhi yeTON. Yile ndlela intsebenziswano kunye nenethiwekhi eyenzekayo - kubandakanywa, umzekelo, ukudalwa kweekontrakthi ezintsha kunye nezicelo zokudlulisa imali phakathi kwee-akhawunti;
β—¦ getaccount <address> - bonisa okwangoku (ngexesha waphunyezwa umyalelo) last) ubume be-akhawunti enedilesi ekhankanyiweyo;
β—¦ privkey <filename> β€” layisha iqhosha labucala kwifayile yendawo.

Ukuba, xa uqala umxhasi, ugqithisela incwadi eneenkcukacha kuyo usebenzisa ukhetho -D, emva koko uya kongeza ibhloko yokugqibela ye-masterchain kuyo:

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

Ngoku siyakwazi ukuqhubela phambili kwizinto ezinomdla ngakumbi - funda ulwimi lweFift, zama ukuqokelela inkontileka ehlakaniphile (umzekelo, yenza i-wallet yokuvavanya), uyilayishe kwinethiwekhi kwaye uzame ukudlulisa imali phakathi kwee-akhawunti.

Ulwimi lwesihlanu

Ukusuka kuxwebhu isiseko sesihlanu.pdf unokufumanisa ukuba iqela leTelegram lenze ulwimi olutsha lwe-stack ukwenza izivumelwano ezihlakaniphile Isihlanu (ngokucacileyo ukusuka kwinani Isihlanu, efana neForth, ulwimi apho iSihlanu sinento eninzi efana ngayo).

Uxwebhu lunamandla, amaphepha angama-87, kwaye andizukuphinda ndibalise imixholo yalo ngokweenkcukacha kwisakhelo seli nqaku (ubuncinci kuba andikagqibi ukulifunda ngokwam :). Ndiza kugxila kwiingongoma eziphambili kwaye ndinike imizekelo embalwa yekhowudi kolu lwimi.

Kwinqanaba elisisiseko, i-syntax ye-Fift ilula kakhulu: ikhowudi yayo iqulathe magama, ngokuqhelekileyo ihlulwe zizithuba okanye imigca yemigca (imeko ekhethekileyo: amanye amagama awafuni isahluli emva kwawo). Nayiphi na igama lulandelelwano olunovakalelo lwemeko yabalinganiswa ehambelana nento ethile inkcazo (ngokurhabaxa, into ekufuneka yenziwe yitoliki xa idibana neli gama). Ukuba akukho nkcazelo yegama, itoliki izama ukucazulula njengenani kwaye ilibeke kwisitaki. Ngendlela, amanani apha - ngokukhawuleza - i-257-bit integers, kwaye akukho maqhezu konke konke - ngokuthe ngqo, ngokukhawuleza ajika abe ngamaqela adibeneyo, okwenza i-numerator kunye ne-denominator yeqhezu lengqiqo.

Amagama athanda ukunxibelelana namaxabiso phezulu kwesitaki. Uhlobo olwahlukileyo lwamagama - isimaphambili β€” ayisebenzisi isitaki, kodwa abasebenzi abalandelayo kwifayile yemvelaphi. Umzekelo, le yindlela umtya osetyenziswa ngayo - umlinganiswa wocaphulo (") ligama lesimaphambili esijonge isicatshulwa esilandelayo (esivalayo), kwaye sityhalela umtya phakathi kwabo kwisitaki. Umgca omnye uziphatha ngendlela efanayo (//) kunye neeline ezininzi (/*) izimvo.

Kulapho phantse lonke ulwakhiwo lwangaphakathi lolwimi luphela. Yonke enye into (kubandakanywa nolwakhiwo lolawulo) ichazwa njengamagama (nokuba yangaphakathi, njengokusebenza kwe-arithmetic kunye nenkcazo yamagama amatsha; okanye ichazwe "kwithala leencwadi eliqhelekileyo" Fift.fif, ekwincwadi eneenkcukacha crypto/fift kwimithombo).

Umzekelo olula wenkqubo kwiFift:

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

Umgca wokuqala uchaza igama elitsha setxy (qaphela isimaphambili {, eyenza ibhloko phambi kokuvala } kunye nesimaphambili :, elichaza ngokwenyani igama). setxy ithatha inani ukusuka phezulu kwesipaki, ichaza (okanye iphinde ichaze) njengehlabathi jikelele rhoqo x, kunye nesikwere seli nani njengento engatshintshiyo y (Ngenxa yokuba amaxabiso ezinto ezingaguquguqukiyo zinokuchazwa ngokutsha, ndingathanda ukuwabiza ngokuguquguqukayo, kodwa ndilandela indibano yamagama ngolwimi).

Imigca emibini elandelayo ibeka inombolo kwisitaki kwaye ufowune setxy, emva koko amaxabiso ezinto ezingatshintshiyo ayaboniswa x, y (igama lisetyenziselwa imveliso .), zozibini izigxina zibekwe kwisitaki, zishwankathelwe, kwaye iziphumo nazo ziprintwe. Ngenxa yoko siza kubona:

3 9 12 ok
7 49 56 ok

(Umgca "ok" uprintwa yitoliki xa igqibezela umgca wangoku kwimowudi yegalelo elisebenzayo)

Ewe, umzekelo opheleleyo wekhowudi:

"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

Le fayile ekhangelekayo eyoyikisayo yeyokudala ikhontrakthi ehlakaniphile - iya kufakwa kwifayile new-wallet-query.boc emva kokubulawa. Nceda uqaphele ukuba olunye ulwimi lwendibano lusetyenziswe apha kwi-TON Virtual Machine (andiyi kuhlala kuyo ngokubanzi), imiyalelo eya kufakwa kwi-blockchain.

Ngaloo ndlela, i-assembler ye-TVM ibhalwe kwi-Fift - imithombo yalo mhlanganisi ikwifayile crypto/fift/Asm.fif kwaye ziqhagamshelwe ekuqaleni kwesiqwengana sekhowudi engentla.

Ndingathini, ngokucacileyo u-Nikolai Durov uthanda ukwenza iilwimi ezintsha zeprogram :)

Ukudala inkontileka ehlakaniphile kunye nokusebenzisana neTON

Ke, masicinge ukuba sihlanganise umxhasi we-TON kunye netoliki ka-Fift njengoko kuchaziwe ngasentla kwaye siqhelane nolwimi. Uyenza njani inkontileka ehlakaniphile ngoku? Oku kuchazwe kwifayile KWENZIWA KANJANI, iqhotyoshelwe kwimithombo.

Iiakhawunti kwiTON

Njengoko ndichaze kwi Uphononongo lwe-TON, le nethiwekhi iqulethe ngaphezu kweyodwa i-blockchain - kukho enye eqhelekileyo, ebizwa ngokuba. "i-master chain", kunye nenani elingenasizathu le-"chain chain" ezongezelelweyo, ezichongwe ngenani le-32-bit. I-masterchain ine-identifier ye -1, ukongeza kuyo, "isiseko" sekhonkco lomsebenzi kunye ne-identifier ye-0 nayo ingasetyenziswa. Ngaphakathi, i-workchain nganye ihlulwe kwii-shardchains, kodwa le yinkcukacha yokuphunyezwa okungafuneki ukuba igcinwe engqondweni.

Kwitsheyina lomsebenzi omnye, ii-akhawunti ezininzi zigcinwa ezinee-akhawunti_id yazo izazisi. Kwi-master chain kunye ne-zero work chain, ziyi-256 bits ubude. Ke, isichongi seakhawunti sibhaliwe, umzekelo, ngolu hlobo:

-1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Le yifomati "ekrwada": okokuqala i-ID yekhonkco lomsebenzi, emva koko ikholoni, kunye ne-ID ye-akhawunti kubhalo lwe-hexadecimal.

Ukongeza, kukho ifomathi emfutshane - inombolo ye-workchain kunye nedilesi ye-akhawunti ifakwe kwifom yokubini, i-checksum yongezwa kubo, kwaye konke oku kufakwe kwi-Base64:

Ef+BVndbeTJeXWLnQtm5bDC2UVpc0vH2TF2ksZPAPwcODSkb

Ukwazi le fomati yerekhodi, sinokucela imeko yangoku ye-akhawunti ngomthengi wovavanyo usebenzisa umyalelo

getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Siza kufumana into enje:

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

Sibona isakhiwo esigcinwe kwi-DHT ye-workchain echaziweyo. Ngokomzekelo, kwintsimi storage.balance yibhalansi yeakhawunti yangoku, kwi storage.state.code - ikhowudi yekhontrakthi ehlakaniphile, kwaye ngaphakathi storage.state.data - idatha yayo yangoku. Nceda uqaphele ukuba ukugcinwa kwedatha ye-TON - Iseli, iiseli - zifana nomthi, iseli nganye ingaba nedatha yayo kunye neeseli zomntwana. Oku kuboniswa njenge-indentation kwimigca yokugqibela.

Ukwakha ikhontrakthi ehlakaniphile

Ngoku makhe senze isakhiwo esinjalo ngokwethu (sibizwa ngokuba yiBOC - ibhegi yeeseli) usebenzisa ulwimi lwesiHlanu. Ngethamsanqa, akufuneki ubhale isivumelwano esihlakaniphile ngokwakho-kwifolda crypto/block kukho ifayile esuka kwindawo yokugcina yemvelaphi new-wallet.fif, eya kusinceda senze isikhwama esitsha. Masiyikhuphele kwincwadi eneenkcukacha ngomxhasi odityanisiweyo (~/liteclient-build, ukuba ulandele imiyalelo engentla). Ndicaphule imixholo yayo engentla njengomzekelo wekhowudi kwiFift.

Yenza le fayile ngolu hlobo lulandelayo:

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

kuyinto <source-directory> Kufuneka itshintshwe indlela eya kwimithombo engapakishwanga (uphawu β€œ~”, ngelishwa, alunakusetyenziswa apha, umendo opheleleyo uyafuneka). Endaweni yokusebenzisa isitshixo -I ungachaza imo eguquguqukayo FIFTPATH kwaye ubeke le ndlela kuyo.

Ekubeni siqalise i-Fift kunye negama lefayile new-wallet.fif, iya kuyenza kwaye iphume. Ukuba uyalishiya igama lefayile, ungadlala netoliki ngokusebenzisana.

Emva kokuphunyezwa, into enje kufuneka iboniswe kwi-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)

Oku kuthetha ukuba i-wallet ene-ID -1:4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2 (okanye, yintoni efanayo, 0f9PzVILj8yglrVn1zS-NSjtxr7QBfaTCp7JrBqnFPIR8nhZ) yenziwe ngempumelelo. Ikhowudi ehambelanayo iya kuba kwifayile new-wallet-query.boc, idilesi yakhe ingaphakathi new-wallet.addr, kwaye iqhosha labucala lingaphakathi new-wallet.pk (Lumka - ukusebenzisa iskripthi kwakhona kuya kuzibhala ngaphezulu ezi fayile).

Ewe, inethiwekhi ye-TON ayikayazi malunga nesi sikhwama; igcinwe kuphela ngohlobo lwezi fayile. Ngoku kufuneka ifakwe kwinethiwekhi. Nangona kunjalo, ingxaki kukuba ukwenza ikhontrakthi ehlakaniphile kufuneka uhlawule ikhomishini, kwaye ibhalansi ye-akhawunti yakho iseyi-zero.

Kwimodi yokusebenza, le ngxaki iya kusonjululwa ngokuthenga iigram kutshintshiselwano (okanye ukudluliselwa kwesinye isikhwama). Ewe, kwimo yovavanyo lwangoku, ikhontrakthi ekhethekileyo ye-smart yenziwe, apho unokucela ukuya kuthi ga kwi-20 grams ngolo hlobo.

Ukwenza isicelo kwikhontrakthi ehlakaniphile yomnye umntu

Senza isicelo kwikhontrakthi ehlakaniphile ehambisa igrama ekhohlo kwaye ekunene ngolu hlobo. Kwifolda enye crypto/block fumana ifayile 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

Siza kuyigcina kwifolda kunye nomxhasi odibeneyo, kodwa siya kulungisa umgca wesihlanu - phambi komgca "constant dest_addr". Masiyitshintshe ngedilesi yesipaji owakhe wayenza ngaphambili (igcwele, ayifinyezwanga). Akukho mfuneko yokubhala β€œ-1:” ekuqaleni, endaweni yoko beka β€œ0x” ekuqaleni.

Ungatshintsha kwakhona umgca 6.666 Gram*/ constant amount β€” le yimali kwiigram ozicelayo (akukho ngaphezu kwama-20). Nokuba uchaza inani elipheleleyo, shiya indawo yokugqibela.

Ekugqibeleni, kufuneka ulungise umgca 0x00000011 constant seqno. Inombolo yokuqala apha yinombolo yolandelelwano yangoku, egcinwe kwi-akhawunti ekhupha iigram. Ndingayifumana phi? Njengoko kuchaziwe ngasentla, qalisa umxhasi kwaye uqhube:

last
getaccount -1:8156775b79325e5d62e742d9b96c30b6515a5cd2f1f64c5da4b193c03f070e0d

Ekugqibeleni, idatha yekhontrakthi ehlakaniphile iya kuqulatha

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

Inombolo 0000000D (eyakho iya kuba nkulu) yinombolo yolandelelwano ekufuneka ifakwe endaweni yayo. testgiver.fif.

Yiyo leyo, gcina ifayile kwaye ubaleke (./crypto/fift testgiver.fif). Imveliso iya kuba yifayile wallet-query.boc. Yiloo nto eyakhiweyo umyalezo kwikhontrakthi ehlakaniphile yomnye umntu - isicelo "ukudlulisela iigram ezininzi kwiakhawunti enjalo."

Sisebenzisa umxhasi, siyilayisha kwinethiwekhi:

> 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

Ukuba uyafowuna ngoku last, kwaye ke kwakhona ucele isimo se-akhawunti esicelile kuyo iigram, ngoko kufuneka sibone ukuba inombolo yayo yokulandelelana iye yanda enye - oku kuthetha ukuba ithumele imali kwi-akhawunti yethu.

Isinyathelo sokugqibela sihlala - khuphela ikhowudi yesikhwama sethu (ibhalansi yayo sele igqityiwe, kodwa ngaphandle kwekhowudi yekhontrakthi ehlakaniphile asiyi kukwazi ukuyilawula). Siqhuba sendfile new-wallet-query.boc - kwaye yiloo nto, unayo isikhwama sakho kwi-network ye-TON (nokuba luvavanyo kuphela ngoku).

Ukudala iintengiselwano eziphumayo

Ukudlulisa imali kwibhalansi ye-akhawunti eyenziwe, kukho ifayile crypto/block/wallet.fif, ekwafuneka ibekwe kwisiqulathi seefayili kunye nomxhasi odityanisiweyo.

Ngokufana namanyathelo angaphambili, kufuneka ulungelelanise imali oyithumelayo, idilesi yomamkeli (dest_addr), kunye ne-seqno ye-wallet yakho (ilingana ne-1 emva kokuqalisa i-wallet kwaye yanda ngo-1 emva kwentengiselwano nganye ephumayo - unako. yibone ngokucela ubume beakhawunti yakho) . Uvavanyo, ungasebenzisa, umzekelo, isipaji sam - 0x4fcd520b8fcca096b567d734be3528edc6bed005f6930a9ec9ac1aa714f211f2.

Kwisiqalo (./crypto/fift wallet.fif) okushicilelweyo kuyakuthatha idilesi yesipaji sakho (ukusuka apho ugqithisela khona) kunye nesitshixo saso sabucala kwiifayile new-wallet.addr ΠΈ new-wallet.pk, kwaye umyalezo ofunyenweyo uya kubhalwa kuwo new-wallet-query.boc.

Njengangaphambili, ukwenza ngokuthe ngqo intengiselwano, fowuna sendfile new-wallet-query.boc kumxhasi. Emva koku, ungalibali ukuhlaziya imeko ye-blockchain (last) kwaye khangela ukuba ibhalansi kunye ne-seqno ye-wallet yethu itshintshile (getaccount <account_id>).

Vavanya i-TON yomxhasi (iTelegram Open Network) kunye nolwimi olutsha lwe-Fift kwiikontraki ezihlakaniphile

Kuko konke, ngoku singenza iikontraki ezihlakaniphile kwi-TON kwaye sithumele izicelo kubo. Njengoko ubona, ukusebenza kwangoku sele kwanele, umzekelo, ukwenza i-wallet enobuhlobo kunye ne-graphical interface (nangona kunjalo, kulindeleke ukuba sele ifumaneke njengenxalenye yomthunywa).

Ngabasebenzisi ababhalisiweyo kuphela abanokuthatha inxaxheba kuphando. Ngena, ndiyacela.

Ngaba unomdla wokuqhubeka namanqaku ngohlalutyo lweTON, TVM, Fift?

  • Ewe, ndilindele ukugqitywa koluhlu lwamanqaku ngokujonga ngokubanzi kweTON

  • Ewe, inika umdla ukufunda ngakumbi ngolwimi lwesiFift

  • Ewe, ndifuna ukufunda ngakumbi malunga neTON Virtual Machine kunye nesihlanganisi sayo

  • Hayi, akukho nanye kwezi enika umdla

Bali-39 abasebenzisi abavotileyo. Abasebenzisi abasi-12 abakhange.

Ucinga ntoni malunga nezicwangciso zeTelegram zokuqalisa i-TON?

  • Ndinethemba elikhulu ngale projekthi

  • Ndilandela nje uphuhliso lwayo ngomdla.

  • Ndiyathandabuza kwaye ndiyathandabuza impumelelo yayo.

  • Ndityekele ekuthatheni eli nyathelo njengokusilela nokungeyomfuneko kubantu abaninzi

Bali-47 abasebenzisi abavotileyo. Abasebenzisi abasi-12 abakhange.

umthombo: www.habr.com

Yongeza izimvo