Created
April 7, 2024 09:33
-
-
Save satanworker/0f953f616085fcc559d90440d9cc5952 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Transfer | |
# Transfer swap | |
async transferSwap(userId: number, accountIndex: number, params: { swapTxParams: SwapTxParams }) { | |
const { swapTxParams } = params; | |
const [connectedWallet, secretKey] = await Promise.all([ | |
await this.walletService.getTONWallet({ | |
userId, | |
accountIndex | |
}), | |
await this.walletService.getTonWalletSecretKey({ | |
userId, | |
accountIndex | |
}) | |
]) | |
const seqno = await connectedWallet.methods.seqno().call() || 0; | |
const res = await connectedWallet.methods.transfer({ | |
secretKey, | |
toAddress: swapTxParams.to, | |
amount: swapTxParams.gasAmount.add( | |
TonWeb.utils.toNano(JettonsService.defaultTONAmount) | |
), | |
payload: swapTxParams.payload, | |
seqno: seqno, | |
sendMode: 3, | |
}).send(); | |
} | |
#transfer | |
async transfer(userId: number, accountIndex: number, params: TransferParams): Promise<SendRequestAnswer> { | |
const executingFunction = async () => { | |
console.log(`try TON transfer with params:`, userId, accountIndex, params) | |
const { toAddress, amount, jettonMasterAddress, queryId, comment } = params; | |
const [connectedWallet, secretKey] = await Promise.all([ | |
this.walletService.getTONWallet({ | |
userId, | |
accountIndex | |
}), | |
this.walletService.getTonWalletSecretKey({ | |
userId, | |
accountIndex | |
}) | |
]) | |
const seqno = await connectedWallet.methods.seqno().call() || 0; | |
await this.walletService.deployWallet({ userId, accountIndex }) | |
let response: { '@type': string } | undefined = undefined | |
if (jettonMasterAddress && (TonRawAddressZero != jettonMasterAddress)) { | |
const fromJettonMinter = new TonWeb.token.jetton.JettonMinter(connectedWallet.provider, { address: jettonMasterAddress }); | |
const fromJettonAddress = await fromJettonMinter.getJettonWalletAddress(new TonWeb.utils.Address((await connectedWallet.getAddress()).toString(true, true, false))); | |
console.log("fromAddress jettonMinter", fromJettonAddress.toString(true, true, false)) // адрес отправителя жетонов | |
const toJettonMinter = new TonWeb.token.jetton.JettonMinter(connectedWallet.provider, { address: jettonMasterAddress }); | |
const toJettonAddress = await toJettonMinter.getJettonWalletAddress(new TonWeb.utils.Address(toAddress)); | |
console.log("toAddress jettonMinter", toJettonAddress.toString(true, true, false)) // адрес получателя жетонов | |
const jettonWallet = new JettonWallet(connectedWallet.provider, { | |
address: fromJettonAddress.toString(true, true, false) | |
}); | |
response = await connectedWallet.methods.transfer({ | |
secretKey, | |
toAddress: new TonWeb.Address(fromJettonAddress), | |
amount: TonWeb.utils.toNano('0.25'), | |
seqno: seqno, | |
payload: await jettonWallet.createTransferBody({ | |
jettonAmount: amount, | |
toAddress: new TonWeb.Address(toAddress), | |
forwardAmount: TonWeb.utils.toNano('0.01'), | |
forwardPayload: comment ?? '', | |
queryId, | |
responseAddress: new TonWeb.Address((await connectedWallet.getAddress()).toString(true, true, false)) | |
}), | |
sendMode: 3, | |
}).send() | |
console.log("transfer response ", response) | |
} else { | |
response = await connectedWallet.methods.transfer({ | |
secretKey, | |
toAddress: new TonWeb.Address(toAddress).toString(true, true, false), | |
amount: amount, | |
payload: `${queryId}`, | |
seqno: seqno, | |
sendMode: 3, | |
}).send(); | |
console.log("transfer response ", response) | |
} | |
return { | |
isSent: response?.["@type"] == 'ok' | |
} | |
} | |
return await this.functionWrapper( | |
executingFunction, | |
(result: SendRequestAnswer) => { | |
return result.isSent | |
}, | |
4, | |
) as SendRequestAnswer | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment