1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +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:
Alex Donesky 2022-07-26 12:01:14 -05:00 committed by GitHub
parent 2f37635a88
commit b82d357a0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 461 additions and 26 deletions

View 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: {},
},
};
}

View 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' },
},
},
});
});
});

View File

@ -76,6 +76,7 @@ import m069 from './069';
import m070 from './070';
import m071 from './071';
import m072 from './072';
import m073 from './073';
const migrations = [
m002,
@ -149,6 +150,7 @@ const migrations = [
m070,
m071,
m072,
m073,
];
export default migrations;

View File

@ -43,15 +43,6 @@ async function getMethodFrom4Byte(fourBytePrefix) {
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;
/**
@ -71,18 +62,11 @@ export async function getMethodDataAsync(fourBytePrefix) {
registry = new MethodRegistry({ provider: global.ethereumProvider });
}
const registrySig = await registry.lookup(fourBytePrefix).catch((e) => {
log.error(e);
return null;
});
const sig = pickShortest(registrySig, fourByteSig);
if (!sig) {
if (!fourByteSig) {
return {};
}
const parsedResult = registry.parse(sig);
const parsedResult = registry.parse(fourByteSig);
return {
name: parsedResult.name,

View File

@ -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({
name: 'Set Approval For All',
params: [{ type: 'address' }, { type: 'bool' }],