mev-inspect
Version:
A JS port of 'mev-inspect-py' optimised for ease of use.
81 lines • 3.37 kB
JavaScript
import { Coder } from 'abi-coder';
import { getFactoryByAddress, getNftFactoryByAddress, getPoolByAddress, isKnownRouter, isValidFactory, isValidNftFactory, isValidPool, nativeAsset, } from './directory.js';
import aaveV1Classifiers from './items/aaveV1.js';
import aaveV2Classifiers from './items/aaveV2.js';
import aaveV3Classifiers from './items/aaveV3.js';
import balancerV1Classifiers from './items/balancerV1.js';
import balancerV2Classifiers from './items/balancerV2.js';
import bancorV2Classifier from './items/bancorV2.js';
import bancorV3Classifier from './items/bancorV3.js';
import compoundV2Classifiers from './items/compoundV2.js';
import curveV1Classifiers from './items/curveV1.js';
import curveV2Classifiers from './items/curveV2.js';
import erc20Classifier from './items/erc20.js';
import looksRareV1Classifier from './items/looksRareV1.js';
import openseaSeaportClassifier from './items/openseaSeaport.js';
import sudoswapV1Classifier from './items/sudoswapV1.js';
import uniswapV2Classifier from './items/uniswapV2.js';
import uniswapV3Classifier from './items/uniswapV3.js';
import x2y2V1Classifier from './items/x2y2V1.js';
import zeroExV3Classifier from './items/zeroExV3.js';
import zeroExV4Classifier from './items/zeroExV4.js';
function classify(chainId, logs) {
return logs.map((log) => classifyLog(chainId, log)).flat();
}
function classifyLog(chainId, log) {
const events = [];
const classifiers = getClassifiers();
for (const classifier of classifiers) {
const coder = new Coder(classifier.abi);
try {
const { topics, data, address, transactionFrom, transactionHash, transactionIndex, gasUsed, logIndex, blockHash, blockNumber, } = log;
const event = coder.decodeEvent(topics, data);
if (!classifier.isValid(event, address, chainId)) {
continue;
}
const classifiedEvent = {
address,
blockHash,
blockNumber,
transactionFrom,
transactionHash,
transactionIndex,
gasUsed,
logIndex,
classifier,
...event,
};
events.push(classifiedEvent);
}
catch {
continue;
}
}
return events;
}
function getClassifiers() {
return [
...Object.values(balancerV1Classifiers),
...Object.values(balancerV2Classifiers),
bancorV2Classifier.swap,
bancorV3Classifier.swap,
...Object.values(curveV1Classifiers),
...Object.values(curveV2Classifiers),
erc20Classifier.transfer,
looksRareV1Classifier.nftSwap,
openseaSeaportClassifier.nftSwap,
sudoswapV1Classifier.nftSwap,
uniswapV2Classifier.swap,
...Object.values(uniswapV3Classifier),
x2y2V1Classifier.nftSwap,
zeroExV3Classifier.swap,
zeroExV4Classifier.swap,
...Object.values(compoundV2Classifiers),
...Object.values(aaveV1Classifiers),
...Object.values(aaveV2Classifiers),
...Object.values(aaveV3Classifiers),
];
}
export default classify;
export { getFactoryByAddress, getNftFactoryByAddress, getPoolByAddress, isValidFactory, isValidNftFactory, isValidPool, isKnownRouter, nativeAsset, };
//# sourceMappingURL=index.js.map