E uiga i le auala e tusi ma lolomiina se konekarate atamai i le Telegram Open Network (TON)

E uiga ile tusi ma lolomi se konekarate atamai ile TON

O le ā le uiga o lenei tala?

I le tusiga o le a ou talanoa e uiga i le auala na ou auai ai i le tauvaga muamua (o le lua) Telegram blockchain tauvaga, e leʻi ave se taui, ma filifili e faamaumauina loʻu poto masani i se tusiga ina ia le goto ifo i le galo ma, atonu, fesoasoani. se tasi.

Talu ai ou te leʻi manaʻo e tusi se code abstract, ae ia faia se mea e galue ai, mo le tusiga na ou tusia ai se konekarate atamai mo se lotoa vave ma se upega tafaʻilagi e faʻaalia saʻo faʻamatalaga konekarate atamai mai le TON e aunoa ma le faʻaogaina o le teuina o taimi.

O le a aoga le tusiga ia i latou e mananao e fai a latou konekarate atamai muamua i TON, ae le iloa poʻo fea e amata ai.

O le faʻaaogaina o le lotoa e fai ma faʻataʻitaʻiga, o le a ou alu mai le faʻapipiʻiina o le siosiomaga i le lolomiina o se konekarate atamai, fegalegaleai ma ia, ma tusia se upega tafaʻilagi mo le mauaina ma le lolomiina o faʻamatalaga.

E uiga i le auai i le tauvaga

O Oketopa talu ai, na faʻasalalau ai e Telegram se tauvaga poloka poloka ma gagana fou Fift и FunC. Sa tatau ona filifili mai le tusiaina o so'o se konekarate atamai e lima ua fuafuaina. Sa ou manatu e manaia le faia o se mea ese, aoao se gagana ma fai se mea, tusa lava pe ou te le toe tusia se isi mea i le lumanai. E le gata i lea, o le autu e masani ona i luga o laugutu.

E taua le fai atu e leai soʻu poto masani i le atinaʻeina o konekarate atamai.

Sa ou fuafua e auai seia oo i le iuga seia oo ina mafai ona ou tusia lea o se tusiga toe iloilo, ae sa ou toilalo i le taimi lava lena i le mea muamua. I tusi se atotupe fa'atasi ai ma saini e tele FunC ma sa masani ona aoga. Sa ou avea ma faavae konekarate atamai ile Solidity.

I lena taimi, sa ou manatu e mautinoa lava ua lava lea e ave ai se nofoaga tau fa'ailoga. O le iʻuga, e tusa ma le 40 mai le 60 tagata auai na avea ma faʻailoga-manumalo ma e leʻi iai aʻu ma i latou. I se tulaga lautele, e leai se mea sese i lenei mea, ae tasi le mea na faalavelave ia te au. I le taimi o le faʻasalalauga o faʻaiʻuga, e leʻi faia le iloiloga o le suʻega mo laʻu konekarate, na ou fesili i tagata auai i le talatalanoaga pe i ai se isi e leʻi mauaina, e leai.

E foliga mai o le gauai atu i aʻu savali, i le lua aso mulimuli ane na lomia ai e le au faʻamasino se faʻamatalaga ma ou te le o malamalama pe na latou misia faʻafuaseʻi laʻu konekarate atamai i le taimi o le faʻamasinoga pe na o le manatu e matua leaga lava e le manaʻomia se faʻamatalaga. Sa ou faia se fesili i luga o le itulau, ae ou te lei mauaina se tali. E ui lava e le o se mea lilo po o ai na faamasino, na ou manatu e le tatau ona tusia ni savali patino.

O le tele o le taimi na faʻaalu i le malamalama, o lea na filifili ai e tusi se tusiga. Talu ai e leʻi tele ni faʻamatalaga, o lenei tusiga o le a fesoasoani e faʻasaoina taimi mo tagata uma e fiafia i ai.

Le manatu o konekarate atamai i TON

Ae e te leʻi tusia se mea, e tatau ona e suʻesuʻeina po o fea itu e faʻalatalata mai ai lenei mea. O le mea lea, o lenei o le a ou taʻu atu ia te oe poʻo a vaega o loʻo i ai le faiga. E sili atu le saʻo, o a vaega e tatau ona e iloa ina ia mafai ai ona e tusia se ituaiga o konekarate faigaluega.

O le a matou taulai atu i le tusiaina o se konekarate atamai ma galulue faatasi TON Virtual Machine (TVM), Fift и FunC, o lea e sili atu le tusiga o se faʻamatalaga o le atinaʻeina o se polokalame masani. O le a tatou le mafaufau i le auala e galue ai le tulaga lava ia iinei.

I se tulaga lautele e uiga i le auala e galue ai TVM ma le gagana Fift o lo'o iai fa'amaumauga aloa'ia lelei. A o ou auai i le tauvaga ma i le taimi nei a o ou tusia le konekarate o loo i ai nei, sa masani ona ou liliu atu ia te ia.

O le gagana autu o lo'o tusia ai konekarate atamai FunC. E leai ni faʻamaumauga i luga o le taimi nei, ina ia mafai ona e tusia se mea e te manaʻomia e suʻesuʻe ai faʻataʻitaʻiga o konekarate atamai mai le fale teu oloa ma le faʻatinoina o le gagana lava ia iina, faʻatasi ai ma e mafai ona e vaʻavaʻai i faʻataʻitaʻiga o konekarate atamai mai le lua ua tuanaʻi. tauvaga. So'oga i le fa'ai'uga o le tala.

Faapea ua uma ona matou tusia se konekarate atamai mo FunC, a maeʻa ona matou tuʻufaʻatasia le code i le Fift assembler.

O le konekarate atamai tu'ufa'atasi e tumau pea e fa'asalalau. Ina ia faia lenei mea e tatau ona e tusia se galuega i totonu Fift, lea o le a ave ai le tulafono konekarate atamai ma isi taʻiala e fai ma faʻaoga, ma o le gaioiga o le a avea ma faila ma le faʻaopoopoga .boc (o lona uiga o le "pepa o sela"), ma, e faalagolago i le auala tatou te tusia ai, o se ki patino ma tuatusi, lea e gaosia e faavae i luga o le tulafono konekarate atamai. Ua mafai ona e lafoina kalama i le tuatusi o se konekarate atamai e leʻi faʻasalalau.

Le lolomiina o se konekarate atamai i TON maua .boc o le a manaʻomia le tuʻuina atu o le faila i le poloka poloka e faʻaaoga ai se tagata malamalama (sili atu i lalo). Ae aʻo leʻi faʻasalalau, e tatau ona e faʻafeiloaʻi kalama i le tuatusi na faia, a leai o le a le lolomiina le konekarate atamai. A maeʻa faʻasalalauga, e mafai ona e fegalegaleai ma le konekarate atamai e ala i le lafoina atu o feʻau mai fafo (mo se faʻataʻitaʻiga, faʻaaogaina o se tagata malamalama) poʻo mai totonu (mo se faʻataʻitaʻiga, o le tasi konekarate atamai e lafoina se isi feʻau i totonu o le TON).

O le taimi lava tatou te malamalama ai pe faʻafefea ona faʻasalalau le code, e faigofie. Matou te iloa lelei mea matou te mananaʻo e tusi ma faʻafefea ona aoga a matou polokalame. Ma a o tusitusi, matou te vaʻavaʻai pe faʻapefea ona faʻatinoina lenei mea i konekarate atamai o loʻo i ai nei, pe matou te vaʻavaʻai i le faʻatinoga o tulafono Fift и FunC i totonu o le faleteuoloa aloaʻia, pe vaʻai i totonu o faʻamaumauga aloaia.

E masani ona ou suʻesuʻeina upu autu i le Telegram chat lea na potopoto uma ai tagata tauva ma tagata faigaluega Telegram, ma na tupu i le taimi o le tauvaga na potopoto ai tagata uma iina ma amata ona talanoaina le Fift ma le FunC. So'oga i le fa'ai'uga o le tala.

Ua oo i le taimi e see ese ai mai le talitonuga i le faatinoga.

Saunia le siosiomaga mo le galulue faatasi ma le TON

Na ou faia mea uma o le a faʻamatalaina i le tusiga ile MacOS ma faʻalua-siaki ile mama Ubuntu 18.04 LTS ile Docker.

O le mea muamua e tatau ona e faia o le download ma faʻapipiʻi lite-client lea e mafai ona e lafo ai talosaga i le TON.

O faʻatonuga i luga o le upega tafaʻilagi aloaia o loʻo faʻamatalaina le faʻapipiʻiina o faʻagasologa i se auiliiliga ma manino ma faʻamalo nisi faʻamatalaga. O iinei matou te mulimuli ai i faʻatonuga, faʻapipiʻi mea o loʻo misi i luga o le ala. Ou te leʻi faʻapipiʻiina aʻu lava ia poloketi taʻitasi ma faʻapipiʻi mai le fale teu oloa Ubuntu (i luga o MacOS na ou faʻaaogaina 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 

A fa'apipi'i uma fa'alagolago e mafai ona e fa'apipi'i lite-client, Fift, FunC.

Muamua, matou te faʻapipiʻi le fale teu oloa TON faʻatasi ai ma ona faʻalagolago. Mo le faʻafaigofie, matou te faia mea uma i totonu o se faila ~/TON.

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

O lo'o teuina fo'i fa'atinoga fa'atinoga Fift и FunC.

O lea ua matou sauni e faʻapipiʻi le poloketi. O lo'o fa'apipi'i le fa'ailoga fa'aputu i totonu o se faila ~/TON/ton. le ~/TON fai se faila build ma aoina le poloketi i totonu.

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

Talu ai o le a matou tusia se konekarate atamai, matou te manaʻomia e le gata lite-clientae Fift с FunC, o lea ia tatou tuufaatasia mea uma. E le o se faiga vave, o lea matou te faatali.

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

Sosoo ai, download le faila fetuutuunai o loʻo iai faʻamatalaga e uiga i le node lea lite-client o le a fesootai.

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

Faia muamua talosaga ile TON

Sei o tatou amata nei lite-client.

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

Afai na manuia le fausiaina, a maeʻa le faʻalauiloaina o le a e vaʻai i se ogalaau o le fesoʻotaʻiga a le tagata faʻatau malamalama i le 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)
...

E mafai ona e fa'atinoina le fa'atonuga help ma vaai po oa poloaiga o loo maua.

help

Sei o tatou lisi poloaiga o le a tatou faaaogaina i lenei tusiga.

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-методы смартконтракта. 

O lea ua matou sauni e tusi le konekarate lava ia.

Реализация

Manatu

E pei ona ou tusia i luga, o le konekarate atamai o loʻo matou tusia o se lotoa.

E le gata i lea, e le o se lotoa lea e te manaʻomia e faʻatau ai se tiketi ma faʻatali mo se itula, aso poʻo le masina, ae o se taimi vave lea e faʻafeiloaʻi ai e le tagata faʻaoga i le tuatusi konekarate. N kalama, ma toe maua vave mai 2 * N kalama pe leiloa. Matou te faia le avanoa e manumalo ai pe a ma le 40%. Afai e le lava le kalama mo le totogiina, ona matou manatu lea o le fefaʻatauaiga o se faʻaopoopoga.

E le gata i lea, e taua tele le vaʻaia o peti i le taimi moni ma i se faiga talafeagai, ina ia mafai e le tagata faʻaoga ona vave malamalama pe na manumalo pe faiaʻina. O le mea lea, e tatau ona e faia se upega tafaʻilagi e faʻaalia ai peti ma faʻaiʻuga tuusaʻo mai TON.

Tusia se konekarate atamai

Mo le faʻafaigofie, ua ou faʻamaonia le code mo FunC; e mafai ona maua le faʻapipiʻi ma faʻapipiʻi i le suʻesuʻega Visual Studio Code; afai e te manaʻo faʻafuaseʻi e faʻaopoopo se mea, ua ou faʻaogaina le faʻapipiʻi faʻasalalau lautele. E le gata i lea, na faia muamua e se tasi se plugin mo le galue ma le Lima, e mafai foi ona e faʻapipiʻi ma maua i le VSC.

Sei o tatou vave fausia se faleteuoloa o le a tatou tuʻuina atu ai iʻuga lata mai.

Ina ia faafaigofieina o tatou olaga, o le a matou tusia se konekarate atamai ma faataitai i le lotoifale seia oo ina saunia. Na'o le mae'a lea ona matou fa'asalalauina i le TON.

O le konekarate atamai e lua auala fafo e mafai ona maua. Tulaga tasi, recv_external() e faʻatinoina lenei galuega pe a oʻo mai se talosaga i le konekarate mai le lalolagi i fafo, o lona uiga, e le mai le TON, mo se faʻataʻitaʻiga, pe a tatou faia se feʻau ma auina atu e ala i le lite-client. Tulaga lua, recv_internal() o le taimi lea, i totonu o le TON lava ia, soʻo se konekarate e faasino ia matou. I tulaga uma e lua, e mafai ona e pasi atu tapulaʻa i le galuega.

Sei o tatou amata i se faʻataʻitaʻiga faigofie o le a aoga pe a faʻasalalau, ae leai se uta aoga i totonu.

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

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

O iinei e tatau ona tatou faʻamatalaina pe o le a slice. O faʻamaumauga uma o loʻo teuina i le TON Blockchain o se faʻaputuga TVM cell pe faigofie cell, i totonu o se cell faapena e mafai ona e teuina i luga ole 1023 bits o faʻamaumauga ma oʻo atu i le 4 soʻotaga i isi sela.

TVM cell slice poʻo slice o se vaega lea o le taimi nei cell e fa'aaogaina e fa'avasega ai, o le a manino mulimuli ane. O le mea autu mo i matou e mafai ona matou faʻafeiloaʻi slice ma fa'alagolago i le ituaiga fe'au, fa'agasolo fa'amaumauga i totonu recv_external() poʻo recv_internal().

impure - o se upu autu e faʻaalia ai o le galuega e suia ai faʻamatalaga konekarate atamai.

Tatou sefe le code konekarate i totonu lottery-code.fc ma tuufaatasia.

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

O le uiga o fuʻa e mafai ona vaʻaia e faʻaaoga ai le faʻatonuga

~/TON/build/crypto/func -help

Ua matou tuufaatasia le Fift assembler code i totonu 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

E mafai ona fa'alauiloa i totonu o le atunu'u, ona o lea o le a tatou saunia ai le si'osi'omaga.

Manatua o le laina muamua e fesoʻotaʻi Asm.fif, o le code lea ua tusia i le Lima mo le Fift assembler.

Talu ai matou te mananaʻo e tamomoe ma suʻe le konekarate atamai i le lotoifale, matou te fatuina se faila lottery-test-suite.fif ma kopi le code tuufaatasia iina, sui le laina mulimuli i totonu, lea e tusia ai le tulafono konekarate atamai i se tulaga faifai pea. codeona tuʻuina atu lea i le masini komepiuta:

"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

E oo mai i le taimi nei e foliga mai ua manino, ia tatou faaopoopo i le faila lava lea e tasi le code o le a tatou faʻaogaina e faʻalauiloa ai le 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 matou te faamaumauina le talaaga, o lona uiga, o faʻamaumauga o le a faʻalauiloa ai le TVM (poʻo le tulaga o fesoʻotaʻiga). E oo lava i le taimi o le tauvaga, na faʻaalia e se tasi o le au atinaʻe le auala e fai ai c7 ma sa ou kopiina. I lenei mataupu atonu e manaʻomia ona tatou suia rand_seed talu ai o le fa'atupuina o se numera fa'afuase'i e fa'alagolago i ai ma afai e le suia, o le numera tutusa o le a toe fa'afo'i i taimi uma.

recv_internal и recv_external tumau fa'atasi ma tau 0 ma -1 o le a nafa ma le vala'au o galuega fa'atatau i le konekarate atamai.

O lea ua matou sauni e fai le suʻega muamua mo la matou konekarate atamai gaogao. Mo le manino, mo le taimi nei o le a matou faʻaopoopo uma suʻega i le faila lava e tasi lottery-test-suite.fif.

Sei o tatou faia se fesuiaiga storage ma tusi i ai se mea gaogao cell, o le a avea ma le teuina konekarate atamai.

message O le fe'au lea o le a matou tu'uina atu i le feso'ota'iga atamai mai fafo. O le a matou fa'agaogaoina fo'i mo le taimi nei.

variable storage 
<b b> storage ! 

variable message 
<b b> message ! 

A maeʻa ona matou saunia mea tumau ma fesuiaiga, matou te faʻalauiloaina le TVM e faʻaaoga ai le poloaiga runvmctx ma pasi atu mea na faia i le mea e ulufale ai.

message @ 
recv_external 
code 
storage @ 
c7 
runvmctx 

I le faaiuga o le a tatou manuia faapei o lea code intermediate mo Fift.

Ole taimi nei e mafai ona tatou faʻatautaia le code e maua ai.

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

O le polokalame e tatau ona tamoe e aunoa ma ni mea sese ma i le gaioiga o le a tatou vaʻai i le faʻasologa o faʻamaumauga:

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

Lelei, ua matou tusia le uluai galuega galue o le konekarate atamai.

Ole taimi nei e mana'omia ona fa'aopoopo galuega. Muamua se'i o tatou feagai ma fe'au e sau mai le lalolagi i fafo i recv_external()

O le tagata lava ia na te filifilia le faʻasologa o feʻau e mafai e le konekarate ona talia.

Ae masani lava

  • muamua, matou te mananaʻo e puipuia la matou konekarate mai le lalolagi i fafo ma faia ina ia naʻo lē e ona le konekarate e mafai ona lafo atu feʻau i fafo.
  • lona lua, pe a matou lafoina se feʻau faʻamaonia i le TON, matou te mananaʻo ia tupu faʻatasi ma pe a matou toe lafoina le savali lava e tasi, e teena e le konekarate atamai.

Toeitiiti lava o konekarate uma e foia nei faafitauli e lua, talu ai e talia e le tatou konekarate feʻau mai fafo, e tatau foi ona tatou tausia lelei.

O le a matou faia i le faasologa faafeagai. Muamua, seʻi o tatou foia le faʻafitauli i le toe fai; afai ua uma ona maua e le konekarate sea feʻau ma faʻatautaia, o le a le faʻatinoina mo le taimi lona lua. Ona matou foia lea o le faafitauli ina ia na o se li'o patino o tagata e mafai ona auina atu savali i le konekarate atamai.

E eseese auala e fo'ia ai le fa'afitauli i fe'au fa'alua. O le auala lenei o le a tatou faia ai. I totonu o le konekarate atamai, matou te amataina le faʻailoga o feʻau na maua ma le tau muamua 0. I feʻau taʻitasi i le konekarate atamai, matou te faʻaopoopoina le tau o loʻo iai nei. Afai e le fetaui le tau fa'atau i le fe'au ma le tau o le konekarate atamai, ona matou le fa'atinoina lea; a fa'apea, ona matou fa'agasolo lea ma fa'ateleina le fa'atau i le konekarate atamai e 1.

Tatou toe foi i lottery-test-suite.fif ma faaopoopo i ai se suega lona lua. Afai matou te lafo se numera sese, e tatau ona lafo e le code se tuusaunoaga. Mo se faʻataʻitaʻiga, tuʻu i le konekarate faʻamaumauga e teu 166, ma o le a matou lafoina 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"

Tatou amata.

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

Ma o le a tatou vaʻai o le suʻega o loʻo faia ma se mea sese.

[ 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 lenei laasaga lottery-test-suite.fif e tatau ona foliga fesoʻotaʻiga.

Se'i o tatou fa'aopoopo le tali fa'atatau ile konekarate atamai i totonu 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 o loo taoto le savali tatou te auina atu.

O le mea muamua matou te faia o le siaki pe o iai i le feʻau faʻamatalaga, a leai, ona matou o ese lea.

Ona sosoo ai lea ma le faavasegaina o le savali. in_msg~load_uint(32) uta le numera 165, 32-bit unsigned int mai le fe'au fa'asalalau.

O le isi matou utaina 32 bits mai le teuina o konekarate atamai. Matou te siaki pe o le numera na utaina e fetaui ma le numera na pasia; a leai, matou te lafoina se faʻalavelave. I la matou tulaga, talu ai matou te pasia se mea e le fetaui, e tatau ona lafo se tuusaunoaga.

Ia tatou tuufaatasia nei.

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

Kopi le code e maua i lottery-test-suite.fif, aua nei galo e sui le laina mulimuli.

Matou te siaki ua pasi le suʻega:

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

O iinei E mafai ona e va'ai i le ta'utinoga tutusa ma fa'ai'uga o lo'o iai nei.

Manatua e le faigofie le kopiina pea o le code tuʻufaʻatasia o se konekarate atamai i totonu o se faila ma suʻega, o lea seʻi o tatou tusia se tusitusiga o le a tusia ai le code i se tulaga tumau mo i tatou, ma o le a faigofie ona tatou faʻafesoʻotaʻi le code tuʻufaʻatasia ia tatou suʻega e faʻaaoga ai. "include".

Fausia se faila i le faila o le poloketi build.sh fa'atasi ai ma mea nei.

#!/bin/bash

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

Se'i o tatou fa'atinoina.

chmod +x ./build.sh

Ia, naʻo le taʻavale la matou tusitusiga e tuʻufaʻatasia le konekarate. Ae le gata i lea, e tatau ona tatou tusia i se tulaga tumau code. O lea o le a matou fatuina se faila fou lotter-compiled-for-test.fif, lea o le a matou aofia ai i le faila lottery-test-suite.fif.

Sei o tatou faʻaopopo le code skirpt i le sh, lea e naʻo le faʻaluaina o le faila tuʻufaʻatasia i totonu lotter-compiled-for-test.fif ma sui le laina mulimuli i totonu.

# 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

Ia, e siaki, seʻi o tatou faʻataʻitaʻiina le faʻasologa o tusitusiga ma o le a faia se faila lottery-compiled-for-test.fif, lea o le a tatou faaaofia ai i la tatou lottery-test-suite.fif

В lottery-test-suite.fif tape le code konekarate ma faaopoopo le laina "lottery-compiled-for-test.fif" include.

Matou te faia suʻega e siaki ai pe latou te pasi.

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

Lelei, i le taimi nei e otometi le faʻalauiloaina o suʻega, tatou fai se faila test.sh, lea o le a faia muamua build.sh, ona fai lea o suega.

touch test.sh
chmod +x test.sh

Matou te tusitusi i totonu

./build.sh 

echo "nCompilation completedn"

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

Tatou fai test.sh ma tamo'e ina ia mautinoa e aoga su'ega.

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

Matou te siakiina o loʻo tuʻufaʻatasia le konekarate ma faʻatino suʻega.

Lelei, ua amata nei test.sh O suʻega o le a tuʻufaʻatasia ma faʻatautaia vave. O le sootaga lea i tautino.

Lelei, ae tatou te leʻi faʻaauau, seʻi o tatou faia se isi mea e faigofie.

Tatou fai se faila build lea o le a matou teuina ai le konekarate kopi ma lona clone tusia i se tumau lottery-compiled.fif, lottery-compiled-for-test.fif. Tatou fai foi se faila test o fea e teu ai le faila su'ega? lottery-test-suite.fif ma isi faila lagolago. So'oga i suiga talafeagai.

Tatou fa'aauau pea le atina'eina o le konekarate atamai.

O le isi e tatau ona i ai se suʻega e siaki ai ua maua le feʻau ma faʻafouina le fata i le faleoloa pe a matou lafoina le numera saʻo. Ae o le a tatou faia mulimuli ane.

Ia tatou mafaufau nei pe o le a le fausaga o faʻamaumauga ma mea e manaʻomia ona teuina i totonu o le konekarate atamai.

O le a ou faamatalaina mea uma matou te teuina.

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

Le isi e manaʻomia ona e tusia ni galuega se lua. Sei o tatou valaau le muamua pack_state(), lea o le a faʻapipiʻiina ai faʻamaumauga mo le faʻasaoina mulimuli ane i le teuina o konekarate atamai. Sei o tatou valaau i le lona lua unpack_state() o le a faitau ma toe faafoi faʻamatalaga mai le teuina.

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

Matou te faʻaopoopoina nei galuega e lua i le amataga o le konekarate atamai. O le a manuia faapei o lea i'uga vavalo.

Ina ia fa'asaoina fa'amaumauga e te mana'omia le vala'au i le galuega faufale set_data() ma o le a tusia faʻamatalaga mai pack_state() i totonu o le teuina o konekarate atamai.

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

O lea la ua i ai a tatou galuega talafeagai mo le tusitusi ma le faitauina o faʻamaumauga, e mafai ona tatou faʻaauau.

Matou te manaʻomia le siakiina o le feʻau o loʻo sau mai fafo e sainia e lē e ona le konekarate (poʻo se isi tagata faʻaoga e mafai ona maua le ki tumaoti).

A matou lolomiina se konekarate atamai, e mafai ona matou amataina i faʻamaumauga matou te manaʻomia i le teuina, lea o le a faʻasaoina mo le faʻaaogaina i le lumanaʻi. O le a matou fa'amauina le ki fa'alaua'itele iina ina ia mafai ona matou fa'amaonia sa sainia le fe'au o lo'o o'o mai i le ki patino e fetaui.

A'o le'i fa'aauau, se'i fai se ki patino ma tusi i ai test/keys/owner.pk. Ina ia faia lenei mea, se'i tatou fa'alauiloa le Fift i le faiga fa'afeso'ota'i ma fa'atino fa'atonuga.

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

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

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

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

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

Tatou fai se faila keys totonu o le faila test ma tusi le ki patino iina.

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

Matou te vaʻai i se faila i le faila o loʻo iai nei owner.pk.

Matou te aveese le ki faʻasalalau mai le faʻaputu ma pe a manaʻomia e mafai ona matou maua mai le mea tumaoti.

Ole taimi nei e tatau ona tatou tusia se fa'amaoniga saini. Tatou amata i le suega. Muamua matou te faitau le ki tumaoti mai le faila e faʻaaoga ai le galuega file>B ma tusi i se fesuiaiga owner_private_key, ona faʻaaogaina lea o le galuega priv>pub liliu le ki patino i se ki lautele ma tusi le taunuuga i totonu 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 !

O le a tatou manaʻomia uma ki.

Matou te amataina le teuina o konekarate atamai ma faʻamaumauga faʻamaonia i le faasologa tutusa e pei o le galuega pack_state()ma tusi i se fesuiaiga 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 !

O le isi, o le a matou tusia se savali sainia, o le a naʻo le saini ma le tau faʻatau.

Muamua, matou te fatuina faʻamaumauga matou te mananaʻo e tuʻuina atu, ona matou sainia lea i se ki faʻapitoa ma mulimuli ane matou faia se feʻau sainia.

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 !  

O se taunuuga, o le feʻau o le a matou lafoina i le konekarate atamai o loʻo faʻamauina i se fesuiaiga message_to_send, e uiga i galuega hashu, ed25519_sign_uint e mafai ona e faitau i le pepa lima.

Ma e fai le suega matou te toe valaau.

message_to_send @ 
recv_external 
code 
storage @
c7
runvmctx

O iinei O le faila o loʻo iai suʻega e tatau ona faʻapea i lenei laʻasaga.

Sei o tatou faia le suega ma o le a le manuia, o lea o le a tatou suia le konekarate atamai ina ia mafai ai ona maua feʻau o lenei faatulagaga ma faʻamaonia le saini.

Muamua, matou te faitauina le 512 bits o le saini mai le feʻau ma tusi i se fesuiaiga, ona matou faitauina lea o le 32 bits o le fesuiaiga faʻatau.

Talu ai o loʻo i ai a matou galuega mo le faitauina o faʻamatalaga mai le teuina o konekarate atamai, matou te faʻaaogaina.

O le isi mea o le siakiina o le fata ua fesiita'i ma le teuina ma siaki le saini. Afai e le fetaui se mea, ona matou lafoina lea o se tuusaunoaga ma le code talafeagai.

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

Tautinoga talafeagai saʻo iinei.

Se'i o tatou fai su'ega ma vaai ua le manuia le su'ega lona lua. Mo mafuaʻaga e lua, e le lava ni fasipepa i le feʻau ma e le lava ni faʻailoga i totonu o le teuina, o lea e paʻu ai le code pe a faʻasalalau. Matou te manaʻomia le faʻaopoopoina o se saini i le feʻau o loʻo matou lafoina ma kopi le teuina mai le suʻega mulimuli.

I le suʻega lona lua, matou te faʻaopoopoina se saini savali ma suia le teuina o konekarate atamai. O iinei o le faila ma suʻega e foliga mai i le taimi nei.

Sei o tatou tusia se suega lona fa, lea o le a tatou auina atu ai se savali ua sainia ma le ki patino a se isi tagata. Se'i fai se isi ki patino ma sefe i se faila not-owner.pk. O le a matou sainia le fe'au i lenei ki patino. Tatou fai su'ega ma ia mautinoa ua pasi uma su'ega. Tautino i le taimi nei.

Ole taimi nei e mafai ona tatou agai i luma i le faʻatinoina o le atamai konekarate manatu.
В recv_external() o le a matou taliaina ni ituaiga savali se lua.

Talu ai ona o la matou konekarate o le a faʻaputuina tupe a le au taaalo, o lenei tupe e tatau ona tuʻuina atu i le na faia le lotoa. O le tuatusi atotupe a le na faia le lotoa o lo'o fa'amaumauina i le teuina pe a fai le konekarate.

I le tulaga lava, matou te manaʻomia le tomai e sui ai le tuatusi lea matou te lafo i ai kalama o le au leiloa. E tatau foi ona mafai ona tatou auina atu kalama mai le lotoa i le tuatusi o lē e ona.

Tatou amata i le mea muamua. Sei o tatou tusia muamua se suʻega e siaki ai pe a uma ona tuʻuina atu le feʻau, o le konekarate atamai na faʻasaoina le tuatusi fou i le teuina. Faamolemole ia matau i totonu o le savali, e faaopoopo atu i le fata ma le tuatusi fou, matou te lafoina foi action O le 7-bit integer numera le lelei, e faalagolago i ai, o le a tatou filifili pe faʻafefea ona faʻagasolo le feʻau i le konekarate atamai.

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

I le suʻega e mafai ona e vaʻai pe faʻafefea ona faʻaumatia le teuina o konekarate atamai storage i le Lima. Deserialization o fesuiaiga o loʻo faʻamatalaina i le lima faʻamaumauga.

Tautino sootaga ma le paluga faaopoopo.

Tatou fai le su'ega ma ia mautinoa e le manuia. Se'i o tatou fa'aopoopo le manatu e sui ai le tuatusi o lē e ana le lotoa.

I le konekarate atamai matou te faʻaauau pea ona faʻavasega message, faitau i totonu action. Sei o matou faamanatu atu o le a lua action: sui tuatusi ma lafo kalama.

Ona matou faitau lea o le tuatusi fou a le pule konekarate ma teu i le teuina.
Matou te faia suʻega ma vaʻai ua le manuia le suʻega lona tolu. E paʻu ona o le mea moni o le konekarate o loʻo faʻaopoopoina le 7 bits mai le feʻau, lea o loʻo misi i le suʻega. Fa'aopoopo se mea e le o iai i le fe'au action. Se'i o tatou faia su'ega ma va'ai ua pasi mea uma. iinei tuuto atu i suiga. Matagofie.

Sei o tatou tusia le manatu mo le auina atu o le numera faʻamaonia o kalama i le tuatusi na faʻasaoina muamua.

Muamua, tatou tusi se su'ega. O le a matou tusia ni suʻega se lua, tasi pe a le lava le paleni, o le lona lua pe a tatau ona pasi manuia mea uma. E mafai ona va'aia su'ega i lenei tautinoga.

Ia tatou fa'aopoopo le code. Muamua, se'i o tatou tusia ni auala fesoasoani se lua. O le auala muamua e maua ai o le sailia lea o le paleni o loʻo iai nei o se konekarate atamai.

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

Ma o le lona lua e mo le lafoina o kalama i se isi konekarate atamai. Na ou kopiina atoa lenei metotia mai se isi konekarate 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
}

Sei o tatou faʻaopoopoina nei auala e lua i le konekarate atamai ma tusi le faʻatatau. Muamua, matou te faʻavasega le numera o kalama mai le feʻau. O le isi matou siaki le paleni, pe a le lava matou te lafoina se tuusaunoaga. Afai e lelei mea uma, ona matou lafoina lea o kalama i le tuatusi faʻasaoina ma faʻafouina le fata.

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

O iinei e foliga mai o le konekarate atamai i le taimi nei. Tatou fai su'ega ma ia mautinoa latou te pasi.

I le auala, o se komisi e toesea mai le konekarate atamai i taimi uma mo se feʻau faʻatautaia. Ina ia mafai e feʻau konekarate atamai ona faʻatino le talosaga, pe a maeʻa siaki masani e tatau ona e valaʻau accept_message().

Se'i o tatou agai atu nei i feau i totonu. O le mea moni, o le a matou talia na o kalama ma toe lafo faalua le aofaʻi i le tagata taalo pe a manumalo ma le lona tolu i lē e ona pe a faiaʻina.

Muamua, tatou tusi se suega faigofie. Ina ia faia lenei mea, matou te manaʻomia se tuatusi suʻega o le konekarate atamai lea matou te faʻapea e lafo atu ai kalama i le konekarate atamai.

O le tuatusi faakonekarate atamai e aofia ai numera e lua, o le 32-bit integer e nafa ma le workchain ma le 256-bit non-negative integer numera tulaga ese i totonu o lenei filifili galuega. Mo se faʻataʻitaʻiga, -1 ma le 12345, o le tuatusi lea o le a matou teuina i se faila.

Na ou kopiina le galuega mo le faasaoina o le tuatusi 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

Se'i o tatou va'ava'ai pe fa'apefea ona galue le galuega, o le a maua ai se malamalamaga i le auala e galue ai le Lima. Fa'alauiloa le Lima i le faiga felagolagomai.

~/TON/build/crypto/fift -i 

Muamua matou te tuleia -1, 12345 ma le igoa o le faila i le lumanaʻi "sender.addr" i luga o le faaputuga:

-1 12345 "sender.addr" 

O le isi laasaga o le faʻatinoina o le galuega -rot, lea e suia ai le faaputuga i se auala e i le pito i luga o le faaputuga o loo i ai se numera tulaga ese konekarate atamai:

"sender.addr" -1 12345

256 u>B fa'aliliuina le 256-bit e le'o-negative integer i bytes.

"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039

swap fesuia'i elemene pito i luga e lua o le faaputuga.

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -1

32 i>B fa'aliliuina le 32-bit integer i bytes.

"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFF

B+ fa'afeso'ota'i fa'asologa e lua o bytes.

 "sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF

Toe swap.

BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" 

Ma mulimuli ane ua tusia le bytes i le faila B>file. A uma lea ua gaogao le matou faaputuga. Tatou taofi Fift. Ua faia se faila i le faila o loo iai nei sender.addr. Sei o tatou siiina le faila i le faila na faia test/addresses/.

Sei o tatou tusia se suega faigofie e auina atu kalama i se konekarate atamai. O le tautinoga lea.

Se'i o tatou tilotilo la i le manatu o le lotoa.

O le mea muamua matou te faia o le siakiina o le savali bounced pe leai pe afai bounced, ona tatou le amanaiaina lea. bounced o lona uiga o le konekarate o le a toe faafoi kalama pe a tupu se mea sese. Matou te le toe faʻafoʻi le kalama pe a faʻafuaseʻi ona tupu se mea sese.

Matou te siakiina, afai o le paleni e itiiti ifo i le afa kalama, ona matou talia lea o le feʻau ma le amanaiaina.

Ma le isi, matou te faʻasalalau le tuatusi o le konekarate atamai lea na sau ai le feʻau.

Matou te faitau i faʻamatalaga mai le teuina ona tape ai lea o peti tuai mai le tala faasolopito pe afai e sili atu ma le luasefulu. Mo le faigofie, na ou tusia ni galuega faaopoopo se tolu pack_order(), unpack_order(), remove_old_orders().

Ma le isi, matou te vaʻavaʻai pe le lava le paleni mo le totogiina, ona matou manatu lea e le o se peti, ae o se toe faʻatumu ma faʻasaoina le toe faʻatumu i totonu. orders.

Ona mulimuli ane ai lea o le ute o le konekarate atamai.

Muamua, afai e leiloa le tagata taʻalo, matou te teuina i le tala faʻasolopito ma afai o le aofaʻi e sili atu i le 3 kalama, matou te lafoina le 1/3 i lē e ona le konekarate atamai.

Afai e manumalo le tagata taalo, ona matou auina atu lea e faaluaina le aofaʻi i le tuatusi o le tagata taʻalo ona faʻasaoina lea o faʻamatalaga e uiga i le peti i le talafaasolopito.

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

Pau lava lena. Tautinoga tutusa.

O le taimi nei o mea uma e totoe e faigofie, seʻi o tatou fatuina auala e maua ai ina ia mafai ona tatou maua faʻamatalaga e uiga i le tulaga o le konekarate mai le lalolagi i fafo (o le mea moni, faitau faʻamatalaga mai le latou teuina o konekarate atamai).

Sei o tatou faaopoopo auala maua. O le a matou tusia i lalo e uiga i le auala e maua ai faʻamatalaga e uiga i se konekarate atamai.

Na galo foi ia te aʻu le faʻaopoopoina o le code lea o le a faʻatautaia le talosaga muamua e tupu pe a lolomiina se konekarate atamai. Tautinoga tutusa. Ma isi faasa'oina bug ma le lafoina o le 1/3 o le aofaʻi i le teugatupe a lē e ona.

O le isi laasaga o le lolomiina o le konekarate atamai. Tatou fai se faila requests.

Sa ou ave le fa'asalalauga fa'asalalau e fai ma fa'avae simple-wallet-code.fc lea mafai ona maua i le faleteuoloa aloaia.

O se mea e tatau ona gauai i ai. Matou te fa'atupuina se teuina fa'akonekarate atamai ma se fe'au fa'aofi. A maeʻa lenei mea, o le tuatusi o le konekarate atamai e faʻatupuina, o lona uiga, o le tuatusi e iloa aʻo leʻi faʻasalalau i le TON. Ma le isi, e tatau ona e lafoina ni kalama i lenei tuatusi, ma e naʻo le maeʻa ona e manaʻomia le lafoina o se faila ma le konekarate atamai lava ia, talu ai o le fesoʻotaʻiga e manaʻomia se komisi mo le teuina o le konekarate atamai ma gaioiga i totonu (tagata faʻamaonia e teuina ma faʻatinoina le atamai. konekarate). E mafai ona vaʻaia le code iinei.

Sosoo ai matou fa'atino le lomitusi code ma maua lottery-query.boc faila konekarate atamai ma tuatusi.

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

Aua nei galo e teu faila na faia: lottery-query.boc, lottery.addr, lottery.pk.

Faatasi ai ma isi mea, o le a tatou vaʻai i le tuatusi o le konekarate atamai i totonu o faʻamaumauga o faʻatinoga.

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

Na'o le fiafia, se'i fai se talosaga i le TON

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

Ma o le a tatou vaʻai o le tala faʻatasi ma lenei tuatusi e leai se mea.

account state is empty

Matou te lafo i le tuatusi 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 Gram ma a maeʻa ni nai sekone matou te faʻatinoina lea lava poloaiga. E lafo kalama ou te faaaogaina atotupe aloaia, ma e mafai ona e fesili i se tasi mai le talatalanoaga mo suega kalama, lea o le a ou talanoa i ai i le faaiuga o le tusiga.

> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

E foliga mai e le'i iloa (state:account_uninit) o se konekarate atamai ma le tuatusi tutusa ma le paleni o le 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

Ia tatou fa'asalalau le konekarate atamai. Tatou fa'alauiloa lite-client ma fa'atino.

> 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 

Sei o tatou siaki ua uma ona lomia le konekarate.

> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd

Faatasi ai ma isi mea tatou te maua.

  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

Ua tatou vaai i ai account_active.

Tautinoga tutusa ma suiga saʻo iinei.

Se'i o tatou faia nei talosaga e fegalegaleai ma le konekarate atamai.

E sili atu le saʻo, o le a matou tuʻua le mea muamua mo le suia o le tuatusi o se galuega tutoʻatasi, ma o le a matou faia le lona lua mo le lafoina o kalama i le tuatusi o lē e ona. O le mea moni, e manaʻomia ona tatou faia le mea lava e tasi e pei o le suʻega mo le lafoina o kalama.

O le fe'au lea o le a matou lafo i le konekarate atamai, lea msg_seqno 165, action 2 ma le 9.5 kalama mo le auina atu.

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

Aua nei galo e saini le fe'au i lau ki patino lottery.pk, lea na fa'atupuina muamua ina ua faia le konekarate atamai. O le tautinoga tutusa lea.

Mauaina o faʻamatalaga mai se konekarate atamai e faʻaaoga auala maua

Se'i o tatou va'ava'ai pe fa'afefea ona fa'atautaia auala atamai konekarate maua.

Fa'alauiloa lite-client ma faʻataʻitaʻi le get method na matou tusia.

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

В result o lo'o i ai le tau e toe fo'i mai ai le galuega balance() mai la matou konekarate atamai.
O le a matou faia foi le mea lava lea e tasi mo nisi metotia.

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

Sei o tatou fesili mo lau tala faasolopito o 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]) ] 

O le a matou faʻaogaina le lite-client ma maua auala e faʻaalia ai faʻamatalaga e uiga i le konekarate atamai i luga o le saite.

Fa'aali fa'amatalaga fa'akonekarate atamai i luga o le upega tafa'ilagi

Na ou tusia se upega tafaʻilagi faigofie i le Python e faʻaalia ai faʻamatalaga mai le konekarate atamai i se auala faigofie. O iinei o le a ou le mafaufau i ai i auiliiliga ma o le a lolomiina le saite i se tautinoga e tasi.

O talosaga i le TON e faia mai Python faatasi ai ma le fesoasoani lite-client. Mo le faʻaogagofie, o loʻo faʻapipiʻiina le saite i Docker ma faʻasalalau ile Google Cloud. So'oga.

Tatou taumafai

Sei o tatou taumafai e lafo iina kalama mo le toe faatumu mai atotupe. Matou te auina atu le 40 kalama. Ma ia tatou faia ni peti se lua mo le manino. Matou te vaʻai o loʻo faʻaalia e le saite le talaʻaga o peti, le pasene manumalo o loʻo iai nei ma isi faʻamatalaga aoga.

Ua tatou vaaina tatou manumalo i le muamua, faiaina le lona lua.

Taofi upu

O le tusiga na foliga mai e sili atu le umi nai lo le mea na ou faʻamoemoeina, atonu e puupuu, pe atonu mo naʻo se tagata e le iloa se mea e uiga i le TON ma manaʻo e tusi ma lolomi se konekarate atamai e le faigofie ma le mafai ona fegalegaleai ma lea. Atonu o nisi mea e mafai ona faamalamalamaina atili atu.

Masalo o nisi o vaega o le faʻatinoga e mafai ona sili atu ona lelei ma faʻalelei, ae o le a sili atu le taimi e saunia ai le tusiga. E mafai foʻi ona ou faia se mea sese i se mea pe leʻi malamalama i se mea, o lea afai o loʻo e faia se mea ogaoga, e tatau ona e faʻalagolago i faʻamaumauga aloaia poʻo le fale teu oloa faʻatasi ma le code TON.

E tatau ona maitauina talu ai o le TON lava ia o loʻo i ai pea i le tulaga galue o le atinaʻe, e mafai ona tupu suiga o le a motusia ai soʻo se laasaga o lenei tusiga (lea na tupu aʻo ou tusitusi, ua uma ona faʻasaʻoina), ae o le auala lautele o le e foliga mai e le suia.

O le a ou le talanoa e uiga i le lumanaʻi o TON. Masalo o le tulaga o le a avea ma se mea tele ma e tatau ona tatou faʻaalu se taimi e suʻesuʻe ai ma faʻatumu se faʻailoga i a tatou oloa i le taimi nei.

O loʻo iai foʻi le Libra mai le Facebook, o loʻo i ai le faʻalogo faʻapitoa o tagata faʻaoga e sili atu nai lo TON. E toetoe lava a leai se mea ou te iloa e uiga i le Libra, faʻamasinoina e le fono e sili atu le tele o gaioiga iina nai lo le TON community. E ui lava o le au atinaʻe ma le faʻalapotopotoga o TON e sili atu i lalo o le eleele, lea e manaia foi.

mau

  1. Fa'amaumauga aloa'ia a le TON: https://test.ton.org
  2. Fa'amaumauga aloa'ia TON: https://github.com/ton-blockchain/ton
  3. atotupe aloaia mo tulaga eseese: https://wallet.ton.org
  4. Smart contract repository mai lenei tusiga: https://github.com/raiym/astonished
  5. So'oga ile upega tafa'ilagi o konekarate atamai: https://ton-lottery.appspot.com
  6. Faleteu mo le faʻaopoopoga mo Visual Studio Code mo FunC: https://github.com/raiym/func-visual-studio-plugin
  7. Talanoa e uiga i le TON i Telegram, lea na fesoasoani tele e iloa ai i le tulaga muamua. Ou te manatu e le o se mea sese pe a ou fai atu o tagata uma na tusia se mea mo TON o loʻo i ai iina. E mafai fo'i ona e fesili mo su'ega kalama iina. https://t.me/tondev_ru
  8. O le isi talatalanoaga e uiga i le TON lea na ou maua ai faʻamatalaga aoga: https://t.me/TONgramDev
  9. Laasaga muamua o le tauvaga: https://contest.com/blockchain
  10. Laasaga lona lua o le tauvaga: https://contest.com/blockchain-2

puna: www.habr.com

Faaopoopo i ai se faamatalaga