1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/helpers/utils/optimism/buildUnserializedTransaction.js
Dan J Miller 9fa15dda6f
Support for Layer 2 networks with transaction fees on both layers (#12658)
* Support for Layer 2 networks with transaction fees on both layers

* Use  variable name in transaction-breakdown

* Add comment on code source to ui/helpers/utils/optimism/fetchEstimatedL1Fee.js

* Fix unit tests

* Ensure values passed to  are defined

* Fix activity log
2021-11-11 13:16:45 -03:30

34 lines
1.3 KiB
JavaScript

import { omit } from 'lodash';
import { BN, stripHexPrefix } from 'ethereumjs-util';
import Common, { Chain, Hardfork } from '@ethereumjs/common';
import { TransactionFactory } from '@ethereumjs/tx';
function buildTxParams(txMeta) {
return {
...omit(txMeta.txParams, 'gas'),
gasLimit: txMeta.txParams.gas,
};
}
function buildTransactionCommon(txMeta) {
// This produces a transaction whose information does not completely match an
// Optimism transaction — for instance, DEFAULT_CHAIN is still 'mainnet' and
// genesis points to the mainnet genesis, not the Optimism genesis — but
// considering that all we want to do is serialize a transaction, this works
// fine for our use case.
return Common.forCustomChain(Chain.Mainnet, {
chainId: new BN(stripHexPrefix(txMeta.chainId), 16),
networkId: new BN(txMeta.metamaskNetworkId, 10),
// Optimism only supports type-0 transactions; it does not support any of
// the newer EIPs since EIP-155. Source:
// <https://github.com/ethereum-optimism/optimism/blob/develop/specs/l2geth/transaction-types.md>
defaultHardfork: Hardfork.SpuriousDragon,
});
}
export default function buildUnserializedTransaction(txMeta) {
const txParams = buildTxParams(txMeta);
const common = buildTransactionCommon(txMeta);
return TransactionFactory.fromTxData(txParams, { common });
}