1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-23 02:10:12 +01:00

Ensure transaction controller correctly estimates gas for special custom networks (#11441)

This commit is contained in:
Dan J Miller 2021-07-02 13:01:27 -02:30 committed by ryanml
parent 70b86acd45
commit e5d54afe80
2 changed files with 23 additions and 1 deletions

View File

@ -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 };
}

View File

@ -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,
};