ProHoster > ΠΠ»ΠΎΠ³ > Kev tswj hwm > Hais txog yuav ua li cas sau thiab tshaj tawm daim ntawv cog lus ntse hauv Telegram Qhib Network (TON)
Hais txog yuav ua li cas sau thiab tshaj tawm daim ntawv cog lus ntse hauv Telegram Qhib Network (TON)
Hais txog yuav ua li cas sau thiab luam tawm daim ntawv cog lus ntse hauv TON
Zaj lus no hais txog dab tsi?
Hauv tsab xov xwm kuv yuav tham txog yuav ua li cas kuv tau koom nrog thawj (ntawm ob) Telegram blockchain kev sib tw, tsis tau txais khoom plig, thiab txiav txim siab sau kuv cov kev paub dhau los hauv ib tsab xov xwm kom tsis txhob poob rau hauv oblivion thiab, tej zaum, pab. ib tug.
Txij li thaum kuv tsis xav sau cov lej paub daws teeb meem, tab sis ua ib yam dab tsi ua haujlwm, rau tsab xov xwm kuv tau sau daim ntawv cog lus ntse rau kev rho npe tam sim thiab lub vev xaib uas qhia cov ntaub ntawv cog lus ntse ncaj qha los ntawm TON yam tsis siv qhov nruab nrab cia.
Kab lus yuav muaj txiaj ntsig zoo rau cov neeg uas xav ua lawv thawj daim ntawv cog lus ntse hauv TON, tab sis tsis paub yuav pib qhov twg.
Siv cov rho npe ua piv txwv, kuv yuav mus los ntawm kev txhim kho ib puag ncig los tshaj tawm daim ntawv cog lus ntse, cuam tshuam nrog nws, thiab sau lub vev xaib kom tau txais thiab tshaj tawm cov ntaub ntawv.
Hais txog kev koom tes hauv kev sib tw
Lub Kaum Hli Ntuj dhau los, Telegram tshaj tawm kev sib tw blockchain nrog cov lus tshiab Fift ΠΈ FunC. Nws yog tsim nyog los xaiv los ntawm kev sau ib qho ntawm tsib daim ntawv cog lus ntse. Kuv xav tias nws yuav zoo rau ua ib yam dab tsi txawv, kawm ib hom lus thiab ua ib yam dab tsi, txawm tias kuv tsis tas yuav sau lwm yam yav tom ntej. Ntxiv rau, lub ntsiab lus yog tas li ntawm daim di ncauj.
Kuv npaj mus koom kom txog thaum kawg kom txog rau thaum kuv tuaj yeem sau ib tsab xov xwm tshuaj xyuas, tab sis kuv ua tsis tiav tam sim ntawd ntawm thawj qhov. Kuv sau ib lub hnab nyiaj nrog ntau kos npe rau FunC thiab nws feem ntau ua haujlwm. Kuv coj nws ua lub hauv paus ntse daim ntawv cog lus ntawm Solidity.
Lub sijhawm ntawd, kuv xav tias qhov no yeej txaus los coj yam tsawg kawg ib qho khoom plig. Raws li qhov tshwm sim, kwv yees li 40 ntawm 60 tus neeg koom tau los ua tus yeej thiab kuv tsis nyob hauv lawv. Feem ntau, tsis muaj dab tsi tsis ncaj ncees lawm nrog qhov no, tab sis ib qho ua rau kuv nyuaj siab. Thaum lub sijhawm tshaj tawm cov txiaj ntsig, kev tshuaj xyuas qhov kev xeem rau kuv daim ntawv cog lus tsis tau ua tiav, Kuv nug cov neeg koom nrog hauv kev sib tham yog tias muaj lwm tus tsis muaj, tsis muaj.
Pom tau tias ua tib zoo mloog kuv cov lus, ob hnub tom qab cov kws txiav txim plaub tau tshaj tawm cov lus pom thiab kuv tseem tsis nkag siab tias lawv puas tau plam kuv daim ntawv cog lus ntse thaum txiav txim lossis tsuas xav tias nws phem heev uas tsis xav tau cov lus pom. Kuv nug ib lo lus nug ntawm nplooj ntawv, tab sis tsis tau txais lus teb. Txawm hais tias nws tsis pub leej twg txiav txim, kuv xav tias nws tsis tsim nyog los sau cov lus ntawm tus kheej.
Ntau lub sij hawm tau siv rau kev nkag siab, yog li nws tau txiav txim siab los sau ib tsab xov xwm. Txij li thaum tseem tsis tau muaj ntau cov ntaub ntawv, kab lus no yuav pab txuag lub sijhawm rau txhua tus neeg nyiam.
Lub tswv yim ntawm kev cog lus ntse hauv TON
Ua ntej koj sau ib yam dab tsi, koj yuav tsum paub seb sab twg los mus txog qhov no los ntawm. Yog li ntawd, tam sim no kuv yuav qhia rau koj seb qhov system muaj li cas. Ntau qhov tseeb, qhov twg koj yuav tsum paub txhawm rau sau tsawg kawg qee yam kev cog lus ua haujlwm.
Peb yuav tsom mus rau kev sau daim ntawv cog lus ntse thiab ua haujlwm nrog TON Virtual Machine (TVM), Fift ΠΈ FunC, yog li tsab xov xwm zoo ib yam li cov lus piav qhia ntawm kev txhim kho cov kev pab cuam ib txwm muaj. Peb yuav tsis nyob ntawm yuav ua li cas lub platform nws tus kheej ua haujlwm ntawm no.
Feem ntau hais txog nws ua haujlwm li cas TVM thiab lus Fift muaj cov ntaub ntawv zoo. Thaum koom nrog kev sib tw thiab tam sim no thaum sau daim ntawv cog lus tam sim no, kuv feem ntau tig mus rau nws.
Cov lus tseem ceeb uas cov ntawv cog lus ntse sau yog FunC. Tsis muaj ntaub ntawv rau nws tam sim no, yog li txhawm rau sau ib yam dab tsi koj yuav tsum kawm cov piv txwv ntawm cov ntawv cog lus ntse los ntawm lub chaw khaws ntaub ntawv thiab kev siv cov lus nws tus kheej nyob ntawd, ntxiv rau koj tuaj yeem saib cov piv txwv ntawm cov ntawv cog lus ntse los ntawm ob yav dhau los. kev sib tw. Txuas rau qhov kawg ntawm tsab xov xwm.
Wb hais tias peb twb tau sau ib daim ntawv cog lus ntse rau FunC, tom qab ntawd peb sau cov cai rau hauv Fift assembler.
Daim ntawv cog lus ntse tseem yuav tsum luam tawm. Txhawm rau ua qhov no koj yuav tsum sau ib txoj haujlwm hauv Fift, uas yuav siv cov ntawv cog lus ntse thiab qee qhov tsis sib xws raws li cov tswv yim, thiab cov zis yuav yog cov ntaub ntawv nrog qhov txuas ntxiv .boc (uas txhais tau tias "lub hnab ntawm cov hlwb"), thiab, nyob ntawm seb peb sau nws li cas, tus yuam sij ntiag tug thiab chaw nyob, uas yog tsim los ntawm cov ntawv cog lus ntse. Koj tuaj yeem xa grams mus rau qhov chaw nyob ntawm daim ntawv cog lus ntse uas tseem tsis tau luam tawm.
Tshaj tawm daim ntawv cog lus ntse hauv TON tau txais .boc cov ntaub ntawv yuav tsum tau xa mus rau lub blockchain siv lub teeb tus neeg siv khoom (ntxiv rau qhov hauv qab no). Tab sis ua ntej tshaj tawm, koj yuav tsum hloov cov grams mus rau qhov chaw nyob tsim, txwv tsis pub daim ntawv cog lus ntse yuav tsis raug luam tawm. Tom qab tshaj tawm, koj tuaj yeem cuam tshuam nrog daim ntawv cog lus ntse los ntawm kev xa nws cov lus los ntawm sab nraud (piv txwv li, siv lub teeb tus neeg siv) lossis los ntawm sab hauv (piv txwv li, ib daim ntawv cog lus ntse xa lwm cov lus hauv TON).
Thaum peb nkag siab tias cov cai luam tawm li cas, nws yooj yim dua. Peb paub zoo tias peb xav sau dab tsi thiab peb txoj haujlwm yuav ua haujlwm li cas. Thiab thaum sau ntawv, peb saib seb qhov no tau ua li cas hauv cov ntawv cog lus ntse uas twb muaj lawm, lossis peb saib mus rau hauv txoj cai siv Fift ΠΈ FunC nyob rau hauv lub official repository, los yog saib nyob rau hauv lub official ntaub ntawv.
Feem ntau kuv tau tshawb nrhiav cov ntsiab lus tseem ceeb hauv Telegram tham qhov twg txhua tus neeg koom nrog kev sib tw thiab Telegram cov neeg ua haujlwm tau sib sau ua ke, thiab nws tau tshwm sim thaum lub sijhawm kev sib tw txhua tus tau sib sau ua ke thiab pib sib tham txog Fift thiab FunC. Txuas rau qhov kawg ntawm tsab xov xwm.
Nws yog lub sijhawm txav los ntawm kev xav mus rau kev xyaum.
Npaj ib puag ncig rau kev ua haujlwm nrog TON
Kuv tau ua txhua yam uas yuav tau piav qhia hauv tsab xov xwm ntawm macOS thiab tau kuaj xyuas ob zaug hauv Ubuntu 18.04 LTS ntawm Docker.
Thawj qhov koj yuav tsum tau ua yog rub tawm thiab nruab lite-client uas koj tuaj yeem xa cov lus thov rau TON.
Cov lus qhia ntawm lub vev xaib raug cai piav qhia txog cov txheej txheem kev teeb tsa hauv kev nthuav dav thiab meej thiab tshem tawm qee cov ntsiab lus. Ntawm no peb ua raws li cov lus qhia, txhim kho qhov tsis muaj kev vam khom ntawm txoj kev. Kuv tsis tau sau txhua qhov project kuv tus kheej thiab tau teeb tsa los ntawm lub chaw khaws ntaub ntawv Ubuntu (ntawm MacOS kuv siv brew).
Ua ntej, peb clone lub TON repository nrog rau nws cov dependencies. Txhawm rau kom yooj yim, peb yuav ua txhua yam hauv daim nplaub tshev ~/TON.
cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursive
Lub chaw khaws cia tseem khaws cov kev siv Fift ΠΈ FunC.
Tam sim no peb npaj txhij los sib sau ua ke qhov project. Lub repository code yog cloned rau hauv ib daim ntawv tais ceev tseg ~/TON/ton. Cov ~/TON tsim ib daim nplaub tshev build thiab sau qhov project hauv nws.
mkdir ~/TON/build
cd ~/TON/build
cmake ../ton
Txij li thaum peb tab tom yuav sau daim ntawv cog lus ntse, peb xav tau tsis yog xwb lite-clientTab sis Fift Ρ FunC, yog li cia peb sau txhua yam. Nws tsis yog txheej txheem ceev, yog li peb tos.
cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.json
Yog tias kev tsim ua tiav, tom qab tso tawm koj yuav pom ib lub cav ntawm kev sib txuas ntawm cov neeg siv lub teeb rau ntawm qhov chaw.
[ 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)
...
Cia peb sau cov lus txib uas peb yuav siv hauv kab lus no.
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
Tam sim no peb tau npaj sau daim ntawv cog lus nws tus kheej.
Kev siv
Lub tswv yim
Raws li kuv tau sau saum toj no, daim ntawv cog lus ntse uas peb sau yog rho npe.
Ntxiv mus, qhov no tsis yog ib qho kev rho npe uas koj yuav tsum tau yuav daim pib thiab tos ib teev, hnub lossis hli, tab sis ib qho instant uas tus neeg siv hloov mus rau qhov chaw nyob hauv daim ntawv cog lus. N grams, thiab tam sim ntawd tau txais nws rov qab 2 * N grams los yog poob. Peb yuav ua qhov tshwm sim ntawm kev yeej ntawm 40%. Yog tias tsis muaj grams txaus rau kev them nyiaj, ces peb yuav txiav txim siab qhov kev hloov pauv raws li kev sau nyiaj.
Ntxiv mus, nws yog ib qho tseem ceeb uas bets yuav pom nyob rau hauv lub sij hawm ntawm lub sij hawm thiab nyob rau hauv ib tug yooj yim daim ntawv, yog li ntawd tus neeg siv yuav tam sim ntawd nkag siab txog seb nws yeej los yog poob. Yog li ntawd, koj yuav tsum tau ua ib lub website uas yuav qhia bets thiab cov txiaj ntsig ncaj qha los ntawm TON.
Sau daim ntawv cog lus ntse
Txhawm rau kom yooj yim, kuv tau hais txog cov cai rau FunC; lub plugin tuaj yeem pom thiab ntsia hauv Visual Studio Code nrhiav; yog tias koj xav tau ntxiv ib yam dab tsi, kuv tau ua lub plugin rau pej xeem. Tsis tas li ntawd, ib tus neeg yav dhau los tau ua lub plugin rau kev ua haujlwm nrog Fift, koj tuaj yeem nruab nws thiab pom nws hauv VSC.
Cia tam sim ntawd tsim ib lub chaw cia khoom uas peb yuav ua tiav cov txiaj ntsig nruab nrab.
Ua kom peb lub neej yooj yim dua, peb yuav sau daim ntawv cog lus ntse thiab sim nws hauv zos kom txog thaum nws npaj txhij. Tsuas yog tom qab ntawd peb yuav tshaj tawm hauv TON.
Daim ntawv cog lus ntse muaj ob txoj hauv kev sab nraud uas tuaj yeem nkag mus tau. Ua ntej, recv_external() Qhov kev ua haujlwm no tau ua tiav thaum qhov kev thov rau daim ntawv cog lus los ntawm lub ntiaj teb sab nraud, uas yog, tsis yog los ntawm TON, piv txwv li, thaum peb tus kheej tsim cov lus thiab xa nws los ntawm lite-neeg siv khoom. Thib ob, recv_internal() qhov no yog thaum, hauv TON nws tus kheej, ib daim ntawv cog lus hais txog peb li. Hauv ob qho xwm txheej, koj tuaj yeem dhau qhov ntsuas rau qhov ua haujlwm.
Cia peb pib nrog ib qho piv txwv yooj yim uas yuav ua haujlwm yog tias luam tawm, tab sis tsis muaj kev ua haujlwm hauv nws.
Π c7 peb sau cov ntsiab lus, uas yog, cov ntaub ntawv uas TVM (los yog lub xeev network) yuav raug tso tawm. Txawm tias thaum lub sij hawm kev sib tw, ib tug ntawm cov developers tau qhia yuav ua li cas los tsim c7 thiab kuv tau theej. Hauv kab lus no peb yuav tau hloov rand_seed txij thaum tiam ntawm tus lej random nyob ntawm nws thiab yog tias tsis hloov, tib tus lej yuav raug xa rov qab txhua zaus.
recv_internal ΠΈ recv_external qhov tsis tu ncua nrog qhov tseem ceeb 0 thiab -1 yuav yog lub luag haujlwm rau kev hu xov tooj rau cov haujlwm sib xws hauv daim ntawv cog lus ntse.
Tam sim no peb tau npaj los tsim thawj qhov kev xeem rau peb daim ntawv cog lus ntse khoob. Kom meej meej, rau tam sim no peb yuav ntxiv tag nrho cov kev xeem rau tib cov ntaub ntawv lottery-test-suite.fif.
Cia peb tsim qhov sib txawv storage thiab sau ib qho khoob rau hauv nws cell, qhov no yuav yog qhov kev cog lus ntse cia.
message Qhov no yog cov lus uas peb yuav xa mus rau tus ntse hu los ntawm sab nraud. Peb tseem yuav ua kom nws khoob rau tam sim no.
Zoo heev, peb tau sau thawj zaug ua haujlwm ntawm daim ntawv cog lus ntse.
Tam sim no peb yuav tsum tau ntxiv functionality. Ua ntej cia peb nrog cov lus uas los ntawm lub ntiaj teb sab nraud rau recv_external()
Tus tsim tawm nws tus kheej xaiv cov lus hom uas daim ntawv cog lus tuaj yeem txais.
Tab sis feem ntau
ua ntej, peb xav tiv thaiv peb daim ntawv cog lus los ntawm lub ntiaj teb sab nraud thiab ua kom tsuas yog tus tswv ntawm daim ntawv cog lus tuaj yeem xa cov lus sab nraud rau nws.
thib ob, thaum peb xa cov lus siv tau rau TON, peb xav kom qhov no tshwm sim raws nraim ib zaug thiab thaum peb xa cov lus qub dua, daim ntawv cog lus ntse tsis lees paub.
Yog li yuav luag txhua daim ntawv cog lus daws ob qhov teeb meem no, txij li peb daim ntawv cog lus lees txais cov lus sab nraud, peb yuav tsum tau saib xyuas qhov ntawd thiab.
Peb yuav ua nws rov qab. Ua ntej, cia peb daws qhov teeb meem nrog kev rov ua dua; yog tias daim ntawv cog lus twb tau txais cov lus no thiab ua tiav nws, nws yuav tsis ua nws thib ob. Thiab tom qab ntawd peb yuav daws qhov teeb meem kom tsuas yog ib lub voj voog ntawm tib neeg tuaj yeem xa lus mus rau daim ntawv cog lus ntse.
Muaj ntau txoj hauv kev los daws qhov teeb meem nrog cov lus sib npaug. Nov yog peb yuav ua li cas. Nyob rau hauv daim ntawv cog lus ntse, peb pib lub txee ntawm cov lus tau txais nrog tus nqi pib 0. Hauv txhua cov lus rau daim ntawv cog lus ntse, peb yuav ntxiv tus nqi counter tam sim no. Yog hais tias tus nqi counter hauv cov lus tsis sib xws tus nqi hauv daim ntawv cog lus ntse, ces peb tsis ua nws; yog tias nws ua, peb ua nws thiab nce lub txee hauv daim ntawv cog lus ntse los ntawm 1.
Cia peb rov qab los lottery-test-suite.fif thiab ntxiv qhov kev sim thib ob rau nws. Yog tias peb xa tus lej tsis raug, tus lej yuav tsum pov qhov kev zam. Piv txwv li, cia cov ntaub ntawv cog lus cia 166, thiab peb yuav xa 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"
Cia peb pib.
~/TON/build/crypto/fift -s lottery-test-suite.fif
Thiab peb yuav pom tias qhov kev sim no raug tua nrog qhov yuam kev.
[ 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
Nyob rau theem no lottery-test-suite.fif yuav tsum zoo li txuas.
Tam sim no cia peb ntxiv lub txee logic rau daim ntawv cog lus ntse hauv 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);
}
Tam sim no, cia li khiav peb tsab ntawv los sau daim ntawv cog lus. Tab sis ntxiv rau qhov no, peb yuav tsum tau sau nws mus rau qhov tsis tu ncua code. Yog li peb yuav tsim cov ntaub ntawv tshiab lotter-compiled-for-test.fif, uas peb yuav suav nrog hauv cov ntaub ntawv lottery-test-suite.fif.
Zoo heev, tam sim no kom automate qhov kev sim pib, cia peb tsim cov ntaub ntawv test.sh, uas yuav xub ua build.sh, thiab tom qab ntawd khiav cov kev xeem.
Cia peb txuas ntxiv txhim kho daim ntawv cog lus ntse.
Tom ntej no yuav tsum muaj ib qho kev sim uas kuaj xyuas tias cov lus tau txais thiab lub txee hloov tshiab hauv lub khw thaum peb xa tus lej raug. Tab sis peb yuav ua qhov ntawd tom qab.
Tam sim no cia peb xav txog dab tsi cov ntaub ntawv qauv thiab cov ntaub ntawv dab tsi yuav tsum tau khaws cia hauv daim ntawv cog lus ntse.
Tom ntej no koj yuav tsum sau ob txoj haujlwm. Wb hu thawj pack_state(), uas yuav ntim cov ntaub ntawv rau kev txuag tom ntej hauv cov ntawv cog lus ntse. Wb hu tus thib ob unpack_state() yuav nyeem thiab xa cov ntaub ntawv rov qab los ntawm kev khaws cia.
_ 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;
}
Peb ntxiv ob txoj haujlwm no rau qhov pib ntawm daim ntawv cog lus ntse. Nws yuav ua haujlwm tawm zoo li ntawv nruab nrab tshwm sim.
Yuav kom txuag tau cov ntaub ntawv koj yuav tau hu rau lub built-in muaj nuj nqi set_data() thiab nws yuav sau cov ntaub ntawv los ntawm pack_state() hauv kev cog lus ntse cia.
Tam sim no peb muaj cov haujlwm yooj yim rau kev sau thiab nyeem cov ntaub ntawv, peb tuaj yeem txav mus.
Peb yuav tsum xyuas kom meej tias cov lus tuaj ntawm sab nraud yog kos npe los ntawm tus tswv ntawm daim ntawv cog lus (lossis lwm tus neeg siv uas tau nkag mus rau tus yuam sij ntiag tug).
Thaum peb tshaj tawm daim ntawv cog lus ntse, peb tuaj yeem pib nws nrog cov ntaub ntawv peb xav tau hauv kev khaws cia, uas yuav tau txais kev cawmdim rau kev siv yav tom ntej. Peb yuav sau tus yuam sij pej xeem nyob rau ntawd kom peb tuaj yeem tshawb xyuas tias cov lus xa tuaj tau kos npe nrog tus yuam sij ntiag tug sib raug.
Ua ntej txuas ntxiv, cia peb tsim tus yuam sij ntiag tug thiab sau rau test/keys/owner.pk. Ua li no, cia peb tso Fift hauv kev sib tham sib thiab ua plaub yam lus txib.
Wb tsim ib daim nplaub tshev keys hauv daim nplaub tshev test thiab sau tus yuam sij ntiag tug nyob ntawd.
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
Peb pom ib cov ntaub ntawv hauv daim nplaub tshev tam sim no owner.pk.
Peb tshem tawm cov yuam sij pej xeem ntawm pawg thiab thaum xav tau peb tuaj yeem tau txais los ntawm tus kheej.
Tam sim no peb yuav tsum sau daim ntawv pov thawj kos npe. Cia peb pib nrog qhov kev xeem. Ua ntej peb nyeem tus yuam sij ntiag tug los ntawm cov ntaub ntawv siv cov haujlwm file>B thiab sau nws mus rau qhov sib txawv owner_private_key, tom qab ntawd siv cov haujlwm priv>pub hloov tus yuam sij ntiag tug mus rau tus yuam sij pej xeem thiab sau cov txiaj ntsig hauv owner_public_key.
Zoo li no Cov ntaub ntawv nrog cov kev xeem yuav tsum zoo li no nyob rau theem no.
Cia peb khiav qhov kev sim thiab nws yuav ua tsis tau, yog li peb yuav hloov daim ntawv cog lus ntse kom nws thiaj li tau txais cov lus ntawm hom ntawv no thiab txheeb xyuas qhov kos npe.
Ua ntej, peb suav 512 cov khoom kos npe los ntawm cov lus thiab sau nws mus rau qhov sib txawv, tom qab ntawd peb suav 32 cov khoom ntawm cov khoom sib txawv.
Txij li thaum peb muaj lub luag haujlwm rau kev nyeem cov ntaub ntawv los ntawm cov ntawv cog lus ntse, peb yuav siv nws.
Tom ntej no yog xyuas lub txee xa nrog lub chaw cia khoom thiab xyuas qhov kos npe. Yog hais tias ib yam dab tsi tsis sib xws, ces peb pov ib qho kev zam nrog cov cai tsim nyog.
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));
Cia peb khiav qhov kev sim thiab xyuas kom nws ua tsis tiav. Tam sim no cia peb ntxiv logic hloov chaw nyob ntawm tus tswv rho npe.
Nyob rau hauv daim ntawv cog lus ntse peb txuas ntxiv parse message, nyeem hauv action. Cia peb nco ntsoov tias peb yuav muaj ob action: hloov chaw nyob thiab xa grams.
Tom qab ntawd peb nyeem qhov chaw nyob tshiab ntawm tus tswv daim ntawv cog lus thiab khaws cia rau hauv.
Peb khiav qhov kev xeem thiab pom tias qhov kev xeem thib peb ua tsis tiav. Nws poob vim qhov tseeb tias daim ntawv cog lus tam sim no ntxiv parses 7 khoom los ntawm cov lus, uas ploj lawm hauv qhov kev xeem. Ntxiv ib qho uas tsis muaj nyob rau hauv cov lus action. Cia peb khiav cov kev xeem thiab pom tias txhua yam dhau mus. no cog lus rau kev hloov. Zoo heev.
Tam sim no cia peb sau cov laj thawj rau xa cov naj npawb ntawm grams mus rau qhov chaw nyob yav dhau los.
Ua ntej, cia peb sau ib qho kev xeem. Peb yuav sau ob qhov kev xeem, ib qho thaum tsis muaj qhov sib npaug txaus, qhov thib ob thaum txhua yam yuav tsum ua tiav. Kev ntsuam xyuas tuaj yeem pom hauv qhov kev cog lus no.
Tam sim no cia peb ntxiv cov cai. Ua ntej, cia peb sau ob txoj kev pab. Thawj qhov tau txais txoj hauv kev yog kom paub qhov sib npaug tam sim no ntawm daim ntawv cog lus ntse.
int balance() inline_ref method_id {
return get_balance().pair_first();
}
Thiab qhov thib ob yog rau xa grams mus rau lwm daim ntawv cog lus ntse. Kuv tau luam cov qauv no los ntawm lwm daim ntawv cog lus ntse.
() 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
}
Cia peb ntxiv ob txoj hauv kev rau daim ntawv cog lus ntse thiab sau cov logic. Ua ntej, peb txheeb tus naj npawb ntawm grams ntawm cov lus. Tom ntej no peb xyuas qhov nyiaj tshuav, yog tias nws tsis txaus peb muab qhov kev zam. Yog tias txhua yam zoo, ces peb xa cov grams mus rau qhov chaw nyob ruaj khov thiab hloov kho lub txee.
Zoo li no zoo li daim ntawv cog lus ntse tam sim no. Cia peb khiav cov kev xeem thiab xyuas kom lawv dhau.
Los ntawm txoj kev, ib qho commission raug txiav tawm ntawm daim ntawv cog lus ntse txhua lub sijhawm rau cov lus ua tiav. Txhawm rau kom cov ntawv cog lus ntse kom ua tiav qhov kev thov, tom qab kev kuaj xyuas yooj yim koj yuav tsum hu accept_message().
Tam sim no cia peb txav mus rau cov lus sab hauv. Qhov tseeb, peb tsuas yog lees txais grams thiab xa rov qab ob npaug rau tus nqi rau tus neeg ua si yog tias nws yeej thiab ib feem peb rau tus tswv yog tias nws poob.
Ua ntej, cia peb sau ib qho kev sim yooj yim. Txhawm rau ua qhov no, peb xav tau qhov chaw nyob xeem ntawm daim ntawv cog lus ntse los ntawm qhov uas peb xav tias xa mus rau daim ntawv cog lus ntse.
Qhov chaw nyob daim ntawv cog lus ntse muaj ob tus lej, tus lej 32-ntsis lub luag haujlwm rau lub chaw ua haujlwm thiab 256-ntsis tus lej tsis zoo ntawm tus lej tshwj xeeb hauv cov haujlwm no. Piv txwv li, -1 thiab 12345, qhov no yog qhov chaw nyob peb yuav khaws cia rau hauv cov ntaub ntawv.
// ( 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
Cia saib seb qhov ua haujlwm ua haujlwm li cas, qhov no yuav ua rau kev nkag siab ntawm Fift ua haujlwm li cas. Tua tawm Fift hauv kev sib tham sib hom.
~/TON/build/crypto/fift -i
Ua ntej peb thawb -1, 12345 thiab lub npe ntawm cov ntaub ntawv yav tom ntej "sender.addr" mus rau pawg:
-1 12345 "sender.addr"
Cov kauj ruam tom ntej yog ua haujlwm -rot, uas hloov cov pawg nyob rau hauv ib txoj kev uas nyob rau sab saum toj ntawm pawg muaj ib tug tshwj xeeb ntse daim ntawv cog lus:
Thiab thaum kawg cov bytes tau sau rau hauv cov ntaub ntawv B>file. Tom qab no peb pawg yog khoob. Peb nres Fift. Ib cov ntaub ntawv tau tsim nyob rau hauv daim nplaub tshev tam sim no sender.addr. Cia peb txav cov ntaub ntawv mus rau qhov tsim folders test/addresses/.
Cia peb sau ib qho kev sim yooj yim uas yuav xa cov grams mus rau daim ntawv cog lus ntse. Nov yog qhov kev cog lus.
Tam sim no cia saib lub logic ntawm lub rho npe.
Thawj qhov peb ua yog xyuas cov lus bounced los tsis yog bounced, ces peb tsis quav ntsej nws. bounced txhais tau hais tias daim ntawv cog lus yuav rov qab grams yog tias muaj qee qhov yuam kev tshwm sim. Peb yuav tsis rov qab grams yog tias muaj qhov yuam kev tam sim ntawd tshwm sim.
Peb xyuas, yog tias qhov nyiaj tshuav tsawg dua li ib nrab ib gram, ces peb tsuas lees txais cov lus thiab tsis quav ntsej nws.
Tom ntej no, peb txheeb xyuas qhov chaw nyob ntawm daim ntawv cog lus ntse uas cov lus tuaj.
Peb nyeem cov ntaub ntawv los ntawm kev khaws cia thiab tom qab ntawd tshem tawm cov thawj koom ruam qub los ntawm keeb kwm yog tias muaj ntau tshaj nees nkaum ntawm lawv. Kom yooj yim, kuv tau sau peb txoj haujlwm ntxiv pack_order(), unpack_order(), remove_old_orders().
Tom ntej no, peb saib yog tias qhov nyiaj tshuav tsis txaus rau cov nyiaj them poob haujlwm, ces peb xav tias qhov no tsis yog thawj koom ruam, tab sis kev rov ua dua thiab txuag cov khoom ntxiv hauv orders.
Tom qab ntawd thaum kawg lub ntsiab lus ntawm daim ntawv cog lus ntse.
Ua ntej, yog tias tus neeg ua si poob, peb khaws nws hauv keeb kwm kev twv txiaj thiab yog tias tus nqi ntau dua 3 grams, peb xa 1/3 rau tus tswv ntawm daim ntawv cog lus ntse.
Yog tias tus neeg ua si yeej, ces peb xa ob tus nqi mus rau tus neeg ua si qhov chaw nyob thiab tom qab ntawd khaws cov ntaub ntawv hais txog thawj koom ruam hauv keeb kwm.
() 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));
}
Tam sim no txhua yam uas tseem tshuav yog qhov yooj yim, cia peb tsim cov txheej txheem kom peb tau txais cov ntaub ntawv hais txog lub xeev ntawm daim ntawv cog lus los ntawm lub ntiaj teb sab nraud (qhov tseeb, nyeem cov ntaub ntawv los ntawm lawv cov ntawv cog lus ntse).
Wb ntxiv tau txoj kev. Peb yuav sau hauv qab no hais txog yuav ua li cas kom tau txais cov ntaub ntawv hais txog daim ntawv cog lus ntse.
Kuv kuj tsis nco qab ntxiv cov lej uas yuav ua cov ntawv thov thawj zaug uas tshwm sim thaum tshaj tawm daim ntawv cog lus ntse. Sib cog lus. Thiab ntxiv kho kab mob nrog xa 1/3 ntawm tus nqi mus rau tus tswv tus account.
Cov kauj ruam tom ntej yog luam tawm daim ntawv cog lus ntse. Wb tsim ib daim nplaub tshev requests.
Kuv muab cov ntawv tshaj tawm raws li lub hauv paus simple-wallet-code.fc uas nrhiav tau nyob rau hauv lub official repository.
Tej yam tsim nyog them rau. Peb tsim cov ntawv cog lus ntse cia thiab cov lus tawm tswv yim. Tom qab no, qhov chaw nyob ntawm daim ntawv cog lus ntse yog tsim, uas yog, qhov chaw nyob yog paub txawm tias ua ntej tshaj tawm hauv TON. Tom ntej no, koj yuav tsum tau xa ob peb grams mus rau qhov chaw nyob no, thiab tsuas yog tom qab ntawd koj yuav tsum xa cov ntaub ntawv nrog daim ntawv cog lus ntse nws tus kheej, txij li lub network siv lub luag haujlwm rau khaws cov ntawv cog lus ntse thiab kev ua haujlwm hauv nws (cov neeg siv khoom uas khaws thiab ua haujlwm ntse. cog lus). Cov cai tuaj yeem pom ntawm no.
Tom ntej no peb ua tus tshaj tawm code thiab tau txais lottery-query.boc ntse daim ntawv cog lus thiab chaw nyob.
Thiab peb yuav pom tias tus account nrog qhov chaw nyob no yog khoob.
account state is empty
Peb xa mus rau qhov chaw nyob 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 Gram thiab tom qab ob peb vib nas this peb ua tib cov lus txib. xa grams kuv siv hnab nyiaj official, thiab koj tuaj yeem nug ib tus neeg los ntawm kev sib tham rau cov ntawv xeem, uas kuv yuav tham txog thaum kawg ntawm tsab xov xwm.
Peb yuav siv lite-neeg siv thiab tau txais cov txheej txheem los tso saib cov ntaub ntawv hais txog kev cog lus ntse ntawm lub xaib.
Tso cov ntaub ntawv cog lus ntse ntawm lub vev xaib
Kuv tau sau ib lub vev xaib yooj yim hauv Python los tso saib cov ntaub ntawv los ntawm daim ntawv cog lus ntse hauv txoj kev yooj yim. Ntawm no kuv yuav tsis nyob ntawm nws hauv kev nthuav dav thiab yuav tshaj tawm lub xaib hauv ib qho kev cog lus.
Kev thov rau TON yog tsim los ntawm Python nrog kev pab lite-client. Txhawm rau kom yooj yim, lub xaib tau ntim rau hauv Docker thiab luam tawm hauv Google Cloud. Txuas.
Sim
Tam sim no cia peb sim xa cov grams muaj rau ntxiv los ntawm hnab nyiaj. Peb yuav xa 40 grams. Thiab cia peb ua ob peb qhov kev twv txiaj kom pom tseeb. Peb pom tias lub vev xaib qhia txog keeb kwm ntawm kev twv txiaj, qhov feem pua ββββtau yeej tam sim no thiab lwm yam ntaub ntawv tseem ceeb.
Cov kab lus tau hloov mus ntev dua li qhov kuv xav tau, tej zaum nws yuav luv dua, lossis tej zaum tsuas yog rau tus neeg uas tsis paub dab tsi txog TON thiab xav sau thiab tshaj tawm cov ntawv cog lus ntse tsis yooj yim uas muaj peev xwm cuam tshuam nrog. nws. Tej zaum qee yam tuaj yeem piav qhia yooj yim dua.
Tej zaum qee qhov ntawm qhov kev siv yuav ua tau zoo dua thiab zoo nkauj, tab sis tom qab ntawd nws yuav siv sij hawm ntau dua los npaj cov lus. Nws kuj tseem ua tau tias kuv tau ua yuam kev nyob qhov twg los yog tsis to taub ib yam dab tsi, yog li yog tias koj ua ib yam dab tsi loj, koj yuav tsum tau cia siab rau cov ntaub ntawv raug cai lossis cov ntaub ntawv pov thawj nrog TON code.
Nws yuav tsum tau muab sau tseg tias txij li thaum TON nws tus kheej tseem nyob rau hauv lub active theem ntawm txoj kev loj hlob, kev hloov tej zaum yuav tshwm sim uas yuav ua txhaum ib yam ntawm cov kauj ruam nyob rau hauv no tsab xov xwm (uas tau tshwm sim thaum kuv sau ntawv, nws twb raug kho lawm), tab sis txoj kev dav dav yog. tsis zoo li hloov.
Kuv yuav tsis tham txog yav tom ntej ntawm TON. Tej zaum lub platform yuav dhau los ua ib yam dab tsi loj thiab peb yuav tsum siv sijhawm los kawm nws thiab sau ib qho niche nrog peb cov khoom tam sim no.
Tseem muaj Libra los ntawm Facebook, uas muaj peev xwm ntawm cov neeg siv loj dua TON. Kuv paub yuav luag tsis muaj dab tsi txog Libra, txiav txim los ntawm lub rooj sab laj muaj ntau yam kev ua ub no ntau dua li hauv zej zog TON. Txawm hais tias cov neeg tsim khoom thiab cov zej zog ntawm TON zoo li hauv av, uas kuj yog txias.