import { Cell, Address, internal, beginCell, contractAddress, toNano, fromNano } from "ton"; import { storeDeposit, storeWithdraw } from "../output/jetton_TONB"; import { TON } from "./helpers"; import { wallet_data, owner, default_content, workchain } from './config'; import {TONB} from "../output/jetton_TONB"; import { TONBWallet } from '../output/jetton_TONBWallet'; export async function sendMessage(wallet: any, secretKey: Buffer, msg: {value: string | bigint, to: Address, bounce?: boolean, init?: {code?: Cell, data?: Cell}, body?: any}) { let seqno: number = await wallet.getSeqno(); return await wallet.sendTransfer({ seqno, secretKey, messages: [internal(msg)] }); } export async function deposit(wallet: any, secretKey: Buffer, value_: bigint | number, tonb: Address) { console.log('📤Sending deposit message to ', tonb, ' with value ', value_, '💎TON'); let value = BigInt(value_); let msg_body_b = beginCell(); storeDeposit({amount: value as bigint, $$type: 'Deposit'})(msg_body_b); let msg_body = msg_body_b.endCell(); let msg_value = value as bigint + BigInt(0.1 * TON()); let res = await sendMessage(wallet, secretKey, {value: msg_value, to: tonb, body: msg_body}); console.log(res); console.log('======deposit message sent ======'); } export async function withdraw(wallet: any, secretKey: Buffer, value_: bigint | number, tonb: Address) { let value = BigInt(value_); let msg_body_b = beginCell(); storeWithdraw({amount: value as bigint, $$type: 'Withdraw'})(msg_body_b); let msg_body = msg_body_b.endCell(); let msg_value = BigInt(0.1 * TON()); await sendMessage(wallet, secretKey, {value: msg_value, to: tonb, body: msg_body}); } export async function deployTONB(tonb_content?: any) { if (!tonb_content) { tonb_content = default_content; } let {my_wallet, secretKey, keyPair} = await wallet_data(); // Get deployment wallet balance let balance: bigint = await my_wallet.getBalance(); // Compute init data for deployment let init = await TONB.init(owner, tonb_content); let destination_address = contractAddress(workchain, init); let deployAmount = toNano('0.5'); let supply = 500; let amount = BigInt(supply * Math.pow(10, 9)); // send a message on new address contract to deploy it let seqno: number = await my_wallet.getSeqno(); console.log('🛠️Preparing new outgoing massage from deployment wallet. Seqno = ', seqno, ', wallet = ', my_wallet.address); console.log('Current deployment wallet balance = ', fromNano(balance).toString(), '💎TON'); // console.log('Totally supply for deployed Token = ', supply, ', amount = ', amount.toString()); let res = await my_wallet.sendTransfer({ seqno, secretKey, messages: [internal({ value: deployAmount, to: destination_address, init: { code : init.code, data : init.data } })] }); console.log('======deployment message sent to ', destination_address, ' ======'); console.log(res); return destination_address; } export async function getAddress(master_: string | Address, owner_: string | Address) { let master = typeof master_ === 'string' ? Address.parse(master_) : master_; let owner = typeof owner_ === 'string' ? Address.parse(owner_) : owner_; return contractAddress(workchain, await TONBWallet.init(master, owner)); }