
contracts.stablecoin.contracts.helpers.librarian.func Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of smartcontract Show documentation
Show all versions of smartcontract Show documentation
Build and manipulate TON smart contracts in easy way.
;; Simple library keeper
#include "../stdlib.fc";
const int DEFAULT_DURATION = 3600 * 24 * 365 * 100; ;; 100 years, can top-up in any time
const int ONE_TON = 1000000000;
cell empty() asm " PUSHREF";
;; https://docs.ton.org/tvm.pdf, page 138, SETLIBCODE
() set_lib_code(cell code, int mode) impure asm "SETLIBCODE";
() recv_internal(int msg_value, cell in_msg_full, slice in_msg_body) impure {
slice cs = in_msg_full.begin_parse();
int flags = cs~load_uint(4);
slice sender = cs~load_msg_addr();
cell lib_to_publish = get_data();
int initial_gas = gas_consumed();
(int order_cells, int order_bits, _) = compute_data_size(lib_to_publish, 2048);
int size_counting_gas = gas_consumed() - initial_gas;
int to_reserve = get_simple_compute_fee(MASTERCHAIN, size_counting_gas) +
get_storage_fee(MASTERCHAIN, DEFAULT_DURATION, order_bits, order_cells);
raw_reserve(to_reserve, RESERVE_BOUNCE_ON_ACTION_FAIL);
cell msg = begin_cell()
.store_msg_flags_and_address_none(NON_BOUNCEABLE)
.store_slice(sender)
.store_coins(0)
.store_prefix_only_body()
.end_cell();
send_raw_message(msg, SEND_MODE_CARRY_ALL_BALANCE);
;; https://docs.ton.org/tvm.pdf, page 138, SETLIBCODE
set_lib_code(lib_to_publish, 2); ;; if x = 2, the library is added as a public library (and becomes available to all smart contracts if the current smart contract resides in the masterchain);
;; brick contract
set_code(empty());
set_data(empty());
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy