Me pehea te tuhi me te whakaputa i tetahi kirimana atamai i roto i te Telegram Open Whatunga (TON)

Me pehea te tuhi me te whakaputa i tetahi kirimana atamai ki TON

He aha tenei tuhinga?

I roto i te tuhinga ka korero ahau mo te huarahi i uru ai ahau ki te whakataetae poraka Telegram tuatahi (o te rua), kaore i tango i te taonga, ka whakatau ki te tuhi i taku wheako ki tetahi tuhinga kia kore ai e totohu ki roto i te warewaretanga, me te awhina pea. tetahi.

I te mea kaore au i pai ki te tuhi i te waehere waitara, engari ki te mahi i tetahi mea e mahi ana, mo te tuhinga i tuhia e ahau he kirimana mohio mo te rota tere me te paetukutuku e whakaatu tika ana i nga raraunga kirimana atamai mai i te TON me te kore e whakamahi i te rokiroki takawaenga.

Ka whai hua te tuhinga ki te hunga e hiahia ana ki te hanga i a raatau kirimana atamai tuatahi ki TON, engari kaore e mohio ki hea ka tiimata.

Ma te whakamahi i te rota hei tauira, ka haere ahau mai i te whakauru i te taiao ki te whakaputa i tetahi kirimana atamai, te taunekeneke ki a ia, me te tuhi i tetahi paetukutuku mo te whiwhi me te whakaputa raraunga.

Mo te whai waahi ki te whakataetae

I te Oketopa whakamutunga, i whakapuaki a Telegram i tetahi whakataetae poraka me nga reo hou Fift и FunC. He mea tika ki te whiriwhiri mai i te tuhi i tetahi o nga kirimana atamai e rima. I whakaaro ahau he pai ki te mahi rerekee, ki te ako i te reo me te hanga i tetahi mea, ahakoa karekau au e tuhi i etahi atu mea a muri ake nei. Ano, kei nga ngutu tonu te kaupapa.

He pai ki te kii kaore au i mohio ki te whakawhanake kirimana atamai.

I whakamahere ahau ki te whakauru tae noa ki te mutunga ka taea e au te tuhi i tetahi tuhinga arotake, engari i rahua tonu ahau i te tuatahi. I tuhia he putea me te hainatanga maha FunC a i pai te tikanga. I tangohia e au hei kaupapa kirimana atamai i runga i Solidity.

I taua wa, i whakaaro ahau he tino nui tenei ki te tango i tetahi waahi tohu. Ko te mutunga mai, tata ki te 40 i roto i te 60 nga kaiuru i whiwhi taonga, a, karekau ahau i roto. I te nuinga, kaore he he o tenei, engari kotahi te mea i raru ahau. I te wa o te panuitanga o nga hua, kaore ano kia mahia te arotake o te whakamatautau mo taku kirimana, ka patai ahau ki nga kaiuru i roto i te korerorero mehemea he tangata ke atu kaore i a ia, kaore he.

Ko te ahua o te aro ki aku korero, e rua nga ra i muri mai ka whakaputa nga kaiwhakawa i tetahi korero kare tonu au i te marama mena kua ngaro noa taku kirimana atamai i te wa o te whakawakanga, i whakaaro noa ranei he kino rawa atu kaore e hiahiatia he korero. I patai ahau i tetahi patai i runga i te wharangi, engari kaore he whakautu. Ahakoa ehara i te mea ngaro na wai i whakawa, i whakaaro ahau kaore e tika te tuhi i nga karere whaiaro.

He nui te wa i pau mo te maaramatanga, no reira ka whakatauhia kia tuhia he tuhinga. I te mea kaore ano kia maha nga korero, ka awhina tenei tuhinga ki te penapena wa mo te hunga katoa e hiahia ana.

Ko te ariā o nga kirimana atamai i TON

I mua i to tuhi i tetahi mea, me mohio koe ko tehea taha ka whakatata atu ki tenei mea. Na, inaianei ka korero atu ahau ki a koe he aha nga waahanga o te punaha. He aha nga waahanga e hiahia ana koe ki te mohio ki te tuhi i etahi momo kirimana mahi.

Ka arotahi matou ki te tuhi kirimana atamai me te mahi tahi TON Virtual Machine (TVM), Fift и FunC, no reira he rite tonu te tuhinga ki te whakaahuatanga mo te whanaketanga o te kaupapa auau. E kore matou e noho ki runga i te mahi a te turanga ake i konei.

I te nuinga o nga korero mo te mahi TVM me te reo Fift he pai nga tuhinga whaimana. I a au e uru ana ki te whakataetae me te tuhi i te kirimana o naianei, he maha nga wa ka huri au ki a ia.

Ko te reo matua e tuhia ai nga kirimana atamai FunC. Karekau he tuhinga kei runga i tenei wa, no reira ki te tuhi i tetahi mea ka hiahia koe ki te ako i nga tauira o nga kirimana atamai mai i te putunga whaimana me te whakatinanatanga o te reo ake ki reira, katahi ano ka taea e koe te titiro ki nga tauira o nga kirimana atamai mai i te rua o mua. whakataetae. Nga hononga kei te mutunga o te tuhinga.

Me kii kua tuhia e matou he kirimana atamai mo FunC, i muri i tera ka whakahiatohia e matou te waehere ki te Fift assembler.

Ko te kirimana atamai kua whakahiato ka noho tonu ki te whakaputa. Ki te mahi i tenei me tuhi koe i tetahi mahi ki roto Fift, ka tango i te waehere kirimana atamai me etahi atu tawhā hei whakaurunga, a ko te putanga he konae me te toronga .boc (ko te tikanga ko te "putea o nga pūtau"), a, i runga ano i ta maatau tuhi, he matua motuhake me te wahitau, ka hangaia i runga i te waehere kirimana atamai. Ka taea e koe te tuku karamu ki te wahitau o te kirimana atamai kaore ano kia whakaputaina.

Ki te whakaputa i te kirimana atamai i roto i TON riro .boc me tuku te konae ki te poraka ma te whakamahi i te kaihoko marama (he nui ake i tera i raro nei). Engari i mua i te whakaputanga, me whakawhiti koe i nga karamu ki te wahitau kua hangaia, ki te kore e whakaputahia te kirimana atamai. I muri i te whakaputanga, ka taea e koe te taunekeneke me te kirimana atamai ma te tuku karere mai i waho (hei tauira, te whakamahi i te kaihoko marama) mai i roto ranei (hei tauira, ka tukuna e tetahi kirimana atamai tetahi atu korero i roto i te TON).

Kia mohio tatou ki te whakaputanga o te waehere, ka ngawari ake. E tino mohio ana matou ki ta matou e hiahia ana ki te tuhi me te pehea e mahi ai ta matou kaupapa. A, i te wa e tuhi ana, e rapu ana matou me pehea te whakatinanatanga o tenei i roto i nga kirimana atamai o naianei, ka tirohia ranei e matou te waehere whakatinanatanga Fift и FunC i roto i te whare pupuri mana, tirohia ranei i roto i nga tuhinga whaimana.

I te nuinga o nga wa ka rapu ahau mo nga kupu matua i roto i te korerorero Telegram i hui katoa ai nga kaiuru whakataetae me nga kaimahi Telegram, a, i te wa o te whakataetae i huihui nga tangata katoa ki reira ka timata te korerorero ki a Fift me FunC. Hononga i te mutunga o te tuhinga.

Kua tae ki te wa ki te neke mai i te ariā ki te mahi.

Te whakarite i te taiao mo te mahi tahi me TON

I mahia e ahau nga mea katoa ka whakaahuahia i roto i te tuhinga i runga i te MacOS me te tirotiro-rua i roto i te Ubuntu 18.04 LTS ma te Docker.

Ko te mea tuatahi me mahi ko te tango me te whakauru lite-client ka taea e koe te tuku tono ki a TON.

Ko nga tohutohu i runga i te paetukutuku mana e whakaatu ana i nga mahi whakaurunga i roto i nga korero me te maamaa me te whakakore i etahi korero. I konei ka whai matou i nga tohutohu, ka whakauru i nga whakawhirinaki kua ngaro i te huarahi. Kaore au i whakahiato i ia kaupapa me te whakauru mai i te rehitatanga Ubuntu mana (i runga i te MacOS i whakamahia e au 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 

Kia whakauruhia nga whakawhirinakitanga katoa ka taea e koe te whakauru lite-client, Fift, FunC.

Tuatahi, ka kati matou i te putunga TON me ona whakawhirinakitanga. Mo te waatea, ka mahia e matou nga mea katoa i roto i te kōpaki ~/TON.

cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursive

Kei te rokiroki ano hoki nga whakatinanatanga Fift и FunC.

Inaianei kua reri matou ki te whakahiato i te kaupapa. Ka katihia te waehere putunga ki tetahi kōpaki ~/TON/ton. Ko te ~/TON hanga kōpaki build ka kohia te kaupapa ki roto.

mkdir ~/TON/build 
cd ~/TON/build
cmake ../ton

I te mea ka tuhia e matou he kirimana atamai, me kore noa lite-clientKo Fift с FunC, na me whakahiato nga mea katoa. Ehara i te mahi tere, no reira kei te tatari matou.

cmake --build . --target lite-client
cmake --build . --target fift
cmake --build . --target func

Muri iho, tango i te konae whirihoranga kei roto nga raraunga e pa ana ki te node lite-client ka hono.

wget https://test.ton.org/ton-lite-client-test1.config.json

Ko nga tono tuatahi ki a TON

Inaianei me whakarewa lite-client.

cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.json

Mena i angitu te hanga, na i muri i te whakarewatanga ka kite koe i te raarangi o te hononga o te kaihoko marama ki te 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)
...

Ka taea e koe te whakahaere i te whakahau help ka kite he aha nga whakahau e waatea ana.

help

Kia whakarārangihia ngā whakahau ka whakamahia i tēnei tuhinga.

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

last получает последний созданный блок с сервера. 

sendfile <filename> отправляет в TON файл с сообщением, именно с помощью этой команды публикуется смарт-контракт и запрсосы к нему. 

getaccount <addr> загружает текущее состояние смарт-контракта с указанным адресом. 

runmethod <addr> [<block-id-ext>] <method-id> <params>  запускает get-методы смартконтракта. 

Inaianei kua reri matou ki te tuhi i te kirimana ake.

Реализация

Idea

Ka rite ki taku i tuhi i runga ake nei, ko te kirimana atamai e tuhia ana e matou he rota.

I tua atu, ehara tenei i te rota e hiahia ana koe ki te hoko i tetahi tikiti me te tatari mo te haora, te ra, te marama ranei, engari he wa tonu ka whakawhiti te kaiwhakamahi ki te wahitau kirimana. N karamu, ka hoki tonu mai 2 * N karamu ka ngaro ranei. Ka taea e maatau te wikitoria mo te 40%. Mena kaore i te nui nga karamu mo te utu, ka whakaarohia e matou te hokohoko hei tihi-ake.

I tua atu, he mea nui kia kitea nga peti i roto i te waa tuuturu me te ahua watea, kia mohio tonu ai te kaiwhakamahi mena i toa ia, kua ngaro ranei. No reira, me hanga e koe he paetukutuku ka whakaatu i nga peti me nga hua tika mai i TON.

Te tuhi kirimana atamai

Mo te waatea, kua tohuhia e ahau te waehere mo FunC; ka kitea te mono me te whakauru ki te rapu Waehere Visual Studio; ki te hiahia ohorere koe ki te taapiri i tetahi mea, kua tukuna e ahau te mono ki te whanui. I tua atu, i hanga e tetahi i mua he mono mo te mahi tahi me te Fift, ka taea hoki e koe te whakauru ka kitea i roto i te VSC.

Me hanga tonu he putunga ka mahia e matou nga hua takawaenga.

Kia pai ake ai to maatau oranga, ka tuhia e matou he kirimana atamai me te whakamatautau i te rohe kia rite ra ano. Hei muri anake ka taia e matou ki TON.

Ko te kirimana atamai e rua nga tikanga o waho ka taea te uru atu. Tuatahi, recv_external() Ka mahia tenei mahi ina tae mai te tono ki te kirimana mai i te ao o waho, ara, ehara i te TON, hei tauira, ka whakaputahia e matou he karere ka tukuna ma te lite-kiritaki. Tuarua, recv_internal() Koinei te wa, i roto i a TON ake, ka tohu tetahi kirimana ki a maatau. I nga keehi e rua, ka taea e koe te tuku tawhā ki te mahi.

Me timata ma te tauira ngawari ka pai mena ka whakaputahia, engari karekau he kawenga mahi kei roto.

() recv_internal(slice in_msg) impure {
    ;; TODO: implementation 
}

() recv_external(slice in_msg) impure {
    ;; TODO: implementation  
}

I konei me whakamarama he aha tena slice. Ko nga raraunga katoa kei roto i te TON Blockchain he kohinga TVM cell ranei noa cell, i roto i taua pūtau ka taea e koe te penapena ake ki te 1023 moka o te raraunga me te 4 hononga ki etahi atu pūtau.

TVM cell slice ranei slice he waahanga tenei o te waa cell ka whakamahia ki te poroporoaki, ka marama i muri mai. Ko te mea nui ki a maatau ka taea e taatau te whakawhiti slice me te ahua o te karere, tukatukahia nga raraunga ki roto recv_external() ranei recv_internal().

impure — he kupu matua e tohu ana ka whakarereke te mahi i nga raraunga kirimana atamai.

Kia tiakina te waehere kirimana ki roto lottery-code.fc me te whakahiato.

~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc 

Ko te tikanga o nga haki ka taea te tiro ma te whakahau

~/TON/build/crypto/func -help

Kua whakahiatohia e matou nga waehere assembler e rima ki roto 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

Ka taea te whakarewahia ki te rohe, mo tenei ka whakarite maatau i te taiao.

Kia mahara ka hono te raina tuatahi Asm.fif, he waehere tenei i tuhia ki te rima mo te assembler rima.

I te mea e hiahia ana matou ki te whakahaere me te whakamatautau i te kirimana atamai i te rohe, ka hanga e matou he konae lottery-test-suite.fif ka kape i te waehere kua whakahiato ki reira, ka whakakapi i te rarangi whakamutunga ki roto, e tuhi ana i te waehere kirimana atamai ki te taumau codeki te whakawhiti ki te miihini mariko:

"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

I tenei wa kua marama te ahua, inaianei me taapiri atu ki te konae ano te waehere ka whakamahia e tatou ki te whakarewa i te 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 ka tuhia e matou te horopaki, ara, nga raraunga ka whakarewahia te TVM (te ahua whatunga ranei). Ahakoa i te wa o te whakataetae, i whakaatu tetahi o nga kaihanga me pehea te hanga c7 a i kape ahau. I roto i tenei tuhinga ka hiahia pea tatou ki te whakarereke rand_seed mai i te mea ka whakawhirinaki te reanga o te tau matapōkere ki runga, ki te kore e whakarereketia, ka whakahokia taua tau i ia wa.

recv_internal и recv_external Ko nga taumau me nga uara 0 me te -1 te kawenga mo te karanga i nga mahi e rite ana ki te kirimana atamai.

Inaianei kua rite taatau ki te hanga i te whakamatautau tuatahi mo ta maatau kirimana atamai kore. Mo te whakamarama, mo tenei wa ka taapirihia nga whakamatautau katoa ki te konae kotahi lottery-test-suite.fif.

Me hanga he taurangi storage ka tuhituhi i te mea takoto kau ki roto cell, koinei te rokiroki kirimana atamai.

message Koinei te korero ka tukuna e matou ki te waea atamai mai i waho. Ka noho kau hoki tatou mo naianei.

variable storage 
<b b> storage ! 

variable message 
<b b> message ! 

I muri i to maatau whakarite i nga taurangi me nga taurangi, ka whakarewahia e matou te TVM ma te whakamahi i te whakahau runvmctx ka tukuna nga tawhā i hangaia ki te whakauru.

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx 

Hei te mutunga ka angitu tatou rite waehere takawaenga mo Fift.

Inaianei ka taea e taatau te whakahaere i te waehere hua.

export FIFTPATH=~/TON/ton/crypto/fift/lib // выполняем один раз для удобства 
~/TON/build/crypto/fift -s lottery-test-suite.fif 

Me whakahaere te papatono me te kore he, a, i te putanga ka kite tatou i te raarangi mahi:

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=0

He pai, kua tuhia e matou te putanga mahi tuatahi o te kirimana atamai.

Inaianei me taapiri i nga mahi. Tuatahi me mahi ki nga karere ka puta mai i te ao o waho ki recv_external()

Ko te kaiwhakawhanake ake e whiriwhiri te whakatakotoranga karere ka taea e te kirimana te whakaae.

Engari ko te tikanga

  • tuatahi, e hiahia ana matou ki te tiaki i ta matou kirimana mai i te ao o waho me te whakarite kia taea e te rangatira anake o te kirimana te tuku karere o waho ki a ia.
  • tuarua, ka tukuna e matou he karere whaimana ki a TON, ko ta matou hiahia kia kotahi tonu te mahi, a ka tukuna ano e matou taua karere, ka whakakorehia e te kirimana atamai.

No reira tata ki nga kirimana katoa ka whakatau i enei raru e rua, i te mea ka whakaae ta maatau kirimana ki nga karere o waho, me ata tiaki ano e matou.

Ka mahia e matou i roto i te raupapa whakamuri. Tuatahi, me whakaoti e tatou te raru ma te tukurua; mena kua tae kee te kirimana ki tetahi panui pera me te whakahaere, ka kore e mahia tuaruatia. Na ka whakatauhia e matou te raru kia taea ai e tetahi roopu tangata anake te tuku karere ki te kirimana atamai.

He rereke nga huarahi hei whakaoti rapanga ki nga karere taarua. Anei me pehea taatau e mahi ai. I roto i te kirimana atamai, ka arawhiti tatou i te porotiti o nga karere kua riro mai me te uara tuatahi 0. I ia karere ki te kirimana atamai, ka taapirihia e matou te uara porotiti o naianei. Mena karekau te uara porotiti i roto i te karere e taurite ki te uara o te kirimana atamai, karekau matou e whakahaere; ki te pera, ka tukatukahia, ka whakanuia te porotiti i te kirimana atamai ma te 1.

Kia hoki tatou ki lottery-test-suite.fif ka taapirihia he whakamatautau tuarua. Mena ka tukuna e matou he nama he, me maka e te waehere he tuunga. Hei tauira, waiho te raraunga kirimana ki te rokiroki 166, ka tukuna e matou te 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"

Kia whakarewa tatou.

 ~/TON/build/crypto/fift -s lottery-test-suite.fif 

A ka kite tatou ka mahia te whakamatautau me te he.

[ 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

I tenei atamira lottery-test-suite.fif me ahua hono.

Inaianei me taapiri atu te arorau porotiti ki te kirimana atamai i roto 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 kei te takoto te karere ka tukuna e matou.

Ko te mea tuatahi ka mahia e matou he tirotiro mena he raraunga kei roto i te karere, ki te kore, katahi ka puta noa.

Whai muri ka poroporoaki i te karere. in_msg~load_uint(32) ka utaina te nama 165, 32-bit unsigned int mai i te karere tuku.

I muri mai ka utaina e matou nga moka 32 mai i te rokiroki kirimana atamai. Ka tirohia e taurite ana te nama kua utaina ki te nama kua paahitia; ki te kore, ka makahia he tuunga. I roto i to maatau take, i te mea kei te paahitia e matou he whakataetae kore, me maka he tuunga.

Inaianei me whakahiato.

~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc 

Tāruatia te waehere ka puta ki lottery-test-suite.fif, kaua e wareware ki te whakakapi i te rarangi whakamutunga.

Ka tirohia e maatau kua paahitia te whakamatautau:

~/TON/build/crypto/fift -s lottery-test-suite.fif

I konei tonu Ka taea e koe te kite i te mahi e rite ana me nga hua o naianei.

Kia mahara he mea whakaraerae ki te kape tonu i te waehere kua whakahiatohia o te kirimana atamai ki roto i te konae me nga whakamatautau, na reira ka tuhia e matou he tuhinga hei tuhi i te waehere ki te taumau mo matou, a ka hono noa matou i te waehere kua whakahiato ki o maatau whakamatautau ma te whakamahi "include".

Waihangahia he konae ki te kōpaki kaupapa build.sh me nga ihirangi e whai ake nei.

#!/bin/bash

~/TON/build/crypto/func -SPA -R -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc

Kia mahia e tatou.

chmod +x ./build.sh

Na, whakahaere noa i ta maatau tuhinga ki te whakahiato i te kirimana. Engari i tua atu i tenei, me tuhi tatou ki roto i te taumau code. Na ka hanga e matou he konae hou lotter-compiled-for-test.fif, ka whakauruhia e matou ki te konae lottery-test-suite.fif.

Me taapiri te waehere remu ki te sh, ka taarua noa te konae kua whakahiato ki roto lotter-compiled-for-test.fif ka huri i te rarangi whakamutunga ki roto.

# 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

Na, ki te tirotiro, me whakahaere i te tuhinga ka puta mai ka puta he konae lottery-compiled-for-test.fif, ka whakauruhia ki roto i ta maatau lottery-test-suite.fif

В lottery-test-suite.fif whakakorehia te waehere kirimana me te taapiri i te raina "lottery-compiled-for-test.fif" include.

Ka whakahaerehia e matou nga whakamatautau ki te tirotiro kua paahitia.

~/TON/build/crypto/fift -s lottery-test-suite.fif

Ka pai, inaianei ki te whakaaunoa i te whakarewatanga o nga whakamatautau, me hanga he konae test.sh, ka mahia tuatahitia build.sh, ka whakahaere i nga whakamatautau.

touch test.sh
chmod +x test.sh

Ka tuhi matou ki roto

./build.sh 

echo "nCompilation completedn"

export FIFTPATH=~/TON/ton/crypto/fift/lib
~/TON/build/crypto/fift -s lottery-test-suite.fif

Kia mahia e tatou test.sh ka whakahaere kia pai ai nga whakamatautau.

chmod +x ./test.sh
./test.sh

Ka tirohia e matou kua whakahiatohia te kirimana ka mahia nga whakamatautau.

He pai, inaianei kei te tiimata test.sh Ka whakahiatohia nga whakamatautau ka whakahaere tonu. Anei te hono ki tuku.

Kaati, i mua i te haere tonu, me mahi tetahi atu mea mo te pai.

Me hanga he kōpaki build kei reira ka penapenahia e matou te kirimana kua kapea me te konae kua tuhia ki te taumau lottery-compiled.fif, lottery-compiled-for-test.fif. Me hanga ano he kōpaki test kei hea ka penapena te konae whakamatautau? lottery-test-suite.fif me etahi atu kōnae tautoko pea. Hononga ki nga huringa e tika ana.

Kia whakawhanake tonu tatou i te kirimana atamai.

I muri mai he whakamatautau ka tirohia kua tae mai te karere me te whakahou i te kaute i roto i te toa ka tukuna e matou te nama tika. Engari ka mahia e tatou a muri ake nei.

Inaianei kia whakaarohia he aha te hanganga raraunga me nga raraunga e tika ana kia rongoa i roto i te kirimana atamai.

Ka whakaahuahia e au nga mea katoa e rongoa ana matou.

`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` переменная типа словарь, хранит последние двадцать ставок. 

I muri mai me tuhi koe kia rua nga mahi. Karangatia te tuatahi pack_state(), ka kohia nga raraunga mo te penapena i muri mai i roto i te rokiroki kirimana atamai. Me karanga te tuarua unpack_state() ka panui me te whakahoki i nga raraunga mai i te rokiroki.

_ 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;
}

Ka taapirihia e matou enei mahi e rua ki te timatanga o te kirimana atamai. Ka whai hua rite hua takawaenga.

Hei tiaki i nga raraunga ka hiahia koe ki te waea i te mahi hanga-i roto set_data() a ka tuhia e ia nga raraunga mai pack_state() i roto i te rokiroki kirimana atamai.

cell packed_state = pack_state(arg_1, .., arg_n); 
set_data(packed_state);

Inaianei kei a maatau nga mahi pai mo te tuhi me te panui raraunga, ka taea e taatau te haere tonu.

Me titiro tatou ko te karere e tau mai ana mai i waho ka hainatia e te rangatira o te kirimana (tetahi atu kaiwhakamahi ranei e uru ana ki te taviri tūmataiti).

Ka whakaputahia e matou he kirimana atamai, ka taea e matou te arawhiti me nga raraunga e hiahiatia ana e matou i roto i te rokiroki, ka tiakina hei whakamahi a meake nei. Ka tuhi matou i te taviri tūmatanui ki reira kia taea ai e matou te manatoko i hainatia te karere taumai me te kii tūmataiti e rite ana.

I mua i te haere tonu, me hanga he taviri tūmataiti ka tuhi ki a test/keys/owner.pk. Hei mahi i tenei, me whakarewahia te rima ki te aratau tauwhitiwhiti ka mahia e wha nga whakahau.

`newkeypair` генерация публичного и приватного ключа и запись их в стек. 

`drop` удаления из стека верхнего элемента (в данном случае публичный ключ)  

`.s` просто посмотреть что лежит в стеке в данный момент 

`"owner.pk" B>file` запись приватного ключа в файл с именем `owner.pk`. 

`bye` завершает работу с Fift. 

Me hanga he kōpaki keys i roto i te kōpaki test ka tuhia te kī tūmataiti ki reira.

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

Ka kite tatou i tetahi konae kei te kōpaki o naianei owner.pk.

Ka tangohia e matou te kī tūmatanui mai i te tāpae, ā, ki te hiahiatia ka taea te tiki mai i te kī tūmataiti.

Inaianei me tuhi tatou i tetahi waitohu hainatanga. Me timata ma te whakamatautau. Tuatahi ka panuihia e matou te kii motuhake mai i te konae ma te whakamahi i te mahi file>B ka tuhi ki tetahi taurangi owner_private_key, ka whakamahi i te mahi priv>pub hurihia te kī tūmataiti ki te kī tūmatanui ka tuhia te hua ki roto 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 !

Ka hiahia tatou ki nga ki e rua.

Ka arawhitia e matou te rokiroki kirimana atamai me nga raraunga kore i roto i te raupapa rite ki te mahi pack_state()ka tuhi ki te taurangi 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 !

Whai muri, ka tito he karere kua hainatia, ko te waitohu me te uara porotiti anake kei roto.

Tuatahi, ka waihangahia e matou nga raraunga e hiahia ana matou ki te tuku, katahi ka hainatia ma te kii motuhake ka mutu ka whakaputahia he panui kua hainatia.

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 !  

Ko te mutunga, ko te karere ka tukuna atu e matou ki te kirimana atamai ka tuhia ki roto i te taurangi message_to_send, mo nga mahi hashu, ed25519_sign_uint ka taea e koe te panui i roto i nga tuhinga e rima.

A ki te whakahaere i te whakamatautau ka karanga ano matou.

message_to_send @ 
recv_external 
code 
storage @
c7
runvmctx

Pēnei Me penei te ahua o te konae whai whakamatautau i tenei wahanga.

Me whakahaere te whakamatautau ka taka, no reira ka huri tatou i te kirimana atamai kia whiwhi karere o tenei whakatakotoranga me te manatoko i te hainatanga.

Tuatahi, ka tatauhia e matou nga moka 512 o te waitohu mai i te karere ka tuhia ki tetahi taurangi, ka tatauhia nga moka 32 o te taurangi porotiti.

I te mea he mahi to maatau mo te panui raraunga mai i te rokiroki kirimana atamai, ka whakamahia e matou.

Whai muri ko te tirotiro i te kaute kua whakawhitia me te rokiroki me te tirotiro i te hainatanga. Ki te kore e taurite tetahi mea, katahi ka tukuna he tuunga me te waehere tika.

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));

Whakaaetanga whaitake tika i konei.

Me whakahaere nga whakamatautau ka kite kua rahua te whakamatautau tuarua. E rua nga take, he iti rawa nga moka i roto i te karere, he iti hoki nga moka i roto i te rokiroki, na reira ka pakaru te waehere i te wa e porohi ana. Me taapiri he waitohu ki te karere e tukuna ana e matou me te kape i te rokiroki mai i te whakamatautau whakamutunga.

I te whakamatautau tuarua, ka taapirihia e matou he waitohu karere me te whakarereke i te rokiroki kirimana atamai. Pēnei te ahua o te konae me nga whakamatautau i tenei wa.

Me tuhi he whakamatautau tuawha, ka tukuna he panui kua hainatia me te taviri motuhake a tetahi atu. Me hanga tetahi atu taviri tūmataiti ka tiakina ki te konae not-owner.pk. Ka hainatia e matou te karere me tenei taviri tūmataiti. Me whakahaere nga whakamatautau me te whakarite kia paahitia nga whakamatautau katoa. Whakaae i tenei wa.

Inaianei ka taea e taatau te neke ki te whakatinana i te arorau kirimana atamai.
В recv_external() ka whakaae matou e rua momo o te karere.

I te mea ka kohia e ta maatau kirimana nga mate o nga kaitakaro, me whakawhiti tenei moni ki te kaihanga o te rota. Ko te wahitau putea o te kaihanga rota ka tuhia ki te rokiroki i te wa i hangaia ai te kirimana.

Ko te take, me kaha ki te whakarereke i te wahitau ka tukuna e matou nga karamu o te hunga kua ngaro. Me kaha hoki taatau ki te tuku karamu mai i te rota ki te wahitau o te rangatira.

Me timata ki te tuatahi. Me tuhi tuatahi he whakamatautau ka tirohia i muri i te tuku i te karere, i tiakina e te kirimana atamai te wahitau hou i roto i te rokiroki. Kia mahara mai kei roto i te panui, hei taapiri atu ki te kaute me te wahitau hou, ka tukuna ano e matou action He tau kore-kino-kore moka-bit, kei runga ano, ka whiriwhiri maatau me pehea te tukatuka i te karere i roto i te kirimana atamai.

<b 0 32 u, 1 @ 7 u, new_owner_wc @  32 i, new_owner_account_id @ 256 u, b> message_to_sign !

I roto i te whakamatautau ka taea e koe te kite me pehea te whakahekenga o te rokiroki kirimana atamai storage i roto i te rima. Ko te whakamaaramatanga o nga taurangi e whakaahuatia ana i roto i te tuhinga Rima.

Hono hono me te paraoa pokepoke.

Me whakahaere te whakamatautau me te whakarite kia kore. Inaianei me taapiri i te arorau hei whakarereke i te wahitau o te rangatira o te rota.

I roto i te kirimana atamai ka haere tonu tatou ki te poroporoaki message, panui ki roto action. Kia maumahara matou ka rua action: huri i te wāhi noho me te tuku karamu.

Na ka panuihia e matou te wahitau hou o te rangatira kirimana me te penapena i roto i te rokiroki.
Ka whakahaerehia e matou nga whakamatautau ka kite kua rahua te whakamatautau tuatoru. Ka pakaru na te mea ko te kirimana i tenei wa ka wehea e 7 nga moka mai i te karere, kei te ngaro i te whakamatautau. Tāpirihia he kore-kore ki te karere action. Me whakahaere nga whakamatautau ka kite kua paahitia nga mea katoa. konei whakapumau ki nga huringa. Nui.

Inaianei me tuhi te arorau mo te tuku i te maha o nga karamu ki te wahitau kua tiakina i mua.

Tuatahi, me tuhi he whakamatautau. Ka tuhia e matou nga whakamatautau e rua, tetahi ka kore e nui te pauna, te tuarua ka pai nga mea katoa. Ka taea te tiro i nga whakamatautau i roto i tenei mahi.

Inaianei me taapiri te waehere. Tuatahi, me tuhi e rua nga tikanga awhina. Ko te tikanga whiwhi tuatahi ko te kimi i te toenga o naianei o te kirimana atamai.

int balance() inline_ref method_id {
    return get_balance().pair_first();
}

A ko te tuarua mo te tuku karamu ki tetahi atu kirimana atamai. I tino kape ahau i tenei tikanga mai i tetahi atu kirimana atamai.

() 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
}

Me taapiri enei tikanga e rua ki te kirimana atamai me te tuhi i te arorau. Tuatahi, ka tohatohahia e matou te maha o nga karamu mai i te karere. I muri mai ka tirohia e matou te toenga, ki te kore e ranea ka makahia e matou he rereke. Mena kei te pai nga mea katoa, ka tukuna e matou nga karamu ki te wahitau kua tiakina ka whakahou i te kaute.

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));

Pēnei te ahua o te kirimana atamai i tenei wa. Me whakahaere nga whakamatautau me te whakarite kia tutuki.

Ma te ara, ka tangohia he komihana mai i te kirimana atamai i nga wa katoa mo te karere kua tukatukahia. Kia taea ai e nga karere kirimana atamai te whakahaere i te tono, i muri i nga arowhai taketake me waea atu koe accept_message().

Inaianei ka neke atu ki nga karere o roto. Inaa, ka whakaae noa matou ki nga karamu ka whakahokia kia rua nga moni ki te kaitakaro mena ka wikitoria ia, me te tuatoru ki te rangatira mena ka hinga.

Tuatahi, me tuhi he whakamatautau ngawari. Hei mahi i tenei, ka hiahia matou ki tetahi wahitau whakamatautau mo te kirimana atamai e kiia ana ka tukuna e matou he karamu ki te kirimana atamai.

Ko te wahitau kirimana atamai e rua nga tau, he tauoti moka-32 te kawenga mo te mekameka mahi me te nama kaute ahurei moka-kore-kore-kore-kore i roto i tenei mekameka mahi. Hei tauira, -256 me 1, koinei te wahitau ka tiakina e matou ki tetahi konae.

I tāruatia e ahau te mahi hei tiaki i te wāhitau mai 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

Ka titiro tatou ki te mahi o te mahi, ma tenei ka maarama te mahi a Rima. Whakarewahia te rima ki te aratau tauwhitiwhiti.

~/TON/build/crypto/fift -i 

Tuatahi ka panahia e matou -1, 12345 me te ingoa o te konae kei te heke mai "sender.addr" ki runga i te puranga:

-1 12345 "sender.addr" 

Ko te mahi e whai ake nei ko te mahi i te mahi -rot, e huri ana i te taapu i runga ake o te taapu he tau kirimana atamai ahurei:

"sender.addr" -1 12345

256 u>B ka huri i te moka-256-kore-kore tauoti ki nga paita.

"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039

swap ka huri i nga waahanga e rua o runga o te puranga.

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -1

32 i>B ka huri i te tauoti 32-bit ki nga paita.

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFF

B+ e hono ana i nga raupapa paita e rua.

 "sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF

Ano swap.

BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" 

Ka mutu ka tuhia nga paita ki te konae B>file. Whai muri i tenei ka noho kau ta matou puranga. Ka mutu Fift. Kua waihangatia he kōnae ki te kōpaki o nāianei sender.addr. Me nukuhia te konae ki te kōpaki i hangaia test/addresses/.

Me tuhi he whakamatautau ngawari ka tukuna he karamu ki tetahi kirimana atamai. Anei te mahi.

Inaianei ka titiro tatou ki te arorau o te rota.

Ko te mahi tuatahi ko te tirotiro i te karere bounced kaore ranei mena bounced, katahi ka warewarehia e matou. bounced ko te tikanga ka whakahokia e te kirimana nga karamu mena ka puta he hapa. E kore matou e whakahoki karamu mena ka puta ohorere mai he hapa.

Ka tirohia e matou, mena he iti iho te toenga i te hawhe karamu, katahi ka whakaae noa matou ki te panui ka warewarehia.

I muri mai, ka tohatohahia e matou te wahitau o te kirimana atamai i puta mai ai te karere.

Ka panuihia e matou nga raraunga mai i te rokiroki katahi ka mukua nga peti tawhito mai i te hitori mena ka neke atu i te rua tekau o raatau. Mo te waatea, i tuhia e ahau etahi atu mahi e toru pack_order(), unpack_order(), remove_old_orders().

I muri mai, ka titiro tatou ki te kore e ranea te toenga mo te utu, katahi ka whakaaro tatou ehara tenei i te peti, engari he whakakii me te penapena i te whakakii i roto orders.

Na ka mutu te mauri o te kirimana atamai.

Tuatahi, ki te ngaro te kaitakaro, ka tiakina e matou i roto i te hitori petipeti me te nui atu i te 3 karamu, ka tukuna atu e matou te 1/3 ki te rangatira o te kirimana atamai.

Mena ka wikitoria te kaitakaro, ka tukuna e matou nga moni takirua ki te wahitau o te kaitakaro ka tiakina nga korero mo te peti i roto i te hitori.

() 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));
}

Ko te katoa. Whakaaetanga rite.

Inaianei he ngawari noa nga mea e toe ana, me hanga tikanga tiki kia whiwhi korero mo te ahua o te kirimana mai i te ao o waho (he pono, panuihia nga raraunga mai i o raatau rokiroki kirimana atamai).

Kia taapirihia nga tikanga tiki. Ka tuhia e matou i raro nei me pehea te whiwhi korero mo te kirimana atamai.

I wareware ano ahau ki te taapiri i te waehere ka whakahaere i te tono tuatahi ka puta i te wa e whakaputa ana i te kirimana atamai. Whakaaetanga rite. A atu whakatika bug me te tuku 1/3 o te moni ki te kaute a te rangatira.

Ko te mahi e whai ake nei ko te whakaputa i te kirimana atamai. Me hanga he kōpaki requests.

I tangohia e ahau te waehere whakaputa hei kaupapa simple-wallet-code.fc Tuhinga o mua ka kitea i roto i te whare pupuri mana.

He mea tika kia aro nui. Ka whakaputahia e matou he rokiroki kirimana atamai me tetahi karere whakauru. I muri i tenei, ka hangaia te waahi o te kirimana atamai, ara, ko te waahi ka mohiotia i mua i te whakaputanga ki TON. I muri mai, me tuku e koe etahi karamu ki tenei wahitau, a muri iho ka hiahia koe ki te tuku i tetahi konae me te kirimana atamai ano, na te mea ka riro i te whatunga he komihana mo te penapena i te kirimana atamai me nga mahi kei roto kirimana). Ka taea te tiro i te waehere i konei.

I muri mai ka mahia e matou te waehere whakaputa ka whiwhi lottery-query.boc kōnae kirimana atamai me te wahitau.

~/TON/build/crypto/fift -s requests/new-lottery.fif 0

Kaua e wareware ki te tiaki i nga konae kua mahia: lottery-query.boc, lottery.addr, lottery.pk.

I roto i etahi atu mea, ka kite tatou i te wahitau o te kirimana atamai i roto i nga raarangi mahi.

new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a 
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFY

Mo te ngahau, me tuku tono ki a TON

$ ./lite-client/lite-client -C ton-lite-client-test1.config.json 
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

A ka kite tatou kei te noho kau te kaute me tenei wahitau.

account state is empty

Ka tukuna atu e matou ki te wahitau 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 Gram a i muri i etahi hēkona ka mahia e matou te whakahau ano. Hei tuku karamu ka whakamahia e au putea mana, a ka taea e koe te patai ki tetahi mai i te korerorero mo nga karamu whakamatautau, ka korerohia e au i te mutunga o te tuhinga.

> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

Ko te ahua kaore i mohio (state:account_uninit) he kirimana atamai me te wahitau kotahi me te toenga o te 1 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 2000000000ng

Inaianei ka whakaputahia te kirimana atamai. Kia whakarewahia te lite-kiritaki ka mahia.

> 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 

Me titiro kua taia te kirimana.

> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

I roto i etahi atu mea ka whiwhi tatou.

  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_active

Ka kite tatou i tera account_active.

Whakaaetanga rite ki nga huringa tika i konei.

Inaianei me hanga tono ki te taunekeneke me te kirimana atamai.

Ko te mea tika, ka waiho e matou te tuatahi mo te whakarereke i te wahitau hei mahi motuhake, ka mahia e matou te tuarua mo te tuku karamu ki te wahitau o te rangatira. Inaa, me mahi ano tatou ki te whakamatautau mo te tuku karamu.

Koinei te korero ka tukuna e matou ki te kirimana atamai, kei hea msg_seqno 165, action 2 me te 9.5 karamu mo te tuku.

<b 165 32 u, 2 7 u, 9500000000 Gram, b>

Kaua e wareware ki te haina i te karere me to kii motuhake lottery.pk, i hangaia i mua i te wa e hanga ana te kirimana atamai. Anei te mahi e rite ana.

Te whiwhi korero mai i te kirimana atamai ma te whakamahi tikanga tiki

Inaianei me titiro tatou ki te whakahaere tikanga whiwhi kirimana atamai.

Whakarewatanga lite-client ka whakahaere i nga tikanga tiki i tuhia e matou.

$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
arguments:  [ 104128 ] 
result:  [ 64633878952 ] 
...

В result kei roto te uara ka whakahokia mai e te mahi balance() mai i ta maatau kirimana atamai.
Ka pera ano tatou mo etahi atu tikanga.

> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
arguments:  [ 77871 ] 
result:  [ 1 ] 

Me patai koe mo to hitori peti.

> 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]) ] 

Ka whakamahi matou i te lite-kiritaki me te tiki tikanga ki te whakaatu korero mo te kirimana atamai i runga i te pae.

Te whakaatu i nga raraunga kirimana atamai i runga i te paetukutuku

I tuhia e ahau tetahi paetukutuku ngawari ki te Python hei whakaatu i nga raraunga mai i te kirimana atamai i roto i te huarahi ngawari. I konei e kore ahau e noho ki runga i nga korero me te whakaputa i te waahi i roto i te mahi kotahi.

Ko nga tono ki a TON mai i Python me te awhina lite-client. Mo te waatea, ka kohia te papanga ki Docker ka whakaputaina ki runga i a Google Cloud. Hononga.

Whakamatau ana

Inaianei me ngana ki te tuku karamu ki reira mo te whakakii mai putea puoro. Ka tukuna e matou te 40 karamu. A kia hanga e tatou o peti e rua mo te marama. Ka kite matou kei te whakaatuhia e te papanga te hitori o nga peti, te paheketanga toa o naianei me etahi atu korero whai hua.

Ka kite tatoui toa i te tuatahi, i hinga te tuarua.

Afterword

Ko te tuhinga i puta ake he roa rawa atu i taku i tumanako ai, tera pea he poto ake, mo te tangata ranei e kore e mohio mo te TON me te hiahia ki te tuhi me te whakaputa i tetahi kirimana maamaa kaore i te ngawari me te kaha ki te taunekeneke me te reira. Ko etahi mea pea ka taea te whakamarama ake.

Ko etahi ahuatanga o te whakatinanatanga ka taea te mahi pai me te huatau, engari ka nui ake te wa ki te whakarite i te tuhinga. Ka taea ano e au te pohehe i tetahi waahi, kaore ranei i te mohio ki tetahi mea, na, ki te mahi koe i tetahi mea nui, me whakawhirinaki koe ki nga tuhinga whaimana, ki te whare pupuri mana me te waehere TON.

Me tohu mai i te mea kei roto tonu a TON tonu i te wahanga o te whakawhanaketanga, tera pea ka puta nga huringa ka whati i tetahi o nga hikoinga o tenei tuhinga (i puta i te wa e tuhi ana ahau, kua oti ke te whakatika), engari ko te huarahi whanui kare pea ka huri.

E kore ahau e korero mo te heke mai o TON. Tena pea ka noho nui te papaahi, me noho taatau ki te ako me te whakaki i tetahi waahi ki a tatou hua inaianei.

Kei reira ano a Libra mai i Facebook, he nui ake te hunga whakarongo ki a TON. Kaore au i mohio mo te Libra, ma te whakatau i te huihuinga he nui ake nga mahi i reira i te hapori TON. Ahakoa he rite tonu nga kaihanga me te hapori o TON ki raro i te whenua, he hauhautanga ano.

tohutoro

  1. Tuhinga whaimana TON: https://test.ton.org
  2. Putaka TON mana: https://github.com/ton-blockchain/ton
  3. He putea whaimana mo nga papaaho rereke: https://wallet.ton.org
  4. Pupuri kirimana atamai mai i tenei tuhinga: https://github.com/raiym/astonished
  5. Hononga ki te paetukutuku kirimana atamai: https://ton-lottery.appspot.com
  6. Putunga mo te toronga mo te Waehere Ataata Ataata mo FunC: https://github.com/raiym/func-visual-studio-plugin
  7. Kōrerorero mo TON i Telegram, i tino awhina ki te whakaaro i te waa tuatahi. Ki taku whakaaro e kore e he ki te kii ahau kei reira nga tangata katoa i tuhi i tetahi mea mo TON. Ka taea hoki e koe te tono mo nga karamu whakamatautau ki reira. https://t.me/tondev_ru
  8. Ko tetahi atu korero mo TON i kitea e au nga korero whai hua: https://t.me/TONgramDev
  9. Te wahanga tuatahi o te whakataetae: https://contest.com/blockchain
  10. Te wahanga tuarua o te whakataetae: https://contest.com/blockchain-2

Source: will.com

Tāpiri i te kōrero