mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-12 20:57:12 +01:00
34 lines
1.3 KiB
JavaScript
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 });
|
||
|
}
|