mev-inspect
Version:
A JS port of 'mev-inspect-py' optimised for ease of use.
89 lines • 2.38 kB
JavaScript
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