#pragma version >=0.2.0; #include "stdlib.fc"; () send_grams(slice address, int amount) impure { cell msg = begin_cell() .store_uint (0x18, 6) ;; bounce .store_slice(address) ;; 267 bit address .store_grams(amount) .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 workchain() asm "0 PUSHINT"; () force_chain(slice addr) impure { (int wc, _) = parse_std_addr(addr); throw_unless(333, wc == workchain()); } cell pack_jetton_wallet_data(int balance, slice owner_address, slice jetton_master_address, cell jetton_wallet_code) inline { return begin_cell() .store_coins(balance) .store_slice(owner_address) .store_slice(jetton_master_address) .store_ref(jetton_wallet_code) .end_cell(); } cell calculate_jetton_wallet_state_init(slice owner_address, slice jetton_master_address, cell jetton_wallet_code) inline { return begin_cell() .store_uint(0, 2) .store_dict(jetton_wallet_code) .store_dict(pack_jetton_wallet_data(0, owner_address, jetton_master_address, jetton_wallet_code)) .store_uint(0, 1) .end_cell(); } slice calculate_jetton_wallet_address(cell state_init) inline { return begin_cell() .store_uint(4, 3) .store_int(workchain(), 8) .store_uint(cell_hash(state_init), 256) .end_cell() .begin_parse(); } slice calculate_user_jetton_wallet_address(slice owner_address, slice jetton_master_address, cell jetton_wallet_code) inline { return calculate_jetton_wallet_address(calculate_jetton_wallet_state_init(owner_address, jetton_master_address, jetton_wallet_code)); }