#!/usr/bin/fift -s "TonUtil.fif" include "GetOpt.fif" include { show-options-help 1 halt } : usage true =: allow-bounce false =: force-bounce 3 =: send-mode // mode for SENDRAWMSG: +1 - sender pays fees, +2 - ignore errors 60 =: timeout // external message expires in 60 seconds begin-options " [-n|-b] [-t] []" +cr +tab +"Creates a request with up to 254 orders loaded from to high-load (sub)wallet created by new-highload-wallet.fif, with private key loaded from file .pk " +"and address from .addr, and saves it into .boc ('wallet-query.boc' by default)" +cr +" is a text file with lines `SEND `" disable-digit-options generic-help-setopt "n" "--no-bounce" { false =: allow-bounce } short-long-option "Clears bounce flag" option-help "b" "--force-bounce" { true =: force-bounce } short-long-option "Forces bounce flag" option-help "t" "--timeout" { parse-int =: timeout } short-long-option-arg "Sets expiration timeout in seconds (" timeout (.) $+ +" by default)" option-help "m" "--mode" { parse-int =: send-mode } short-long-option-arg "Sets transfer mode (0..255) for SENDRAWMSG (" send-mode (.) $+ +" by default)" option-help "h" "--help" { usage } short-long-option "Shows a help message" option-help parse-options $# dup 4 < swap 5 > or ' usage if 5 :$1..n $1 =: file-base $2 parse-int dup 32 fits ' usage ifnot =: subwallet-id // parse subwallet-id { subwallet-id (.) $+ } : +subwallet $3 parse-int =: seqno $4 =: order-file $5 "wallet-query" replace-if-null =: savefile file-base +subwallet +".addr" load-address 2dup 2constant wallet_addr ."Source wallet address = " 2dup .addr cr 6 .Addr cr file-base +".pk" load-keypair nip constant wallet_pk variable orders dictnew orders ! variable order# order# 0! // c -- { = abort"more than 254 orders" orders @ 16 udict!+ not abort"cannot add order to dictionary" orders ! order# 1+! } : add-order // b body -- b' { tuck } : create-int-msg // ng wc addr bnc -- { ."Transferring " 3 roll .GR ."to account " -rot 2dup 4 pick 7 + .Addr ." = " .addr ." bounce=" . cr } : .transfer // addr$ ng -- c { swap parse-smc-addr force-bounce or allow-bounce and // ng wc addr bnc 2over 2over .transfer create-int-msg } : create-simple-transfer // c m -- c' { } : create-order // addr$ ng -- { create-simple-transfer send-mode create-order add-order } : send { bl word bl word $>GR send } : SEND // parse order file order-file include // create external message dup ."signing message: " dup ."resulting external message: " B dup Bx. cr savefile +".boc" tuck B>file ."(Saved to file " type .")" cr