From 386d268053830fa5cca5dd36b358b63ba01fa6d6 Mon Sep 17 00:00:00 2001 From: ennucore Date: Thu, 19 Jan 2023 12:26:03 +0100 Subject: [PATCH] tranfer stuff --- build/cli.js | 33 +++++++++++++++++++++++++++++---- contracts/main.ts | 4 ++++ contracts/utils.ts | 13 ++++++++----- 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/build/cli.js b/build/cli.js index 9654cf2..1e41c20 100644 --- a/build/cli.js +++ b/build/cli.js @@ -50,8 +50,8 @@ let commands = [ name: 'transfer', options: [ { - name: 'minter', - help: 'The jetton address' + name: 'my_wallet', + help: 'The jetton wallet address' }, { name: "amount" @@ -62,12 +62,37 @@ let commands = [ ], command: async function transfer(args) { let [walletContract, walletKey] = await getWallet(); - let address = main.getJettonAddress(walletContract.address, Address.parse(args._[0]), Cell.fromBoc(hex)[0]); await sendInternalMessageWithWallet({ - walletContract, secretKey: walletKey.secretKey, value: 0.15 * main.TON(), to: address, + walletContract, secretKey: walletKey.secretKey, value: 0.15 * main.TON(), to: Address.parse(args._[0]), body: main.transferMsg((parseFloat(args._[1]) * main.TON()), Address.parse(args._[2])) }) } + }, + { + name: "deploy", + options: [ + { + name: "minter", + }, + { + name: "account" + } + ], + command: async function deploy(args) { + let [walletContract, walletKey] = await getWallet(); + let address = main.getJettonAddress(Address.parse(args._[1]), Address.parse(args._[0]), Cell.fromBoc(hex)[0]); + await sendInternalMessageWithWallet({ + walletContract, secretKey: walletKey.secretKey, value: 0.15 * main.TON(), to: address, + body: new CommonMessageInfo({ + body: null, + stateInit: new StateInit({ code: Cell.fromBoc(hex)[0], data: main.walletData({ + balance: 0, ownerAddress: Address.parse(args._[1]), + jettonWalletCode: Cell.fromBoc(hex)[0], + jettonMasterAddress: Address.parse(args._[0]) + }) }), + }) + }) + } } ] diff --git a/contracts/main.ts b/contracts/main.ts index 08a9813..cc5a920 100644 --- a/contracts/main.ts +++ b/contracts/main.ts @@ -81,6 +81,10 @@ export function transferMsg(amount: number, recipient: Address) { .storeUint(0, 64) .storeCoins(amount) .storeAddress(recipient) + .storeAddress(recipient) + .storeBit(false) + .storeCoins(0) + .storeBit(false) .endCell(); } diff --git a/contracts/utils.ts b/contracts/utils.ts index 8524718..1e52909 100644 --- a/contracts/utils.ts +++ b/contracts/utils.ts @@ -2,8 +2,13 @@ import { Address, Cell, CellMessage, InternalMessage, CommonMessageInfo, WalletC import BN from "bn.js"; // helper for end-to-end on-chain tests (normally post deploy) to allow sending InternalMessages to contracts using a wallet -export async function sendInternalMessageWithWallet(params: { walletContract: WalletContract; secretKey: Buffer; to: Address; value: BN; bounce?: boolean; body?: Cell }) { - const message = params.body ? new CellMessage(params.body) : undefined; +export async function sendInternalMessageWithWallet(params: { walletContract: WalletContract; secretKey: Buffer; to: Address; value: BN; bounce?: boolean; body?: Cell | CommonMessageInfo }) { + if (params.body instanceof Cell) { + params.body = new CommonMessageInfo({ body: new CellMessage(params.body) }); + } + if (!params.body) { + params.body = new CommonMessageInfo({}); + } const seqno = await params.walletContract.getSeqNo(); const transfer = params.walletContract.createTransfer({ secretKey: params.secretKey, @@ -13,9 +18,7 @@ export async function sendInternalMessageWithWallet(params: { walletContract: Wa to: params.to, value: params.value, bounce: params.bounce ?? false, - body: new CommonMessageInfo({ - body: message, - }), + body: params.body, }), }); await params.walletContract.client.sendExternalMessage(params.walletContract, transfer);