import { TRANSACTION _TYPES } from '../../../shared/constants/transaction' ;
import { MAINNET _CHAIN _ID } from '../../../shared/constants/network' ;
import migration64 from './064' ;
const SENT _ETHER = 'sentEther' ; // the legacy transaction type being replaced in this migration with TRANSACTION_TYPES.SIMPLE_SEND
describe ( 'migration #64' , ( ) => {
it ( 'should update the version metadata' , async ( ) => {
const oldStorage = {
meta : {
version : 63 ,
} ,
data : { } ,
} ;
const newStorage = await migration64 . migrate ( oldStorage ) ;
expect ( newStorage . meta ) . toStrictEqual ( {
version : 64 ,
} ) ;
} ) ;
it ( 'should do nothing if transactions state does not exist' , async ( ) => {
const oldStorage = {
meta : { } ,
data : {
TransactionController : {
bar : 'baz' ,
} ,
IncomingTransactionsController : {
foo : 'baz' ,
} ,
foo : 'bar' ,
} ,
} ;
const newStorage = await migration64 . migrate ( oldStorage ) ;
expect ( oldStorage . data ) . toStrictEqual ( newStorage . data ) ;
} ) ;
it ( 'should do nothing if transactions state is empty' , async ( ) => {
const oldStorage = {
meta : { } ,
data : {
TransactionController : {
transactions : { } ,
bar : 'baz' ,
} ,
foo : 'bar' ,
} ,
} ;
const newStorage = await migration64 . migrate ( oldStorage ) ;
expect ( oldStorage . data ) . toStrictEqual ( newStorage . data ) ;
} ) ;
it ( 'should do nothing if transactions state is not an object' , async ( ) => {
const oldStorage = {
meta : { } ,
data : {
TransactionController : {
transactions : [ ] ,
bar : 'baz' ,
} ,
foo : 'bar' ,
} ,
} ;
const newStorage = await migration64 . migrate ( oldStorage ) ;
expect ( oldStorage . data ) . toStrictEqual ( newStorage . data ) ;
} ) ;
it ( 'should do nothing if state is empty' , async ( ) => {
const oldStorage = {
meta : { } ,
data : { } ,
} ;
const newStorage = await migration64 . migrate ( oldStorage ) ;
expect ( oldStorage . data ) . toStrictEqual ( newStorage . data ) ;
} ) ;
it ( 'should change action type of "sentEther" to "simpleSend" for any transactions and transaction history events in transactionsController.transactions' , async ( ) => {
const OLD _TRANSACTION _STATE = {
1462177651588364 : {
type : TRANSACTION _TYPES . CANCEL ,
id : 0 ,
chainId : MAINNET _CHAIN _ID ,
txParams : {
nonce : '0x0' ,
} ,
origin : 'https://metamask.github.io' ,
r : '0x29f00dda09306f0f09895e80db110b9348eeb57d3e0b386409bfb674041ba45a' ,
rawTx :
'0x02f902fc04278459682f008459682f10830314138080b902a3608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029c001a029f00dda09306f0f09895e80db110b9348eeb57d3e0b386409bfb674041ba45aa049f74084dd8c517b305a2e60b39ae9002176a5244cb06de8f9ea3757811f5ec6' ,
s : '0x49f74084dd8c517b305a2e60b39ae9002176a5244cb06de8f9ea3757811f5ec6' ,
status : 'confirmed' ,
estimatedBaseFee : 'b' ,
hash : '0x4d8543f12afd3795b94d723dcd0e20bfc3740e1af668e5e90a0c5ec49f36ba12' ,
} ,
1 : {
type : SENT _ETHER ,
id : 1 ,
chainId : MAINNET _CHAIN _ID ,
txParams : {
nonce : '0x1' ,
} ,
history : [
{
chainId : '0x4' ,
dappSuggestedGasFees : {
gas : '0x31413' ,
} ,
id : 1462177651588364 ,
loadingDefaults : true ,
metamaskNetworkId : '4' ,
origin : 'https://metamask.github.io' ,
status : 'unapproved' ,
time : 1631118004776 ,
txParams : {
data : '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gas : '0x31413' ,
value : '0x0' ,
} ,
type : SENT _ETHER ,
} ,
[
{
note : 'Added new unapproved transaction.' ,
op : 'add' ,
path : '/txParams/maxFeePerGas' ,
timestamp : 1631118004862 ,
value : '0x59682f10' ,
} ,
{
op : 'add' ,
path : '/txParams/maxPriorityFeePerGas' ,
value : '0x59682f00' ,
} ,
{
op : 'replace' ,
path : '/loadingDefaults' ,
value : false ,
} ,
{
op : 'add' ,
path : '/userFeeLevel' ,
value : 'medium' ,
} ,
] ,
] ,
} ,
3274396743040791 : {
baseFeePerGas : '0xb' ,
chainId : '0x4' ,
dappSuggestedGasFees : {
gas : '0xa9fe' ,
} ,
estimatedBaseFee : 'b' ,
hash : '0x19ffab8a9467df9afbef82d8907f9e39f0696c7a774ed5473ecf7337adcc674b' ,
origin : 'https://metamask.github.io' ,
r : '0xc2b2901f3593536d21e9b136c469b9b8f91a944f18a29a3cdf3a2eaadf660e71' ,
rawTx :
'0x02f87604288459682f008459682f1082a9fe949ef57335bc7d5b6cbc06dca6064a604b75e09ace883782dace9d90000084d0e30db0c001a0c2b2901f3593536d21e9b136c469b9b8f91a944f18a29a3cdf3a2eaadf660e71a057876a0292d548dd67c6faed8e835b94252b55a043ce01a1206361ccab417ad4' ,
s : '0x57876a0292d548dd67c6faed8e835b94252b55a043ce01a1206361ccab417ad4' ,
status : 'confirmed' ,
submittedTime : 1631118228493 ,
time : 1631118217596 ,
txParams : {
data : '0xd0e30db0' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gas : '0xa9fe' ,
maxFeePerGas : '0x59682f10' ,
maxPriorityFeePerGas : '0x59682f00' ,
nonce : '0x28' ,
to : '0x9ef57335bc7d5b6cbc06dca6064a604b75e09ace' ,
value : '0x3782dace9d900000' ,
} ,
txReceipt : {
blockHash :
'0xafa4e1fd95e429d9c6e6c7c1d282b2bd0bbeb50d0a68743e9392b9c95a06e2eb' ,
blockNumber : {
length : 1 ,
negative : 0 ,
red : null ,
words : [ 9257603 , null ] ,
} ,
contractAddress : null ,
cumulativeGasUsed : {
length : 1 ,
negative : 0 ,
red : null ,
words : [ 4954851 , null ] ,
} ,
effectiveGasPrice : '0x59682f0b' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gasUsed : 'a9fe' ,
logs : [ ] ,
logsBloom :
'0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' ,
status : '0x1' ,
to : '0x9ef57335bc7d5b6cbc06dca6064a604b75e09ace' ,
transactionHash :
'0x19ffab8a9467df9afbef82d8907f9e39f0696c7a774ed5473ecf7337adcc674b' ,
transactionIndex : {
length : 1 ,
negative : 0 ,
red : null ,
words : [ 9 , null ] ,
} ,
type : '0x2' ,
} ,
type : SENT _ETHER ,
history : [
{
chainId : '0x4' ,
dappSuggestedGasFees : {
gas : '0xa9fe' ,
} ,
id : 3274396743040791 ,
loadingDefaults : true ,
metamaskNetworkId : '4' ,
origin : 'https://metamask.github.io' ,
status : 'unapproved' ,
time : 1631118217596 ,
txParams : {
data : '0xd0e30db0' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gas : '0xa9fe' ,
to : '0x9ef57335bc7d5b6cbc06dca6064a604b75e09ace' ,
value : '0x3782dace9d900000' ,
} ,
} ,
[
{
note : 'Added new unapproved transaction.' ,
op : 'add' ,
path : '/txParams/maxFeePerGas' ,
timestamp : 1631118217762 ,
value : '0x59682f10' ,
} ,
{
op : 'add' ,
path : '/txParams/maxPriorityFeePerGas' ,
value : '0x59682f00' ,
} ,
{
op : 'replace' ,
path : '/loadingDefaults' ,
value : false ,
} ,
{
op : 'add' ,
path : '/userFeeLevel' ,
value : 'medium' ,
} ,
] ,
] ,
} ,
} ;
const EXPECTED _TRANSACTION _STATE = {
1462177651588364 : {
type : TRANSACTION _TYPES . CANCEL ,
id : 0 ,
chainId : MAINNET _CHAIN _ID ,
txParams : {
nonce : '0x0' ,
} ,
origin : 'https://metamask.github.io' ,
r : '0x29f00dda09306f0f09895e80db110b9348eeb57d3e0b386409bfb674041ba45a' ,
rawTx :
'0x02f902fc04278459682f008459682f10830314138080b902a3608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029c001a029f00dda09306f0f09895e80db110b9348eeb57d3e0b386409bfb674041ba45aa049f74084dd8c517b305a2e60b39ae9002176a5244cb06de8f9ea3757811f5ec6' ,
s : '0x49f74084dd8c517b305a2e60b39ae9002176a5244cb06de8f9ea3757811f5ec6' ,
status : 'confirmed' ,
estimatedBaseFee : 'b' ,
hash : '0x4d8543f12afd3795b94d723dcd0e20bfc3740e1af668e5e90a0c5ec49f36ba12' ,
} ,
1 : {
type : TRANSACTION _TYPES . SIMPLE _SEND ,
id : 1 ,
chainId : MAINNET _CHAIN _ID ,
txParams : {
nonce : '0x1' ,
} ,
history : [
{
chainId : '0x4' ,
dappSuggestedGasFees : {
gas : '0x31413' ,
} ,
id : 1462177651588364 ,
loadingDefaults : true ,
metamaskNetworkId : '4' ,
origin : 'https://metamask.github.io' ,
status : 'unapproved' ,
time : 1631118004776 ,
txParams : {
data : '0x608060405234801561001057600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000808190555061023b806100686000396000f300608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d1461005c5780638da5cb5b1461009d578063d0e30db0146100f4575b600080fd5b34801561006857600080fd5b5061008760048036038101908080359060200190929190505050610112565b6040518082815260200191505060405180910390f35b3480156100a957600080fd5b506100b26101d0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100fc6101f6565b6040518082815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561017057600080fd5b8160008082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156101c5573d6000803e3d6000fd5b506000549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60003460008082825401925050819055506000549050905600a165627a7a72305820f237db3ec816a52589d82512117bc85bc08d3537683ffeff9059108caf3e5d400029' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gas : '0x31413' ,
value : '0x0' ,
} ,
type : TRANSACTION _TYPES . SIMPLE _SEND ,
} ,
[
{
note : 'Added new unapproved transaction.' ,
op : 'add' ,
path : '/txParams/maxFeePerGas' ,
timestamp : 1631118004862 ,
value : '0x59682f10' ,
} ,
{
op : 'add' ,
path : '/txParams/maxPriorityFeePerGas' ,
value : '0x59682f00' ,
} ,
{
op : 'replace' ,
path : '/loadingDefaults' ,
value : false ,
} ,
{
op : 'add' ,
path : '/userFeeLevel' ,
value : 'medium' ,
} ,
] ,
] ,
} ,
3274396743040791 : {
baseFeePerGas : '0xb' ,
chainId : '0x4' ,
dappSuggestedGasFees : {
gas : '0xa9fe' ,
} ,
estimatedBaseFee : 'b' ,
hash : '0x19ffab8a9467df9afbef82d8907f9e39f0696c7a774ed5473ecf7337adcc674b' ,
origin : 'https://metamask.github.io' ,
r : '0xc2b2901f3593536d21e9b136c469b9b8f91a944f18a29a3cdf3a2eaadf660e71' ,
rawTx :
'0x02f87604288459682f008459682f1082a9fe949ef57335bc7d5b6cbc06dca6064a604b75e09ace883782dace9d90000084d0e30db0c001a0c2b2901f3593536d21e9b136c469b9b8f91a944f18a29a3cdf3a2eaadf660e71a057876a0292d548dd67c6faed8e835b94252b55a043ce01a1206361ccab417ad4' ,
s : '0x57876a0292d548dd67c6faed8e835b94252b55a043ce01a1206361ccab417ad4' ,
status : 'confirmed' ,
submittedTime : 1631118228493 ,
time : 1631118217596 ,
txParams : {
data : '0xd0e30db0' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gas : '0xa9fe' ,
maxFeePerGas : '0x59682f10' ,
maxPriorityFeePerGas : '0x59682f00' ,
nonce : '0x28' ,
to : '0x9ef57335bc7d5b6cbc06dca6064a604b75e09ace' ,
value : '0x3782dace9d900000' ,
} ,
txReceipt : {
blockHash :
'0xafa4e1fd95e429d9c6e6c7c1d282b2bd0bbeb50d0a68743e9392b9c95a06e2eb' ,
blockNumber : {
length : 1 ,
negative : 0 ,
red : null ,
words : [ 9257603 , null ] ,
} ,
contractAddress : null ,
cumulativeGasUsed : {
length : 1 ,
negative : 0 ,
red : null ,
words : [ 4954851 , null ] ,
} ,
effectiveGasPrice : '0x59682f0b' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gasUsed : 'a9fe' ,
logs : [ ] ,
logsBloom :
'0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000' ,
status : '0x1' ,
to : '0x9ef57335bc7d5b6cbc06dca6064a604b75e09ace' ,
transactionHash :
'0x19ffab8a9467df9afbef82d8907f9e39f0696c7a774ed5473ecf7337adcc674b' ,
transactionIndex : {
length : 1 ,
negative : 0 ,
red : null ,
words : [ 9 , null ] ,
} ,
type : '0x2' ,
} ,
type : TRANSACTION _TYPES . SIMPLE _SEND ,
history : [
{
chainId : '0x4' ,
dappSuggestedGasFees : {
gas : '0xa9fe' ,
} ,
id : 3274396743040791 ,
loadingDefaults : true ,
metamaskNetworkId : '4' ,
origin : 'https://metamask.github.io' ,
status : 'unapproved' ,
time : 1631118217596 ,
txParams : {
data : '0xd0e30db0' ,
from : '0x0f002c95c041f003be01c3e4f52cae1f6ab3ba6e' ,
gas : '0xa9fe' ,
to : '0x9ef57335bc7d5b6cbc06dca6064a604b75e09ace' ,
value : '0x3782dace9d900000' ,
} ,
} ,
[
{
note : 'Added new unapproved transaction.' ,
op : 'add' ,
path : '/txParams/maxFeePerGas' ,
timestamp : 1631118217762 ,
value : '0x59682f10' ,
} ,
{
op : 'add' ,
path : '/txParams/maxPriorityFeePerGas' ,
value : '0x59682f00' ,
} ,
{
op : 'replace' ,
path : '/loadingDefaults' ,
value : false ,
} ,
{
op : 'add' ,
path : '/userFeeLevel' ,
value : 'medium' ,
} ,
] ,
] ,
} ,
} ;
const oldStorage = {
meta : { } ,
data : {
TransactionController : {
transactions : OLD _TRANSACTION _STATE ,
} ,
} ,
} ;
const expectedStorage = {
meta : { } ,
data : {
TransactionController : {
transactions : EXPECTED _TRANSACTION _STATE ,
} ,
} ,
} ;
const newStorage = await migration64 . migrate ( oldStorage ) ;
expect ( expectedStorage . data ) . toStrictEqual ( newStorage . data ) ;
} ) ;
} ) ;