mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Remove decentralized 4byte function signature registry since it contains incorrect signatures and we can't algorithmically check for best option when 4byte.directory is down (#15300)
* remove decentralized 4byte function signature registry since it is griefed and we can't algorithmically check for best option when 4byte is down * add migration * remove nock of on chain registry call in getMethodDataAsync test
This commit is contained in:
parent
2f37635a88
commit
b82d357a0d
30
app/scripts/migrations/073.js
Normal file
30
app/scripts/migrations/073.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import { cloneDeep } from 'lodash';
|
||||||
|
|
||||||
|
const version = 73;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should empty the `knownMethodData` object in PreferencesController
|
||||||
|
*/
|
||||||
|
export default {
|
||||||
|
version,
|
||||||
|
async migrate(originalVersionedData) {
|
||||||
|
const versionedData = cloneDeep(originalVersionedData);
|
||||||
|
versionedData.meta.version = version;
|
||||||
|
const state = versionedData.data;
|
||||||
|
const newState = transformState(state);
|
||||||
|
versionedData.data = newState;
|
||||||
|
return versionedData;
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function transformState(state) {
|
||||||
|
const PreferencesController = state?.PreferencesController || {};
|
||||||
|
|
||||||
|
return {
|
||||||
|
...state,
|
||||||
|
PreferencesController: {
|
||||||
|
...PreferencesController,
|
||||||
|
knownMethodData: {},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
427
app/scripts/migrations/073.test.js
Normal file
427
app/scripts/migrations/073.test.js
Normal file
@ -0,0 +1,427 @@
|
|||||||
|
import migration73 from './073';
|
||||||
|
|
||||||
|
describe('migration #73', () => {
|
||||||
|
it('should update the version metadata', async () => {
|
||||||
|
const oldStorage = {
|
||||||
|
meta: {
|
||||||
|
version: 72,
|
||||||
|
},
|
||||||
|
data: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
const newStorage = await migration73.migrate(oldStorage);
|
||||||
|
expect(newStorage.meta).toStrictEqual({
|
||||||
|
version: 73,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should empty knownMethodData object in PreferencesController', async () => {
|
||||||
|
const oldStorage = {
|
||||||
|
meta: {
|
||||||
|
version: 72,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
PreferencesController: {
|
||||||
|
knownMethodData: {
|
||||||
|
'0x095ea7b3': {
|
||||||
|
name: 'Approve',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x1249c58b': {
|
||||||
|
name: 'Mint',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
'0x1688f0b9': {
|
||||||
|
name: 'Create Proxy With Nonce',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x18cbafe5': {
|
||||||
|
name: 'Swap Exact Tokens For E T H',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address[]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x23b872dd': {
|
||||||
|
name: 'Transfer From',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x2e1a7d4d': {
|
||||||
|
name: 'Withdraw',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x2e7ba6ef': {
|
||||||
|
name: 'Claim',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes32[]',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x2eb2c2d6': {
|
||||||
|
name: 'Safe Batch Transfer From',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256[]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256[]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x3671f8cf': {},
|
||||||
|
'0x41441d3b': {
|
||||||
|
name: 'Enter Staking',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x441a3e70': {
|
||||||
|
name: 'Withdraw',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x6f652e1a': {
|
||||||
|
name: 'Create Order',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x8dbdbe6d': {
|
||||||
|
name: 'Deposit',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0x8ed955b9': {
|
||||||
|
name: 'Harvest All',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
'0xa22cb465': {
|
||||||
|
name: 'Set Approval For All',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bool',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0xa9059cbb': {
|
||||||
|
name: 'Transfer',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0xab834bab': {
|
||||||
|
name: 'Atomic Match_',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address[14]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256[18]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint8[8]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint8[2]',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes32[5]',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0xd0e30db0': {
|
||||||
|
name: 'Deposit',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
'0xddd81f82': {
|
||||||
|
name: 'Register Proxy',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
'0xded9382a': {
|
||||||
|
name: 'Remove Liquidity E T H With Permit',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bool',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint8',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes32',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'bytes32',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0xe2bbb158': {
|
||||||
|
name: 'Deposit',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
'0xf305d719': {
|
||||||
|
name: 'Add Liquidity E T H',
|
||||||
|
params: [
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const newStorage = await migration73.migrate(oldStorage);
|
||||||
|
expect(newStorage).toStrictEqual({
|
||||||
|
meta: {
|
||||||
|
version: 73,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
PreferencesController: {
|
||||||
|
knownMethodData: {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should preserve other PreferencesController state', async () => {
|
||||||
|
const oldStorage = {
|
||||||
|
meta: {
|
||||||
|
version: 72,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
PreferencesController: {
|
||||||
|
currentLocale: 'en',
|
||||||
|
dismissSeedBackUpReminder: false,
|
||||||
|
ipfsGateway: 'dweb.link',
|
||||||
|
knownMethodData: {
|
||||||
|
'0xd0e30db0': {
|
||||||
|
name: 'Deposit',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
'0xddd81f82': {
|
||||||
|
name: 'Register Proxy',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
openSeaEnabled: false,
|
||||||
|
useTokenDetection: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const newStorage = await migration73.migrate(oldStorage);
|
||||||
|
expect(newStorage).toStrictEqual({
|
||||||
|
meta: {
|
||||||
|
version: 73,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
PreferencesController: {
|
||||||
|
currentLocale: 'en',
|
||||||
|
dismissSeedBackUpReminder: false,
|
||||||
|
ipfsGateway: 'dweb.link',
|
||||||
|
knownMethodData: {},
|
||||||
|
openSeaEnabled: false,
|
||||||
|
useTokenDetection: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not change state in controllers other than PreferencesController', async () => {
|
||||||
|
const oldStorage = {
|
||||||
|
meta: {
|
||||||
|
version: 71,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
PreferencesController: {
|
||||||
|
knownMethodData: {
|
||||||
|
'0xd0e30db0': {
|
||||||
|
name: 'Deposit',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
'0xddd81f82': {
|
||||||
|
name: 'Register Proxy',
|
||||||
|
params: [],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
FooController: { a: 'b' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const newStorage = await migration73.migrate(oldStorage);
|
||||||
|
expect(newStorage).toStrictEqual({
|
||||||
|
meta: {
|
||||||
|
version: 73,
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
PreferencesController: {
|
||||||
|
knownMethodData: {},
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
FooController: { a: 'b' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -76,6 +76,7 @@ import m069 from './069';
|
|||||||
import m070 from './070';
|
import m070 from './070';
|
||||||
import m071 from './071';
|
import m071 from './071';
|
||||||
import m072 from './072';
|
import m072 from './072';
|
||||||
|
import m073 from './073';
|
||||||
|
|
||||||
const migrations = [
|
const migrations = [
|
||||||
m002,
|
m002,
|
||||||
@ -149,6 +150,7 @@ const migrations = [
|
|||||||
m070,
|
m070,
|
||||||
m071,
|
m071,
|
||||||
m072,
|
m072,
|
||||||
|
m073,
|
||||||
];
|
];
|
||||||
|
|
||||||
export default migrations;
|
export default migrations;
|
||||||
|
@ -43,15 +43,6 @@ async function getMethodFrom4Byte(fourBytePrefix) {
|
|||||||
return fourByteResponse.results[0].text_signature;
|
return fourByteResponse.results[0].text_signature;
|
||||||
}
|
}
|
||||||
|
|
||||||
function pickShortest(registrySig, fourByteSig) {
|
|
||||||
if (!registrySig) {
|
|
||||||
return fourByteSig;
|
|
||||||
} else if (!fourByteSig) {
|
|
||||||
return registrySig;
|
|
||||||
}
|
|
||||||
return fourByteSig.length < registrySig.length ? fourByteSig : registrySig;
|
|
||||||
}
|
|
||||||
|
|
||||||
let registry;
|
let registry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,18 +62,11 @@ export async function getMethodDataAsync(fourBytePrefix) {
|
|||||||
registry = new MethodRegistry({ provider: global.ethereumProvider });
|
registry = new MethodRegistry({ provider: global.ethereumProvider });
|
||||||
}
|
}
|
||||||
|
|
||||||
const registrySig = await registry.lookup(fourBytePrefix).catch((e) => {
|
if (!fourByteSig) {
|
||||||
log.error(e);
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
const sig = pickShortest(registrySig, fourByteSig);
|
|
||||||
|
|
||||||
if (!sig) {
|
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const parsedResult = registry.parse(sig);
|
const parsedResult = registry.parse(fourByteSig);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: parsedResult.name,
|
name: parsedResult.name,
|
||||||
|
@ -87,14 +87,6 @@ describe('Transactions utils', () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
nock('https://mainnet.infura.io:443', { encodedQueryParams: true })
|
|
||||||
.post('/v3/341eacb578dd44a1a049cbc5f6fd4035')
|
|
||||||
.reply(200, (_, requestBody) => ({
|
|
||||||
id: requestBody.id,
|
|
||||||
jsonrpc: '2.0',
|
|
||||||
result:
|
|
||||||
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002f6e69636546756e6374696f6e48657265506c7a436c69636b39343332333030383928616464726573732c626f6f6c290000000000000000000000000000000000',
|
|
||||||
}));
|
|
||||||
expect(await utils.getMethodDataAsync('0xa22cb465')).toStrictEqual({
|
expect(await utils.getMethodDataAsync('0xa22cb465')).toStrictEqual({
|
||||||
name: 'Set Approval For All',
|
name: 'Set Approval For All',
|
||||||
params: [{ type: 'address' }, { type: 'bool' }],
|
params: [{ type: 'address' }, { type: 'bool' }],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user