แ แถแ แแตแฅ แฅแแฅ แแ แฅแแดแต แฅแแฐแแแ แฅแ แฅแแฐแแณแฐแ
แญแ แฝแแ แตแ แแแตแ แแ?
แ แฝแแ แแตแฅ แ แแแแชแซแ (แจแแแต) แจแดแแแซแ แจแฅแแญแผแญแ แแตแตแญ แแตแฅ แฅแแดแต แฅแแฐแฐแณแฐแแฉ แฅแ แฝแแแต แฅแแณแแแฐแตแฉ แฅแ แแฐ แฅแญแณแต แแตแฅ แฅแแณแญแแฃ แฅแ แแแแฃแตแ แฅแแฐแแจแณแ แ แ แแต แฝแแ แแตแฅ แแแดแ แแแแแแฅ แแฐแแฉ แข แ แแต แฐแ.
แ แฅแตแตแซแญแต แฎแต แแปแ แตแแแแแแ แแแญ แแ แจแแฐแซ แแแญ แแแตแซแตแฃ แแฝแแ แแแฃแ แแฐแช แฅแแฅ แแ แปแแฉแ แฅแ แแซแจแแ แแจแแป แณแญแ แแ แจแตแแญแต แฎแแตแซแต แแจแแ แ แแฅแณ แจ แถแ แจแแซแณแญ แตแญ แฃแขแซ แปแแฉแข
แฝแแ แ แถแ แแตแฅ แจแแแแชแซแแ แแแแ แแ แแแฅแซแต แแแแแ แฐแแฝ แ แแ แญแแแ, แแแญ แแ แจแต แแแแญ แฅแแณแแฃแธแ แ แซแแแ.
แแฐแชแแ แฅแแฐ แแณแ แ แแ แแ แ แซแฃแขแ แจแแซแ แแฐ แตแแญแต แฎแแตแซแต แแฐแแฃ แจแฑ แแญ แแตแฐแแฅแญ แฅแ แแจแ แแแแ แ แฅแ แแแฐแ แตแจ-แแฝ แ แแปแ แฅแแณแแแข
แตแ แแตแตแญ แฐแณแตแ
แฃแแแ แฅแ
แแตแฃ แดแแแซแ แจแ แณแฒแต แแแแแฝ แแญ แจแฅแแญแผแญแ แแตแตแญแ แ แตแณแแแ Fift ะธ FunC. แจแ แแตแฑ แจแณแแฑ แแแแ แฎแแตแซแถแฝ แแตแฅ แแแแแแ แจแแปแ แแแจแฅ แ แตแแแ แแ แญ. แแฐแแต แแแ แแปแ แฃแญแแญแฅแแ แจแฐแแจ แแแญ แฅแ แซแฃ แแแ แฅแแญแ แ แแต แแแญ แฅแ แซ แฅแฉ แแตแแ แแ แญแข แ แฐแจแแชแ, แญแแฑ แซแแแแจแฅ แ แจแแแฎแฝ แแญ แแ.
แฅแแฅ แฎแแตแซแถแฝแ แจแแแแแต แแแต แ แแแ แจแแ แแแต แฐแแข แแแข
แฅแตแจ แแจแจแปแ แตแจแต แแแณแฐแ แฅแ
แต แแ แจแ แฅแ แจแแซ แจแแแแ แฝแแ แแแปแ แ แตแค แแ แญ, แแแญ แแ แ แแแแชแซแ แแญ แแฒแซแแ แ แแฐแณแซแแแ. แ แญ แฃแ แฅแ แแญแ แ แญแถ FunC แฅแ แ แ แ แแแญ แ แญแทแ. แแฐแจแต แ แตแญแ แแฐแตแฉแต .
แ แแซแ แแแฃ แญแ แ แฅแญแแ แแแต แขแซแแต แจแฐแแฐแ แจแฝแแแต แฆแณ แแแแฐแต แ แ แแ แฅแฌ แ แตแค แแ แญแข แ แแ แแญแแซแต แจ40 แฐแณแณแแแฝ แแตแฅ 60 แซแ แ แฐแธแแ แแแแ แฅแแ แจแฅแแฑ แแซแจแ แ แแแ แญแฉแแข แ แ แ แแแญ, แ แแ แแตแฅ แแแ แตแ แฐแต แจแแ แตแ, แแ แ แแต แแแญ แ แตแจแแแ. แแคแฑ แ แแแแฝแ แต แแ แแฎแแตแซแด แจแแฐแ แแแแ แ แแฐแซแแฐแ แแ แญ, แ แปแต แแตแฅ แซแ แฐแณแณแแแฝ แแ แฐแ แจแแ แแ แฐแ แซแ แ แจแ แณแธแ, แแแ แ แแแ แฉแ.
แแแแฅแญแถแผ แตแฉแจแต แ แแตแ แต แญแแตแแ แจแแแต แแแต แ แแ แณแแน แ แตแฐแซแจแต แ แแก แฅแ แ แแแ แ แณแแแต แแ แจแฅแแ แฅแแฅ แแ แ แ แแฃแ แ แแแ แ แฅแแฐแแ แแญแ แ แแแ แ แตแฐแซแจแต แ แซแตแแแแแ แฅแแ แ แแฐแฅ แ แแแ แ แแแฃแแแข แ แแน แแญ แ แแต แฅแซแ แฅแ แญแ แ แแแต แ แแแแแแข แแแ แฅแแณแ แแ แฅแแฐแแจแฐ แแตแฅแญ แฃแญแแแ, แจแแ แแแแญแถแฝแ แแปแ แฅแแฐแแซแตแแแ แแ แญแฉ.
แ แแจแณแต แแญ แฅแ แแ แ แณแแแ, แตแแแ แ แแต แฝแแ แแแปแ แฐแแฐแ. แแ แฅแ แแจแ แตแแแ, แญแ แฝแแ แแแแต แแแ แแ แแแ แแแแ แฅ แญแจแณแ.
แ แถแ แแตแฅ แจแตแแญแต แฎแแตแซแถแฝ แฝแแฐ-แแณแฅ
แแแแแแ แแแญ แจแแปแแ แ แแต, แญแ แแ แแแญ แจแจแตแแ แแแ แฅแแฐแแแญแก แแแ แซแตแแแแแณแ. แตแแแ , แ แแ แตแญแแฑ แแ แญแแแฝ แฅแแณแ แฅแแแญแแณแแ. แจแ แแ แ แตแญแญแ แฃ แขแซแแต แ แแต แแญแแต แจแฅแซ แแ แแแแ แแ แญแแแฝ แแแ แซแตแแแแแณแแข
แแแแ แฎแแตแซแต แ แแปแ แฅแ แ แแฅแซแต แแญ แฅแแฐแฉแซแแ TON Virtual Machine (TVM), Fift ะธ FunC, แตแแแ
แฝแแ แฅแแฐ แแฐแ แ แแฎแแซแ แฅแตแแต แแแแซ แแ. แแตแจแฉ แซแฑ แฅแแดแต แฅแแฐแแฐแซ แฅแแ
แแญ แ แแฐแฉแญแแข
แ แ แ แแแญ แฅแแดแต แฅแแฐแแฐแซ TVM แฅแ แแแ Fift แฅแฉ แฆแแดแแ แฐแแถแฝ แ แ. แ แแตแตแฉ แแญ แตแณแฐแ แฅแ แ แแ แซแแแ แแ แฅแจแแแฉ แฅแ แแ แแฐ แฅแท แแญแฉแข
แฅแแฅ แฎแแตแซแถแฝ แจแแปแแ แต แแ แแแ แแแข FunC. แ แ แแ แแ แแแ แฐแแต แจแแ, แตแแแ
แ แแต แแแญ แแแปแ แจแฆแแดแแแ แจแแจแ แแ แซแแแซ แฅแ แจแแแแ แ แฐแแฃแ แญ แแณแแแฝแ แแฅแแต แซแตแแแแแณแ, แ แฐแจแแชแ แซแแแต แแแต แจแตแแญแต แฎแแตแซแถแฝ แแณแแแฝแ แแแแจแต แญแฝแแ. แแตแตแฎแฝ. แ แ แแแน แแจแจแป แแญ แ แแแแฝ.
แ แตแแตแแ แฅแแฅ แแ แฝแแแ แฅแแ แ FunC, แจแแซ แ แแ แฎแฑแ แแฐ Fift assembler แฅแแฐแ แตแฃแแ.
แจแฐแ แแแจแ แตแแญแต แแ แแแณแฐแ แญแแซแแข แญแ
แแ แแแตแจแ แ แแต แฐแแฃแญ แแแ แซแตแแแแแณแ Fift, แญแ
แ แแแแ แจแฎแแตแซแต แฎแต แฅแ แ แแณแแต แแแฝ แแแชแซแแฝแ แฅแแฐ แแฅแ แต แจแแแตแต แฒแแ แแคแฑแ แ
แฅแซแ แซแแ แแญแ แญแแแ .boc (แแแตแ "แจแดแแฝ แฆแญแณ" แแแต แแ), แฅแ, แฅแแดแต แฅแแฐแแแฝแแ, แจแแ แแแ แฅแ แ แตแซแป, แญแ
แ แ แตแแญแต แฎแแตแซแต แฎแต แแญ แจแฐแแฐแจแฐ แแ. แฅแตแซแแ แซแแณแฐแ แจแตแแญแต แฎแแตแซแต แ แตแซแป แแซแ แแแญ แญแฝแแแข
แ TON แจแฐแแ แแ แแแแ แแ แแแฐแ .boc แแญแ แจแฅแญแแ แฐแแ แแ แ แแ แแ แแฐ blockchain แแแญ แ แแ แต (แจแแ
แ แณแฝ แฃแแ แฐแจแแช)แข แแแญ แแ แจแแฐแแ แ แแต แแซแ แแฐแฐแแ แจแ แ แตแซแป แแตแฐแแแ แซแตแแแแแณแ, แ แแ แแแซ แแแแแ แฎแแตแซแต แ แญแณแฐแแ. แจแ
แตแแฑ แ แแ แจแตแแญแต แฎแแตแซแฑ แแญ แจแแญ แแแแญแถแฝแ แ แแแญ (แแแณแ แจแฅแญแแ แฐแแ แแ แ แแ แแ) แแญแ แจแแตแฅ (แแแณแ แ แแต แฅแแฅ แฎแแตแซแต แ แถแ แแตแฅ แแ แแแฅแญแต แญแแซแ) แแญ แแตแฐแแฅแญ แแแ แญ แญแฝแแแข
แฎแฑ แฅแแดแต แฅแแฐแแณแฐแ แจแฐแจแณแ แ แแ แแแ แญแแแแข แแ แแปแ แฅแแฐแแแแแ แฅแ แแฎแแซแแฝแ แฅแแดแต แฅแแฐแแฐแซ แ แตแญแญแ แฅแแแแแแข แฅแ แ แแฝแแ แต แแ, แญแ
แ แแ แฃแแ แแแแ แฎแแตแซแถแฝ แแตแฅ แฅแแดแต แฅแแฐแแฐแแ แญ แฅแแแแแแ, แแญแ แจแ แฐแแฃแ แฉแ แฎแต แฅแแแแจแณแแ Fift ะธ FunC แ แฆแแดแแแ แแจแแป แแตแฅ, แแญแ แฆแแดแแ แฐแแถแฝแ แญแแแจแฑ.
แฅแ แแ แแแ แจแแตแตแญ แฐแณแณแแแฝ แฅแ แจแดแแแซแ แฐแซแฐแแฝ แ แฐแฐแ แฐแกแ แต แจแดแแแซแ แปแต แแญ แแแ แแแตแ แฅแแแ แแ แญ แฅแแ แ แแตแตแฉ แแ แต แแแ แฐแ แฅแแซแ แฐแฐแฅแตแ แ แตแ Fift แฅแ FunC แแแซแจแต แแแฉแข แ แ แแแน แแจแจแป แแญ แ แแแ.
แจแฒแแช แแฐ แแแแต แจแแแธแแแญแ แต แแ แแแข
แจ TON แแญ แแแตแซแต แ แซแฃแขแ แแแแแต
แ แแญแฆแคแต แแญ แฃแแ แฝแแ แแตแฅ แจแแแแนแตแ แแ แ แตแญแแซแแ แฅแ แ แแนแ แแแณ แฅแแฐแแ แ แจแแแซแแ Ubuntu 18.04 LTS แ แถแจแญ แแญแข
แแตแจแ แซแแฅแแต แจแแแแชแซแ แแแญ แแแจแต แฅแ แแซแ แแ lite-client แแฐ แถแ แฅแซแแแฝแ แแแญ แจแแฝแแ แต.
แ แฆแแดแแแ แตแ
แจ แแฝ แแญ แซแแต แแแชแซแแฝ แจแแซแ แแฐแฑแ แ แฃแ แ แแญแแญ แฅแ แ แแแฝ แญแแแปแแฃ แ แแณแแต แแญแแฎแฝแ แ แตแแญแฐแแแข แฅแแ
แแญ แแแชแซแแนแ แฅแแจแฐแแแแฃ แ แแแแต แแญ แจแแฐแ แฅแแแแถแฝแ แฅแแญแแแแข แฅแ แซแด แฅแซแแณแแฑแ แแฎแแญแต แ แ แแ
แ แจแฆแแดแแแ แแจแแป แ แแซแแฉแแข Ubuntu (แ แแญแฆแคแต แแญ แจแฐแ แแแฉแ แต 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 แ แแด แแแ แฅแแแแฝ แจแฐแซแ แแซแ แญแฝแแ lite-client, Fift, FunC.
แ แแแแชแซ แฃ แจแถแ แแจแแปแแ แจแฅแแแแน แแญ แฅแแแแแแแข แแแแปแธแต, แแแแ แแแญ แ แ แแ แแตแฅ แฅแแฐแญแแแ ~/TON.
cd ~/TON
git clone https://github.com/ton-blockchain/ton.git
cd ./ton
git submodule update --init --recursiveแแจแแปแ แ แฐแแฃแ แญแแ แซแจแแปแ Fift ะธ FunC.
แ แแ แแฎแแญแฑแ แแแฐแฅแฐแฅ แแแ แแ. แจแแ แซแแแซแ แฎแต แแฐ แ แแ แฐแแแทแแข ~/TON/ton. แ ~/TON แ แแ แญแแ แฉ build แฅแ แแฎแแญแฑแ แ แแตแก แญแฐแฅแตแก.
mkdir ~/TON/build
cd ~/TON/build
cmake ../tonแฅแแฅ แแ แตแแแแฝแ แฅแป แณแญแแ แซแตแแแแแ lite-clientแแ Fift ั FunC, แตแแแ
แแแแ แแแญ แฅแแ แแ
แ
. แแฃแ แแฐแต แ แญแฐแแ, แตแแแ
แฅแจแ แ แ
แ แแ.
cmake --build . --target lite-client
cmake --build . --target fift
cmake --build . --target funcแ แแแ แ แตแ แแตแแแ แแแแต แแจแ แจแซแแแ แจแแ
แญ แแญแ แซแแญแฑ lite-client แญแแแแ.
wget https://test.ton.org/ton-lite-client-test1.config.jsonแ TON แจแแแแชแซ แฅแซแแแฝแ แ แแ แจแฅ แแญ
แ แแ แฅแแฉแฅ lite-client.
cd ~/TON/build
./lite-client/lite-client -C ton-lite-client-test1.config.jsonแแแฃแณแ แจแฐแณแซ แจแแ แจแฐแแแจ แ แแ แจแฅแญแแ แฐแแ แแ แจแแตแแซแ แแญ แซแแ แแแแแต แแแแฅ แแตแณแแป แซแซแแข
[ 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)
...แตแแแแ แแแต แญแฝแแ help แฅแ แจแตแแน แตแแแแฝ แฅแแณแ แญแแแจแฑ.
helpแ แแ แฝแแ แแตแฅ แจแแแ แแแฃแธแแ แตแแแแฝ แฅแแแญแแญ.
list of available commands:
last Get last block and state info from server
sendfile <filename> Load a serialized message from <filename> and send it to server
getaccount <addr> [<block-id-ext>] Loads the most recent state of specified account; <addr> is in [<workchain>:]<hex-or-base64-addr> format
runmethod <addr> [<block-id-ext>] <method-id> <params>... Runs GET method <method-id> of account <addr> with specified parameterslast ะฟะพะปััะฐะตั ะฟะพัะปะตะดะฝะธะน ัะพะทะดะฐะฝะฝัะน ะฑะปะพะบ ั ัะตัะฒะตัะฐ.
sendfile <filename> ะพัะฟัะฐะฒะปัะตั ะฒ TON ัะฐะนะป ั ัะพะพะฑัะตะฝะธะตะผ, ะธะผะตะฝะฝะพ ั ะฟะพะผะพััั ััะพะน ะบะพะผะฐะฝะดั ะฟัะฑะปะธะบัะตััั ัะผะฐัั-ะบะพะฝััะฐะบั ะธ ะทะฐะฟััะพัั ะบ ะฝะตะผั.
getaccount <addr> ะทะฐะณััะถะฐะตั ัะตะบััะตะต ัะพััะพัะฝะธะต ัะผะฐัั-ะบะพะฝััะฐะบัะฐ ั ัะบะฐะทะฐะฝะฝัะผ ะฐะดัะตัะพะผ.
runmethod <addr> [<block-id-ext>] <method-id> <params> ะทะฐะฟััะบะฐะตั get-ะผะตัะพะดั ัะผะฐััะบะพะฝััะฐะบัะฐ. แ แแ แฎแแตแซแฑแ แซแฑ แแแปแ แแแ แแ.
แตแแ แซ
แแณแฅ
แจแแญ แฅแแฐแปแแฉแต แจแแแฝแแ แฅแแฅ แแ แแฐแช แแแข
แจแแ
แ แ แแญ แญแ
แฒแฌแต แแแฐแ
แ แแต แฐแแตแฃ แแ แแญแ แแญ แแ แ แ
แซแแฅแ
แแฐแช แณแญแแ แฐแ แแแ แแฐ แแ แ แตแซแป แจแแธแแแญแ แต แ
แฝแ แณแ แแแข N แแซแ, แฅแ แแฒแซแแ แแแถ แซแแแ 2 * N แแซแ แแญแ แแฃแต. 40% แ แซแฃแข แจแแธแแ แฅแตแแฝแแ แฅแแฐแญแแแแข แแญแแซ แ แ แแซแแฝ แจแแ, แแฅแญแฑแ แฅแแฐ แแแแต แฅแแแฅแซแแ.
แจแแ แ แ แแญ แแญแญแต แ แฅแแแฐแ แแ แฅแ แแน แ แแ แแแฉ แแณแจแต แ แตแแแ แแ, แญแ แ แฐแ แแแ แซแธแแ แแญแ แจแฐแธแแ แฅแแฐแแ แแฒแซแแ แฅแแฒแจแณแ. แตแแแ , แแญแญแถแฝแ แฅแ แแคแถแฝแ แ แแฅแณ แจ แถแ แจแแซแณแญ แตแ แจ แแฝ แแตแซแต แซแตแแแแแณแ.
แฅแแฅ แฎแแตแซแต แแปแ
แแแพแต แฒแฃแ แจFunCแ แฎแต แ แแแปแแแค แฐแฐแชแ แ Visual Studio Code แแแ แแตแฅ แแแ แฅแ แแญแ แญแฝแแแค แ แตแแแต แจแแ แแแญ แแจแ แจแแแ แแแแแ แ แญแ แฅแแฒแแ แ แตแญแแแแแข แฅแแฒแแแฃ แ แแต แฐแ แจแแ แแฐแ แจFift แแญ แ แฅแฎ แแแตแซแต แฐแฐแช แ แญแทแแฃ แฅแฑแ แแซแ แฅแ แ แชแคแตแฒ แแตแฅ แแแแต แญแฝแแแข
แแฒแซแแ แแซแจแแ แแคแถแฝแ แจแแแแฝแแ แต แแจแแป แฅแแแ แญ.
แ แญแแณแฝแแ แแแ แแแฃ แตแแญแต แฎแแตแซแต แฅแแ แแแ แฅแ แฅแตแชแแแ แตแจแต แ แ แแญ แแตแฅ แฅแแแตแปแแแข แจแแซ แ แแ แฅแป แ แถแ แแตแฅ แฅแแฐแแแแข
แฅแแฅ แฎแแตแซแฑ แแฐแจแตแฃแธแ แจแแฝแ แแแต แแซแ แแดแแฝ แ แแต. แ แแฐแ, recv_external() แญแ
แฐแแฃแญ แจแแแธแแ แจแฎแแตแซแฑ แฅแซแ แจแแญแ แแแ แฒแแฃ แแแตแ แจแถแ แณแญแแ แฅแ แซแณแฝแ แแแฅแญแต แ แแฅแฐแ แ แแฐ-แฐแแ แ แ แฉแ แตแแแญ แแแข แแแฐแ, recv_internal() แญแ
แ แถแ แ แซแฑ แแตแฅ แแแแแ แแ แจแฅแแ แญแแแจแณแแข แ แแแฑแ แแแณแแฝ แแแชแซแแฝแ แแฐ แฐแแฃแฉ แแแ แญแฝแแ.
แจแณแฐแ แ แแฐแซ แแแ แแณแ แฅแแแแญ, แแแญ แแ แ แแตแก แแแ แฐแแฃแซแ แญแแต แจแแ.
() recv_internal(slice in_msg) impure {
;; TODO: implementation
}
() recv_external(slice in_msg) impure {
;; TODO: implementation
}แฅแแ
แแ แฅแแฐแแ แแฅแซแซแต แซแตแแแแแ slice. แ TON Blockchain แแตแฅ แจแฐแจแแน แแแ แแจแแแฝ แตแฅแตแฅ แแธแแข TVM cell แแญแ แ แแแ cellแ แฅแแฐแแ
แแญแแต แแแต แแตแฅ แฅแตแจ 1023 แขแต แณแณ แฅแ แฅแตแจ 4 แ แแแแฝแ แแฐ แแแฝ แ
แแถแฝ แแจแแธแต แญแฝแแแข
TVM cell slice แแญแ slice แญแ
แจแแฃแฉ แ แซแ แแแข cell แฅแฑแ แแแฐแแฐแ แฅแ
แ แแญ แญแแแ, แ แแ แแญ แแแฝ แญแแแ. แแฅแ แแแ แแแญ แแตแฐแแแ แแปแแฝแ แแ slice แฅแ แฅแแฐ แจแแแแญแฑ แ แญแแต แแแกแ แแฐ แแตแฅ แซแตแฌแฑ recv_external() แแญแ recv_internal().
impure - แฐแแฃแฉ แแแแ แจแฎแแตแซแต แแแฅแ แฅแแฐแแแญแญ แจแแซแแแญแต แแแ แแแข
แจแฎแแตแซแฑแ แฎแต แแฐ แแตแฅ แฅแแตแแแฅ lottery-code.fc แฅแ แแ แแแญ.
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc แจแฃแแฒแซแแฝ แตแญแแ แตแแแแ แ แแ แแ แแณแญ แญแฝแแ
~/TON/build/crypto/func -helpแจ Fift assembler แฎแต แ แแแ
แฐแแ lottery-compiled.fif:
// lottery-compiled.fif
"Asm.fif" include
// automatically generated from `/Users/rajymbekkapisev/TON/ton/crypto/smartcont/stdlib.fc` `./lottery-code.fc`
PROGRAM{
DECLPROC recv_internal
DECLPROC recv_external
recv_internal PROC:<{
// in_msg
DROP //
}>
recv_external PROC:<{
// in_msg
DROP //
}>
}END>cแ แ แซแฃแขแ แแแแญ แญแฝแแ, แแแ แ แ แจแฃแขแ แฅแแแแแแ.
แจแแแแชแซแ แแตแแญ แฅแแฐแแแแ แแฅ แญแ แ Asm.fifแฃ แญแ
แ Fift for the Fift assembler แจแฐแปแ แฎแต แแแข
แตแแญแต แฎแแตแซแฑแ แ แ แแญ แแตแฅ แแฎแฅ แฅแ แแแจแญ แตแแแแแแ แแญแ แฅแแแฅแซแแ lottery-test-suite.fif แฅแ แ แแตแก แซแแแ แจแแจแจแปแแ แแตแแญ แ แแฐแซแต แจแฐแฐแ แฐแ แแ แฎแต แฅแแซ แญแ
แฑ, แญแ
แ แแแแแแ แจแฎแแตแซแต แฎแต แ แแแแต แญแฝแแ codeแจแแซ แแฐ แจแญแนแแ แแฝแ แแแตแฐแแแแก-
"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
แฅแตแซแแ แแแ แญแแตแแแฃ แ แแ แฒแชแคแแ แแแญแแต แจแแแ แแแ แตแ แฎแต แแฐ แฐแแณแณแญ แแญแ แฅแแจแแญแข
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 แฅแ แ แแต แฅแแแแแฃแแ, แแแตแ, แจแฒแชแคแ (แแญแ แจแ แแณแจ แแจแฅ แแแณ) แจแแแแญแ แตแ แแแฅ. แ แแตแตแฉ แแ
แต แฅแแณแ แจแแแขแแน แ แแฑ แฅแแดแต แแแ แญ แฅแแฐแแปแ แ แณแญแทแแข c7 แฅแ แฅแ แแแ แฅแฉ. แ แแ
แฝแแ แแตแฅ แแแแฅ แแซแตแแแแ แญแฝแแ rand_seed แจแแแแฐ แแฅแญ แแแแจแต แ แฅแฑ แแญ แจแฐแแฐแจแฐ แตแแแ แฅแ แซแแฐแแจแจ, แฐแแณแณแญ แแฅแญ แ แจแแแ แญแแแณแ.
recv_internal ะธ recv_external แแแแฝ แจ0 แฅแ -1 แฅแดแถแฝ แแญ แ แตแแญแต แฎแแตแซแต แแตแฅ แซแแตแ แฐแแแ
แฐแแฃแซแต แแแฅแซแต แแแแแต แ แแฃแธแแข
แ แแ แ แฃแถ แตแแญแต แฎแแตแซแณแฝแ แจแแแแชแซแแ แแฐแ แแแแ แญ แฐแแแ
แฐแแแข แแแ
แแแตแจแแฃ แ แแ แแแแ แแฐแแแฝ แแฐ แฐแแณแณแญ แแญแ แฅแแจแแซแแแข lottery-test-suite.fif.
แฐแแแแญ แฅแแแ แญ storage แฅแ แ แแตแก แฃแถ แปแ cellแญแ
แฅแแฅ แจแฎแแตแซแต แแจแแป แญแแแแข
message แจแแญ แแฐ แฅแแฅ แแแแแต แจแแแตแฐแแแแ แแแฅแญแต แญแ
แแแข แแ แแแ แฃแถ แฅแแฐแญแแแแแข
variable storage
<b b> storage !
variable message
<b b> message ! แแแแฝแ แฅแ แฐแแแแญแแฝแ แซแแแแ แ แแ, แตแแแแ แ แแ แแ TVM แฅแแแแซแแ runvmctx แฅแ แจแฐแแ แฉแตแ แแแชแซแแฝ แแฐ แแฅแ แต แซแตแฐแแแ.
message @
recv_external
code
storage @
c7
runvmctx แแจแจแป แแญ แฅแแณแซแแ แแซแจแแ แฎแต แ Fift.
แ แแ แจแฐแแแแ แฎแต แแตแฌแต แฅแแฝแแแ.
export FIFTPATH=~/TON/ton/crypto/fift/lib // ะฒัะฟะพะปะฝัะตะผ ะพะดะธะฝ ัะฐะท ะดะปั ัะดะพะฑััะฒะฐ
~/TON/build/crypto/fift -s lottery-test-suite.fif แแฎแแซแ แซแ แตแ แฐแถแฝ แแฎแฅ แ แแ แต แฅแ แ แแคแฑ แแตแฅ แจแแตแแธแแซ แแแแฅ แแตแณแแปแแ แฅแแซแแ-
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แ แฃแ แฅแฉแฃ แจแตแแญแต แฎแแตแซแฑแ แจแแแแชแซ แจแตแซ แตแชแต แฝแแแแข
แ แแ แฐแแฃแซแแแตแ แแจแ แ แแฅแ. แ แแแแชแซ แจแแชแ แแแ แจแแแก แแแแญแถแฝแ แฅแแตแฐแแแต recv_external()
แแแขแ แซแฑ แแ แแแ แแ แจแแฝแแแ แจแแแแญแต แ แญแธแต แญแแญแฃแ.
แแ แ แฅแแแแ แแ
- แ แแแแชแซ แแแฝแแ แจแแชแ แ แแ แแแ แ แ แฅแ แจแแ แฃแแคแต แฅแป แจแแญ แแแฅแญแต แฅแแฒแแญแแต แแแตแจแ แฅแแแแแแแข
- แ แแแฐแ แฐแจแ แตแญแญแแ แแแฅแญแต แแฐ แถแ แตแแแญ แญแ แ แตแญแญแ แ แแต แแ แฅแแฒแแ แฅแแแแแแ แฅแ แฐแแณแณแญ แแแฅแญแต แตแแแญ แตแแญแต แฎแแตแซแฑ แแตแ แซแฐแญแแแแข
แตแแแ แฅแซแแณแแฑ แแ แแแต แญแปแแ แฅแแแ แ แแแต แฝแแฎแฝ แญแแณแแฃ แแแฝแ แจแแญ แแแแญแถแฝแ แตแแแแ แ แฅแแ แแแ แแแ แ แต แญแแฃแแข
แ แฐแแซแแ แ แฐแ แฐแจแฐแ แฅแแฐแญแแแแ. แ แแแแชแซ แฝแแฉแ แ แแตแแ แฅแแแณแแค แแ แ แตแแตแ แฅแแฐแแ แ แญแแต แแแฅแญแต แฐแญแถแต แจแแ แแแแฐแ แแ แ แซแตแแฝแแแแข แฅแ แจแแซ แจแฐแแฐแ แจแฐแแฝ แญแ แฅ แฅแป แแฐ แฅแแฅ แฎแแตแซแฑ แแแฅแญแต แฅแแฒแแญ แฝแแฉแ แฅแแแณแแแแข
แ แฐแฃแ แแแแญแถแฝ แฝแแฉแ แแแแณแต แจแฐแแซแฉ แแแแถแฝ แ แแข แฅแแดแต แฅแแฐแแแฐแญแแ แฅแแแข แ แแแแแ แฎแแตแซแต แแตแฅ แจแฐแแ แแตแ แแแฅแญแถแฝ แแฃแช แจแแแแชแซแ แฅแดแต 0 แแญ แฅแแตแแแซแแ แข แ แฅแซแแณแแฑ แแแฅแญแต แแฐ แฅแแฅ แฎแแตแซแต แฃ แจแ แแแ แแฃแช แฅแดแต แฅแแจแแซแแ แข แ แแแฅแญแฑ แแตแฅ แซแแ แจแแฃแช แฅแดแต แ แตแแญแต แฎแแตแซแต แแตแฅ แซแแ แแ แแญ แจแแญแแณแฐแ แจแแ แฅแ แ แแตแฌแฐแแ แฃ แจแฐแซ แฅแ แฅแแฐแซแ แฅแ แ แตแแญแต แฎแแตแซแต แแตแฅ แซแแแ แแฃแช แ 1 แฅแแจแแซแแ แข
แแฐแแ
แฅแแแแต lottery-test-suite.fif แฅแ แ แฅแฑ แแญ แแแฐแ แแฐแ แจแแญ. แจแฐแณแณแฐ แแฅแญ แจแแญแ, แฎแฑ แจแฐแแจ แแแญ แแฃแ แ แแ แต. แแแณแ แจแฎแแตแซแฑ แณแณ 166 แซแตแแแฅ แฅแ 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"แฅแแแแญแข
~/TON/build/crypto/fift -s lottery-test-suite.fif แฅแ แแฐแแ แ แตแ แฐแต แแแธแแ แฅแแซแแ.
[ 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แ แแ
แฐแจแ lottery-test-suite.fif แแแฐแ แ แแ แตแข .
แ แแ แจแแฃแช แ แแญแแฎ แแฐ แฅแแฅ แฎแแตแซแต แฅแแจแแญ 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 แจแแแแจแ แแแฅแญแต แแแข
แฅแ แจแแแฐแญแแ แจแแแแชแซแ แแแญ แแแฅแญแฑ แแแฅ แฅแแฐแซแ แแจแแแฅ แแ, แซแแแ, แ แแแ แฅแแแฃแแ.
แ แแแ แ แแแฅแญแฑแ แฅแแแจแแซแแ. in_msg~load_uint(32) แแฅแฉแ 165, 32-แขแต แญแญแแ unsigned int แจแฐแแแแ แแแฅแญแต.
แ แแแ แ แจแตแแญแต แฎแแตแซแต แแจแแป 32 แขแต แฅแแญแแแแข แจแฐแซแแ แแฅแญ แซแแแ แแฅแญ แแญ แฅแแฐแแแแต แฅแแจแแแฃแแแค แซแแแ แแ แจแฐแแจ แแแญ แฅแแฅแแแแข แ แฅแ แแแณแฃ แซแแฐแแแ แตแแแแแแฃ แจแฐแแจ แแแญ แแฃแ แ แแ แตแข
แ แแ แฅแแ แแ แ แข
~/TON/build/crypto/func -APSR -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fc แจแฐแแแแ แฎแต แแฐแแ
แญแ
แฑ lottery-test-suite.fifแจแแจแจแปแแ แแตแแญ แแแฐแซแต แ แแแแแแต.
แแฐแแ แฅแแณแแ แฅแแจแแแฃแแแข
~/TON/build/crypto/fift -s lottery-test-suite.fifแ แแ แซแแ แแคแต แแญ แฐแแณแ แแญแ แแแตแ แแจแต แญแฝแแแข
แจแฐแฐแ แฐแ แแ แจแตแแญแต แฎแแตแซแต แฎแต แซแแแแจแฅ แแฐ แแญแ แจแแจแซแแฝ แแญ แแ
แณแต แจแแญแแฝ แแแแ แแฅ แญแ แ แฃแตแแแ
แฎแฑแ แแฐ แแ แจแแ
แแแ แตแญแชแแต แฅแแ
แแแ แฅแ แ แแแ แจแฐแแแ แจแแ แฎแต แจแแฐแแแปแฝแ แแญ แฅแแแแแแแแข "include".
แ แแฎแแญแต แ แแ แแตแฅ แแญแ แญแแ แฉ build.sh แจแแจแฐแแ แญแแต แแญ.
#!/bin/bash
~/TON/build/crypto/func -SPA -R -o lottery-compiled.fif ~/TON/ton/crypto/smartcont/stdlib.fc ./lottery-code.fcแฐแแแ แฅแแฒแแ แฅแแตแญแแแข
chmod +x ./build.shแ แแ แฎแแตแซแฑแ แแแ แแแญ แจแฅแแ แตแญแชแแต แฅแป แซแแฑแข แแแญ แแ แจแแ
แ แฐแจแแช, แแฐ แแแแต แแปแ แซแตแแแแแ code. แตแแแ
แ แฒแต แแญแ แฅแแแฅแซแแ lotter-compiled-for-test.fif, แ แแญแ แแตแฅ แจแแแซแตแฐแ lottery-test-suite.fif.
แจแธแญแฐแด แฎแตแ แแฐ sh แฅแแจแแญแฃ แญแ
แ แ แแแ แจแฐแ แแแจแแ แแญแ แแฐ แแตแฅ แซแฃแแแแข lotter-compiled-for-test.fif แฅแ แ แแตแก แจแแจแจแปแแ แแตแแญ แญแแแก.
# 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แ แแแฃ แแแแฐแฝแฃ แจแฐแแแแ แตแญแชแแต แฅแแซแแต แฅแ แแญแ แญแแ แซแแข lottery-compiled-for-test.fif, แ แฅแ แแตแฅ แจแแแซแตแฐแ lottery-test-suite.fif
ะ lottery-test-suite.fif แจแฎแแตแซแฑแ แฎแต แฐแญแ แฅแ แแตแแฉแ แจแแญ "lottery-compiled-for-test.fif" include.
แแแแ แแแจแแแฅ แแฐแแแฝแ แฅแแซแแณแแแข
~/TON/build/crypto/fift -s lottery-test-suite.fifแ แฃแ แฅแฉแฃ แ แแ แจแแฐแแแฝแ แ
แแญ แ แซแต แฐแญ แแแตแซแตแฃ แแญแ แฅแแแ แญ test.shแ แแแแชแซ แจแแซแตแแฝแ build.sh, แฅแ แจแแซ แแฐแแแฝแ แซแแฑ.
touch test.sh
chmod +x test.shแแฐ แแตแฅ แฅแแฝแแแ
./build.sh
echo "nCompilation completedn"
export FIFTPATH=~/TON/ton/crypto/fift/lib
~/TON/build/crypto/fift -s lottery-test-suite.fifแฅแแตแซแ test.sh แฅแ แแฐแแแน แแตแซแณแธแแ แแแจแแแฅ แซแแฑแตแข
chmod +x ./test.sh
./test.shแฎแแตแซแฑ แแ แแแฉแ แฅแ แแฐแแแน แแแธแแธแแ แฅแแจแแแฃแแแข
แ แฃแ แฅแฉแฃ แ แแ แ แ
แแญ แแญ test.sh แแฐแแแน แญแ แแแแ แฅแ แแฒแซแแ แญแฐแซแแข แแแฉ แฅแแ
แ แแข .
แฅแบแฃ แจแแแ แแฝแ แ แแตแฃ แแแแธแต แ แแต แฐแจแแช แแแญ แฅแแตแญแแข
แแ
แฐแญ แฅแแแ แญ build แจแฐแแณแแ แแ แฅแ แญแแแ แแฐ แแ แจแฐแปแแแ แจแแแจแแฝแ แต lottery-compiled.fif, lottery-compiled-for-test.fif. แฅแแฒแแ แแ
แฐแญ แฅแแแ แญ test แจแแจแซ แแญแ แจแต แแ แจแแแแ แ? lottery-test-suite.fif แฅแ แแแฝ แฐแแ แแญแแฝแข .
แแแแ แฎแแตแซแฑแ แแแแแฑแ แฅแแแฅแแข
แ แแแ แ แแแฅแญแฑ แฅแแฐแฐแจแฐ แฅแ แตแญแญแแแแ แแฅแญ แตแแแญ แแฃแชแ แ แแฐแฅแฉ แแตแฅ แแแแแ แจแแซแจแแแฅ แแจแซ แแฐแจแ แ แแ แตแข แแ แ แแ แฅแแฐแญแแแ.
แ แแ แแ แแญแแต แจแแแฅ แแแ แญ แฅแ แแ แแแฅ แ แแแแ แฎแแตแซแต แแตแฅ แแแแฅ แฅแแณแแ แต แฅแแตแฅ.
แซแจแแปแแ แแแแ แแแญ แฅแแแปแแแข
`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` ะฟะตัะตะผะตะฝะฝะฐั ัะธะฟะฐ ัะปะพะฒะฐัั, ั
ัะฐะฝะธั ะฟะพัะปะตะดะฝะธะต ะดะฒะฐะดัะฐัั ััะฐะฒะพะบ. แ แแแ แ แแแต แฐแแฃแซแตแ แแปแ แซแตแแแแแณแ. แจแแแแชแซแแ แฅแแฅแซ pack_state(), แญแ
แ แแแฃแญ แแ แฃ แ แแแแ แจแฎแแตแซแต แแจแแป แแตแฅ แแแกแ แซแ แแแแ. แแแฐแแแ แฅแแฅแซ unpack_state() แ แแฅแฆ แแแฅ แจแแจแแป แญแแแณแแข
_ 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;
}แฅแแแ แ แแแต แฐแแฃแซแต แแฐ แฅแแฅ แฎแแตแซแฑ แแแแชแซ แฅแแจแแซแแ. แญแณแซแแณแ แแซแจแแ แแคแต.
แแแฅแ แแแตแแแฅ แ แฅแฎ แจแฐแฐแซแแ แฐแแฃแญ แแฐแแ แซแตแแแแแณแ set_data() แฅแ แจ แแแฅ แญแฝแแ pack_state() แ แตแแญแต แฎแแตแซแต แแจแแป แแตแฅแข
cell packed_state = pack_state(arg_1, .., arg_n);
set_data(packed_state);แ แแ แแจแแ แแแปแ แฅแ แแแแ แฅ แแน แฐแแฃแซแต แตแแแ, แแแ แ แฅแแฝแแแ.
แจแแญ แจแแแฃแ แแแฅแญแต แ แแ แฃแแคแต (แแญแ แจแแ แแแแ แจแแ แแ แแ แฐแ แแ) แจแฐแแจแ แแแแ แแจแแแฅ แ แแฅแแข
แแแแ แฎแแตแซแต แตแแฐแ แ แแจแแป แแตแฅ แ แแแแแแ แแแฅ แแตแแแญ แฅแแฝแแแแฃ แญแ แ แแแฐแแต แฅแ แ แแญ แญแแแแข แแชแ แแแฅแญแต แ แฐแแแ แจแแ แแแ แจแฐแแจแ แแแแ แแแจแแแฅ แจแ แฐแฃแฃแญ แแแแ แฅแแซ แฅแแแณแแแข
แจแแแ แแ แ แแต แจแแ แแแ แฅแแแ แญ แฅแ แฅแแแ test/keys/owner.pk. แญแ
แแ แแแตแจแ Fiftแ แ แญแแฐแแแ แแแณ แฅแแตแแแญ แฅแ แ แซแต แตแแแแฝแ แฅแแตแแฝแ.
`newkeypair` ะณะตะฝะตัะฐัะธั ะฟัะฑะปะธัะฝะพะณะพ ะธ ะฟัะธะฒะฐัะฝะพะณะพ ะบะปััะฐ ะธ ะทะฐะฟะธัั ะธั
ะฒ ััะตะบ.
`drop` ัะดะฐะปะตะฝะธั ะธะท ััะตะบะฐ ะฒะตัั
ะฝะตะณะพ ัะปะตะผะตะฝัะฐ (ะฒ ะดะฐะฝะฝะพะผ ัะปััะฐะต ะฟัะฑะปะธัะฝัะน ะบะปัั)
`.s` ะฟัะพััะพ ะฟะพัะผะพััะตัั ััะพ ะปะตะถะธั ะฒ ััะตะบะต ะฒ ะดะฐะฝะฝัะน ะผะพะผะตะฝั
`"owner.pk" B>file` ะทะฐะฟะธัั ะฟัะธะฒะฐัะฝะพะณะพ ะบะปััะฐ ะฒ ัะฐะนะป ั ะธะผะตะฝะตะผ `owner.pk`.
`bye` ะทะฐะฒะตััะฐะตั ัะฐะฑะพัั ั Fift. แแ
แฐแญ แฅแแแ แญ keys แ แ แแแ แแตแฅ test แฅแ แฅแแซ แจแแ แแแแ แญแแ.
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แ แแ แฃแแ แ แแ แแตแฅ แ แแต แแญแ แฅแแซแแ owner.pk.
แจแแ แแแแ แจแแแ แฅแแตแแแฐแแแ แฅแ แฒแซแตแแแ แจแแ แแแแแ แฅแแฝแแแแข
แ แแ แจแแญแ แแจแแแซ แแแ แ แแฅแแข แ แแฐแแ แฅแแแแญแข แ แแแแชแซ แฐแแฃแฉแ แ แแ แแ แจแแญแ แแตแฅ แซแแแ แจแแ แแแ แฅแแแฃแแ file>B แฅแ แแฐ แฐแแแแญ แญแแ owner_private_key, แจแแซแ แฐแแฃแฉแ แ แแ แแ priv>pub แจแแ แแแแ แแฐ แญแแ แแแ แญแแแก แฅแ แแคแฑแ แญแแ 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 !แแแฑแแ แแแแฝ แฅแแแแแแ.
แจแตแแญแต แฎแแตแซแต แแจแแปแแ แ แแแแฐ แแแฅ แฅแแตแแแจแแแ แ แฐแแฃแฉ แแตแฅ แ แฐแแณแณแญ แ
แฐแ แฐแจแฐแ pack_state()แฅแ แ แฐแแแแญ แแตแฅ แญแแ 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 !แ แแแ แ, แจแฐแแจแ แแแฅแญแต แฅแแฝแแแ, แแญแแแ แฅแ แจแแฃแชแแ แแ แฅแป แญแญแแ.
แ แแแแชแซ แแตแฐแแแ แจแแแแแแแ แแแฅ แฅแแแฅแซแแ แจแแซแ แ แแ แแแ แฅแแแญแแแ แฅแ แ แแจแจแปแ แจแฐแแจแ แแแฅแญแต แฅแแแแซแแ.
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 ! แ แแคแฑแ, แแฐ แตแแญแต แฎแแตแซแต แจแแแแจแ แแแฅแญแต แ แฐแแแแญ แแตแฅ แฐแแแแงแ message_to_send, แตแ แฐแแฃแซแต hashu, ed25519_sign_uint แแแ แฅ แตแฝแแแ
.
แฅแ แแฐแแแ แแแซแแต แฅแแฐแแ แฅแแ แซแแแ.
message_to_send @
recv_external
code
storage @
c7
runvmctxแจแแจแซแแฝ แแญ แซแแ แแญแ แ แแ แฐแจแ แญแ แ แแแฐแ แ แแ แตแข
แแฐแแแ แฅแแซแแตแ แ แญแณแซแ แตแแแ แตแแญแต แฎแแตแซแฑแ แ แแแจแญ แจแแ แแญแแต แแแฅแญแต แฐแแฅแ แแญแแแ แฅแแฒแซแจแแแฅ แฅแแแแฃแแแข
แ แแแแชแซ, แจแแแแญแฑ แแตแฅ 512 แขแต แแญแแแฝแ แฅแแแฅแซแแ แฅแ แแฐ แฐแแแแญ แฅแแฝแแแ, แจแแซแ แจแแฃแชแ แฐแแแแญ 32 แขแต แฅแแแฅแซแแ.
แจแตแแญแต แฎแแตแซแต แแจแแป แแจแ แจแแแ แฅ แฐแแฃแญ แตแแแ แฅแแ แแแแแข
แ แแแ แ แจแฐแแแแแ แแฃแช แจแแจแแปแ แแญ แ แแฃแซแต แฅแ แแญแแแ แแจแแแฅ แแ. แจแแ แแแญ แจแแญแแแต แจแแ แฃ แจแแซ แจแฐแแขแ แฎแต แแญ แแฉ แแแณแ แฅแแฅแแแแข
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));แ แแฃแฅแแต แซแแ แแญแ แแแต .
แแฐแแแนแ แฅแแซแแต แฅแ แแแฐแแ แแฐแ แฅแแณแแฐแณแซ แฅแแญแข แ แแแต แแญแแซแถแฝ แ แแแแญแฑ แแตแฅ แ แ แขแต แจแแ แฅแ แ แแจแแปแ แแตแฅ แ แ แขแต แจแแ, แตแแแ แฒแฐแแฐแ แฎแฑ แญแ แแปแ. แ แแแแญ แแแฅแญแต แแญ แแญแ แแจแ แฅแ แแจแแปแแ แจแแจแจแปแ แแจแซ แแ แณแต แ แแฅแแข
แ แแแฐแแ แแฐแ แจแแแฅแญแต แแญแ แฅแแจแแซแแ แฅแ แแแแ แจแฎแแตแซแต แแจแแปแแ แฅแแแแฃแแแข แจแแฐแแแฝ แแญ แซแแ แแญแ แ แ แแ แแ แญแแตแแแข
แ แแ แฐแ แจแแ แแแ แจแฐแแจแ แแแฅแญแต แจแแแแญแ แตแ แ แซแฐแ แแฐแ แฅแแแแข แแ แจแแ แแแ แฅแแแ แญ แฅแ แแฐ แแญแ แฅแแตแแแ แ not-owner.pk. แ แแ
แจแแ แแแ แแแฅแญแฑแ แฅแแแญแแแแข แแฐแแแนแ แฅแแซแแต แฅแ แแแ แแฐแแแฝ แแแแธแแ แฅแแจแแแฅแข แ แแ
แแ
แต.
แ แแ แ แแจแจแป แแฐ แตแแญแต แฎแแตแซแต แ แแญแแฎ แแฐแแ แญ แแแต แฅแแฝแแแแข
ะ recv_external() แแแต แ แญแแต แแแแญแถแฝแ แฅแแแ แแแแข
แฎแแตแซแณแฝแ แจแฐแซแแพแนแ แชแณแซ แตแแแซแจแแฝ แญแ แแแแฅ แแแฐแชแ แแฃแช แแฐแแแ แ แแ แตแข แฎแแตแซแฑ แฒแแ แญ แจแแฐแช แแฃแชแ แจแชแต แฆแญแณ แ แตแซแป แ แแจแแป แแตแฅ แญแแแแฃแ.
แฅแแฐแแซ แจแแแฃ แจแฐแธแแแแฝแ แแซแ แจแแแแญแ แตแ แ แตแซแป แจแแแจแญ แฝแแณ แซแตแแแแแแข แจแแฐแชแ แแฐ แฃแแคแฑ แ แตแซแป แแซแ แแแญ แแปแ แ แแฅแแข
แจแแแแชแซแ แฅแแแแญแข แ แแแแชแซ แแแฅแญแฑแ แจแแฉ แ แแ แตแแญแต แฎแแตแซแฑ แ แฒแฑแ แ แตแซแป แ แแจแแปแ แแตแฅ แฅแแณแตแแแ แ แจแแซแจแแแฅ แแฐแ แฅแแแแข แฅแฃแญแแ แ แแแฅแญแฑ แแตแฅ แจแแฃแชแ แฅแ แจแ แฒแฑ แ แตแซแป แ แฐแจแแช แฅแ แฅแแฐแแแตแฐแแแ แแฅ แญแ แ action แฃแ 7-แขแต แขแแฒแแญ แ แแณแ แซแแแ แแฅแญ, แ แฅแฑ แแญ แ แแแตแจแต, แ แตแแญแต แฎแแตแซแฑ แแตแฅ แแแฅแญแฑแ แฅแแดแต แฅแแฐแแฐแซ แฅแแแญแฃแแ.
<b 0 32 u, 1 @ 7 u, new_owner_wc @ 32 i, new_owner_account_id @ 256 u, b> message_to_sign !แ แแฐแแ แแตแฅ แฅแแดแต แจแตแแญแต แฎแแตแซแต แแจแแป แจแดแชแซแแญแแต แฅแแฐแฐแฐแจแ แแจแต แญแฝแแแข storage แ แ แแตแฐแแ. แฐแแแแฎแฝแ แแฅแแต แ Fift แฐแแต แแตแฅ แฐแแแฟแ.
แจแฐแจแแจแ แแฅ แแญ.
แแฐแแแ แฅแแซแแตแ แ แแแณแซแฑแ แฅแแจแแแฅแข แ แแ แจแแฐแชแแ แฃแแคแต แ แตแซแป แแแแจแญ แ แแญแแฎ แฅแแจแแญแข
แ แแแแแ แแ แแตแฅ แแฐแแฐแ แฅแแแฅแแแ messageแฃ แ แแฅแฅ action. แแแต แฅแแฐแแแจแ แฅแแตแณแแตแ
actionแ แตแซแป แแญแญ แฅแ แแซแ แแญแข
แจแแซแ แจแฎแแตแซแฑแ แฃแแคแต แ แฒแฑแ แ แตแซแป แฅแแแฃแแ แฅแ แ แแจแแป แแตแฅ แฅแแตแแแ แแแ.
แแฐแแแนแ แฅแแซแแณแแ แฅแ แถแตแฐแแ แแฐแ แ แแแณแซแฑแ แฅแแซแแ. แฎแแตแซแฑ แ แแ แ แแจแซแ แแตแฅ แจแแฐแแตแ แจแแแฅแญแฑ 7 แขแต แ แแแจแฑ แญแแตแแแข แแฐ แแแฅแญแฑ แจแแญแแญ แซแญแ action. แแฐแแแนแ แฅแแซแแต แฅแ แแแ แแแญ แฅแแณแแ แฅแแญแข แแแแฆแฝ แแฐแ แต. แ แฃแ แฅแฉ.
แ แแ แจแฐแแแธแแ แจแแซแแฝ แแฅแญ แแฐแ แฒแ แแฐแฐแแแ แ แ แตแซแป แแแแญ แ แแญแแฎแแ แฅแแแ.
แแแแชแซ แแฐแ แฅแแแแข แแแต แแจแซแแฝแ แฅแแฝแแแ, แ แแต แ แ แแแ แ แแญแแญแ แต แแ, แแแฐแแ แแแ แแแญ แ แฐแณแซ แแแณ แแแ แฒแแญแ แต. แแฐแแแฝ แแณแฉ แญแฝแแ .
แ แแ แฎแฑแ แฅแแจแแญแข แ แแแแชแซ, แแแต แจแณแต แแดแแฝแ แฅแแปแ. แจแแแแชแซแ แจแแแ แแด แจแตแแญแต แฎแแตแซแต แจแ แแแ แแแ แแแ แแแข
int balance() inline_ref method_id {
return get_balance().pair_first();
}แฅแ แแแฐแแ แแซแ แแฐ แแ แแแแ แแ แแแแญ แแ. แญแ แแ แแด แจแแ แแแแ แฎแแตแซแต แแ แ แแ แแแฅแซแแ.
() 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
}แฅแแแ แ แแแต แแดแแฝ แแฐ แฅแแฅ แฎแแตแซแต แฅแแจแแญ แฅแ แ แแญแแฎแแ แฅแแแแข แ แแแแชแซ แจแแแฅแญแฑ แแตแฅ แจแแซแแฝแ แฅแแต แฅแแแฃแแ. แ แแแ แ แแแแ แฅแแแตแปแแ, แ แ แซแแแ แจแฐแแจ แแแญ แฅแแฅแแแ. แแแ แแแญ แฐแ แ แจแแ, แจแแซแ แแซแแนแ แแฐแฐแแแ แ แ แตแซแป แฅแแแซแแ แฅแ แแฃแชแแ แฅแแแแแแแ.
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));แ แ แแ แแ แฅแแฅ แฎแแตแซแต แญแแตแแแข แแฐแแแนแ แฅแแซแแต แฅแ แแแแธแแ แฅแแจแแแฅแข
แ แแแซแฝแ แแญ แแฐแแแฃแ แจ แแแฅแญแต แแ แแ แจแตแแญแต แฎแแตแซแต แฎแแฝแ แญแแแณแแข แฅแแฅ แจแฎแแตแซแต แแแฅแญแถแฝ แฅแซแแแ แฅแแฒแแฝแ แฃ แจแแ แจแณแ แผแฎแฝ แ แแ แแฐแแ แซแตแแแแแณแ accept_message().
แ แแ แแฐ แแตแฃแ แแแแญแถแฝ แฅแแแตแข แฅแแฐแแ แแซแแฝแ แฅแป แฐแแฅแแ แฐแซแแน แขแซแธแแ แฅแ แจแฐแธแแ แถแตแฐแแแ แแฃแแคแฑ แฅแแแซแแแข
แ แแแแชแซ แ แแต แแแ แแฐแ แฅแแแแข แญแ แแ แแแตแจแ แแซแ แแฐ แตแแญแต แฎแแตแซแต แจแแแแญแ แต แจแตแแญแต แฎแแตแซแต แจแแจแซ แ แตแซแป แฅแแแแแแแข
แจแตแแญแต แฎแแตแซแฑ แ แตแซแป แแแต แแฅแฎแฝแ แจแซแ แฃแ 32-แขแต แขแแฒแแญ แแตแซ แฐแแฐแแต แแแแแต แซแแ แฅแ 256-แขแต แ แแณแ แซแแแ แจแขแแฒแแญ แแฉ แแแซ แแฅแญ แ แแ แจแตแซ แฐแแฐแแต แแตแฅแข แแแณแ, -1 แฅแ 12345, แญแ แ แแญแ แแตแฅ แจแแแตแแแ แ แ แตแซแป แแ.
แ แตแซแปแแ แจแแตแแแฅ แฐแแฃแฉแ แแแฅแซแแแข .
// ( 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แฐแแฃแฉ แฅแแดแต แฅแแฐแแฐแซ แฅแแแแจแต, แญแ Fift แฅแแดแต แฅแแฐแแฐแซ แแจแณแตแ แญแฐแฃแ. แ แญแแฐแแแ แแแณ Fiftแ แ แตแแแญแข
~/TON/build/crypto/fift -i แ แแแแชแซ -1, 12345 แฅแ แจแแฐแแฑแ แแญแ แตแ "sender.addr" แแฐ แแแ แฅแแแแแ:
-1 12345 "sender.addr" แแฃแฉ แฐแจแ แฐแแฃแฉแ แแจแแแ แแ -rot, แญแ
แ แแแ แ แแต แแญ แแฉ แจแแ แแแแ แจแฎแแตแซแต แแฅแญ แฅแแฒแแจแ แ แแซแตแฝแ แแแแต แญแแญแซแ:
"sender.addr" -1 12345256 u>B แฃแ 256-แขแต แ แแณแ แซแแแ แขแแฒแแญ แแฐ แฃแญแต แญแแแฃแแข
"sender.addr" -1 BYTES:0000000000000000000000000000000000000000000000000000000000003039swap แจแแแ แแแฑแ แแ แ แซแแต แญแแแแฃแแข
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 -132 i>B แฃแ 32-แขแต แขแแฒแแญ แแฐ แฃแญแต แญแแญแซแแข
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039 BYTES:FFFFFFFFB+ แแแต แฐแจแณแณแญ แฃแญแต แซแแแแแข
"sender.addr" BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFFแฅแแฐแแ swap.
BYTES:0000000000000000000000000000000000000000000000000000000000003039FFFFFFFF "sender.addr" แฅแ แ แแจแจแปแ แฃแญแต แ แแญแ แแญ แฐแฝแแ B>file. แจแแ
แ แแ แจแฅแ แแแ แฃแถ แแแข แฅแแแแแ Fift. แ แแ แฃแแ แ แแ แแตแฅ แแญแ แฐแแฅแฏแแข sender.addr. แแญแแ แแฐ แฐแแ แจ แแ
แฐแญ แฅแแแแณแ
แฐแ test/addresses/.
แแซแ แแฐ แฅแแฅ แแ แจแแแญ แแแ แแฐแ แฅแแแแข .
แ แแ แจแแฐแชแแ แ แแญแแฎ แฅแแแแจแตแข
แฅแ แจแแแฐแญแแ แจแแแแชแซแ แแแญ แแแฅแญแฑแ แแจแแแฅ แแ bounced แแญแ แจแแ แ แญแฐแแ bounced, แจแแซแ แฝแ แฅแแแแ. bounced แ แแณแแต แตแ
แฐแต แจแฐแแ แจ แฎแแตแซแฑ แแซแ แญแแแณแ แแแต แแ. แตแ
แฐแต แ แตแแแต แขแจแฐแต แแซแ แ แแแแตแแข
แฅแแแตแปแแ, แแแ แจแแแฝ แแซแ แซแแฐ แจแแ, แ แแแ แแแฅแญแฑแ แฅแแแ แแแ แฅแ แฝแ แฅแแแแ.
แ แแแ แ แแแฅแญแฑ แจแแฃแ แตแ แจแตแแญแต แฎแแตแซแต แ แตแซแป แฅแแฐแแฐแแแแแข
แแจแแแ แจแแ แซแแแซแ แแตแฅ แฅแแแฃแแ แฅแ แจแแซ แจแแซ แ แแญ แซแ แจแแฉ แแแซแถแฝแ แจแณแชแญ แฅแแฐแญแแแแข แแแแปแธแต, แถแตแต แฐแจแแช แฐแแฃแซแตแ แปแแฉ pack_order(), unpack_order(), remove_old_orders().
แ แแแ แ แฃ แแแ แแญแแซแ แ แ แซแแแ แฅแแซแแ แฃ แจแแซ แญแ
แแญแญแต แฅแแณแแแ แฅแแตแฃแแ แฃ แแ แแแแต แฅแ แแแแตแ แ แแตแฅ แฅแแตแแแ แแแแข orders.
แจแแซ แ แแจแจแป แจแตแแญแต แฎแแตแซแฑ แญแแตแข
แ แแแแชแซ แฐแซแแน แจแฐแธแแ แ แแญแญแต แณแชแญ แแตแฅ แฅแแตแแแ แแแ แฅแ แแ แ แจ 3 แแซแ แ แแญ แจแแ 1/3 แแฅแแฅ แฎแแตแซแฑ แฃแแคแต แฅแแแซแแแข
แฐแซแแน แซแธแแ, แจแแซแ แ แฅแฅแ แแ แ แแฐ แฐแซแแน แ แตแซแป แฅแแแซแแ แฅแ แจแแซแ แ แณแชแญ แแตแฅ แตแ แแญแญแต แแจแ แฅแแตแแแ แแแ.
() 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));
}แซ แฅแป แแแข .
แ แแ แจแแจแ แแ แแแ แแ, แตแ แฎแแตแซแฑ แแแณ แจแแญแ แแแ แแจแ แแแแแต แฅแแตแแฝแ แจแแแแต แแดแแฝแ แฅแแแ แญ (แ แฅแแแฑ, แแจแแแ แจแแแแ แจแฎแแตแซแต แแจแแปแธแ แซแแฅแก).
. แตแ แฅแแฅ แฎแแตแซแต แแจแ แฅแแดแต แฅแแฐแแแ แ แจแแ แ แณแฝ แฅแแฝแแแ.
แฅแแฒแแ แฅแแฅ แแ แฒแซแตแ แจแแจแฐแฐแแ แจแแแแชแซแแ แฅแซแ แจแแซแตแฌแต แฎแต แแจแ แจแณแแข . แฅแ แฐแจแแช แจแแแแก 1/3 แฑแ แแฐ แฃแแคแต แแแซ แ แแแญ แตแ แฐแตแข
แแฃแฉ แฐแจแ แแแแ แฎแแตแซแฑแ แแฐแ แแ. แแ
แฐแญ แฅแแแ แญ requests.
แจแแตแแต แฎแฑแ แฅแแฐ แแ แจแต แ แตแญแ แแฐแตแฉแต แจแต แ แฆแแดแแแ แแจแแป แแตแฅ.
แตแฉแจแต แแฐแ แ แจแแแฃ แแแญ. แแแแ แจแฎแแตแซแต แแจแแป แฅแ แจแแคแต แแแฅแญแต แฅแแแแซแแแข แจแแ แ แแ แจแตแแญแต แฎแแตแซแฑ แ แตแซแป แญแแ แซแ, แแแตแ แ แตแซแปแ แ แถแ แแตแฅ แจแแณแฐแ แ แแต แฅแแณแ แญแณแแแ. แ แแแ แ แฃ แฅแ แแซแ แแฐแแ แ แตแซแป แแแญ แซแตแแแแแณแ แฃ แฅแ แจแแซ แ แแ แฅแป แจแตแแญแต แฎแแตแซแฑ แแญ แแญแ แแแญ แซแตแแแแแณแ แฃ แแญแแซแฑแ แ แแณแจ แแจแก แฅแแฅ แฎแแตแซแฑแ แฅแ แ แแตแก แซแแตแ แตแซแแฝ แแแจแแธแต แฎแแฝแ แตแแแแตแต (แตแแญแต แจแแซแจแแน แฅแ แจแแแฝแ แ แจแแแฎแฝ) แแแฝ)แข .
แ แแแ แ แจแ
แตแแต แฎแฑแ แฅแแตแแฝแแแ แฅแ แฅแแแแแ lottery-query.boc แฅแแฅ แจแฎแแตแซแต แแญแ แฅแ แ แตแซแปแข
~/TON/build/crypto/fift -s requests/new-lottery.fif 0แจแฐแแ แฉแตแ แแญแแฝ แแตแแแฅแแ แ แญแญแฑแก- lottery-query.boc, lottery.addr, lottery.pk.
แจแแแฝ แแแฎแฝ แ แฐแจแแช, แ แ แแแแ แแแแฅ แแตแณแแปแแฝ แแตแฅ แจแตแแญแต แฎแแตแซแฑแ แ แตแซแป แฅแแแแจแณแแ.
new wallet address = 0:044910149dbeaf8eadbb2b28722e7d6a2dc6e264ec2f1d9bebd6fb209079bc2a
(Saving address to file lottery.addr)
Non-bounceable address (for init): 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd
Bounceable address (for later access): kQAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8KpFYแแแแแแต แซแ แแฃ แแถแ แฅแซแ แฅแแ แญแฅ
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksydแฅแ แ แแ แ แตแซแป แซแแ แแแซ แฃแถ แแแแ แฅแแซแแแข
account state is emptyแแฐ แ แตแซแปแ แฅแแแซแแแข 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd 2 แแซแ แฅแ แจแฅแแต แฐแจแแถแฝ แ แแ แฐแแณแณแญ แตแแแ แฅแแแฝแแแ. แฅแ แฅแ แแแแ แแซแ แแแแญ , แฅแ แ แแต แฐแ แจแปแต แแแจแซ แแซแ แแ แจแ
แญแฝแแ, แญแ
แ แ แ แแแน แแจแจแป แแญ แตแแแแซแ.
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksydแซแแณแแ แญแแตแแ (state:account_uninit) แฐแแณแณแฉ แ แตแซแป แซแแ แฅแแฅ แแ แฅแ แจ 1 แแแแซแ แแแแข
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แ แแ แฅแแฅ แฎแแตแซแฑแ แฅแแฐแแข แแต-แฐแแ แแ แฅแแแแญ แฅแ แฅแแแฝแแข
> 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 แแ แฅแแฐแณแฐแ แฅแแแตแฝแข
> last
> getaccount 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksydแจแแแฝ แแแฎแฝ แ แฐแจแแช แฅแแแแแ.
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แซแแ แฅแแซแแ account_active.
แจแแแฆแฝ แแญ แฐแแณแ แแ แชแณแ .
แ แแ แจแตแแญแต แฎแแตแซแฑ แแญ แแแแแแต แฅแซแแแฝแ แฅแแแ แญแข
แญแ แแฅ แ แตแญแญแ แฃ แ แตแซแปแแ แแแแจแญ แจแแแแชแซแแ แฅแแฐแแแแ แฅแแฐ แแแแฐแ แฅแซ แฃ แฅแ แแแฐแแแ แแซแ แแฐ แจแฃแแคแฑ แ แตแซแป แแแแญ แฅแแฐแซแแแข แฅแแฐ แฅแแแฑ แจแแ, แแซแ แแแแญ แ แแฐแ แแตแฅ แฅแแฐแแ แจแ แฐแแณแณแญ แแแญ แแตแจแ แ แแฅแ.
แญแ
แฅแ แแฐ แฅแแฅ แฎแแตแซแต แจแแแแญ แแแฅแญแต แแ, แจแต msg_seqno 165, action แแแแญ 2 แฅแ 9.5 แแซแ.
<b 165 32 u, 2 7 u, 9500000000 Gram, b>แแแฅแญแฑแ แ แแ แแแแ แแแจแแแ แ แญแญแฑ lottery.pkแฅแแฅ แฎแแตแซแฑแ แฒแแฅแฉ แแฐแ แฅแ แจแฐแแ แจ. .
แจแแแ แแดแแฝแ แ แแ แแ แจแแแแ แฎแแตแซแต แแจแ แแแ แ
แ แแ แฅแแดแต แตแแญแต แฎแแตแซแต แแแแต แฅแแฐแแปแ แฅแแญแข
แ แตแแแญ lite-client แฅแ แฅแ แจแปแแแธแ แแดแแฝแ แซแแฑแข
$ ./lite-client/lite-client -C ton-lite-client-test1.config.json
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd balance
arguments: [ 104128 ]
result: [ 64633878952 ]
...ะ result แฐแแฃแฉ แจแแแแฐแแ แฅแดแต แญแแ balance() แจแฅแแฅ แฎแแตแซแณแฝแ.
แแฅแ แฐแจแแช แแดแแฝ แฐแแณแณแญ แแแญ แฅแแฐแญแแแ.
> runmethod 0QAESRAUnb6vjq27KyhyLn1qLcbiZOwvHZvr1vsgkHm8Ksyd get_seqno
...
arguments: [ 77871 ]
result: [ 1 ] แจแฅแญแตแแ แแญแญแต แณแชแญ แฅแแ แญแ แข
> 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]) ] แแแ แฐแแ แแ แฅแแ แแแแ แฅแ แ แฃแขแซแ แแญ แตแแแ แแแแ แฎแแตแซแต แแจแแ แแแณแจแต แแดแแฝแ แฅแแแแแแข
แ แตแญ แฃแขแซแ แแญ แจแตแแญแต แฎแแตแซแต แแแฅแ แ แแณแจแต แแญ
แแจแแแ แจแตแแญแต แฎแแตแซแฑ แแน แ แแ แแแแต แแแณแจแต แ แแญแแ แแตแฅ แแแ แตแญ แฃแขแซ แปแแฉ แข แฅแแ แแญ แ แแญแแญ แ แแแญแ แฅแ แฃแขแซแแ แ แณแตแแแแ .
แจ TON แฅแซแแแฝ แจแแแญแกแต แจ Python แ แฅแแ lite-client. แแแพแต แฒแฃแ แฃแขแซแ แ แถแจแญ แณแฝแ แ Google แญแแแต แแญ แณแตแแแข .
แฅแแแญแญ
แ แแ แแแแแต แฅแแซ แแซแ แแแแญ แฅแแแญแญ . 40 แแซแ แฅแแแซแแ. แฅแ แแแแฝแแต แแแต แแญแญแถแฝแ แฅแแตแญแแข แฃแขแซแ แจแแญแญแต แณแชแญแแฃ แ แแ แซแแแ แจแ แธแแแแต แแถแ แฅแ แแแฝ แ แแ แแจแแแฝแ แฅแแฐแแซแณแญ แ แญแฐแแแข
แจแแแแชแซแแ แ แธแแแ, แแแฐแแแ แฐแธแแแแ.
แจแแ แ แแ
แฝแแ แจแ แ แ แฉแต แ แแญ แจแแ แซแ แแ แฐแแแทแแฃ แแแแฃแต แ แ แญ แซแ แแแ แญแฝแแ แแญแ แแแแฃแต แตแ แถแ แแแ แแแซแแ แฅแ แแแ แซแแแ แตแแญแต แฎแแตแซแต แแปแ แฅแ แแฐแ แแแแแ แฐแ แจแแแฃแฃแต แฝแแณ แแแจแ แญแฝแแแข แแแข แแแแฃแต แ แแณแแต แแแฎแฝ แ แแแ แแฅแซแฉ แญแฝแ แญแแแแข
แแแแฃแต แ แแณแแต แจแ แฐแแฃแ แฉ แแฝแณแแฝ แญแ แแฅ แ แฐแแแ แ แฅแ แ แแซแแญ แแแณ แแจแแแ แญแฝแ แแ แญ, แแแญ แแ แฝแแแ แแแแแแต แจแ แแ แแ แญแแตแต แแ แญ. แฅแแฒแแ แจแแ แฆแณ แตแ แฐแต แฐแญแผ แแญแ แจแแ แแแญ แฅแแณแแแฃแ แแแ แญแฝแแ, แตแแแ แ แแต แจแฃแต แแแญ แฅแซแฐแจแ แจแแ, แ TON แฎแต แฆแแดแแ แฐแแต แแญแ แฆแแดแแ แแจแแป แแญ แแฐแแแ แ แแฅแแต.
แถแ แซแฑ แแ แ แแแต แจแแตแแต แฐแจแ แแญ แตแแแ แ แแ แฝแแ แแตแฅ แซแแตแ แแแธแแแ แฅแญแแแแฝ แจแแฅแฑ แแแฆแฝ แแจแฐแฑ แฅแแฐแแฝแ แแฅ แแฃแ แญแแฃแ (แ แแฝแแ แต แแ แจแฐแจแฐแฐแ แฃ แแตแแแ แฐแตแฐแซแญแแ) แฃ แแ แ แ แแแญ แ แแซแจแฅ แแแแฅ แจแแญแฝแ.
แตแ แถแ แจแแฐแแต แแแณ แ แแแแญแ. แแแแฃแต แแตแจแฉ แตแแ แแแญ แญแแแ แฅแ แฅแฑแ แแแฅแแต แแ แฅแแ แแแ แฅแ แ แแ แ แแญแถแปแฝแ แแตแฅ แ แแต แฆแณ แฅแแแแแแข
แจ โนTONโบ แจแ แแ แจแฐแ แแแแฝ แฐแแแซแฝ แซแแ แแฅแซ แจแแตแกแญแ แ แแข แตแ แแฅแซ แแแ แจแแแแ แแแญ แจแแแฃ แ แแจแ แตแแแแแ แจแถแ แแ แ แจแฐแฅ แจแ แแ แฅแ แฅแแ แตแแด แ แแข แแแ แฅแแณแ แจแถแ แแแขแแฝ แฅแ แแ แ แจแฐแฆแฝ แฅแแฐ แจแแฌแต แ แณแฝ แซแ แขแแแ แฅแฉ แแแข
แแฃแแปแแฝ
- แ แถแ แแญ แฆแแดแแ แฐแแถแฝแก-
- แฆแแดแแ แจแถแ แแจแแปแก-
- แแฐแแซแฉ แแตแจแฎแฝ แญแแ แจแชแต แฆแญแณแก-
- แจแตแแญแต แฎแแตแซแต แแจแแป แจแแ แ แแแฝแก-
- แแฐ แแแแ แจแฎแแตแซแต แตแญ แฃแขแซ แ แแแแก
- แจVisual Studio Code แFunC แจแแซแแแซ แแจแแปแก
- แ แดแแแซแ แตแ แถแ แญแแซแฉแฃ แญแ แ แ แแแป แฐแจแ แแแแ แจแจแณแแข แแถแ แจแแ แแแญ แจแแ แแ แฅแแซ แ แ แฅแฃแ แตแ แฐแต แ แญแแแ แฅแฌ แ แตแฃแแแข แฅแแซแ แแแจแซ แแซแ แแ แจแ แญแฝแแ.
- แ แแ แแจแ แซแแแแ แต แตแ แถแ แแ แแญแญแตแก-
- แจแแตแตแฉ แจแแแแชแซ แฐแจแแก-
- แจแแตแตแฉ แแแฐแ แฐแจแแก-
แแแญ: hab.com
