From 48e10b19de9ee8dbbb837b623ecb5271d8fdfff0 Mon Sep 17 00:00:00 2001 From: siandreev Date: Wed, 25 Dec 2024 11:08:50 +0100 Subject: [PATCH 1/2] fix: check host wallet balance when multisig signing --- .../sender/multisig-create-order-sender.ts | 9 ++++++++- .../multisig/useSendExisitingMultisigOrder.ts | 14 ++++---------- .../src/hooks/blockchain/useBlockchainService.ts | 1 - 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/core/src/service/ton-blockchain/sender/multisig-create-order-sender.ts b/packages/core/src/service/ton-blockchain/sender/multisig-create-order-sender.ts index 3e30ffce6..7794ccad7 100644 --- a/packages/core/src/service/ton-blockchain/sender/multisig-create-order-sender.ts +++ b/packages/core/src/service/ton-blockchain/sender/multisig-create-order-sender.ts @@ -9,7 +9,7 @@ import { MultisigEncoder } from '../encoder/multisig-encoder/multisig-encoder'; import { WalletMessageSender } from './wallet-message-sender'; import BigNumber from 'bignumber.js'; import { LedgerMessageSender } from './ledger-message-sender'; -import { internal, SendMode } from '@ton/core'; +import { fromNano, internal, SendMode } from '@ton/core'; import { TON_ASSET } from '../../../entries/crypto/asset/constants'; export class MultisigCreateOrderSender implements ISender { @@ -26,6 +26,7 @@ export class MultisigCreateOrderSender implements ISender { } public async send(outgoing: WalletOutgoingMessage) { + await this.checkTransactionPossibility(); const wrappedMessage = await this.wrapMessage(outgoing); if (this.signer.type === 'ledger') { @@ -89,4 +90,10 @@ export class MultisigCreateOrderSender implements ISender { } }); } + + private async checkTransactionPossibility() { + const requiredBalance = new BigNumber(fromNano(MultisigEncoder.createOrderAmount) + 0.02); + + await assertBalanceEnough(this.api, requiredBalance, TON_ASSET, this.hostWallet.rawAddress); + } } diff --git a/packages/uikit/src/hooks/blockchain/multisig/useSendExisitingMultisigOrder.ts b/packages/uikit/src/hooks/blockchain/multisig/useSendExisitingMultisigOrder.ts index e2faffeed..b30f497cf 100644 --- a/packages/uikit/src/hooks/blockchain/multisig/useSendExisitingMultisigOrder.ts +++ b/packages/uikit/src/hooks/blockchain/multisig/useSendExisitingMultisigOrder.ts @@ -2,29 +2,23 @@ import { useMutation } from '@tanstack/react-query'; import { useActiveMultisigAccountHost, useActiveMultisigWalletInfo } from '../../../state/multisig'; import { useAsyncQueryData } from '../../useAsyncQueryData'; import { MultisigOrder } from '@tonkeeper/core/dist/tonApiV2'; -import { - useActiveAccount, - useActiveApi, - useInvalidateActiveWalletQueries -} from '../../../state/wallet'; -import { useTonRawTransactionService } from '../useBlockchainService'; +import { useActiveApi, useInvalidateActiveWalletQueries } from '../../../state/wallet'; import { EXTERNAL_SENDER_CHOICE, useGetSender } from '../useSender'; import { useNotifyErrorHandle } from '../../useNotification'; import { MultisigEncoder } from '@tonkeeper/core/dist/service/ton-blockchain/encoder/multisig-encoder/multisig-encoder'; import { zeroFee } from '@tonkeeper/core/dist/service/ton-blockchain/utils'; +import { TonRawTransactionService } from '@tonkeeper/core/dist/service/ton-blockchain/ton-raw-transaction.service'; export function useSendExisitingMultisigOrder(orderAddress: MultisigOrder['address']) { const { data: multisigInfoData } = useActiveMultisigWalletInfo(); const multisigInfoPromise = useAsyncQueryData(multisigInfoData); const { mutateAsync: invalidateAccountQueries } = useInvalidateActiveWalletQueries(); const { signerWallet } = useActiveMultisigAccountHost(); - const api = useActiveApi(); - const rawTransactionService = useTonRawTransactionService(); const getSender = useGetSender(); const notifyError = useNotifyErrorHandle(); - const account = useActiveAccount(); + const api = useActiveApi(); return useMutation(async () => { try { @@ -38,7 +32,7 @@ export function useSendExisitingMultisigOrder(orderAddress: MultisigOrder['addre orderAddress ); - await rawTransactionService.send( + await new TonRawTransactionService(api, signerWallet).send( await getSender(EXTERNAL_SENDER_CHOICE), zeroFee, message diff --git a/packages/uikit/src/hooks/blockchain/useBlockchainService.ts b/packages/uikit/src/hooks/blockchain/useBlockchainService.ts index 47079f852..af9df8a65 100644 --- a/packages/uikit/src/hooks/blockchain/useBlockchainService.ts +++ b/packages/uikit/src/hooks/blockchain/useBlockchainService.ts @@ -1,6 +1,5 @@ import { TonAssetTransactionService } from '@tonkeeper/core/dist/service/ton-blockchain/ton-asset-transaction.service'; import { useActiveAccount, useActiveApi } from '../../state/wallet'; -import { useAppContext } from '../appContext'; import { useMemo } from 'react'; import { TonRawTransactionService } from '@tonkeeper/core/dist/service/ton-blockchain/ton-raw-transaction.service'; import { TonConnectTransactionService } from '@tonkeeper/core/dist/service/ton-blockchain/ton-connect-transaction.service'; From 4c93dd8c0ea7a37d1ba60004ac34d94f3025724b Mon Sep 17 00:00:00 2001 From: siandreev Date: Wed, 25 Dec 2024 12:03:00 +0100 Subject: [PATCH 2/2] fix: extension ton connect fix --- apps/extension/src/components/Notifications.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/extension/src/components/Notifications.tsx b/apps/extension/src/components/Notifications.tsx index ce5e7289d..1050c813f 100644 --- a/apps/extension/src/components/Notifications.tsx +++ b/apps/extension/src/components/Notifications.tsx @@ -52,7 +52,7 @@ export const Notifications = () => { } | null) => { if (!data) return; if (result) { - sendBackground.message('approveRequest', { id: data.id, payload: result }); + sendBackground.message('approveRequest', { id: data.id, payload: result.replyItems }); } else { sendBackground.message('rejectRequest', data.id); }