mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 07:16:36 +01:00
2ccc1977bf
The PhishingController has been updated to v2. This release should dramatically reduce network traffic and double the update speed of the phishing list. This was accomplished by combining both of our phishing configurations into one list (the "stalelist"), then creating a separate list of the changes just the past few days (the "hotlist"). Now users will download a smaller list more frequently (every 30 minutes rather than every hour), whereas the full list is only updated every 4 days. The combined configuration means that we no longer know which list was responsible for each block. The phishing warning page has been updated to dynamically look this information up, to ensure users are still directed to the correct place to dispute a block. This update to the phishing warning page also includes the recent redesign.
378 lines
9.5 KiB
JavaScript
378 lines
9.5 KiB
JavaScript
const blacklistedHosts = [
|
|
'arbitrum-mainnet.infura.io',
|
|
'goerli.infura.io',
|
|
'mainnet.infura.io',
|
|
'sepolia.infura.io',
|
|
];
|
|
|
|
const HOTLIST_URL =
|
|
'https://static.metafi.codefi.network/api/v1/lists/hotlist.json';
|
|
const STALELIST_URL =
|
|
'https://static.metafi.codefi.network/api/v1/lists/stalelist.json';
|
|
|
|
const emptyHotlist = [];
|
|
const emptyStalelist = {
|
|
version: 2,
|
|
tolerance: 2,
|
|
fuzzylist: [],
|
|
allowlist: [],
|
|
blocklist: [],
|
|
lastUpdated: 0,
|
|
};
|
|
|
|
async function setupMocking(server, testSpecificMock) {
|
|
await server.forAnyRequest().thenPassThrough({
|
|
beforeRequest: (req) => {
|
|
const { host } = req.headers;
|
|
if (blacklistedHosts.includes(host)) {
|
|
return {
|
|
url: 'http://localhost:8545',
|
|
};
|
|
}
|
|
return {};
|
|
},
|
|
});
|
|
|
|
await server.forPost('https://api.segment.io/v1/batch').thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forPost('https://sentry.io/api/0000000/envelope/')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {},
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forPost('https://sentry.io/api/0000000/store/')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {},
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://www.4byte.directory/api/v1/signatures/')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
count: 1,
|
|
next: null,
|
|
previous: null,
|
|
results: [
|
|
{
|
|
id: 1,
|
|
created_at: null,
|
|
text_signature: 'deposit()',
|
|
hex_signature: null,
|
|
bytes_signature: null,
|
|
},
|
|
],
|
|
},
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://gas-api.metaswap.codefi.network/networks/1/gasPrices')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
SafeGasPrice: '1',
|
|
ProposeGasPrice: '2',
|
|
FastGasPrice: '3',
|
|
},
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://swap.metaswap.codefi.network/networks/1/token')
|
|
.withQuery({ address: '0x72c9Fb7ED19D3ce51cea5C56B3e023cd918baaDf' })
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
symbol: 'AGLT',
|
|
type: 'erc20',
|
|
decimals: '18',
|
|
address: '0x72c9fb7ed19d3ce51cea5c56b3e023cd918baadf',
|
|
occurences: 1,
|
|
aggregators: ['dynamic'],
|
|
},
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet(
|
|
'https://gas-api.metaswap.codefi.network/networks/1/suggestedGasFees',
|
|
)
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
low: {
|
|
suggestedMaxPriorityFeePerGas: '1',
|
|
suggestedMaxFeePerGas: '20.44436136',
|
|
minWaitTimeEstimate: 15000,
|
|
maxWaitTimeEstimate: 30000,
|
|
},
|
|
medium: {
|
|
suggestedMaxPriorityFeePerGas: '1.5',
|
|
suggestedMaxFeePerGas: '25.80554517',
|
|
minWaitTimeEstimate: 15000,
|
|
maxWaitTimeEstimate: 45000,
|
|
},
|
|
high: {
|
|
suggestedMaxPriorityFeePerGas: '2',
|
|
suggestedMaxFeePerGas: '27.277766977',
|
|
minWaitTimeEstimate: 15000,
|
|
maxWaitTimeEstimate: 60000,
|
|
},
|
|
estimatedBaseFee: '19.444436136',
|
|
networkCongestion: 0.14685,
|
|
latestPriorityFeeRange: ['0.378818859', '6.555563864'],
|
|
historicalPriorityFeeRange: ['0.1', '248.262969261'],
|
|
historicalBaseFeeRange: ['14.146999781', '28.825256275'],
|
|
priorityFeeTrend: 'down',
|
|
baseFeeTrend: 'up',
|
|
},
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://swap.metaswap.codefi.network/featureFlags')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: [
|
|
{
|
|
ethereum: {
|
|
fallbackToV1: false,
|
|
mobileActive: true,
|
|
extensionActive: true,
|
|
},
|
|
bsc: {
|
|
fallbackToV1: false,
|
|
mobileActive: true,
|
|
extensionActive: true,
|
|
},
|
|
polygon: {
|
|
fallbackToV1: false,
|
|
mobileActive: true,
|
|
extensionActive: true,
|
|
},
|
|
avalanche: {
|
|
fallbackToV1: false,
|
|
mobileActive: true,
|
|
extensionActive: true,
|
|
},
|
|
smartTransactions: {
|
|
mobileActive: false,
|
|
extensionActive: false,
|
|
},
|
|
updated_at: '2022-03-17T15:54:00.360Z',
|
|
},
|
|
],
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://token-api.metaswap.codefi.network/tokens/1337')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: [
|
|
{
|
|
address: '0x0d8775f648430679a709e98d2b0cb6250d2887ef',
|
|
symbol: 'BAT',
|
|
decimals: 18,
|
|
name: 'Basic Attention Token',
|
|
iconUrl:
|
|
'https://assets.coingecko.com/coins/images/677/thumb/basic-attention-token.png?1547034427',
|
|
aggregators: [
|
|
'aave',
|
|
'bancor',
|
|
'coinGecko',
|
|
'oneInch',
|
|
'paraswap',
|
|
'pmm',
|
|
'zapper',
|
|
'zerion',
|
|
'zeroEx',
|
|
],
|
|
occurrences: 9,
|
|
},
|
|
],
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://swap.metaswap.codefi.network/networks/1/tokens')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: [
|
|
{
|
|
name: 'Ethereum',
|
|
symbol: 'ETH',
|
|
decimals: 18,
|
|
type: 'native',
|
|
iconUrl:
|
|
'https://token.metaswap.codefi.network/assets/nativeCurrencyLogos/ethereum.svg',
|
|
coingeckoId: 'ethereum',
|
|
address: '0x0000000000000000000000000000000000000000',
|
|
occurrences: 100,
|
|
aggregators: [],
|
|
},
|
|
{
|
|
address: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
symbol: 'DAI',
|
|
decimals: 18,
|
|
name: 'Dai Stablecoin',
|
|
iconUrl:
|
|
'https://crypto.com/price/coin-data/icon/DAI/color_icon.png',
|
|
type: 'erc20',
|
|
aggregators: [
|
|
'aave',
|
|
'bancor',
|
|
'cmc',
|
|
'cryptocom',
|
|
'coinGecko',
|
|
'oneInch',
|
|
'pmm',
|
|
'zerion',
|
|
'lifi',
|
|
],
|
|
occurrences: 9,
|
|
fees: {
|
|
'0xb0da5965d43369968574d399dbe6374683773a65': 0,
|
|
},
|
|
storage: {
|
|
balance: 2,
|
|
},
|
|
},
|
|
{
|
|
address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
|
symbol: 'USDC',
|
|
decimals: 6,
|
|
name: 'USD Coin',
|
|
iconUrl:
|
|
'https://crypto.com/price/coin-data/icon/USDC/color_icon.png',
|
|
type: 'erc20',
|
|
aggregators: [
|
|
'aave',
|
|
'bancor',
|
|
'cryptocom',
|
|
'coinGecko',
|
|
'oneInch',
|
|
'pmm',
|
|
'zerion',
|
|
'lifi',
|
|
],
|
|
occurrences: 8,
|
|
fees: {},
|
|
storage: {
|
|
balance: 9,
|
|
},
|
|
},
|
|
{
|
|
address: '0xc6bdb96e29c38dc43f014eed44de4106a6a8eb5f',
|
|
symbol: 'INUINU',
|
|
decimals: 18,
|
|
name: 'Inu Inu',
|
|
iconUrl:
|
|
'https://assets.coingecko.com/coins/images/26391/thumb/logo_square_200.png?1657752596',
|
|
type: 'erc20',
|
|
aggregators: ['coinGecko'],
|
|
occurrences: 1,
|
|
},
|
|
],
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://swap.metaswap.codefi.network/networks/1/topAssets')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: [
|
|
{
|
|
address: '0x0000000000000000000000000000000000000000',
|
|
symbol: 'ETH',
|
|
},
|
|
{
|
|
address: '0x6b175474e89094c44da98b954eedeac495271d0f',
|
|
symbol: 'DAI',
|
|
},
|
|
{
|
|
address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
|
|
symbol: 'USDC',
|
|
},
|
|
{
|
|
address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
|
|
symbol: 'USDT',
|
|
},
|
|
],
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://token-api.metaswap.codefi.network/token/0x539')
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {},
|
|
};
|
|
});
|
|
|
|
// It disables loading of token icons, e.g. this URL: https://static.metaswap.codefi.network/api/v1/tokenIcons/1337/0x0000000000000000000000000000000000000000.png
|
|
await server
|
|
.forGet(
|
|
/^https:\/\/static\.metaswap\.codefi\.network\/api\/v1\/tokenIcons\/1337\/.*\.png/u,
|
|
)
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
};
|
|
});
|
|
|
|
await server
|
|
.forGet('https://min-api.cryptocompare.com/data/price')
|
|
.withQuery({ fsym: 'ETH', tsyms: 'USD' })
|
|
.thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: {
|
|
USD: '1700',
|
|
},
|
|
};
|
|
});
|
|
|
|
testSpecificMock(server);
|
|
|
|
// Mocks below this line can be overridden by test-specific mocks
|
|
|
|
await server.forGet(STALELIST_URL).thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: emptyStalelist,
|
|
};
|
|
});
|
|
|
|
await server.forGet(HOTLIST_URL).thenCallback(() => {
|
|
return {
|
|
statusCode: 200,
|
|
json: emptyHotlist,
|
|
};
|
|
});
|
|
}
|
|
|
|
module.exports = { setupMocking };
|