mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-13 11:42:18 +00:00
56 lines
2.3 KiB
Text
Executable file
56 lines
2.3 KiB
Text
Executable file
#!/usr/bin/fift -s
|
|
"TonUtil.fif" include
|
|
"Asm.fif" include
|
|
|
|
{ ."usage: " $0 type ." <workchain-id> <dest-addr> [<filename-base>]" cr
|
|
."Creates a new pinger in specified workchain, with destination address <dest-addr>. " cr
|
|
."Resulting initialization query is saved into <filename-base>-query.boc ('new-pinger-query.boc' by default)" cr 1 halt
|
|
} : usage
|
|
|
|
$# dup 1 < swap 3 > or ' usage if
|
|
3 :$1..n
|
|
|
|
Basechain 256 1<<1- 3 15 */ 2constant dest-addr
|
|
|
|
Basechain constant wc // create a wallet in workchain 0 (basechain)
|
|
$1 parse-workchain-id =: wc // set workchain id from command line argument
|
|
$2 dup null? { drop } { false parse-load-address drop 2=: dest-addr } cond
|
|
$3 "new-pinger" replace-if-null constant file-base
|
|
|
|
."Creating new pinger in workchain " wc . cr
|
|
."Address to ping is " dest-addr 2dup .addr ." = " 6 .Addr cr
|
|
|
|
// Create new simple pinger
|
|
<{ SETCP0 DUP INC 1 RSHIFT# 32 THROWIF // fail unless recv_internal or recv_external
|
|
c4 PUSHCTR CTOS 32 LDU TUCK 8 LDI 256 LDU ENDS // body sel s seqno wc addr : destination address loaded
|
|
s4 PUSH IF:<{
|
|
s2 s5 XCHG2 // addr sel s wc seqno body
|
|
32 PLDU OVER EQUAL 33 THROWIFNOT // seqno mismatch?
|
|
ACCEPT // addr sel s wc seqno
|
|
INC NEWC 32 STU // addr sel s wc b
|
|
s1 s2 XCHG STSLICE // addr sel wc b'
|
|
ENDC c4 POPCTR // addr sel wc ; persistent data updated
|
|
ROT // sel wc addr
|
|
}>
|
|
// create new empty message with 0.1 Grams to that address
|
|
SWAP NEWC b{001000100} STSLICECONST 8 STI 256 STU
|
|
GR$10/9 INT STGRAMS // store 1.111..1 Grams
|
|
1 4 + 4 + 64 + 32 + 1+ 1+ INT STZEROES ENDC
|
|
// send raw message from Cell
|
|
ZERO SENDRAWMSG
|
|
}>c
|
|
// code
|
|
<b 0 32 u, dest-addr addr, b> // data
|
|
// no libraries
|
|
<b b{00110} s, rot ref, swap ref, b> // create StateInit
|
|
dup ."StateInit: " <s csr. cr
|
|
dup hashu wc swap 2dup 2constant pinger_addr
|
|
."new pinger address = " 2dup .addr cr
|
|
2dup file-base +".addr" save-address-verbose
|
|
."Non-bounceable address (for init): " 2dup 7 .Addr cr
|
|
."Bounceable address (for later access): " 6 .Addr cr
|
|
<b b{1000100} s, pinger_addr addr, b{000010} s, swap <s s, b{0} s, 0 32 u, "PING" $, b>
|
|
dup ."External message for initialization is " <s csr. cr
|
|
2 boc+>B dup Bx. cr
|
|
file-base +"-query.boc" tuck B>file
|
|
."(Saved pinger creating query to file " type .")" cr
|