UNPKG

mev-inspect

Version:

A JS port of 'mev-inspect-py' optimised for ease of use.

89 lines 2.38 kB
import exchangeAbi from '../../abi/zeroExV3.js'; function isValid(event) { return event.name === 'Fill'; } function getPoolCalls() { return []; } function processPoolCalls(_results, address) { return { factoryAddress: address.toLowerCase(), assets: [], }; } function parse(pool, event) { const { values, transactionFrom, transactionHash: hash, transactionIndex, gasUsed, logIndex, address, blockHash, blockNumber, } = event; const makerAssetData = values.makerAssetData; const takerAssetData = values.takerAssetData; const takerAddress = values.takerAddress.toLowerCase(); const makerAssetFilledAmount = values.makerAssetFilledAmount; const takerAssetFilledAmount = values.takerAssetFilledAmount; const from = takerAddress; const to = takerAddress; const assetIn = getAsset(takerAssetData); const assetOut = getAsset(makerAssetData); const amountIn = takerAssetFilledAmount; const amountOut = makerAssetFilledAmount; if (!assetIn || !assetOut) { return null; } return { contract: { address, protocol: { abi: 'ZeroExV3', factory: pool.factory, }, }, block: { hash: blockHash, number: blockNumber, }, transaction: { from: transactionFrom.toLowerCase(), hash, index: transactionIndex, gasUsed, }, event: { address: address.toLowerCase(), logIndex, }, from, to, assetIn: { type: 'erc20', address: assetIn, }, amountIn, assetOut: { type: 'erc20', address: assetOut, }, amountOut, metadata: {}, }; } function getAsset(assetData) { if (assetData.length === 74 && assetData.startsWith('0xf47261b')) { return `0x${assetData.substring(34).toLowerCase()}`; } else { return null; } } const CLASSIFIER = { swap: { type: 'swap', protocol: 'ZeroExV3', abi: exchangeAbi, isValid, parse, pool: { getCalls: getPoolCalls, processCalls: processPoolCalls, }, }, }; export default CLASSIFIER; //# sourceMappingURL=zeroExV3.js.map