mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 18:00:18 +01:00
Ensure transaction controller correctly estimates gas for special custom networks (#11441)
This commit is contained in:
parent
70b86acd45
commit
e5d54afe80
@ -15,6 +15,7 @@ import {
|
||||
bnToHex,
|
||||
BnMultiplyByFraction,
|
||||
addHexPrefix,
|
||||
getChainType,
|
||||
} from '../../lib/util';
|
||||
import { TRANSACTION_NO_CONTRACT_ERROR_KEY } from '../../../../ui/helpers/constants/error-keys';
|
||||
import { getSwapsTokensReceivedFromTxMeta } from '../../../../ui/pages/swaps/swaps.util';
|
||||
@ -24,6 +25,7 @@ import {
|
||||
} from '../../../../shared/constants/transaction';
|
||||
import { METAMASK_CONTROLLER_EVENTS } from '../../metamask-controller';
|
||||
import { GAS_LIMITS } from '../../../../shared/constants/gas';
|
||||
import { CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP } from '../../../../shared/constants/network';
|
||||
import { isEIP1559Transaction } from '../../../../shared/modules/transaction.utils';
|
||||
import TransactionStateManager from './tx-state-manager';
|
||||
import TxGasUtil from './tx-gas-utils';
|
||||
@ -356,11 +358,16 @@ export default class TransactionController extends EventEmitter {
|
||||
* @returns {Promise<Object>} Object containing the default gas limit, or the simulation failure object
|
||||
*/
|
||||
async _getDefaultGasLimit(txMeta, getCodeResponse) {
|
||||
const chainId = this._getCurrentChainId();
|
||||
const customNetworkGasBuffer = CHAIN_ID_TO_GAS_LIMIT_BUFFER_MAP[chainId];
|
||||
const chainType = getChainType(chainId);
|
||||
|
||||
if (txMeta.txParams.gas) {
|
||||
return {};
|
||||
} else if (
|
||||
txMeta.txParams.to &&
|
||||
txMeta.type === TRANSACTION_TYPES.SENT_ETHER
|
||||
txMeta.type === TRANSACTION_TYPES.SENT_ETHER &&
|
||||
chainType !== 'custom'
|
||||
) {
|
||||
// if there's data in the params, but there's no contract code, it's not a valid transaction
|
||||
if (txMeta.txParams.data) {
|
||||
@ -389,6 +396,7 @@ export default class TransactionController extends EventEmitter {
|
||||
const gasLimit = this.txGasUtil.addGasBuffer(
|
||||
addHexPrefix(estimatedGasHex),
|
||||
blockGasLimit,
|
||||
customNetworkGasBuffer,
|
||||
);
|
||||
return { gasLimit, simulationFails };
|
||||
}
|
||||
|
@ -3,6 +3,10 @@ import extension from 'extensionizer';
|
||||
import { stripHexPrefix } from 'ethereumjs-util';
|
||||
import BN from 'bn.js';
|
||||
import { memoize } from 'lodash';
|
||||
import {
|
||||
MAINNET_CHAIN_ID,
|
||||
TEST_CHAINS,
|
||||
} from '../../../shared/constants/network';
|
||||
|
||||
import {
|
||||
ENVIRONMENT_TYPE_POPUP,
|
||||
@ -180,6 +184,15 @@ function bnToHex(inputBn) {
|
||||
return addHexPrefix(inputBn.toString(16));
|
||||
}
|
||||
|
||||
function getChainType(chainId) {
|
||||
if (chainId === MAINNET_CHAIN_ID) {
|
||||
return 'mainnet';
|
||||
} else if (TEST_CHAINS.includes(chainId)) {
|
||||
return 'testnet';
|
||||
}
|
||||
return 'custom';
|
||||
}
|
||||
|
||||
export {
|
||||
getPlatform,
|
||||
getEnvironmentType,
|
||||
@ -189,4 +202,5 @@ export {
|
||||
checkForError,
|
||||
addHexPrefix,
|
||||
bnToHex,
|
||||
getChainType,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user