UNPKG

mev-inspect

Version:

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

97 lines 3.77 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Inspector_instances, _Inspector_getTxMev, _Inspector_getMev; import Chain from '../chain.js'; import { groupBy } from '../utils.js'; import { getAssets, fetchAssetTypes, classify } from './mev.js'; import { getBlockTraces, getTransactionTrace } from './traces.js'; class Inspector { constructor(chainId, provider) { _Inspector_instances.add(this); Object.defineProperty(this, "chainId", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "provider", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "chain", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.chainId = chainId; this.provider = provider; this.chain = new Chain(provider); } async tx(hash) { const receipt = await this.chain.getReceipt(hash); if (!receipt) { return []; } return await __classPrivateFieldGet(this, _Inspector_instances, "m", _Inspector_getTxMev).call(this, this.provider, receipt, hash); } async block(number) { const logs = await this.chain.getBlockReceipts(number); return await __classPrivateFieldGet(this, _Inspector_instances, "m", _Inspector_getMev).call(this, this.provider, logs, number); } async receipts(receipts) { const receiptsByBlock = groupBy(receipts, (receipt) => receipt.blockNumber.toString()); const mev = []; for (const block in receiptsByBlock) { const number = parseInt(block); const blockReceipts = receiptsByBlock[block]; const blockMev = await __classPrivateFieldGet(this, _Inspector_instances, "m", _Inspector_getMev).call(this, this.provider, blockReceipts, number); for (const mevItem of blockMev) { mev.push(mevItem); } } return mev; } } _Inspector_instances = new WeakSet(), _Inspector_getTxMev = async function _Inspector_getTxMev(provider, receipt, hash) { const receiptMap = { [hash]: receipt, }; const trace = await getTransactionTrace(provider, hash); if (!trace) { return []; } const traceMap = { [hash]: trace, }; const assets = getAssets([receipt]); await fetchAssetTypes(provider, assets); return classify(traceMap, receiptMap); }, _Inspector_getMev = async function _Inspector_getMev(provider, receipts, block) { if (receipts.length === 0) { return []; } const receiptMap = groupReceiptsByTransaction(receipts); const traces = await getBlockTraces(provider, block); if (!traces) { return []; } const assets = getAssets(receipts); await fetchAssetTypes(provider, assets); return classify(traces, receiptMap); }; function groupReceiptsByTransaction(receipts) { const group = {}; for (const receipt of receipts) { const hash = receipt.hash; group[hash] = receipt; } return group; } export default Inspector; //# sourceMappingURL=inspector.js.map