You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

24 lines
938 B

2 years ago
{-
Forward fee calculation supporting different workchains
-}
;; See crypto/block/transaction.cpp:L1499
int msg_fwd_fee(slice destination, cell message_body, cell init_state, int max_viewed_cells) inline {
(int wc, _) = parse_std_addr(destination);
throw_unless(107, (workchain == -1) | (workchain == 0) );
int config_index = 25 + workchain;
slice cfg = config_param(config_index).begin_parse().skip_bits(8);
int lump_price = cfg~load_uint(64);
int bit_price = cfg~load_uint(64);
int cell_price = cfg~load_uint(64);
(int cells, int bits, _) = compute_data_size(message_body, max_viewed_cells);
cells -= 1;
bits -= message_body.slice_bits();
(int is_cells, int is_bits, _) = compute_data_size(init_state, max_viewed_cells);
is_cells -= 1;
is_bits -= init_state.slice_bits();
return lump_price + (((bits + is_bits) * bit_price + (cells + is_cells) * cell_price + 65535) >> 16 );
}