Nezve manyorero uye kuburitsa smart kontrakiti muTON
Nyaya iyi ndeyei?
Muchinyorwa ini ndichataura nezve matorero andakaita mumakwikwi ekutanga (evaviri) eTeregiramu blockchain, haana kutora mubairo, uye ndakafunga kurekodha ruzivo rwangu mune chinyorwa kuti chirege kunyura mukukanganisika uye, pamwe, kubatsira. mumwe munhu.
Sezvo ndakanga ndisingadi kunyora abstract code, asi kuti ndiite chimwe chinhu chinoshanda, nokuda kwechinyorwa chandakanyora chibvumirano chekuchenjera chelottery yekukurumidza uye webhusaiti inoratidza ruzivo rwechibvumirano chakangwara kubva kuTON pasina kushandisa kuchengetedza kwepakati.
Chinyorwa chichabatsira kune avo vanoda kuita yavo yekutanga smart kontrakiti muTON, asi vasingazive pekutangira.
Ndichishandisa lottery semuenzaniso, ini ndichabva pakuisa nharaunda kusvika pakuburitsa smart kontrakiti, kushamwaridzana nayo, nekunyora webhusaiti yekugamuchira uye kuburitsa data.
Nezvekupinda mumakwikwi
Gumiguru apfuura, Teregiramu yakazivisa makwikwi e blockchain nemitauro mitsva Fift и FunC. Zvaive zvakakodzera kuti usarudze kubva pakunyora chero chezvibvumirano zvishanu zvakarongwa zvine hungwaru. Ndakafunga kuti zvingava zvakanaka kuita chimwe chinhu chakasiyana, kudzidza mutauro uye kuita chimwe chinhu, kunyange kana ndisingafaniri kunyora chimwe chinhu mune ramangwana. Uyezve, musoro wacho unogara uri pamiromo.
Zvakakodzera kutaura kuti ndakanga ndisina ruzivo rwekugadzira zvibvumirano zvakangwara.
Ndakaronga kutora rutivi kusvikira kumugumo chaiko kutozosvikira ndagona ndokuzonyora chinyorwa chehwirudzuro, asi ndakakundikana pakarepo pane yokutanga. I ine multi-siginicha pa FunC uye zvaiwanzoshanda. Ndakazvitora sehwaro .
Panguva iyoyo, ndaifunga kuti izvi zvakanga zvakakwana kuti nditore imwe nzvimbo yemubayiro. Somugumisiro, vanenge 40 muvatori vechikamu 60 vakava vahwina mibayiro uye ini ndakanga ndisiri pakati pavo. Kazhinji, hapana chakaipa neizvi, asi chimwe chinhu chakandinetsa. Panguva yekuziviswa kwemigumisiro, kuongororwa kwekuedzwa kwekontrakiti yangu kwakanga kusati kwaitwa, ndakabvunza vatori vechikamu muhurukuro kana paiva nemumwe munhu asina, pakanga pasina.
Sezviri pachena ndichiteerera mameseji angu, mazuva maviri gare gare vatongi vakaburitsa chirevo uye ini handisati ndanzwisisa kuti vakapotsa netsaona kondirakiti yangu yakangwara panguva yekutonga kana kungofunga kuti yaive yakaipa zvekuti yaisada mhinduro. Ndakabvunza mubvunzo papeji, asi handina kuwana mhinduro. Kunyangwe chisiri chakavanzika kuti ndiani anotonga, ndakazviona zvisina basa kunyora mameseji ega.
Nguva yakawanda yakashandiswa pakunzwisisa, saka zvakasarudzwa kunyora chinyorwa. Sezvo kusati kwave neruzivo rwakawanda, chinyorwa ichi chichabatsira kuchengetedza nguva kune wese anofarira.
Pfungwa yezvibvumirano zvakangwara muTON
Usati wanyora chero chinhu, iwe unofanirwa kufunga kuti ndeupi rutivi rwekusvika chinhu ichi kubva. Naizvozvo, ikozvino ini ndichakuudza kuti ndedzipi zvikamu iyo system ine. Kunyanya, ndezvipi zvikamu zvaunoda kuziva kuti unyore ingangoita imwe mhando yekontrakiti yekushanda.
Tichatarisa pakunyora kontrakiti yakangwara uye kushanda nayo TON Virtual Machine (TVM), Fift и FunC, saka chinyorwa chakanyanya kufanana netsanangudzo yekuvandudzwa kwechirongwa chenguva dzose. Isu hatizogara pamusoro pekuti chikuva pachacho chinoshanda sei pano.
In general nezve kuti inoshanda sei TVM uye mutauro Fift pane zvakanaka zvinyorwa zvepamutemo. Ndichitora chikamu mumakwikwi uye zvino ndichinyora chibvumirano chazvino, ndaiwanzotendeukira kwaari.
Mutauro mukuru unonyorwa zvibvumirano zvakangwara ndewe FunC. Iko hakuna zvinyorwa pairi panguva ino, saka kuti unyore chimwe chinhu iwe unofanirwa kudzidza mienzaniso yeakangwara zvibvumirano kubva kune yepamutemo repository uye kuitiswa kwemutauro pachayo ipapo, uye iwe unogona kutarisa mienzaniso yezvibvumirano zvakangwara kubva kune maviri apfuura. makwikwi. Links pakupera kwechinyorwa.
Ngatitii takatonyora kondirakiti yakangwara ye FunC, mushure mezvo isu tinonyora kodhi muFift assembler.
Iyo yakabatanidzwa smart kontrakiti inoramba ichiburitswa. Kuti uite izvi unofanirwa kunyora basa mukati Fift, iyo inotora iyo smart kontrakiti kodhi uye mamwe ma paramita sekuisa, uye inobuda ichava faira ine kuwedzera. .boc (zvinoreva "bhegi remasero"), uye, zvichienderana nemanyorero atinoita, kiyi yega yega nekero, iyo inogadzirwa zvichienderana nekodhi yekontrakiti yakangwara. Iwe unogona kutotumira magiramu kukero yekontrakiti yakangwara iyo isati yaburitswa.
Kuburitsa smart kontrakiti muTON yakagamuchirwa .boc iyo faira inoda kutumirwa ku blockchain uchishandisa mwenje mutengi (zvimwe pane izvo pazasi). Asi usati washambadzira, unofanirwa kuendesa magiramu kukero yakagadzirwa, zvikasadaro smart contract haizoburitswa. Mushure mekudhindwa, unogona kutaurirana nekontrakiti yakangwara nekuitumira mameseji kubva kunze (somuenzaniso, uchishandisa mutengi wechiedza) kana kubva mukati (somuenzaniso, imwe smart contract inotumira imwe meseji mukati meTON).
Kana tikangonzwisisa kuti kodhi inoburitswa sei, zvinova nyore. Isu tinoziva zvatinoda kunyora uye kuti chirongwa chedu chichashanda sei. Uye tichinyora, tinotarisa kuti izvi zvakatoitwa sei mumakondirakiti aripo akangwara, kana isu tinotarisa mukodhi yekushandisa Fift и FunC mune yepamutemo repository, kana tarisa mune zviri pamutemo zvinyorwa.
Nguva zhinji ndaitsvaga mazwi akakosha mukukurukurirana kweTeregiramu kwakaungana vese vatori vemakwikwi nevashandi veTeregiramu, uye zvakaitika kuti panguva yemakwikwi munhu wese akaungana ipapo ndokutanga kukurukura nezveFift neFunC. Link panoperera chinyorwa.
Yave nguva yekusimuka kubva padzidziso kuenda kukudzidzira.
Kugadzirira nharaunda yekushanda neTON
Ndakaita zvese zvichatsanangurwa munyaya yeMacOS ndikaiongorora kaviri mu "clean" Ubuntu 18.04 LTS paDocker.
Chinhu chekutanga chaunofanirwa kuita kurodha uye kuisa lite-client iyo yaunogona kutumira nayo zvikumbiro kuTON.
Mirayiridzo iri pawebhusaiti yepamutemo inotsanangura maitiro ekuisa zvakanyatsojeka uye zvakajeka, ichisiya zvimwe zvinhu. Pano tinotevera mirairo, tichiisa chero zvinhu zvisiripo munzira. Handina kuunganidza purojekiti yega yega uye ndakaiisa kubva kunzvimbo yepamutemo. Ubuntu (paMacOS ndakashandisa brew).
apt -y install git
apt -y install wget
apt -y install cmake
apt -y install g++
apt -y install zlib1g-dev
apt -y install libssl-dev Kana zvese zvinotsamira zvaiswa iwe unogona kuisa lite-client, Fift, FunC.
Chekutanga, isu tinogadzirisa iyo TON repository pamwe chete nekutsamira kwayo. Kuti zvive nyore, tichaita zvese mune folda ~/TON.
cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursiveIyo repository inochengetawo kuita Fift и FunC.
Iye zvino tagadzirira kuunganidza chirongwa. Iyo repository kodhi inogadzirwa kuita folda ~/TON/ton. The ~/TON gadzira folda build uye unganidza purojekiti mairi.
mkdir ~/TON/build
cd ~/TON/build
cmake ../tonSezvo tichizonyora chibvumirano chakangwara, hatidi chete lite-clientasi Fift с FunC, saka ngatiunganidze zvese. Haisi kukurumidza kuita, saka takamirira.
cmake --build . --target lite-client
cmake --build . --target fift
cmake --build . --target funcTevere, dhawunirodha iyo faira yekumisikidza iyo ine data nezve node kwairi lite-client ichabatana.
wget https://test.ton.org/ton-lite-client-test1.config.jsonKuita zvikumbiro zvekutanga kuTON
Zvino ngatitangei lite-client.
cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.jsonKana iyo kuvaka yakabudirira, saka mushure mekutangisa iwe uchaona danda rekubatanidza kwemwenje mutengi kune node.
[ 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)
...Unogona kumhanya kuraira help uye ona mirairo iripo.
helpNgatinyorei mirairo yatichashandisa munyaya ino.
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 parameterslast получает последний созданный блок с сервера.
sendfile <filename> отправляет в TON файл с сообщением, именно с помощью этой команды публикуется смарт-контракт и запрсосы к нему.
getaccount <addr> загружает текущее состояние смарт-контракта с указанным адресом.
runmethod <addr> [<block-id-ext>] <method-id> <params> запускает get-методы смартконтракта. Iye zvino takagadzirira kunyora kondirakiti pachayo.
Kutevedzera
Idea
Sezvandanyora pamusoro, kondirakiti yakangwara yatiri kunyora irotari.
Uyezve, iyi haisi lottery yaunoda kutenga tikiti uye kumirira awa, zuva kana mwedzi, asi pakarepo iyo mushandisi anoendesa kukero yechibvumirano. N magiramu, uye ipapo anoitora zvakare 2 * N magiramu kana kurasikirwa. Tichaita mukana wekuhwina angangoita 40%. Kana pasina magiramu akakwana ekubhadhara, saka isu tichaona kutengeserana seyepamusoro-kumusoro.
Uyezve, zvakakosha kuti mabheti aonekwe munguva chaiyo uye mune fomu iri nyore, kuitira kuti mushandisi anzwisise nekukurumidza kana akahwina kana kurasikirwa. Naizvozvo, iwe unofanirwa kugadzira webhusaiti inoratidza mabheti uye mhedzisiro zvakananga kubva kuTON.
Kunyora chibvumirano chakangwara
Kuti zvive nyore, ndakasimbisa kodhi yeFunC; iyo plugin inogona kuwanikwa uye kuiswa muVisual Studio Code yekutsvaga; kana iwe ukangoerekana wada kuwedzera chimwe chinhu, ndaita kuti plugin iwanikwe pachena. Zvakare, mumwe munhu akambogadzira plugin yekushanda neFift, unogona zvakare kuiisa uye kuiwana muVSC.
Ngatitangei nekukasika repository apo isu tichaisa mhedzisiro yepakati.
Kuita kuti hupenyu hwedu huve nyore, tichanyora kontrakiti yakangwara uye toiedza munharaunda kusvika yagadzirira. Chete mushure meizvozvo tichazviburitsa muTON.
Chibvumirano chakangwara chine nzira mbiri dzekunze dzinogona kuwanikwa. Chekutanga, recv_external() basa iri rinoitwa kana chikumbiro chechibvumirano chichibva kunze kwenyika, kureva, kwete kubva kuTON, semuenzaniso, isu pachedu patinenge tichigadzira meseji uye tinoitumira kuburikidza ne-lite-client. Chepiri, recv_internal() iyi ndiyo apo, mukati meTON pachayo, chero kontrakiti inoreva yedu. Muzviitiko zvese izvi, unogona kupfuudza paramita kune basa.
Ngatitangei nemuenzaniso wakapfava unozoshanda kana ukadhindwa, asi hapana basa rekuita mariri.
() recv_internal(slice in_msg) impure {
;; TODO: implementation
}
() recv_external(slice in_msg) impure {
;; TODO: implementation
}Pano tinofanira kutsanangura kuti chii slice. Yese data yakachengetwa muTON Blockchain muunganidzwa TVM cell kana kungoita cell, musero yakadaro unogona kuchengeta kusvika ku1023 bits yedata uye kusvika ku 4 links kune mamwe masero.
TVM cell slice kana slice ichi chikamu cheiyo iripo cell inoshandiswa kuitsanangura, inozobuda pachena gare gare. Chinhu chikuru kwatiri ndechekuti tinokwanisa kutamisa slice uye zvichienderana nerudzi rwemeseji, gadzira iyo data mukati recv_external() kana recv_internal().
impure -izwi rinokosha rinoratidza kuti basa racho rinoshandura data rechibvumirano chekuchenjera.
Ngatichengetedzei kodhi yekondirakiti mukati lottery-code.fc uye unganidza.
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc Zvinoreva mireza zvinogona kutariswa uchishandisa murairo
~/TON/build/crypto/func -helpIsu takanyora Fift assembler kodhi mukati 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>cInogona kutangwa munharaunda, nekuda kweizvi tichagadzirira zvakatipoteredza.
Ziva kuti mutsara wekutanga unobatanidza Asm.fif, iyi kodhi yakanyorwa muFift yeFift assembler.
Sezvo isu tichida kumhanya uye kuyedza smart kontrakiti munharaunda, isu tichagadzira faira lottery-test-suite.fif uye kukopa kodhi yakabatanidzwa ipapo, ichitsiva mutsara wekupedzisira mairi, iyo inonyora yakangwara kodhi kodhi kune imwe nguva codekuti wozoiendesa kumuchina chaiwo:
"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
Parizvino zvinoita sezviri pachena, ikozvino ngatiwedzerei kune imwechete faira iyo kodhi yatichashandisa kuvhura TVM.
0 tuple 0x076ef1ea , // magic
0 , 0 , // actions msg_sents
1570998536 , // unix_time
1 , 1 , 3 , // block_lt, trans_lt, rand_seed
0 tuple 100000000000000 , dictnew , , // remaining balance
0 , dictnew , // contract_address, global_config
1 tuple // wrap to another tuple
constant c7
0 constant recv_internal // to run recv_internal()
-1 constant recv_external // to invoke recv_external()В c7 isu tinorekodha mamiriro, ndiko kuti, iyo data iyo iyo TVM (kana network network) ichavhurwa. Kunyangwe panguva yemakwikwi, mumwe wevagadziri akaratidza nzira yekugadzira c7 uye ndakakopa. Munyaya ino tingada kuchinja rand_seed sezvo chizvarwa chenhamba isina kurongeka inotsamira pairi uye kana isina kuchinjwa, nhamba imwe cheteyo inodzoserwa nguva dzose.
recv_internal и recv_external maconstants ane kukosha 0 uye -1 achave nebasa rekudaidza mabasa anoenderana muchibvumirano chakangwara.
Iye zvino tagadzirira kugadzira bvunzo yekutanga kune yedu isina chinhu smart kontrakiti. Kuti zvive pachena, ikozvino tichawedzera bvunzo dzese kune imwechete faira lottery-test-suite.fif.
Ngatigadzire shanduko storage uye nyora isina chinhu mairi cell, iyi ichava smart contract storage.
message Iyi ndiyo meseji yatinozoendesa kune yakangwara kuonana kubva kunze. Tichaitawo kuti ive isina chinhu ikozvino.
variable storage
<b b> storage !
variable message
<b b> message ! Mushure mekunge tagadzirira zvinogara uye zvinosiyana, tinotanga TVM tichishandisa murairo runvmctx uye pfuudza iyo yakagadzirwa parameter kune yekuisa.
message @
recv_external
code
storage @
c7
runvmctx Pakupedzisira tichabudirira yepakati kodhi ye Fift.
Iye zvino tinogona kumhanyisa kodhi inobuda.
export FIFTPATH=~/TON/ton/crypto/fift/lib // выполняем один раз для удобства
~/TON/build/crypto/fift -s lottery-test-suite.fif Iyo purogiramu inofanira kushanda isina zvikanganiso uye mune zvakabuda tichaona danda rekuuraya:
execute SETCP 0
execute DICTPUSHCONST 19 (xC_,1)
execute DICTIGETJMPZ
execute DROP
execute implicit RET
[ 3][t 0][1582281699.325381279][vm.cpp:479] steps: 5 gas: used=304, max=9223372036854775807, limit=9223372036854775807, credit=0Zvakanaka, isu takanyora yekutanga kushanda shanduro yekontrakiti yakangwara.
Zvino tinofanira kuwedzera kushanda. Chekutanga ngatibatanei nemameseji anobva kunze kwenyika kuenda recv_external()
Mugadziri pachake anosarudza fomati yemeseji iyo kontrakiti inogona kugamuchira.
Asi kazhinji
- chekutanga, tinoda kuchengetedza kontrakiti yedu kubva kune imwe nyika uye kuigadzira kuitira kuti chete muridzi wekontrakiti anogona kutumira mameseji ekunze kwairi.
- chechipiri, patinotumira shoko rakakodzera kuTON, tinoda kuti izvi zviitike kamwe chete uye patinotumira shoko rimwe chete zvakare, chibvumirano chekuchenjera chinochiramba.
Saka dzinenge chibvumirano chega chega chinogadzirisa matambudziko maviri aya, sezvo kondirakiti yedu ichitambira mameseji ekunze, isu tinofanirwa kuzvitarisirawo.
Tichazviita munhevedzano. Kutanga, ngatigadzirise dambudziko nekudzokorora; kana kontrakiti yakatogamuchira meseji yakadaro uye yakagadziridzwa, haizoite kechipiri. Uye ipapo isu tichagadzirisa dambudziko kuitira kuti chete denderedzwa revanhu rinogona kutumira mameseji kune smart kontrakiti.
Pane nzira dzakasiyana dzekugadzirisa dambudziko neduplicate meseji. Heano maitiro atichaita. Muchibvumirano chekuchenjera, tinotanga counter yemashoko akagamuchirwa nehuwandu hwekutanga 0. Mumashoko ega ega kune smart contract, tichawedzera ikozvino counter value. Kana iyo counter value iri mumeseji isingaenderane nekukosha kuri muchibvumirano chakangwara, saka isu hatizvigadzirise; kana zvikadaro, tobva tazvigadzirisa uye towedzera counter muchibvumirano chakangwara ne1.
Ngatidzokere ku lottery-test-suite.fif uye wedzera bvunzo yechipiri kwairi. Kana tikatumira nhamba isiriyo, kodhi yacho inofanira kusiya imwe. Semuyenzaniso, rega kondirakiti data ichengete 166, uye isu tichatumira 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"Ngatitangei.
~/TON/build/crypto/fift -s lottery-test-suite.fif Uye isu tichaona kuti bvunzo inoitwa nekukanganisa.
[ 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 passedPanguva ino lottery-test-suite.fif inofanira kutaridzika .
Zvino ngatiwedzerei counter logic kune smart kontrakiti mukati 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 nhema meseji yatinotumira.
Chinhu chekutanga chatinoita kutarisa kana meseji ine data, kana zvisiri, tobva tabuda.
Tevere tinoparadzira meseji. in_msg~load_uint(32) inotakura nhamba 165, 32-bit unsigned int kubva kune meseji yakatumirwa.
Tevere tinotakura 32 bits kubva kune smart contract kuchengetedza. Isu tinotarisa kuti nhamba yakatakurwa inoenderana neyapfuura; kana zvisiri, tinokanda mutsauko. Kwatiri isu, sezvo isu tichipfuura isingaite, kusarudzika kunofanirwa kukandwa.
Zvino ngatiunganidzei.
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc Kopira kodhi yabuda ku lottery-test-suite.fif, tisingakanganwi kutsiva mutsara wekupedzisira.
Tinotarisa kuti bvunzo yakapfuura:
~/TON/build/crypto/fift -s lottery-test-suite.fifIwe unogona kuona chibvumirano chinoenderana nemhedzisiro yazvino.
Ziva kuti hazviitike kugara uchikopa kodhi yakaunganidzwa yekontrakiti yakangwara mufaira ine bvunzo, saka isu tichanyora script inozonyora iyo kodhi mune yenguva dzose kwatiri, uye isu tichangobatanidza iyo yakaunganidzwa kodhi kumiedzo yedu tichishandisa. "include".
Gadzira faira mufolda yeprojekiti build.sh nezvinotevera zvirimo.
#!/bin/bash
~/TON/build/crypto/func -SPA -R -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fcNgatiite kuti iite executable.
chmod +x ./build.shIye zvino, ingomhanya script yedu kuunganidza kontrakiti. Asi kunze kweizvi, isu tinofanirwa kuinyora mune inongogara code. Saka isu tichagadzira faira idzva lotter-compiled-for-test.fif, yatichaisa mufaira lottery-test-suite.fif.
Ngatiwedzerei skirpt kodhi kune sh, iyo inongodzokorora iyo yakaunganidzwa faira mukati lotter-compiled-for-test.fif uye shandura mutsara wekupedzisira mairi.
# 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.fifZvino, kuti titarise, ngatimhanyei mhedzisiro script uye faira richagadzirwa lottery-compiled-for-test.fif, izvo zvatichabatanidza mune yedu lottery-test-suite.fif
В lottery-test-suite.fif bvisa kodhi yekondirakiti uye wedzera mutsara "lottery-compiled-for-test.fif" include.
Tinoita bvunzo kuona kuti vakapasa.
~/TON/build/crypto/fift -s lottery-test-suite.fifHukuru, ikozvino kuitisa kutangwa kwebvunzo, ngatigadzire faira test.sh, iyo inotanga kuita build.sh, wobva wamhanya ma test.
touch test.sh
chmod +x test.shTinonyora mukati
./build.sh
echo "nCompilation completedn"
export FIFTPATH=~/TON/ton/crypto/fift/lib
~/TON/build/crypto/fift -s lottery-test-suite.fifNgatizviite test.sh uye imhanye kuti uone kuti bvunzo dzinoshanda.
chmod +x ./test.sh
./test.shIsu tinotarisa kuti kontrakiti inounganidza uye bvunzo dzinoitwa.
Zvakanaka, ikozvino panotanga test.sh Iwo maedzo anozounganidzwa oitwa nekukasika. Heino link ye .
Zvakanaka, tisati taenderera mberi, ngatiitei chimwezve chinhu kuti tive nyore.
Ngatigadzire folda build kwatinozochengeta kondirakiti yakakopwa uye clone yayo yakanyorwa kuita nguva dzose lottery-compiled.fif, lottery-compiled-for-test.fif. Ngatigadzirireiwo folda test iyo test file ichachengetwa kupi? lottery-test-suite.fif uye pamwe nemamwe mafaira anotsigira. .
Ngatirambei tichigadzira kondirakiti yakangwara.
Tevere panofanirwa kuve nemuyedzo unotarisa kuti meseji yakagamuchirwa here uye iyo counter inogadziridzwa muchitoro patinotumira nhamba chaiyo. Asi tichazviita gare gare.
Iye zvino ngatifungei nezve chimiro che data uye kuti ndeipi data inoda kuchengetwa muchibvumirano chakangwara.
Ini ndichatsanangura zvese zvatinochengeta.
`seqno` 32-х битное целое положительное число счетчик.
`pubkey` 256-ти битное целое положительное число публичный ключ, с помощью которого, мы будем проверять подпись отправленного извне сообщения, о чем ниже.
`order_seqno` 32-х битное целое положительное число хранит счетчик количества ставок.
`number_of_wins` 32-х битное целое положительное число хранит количество побед.
`incoming_amount` тип данных Gram (первые 4 бита отвечает за длину), хранит общее количество грамов, которые были отправлены на контртакт.
`outgoing_amount` общее количество грамов, которое было отправлено победителям.
`owner_wc` номер воркчейна, 32-х битное (в некоторых местах написано, что 8-ми битное) целое число. В данный момент всего два -1 и 0.
`owner_account_id` 256-ти битное целое положительное число, адрес контракта в текущем воркчейне.
`orders` переменная типа словарь, хранит последние двадцать ставок. Next unofanira kunyora mabasa maviri. Ngatishevedze wekutanga pack_state(), iyo inotakura iyo data yekuzotevera kuchengetedza mune smart kontrakiti yekuchengetedza. Ngatishevedze wechipiri unpack_state() achaverenga uye kudzosa data kubva mudura.
_ 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;
}Isu tinowedzera aya maviri mabasa pakutanga kwechibvumirano chakangwara. Zvichashanda mhedzisiro yepakati.
Kuti uchengetedze data iwe uchafanirwa kufonera yakavakirwa-mukati basa set_data() uye ichanyora data kubva pack_state() mune smart contract storage.
cell packed_state = pack_state(arg_1, .., arg_n);
set_data(packed_state);Iye zvino zvatine mabasa ari nyore ekunyora nekuverenga data, tinogona kuenderera mberi.
Isu tinofanirwa kutarisa kuti meseji inouya kubva kunze yakasainwa nemuridzi wekondirakiti (kana mumwe mushandisi anokwanisa kuwana kiyi yakavanzika).
Patinoburitsa kontrakiti yakangwara, tinogona kuitanga nedata ratinoda mukuchengetedza, iro rinozochengetwa kuti rizoshandiswa mune ramangwana. Isu ticharekodha kiyi yeruzhinji ipapo kuti tigone kuona kuti meseji iri kuuya yakasainwa nekiyi yakavanzika inoenderana.
Tisati taenderera mberi, ngatigadzire kiyi yakavanzika toinyorera test/keys/owner.pk. Kuti tiite izvi, ngatitangei Fift mune inopindirana modhi uye tiite mirairo mina.
`newkeypair` генерация публичного и приватного ключа и запись их в стек.
`drop` удаления из стека верхнего элемента (в данном случае публичный ключ)
`.s` просто посмотреть что лежит в стеке в данный момент
`"owner.pk" B>file` запись приватного ключа в файл с именем `owner.pk`.
`bye` завершает работу с Fift. Ngatigadzire folda keys mukati mefolda test wonyora kiyi yakavanzika ipapo.
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
byeIsu tinoona faira mune yazvino folda owner.pk.
Isu tinobvisa kiyi yeruzhinji kubva mustack uye pazvinenge zvichidikanwa tinogona kuitora kubva kune yakavanzika.
Iye zvino tinoda kunyora siginecha verification. Ngatitange nemuyedzo. Kutanga tinoverenga kiyi yakavanzika kubva mufaira uchishandisa basa file>B woinyora kune chinja owner_private_key, wozoshandisa basa racho priv>pub shandura kiyi yakavanzika kukiyi yeruzhinji wonyora mhinduro mukati owner_public_key.
variable owner_private_key
variable owner_public_key
"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !Tichada makiyi ese ari maviri.
Isu tinotangisa iyo smart kondirakiti kuchengetedza neabirary data mune imwechete kutevedzana senge mune basa pack_state()wobva wanyora muchidimbu storage.
variable owner_private_key
variable owner_public_key
variable orders
variable owner_wc
variable owner_account_id
"./keys/owner.pk" file>B owner_private_key !
owner_private_key @ priv>pub owner_public_key !
dictnew orders !
0 owner_wc !
0 owner_account_id !
<b 0 32 u, owner_public_key @ B, 0 32 u, 0 32 u, 0 Gram, 0 Gram, owner_wc @ 32 i, owner_account_id @ 256 u, orders @ dict, b> storage !Tevere, isu tichanyora meseji yakasainwa, inongove iine siginecha uye kukosha kwekupikisa.
Kutanga, tinogadzira iyo data yatinoda kufambisa, tozoisaina nekiyi yakavanzika uye pakupedzisira tinoburitsa meseji yakasainwa.
variable message_to_sign
variable message_to_send
variable signature
<b 0 32 u, b> message_to_sign !
message_to_sign @ hashu owner_private_key @ ed25519_sign_uint signature !
<b signature @ B, 0 32 u, b> <s message_to_send ! Nekuda kweizvozvo, meseji yatinozotumira kune smart kontrakiti inorekodhwa mune inoshanduka message_to_send, nezvemabasa hashu, ed25519_sign_uint unogona kuverenga .
Uye kumhanya bvunzo tinodaidza zvakare.
message_to_send @
recv_external
code
storage @
c7
runvmctxIyo faira ine bvunzo inofanirwa kutaridzika seizvi panguva ino.
Ngatimhanyei bvunzo uye ichafoira, saka tichachinja smart contract kuti igamuchire mameseji efomati iyi uye ione siginicha.
Kutanga, tinoverenga 512 bits ye siginicha kubva kune meseji uye toinyora kune inoshanduka, tobva taverenga 32 bits eiyo counter variable.
Sezvo isu tine basa rekuverenga data kubva kune smart contract kuchengetedza, isu tichaishandisa.
Inotevera ndeyekutarisa iyo counter inotamiswa nekuchengetedza uye kutarisa siginecha. Kana chimwe chinhu chisingaenderane, saka tinokanda mutsauko nekodhi yakakodzera.
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));Kuzvipira kwakakodzera .
Ngatimhanyei bvunzo tione kuti bvunzo yechipiri yakundikana. Nezvikonzero zviviri, hapana mabheti akakwana mumeseji uye hapana mabheti akakwana mukuchengetedza, saka kodhi inopunzika kana ichipfuura. Isu tinofanirwa kuwedzera siginecha kune meseji yatiri kutumira uye kukopa chengetedzo kubva muyedzo yekupedzisira.
Muyedzo yechipiri, isu tichawedzera siginecha yemeseji uye nekuchinja iyo smart contract yekuchengetedza. iyo faira ine bvunzo inoita senge panguva ino.
Ngatinyorei bvunzo yechina, yatinozotumira meseji yakasainwa nekiyi yega yega yemumwe munhu. Ngatigadzire imwe kiyi yakavanzika toichengeta kufaira not-owner.pk. Tichasaina meseji nekiyi yakavanzika iyi. Ngatimhanyei bvunzo uye tive nechokwadi chekuti bvunzo dzese dzapfuura. panguva ino.
Iye zvino isu tinogona pakupedzisira kuenderera mberi nekushandisa iyo smart contract logic.
В recv_external() tichagamuchira marudzi maviri emashoko.
Sezvo kondirakiti yedu ichizounganidza kurasikirwa kwevatambi, mari iyi inofanirwa kuendeswa kumusiki werotari. Kero yechikwama yemugadziri welottery inonyorwa mudura kana kontrakiti yagadzirwa.
Zvingoitika, tinoda kugona kushandura kero kwatinotumira magiramu evakarasika. Tinofanirawo kukwanisa kutumira magiramu kubva kurotari kuenda kukero yemuridzi.
Ngatitangei neyokutanga. Ngatitangei kunyora bvunzo inozotarisa kuti mushure mekutumira meseji, kondirakiti yakangwara yakachengetedza kero nyowani mudura. Ndokumbira utarise kuti mune meseji, kuwedzera kune iyo counter uye kero nyowani, isu tinotumirawo action A 7-bit integer isiri-negative nhamba, zvichienderana nayo, isu tichasarudza magadzirirwo emashoko muchibvumirano chekuchenjera.
<b 0 32 u, 1 @ 7 u, new_owner_wc @ 32 i, new_owner_account_id @ 256 u, b> message_to_sign !Muyedzo iwe unogona kuona kuti smartcontract yekuchengetedza yakaderedzwa sei storage muFift. Deserialization yezvakasiyana zvinotsanangurwa muFift zvinyorwa.
nekapfu yakawedzerwa.
Ngatimhanyei bvunzo uye tione kuti yakundikana. Zvino ngatiwedzerei pfungwa yekuchinja kero yemuridzi welottery.
Muchibvumirano chakangwara tinoenderera mberi nekuenzanisa message, verenga mukati action. Rega tikuyeuchidze kuti tichava maviri action: shandura kero uye tumira magiramu.
Zvadaro tinoverenga kero itsva yemuridzi wekontrakiti uye tinoichengeta mukuchengetedza.
Tinomhanya bvunzo toona kuti bvunzo yechitatu yakundikana. Inopunzika nekuda kwekuti kondirakiti ikozvino inowedzera 7 bits kubva kune meseji, iyo isipo muyedzo. Wedzera chisipo kune meseji action. Ngatimhanyei bvunzo tione kuti zvese zvapfuura. zvipira kuchinja. Hukuru.
Iye zvino ngatinyorei pfungwa yekutumira nhamba yakatarwa yemagiramu kune kero yakambochengetwa.
Kutanga, ngatinyore bvunzo. Tichanyora miedzo miviri, imwe kana pasina kukwana kwakakwana, yechipiri apo zvinhu zvose zvinofanira kubudirira kubudirira. Miedzo inogona kuonekwa .
Zvino ngatiwedzere kodhi. Kutanga, ngatinyore nzira mbiri dzevabatsiri. Yekutanga yekuwana nzira ndeyekutsvaga iyo yazvino chiyero che smart kontrakiti.
int balance() inline_ref method_id {
return get_balance().pair_first();
}Uye yechipiri ndeyekutumira magiramu kune imwe chibvumirano chakangwara. Ndakanyatsotevedzera nzira iyi kubva kune imwe chibvumirano chakangwara.
() 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
}Ngatiwedzerei idzi nzira mbiri kune smart kontrakiti uye tinyore pfungwa. Kutanga, tinosiyanisa nhamba yemagiramu kubva kune meseji. Zvadaro tinotarisa chiyero, kana chisina kukwana tinokanda kunze. Kana zvinhu zvose zvakanaka, saka tinotumira magiramu kune kero yakachengetwa uye nekuvandudza counter.
int amount_to_send = message~load_grams();
throw_if(36, amount_to_send + 500000000 > balance());
accept_message();
send_grams(owner_wc, owner_account_id, amount_to_send);
set_data(pack_state(stored_seqno + 1, pubkey, order_seqno, number_of_wins, incoming_amount, outgoing_amount, owner_wc, owner_account_id, orders));inotaridzika sechibvumirano chakangwara panguva ino. Ngatimhanyei bvunzo tione kuti dzapasa.
Nenzira, komisheni inobviswa kubva kune smart kontrakiti nguva dzese kune yakagadziriswa meseji. Kuti iyo smart contract meseji iite chikumbiro, mushure mekutanga cheki iwe unofanirwa kufona accept_message().
Zvino ngatienderere mberi kune mameseji emukati. Muchokwadi, isu tinongogamuchira magiramu uye todzosera zvakapetwa kaviri kuwanda kumutambi kana akahwina uye chetatu kumuridzi kana akarasikirwa.
Kutanga, ngatinyore bvunzo iri nyore. Kuti tiite izvi, tinoda kero yekuyedza yekontrakiti yakangwara kubva kwatinoti tinotumira magiramu kune smart kontrakiti.
Kero yekondirakiti yakangwara ine nhamba mbiri, 32-bit integer inotarisira workchain uye 256-bit isiri-negative integer yakasarudzika nhamba yeakaundi mune ino workchain. Semuenzaniso, -1 uye 12345, iyi ndiyo kero yatichachengeta kufaira.
Ndakakopa basa rekuchengetedza kero kubva .
// ( wc addr fname -- ) Save address to file in 36-byte format
{ -rot 256 u>B swap 32 i>B B+ swap B>file } : save-addressNgatitarisei kuti basa rinoshanda sei, izvi zvinopa kunzwisisa kwekuti Fift inoshanda sei. Tangisa Fift mune inopindirana modhi.
~/TON/build/crypto/fift -i Kutanga tinosundira -1, 12345 uye zita reramangwana faira "sender.addr" pamurwi:
-1 12345 "sender.addr" Nhanho inotevera ndeyekuita basa racho -rot, iyo inoshandura stack nenzira yekuti pamusoro peiyo stack pane yakasarudzika smart contract nhamba:
"sender.addr" -1 12345256 u>B inoshandura 256-bit isiri-negative integer kuita mabhaiti.
"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039swap inochinjanisa zvinhu zviviri zvepamusoro zve stack.
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -132 i>B inoshandura 32-bit integer kuita mabhayithi.
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFFB+ inobatanidza mitsetse miviri yemabhaiti.
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFFZvekare swap.
BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" Uye pakupedzisira ma byte anonyorwa kune faira B>file. Mushure meizvi stack yedu haina chinhu. Tinomira Fift. Faera rakagadzirwa mune yazvino folda sender.addr. Ngatiendesei faira kune yakasikwa forodha test/addresses/.
Ngatinyorei bvunzo yakapusa iyo inotumira magiramu kune smart kontrakiti. .
Zvino ngatitarisei pfungwa yerotari.
Chinhu chekutanga chatinoita kutarisa meseji bounced kana kwete kana bounced, tobva tazvifuratira. bounced zvinoreva kuti kondirakiti ichadzosa magiramu kana kumwe kukanganisa kukaitika. Hatizodzose magiramu kana kukanganisa kwangoerekana kwaitika.
Isu tinotarisa, kana chiyero chiri pasi pehafu yegiramu, saka isu tinongogamuchira meseji uye kuifuratira.
Tevere, tinoparura kero yechibvumirano chakangwara kwakabva meseji.
Isu tinoverenga iyo data kubva mudura uye todzima mabheti ekare kubva munhoroondo kana paine anopfuura makumi maviri awo. Kuti zvive nyore, ndakanyora mamwe mabasa matatu pack_order(), unpack_order(), remove_old_orders().
Tevere, isu tinotarisa kana chiyero chisina kukwana kubhadhara, tobva tafunga kuti iyi haisi bheti, asi kuzadza uye kuchengetedza kuzadza mukati. orders.
Zvadaro pakupedzisira kukosha kwechibvumirano chakangwara.
Kutanga, kana mutambi akarasikirwa, tinoichengetedza munhoroondo yekubheja uye kana mari yacho inopfuura magiramu matatu, tinotumira 3/1 kumuridzi wechibvumirano chakangwara.
Kana mutambi akahwina, tobva tatumira zvakapetwa kaviri kero yemutambi uye tozochengeta ruzivo nezve bheti munhoroondo.
() 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));
}Ndizvozvo chete. .
Iye zvino zvese zvasara zviri nyore, ngatigadzirei nzira dzekuwana kuitira kuti tiwane ruzivo nezve mamiriro echibvumirano kubva kunze kwenyika (chaizvoizvo, verenga data kubva kune yavo smart kontrakiti yekuchengetedza).
. Isu tichanyora pazasi nezve nzira yekugamuchira ruzivo nezve smart kontrakiti.
Ini ndakanganwawo kuwedzera kodhi inozogadzirisa iyo yekutanga chikumbiro inoitika kana ichidhinda smart kontrakiti. . Uye mberi bug nekutumira 1/3 yehuwandu kuaccount yemuridzi.
Nhanho inotevera ndeyekuburitsa smart contract. Ngatigadzire folda requests.
Ndakatora kodhi yekushambadzira sehwaro izvo mudura repamutemo.
Chinhu chakakosha kutarisisa. Isu tinogadzira smart kontrakiti yekuchengetedza uye meseji yekupinda. Mushure meizvi, kero yekontrakiti yakangwara inogadzirwa, ndiko kuti, kero inozivikanwa kunyange isati yabudiswa muTON. Tevere, iwe unofanirwa kutumira akati wandei magiramu kune iyi kero, uye chete mushure meizvozvo iwe unofanirwa kutumira faira ine smart kontrakiti pachayo, sezvo network inotora komisheni yekuchengetedza iyo smart kontrakiti uye mashandiro mairi (vagadziri vanochengeta uye vanoita smart. zvibvumirano). .
Tevere isu tinoita kodhi yekushambadzira uye titore lottery-query.boc smart contract file uye kero.
~/TON/build/crypto/fift -s requests/new-lottery.fif 0Usakanganwa kuchengetedza mafaira akagadzirwa: lottery-query.boc, lottery.addr, lottery.pk.
Pakati pezvimwe zvinhu, tichaona kero yekontrakiti yakangwara mumatanda ekuuraya.
new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFYKungonakidzwa, ngatiite chikumbiro kuTON
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KsydUye isu tichaona kuti account ine kero iyi haina chinhu.
account state is emptyTinotumira kukero 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 Gram uye mushure memasekondi mashoma isu tinoita iwo iwo iwo murairo. Kutumira magiramu ndinoshandisa , uye iwe unogona kubvunza mumwe munhu kubva muhurukuro yekuongorora magiramu, izvo zvandichataura pamusoro pekupedzisira kwechinyorwa.
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KsydInoratidzika kunge isina kurongeka (state:account_uninit) kondirakiti yakangwara ine kero imwechete uye chiyero che1 nanograms.
account state is (account
addr:(addr_std
anycast:nothing workchain_id:0 address:x044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A)
storage_stat:(storage_info
used:(storage_used
cells:(var_uint len:1 value:1)
bits:(var_uint len:1 value:103)
public_cells:(var_uint len:0 value:0)) last_paid:1583257959
due_payment:nothing)
storage:(account_storage last_trans_lt:3825478000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:4 value:2000000000))
other:(extra_currencies
dict:hme_empty))
state:account_uninit))
x{C00044910149DBEAF8EADBB2B28722E7D6A2DC6E264EC2F1D9BEBD6FB209079BC2A20259C2F2F4CB3800000DEAC10776091DCD650004_}
last transaction lt = 3825478000001 hash = B043616AE016682699477FFF01E6E903878CDFD6846042BA1BFC64775E7AC6C4
account balance is 2000000000ngZvino ngatiburitsei smart contract. Ngatitangei lite-client uye tiite.
> sendfile lottery-query.boc
[ 1][t 2][1583008371.631410122][lite-client.cpp:966][!testnode] sending query from file lottery-query.boc
[ 3][t 1][1583008371.828550100][lite-client.cpp:976][!query] external message status is 1 Ngatitarisei kuti kondirakiti yaburitswa here.
> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KsydPakati pezvimwe zvinhu zvatinowana.
storage:(account_storage last_trans_lt:3825499000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:4 value:1987150999))
other:(extra_currencies
dict:hme_empty))
state:(account_activeTinozviona izvozvo account_active.
Chibvumirano chinoenderana nekuchinja .
Zvino ngatigadzirei zvikumbiro zvekudyidzana nekontrakiti yakangwara.
Kunyanya, tichasiya yekutanga yekushandura kero sebasa rakazvimirira, uye tichaita yechipiri yekutumira magiramu kune kero yemuridzi. Muchokwadi, isu tichada kuita chinhu chimwe chete semuyedzo yekutumira magiramu.
Iyi ndiyo meseji yatinozotumira kune smart kontrakiti, kupi msg_seqno 165, action 2 uye 9.5 magiramu ekutumira.
<b 165 32 u, 2 7 u, 9500000000 Gram, b>Usakanganwa kusaina meseji nekiyi yako yakavanzika lottery.pk, iyo yakagadzirwa kare pakugadzira kontrakiti yakachenjera. .
Kugamuchira ruzivo kubva kune smart kontrakiti uchishandisa kuwana nzira
Zvino ngatitarisei maitiro ekuita akangwara kontrakiti kuwana nzira.
Kutanga lite-client uye mhanya kuwana nzira dzatakanyora.
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
arguments: [ 104128 ]
result: [ 64633878952 ]
...В result ine kukosha kunodzoserwa nebasa racho balance() kubva kune yedu smart contract.
Tichaita zvakafanana kune dzimwe nzira dzakawanda.
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
arguments: [ 77871 ]
result: [ 1 ] Ngatibvunzei nhoroondo yako yekubheja.
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_orders
...
arguments: [ 67442 ]
result: [ ([0 1 1583258284 10000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [1 3 1583258347 4000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308] [2 1 1583259901 50000000000 0 74649920601963823558742197308127565167945016780694342660493511643532213172308]) ] Isu tichashandisa lite-mutengi uye titore nzira dzekuratidza ruzivo nezve smart kontrakiti pane saiti.
Kuratidza smart contract data pane webhusaiti
Ndakanyora saiti yakapusa muPython kuratidza iyo data kubva kune smart kontrakiti nenzira iri nyore. Pano handisi kuzogara pazviri zvakadzama uye ndichashambadza saiti .
Zvikumbiro kuTON zvinogadzirwa kubva Python nerubatsiro lite-client. Kuti zvive nyore, saiti yacho yakarongedzwa muDocker uye yakaburitswa paGoogle Cloud. .
Kuedza
Zvino ngatiedze kutumira magiramu ipapo kuti adzorerwe kubva . Tichatumira 40 gramu. Uye ngatiite mabheti akati wandei kuti ajekese. Isu tinoona kuti saiti inoratidza nhoroondo yemabheti, iyo iripo yekuhwina muzana uye rumwe ruzivo runobatsira.
kuti takakunda yekutanga, takakundwa yechipiri.
Afterword
Chinyorwa chacho chakazove chakareba kupfuura zvandaitarisira, pamwe chingave chakapfupika, kana kuti zvimwe kumunhu asingazivi chinhu nezveTON uye anoda kunyora uye kushambadza kwete-sa-nyore-yakareruka chibvumirano nekugona kudyidzana nayo. it. Zvimwe zvimwe zvinhu zvingadai zvakatsanangurwa zviri nyore.
Zvichida mamwe maitiro ekushandiswa angadai akaitwa zvakanyanya uye neunyanzvi, asi zvino zvingadai zvakatora nguva yakawanda kugadzirira chinyorwa. Zvinogonawo kuti ndakakanganisa pane imwe nzvimbo kana kuti handina kunzwisisa chimwe chinhu, saka kana uri kuita chimwe chinhu chakakomba, unofanira kuvimba nemagwaro epamutemo kana kuti repository yepamutemo neTON code.
Zvinofanira kucherechedzwa kuti sezvo TON pachayo ichiri mudanho rinoshanda rebudiriro, shanduko dzinogona kuitika dzinogona kutyora chero nhanho dziri muchinyorwa chino (zvakaitika pandakanga ndichinyora, zvakatogadziriswa), asi nzira yakajairika ndeye. zvisingaiti kuchinja.
Ini handisi kuzotaura nezveramangwana reTON. Zvichida chikuva chichava chinhu chikuru uye tinofanira kupedza nguva tichiidzidza uye kuzadza niche nezvigadzirwa zvedu ikozvino.
Kune zvakare Libra kubva kuFacebook, iyo ine mukana wevateereri vevashandisi vakakura kupfuura TON. Ini handizive chero chinhu nezveLibra, tichitonga neforamu kune zvakawanda zviitiko ipapo kupfuura munharaunda yeTON. Kunyangwe ivo vanogadzira uye nharaunda yeTON yakafanana nepasi pevhu, inotonhorera zvakare.
nezvakanyorwa
- Zvinyorwa zveTON zviri pamutemo:
- Official TON repository:
- Official wallet yemapuratifomu akasiyana:
- Smart contract repository kubva kuchinyorwa ichi:
- Batanidza kune iyo smart contract webhusaiti:
- Repository yekuwedzera kweVisual Studio Code yeFunC:
- Kurukurai nezveTON muTeregiramu, iyo yakabatsira chaizvo kuzviona padanho rekutanga. Ndinofunga kuti hazvizove kukanganisa kana ndikataura kuti munhu wose akanyora chimwe chinhu cheTON aripo. Iwe unogona zvakare kukumbira bvunzo magiramu ipapo.
- Imwe hurukuro nezveTON yandakawana ruzivo rwakakosha:
- Danho rekutanga remakwikwi:
- Chikamu chechipiri chemakwikwi:
Source: www.habr.com
