import { Address, beginCell, Cell, Contract, contractAddress, ContractProvider, Sender, SendMode } from '@ton/core'; import { MainContractConfig, mainContractConfigToCell } from './MainContractConfig';
export class MainContract implements Contract { constructor( readonly address: Address, readonly init?: { code: Cell; data: Cell }, ) {}
static createFromConfig(config: MainContractConfig, code: Cell, workchain = 0) { const data = mainContractConfigToCell(config); const init = { code, data }; const address = contractAddress(workchain, init);
return new MainContract(address, init); }
async sendIncrement(provider: ContractProvider, sender: Sender, value: bigint, increment_by: number) { const msg_body = beginCell() .storeUint(4, 32) .storeUint(increment_by, 32) .endCell();
await provider.internal(sender, { value, sendMode: SendMode.PAY_GAS_SEPARATELY, body: msg_body, }); }
async getData(provider: ContractProvider) { const { stack } = await provider.get('get_contract_storage_data', []); return { total_deposits: stack.readNumber(), owner_address: stack.readAddress(), deposits: stack.readCell(), ttt_master_addr: stack.readAddress(), }; }
async getBalance(provider: ContractProvider) { const { stack } = await provider.get('balance', []); return { number: stack.readNumber(), }; }
async sendDeposit(provider: ContractProvider, sender: Sender, value: bigint) { const msg_body = beginCell() .storeUint(5, 32) .endCell();
await provider.internal(sender, { value,
sendMode: SendMode.PAY_GAS_SEPARATELY, body: msg_body, }); }
async sendNoCodeDeposit(provider: ContractProvider, sender: Sender, value: bigint) { const msg_body = beginCell().endCell();
await provider.internal(sender, { value, sendMode: SendMode.PAY_GAS_SEPARATELY, body: msg_body, }); }
async sendWithdrawalRequest( provider: ContractProvider, sender: Sender, value: bigint, amount: bigint, ) { const msg_body = beginCell() .storeUint(6, 32) .storeCoins(amount) .endCell();
await provider.internal(sender, { value, sendMode: SendMode.PAY_GAS_SEPARATELY, body: msg_body, }); }
async sendClaimInterest(provider: ContractProvider, sender: Sender, bankWalletAddress: Address, value: bigint) { const msg_body = beginCell() .storeUint(7, 32) .storeAddress(bankWalletAddress) .endCell();
await provider.internal(sender, { value, sendMode: SendMode.PAY_GAS_SEPARATELY, body: msg_body, }); }
async sendDeploy(provider: ContractProvider, via: Sender, value: bigint) { await provider.internal(via, { value, sendMode: SendMode.PAY_GAS_SEPARATELY, body: beginCell().endCell(), }); }
async getUserDeposit(provider: ContractProvider, user_address: Address) { const { stack } = await provider.get('get_user_deposit', [ { type: 'slice', cell: beginCell().storeAddress(user_address).endCell(), }, ]); return { amount: stack.readBigNumber(), timestamp: stack.readNumber(), }; }
async getUserInterest(provider: ContractProvider, user_address: Address) { const { stack } = await provider.get('get_user_interest', [ { type: 'slice', cell: beginCell().storeAddress(user_address).endCell(), }, ]); return { interest: stack.readBigNumber(), }; }
async getClaimableInterest(provider: ContractProvider, user_address: Address) { const { stack } = await provider.get('get_claimable_interest', [ { type: 'slice', cell: beginCell().storeAddress(user_address).endCell(), }, ]); return { accumulatedInterest: stack.readBigNumber(), newInterest: stack.readBigNumber(), }; } }
|