diff --git a/lib/index.d.ts b/lib/index.d.ts index 749ebb9..5d95bdf 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -18,3 +18,4 @@ export * from './range'; export * from './readLinesFromUrlInBatches'; export * from './retry'; export * from './state'; +export * from './traceFilter'; diff --git a/lib/index.js b/lib/index.js index 5b8bc92..e4b6f53 100644 --- a/lib/index.js +++ b/lib/index.js @@ -35,4 +35,5 @@ __exportStar(require("./range"), exports); __exportStar(require("./readLinesFromUrlInBatches"), exports); __exportStar(require("./retry"), exports); __exportStar(require("./state"), exports); +__exportStar(require("./traceFilter"), exports); //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/lib/index.js.map b/lib/index.js.map index 62fb3f2..019a7fa 100644 --- a/lib/index.js.map +++ b/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uBAAuB;AACvB,kDAA+B;AAC/B,0DAAuC;AACvC,iDAA8B;AAC9B,uDAAoC;AACpC,8CAA2B;AAC3B,0CAAuB;AACvB,wCAAqB;AACrB,8CAA2B;AAC3B,4CAAyB;AACzB,8CAA2B;AAC3B,yCAAsB;AACtB,8CAA2B;AAC3B,kDAA+B;AAC/B,6CAA0B;AAC1B,qDAAkC;AAClC,8CAA2B;AAC3B,0CAAuB;AACvB,8DAA2C;AAC3C,0CAAuB;AACvB,0CAAuB"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uBAAuB;AACvB,kDAA+B;AAC/B,0DAAuC;AACvC,iDAA8B;AAC9B,uDAAoC;AACpC,8CAA2B;AAC3B,0CAAuB;AACvB,wCAAqB;AACrB,8CAA2B;AAC3B,4CAAyB;AACzB,8CAA2B;AAC3B,yCAAsB;AACtB,8CAA2B;AAC3B,kDAA+B;AAC/B,6CAA0B;AAC1B,qDAAkC;AAClC,8CAA2B;AAC3B,0CAAuB;AACvB,8DAA2C;AAC3C,0CAAuB;AACvB,0CAAuB;AACvB,gDAA6B"} \ No newline at end of file diff --git a/lib/jsonify.d.ts b/lib/jsonify.d.ts index b22eb1f..fe0599f 100644 --- a/lib/jsonify.d.ts +++ b/lib/jsonify.d.ts @@ -1 +1 @@ -export declare const jsonify: (value: any, customReplacer?: (key: string, value: unknown) => unknown) => string; +export declare const jsonify: (value: any, customReplacer?: (key: string, value: unknown) => unknown, indent?: number) => string; diff --git a/lib/jsonify.js b/lib/jsonify.js index 84a962a..e1b843e 100644 --- a/lib/jsonify.js +++ b/lib/jsonify.js @@ -9,6 +9,6 @@ function replacer(key, value) { return value; } } -const jsonify = (value, customReplacer) => JSON.stringify(value, (key, value) => replacer(key, customReplacer?.(key, value) ?? value)); +const jsonify = (value, customReplacer, indent) => JSON.stringify(value, (key, value) => replacer(key, customReplacer?.(key, value) ?? value), indent); exports.jsonify = jsonify; //# sourceMappingURL=jsonify.js.map \ No newline at end of file diff --git a/lib/jsonify.js.map b/lib/jsonify.js.map index 72f2b27..c60965a 100644 --- a/lib/jsonify.js.map +++ b/lib/jsonify.js.map @@ -1 +1 @@ -{"version":3,"file":"jsonify.js","sourceRoot":"","sources":["../src/jsonify.ts"],"names":[],"mappings":";;;AAAA,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAEM,MAAM,OAAO,GAAG,CACrB,KAAU,EACV,cAAyD,EACzD,EAAE,CACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACnC,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,CACrD,CAAA;AANU,QAAA,OAAO,WAMjB"} \ No newline at end of file +{"version":3,"file":"jsonify.js","sourceRoot":"","sources":["../src/jsonify.ts"],"names":[],"mappings":";;;AAAA,SAAS,QAAQ,CAAC,GAAW,EAAE,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAEM,MAAM,OAAO,GAAG,CACrB,KAAU,EACV,cAAyD,EACzD,MAAe,EACf,EAAE,CACF,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACnC,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,EACpD,MAAM,CACP,CAAA;AARU,QAAA,OAAO,WAQjB"} \ No newline at end of file diff --git a/lib/processor.d.ts b/lib/processor.d.ts index 3d119f6..dfb4e4e 100644 --- a/lib/processor.d.ts +++ b/lib/processor.d.ts @@ -1,29 +1,98 @@ import { Chain } from 'viem'; -import { DataHandlerContext, EvmBatchProcessor, EvmBatchProcessorFields } from '@subsquid/evm-processor'; +import { DataHandlerContext, EvmBatchProcessor, EvmBatchProcessorFields, FieldSelection } from '@subsquid/evm-processor'; import { Store } from '@subsquid/typeorm-store'; import './polyfills/rpc-issues'; -export declare const createEvmBatchProcessor: (config: ChainConfig) => EvmBatchProcessor<{ +export declare const createEvmBatchProcessor: (config: ChainConfig, options?: { + fields: FieldSelection; +}) => EvmBatchProcessor<{ transaction: { - from: true; - to: true; - hash: true; - gasUsed: true; - effectiveGasPrice: true; - input: true; - status: true; + hash: boolean; + nonce?: boolean | undefined; + gasUsed: boolean; + sighash: boolean; + from: boolean; + to: boolean; + gas: boolean; + gasPrice?: boolean | undefined; + maxFeePerGas?: boolean | undefined; + maxPriorityFeePerGas?: boolean | undefined; + input: boolean; + value: boolean; + v?: boolean | undefined; + r?: boolean | undefined; + s?: boolean | undefined; + yParity?: boolean | undefined; + chainId?: boolean | undefined; + authorizationList?: boolean | undefined; + cumulativeGasUsed?: boolean | undefined; + effectiveGasPrice?: boolean | undefined; + contractAddress?: boolean | undefined; + type?: boolean | undefined; + status: boolean; + l1Fee?: boolean | undefined; + l1FeeScalar?: boolean | undefined; + l1GasPrice?: boolean | undefined; + l1GasUsed?: boolean | undefined; + l1BlobBaseFee?: boolean | undefined; + l1BlobBaseFeeScalar?: boolean | undefined; + l1BaseFeeScalar?: boolean | undefined; }; log: { - transactionHash: true; - topics: true; - data: true; + transactionHash: boolean; + address?: boolean | undefined; + data: boolean; + topics: boolean; }; trace: { - callFrom: true; - callTo: true; - callSighash: true; - callValue: true; - callInput: true; - createResultAddress: true; + subtraces?: boolean | undefined; + error?: boolean | undefined; + revertReason?: boolean | undefined; + createFrom?: boolean | undefined; + createGas?: boolean | undefined; + createValue?: boolean | undefined; + createInit?: boolean | undefined; + createResultGasUsed?: boolean | undefined; + createResultAddress: boolean; + createResultCode?: boolean | undefined; + callFrom: boolean; + callGas?: boolean | undefined; + callValue: boolean; + callSighash: boolean; + callTo: boolean; + callInput: boolean; + callCallType?: boolean | undefined; + callResultGasUsed?: boolean | undefined; + callResultOutput?: boolean | undefined; + suicideAddress: boolean; + suicideRefundAddress: boolean; + suicideBalance: boolean; + rewardValue?: boolean | undefined; + rewardType?: boolean | undefined; + rewardAuthor?: boolean | undefined; + }; + block?: { + nonce?: boolean | undefined; + sha3Uncles?: boolean | undefined; + logsBloom?: boolean | undefined; + transactionsRoot?: boolean | undefined; + stateRoot?: boolean | undefined; + receiptsRoot?: boolean | undefined; + mixHash?: boolean | undefined; + miner?: boolean | undefined; + difficulty?: boolean | undefined; + totalDifficulty?: boolean | undefined; + extraData?: boolean | undefined; + size?: boolean | undefined; + gasLimit?: boolean | undefined; + gasUsed?: boolean | undefined; + timestamp?: boolean | undefined; + baseFeePerGas?: boolean | undefined; + l1BlockNumber?: boolean | undefined; + }; + stateDiff?: { + kind?: boolean | undefined; + prev?: boolean | undefined; + next?: boolean | undefined; }; }>; export interface SquidProcessor { diff --git a/lib/processor.js b/lib/processor.js index 94de623..6a40fab 100644 --- a/lib/processor.js +++ b/lib/processor.js @@ -18,7 +18,7 @@ const processing_stats_1 = require("./processing-stats"); require("./polyfills/rpc-issues"); dayjs_1.default.extend(duration_1.default); dayjs_1.default.extend(utc_1.default); -const createEvmBatchProcessor = (config) => { +const createEvmBatchProcessor = (config, options) => { const url = config.endpoints[0] || 'http://localhost:8545'; console.log('rpc url', url); const processor = new evm_processor_1.EvmBatchProcessor() @@ -33,23 +33,24 @@ const createEvmBatchProcessor = (config) => { }) .setFinalityConfirmation(10) .setFields({ + ...options?.fields, transaction: { from: true, to: true, hash: true, gasUsed: true, - effectiveGasPrice: true, - // gas: true, - // gasPrice: true, - // value: true, - // sighash: true, + gas: true, + value: true, + sighash: true, input: true, status: true, + ...options?.fields?.transaction, }, log: { transactionHash: true, topics: true, data: true, + ...options?.fields?.log, }, trace: { callFrom: true, @@ -58,6 +59,10 @@ const createEvmBatchProcessor = (config) => { callValue: true, callInput: true, createResultAddress: true, + suicideRefundAddress: true, + suicideAddress: true, + suicideBalance: true, + ...options?.fields?.trace, }, }); if (process.env.DISABLE_ARCHIVE !== 'true') { diff --git a/lib/processor.js.map b/lib/processor.js.map index 8c90022..8c8cc51 100644 --- a/lib/processor.js.map +++ b/lib/processor.js.map @@ -1 +1 @@ -{"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"processor.js","sourceRoot":"","sources":["../src/processor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/traceFilter.d.ts b/lib/traceFilter.d.ts new file mode 100644 index 0000000..fb202d9 --- /dev/null +++ b/lib/traceFilter.d.ts @@ -0,0 +1,25 @@ +import { Trace } from './processor'; +type TraceType = 'call' | 'create' | 'suicide' | 'reward'; +type TraceFilterParams = { + type: TraceType[]; + callFrom?: string[]; + callTo?: string[]; + callSighash?: string[]; + suicideRefundAddress?: string[]; + transaction?: boolean; + transactionLogs?: boolean; + range?: { + from: number; + to?: number; + }; + error?: boolean; +}; +/** + * Helper to create and match traces. + */ +export declare const traceFilter: (filter: TraceFilterParams) => { + readonly value: TraceFilterParams; + readonly matches: (trace: Trace) => boolean; +}; +export type TraceFilter = ReturnType; +export {}; diff --git a/lib/traceFilter.js b/lib/traceFilter.js new file mode 100644 index 0000000..10629d0 --- /dev/null +++ b/lib/traceFilter.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.traceFilter = void 0; +const lower = (hex) => hex.toLowerCase(); +/** + * Helper to create and match traces. + */ +const traceFilter = (filter) => { + const error = filter.error; + filter = { + type: filter.type, + callFrom: filter.callFrom?.map(lower), + callTo: filter.callTo?.map(lower), + callSighash: filter.callSighash?.map(lower), + suicideRefundAddress: filter.suicideRefundAddress?.map(lower), + transaction: filter.transaction ?? true, + range: filter.range, + }; + return { + value: filter, + matches(trace) { + if (filter.type && !filter.type.includes(trace.type)) + return false; + if (filter.callFrom && trace.type === 'call' && !filter.callFrom.includes(trace.action.from)) + return false; + if (filter.callTo && trace.type === 'call' && !filter.callTo.includes(trace.action.to)) + return false; + if (filter.callSighash && trace.type === 'call' && !filter.callSighash.includes(trace.action.sighash)) + return false; + if (filter.suicideRefundAddress && + trace.type === 'suicide' && + !filter.suicideRefundAddress.includes(trace.action.refundAddress)) + return false; + if (filter.range && + (trace.block.height < filter.range.from || (filter.range.to && trace.block.height > filter.range.to))) { + return false; + } + if (!!error !== !!trace.error) { + return false; + } + return true; + }, + }; +}; +exports.traceFilter = traceFilter; +//# sourceMappingURL=traceFilter.js.map \ No newline at end of file diff --git a/lib/traceFilter.js.map b/lib/traceFilter.js.map new file mode 100644 index 0000000..0381086 --- /dev/null +++ b/lib/traceFilter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"traceFilter.js","sourceRoot":"","sources":["../src/traceFilter.ts"],"names":[],"mappings":";;;AAgBA,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;AAEhD;;GAEG;AACI,MAAM,WAAW,GAAG,CAAC,MAAyB,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC1B,MAAM,GAAG;QACP,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;QAC3C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,KAAK,CAAC;QAC7D,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAA;IACD,OAAO;QACL,KAAK,EAAE,MAAM;QACb,OAAO,CAAC,KAAY;YAClB,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YAClE,IAAI,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC1G,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAA;YACpG,IAAI,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;gBACnG,OAAO,KAAK,CAAA;YACd,IACE,MAAM,CAAC,oBAAoB;gBAC3B,KAAK,CAAC,IAAI,KAAK,SAAS;gBACxB,CAAC,MAAM,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC;gBAEjE,OAAO,KAAK,CAAA;YAEd,IACE,MAAM,CAAC,KAAK;gBACZ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EACrG,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;YACD,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAA;YACd,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;KACO,CAAA;AACZ,CAAC,CAAA;AAtCY,QAAA,WAAW,eAsCvB"} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index e55e71a..52299e3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,4 +19,5 @@ export * from './range' export * from './readLinesFromUrlInBatches' export * from './retry' export * from './state' +export * from './traceFilter' diff --git a/src/jsonify.ts b/src/jsonify.ts index edc4e20..fd10db7 100644 --- a/src/jsonify.ts +++ b/src/jsonify.ts @@ -9,7 +9,9 @@ function replacer(key: string, value: unknown) { export const jsonify = ( value: any, customReplacer?: (key: string, value: unknown) => unknown, + indent?: number, ) => JSON.stringify(value, (key, value) => replacer(key, customReplacer?.(key, value) ?? value), + indent, ) diff --git a/src/processor.ts b/src/processor.ts index 8f5d307..1cc393f 100644 --- a/src/processor.ts +++ b/src/processor.ts @@ -6,7 +6,7 @@ import { compact } from 'lodash' import { Chain } from 'viem' import { arbitrum, base, mainnet, sonic } from 'viem/chains' -import { DataHandlerContext, EvmBatchProcessor, EvmBatchProcessorFields } from '@subsquid/evm-processor' +import { DataHandlerContext, EvmBatchProcessor, EvmBatchProcessorFields, FieldSelection } from '@subsquid/evm-processor' import { Store, TypeormDatabase } from '@subsquid/typeorm-store' import { blockFrequencyTracker } from './blockFrequencyUpdater' import { calculateBlockRate } from './calculateBlockRate' @@ -17,7 +17,9 @@ import './polyfills/rpc-issues' dayjs.extend(duration) dayjs.extend(utc) -export const createEvmBatchProcessor = (config: ChainConfig) => { +export const createEvmBatchProcessor = (config: ChainConfig, options?: { + fields: FieldSelection +}) => { const url = config.endpoints[0] || 'http://localhost:8545' console.log('rpc url', url) const processor = new EvmBatchProcessor() @@ -32,23 +34,24 @@ export const createEvmBatchProcessor = (config: ChainConfig) => { }) .setFinalityConfirmation(10) .setFields({ + ...options?.fields, transaction: { from: true, to: true, hash: true, gasUsed: true, - effectiveGasPrice: true, - // gas: true, - // gasPrice: true, - // value: true, - // sighash: true, + gas: true, + value: true, + sighash: true, input: true, status: true, + ...options?.fields?.transaction, }, log: { transactionHash: true, topics: true, data: true, + ...options?.fields?.log, }, trace: { callFrom: true, @@ -57,6 +60,10 @@ export const createEvmBatchProcessor = (config: ChainConfig) => { callValue: true, callInput: true, createResultAddress: true, + suicideRefundAddress: true, + suicideAddress: true, + suicideBalance: true, + ...options?.fields?.trace, }, }) diff --git a/src/traceFilter.ts b/src/traceFilter.ts new file mode 100644 index 0000000..098dbff --- /dev/null +++ b/src/traceFilter.ts @@ -0,0 +1,62 @@ + +import { Trace } from './processor' + +type TraceType = 'call' | 'create' | 'suicide' | 'reward' +type TraceFilterParams = { + type: TraceType[] + callFrom?: string[] + callTo?: string[] + callSighash?: string[] + suicideRefundAddress?: string[] + transaction?: boolean + transactionLogs?: boolean + range?: { from: number; to?: number } + error?: boolean +} + +const lower = (hex: string) => hex.toLowerCase() + +/** + * Helper to create and match traces. + */ +export const traceFilter = (filter: TraceFilterParams) => { + const error = filter.error + filter = { + type: filter.type, + callFrom: filter.callFrom?.map(lower), + callTo: filter.callTo?.map(lower), + callSighash: filter.callSighash?.map(lower), + suicideRefundAddress: filter.suicideRefundAddress?.map(lower), + transaction: filter.transaction ?? true, + range: filter.range, + } + return { + value: filter, + matches(trace: Trace) { + if (filter.type && !filter.type.includes(trace.type)) return false + if (filter.callFrom && trace.type === 'call' && !filter.callFrom.includes(trace.action.from)) return false + if (filter.callTo && trace.type === 'call' && !filter.callTo.includes(trace.action.to)) return false + if (filter.callSighash && trace.type === 'call' && !filter.callSighash.includes(trace.action.sighash)) + return false + if ( + filter.suicideRefundAddress && + trace.type === 'suicide' && + !filter.suicideRefundAddress.includes(trace.action.refundAddress) + ) + return false + + if ( + filter.range && + (trace.block.height < filter.range.from || (filter.range.to && trace.block.height > filter.range.to)) + ) { + return false + } + if (!!error !== !!trace.error) { + return false + } + return true + }, + } as const +} + +export type TraceFilter = ReturnType