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:
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 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;
|
||||
|
@ -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,
|
||||
|
@ -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' }],
|
||||
|
Loading…
Reference in New Issue
Block a user