ProHoster > ΠΠ»ΠΎΠ³ > Maamulka > Ku saabsan sida loo qoro oo loo daabaco qandaraas caqli gal ah Shabakadda Furan ee Telegram (TON)
Ku saabsan sida loo qoro oo loo daabaco qandaraas caqli gal ah Shabakadda Furan ee Telegram (TON)
Ku saabsan sida loo qoro oo loo daabaco qandaraaska casriga ah ee TON
Muxuu ku saabsan yahay maqaalkani?
Maqaalka waxaan kaga hadli doonaa sidii aan uga qayb galay tartankii blockchain ee Telegram kii ugu horeeyay, oo aanan wax abaalmarin ah qaadan, oo aan go'aansaday in aan waayo-aragnimadayda ku qoro maqaal si aysan ugu quusin ilow iyo, laga yaabee, inaan caawiyo. qof.
Tan iyo markii aanan rabin inaan qoro koodka aan la taaban karin, laakiin inaan sameeyo wax shaqeynaya, maqaalka waxaan ku qoray qandaraas caqli-gal ah oo loogu talagalay bakhtiyaanasiibka degdegga ah iyo website-ka oo muujinaya xogta qandaraaska smart ee tooska ah ee TON iyada oo aan la isticmaalin kaydinta dhexe.
Maqaalku wuxuu faa'iido u yeelan doonaa kuwa raba inay sameeyaan qandaraaskooda ugu horreeya ee TON, laakiin ma garanayaan meesha ay ka bilaabaan.
Isticmaalka bakhtiyaanasiibka tusaale ahaan, waxaan ka bixi doonaa rakibidda deegaanka ilaa daabacaadda qandaraas caqli-gal ah, la falgalka, iyo qorista bogga internetka ee helitaanka iyo daabacaadda xogta.
Ku saabsan ka qaybgalka tartanka
Oktoobartii hore, Telegram waxa uu ku dhawaaqay tartan blockchain ah oo leh luuqado cusub Fift ΠΈ FunC. Waxay ahayd lagama maarmaan in la doorto in la qoro mid ka mid ah shanta qandaraas ee la soo jeediyay. Waxaan u maleeyay inay fiicnaan lahayd inaan sameeyo wax ka duwan, inaan barto luuqad oo aan sameeyo, xitaa haddaanan wax kale qorin mustaqbalka. Intaa waxaa dheer, mowduuca si joogto ah ayuu u saaran yahay dibnaha.
Waxaa habboon in la sheego in aanan khibrad u lahayn horumarinta qandaraasyada caqliga leh.
Waxaan qorsheeyay inaan ka qaybqaato ilaa dhamaadka ilaa aan kari karo oo aan qoro maqaal dib u eegis ah, laakiin waxaan ku guuldareystay isla markiiba kii ugu horeeyay. I wuxuu qoray boorso oo leh saxiixyo badan FunC guud ahaanna way shaqeysay. Waxaan u qaatay sal heshiis smart on Solidity.
Waqtigaas, waxaan u maleeyay in tani ay xaqiiqdii ku filnaatay qaadashada ugu yaraan meel abaalmarin ah. Natiijo ahaan, qiyaastii 40 ka mid ah 60 ka mid ah ka qaybgalayaasha waxay noqdeen kuwo ku guuleystay abaal-marin oo anigu kama aan mid ahayn. Guud ahaan, arrintan waxba kama jiraan, laakiin hal shay ayaa i dhibay. Markii lagu dhawaaqay natiijada, dib u eegistii imtixaankii qandaraaska aan la samayn, waxaan weydiiyay ka qaybgalayaasha chat haddii ay jirto cid kale oo aan haysan, ma jirin.
Sida muuqata aniga oo u fiirsada fariimahayga, laba maalmood ka dib garsoorayaashu waxay daabaceen faallo ilaa hadda ma fahmin inay si lama filaan ah u seegeen qandaraaskayga caqli-gal ah inta lagu jiro xukunka ama si fudud u maleeyay inay aad u xun tahay oo aysan u baahnayn faallo. Su'aal ayaan ku weydiiyay bogga, laakiin maan helin jawaab. In kasta oo aanay ahayn wax sir ah cidda xukuntay, haddana waxaan u arkay inaan loo baahnayn in la qoro farriimaha gaarka ah.
Waqti badan ayaa lagu qaatay fahamka, sidaas darteed waxaa la go'aamiyay in maqaal la qoro. Maaddaama aysan jirin macluumaad badan oo weli, maqaalkani wuxuu kaa caawinayaa inaad waqti badbaadiso qof kasta oo daneynaya.
Fikradda qandaraasyada smart ee TON
Kahor intaadan wax qorin, waxaad u baahan tahay inaad ogaatid dhinaca aad u wajaheyso arrintan. Sidaa darteed, hadda waxaan kuu sheegi doonaa qaybaha nidaamku ka kooban yahay. Si sax ah, waa maxay qaybaha aad u baahan tahay inaad ogaato si aad u qorto ugu yaraan nooc ka mid ah qandaraas shaqo.
Waxaan diiradda saari doonaa qorista qandaraas caqli-gal ah iyo la shaqeynta TON Virtual Machine (TVM), Fift ΠΈ FunC, markaa maqaalku wuxuu u eg yahay sharaxaadda horumarinta barnaamijka caadiga ah. Ma dagi doono sida madal lafteedu u shaqeyso halkan.
Guud ahaan sida ay u shaqeyso TVM iyo luqadda Fift waxaa jira dukumentiyo rasmi ah oo wanaagsan. Intii aan tartanka ka qaybqaadanayey iyo hadda oo aan qorayo qandaraaska hadda jira, marar badan ayaan u soo jeestay iyada.
Luuqada ugu weyn ee qandaraasyada caqliga leh lagu qoro waa FunC. Ma jiraan wax dukumeenti ah hadda, markaa si aad wax u qorto waxaad u baahan tahay inaad barato tusaalooyinka qandaraasyada smart ee kaydka rasmiga ah iyo hirgelinta luqadda lafteeda, oo lagu daro waxaad eegi kartaa tusaalooyinka qandaraasyada smart ee labadii hore. tartamada. Xiriirinta dhamaadka maqaalka.
Aynu nidhaahno waxaan hore ugu qornay qandaraas caqli-gal ah FunC, ka dib waxaan ku ururin code galay Fift assembler.
Qandaraaska casriga ah ee la soo ururiyey ayaa weli ah in la daabaco. Si aad tan u samayso waxaad u baahan tahay inaad ku qorto hawl Fift, kaas oo qaadan doona koodhka qandaraaska ee smart iyo qaar ka mid ah xuduudaha kale sida gelinta, iyo soo saarista waxay noqon doontaa fayl leh kordhinta .boc (taas oo macnaheedu yahay "bacda unugyada"), iyo, iyadoo ku xiran sida aan u qorno, furaha gaarka ah iyo ciwaanka, kaas oo la soo saaray iyada oo ku saleysan code qandaraaska smart. Waxaad horeba u diri kartaa garaam ciwaanka qandaraas caqli gal ah oo aan wali la daabicin.
Si loo daabaco qandaraas caqli gal ah TON ayaa heshay .boc faylka wuxuu u baahan doonaa in loo diro blockchain iyadoo la isticmaalayo macmiil iftiin ah (wax badan oo ku saabsan kuwan hoose). Laakiin ka hor intaanad daabicin, waxaad u baahan tahay inaad garaamyada u wareejiso cinwaanka la soo saaray, haddii kale qandaraaska caqliga leh lama daabici doono. Daabacaada ka dib, waxaad la macaamili kartaa qandaraaska caqliga leh adigoo u soo diraya farriimaha dibadda (tusaale ahaan, adoo isticmaalaya macmiil khafiif ah) ama gudaha (tusaale ahaan, hal qandaraas oo caqli-gal ah ayaa fariin kale u soo diraya gudaha TON).
Marka aan fahamno sida koodka loo daabaco, way fududahay. Waxaan si aad ah u ognahay waxa aan rabno in aan qorno iyo sida barnaamijkeenu u shaqayn doono. Iyo inta aan qoreyno, waxaan raadineynaa sida tan horeyba loogu hirgeliyey qandaraasyada casriga ah ee jira, ama waxaan eegnaa xeerka fulinta Fift ΠΈ FunC gudaha kaydka rasmiga ah, ama eeg dukumentiyada rasmiga ah.
Inta badan waxaan ka raadiyay ereyo muhiim ah oo ku jiray chatka Telegram-ka oo ay isugu yimaadeen dhamaan ka qeyb galayaasha tartanka iyo shaqaalaha Telegram-ka, waxaana dhacday in intii uu tartanku socday uu qof walba uu halkaas isugu yimid oo uu bilaabay in uu ka doodo Fift iyo FunC. Isku xirka dhamaadka maqaalka.
Waa markii laga guuri lahaa aragtida loona guuri lahaa ku-dhaqanka.
U diyaarinta deegaanka si loola shaqeeyo TON
Waxaan sameeyay wax kasta oo lagu sharxi doono maqaalka MacOS oo laba jeer ku hubiyay Ubuntu 18.04 LTS nadiif ah oo ku yaal Docker.
Waxa ugu horreeya ee aad u baahan tahay inaad sameyso waa soo dejiso oo rakib lite-client kaas oo aad codsiyo ugu diri karto TON.
Tilmaamaha ku yaal website-ka rasmiga ah ayaa si faahfaahsan oo cad u qeexaya habka rakibidda oo ka tagaya faahfaahinta qaarkood. Halkan waxaan raacnaa tilmaamaha, ku rakibida ku-tiirsanaanta maqan ee jidka. Anigu ma soo ururin mashruuc kasta oo aan ka rakibay kaydka rasmiga ah ee Ubuntu (MacOS waxaan isticmaalay brew).
Marka dhammaan waxyaalaha ku tiirsanaanta la rakibo waad rakibi kartaa lite-client, Fift, FunC.
Marka hore, waxaanu xidhnay kaydka TON oo ay weheliso ku-tiirsanaanteeda. Si ku habboon, waxaan ku samayn doonaa wax kasta oo ku jira galka ~/TON.
cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursive
Kaydka ayaa sidoo kale kaydiya fulinta Fift ΠΈ FunC.
Hadda waxaan diyaar u nahay inaan soo ururino mashruuca. Koodhka kaydka waxa lagu xidhay gal ~/TON/ton. The ~/TON samee gal build oo ku soo ururi mashruuca.
mkdir ~/TON/build
cd ~/TON/build
cmake ../ton
Maadaama aan dooneyno inaan qorno qandaraas caqli-gal ah, waxaan u baahanahay ma aha oo kaliya lite-clientLaakiin Fift Ρ FunC, markaa aynu wax walba soo ururino. Ma ahan hannaan degdeg ah, markaa waannu sugaynaa.
cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.json
Haddii dhismuhu uu guulaystey, ka dib bilaabista waxaad arki doontaa log of isku xirka macmiilka iftiinka ee noodhka.
[ 1][t 2][1582054822.963129282][lite-client.h:201][!testnode] conn ready
[ 2][t 2][1582054823.085654020][lite-client.cpp:277][!testnode] server version is 1.1, capabilities 7
[ 3][t 2][1582054823.085725069][lite-client.cpp:286][!testnode] server time is 1582054823 (delta 0)
...
Waxaad maamuli kartaa amarka help oo arag amarrada la heli karo.
help
Aan ku taxno amarrada aan ku isticmaali doono maqaalkan.
list of available commands:
last Get last block and state info from server
sendfile <filename> Load a serialized message from <filename> and send it to server
getaccount <addr> [<block-id-ext>] Loads the most recent state of specified account; <addr> is in [<workchain>:]<hex-or-base64-addr> format
runmethod <addr> [<block-id-ext>] <method-id> <params>... Runs GET method <method-id> of account <addr> with specified parameters
Hadda waxaan diyaar u nahay inaan qandaraaska laftiisa qorno.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
Fikradda
Sida aan kor ku qoray, qandaraaska caqliga leh ee aan qorayno waa bakhtiyaanasiib.
Intaa waxaa dheer, kani maaha bakhtiyaanasiib aad u baahan tahay inaad iibsato tigidh oo aad sugto saacad, maalin ama bil, laakiin waa mid degdeg ah kaas oo isticmaaluhu uu u wareejiyo cinwaanka qandaraaska. N garaam, oo isla markiiba dib u soo celiya 2 * N garaam ama lumin. Waxaan samayn doonaa suurtogalnimada inaan ku guuleysano ilaa 40%. Haddii aysan jirin garaam ku filan oo lacag bixin ah, markaa waxaan u tixgelin doonaa macaamilka sida kor u kaca.
Waxaa intaa dheer, waxaa muhiim ah in khamaarka la arki karo waqtiga dhabta ah iyo qaab ku habboon, si isticmaaluhu isla markiiba u fahmo haddii uu ku guuleystay ama laga badiyay. Sidaa darteed, waxaad u baahan tahay inaad sameyso degel internet oo muujinaya khamaar iyo natiijooyin toos ah TON.
Qoritaanka qandaraas caqli gal ah
Si ay ugu habboonaato, waxaan iftiimiyay koodhka FunC; plugin-ka ayaa laga heli karaa oo lagu rakibi karaa raadinta Code Studio Visual; haddii aad si lama filaan ah u rabto inaad wax ku darto, waxaan sameeyay plugin si guud loo heli karo. Sidoo kale, qof hore u sameeyay plugin la shaqaynta Fift, waxaad sidoo kale ku rakibi kartaa oo aad ka heli kartaa VSC.
Si aan nolosheena u fududeyno, waxaan qori doonaa qandaraas caqli-gal ah oo aan tijaabin doono gudaha ilaa inta ay diyaar tahay. Kaliya markaas ka dib waxaan ku daabici doonaa TON.
Qandaraaska smart wuxuu leeyahay laba hab oo dibadda ah oo la heli karo. Marka hore, recv_external() shaqadan waxaa la fuliyaa marka codsiga qandaraasku ka yimaado dunida dibadda, taas oo ah, ma ka TON, tusaale ahaan, marka annagu lafteena soo saara fariin oo u dirto iyada oo loo marayo Lite-macmiil. Labaad, recv_internal() tani waa marka, gudaha TON lafteeda, qandaraas kasta uu tixraacayo annaga. Labada xaaladoodba, waxaad u gudbin kartaa cabbirada shaqada.
Aan ku bilowno tusaale fudud oo shaqayn doona haddii la daabaco, laakiin ma jiro wax culays ah oo shaqaynaya.
Halkan waxaan u baahanahay inaan sharaxno waxa ay tahay slice. Dhammaan xogta ku kaydsan TON Blockchain waa ururin TVM cell ama si fudud cell, unugga noocaan ah waxaad ku kaydin kartaa ilaa 1023 bits oo xog ah iyo ilaa 4 xiriiriye oo unugyo kale ah.
TVM cell slice ama slice tani waa qayb ka mid ah kuwa jira cell waxaa loo isticmaalaa in lagu kala saaro, way kala caddaan doontaa hadhow. Waxa inoogu muhiimsan waa inaan wareejin karno slice oo ku xidhan nooca fariinta, ka baaraandegi xogta recv_external() ama recv_internal().
impure - kelmad muhiim ah oo tilmaamaysa in shaqadu wax ka beddesho xogta qandaraaska smart.
Aan ku dhex xafidno koodhka qandaraaska lottery-code.fc oo la ururiyo.
Macnaha calamada waxaa lagu arki karaa iyadoo la adeegsanayo amarka
~/TON/build/crypto/func -help
Waxaan ku soo uruurinay koodka Fift assembler lottery-compiled.fif:
// lottery-compiled.fif
"Asm.fif" include
// automatically generated from `/Users/rajymbekkapisev/TON/ton/crypto/smartcont/stdlib.fc` `./lottery-code.fc`
PROGRAM{
DECLPROC recv_internal
DECLPROC recv_external
recv_internal PROC:<{
// in_msg
DROP //
}>
recv_external PROC:<{
// in_msg
DROP //
}>
}END>c
Waxaa lagu bilaabi karaa gudaha, tan waxaan u diyaarin doonaa deegaanka.
Ogow in xariiqda kowaad isku xidho Asm.fif, kani waa kood ku qoran Fift for the Fift assembler.
Tan iyo markii aan rabno in aan ordo oo aan tijaabino qandaraaska caqliga leh gudaha, waxaan abuuri doonaa fayl lottery-test-suite.fif oo koobi ka samee koodka la soo ururiyey, adoo bedelaya xariiqda ugu dambeysa ee ku jirta, kaas oo u qora koodhka qandaraaska smart si joogto ah codesi markaas loogu wareejiyo mashiinka farsamada:
"TonUtil.fif" include
"Asm.fif" include
PROGRAM{
DECLPROC recv_internal
DECLPROC recv_external
recv_internal PROC:<{
// in_msg
DROP //
}>
recv_external PROC:<{
// in_msg
DROP //
}>
}END>s constant code
Ilaa hadda waxay u muuqataa mid cad, hadda aan ku darno isla faylkaas koodka aan u isticmaali doono inaan bilowno TVM.
Π c7 Waxaan duubnaa macnaha guud, taas oo ah, xogta taas oo TVM (ama gobolka network) la bilaabi doono. Xitaa inta lagu jiro tartanka, mid ka mid ah horumarinta ayaa muujiyay sida loo abuuro c7 waana soo guuriyay. Maqaalkan waxa laga yaabaa inaan u baahanahay inaan bedelno rand_seed maadaama jiilka tiro aan toos ahayn ay ku xiran tahay haddii aan la beddelin, isla tiradaas ayaa mar kasta la soo celinayaa.
recv_internal ΠΈ recv_external Joogtada leh qiyamka 0 iyo -1 ayaa mas'uul ka noqon doona wacitaanka hawlaha u dhigma ee qandaraaska smart.
Hadda waxaan diyaar u nahay inaan abuurno tijaabada ugu horeysa ee qandaraaskeena smart ee faaruqa ah. Si loo caddeeyo, hadda waxaan dhammaan imtixaanada ku dari doonaa isla fayl isku mid ah lottery-test-suite.fif.
Aan abuurno doorsoome storage oo mid maran ku qor cell, tani waxay noqon doontaa kaydinta qandaraaska smart.
message Tani waa fariinta aan u gudbin doono xiriirka caqliga leh ee dibadda. Waxaan sidoo kale ka dhigi doonaa madhan hadda.
Way fiican tahay, waxaanu qornay nooca shaqada ee ugu horreeya ee qandaraaska smart.
Hadda waxaan u baahanahay inaan ku darno shaqeynta. Marka hore aan wax ka qabanno farriimaha ka imanaya adduunka dibadda ee u socda recv_external()
Horumariyaha laftiisa ayaa dooranaya qaabka fariinta ee uu qandaraasku aqbali karo.
Laakiin sida caadiga ah
marka hore waxaan rabnaa in aan qandaraaskayaga ka ilaalino dibadda oo aan ka dhigno in qofka qandaraaska leh oo keliya uu fariimo dibadda ah ugu soo diro.
Marka labaad, marka aan u dirno fariin sax ah TON, waxaan rabnaa in tani ay si sax ah u dhacdo hal mar iyo marka aan dirno fariin isku mid ah mar labaad, qandaraaska smart ayaa diidaya.
Markaa ku dhawaad ββqandaraas kastaa wuxuu xalliyaa labadan mashaakil, maadaama qandaraaskeenu aqbalayo fariimaha dibadda, waxaan u baahanahay inaan sidoo kale ilaalino taas.
Waxaan u samayn doonaa si rogan. Marka hore, aan ku xalino dhibaatada ku celcelin, haddii qandaraasku hore u helay fariinta noocaas ah oo la farsameeyay, ma fulin doono mar labaad. Ka dibna waxaan xallin doonaa dhibaatada si dad gaar ah oo kaliya ay farriimaha u soo diri karaan qandaraaska smart.
Waxaa jira siyaabo kala duwan oo lagu xalliyo dhibaatada farriimaha nuqul ka mid ah. Waa kan sida aan u samayn doono. Qandaraaska casriga ah, waxaan ku bilownaa miiska farriimaha la helay qiimaha bilowga ah 0. Fariin kasta oo qandaraaska smart ah, waxaan ku dari doonaa qiimaha miiska hadda. Haddii qiimaha counter-ta ee fariinta uusan u dhigmin qiimaha qandaraaska smart, markaa ma socodsiineyno; haddii ay sameyso, markaa waanu ka baaraandegi karnaa oo kordhineynaa miiska qandaraaska smart by 1.
Aan ku soo noqonno lottery-test-suite.fif oo ku dar imtixaan labaad. Haddii aan dirno lambar khaldan, koodka waa inuu tuuraa ka reeban yahay. Tusaale ahaan, xogta qandaraasku ha kaydiso 166, waxaanu soo diri doonaa 165.
<b 166 32 u, b> storage !
<b 165 32 u, b> message !
message @
recv_external
code
storage @
c7
runvmctx
drop
exit_code !
."Exit code " exit_code @ . cr
exit_code @ 33 - abort"Test #2 Not passed"
Aan bilowno.
~/TON/build/crypto/fift -s lottery-test-suite.fif
Waxaana arki doonaa in imtixaanka lagu fuliyo qalad.
[ 1][t 0][1582283084.210902214][words.cpp:3046] lottery-test-suite.fif:67: abort": Test #2 Not passed
[ 1][t 0][1582283084.210941076][fift-main.cpp:196] Error interpreting file `lottery-test-suite.fif`: error interpreting included file `lottery-test-suite.fif` : lottery-test-suite.fif:67: abort": Test #2 Not passed
Marxaladdan lottery-test-suite.fif waa inay u ekaadaan link.
Hadda aan ku darno caqli-celinta counter-ka ee qandaraaska caqliga leh lottery-code.fc.
() recv_internal(slice in_msg) impure {
;; TODO: implementation
}
() recv_external(slice in_msg) impure {
if (slice_empty?(in_msg)) {
return ();
}
int msg_seqno = in_msg~load_uint(32);
var ds = begin_parse(get_data());
int stored_seqno = ds~load_uint(32);
throw_unless(33, msg_seqno == stored_seqno);
}
Π slice in_msg been fariinta aan dirno.
Waxa ugu horreeya ee aan sameyno waa hubinta haddii fariintu ay ku jirto xog, haddii aysan ahayn, markaa si fudud ayaan uga baxnaa.
Marka xigta waxaan kala saareynaa fariinta. in_msg~load_uint(32) wuxuu ku shubaa lambarka 165, 32-bit unsigned int ka fariinta la gudbiyay.
Marka xigta waxaan ka soo rarinaa 32 bits kaydinta qandaraasyada smart. Waxaan hubinaa in nambarka la raray uu la mid yahay kan la gudbay, haddii kale, waxaan tuuraynaa ka reeban. Xaaladeena, mar haddii aan dhaafeyno ciyaar aan ciyaar ahayn, ka reeban waa in la tuuraa.
Ogsoonow in aysan dhib lahayn in si joogto ah loo koobiyeeyo koodka la soo ururiyey ee qandaraaska smart ee faylka leh imtixaannada, markaa waxaanu qori doonaa qoraal noo qori doona koodhka si joogto ah, waxaananu si fudud ugu xidhi doonaa koodka la soo ururiyey ee imtixaanadayada annagoo isticmaalaya "include".
Ku samee fayl galka mashruuca build.sh oo leh nuxurka soo socda.
Hadda, kaliya socodsii qoraalkayaga si aad u ururiso qandaraaska. Laakiin tan ka sokow, waxaan u baahanahay inaan u qorno si joogto ah code. Markaa waxaan abuuri doonaa fayl cusub lotter-compiled-for-test.fif, kaas oo aan ku dari doono faylka lottery-test-suite.fif.
Aan ku darno koodka skirpt sh, kaas oo si fudud u koobi doona faylka la soo ururiyay lotter-compiled-for-test.fif oo beddel xariiqda ugu dambeysa ee ku jirta.
# copy and change for test
cp lottery-compiled.fif lottery-compiled-for-test.fif
sed '$d' lottery-compiled-for-test.fif > test.fif
rm lottery-compiled-for-test.fif
mv test.fif lottery-compiled-for-test.fif
echo -n "}END>s constant code" >> lottery-compiled-for-test.fif
Hadda, si aad u hubiso, aynu socodsiino qoraalka natiijada oo fayl ayaa la soo saari doonaa lottery-compiled-for-test.fif, oo aan ku dari doono our lottery-test-suite.fif
Π lottery-test-suite.fif tirtir xeerka qandaraaska oo ku dar khadka "lottery-compiled-for-test.fif" include.
Waxaan wadnaa imtixaanno si aan u hubinno inay gudbaan.
~/TON/build/crypto/fift -s lottery-test-suite.fif
Way fiican tahay, hadda si otomaatig ah loo bilaabo imtixaannada, aan abuurno fayl test.sh, kaas oo marka hore fulin doona build.sh, ka dibna samee imtixaanada.
Aan samayno test.sh oo wad si aad u hubiso in imtixaanadu shaqeeyaan.
chmod +x ./test.sh
./test.sh
Waxaan hubineynaa in qandaraasku uu ururiyey imtixaannadana la fuliyay.
Way fiicantahay, hadda bilawga test.sh Tijaabooyinku waa la soo ururin doonaa oo isla markaaba waa la wadi doonaa. Waa kan isku xirka galan.
Hagaag, ka hor inta aynaan sii wadin, aynu samayno hal shay oo kale si ay ugu habboonaato.
Aan abuurno gal build halkaas oo aanu ku kaydin doono qandaraaska la koobiyay iyo kloonkiisa oo qoran si joogto ah lottery-compiled.fif, lottery-compiled-for-test.fif. Aynu sidoo kale samayno gal test xagee lagu kaydin doonaa faylka tijaabada? lottery-test-suite.fif iyo faylal kale oo suurtagal ah oo taageeraya Isku xidhka isbeddelada khuseeya.
Marka xigta waa in la sameeyaa imtixaan hubinaya in fariinta la helay iyo miiska la cusbooneysiiyay ee dukaanka marka aan dirno lambarka saxda ah. Laakiin taas mar dambe ayaan samayn doonaa.
Hadda aan ka fekerno qaabka xogta iyo xogta loo baahan yahay in lagu kaydiyo qandaraaska smart.
Waxaan ku tilmaami doonaa wax kasta oo aan kaydin.
Marka xigta waxaad u baahan tahay inaad qorto laba hawlood. Marka hore aan wacno pack_state(), kaas oo ku xidhi doona xogta kaydinta xiga ee kaydinta qandaraaska smart. Aan wacno tan labaad unpack_state() akhrin doona oo soo celin doona xogta kaydinta.
_ pack_state(int seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) inline_ref {
return begin_cell()
.store_uint(seqno, 32)
.store_uint(pubkey, 256)
.store_uint(order_seqno, 32)
.store_uint(number_of_wins, 32)
.store_grams(incoming_amount)
.store_grams(outgoing_amount)
.store_int(owner_wc, 32)
.store_uint(owner_account_id, 256)
.store_dict(orders)
.end_cell();
}
_ unpack_state() inline_ref {
var ds = begin_parse(get_data());
var unpacked = (ds~load_uint(32), ds~load_uint(256), ds~load_uint(32), ds~load_uint(32), ds~load_grams(), ds~load_grams(), ds~load_int(32), ds~load_uint(256), ds~load_dict());
ds.end_parse();
return unpacked;
}
Waxaan ku darnaa labadan shaqo bilowga qandaraaska smart. Way shaqayn doontaa sida natiijo dhexdhexaad ah.
Si loo kaydiyo xogta waxaad u baahan doontaa inaad wacdo shaqada ku dhex jirta set_data() waxayna ka qori doontaa xogta pack_state() in kaydinta qandaraas smart.
Hadda oo aan haysanno hawlo ku habboon qorista iyo akhrinta xogta, waan sii socon karnaa.
Waxaan u baahanahay inaan hubino in fariinta ka imanaysa dibadda uu saxiixay mulkiilaha qandaraaska (ama isticmaale kale oo marin u leh furaha gaarka ah).
Marka aan daabacno qandaraas caqli-gal ah, waxaan ku bilaabi karnaa xogta aan u baahanahay kaydinta, taas oo loo keydin doono isticmaalka mustaqbalka. Waxaan ku duubi doonaa furaha dadweynaha halkaas si aan u xaqiijino in fariinta soo socota lagu saxiixay furaha gaarka ah ee u dhigma.
Kahor intaanan sii wadin, aan abuurno fure gaar ah oo aan u qorno test/keys/owner.pk. Si tan loo sameeyo, aynu bilowno Fift qaab is-dhexgal ah oo aan fulino afar amar.
Aan abuurno gal keys gudaha galka test halkaasna ku qor furaha gaarka ah.
mkdir test/keys
cd test/keys
~/TON/build/crypto/fift -i
newkeypair
ok
.s
BYTES:128DB222CEB6CF5722021C3F21D4DF391CE6D5F70C874097E28D06FCE9FD6917 BYTES:DD0A81AAF5C07AAAA0C7772BB274E494E93BB0123AA1B29ECE7D42AE45184128
drop
ok
"owner.pk" B>file
ok
bye
Waxaan ku aragnaa fayl galka hadda jira owner.pk.
Waxaan ka saareynaa furaha guud ee xirmada markii loo baahdo waxaan ka heli karnaa midka gaarka ah.
Hadda waxaan u baahanahay inaan qorno xaqiijinta saxiixa. Aan ku bilowno imtixaanka. Marka hore waxaanu akhrinay furaha khaaska ah ee faylka anagoo adeegsanayna shaqada file>B una qor doorsoome owner_private_key, ka dibna isticmaalaya shaqada priv>pub furaha gaarka ah u beddel furaha guud oo ku qor natiijada owner_public_key.
Marka xigta, waxaanu samayn doonaa fariin saxeexan, waxay ka koobnaan doontaa oo kaliya saxiixa iyo qiimaha miiska.
Marka hore, waxaan abuurnaa xogta aan rabno inaan gudbino, ka dib waxaan ku saxiixnaa fure gaar ah ugu dambeyntiina waxaan soo saareynaa fariin saxiix ah.
Natiijo ahaan, fariinta aan u diri doono qandaraaska casriga ah waxaa lagu duubaa doorsoome message_to_send, ku saabsan hawlaha hashu, ed25519_sign_uint waad akhrin kartaa dukumeentiyada shanaad.
Marka xigta waa hubinta miiska lagu wareejiyay kaydinta iyo hubinta saxiixa. Haddii shay uusan u dhigmin, markaa waxaan tuurnaa ka reeban oo leh koodka ku habboon.
var signature = in_msg~load_bits(512);
var message = in_msg;
int msg_seqno = message~load_uint(32);
(int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
throw_unless(33, msg_seqno == stored_seqno);
throw_unless(34, check_signature(slice_hash(in_msg), signature, pubkey));
Aynu wadno imtixaanada oo aynu aragno in imtixaankii labaad uu guuldarraystay. Laba sababood dartood, fariinta kuma filna oo kuma jiraan kaydinta, markaa koodku wuu burburaa marka la kala saarayo. Waxaan u baahanahay inaan saxiix ku darno fariinta aan dirayno oo aan nuqul ka samayno kaydinta imtixaankii u dambeeyay.
Imtixaanka labaad, waxaan ku dari doonaa saxiixa fariinta oo aan bedeli doonaa kaydinta qandaraaska smart. Sidan oo kale faylka leh imtixaanno wuxuu u eg yahay xilligan.
Aynu qorno imtixaan afraad, kaas oo aanu ku diri doono fariin ku saxeexan furaha gaarka ah ee qof kale. Aan abuurno fure kale oo gaar ah oo aan ku xafidno fayl not-owner.pk. Waxaan ku saxiixi doonaa fariinta furahan gaarka ah. Aan wadno imtixaanada oo aan hubinno in dhammaan imtixaanada ay gudbeen. Ballanqaad xilligan.
Hadda waxaan ugu dambeyntii u gudbi karnaa hirgelinta macquulnimada qandaraaska ee caqliga leh.
Π recv_external() waxaanu aqbali doonaa laba nooc oo fariimo ah.
Maadaama qandaraaskeenu uu ururin doono khasaaraha ciyaartoyda, lacagtan waa in lagu wareejiyo abuuraha bakhtiyaanasiibka. Cinwaanka boorsada abuuraha bakhtiyaanasiibka waxa lagu qoraa kaydinta marka heshiiska la abuurayo.
Kaliya haddii ay dhacdo, waxaan u baahanahay awood aan ku bedelno cinwaanka aan u dirno garaamyada kuwa khasaaray. Waa inaan sidoo kale ka diri karnaa garaamyada bakhtiyaanasiibka una dirno ciwaanka mulkiilaha.
Aan ku bilowno midka koowaad. Aynu marka hore qorno imtixaan hubin doona in farriinta diritaanka ka dib, qandaraaska smart uu keydiyay cinwaanka cusub ee kaydinta. Fadlan ogow in fariinta, marka lagu daro miiska iyo cinwaanka cusub, waxaan sidoo kale gudbineynaa action Tirada 7-bit ee aan taban ahayn, iyada oo ku xidhan, waxaanu dooran doonaa sida loo farsameeyo fariinta qandaraaska casriga ah.
<b 0 32 u, 1 @ 7 u, new_owner_wc @ 32 i, new_owner_account_id @ 256 u, b> message_to_sign !
Imtixaanka waxaad ku arki kartaa sida kaydinta qandaraasyada smart-ka laga dhigay storage ee Shanaad. Kala soocida doorsoomayaasha waxaa lagu sifeeyay dukumeentiyada shanaad.
Aan wadno imtixaanka oo aan hubinno inuu guuldareysto. Hadda aan ku darno macquul si aan u bedelno ciwaanka mulkiilaha bakhtiyaanasiibka.
Qandaraaska caqliga leh waxaan sii wadeynaa inaan kala saarno message, ku akhri action. Aan ku xasuusino in aan laba yeelan doono action: bedel ciwaanka oo dir garaam.
Kadibna waxaanu akhrinay ciwaanka cusub ee mulkiilaha qandaraaska oo aanu ku kaydinay kaydinta.
Waxaan wadnaa imtixaanada waxaanan aragnaa in imtixaanka saddexaad uu guuldareysto. Waxay u burburtaa sababtoo ah xaqiiqda ah in qandaraasku hadda sidoo kale ka saaro 7-bit oo fariinta ah, kuwaas oo ka maqan imtixaanka. Ku dar mid aan jirin fariinta action. Aan wadno imtixaanada oo aan aragno in wax walba ay gudbaan. halkan u go'aan in isbedel. Wayn
Hadda aan qorno caqli-galnimada dirida tirada garaamyada ee la cayimay cinwaanka hore loo kaydiyay.
Marka hore, aan qorno imtixaan. Waxaan qori doonaa laba imtixaan, mid marka aysan jirin dheelitirnaan ku filan, kan labaad marka wax walba ay tahay inay si guul leh u gudbaan. Imtixaannada waa la arki karaa ballantan.
Hadda aan ku darno koodka. Marka hore, aynu qorno laba hab oo caawiyayaasha ah. Habka ugu horreeya ee loo helo waa in la ogaado dheelitirka hadda ee qandaraaska smart.
int balance() inline_ref method_id {
return get_balance().pair_first();
}
Midda labaadna waa in garaam loo diro qandaraas kale oo caqli badan. Waxaan gabi ahaanba habkan ka soo guuriyay qandaraas kale oo caqli badan.
() send_grams(int wc, int addr, int grams) impure {
;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool src:MsgAddress -> 011000
cell msg = begin_cell()
;; .store_uint(0, 1) ;; 0 <= format indicator int_msg_info$0
;; .store_uint(1, 1) ;; 1 <= ihr disabled
;; .store_uint(1, 1) ;; 1 <= bounce = true
;; .store_uint(0, 1) ;; 0 <= bounced = false
;; .store_uint(4, 5) ;; 00100 <= address flags, anycast = false, 8-bit workchain
.store_uint (196, 9)
.store_int(wc, 8)
.store_uint(addr, 256)
.store_grams(grams)
.store_uint(0, 107) ;; 106 zeroes + 0 as an indicator that there is no cell with the data.
.end_cell();
send_raw_message(msg, 3); ;; mode, 2 for ignoring errors, 1 for sender pays fees, 64 for returning inbound message value
}
Aynu ku darno labadan hab qandaraaska caqliga leh oo aan qorno caqli-galnimada. Marka hore, waxaan kala saareynaa tirada garaamyada fariinta. Marka xigta waxaan hubineynaa dheelitirka, haddii aysan ku filneyn waxaan tuureynaa ka reebis. Haddii wax waliba ay fiican yihiin, markaa waxaan u dirnaa garaamyada ciwaanka la keydiyay oo aan cusbooneysiinno miiska.
Sidan oo kale waxay u egtahay qandaraaska caqliga leh xilligan. Aan wadno imtixaanada oo aan hubinno inay gudbaan.
By habka, komishan ayaa laga jarayaa qandaraaska smart mar kasta fariin la habeeyey. Si farriimaha qandaraaska smart ay u fuliyaan codsiga, ka dib hubinta aasaasiga ah waxaad u baahan tahay inaad wacdo accept_message().
Hadda aan u gudubno fariimaha gudaha. Dhab ahaantii, waxaanu aqbali doonaa oo kaliya garaam oo dib ugu soo celin doonaa labanlaab lacagta ciyaaryahanka haddii uu guuleysto iyo saddex meelood meel milkiilaha haddii laga adkaado.
Marka hore, aan qorno imtixaan fudud. Si tan loo sameeyo, waxaan u baahanahay ciwaanka tijaabada ee qandaraaska smart kaas oo aan ka soo dirno garaamyada qandaraaska smart.
Cinwaanka qandaraaska ee casriga ah wuxuu ka kooban yahay laba lambar, 32-bit integer mas'uul ka ah silsiladda shaqada iyo 256-bit lambar xisaabeed gaar ah oo aan taban ahayn. Tusaale ahaan, -1 iyo 12345, kani waa cinwaanka aan ku kaydin doono faylka.
Waxaan ka soo guuriyay shaqada cinwaanka cinwaanka TonUtil.fif.
// ( wc addr fname -- ) Save address to file in 36-byte format
{ -rot 256 u>B swap 32 i>B B+ swap B>file } : save-address
Aynu eegno sida shaqadu u shaqeyso, tani waxay ku siin doontaa fahamka sida Fift u shaqeyso. Ku bilow Fift qaab is-dhexgal ah.
~/TON/build/crypto/fift -i
Marka hore waxaan ku riixnay -1, 12345 iyo magaca faylka mustaqbalka "sender.addr" dulsaarka:
-1 12345 "sender.addr"
Tallaabada xigta waa in la fuliyo shaqada -rot, Kaas oo u beddelaya xirmooyinka si ay ugu sarreyso xirmada uu jiro nambar qandaraas oo gaar ah:
"sender.addr" -1 12345
256 u>B wuxuu u beddelaa 256-bit tiro aan taban ahayn oo u beddela bytes.
Ugu dambeyntiina bytes ayaa lagu qoraa faylka B>file. Taas ka dib raasamaalkeennu waa madhan yahay. Waan joojinay Fift. Fayl ayaa lagu dhex abuuray galka hadda sender.addr. Aan u guurno faylka gal galka la abuuray test/addresses/.
Aynu qorno imtixaan fudud oo garaamyada u diri doona qandaraas caqli-gal ah. Waa kan ballan-qaadkii.
Haddaba aan eegno macquulnimada bakhtiyaanasiibka.
Waxa ugu horreeya ee aan samayno waa hubinta fariinta bounced ama haddii kale bounced, markaas waanu iska indha tiraynaa. bounced macneheedu waxa weeye in qandaraasku soo celin doono garaam haddii qaar khalad dhaco. Ma soo celin doono garaam haddii qalad si lama filaan ah u dhaco.
Waxaan hubineynaa, haddii dheelitirka uu ka yar yahay nus garaam, ka dibna waxaan si fudud u aqbalnaa fariinta oo aan iska indhatirno.
Marka xigta, waxaan kala saareynaa ciwaanka qandaraaska caqliga leh ee fariintu ka timid.
Waxaan akhrinay xogta kaydinta ka dibna tirtiray sharadyadii hore ee taariikhda haddii ay jiraan in ka badan labaatan. Si ku habboon, waxaan qoray saddex hawlood oo dheeraad ah pack_order(), unpack_order(), remove_old_orders().
Marka xigta, waxaan eegnaa haddii dheelitirka uusan ku filneyn bixinta, ka dibna waxaan tixgelineynaa in tani aysan ahayn sharad, laakiin dib u buuxin iyo badbaadinta buuxinta orders.
Marka hore, haddii ciyaaryahanku lumiyo, waxaan ku badbaadineynaa taariikhda sharadka iyo haddii qadarku ka badan yahay 3 garaam, waxaan u dirnaa 1/3 milkiilaha qandaraaska smart.
Haddii ciyaaryahanku guuleysto, markaa waxaan u dirnaa labanlaab lacagta ciwaanka ciyaaryahanka ka dibna waxaan keydineynaa macluumaadka ku saabsan sharadka taariikhda.
() recv_internal(int order_amount, cell in_msg_cell, slice in_msg) impure {
var cs = in_msg_cell.begin_parse();
int flags = cs~load_uint(4); ;; int_msg_info$0 ihr_disabled:Bool bounce:Bool bounced:Bool
if (flags & 1) { ;; ignore bounced
return ();
}
if (order_amount < 500000000) { ;; just receive grams without changing state
return ();
}
slice src_addr_slice = cs~load_msg_addr();
(int src_wc, int src_addr) = parse_std_addr(src_addr_slice);
(int stored_seqno, int pubkey, int order_seqno, int number_of_wins, int incoming_amount, int outgoing_amount, int owner_wc, int owner_account_id, cell orders) = unpack_state();
orders = remove_old_orders(orders, order_seqno);
if (balance() < 2 * order_amount + 500000000) { ;; not enough grams to pay the bet back, so this is re-fill
builder order = pack_order(order_seqno, 1, now(), order_amount, src_wc, src_addr);
orders~udict_set_builder(32, order_seqno, order);
set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
return ();
}
if (rand(10) >= 4) {
builder order = pack_order(order_seqno, 3, now(), order_amount, src_wc, src_addr);
orders~udict_set_builder(32, order_seqno, order);
set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins, incoming_amount + order_amount, outgoing_amount, owner_wc, owner_account_id, orders));
if (order_amount > 3000000000) {
send_grams(owner_wc, owner_account_id, order_amount / 3);
}
return ();
}
send_grams(src_wc, src_addr, 2 * order_amount);
builder order = pack_order(order_seqno, 2, now(), order_amount, src_wc, src_addr);
orders~udict_set_builder(32, order_seqno, order);
set_data(pack_state(stored_seqno, pubkey, order_seqno + 1, number_of_wins + 1, incoming_amount, outgoing_amount + 2 * order_amount, owner_wc, owner_account_id, orders));
}
Hadda waxa hadhay oo dhan waa sahlan yihiin, aynu abuurno habab-helid si aan u helno macluumaadka ku saabsan xaaladda qandaraaska ee adduunka ka baxsan (xaqiiqda, akhri xogta kaydinta qandaraaskooda smart).
Aynu ku darno habab hel. Waxaan hoos ku qori doonaa sida loo helo macluumaadka ku saabsan qandaraaska smart.
Waxa kale oo aan ilaaway in aan ku daro koodka ka shaqayn doona codsiga ugu horreeya ee dhacaya marka la daabacayo qandaraas caqli-gal ah. Ballanqaadka u dhigma. Iyo dheeraad ah la saxay kutaan la dirayo 1/3 ee lacagta xisaabta milkiilaha.
Tallaabada xigta waa in la daabaco qandaraaska smart. Aan abuurno gal requests.
Wax mudan in fiiro gaar ah loo yeesho. Waxaan abuurnaa kayd qandaraas oo caqli badan iyo fariin gelinta. Taas ka dib, cinwaanka qandaraaska smart ayaa la soo saaray, taas oo ah, cinwaanka waa la yaqaan xitaa ka hor inta aan la daabicin TON. Marka xigta, waxaad u baahan tahay inaad dhowr garaam u dirto cinwaankan, ka dib markaa waxaad u baahan tahay inaad soo dirto fayl leh qandaraaska caqliga leh laftiisa, maadaama shabakadu ay qaadato komishan lagu kaydinayo qandaraaska caqliga leh iyo hawlgallada ku jira (validators kuwaas oo kaydiya oo fuliya smart qandaraasyada). Koodhka waxaa laga arki karaa halkan.
Hadda aan abuurno codsiyo si aan ula macaamilno qandaraaska caqliga leh.
Si sax ah, waxaan uga tagi doonaa kan ugu horreeya si loogu beddelo ciwaanka sida shaqo madax-bannaan, waxaanan samayn doonaa kan labaad si loogu diro garaamyada ciwaanka milkiilaha. Dhab ahaantii, waxaan u baahan doonaa inaan samayno wax la mid ah sidii imtixaanka dirida garaamyada.
Tani waa fariinta aan u diri doono qandaraaska smart, halkaas oo msg_seqno 165, action 2 iyo 9.5 garaam oo diris ah.
<b 165 32 u, 2 7 u, 9500000000 Gram, b>
Ha iloobin inaad ku saxiixdo fariinta furahaaga khaaska ah lottery.pk, kaas oo hore loo soo saaray markii la abuurayo qandaraaska smart. Waa kan ballan-qaadka u dhigma.
Helitaanka macluumaadka qandaraaska caqliga leh iyadoo la isticmaalayo habab hel
Hadda aan eegno sida loo maamulo qandaraasyada smart heli hababka.
Daahfurka lite-client oo socodsii hababka hel ee aan u qornay.
Π result ka kooban yahay qiimaha ay shaqadu soo celiso balance() laga bilaabo qandaraaskeena smart.
Waxaan ku samayn doonaa si la mid ah dhowr hab oo kale.
Waxaan isticmaali doonaa macmiil fudud waxaanan heli doonaa habab aan ku soo bandhigno macluumaadka ku saabsan qandaraaska caqliga leh ee goobta.
Muujinta xogta qandaraaska smart ee mareegaha
Waxaan ku qoray degel fudud oo Python ah si aan u muujiyo xogta qandaraaska caqliga leh ee hab ku habboon. Halkan si faahfaahsan uga hadli maayo oo waxaan daabici doonaa goobta hal ballan.
Codsiyada TON ayaa laga sameeyay Python iyadoo gacan ka heleysa lite-client. Si loo fududeeyo, goobta waxaa lagu baakadeeyay Docker waxaana lagu daabacay Google Cloud. Xiriirinta.
Isku dayaya
Hadda aan isku dayno inaan u dirno garaamyada halkaas si aad u buuxiso jeebka. Waxaan soo diri doonaa 40 garaam. Oo aan samayno laba sharadka si loo caddeeyo. Waxaan aragnaa in goobta ay muujiso taariikhda sharadka, boqolkiiba guusha hadda iyo macluumaadka kale ee waxtarka leh.
Waan aragnaain aan ku guulaysanay kii hore, kii labaadna waa laga badiyay.
Kadib
Maqaalku wuxuu noqday mid aad uga dheer intii aan filayay, malaha wuxuu noqon karaa mid gaaban, ama laga yaabee kaliya qof aan waxba ka aqoon TON oo raba inuu qoro oo daabaco qandaraas caqli-gal ah oo aan sahlanayn oo awood u leh inuu la falgalo. waa. Waxaa laga yaabaa in waxyaabaha qaarkood si fudud loo sharraxay.
Waxaa laga yaabaa in dhinacyada qaar ee fulinta loo samayn lahaa si hufan oo xarrago leh, laakiin markaas waxay qaadan lahayd wakhti dheer in la diyaariyo maqaalka. Waxa kale oo suurtogal ah in aan meel ku qaldamay ama aanan fahmin wax, markaa haddii aad samaynayso wax halis ah, waxaad u baahan tahay inaad ku tiirsato dukumeenti rasmi ah ama kaydka rasmiga ah ee TON code.
Waa in la ogaadaa in maadaama TON lafteedu ay weli ku jirto marxaladda firfircoon ee horumarinta, waxaa laga yaabaa inay dhacaan isbeddelo jabin doona mid ka mid ah tillaabooyinka maqaalkan (taas oo dhacday intaan wax qorayo, mar hore ayaa la saxay), laakiin habka guud ayaa ah. lagama yaabo inuu isbedelo.
Ka hadli maayo mustaqbalka TON. Waxaa laga yaabaa in madalku ay noqoto wax weyn oo ay tahay in aan waqti ku bixinno daraasadda oo aan ka buuxinno wax soo saarkeena hadda.
Waxa kale oo jira Libra oo ka socota Facebook, kaas oo leh dhagaystayaal suurtagal ah oo isticmaala oo ka weyn TON. Waxba kama aqaano Miisaanka, marka loo eego golaha waxaa jira hawlo aad uga badan marka loo eego bulshada TON. In kasta oo horumarinta iyo bulshada TON ay aad ugu eg yihiin dhulka hoostiisa, taas oo sidoo kale qabow.
Kala hadal TON Telegram, kaas oo runtii gacan ka geystay in la ogaado marxaladda hore. Waxaan filayaa inaysan khalad noqon doonin haddii aan idhaahdo qof kasta oo wax u qoray TON ayaa jooga. Waxa kale oo aad ka codsan kartaa garaamyada tijaabada halkaas. https://t.me/tondev_ru
Sheeko kale oo ku saabsan TON oo aan ka helay macluumaad waxtar leh: https://t.me/TONgramDev