Skip to content

Commit

Permalink
fix: fix a out of gas error
Browse files Browse the repository at this point in the history
  • Loading branch information
jinoosss committed Feb 20, 2025
1 parent 4fa0ef5 commit f817464
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function makeGasInfoBy(
}

const gasWantedBN = BigNumber(gasUsed).multipliedBy(safetyMargin);
const gasFeeBN = gasWantedBN.multipliedBy(gasPrice);
const gasFeeBN = BigNumber(gasUsed).multipliedBy(gasPrice);

return {
gasWanted: Number(gasWantedBN.toFixed(0, BigNumber.ROUND_DOWN)),
Expand Down Expand Up @@ -81,7 +81,7 @@ export const useGetEstimateGasInfo = (
return null;
}

const modifiedDocument = modifyDocument(document, gasWanted, gasFee);
const modifiedDocument = modifyDocument(document, gasWanted * 100, gasFee);

const result = await transactionGasService
.estimateGas(documentToDefaultTx(modifiedDocument))
Expand Down
6 changes: 3 additions & 3 deletions packages/adena-extension/src/hooks/wallet/use-network-fee.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export const useNetworkFee = (
const current = gasPriceTiers.find((setting) => setting.settingType === currentSettingType);

return current?.gasInfo || null;
}, [currentSettingType, gasPriceTiers]);
}, [gasPriceTiers, currentSettingType]);

const changedGasInfo = useMemo(() => {
if (!gasPriceTiers) {
Expand All @@ -86,7 +86,7 @@ export const useNetworkFee = (
}, [changedSettingType, gasPriceTiers]);

const currentGasFeeRawAmount = useMemo(() => {
if (!selectedTier) {
if (!selectedTier && !currentGasInfo) {
return BigNumber(document?.fee.amount?.[0].amount || 0).toNumber();
}

Expand All @@ -97,7 +97,7 @@ export const useNetworkFee = (
const currentGasFeeAmount = BigNumber(currentGasInfo.gasFee).toFixed(0, BigNumber.ROUND_UP);

return Number(currentGasFeeAmount);
}, [currentGasInfo, document, selectedTier]);
}, [currentGasInfo?.gasFee, document, selectedTier]);

const networkFee = useMemo(() => {
if (!currentGasInfo) {
Expand Down
28 changes: 26 additions & 2 deletions packages/adena-extension/src/inject/message/command-handler.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { WalletResponseFailureType, WalletResponseSuccessType } from '@adena-wallet/sdk';
import { DEFAULT_GAS_WANTED } from '@common/constants/tx.constant';
import { MemoryProvider } from '@common/provider/memory/memory-provider';
import { AdenaExecutor } from '@inject/executor';
import { ContractMessage, TransactionParams } from '@inject/types';
Expand Down Expand Up @@ -102,6 +104,23 @@ export class CommandHandler {
const transactionParams = makeTransactionMessage(gnoMessageInfo, gnoConnectInfo);

const executor = new AdenaExecutor();

const addEstablishResponse = await executor.addEstablish();
// Not connected
if (
addEstablishResponse.type !== WalletResponseSuccessType.CONNECTION_SUCCESS &&
addEstablishResponse.type !== WalletResponseFailureType.ALREADY_CONNECTED
) {
return;
}

console.log(addEstablishResponse);

const network = await executor.getNetwork();
if (network.data?.chainId !== gnoConnectInfo.chainId) {
await executor.switchNetwork(gnoConnectInfo.chainId);
}

executor.doContract(transactionParams).then(console.info).catch(console.error);
};
}
Expand All @@ -123,9 +142,8 @@ function makeInternalErrorResponse(message: CommandMessageData): CommandMessageD

function makeTransactionMessage(
gnoMessageInfo: GnoMessageInfo,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
gnoConnectInfo: GnoConnectInfo,
): TransactionParams {
): TransactionParams & { gasFee: number; gasWanted: number } {
const messages: ContractMessage[] = [
{
type: '/vm.m_call',
Expand All @@ -141,5 +159,11 @@ function makeTransactionMessage(

return {
messages,
gasFee: 0,
gasWanted: DEFAULT_GAS_WANTED,
networkInfo: {
chainId: gnoConnectInfo.chainId,
rpcUrl: gnoConnectInfo.rpc,
},
};
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { BroadcastTxCommitResult, BroadcastTxSyncResult, TM2Error } from '@gnolang/tm2-js-client';
import {
BroadcastTxCommitResult,
BroadcastTxSyncResult,
defaultAddressPrefix,
TM2Error,
} from '@gnolang/tm2-js-client';
import { Account, Document, isAirgapAccount, isLedgerAccount } from 'adena-module';
import BigNumber from 'bignumber.js';
import React, { useCallback, useEffect, useMemo, useState } from 'react';
Expand All @@ -25,7 +30,7 @@ import { useNetwork } from '@hooks/use-network';
import { useNetworkFee } from '@hooks/wallet/use-network-fee';
import { InjectionMessage, InjectionMessageInstance } from '@inject/message';
import { validateInjectionData } from '@inject/message/methods';
import { RoutePath } from '@types';
import { NetworkMetainfo, RoutePath } from '@types';

interface TransactionData {
messages: readonly any[];
Expand All @@ -36,6 +41,23 @@ interface TransactionData {
document: Document;
}

function makeDefaultNetworkInfo(chainId: string, rpcUrl: string): NetworkMetainfo {
return {
addressPrefix: defaultAddressPrefix,
chainId,
rpcUrl,
networkId: chainId,
networkName: '',
apiUrl: '',
indexerUrl: '',
chainName: '',
default: false,
gnoUrl: '',
id: chainId,
linkUrl: '',
};
}

function mappedTransactionData(document: Document): TransactionData {
return {
messages: document.msgs,
Expand Down Expand Up @@ -68,7 +90,7 @@ const ApproveTransactionContainer: React.FC = () => {
const { wallet } = useWalletContext();
const nomarlNavigate = useNavigate();
const { navigate } = useAppNavigate();
const { gnoProvider } = useWalletContext();
const { gnoProvider, changeNetwork } = useWalletContext();
const { walletService, transactionService } = useAdenaContext();
const { currentAccount, getCurrentAddress } = useCurrentAccount();
const [transactionData, setTransactionData] = useState<TransactionData>();
Expand All @@ -78,14 +100,27 @@ const ApproveTransactionContainer: React.FC = () => {
const [favicon, setFavicon] = useState<any>(null);
const [visibleTransactionInfo, setVisibleTransactionInfo] = useState(false);
const [document, setDocument] = useState<Document>();
const { currentNetwork } = useNetwork();
const { currentNetwork: currentWalletNetwork } = useNetwork();
const [currentBalance, setCurrentBalance] = useState(0);
const [processType, setProcessType] = useState<'INIT' | 'PROCESSING' | 'DONE'>('INIT');
const [response, setResponse] = useState<InjectionMessage | null>(null);
const [memo, setMemo] = useState('');
const useNetworkFeeReturn = useNetworkFee(document, true);
const networkFee = useNetworkFeeReturn.networkFee;

const currentNetwork: NetworkMetainfo = useMemo(() => {
const networkInfo = requestData?.data?.networkInfo;
if (!!networkInfo?.chainId && !!networkInfo?.rpcUrl) {
return makeDefaultNetworkInfo(networkInfo.chainId, networkInfo.rpcUrl);
}

return currentWalletNetwork;
}, [currentWalletNetwork, requestData]);

useEffect(() => {
changeNetwork(currentNetwork);
}, [currentNetwork.chainId]);

const processing = useMemo(() => processType !== 'INIT', [processType]);

const done = useMemo(() => processType === 'DONE', [processType]);
Expand Down Expand Up @@ -380,7 +415,11 @@ const ApproveTransactionContainer: React.FC = () => {

useEffect(() => {
updateTransactionData();
}, [memo, useNetworkFeeReturn.currentGasInfo]);
}, [
memo,
useNetworkFeeReturn.currentGasInfo?.gasWanted,
useNetworkFeeReturn.currentGasFeeRawAmount,
]);

const onClickCancel = (): void => {
chrome.runtime.sendMessage(
Expand Down

0 comments on commit f817464

Please sign in to comment.