@sentio/sdk 2.13.0-rc.6 → 2.13.0-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,10 @@ import { ListStateStorage, mergeProcessResults } from '@sentio/runtime';
5
5
  import { MoveFetchConfig, } from '@sentio/protos';
6
6
  import { ServerError, Status } from 'nice-grpc';
7
7
  import { parseMoveType } from '../move/index.js';
8
+ const DEFAULT_FETCH_CONFIG = {
9
+ resourceChanges: false,
10
+ allEvents: true,
11
+ };
8
12
  class ResourceHandlder {
9
13
  type;
10
14
  versionInterval;
@@ -32,7 +36,7 @@ export class AptosBaseProcessor {
32
36
  // return undefined
33
37
  // }
34
38
  onTransaction(handler, includedFailed = false, fetchConfig) {
35
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {});
39
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig });
36
40
  // const address = this.config.address
37
41
  // const moduleName = this.moduleName
38
42
  const processor = this;
@@ -53,7 +57,7 @@ export class AptosBaseProcessor {
53
57
  }
54
58
  onMoveEvent(handler, filter, fetchConfig) {
55
59
  let _filters = [];
56
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {});
60
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig });
57
61
  if (Array.isArray(filter)) {
58
62
  _filters = filter;
59
63
  }
@@ -93,7 +97,7 @@ export class AptosBaseProcessor {
93
97
  }
94
98
  onEntryFunctionCall(handler, filter, fetchConfig) {
95
99
  let _filters = [];
96
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {});
100
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig });
97
101
  if (Array.isArray(filter)) {
98
102
  _filters = filter;
99
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"aptos-processor.js","sourceRoot":"","sources":["../../src/aptos/aptos-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { MoveResource, Transaction_UserTransaction, TransactionPayload_EntryFunctionPayload } from './move-types.js'\n\nimport { defaultMoveCoder, MoveCoder } from './move-coder.js'\nimport { AptosBindOptions, AptosNetwork, getChainId } from './network.js'\nimport { AptosContext, AptosResourcesContext } from './context.js'\nimport { EventInstance } from './models.js'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport {\n MoveFetchConfig,\n Data_AptResource,\n HandleInterval,\n ProcessResult,\n Data_AptEvent,\n Data_AptCall,\n} from '@sentio/protos'\nimport { ServerError, Status } from 'nice-grpc'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'\nimport { PromiseOrVoid } from '../core/index.js'\n\ntype IndexConfigure = {\n address: string\n network: AptosNetwork\n startVersion: bigint\n // endSeqNumber?: Long\n}\n\nclass ResourceHandlder {\n type?: string\n versionInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (resource: Data_AptResource) => Promise<ProcessResult>\n}\n\nexport class AptosProcessorState extends ListStateStorage<AptosBaseProcessor> {\n static INSTANCE = new AptosProcessorState()\n}\n\nexport class AptosBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n eventHandlers: EventHandler<Data_AptEvent>[] = []\n callHandlers: CallHandler<Data_AptCall>[] = []\n coder: MoveCoder\n\n constructor(moduleName: string, options: AptosBindOptions) {\n this.moduleName = moduleName\n this.config = configure(options)\n AptosProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n // this.loadTypes(this.coder)\n }\n\n // getABI(): MoveModule | undefined {\n // return undefined\n // }\n\n public onTransaction(\n handler: (transaction: Transaction_UserTransaction, ctx: AptosContext) => PromiseOrVoid,\n includedFailed = false,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const call = data.transaction as Transaction_UserTransaction\n const ctx = new AptosContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n BigInt(data.transaction.version),\n call,\n 0\n )\n await handler(call, ctx)\n return ctx.getProcessResult()\n },\n filters: [{ function: '', includeFailed: includedFailed }],\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onMoveEvent(\n handler: (event: EventInstance, ctx: AptosContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const moduleName = this.moduleName\n\n const processor = this\n const allEventType = new Set(_filters.map((f) => processor.config.address + '::' + f.type))\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as Transaction_UserTransaction\n if (!txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const [idx, evt] of txn.events.entries()) {\n const typeQname = parseMoveType(evt.type).qname\n if (!allEventType.has(typeQname)) {\n continue\n }\n\n const ctx = new AptosContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n BigInt(txn.version),\n txn,\n idx\n )\n const eventInstance = evt as EventInstance\n const decoded = await processor.coder.decodeEvent<any>(eventInstance)\n await handler(decoded || eventInstance, ctx)\n processResults.push(ctx.getProcessResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: TransactionPayload_EntryFunctionPayload, ctx: AptosContext) => PromiseOrVoid,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as Transaction_UserTransaction\n\n const ctx = new AptosContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n BigInt(tx.version),\n tx,\n 0\n )\n if (tx) {\n const payload = tx.payload as TransactionPayload_EntryFunctionPayload\n const decoded = await processor.coder.decodeFunctionPayload(payload)\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n // loadTypes(registry: MoveCoder) {\n // if (registry.contains(this.config.address, this.moduleName)) {\n // return\n // }\n // this.loadTypesInternal(registry)\n // }\n //\n // protected loadTypesInternal(registry: MoveCoder) {\n // // should be override by subclass\n // console.log('')\n // }\n}\n\nexport class AptosAccountProcessorState extends ListStateStorage<AptosResourcesProcessor> {\n static INSTANCE = new AptosAccountProcessorState()\n}\n\nexport class AptosResourcesProcessor {\n config: IndexConfigure\n\n resourcesHandlers: ResourceHandlder[] = []\n\n static bind(options: AptosBindOptions): AptosResourcesProcessor {\n return new AptosResourcesProcessor(options)\n }\n\n protected constructor(options: AptosBindOptions) {\n this.config = configure(options)\n AptosAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n private onInterval(\n handler: (resources: MoveResource[], ctx: AptosResourcesContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n versionInterval: HandleInterval | undefined,\n type: string | undefined\n ): this {\n const processor = this\n this.resourcesHandlers.push({\n handler: async function (data) {\n if (data.timestampMicros > Number.MAX_SAFE_INTEGER) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'timestamp is too large')\n }\n const timestamp = Number(data.timestampMicros)\n\n const ctx = new AptosResourcesContext(\n processor.config.network,\n processor.config.address,\n data.version,\n timestamp\n )\n await handler(data.resources as MoveResource[], ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n versionInterval: versionInterval,\n type: type,\n })\n return this\n }\n\n public onTimeInterval(\n handler: (resources: MoveResource[], ctx: AptosResourcesContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes,\n },\n undefined,\n type\n )\n }\n\n public onVersionInterval(\n handler: (resources: MoveResource[], ctx: AptosResourcesContext) => PromiseOrVoid,\n versionInterval = 100000,\n backfillVersionInterval = 400000,\n typePrefix?: string\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: versionInterval, backfillInterval: backfillVersionInterval },\n typePrefix\n )\n }\n}\n\nfunction configure(options: AptosBindOptions): IndexConfigure {\n let startVersion = 0n\n if (options.startVersion !== undefined) {\n if (typeof options.startVersion === 'number') {\n startVersion = BigInt(options.startVersion)\n } else {\n startVersion = options.startVersion\n }\n }\n\n return {\n startVersion: startVersion,\n address: options.address,\n network: options.network || AptosNetwork.MAIN_NET,\n }\n}\n"]}
1
+ {"version":3,"file":"aptos-processor.js","sourceRoot":"","sources":["../../src/aptos/aptos-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { MoveResource, Transaction_UserTransaction, TransactionPayload_EntryFunctionPayload } from './move-types.js'\n\nimport { defaultMoveCoder, MoveCoder } from './move-coder.js'\nimport { AptosBindOptions, AptosNetwork, getChainId } from './network.js'\nimport { AptosContext, AptosResourcesContext } from './context.js'\nimport { EventInstance } from './models.js'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport {\n MoveFetchConfig,\n Data_AptResource,\n HandleInterval,\n ProcessResult,\n Data_AptEvent,\n Data_AptCall,\n} from '@sentio/protos'\nimport { ServerError, Status } from 'nice-grpc'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'\nimport { PromiseOrVoid } from '../core/index.js'\n\nconst DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n}\n\ntype IndexConfigure = {\n address: string\n network: AptosNetwork\n startVersion: bigint\n // endSeqNumber?: Long\n}\n\nclass ResourceHandlder {\n type?: string\n versionInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (resource: Data_AptResource) => Promise<ProcessResult>\n}\n\nexport class AptosProcessorState extends ListStateStorage<AptosBaseProcessor> {\n static INSTANCE = new AptosProcessorState()\n}\n\nexport class AptosBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n eventHandlers: EventHandler<Data_AptEvent>[] = []\n callHandlers: CallHandler<Data_AptCall>[] = []\n coder: MoveCoder\n\n constructor(moduleName: string, options: AptosBindOptions) {\n this.moduleName = moduleName\n this.config = configure(options)\n AptosProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n // this.loadTypes(this.coder)\n }\n\n // getABI(): MoveModule | undefined {\n // return undefined\n // }\n\n public onTransaction(\n handler: (transaction: Transaction_UserTransaction, ctx: AptosContext) => PromiseOrVoid,\n includedFailed = false,\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const call = data.transaction as Transaction_UserTransaction\n const ctx = new AptosContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n BigInt(data.transaction.version),\n call,\n 0\n )\n await handler(call, ctx)\n return ctx.getProcessResult()\n },\n filters: [{ function: '', includeFailed: includedFailed }],\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onMoveEvent(\n handler: (event: EventInstance, ctx: AptosContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const moduleName = this.moduleName\n\n const processor = this\n const allEventType = new Set(_filters.map((f) => processor.config.address + '::' + f.type))\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as Transaction_UserTransaction\n if (!txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const [idx, evt] of txn.events.entries()) {\n const typeQname = parseMoveType(evt.type).qname\n if (!allEventType.has(typeQname)) {\n continue\n }\n\n const ctx = new AptosContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n BigInt(txn.version),\n txn,\n idx\n )\n const eventInstance = evt as EventInstance\n const decoded = await processor.coder.decodeEvent<any>(eventInstance)\n await handler(decoded || eventInstance, ctx)\n processResults.push(ctx.getProcessResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: TransactionPayload_EntryFunctionPayload, ctx: AptosContext) => PromiseOrVoid,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): this {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as Transaction_UserTransaction\n\n const ctx = new AptosContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n BigInt(tx.version),\n tx,\n 0\n )\n if (tx) {\n const payload = tx.payload as TransactionPayload_EntryFunctionPayload\n const decoded = await processor.coder.decodeFunctionPayload(payload)\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n // loadTypes(registry: MoveCoder) {\n // if (registry.contains(this.config.address, this.moduleName)) {\n // return\n // }\n // this.loadTypesInternal(registry)\n // }\n //\n // protected loadTypesInternal(registry: MoveCoder) {\n // // should be override by subclass\n // console.log('')\n // }\n}\n\nexport class AptosAccountProcessorState extends ListStateStorage<AptosResourcesProcessor> {\n static INSTANCE = new AptosAccountProcessorState()\n}\n\nexport class AptosResourcesProcessor {\n config: IndexConfigure\n\n resourcesHandlers: ResourceHandlder[] = []\n\n static bind(options: AptosBindOptions): AptosResourcesProcessor {\n return new AptosResourcesProcessor(options)\n }\n\n protected constructor(options: AptosBindOptions) {\n this.config = configure(options)\n AptosAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n private onInterval(\n handler: (resources: MoveResource[], ctx: AptosResourcesContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n versionInterval: HandleInterval | undefined,\n type: string | undefined\n ): this {\n const processor = this\n this.resourcesHandlers.push({\n handler: async function (data) {\n if (data.timestampMicros > Number.MAX_SAFE_INTEGER) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'timestamp is too large')\n }\n const timestamp = Number(data.timestampMicros)\n\n const ctx = new AptosResourcesContext(\n processor.config.network,\n processor.config.address,\n data.version,\n timestamp\n )\n await handler(data.resources as MoveResource[], ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n versionInterval: versionInterval,\n type: type,\n })\n return this\n }\n\n public onTimeInterval(\n handler: (resources: MoveResource[], ctx: AptosResourcesContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes,\n },\n undefined,\n type\n )\n }\n\n public onVersionInterval(\n handler: (resources: MoveResource[], ctx: AptosResourcesContext) => PromiseOrVoid,\n versionInterval = 100000,\n backfillVersionInterval = 400000,\n typePrefix?: string\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: versionInterval, backfillInterval: backfillVersionInterval },\n typePrefix\n )\n }\n}\n\nfunction configure(options: AptosBindOptions): IndexConfigure {\n let startVersion = 0n\n if (options.startVersion !== undefined) {\n if (typeof options.startVersion === 'number') {\n startVersion = BigInt(options.startVersion)\n } else {\n startVersion = options.startVersion\n }\n }\n\n return {\n startVersion: startVersion,\n address: options.address,\n network: options.network || AptosNetwork.MAIN_NET,\n }\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers';
2
- import { BlockParams, Network } from 'ethers/providers';
2
+ import { Network } from 'ethers/providers';
3
3
  import { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js';
4
4
  import { AddressType, Data_EthBlock, Data_EthLog, Data_EthTrace, Data_EthTransaction, EthFetchConfig, HandleInterval, ProcessResult } from '@sentio/protos';
5
5
  import { BindOptions } from './bind-options.js';
6
6
  import { PromiseOrVoid } from '../core/promises.js';
7
- import { TypedEvent, TypedCallTrace } from './eth.js';
7
+ import { TypedEvent, TypedCallTrace, RichBlock } from './eth.js';
8
8
  import { ListStateStorage } from '@sentio/runtime';
9
9
  export interface AddressOrTypeEventFilter extends DeferredTopicFilter {
10
10
  addressType?: AddressType;
@@ -45,10 +45,10 @@ export declare class GlobalProcessor {
45
45
  transactionHandler: TransactionHandler[];
46
46
  static bind(config: Omit<BindOptions, 'address'>): GlobalProcessor;
47
47
  constructor(config: Omit<BindOptions, 'address'>);
48
- onBlockInterval(handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number): this;
49
- onTimeInterval(handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number): this;
48
+ onBlockInterval(handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number): this;
49
+ onTimeInterval(handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number): this;
50
50
  getChainId(): number;
51
- onInterval(handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined): this;
51
+ onInterval(handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined): this;
52
52
  onTransaction(handler: (transaction: TransactionResponseParams, ctx: GlobalContext) => PromiseOrVoid, fetchConfig?: Partial<EthFetchConfig>): this;
53
53
  }
54
54
  export declare abstract class BaseProcessor<TContract extends BaseContract, TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>> {
@@ -60,9 +60,9 @@ export declare abstract class BaseProcessor<TContract extends BaseContract, TBou
60
60
  protected abstract CreateBoundContractView(): TBoundContractView;
61
61
  getChainId(): number;
62
62
  onEvent(handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, filter: DeferredTopicFilter | DeferredTopicFilter[], fetchConfig?: Partial<EthFetchConfig>): this;
63
- onBlockInterval(handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number): this;
64
- onTimeInterval(handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number): this;
65
- onInterval(handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined): this;
63
+ onBlockInterval(handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number): this;
64
+ onTimeInterval(handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number): this;
65
+ onInterval(handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined): this;
66
66
  onAllEvents(handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, fetchConfig?: Partial<EthFetchConfig>): this;
67
67
  onTrace(signatures: string | string[], handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, fetchConfig?: Partial<EthFetchConfig>): this;
68
68
  onAllTraces(handler: (event: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, fetchConfig?: Partial<EthFetchConfig>): this;
@@ -2,7 +2,6 @@ import { ContractContext, GlobalContext } from './context.js';
2
2
  import { EthFetchConfig, ProcessResult, } from '@sentio/protos';
3
3
  import { ServerError, Status } from 'nice-grpc';
4
4
  import { fixEmptyKey, formatEthData } from './eth.js';
5
- import * as console from 'console';
6
5
  import { getNetworkFromCtxOrNetworkish } from './provider.js';
7
6
  import sha3 from 'js-sha3';
8
7
  import { ListStateStorage } from '@sentio/runtime';
@@ -1 +1 @@
1
- {"version":3,"file":"base-processor.js","sourceRoot":"","sources":["../../src/eth/base-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers'\nimport { BlockParams, Network } from 'ethers/providers'\n\nimport { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js'\nimport {\n AddressType,\n Data_EthBlock,\n Data_EthLog,\n Data_EthTrace,\n Data_EthTransaction,\n EthFetchConfig,\n HandleInterval,\n ProcessResult,\n} from '@sentio/protos'\nimport { BindOptions } from './bind-options.js'\nimport { PromiseOrVoid } from '../core/promises.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { fixEmptyKey, TypedEvent, TypedCallTrace, formatEthData } from './eth.js'\nimport * as console from 'console'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\nimport sha3 from 'js-sha3'\nimport { ListStateStorage } from '@sentio/runtime'\n\nexport interface AddressOrTypeEventFilter extends DeferredTopicFilter {\n addressType?: AddressType\n address?: string\n}\n\nexport class EventsHandler {\n filters: AddressOrTypeEventFilter[]\n handler: (event: Data_EthLog) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class TraceHandler {\n signatures: string[]\n handler: (trace: Data_EthTrace) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class BlockHandler {\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (block: Data_EthBlock) => Promise<ProcessResult>\n}\n\nexport class TransactionHandler {\n handler: (block: Data_EthTransaction) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nclass BindInternalOptions {\n address: string\n network: Network\n name: string\n startBlock: bigint\n endBlock?: bigint\n}\n\nexport class GlobalProcessorState extends ListStateStorage<GlobalProcessor> {\n static INSTANCE = new GlobalProcessorState()\n}\n\nexport class GlobalProcessor {\n config: BindInternalOptions\n blockHandlers: BlockHandler[] = []\n transactionHandler: TransactionHandler[] = []\n\n static bind(config: Omit<BindOptions, 'address'>): GlobalProcessor {\n const processor = new GlobalProcessor(config)\n GlobalProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(config: Omit<BindOptions, 'address'>) {\n this.config = {\n address: '*',\n name: config.name || 'Global',\n network: getNetworkFromCtxOrNetworkish(config.network),\n startBlock: 0n,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n public onBlockInterval(\n handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000\n ): this {\n return this.onInterval(handler, undefined, {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n })\n }\n\n public onTimeInterval(\n handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined\n )\n }\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n public onInterval(\n handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n ): this {\n const chainId = this.getChainId()\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const ctx = new GlobalContext(chainId, new Date(block.timestamp * 1000), block, undefined, undefined)\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n })\n return this\n }\n\n public onTransaction(\n handler: (transaction: TransactionResponseParams, ctx: GlobalContext) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n this.transactionHandler.push({\n handler: async function (data: Data_EthTransaction) {\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n\n if (!transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is empty')\n }\n const ctx = new GlobalContext(chainId, data.timestamp, block, undefined, trace, transaction, transactionReceipt)\n await handler(transaction, ctx)\n return ctx.getProcessResult()\n },\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n}\n\nexport abstract class BaseProcessor<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n blockHandlers: BlockHandler[] = []\n eventHandlers: EventsHandler[] = []\n traceHandlers: TraceHandler[] = []\n\n config: BindInternalOptions\n\n constructor(config: BindOptions) {\n this.config = {\n address: config.address,\n name: config.name || '',\n network: getNetworkFromCtxOrNetworkish(config.network),\n startBlock: 0n,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n protected abstract CreateBoundContractView(): TBoundContractView\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n public onEvent(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: DeferredTopicFilter | DeferredTopicFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n let _filters: DeferredTopicFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const contractName = this.config.name\n const processor = this\n this.eventHandlers.push({\n filters: _filters,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthLog) {\n const { log, block, transaction, transactionReceipt } = formatEthData(data)\n if (!log) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Log is empty')\n }\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n log,\n undefined,\n transaction,\n transactionReceipt\n )\n const logParam = log as any as { topics: Array<string>; data: string }\n\n const parsed = contractView.rawContract.interface.parseLog(logParam)\n\n if (parsed) {\n const event: TypedEvent = { ...log, name: parsed.name, args: fixEmptyKey(parsed) }\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000\n ): this {\n return this.onInterval(handler, undefined, {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n })\n }\n\n public onTimeInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined\n )\n }\n\n public onInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n ): this {\n const chainId = this.getChainId()\n const processor = this\n const contractName = this.config.name\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n new Date(block.timestamp * 1000),\n block,\n undefined,\n undefined\n )\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n })\n return this\n }\n\n public onAllEvents(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const _filters: DeferredTopicFilter[] = []\n const tmpContract = this.CreateBoundContractView()\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'event') {\n const filter = tmpContract.rawContract.filters[fragment.format()]\n _filters.push(filter())\n }\n }\n return this.onEvent(\n function (log, ctx) {\n return handler(log, ctx)\n },\n _filters,\n fetchConfig\n )\n }\n\n public onTrace(\n signatures: string | string[],\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n const contractName = this.config.name\n const processor = this\n if (typeof signatures === 'string') {\n signatures = [signatures]\n }\n\n this.traceHandlers.push({\n signatures,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthTrace) {\n const contractView = processor.CreateBoundContractView()\n const contractInterface = contractView.rawContract.interface\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n const sighash = trace?.action.input?.slice(0, 10)\n if (!sighash) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace has no sighash')\n }\n const fragment = contractInterface.getFunction(sighash)\n\n if (!trace || !fragment) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace is null')\n }\n const typedTrace = trace as TypedCallTrace\n typedTrace.name = fragment.name\n typedTrace.functionSignature = fragment.format()\n // const trace = data.trace as Trace\n if (!trace?.action.input) {\n return ProcessResult.fromPartial({})\n }\n const traceData = '0x' + trace.action.input.slice(10)\n try {\n typedTrace.args = contractInterface.getAbiCoder().decode(fragment.inputs, traceData, true)\n } catch (e) {\n if (!trace.error) {\n throw e\n }\n console.error('Failed to decode successful trace', e)\n }\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n undefined,\n trace,\n transaction,\n transactionReceipt\n )\n await handler(typedTrace, ctx)\n return ctx.getProcessResult()\n },\n })\n return this\n }\n\n public onAllTraces(\n handler: (event: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const tmpContract = this.CreateBoundContractView()\n const sighashes = []\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'function') {\n const signature = fragment.format()\n const test = new TextEncoder().encode(signature)\n const sighash = '0x' + sha3.keccak_256(test).substring(0, 8)\n sighashes.push(sighash)\n }\n }\n return this.onTrace(\n sighashes,\n function (trace, ctx) {\n return handler(trace, ctx)\n },\n fetchConfig\n )\n }\n}\n"]}
1
+ {"version":3,"file":"base-processor.js","sourceRoot":"","sources":["../../src/eth/base-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers'\nimport { Network } from 'ethers/providers'\n\nimport { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js'\nimport {\n AddressType,\n Data_EthBlock,\n Data_EthLog,\n Data_EthTrace,\n Data_EthTransaction,\n EthFetchConfig,\n HandleInterval,\n ProcessResult,\n} from '@sentio/protos'\nimport { BindOptions } from './bind-options.js'\nimport { PromiseOrVoid } from '../core/promises.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { fixEmptyKey, TypedEvent, TypedCallTrace, formatEthData, RichBlock } from './eth.js'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\nimport sha3 from 'js-sha3'\nimport { ListStateStorage } from '@sentio/runtime'\n\nexport interface AddressOrTypeEventFilter extends DeferredTopicFilter {\n addressType?: AddressType\n address?: string\n}\n\nexport class EventsHandler {\n filters: AddressOrTypeEventFilter[]\n handler: (event: Data_EthLog) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class TraceHandler {\n signatures: string[]\n handler: (trace: Data_EthTrace) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class BlockHandler {\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (block: Data_EthBlock) => Promise<ProcessResult>\n}\n\nexport class TransactionHandler {\n handler: (block: Data_EthTransaction) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nclass BindInternalOptions {\n address: string\n network: Network\n name: string\n startBlock: bigint\n endBlock?: bigint\n}\n\nexport class GlobalProcessorState extends ListStateStorage<GlobalProcessor> {\n static INSTANCE = new GlobalProcessorState()\n}\n\nexport class GlobalProcessor {\n config: BindInternalOptions\n blockHandlers: BlockHandler[] = []\n transactionHandler: TransactionHandler[] = []\n\n static bind(config: Omit<BindOptions, 'address'>): GlobalProcessor {\n const processor = new GlobalProcessor(config)\n GlobalProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(config: Omit<BindOptions, 'address'>) {\n this.config = {\n address: '*',\n name: config.name || 'Global',\n network: getNetworkFromCtxOrNetworkish(config.network),\n startBlock: 0n,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n public onBlockInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000\n ): this {\n return this.onInterval(handler, undefined, {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n })\n }\n\n public onTimeInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined\n )\n }\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n public onInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n ): this {\n const chainId = this.getChainId()\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const ctx = new GlobalContext(chainId, new Date(block.timestamp * 1000), block, undefined, undefined)\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n })\n return this\n }\n\n public onTransaction(\n handler: (transaction: TransactionResponseParams, ctx: GlobalContext) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n this.transactionHandler.push({\n handler: async function (data: Data_EthTransaction) {\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n\n if (!transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is empty')\n }\n const ctx = new GlobalContext(chainId, data.timestamp, block, undefined, trace, transaction, transactionReceipt)\n await handler(transaction, ctx)\n return ctx.getProcessResult()\n },\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n}\n\nexport abstract class BaseProcessor<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n blockHandlers: BlockHandler[] = []\n eventHandlers: EventsHandler[] = []\n traceHandlers: TraceHandler[] = []\n\n config: BindInternalOptions\n\n constructor(config: BindOptions) {\n this.config = {\n address: config.address,\n name: config.name || '',\n network: getNetworkFromCtxOrNetworkish(config.network),\n startBlock: 0n,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n protected abstract CreateBoundContractView(): TBoundContractView\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n public onEvent(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: DeferredTopicFilter | DeferredTopicFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n let _filters: DeferredTopicFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const contractName = this.config.name\n const processor = this\n this.eventHandlers.push({\n filters: _filters,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthLog) {\n const { log, block, transaction, transactionReceipt } = formatEthData(data)\n if (!log) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Log is empty')\n }\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n log,\n undefined,\n transaction,\n transactionReceipt\n )\n const logParam = log as any as { topics: Array<string>; data: string }\n\n const parsed = contractView.rawContract.interface.parseLog(logParam)\n\n if (parsed) {\n const event: TypedEvent = { ...log, name: parsed.name, args: fixEmptyKey(parsed) }\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000\n ): this {\n return this.onInterval(handler, undefined, {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n })\n }\n\n public onTimeInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined\n )\n }\n\n public onInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined\n ): this {\n const chainId = this.getChainId()\n const processor = this\n const contractName = this.config.name\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n new Date(block.timestamp * 1000),\n block,\n undefined,\n undefined\n )\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n })\n return this\n }\n\n public onAllEvents(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const _filters: DeferredTopicFilter[] = []\n const tmpContract = this.CreateBoundContractView()\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'event') {\n const filter = tmpContract.rawContract.filters[fragment.format()]\n _filters.push(filter())\n }\n }\n return this.onEvent(\n function (log, ctx) {\n return handler(log, ctx)\n },\n _filters,\n fetchConfig\n )\n }\n\n public onTrace(\n signatures: string | string[],\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n const contractName = this.config.name\n const processor = this\n if (typeof signatures === 'string') {\n signatures = [signatures]\n }\n\n this.traceHandlers.push({\n signatures,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthTrace) {\n const contractView = processor.CreateBoundContractView()\n const contractInterface = contractView.rawContract.interface\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n const sighash = trace?.action.input?.slice(0, 10)\n if (!sighash) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace has no sighash')\n }\n const fragment = contractInterface.getFunction(sighash)\n\n if (!trace || !fragment) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace is null')\n }\n const typedTrace = trace as TypedCallTrace\n typedTrace.name = fragment.name\n typedTrace.functionSignature = fragment.format()\n // const trace = data.trace as Trace\n if (!trace?.action.input) {\n return ProcessResult.fromPartial({})\n }\n const traceData = '0x' + trace.action.input.slice(10)\n try {\n typedTrace.args = contractInterface.getAbiCoder().decode(fragment.inputs, traceData, true)\n } catch (e) {\n if (!trace.error) {\n throw e\n }\n console.error('Failed to decode successful trace', e)\n }\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n undefined,\n trace,\n transaction,\n transactionReceipt\n )\n await handler(typedTrace, ctx)\n return ctx.getProcessResult()\n },\n })\n return this\n }\n\n public onAllTraces(\n handler: (event: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const tmpContract = this.CreateBoundContractView()\n const sighashes = []\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'function') {\n const signature = fragment.format()\n const test = new TextEncoder().encode(signature)\n const sighash = '0x' + sha3.keccak_256(test).substring(0, 8)\n sighashes.push(sighash)\n }\n }\n return this.onTrace(\n sighashes,\n function (trace, ctx) {\n return handler(trace, ctx)\n },\n fetchConfig\n )\n }\n}\n"]}
package/lib/eth/eth.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { LogParams, TransactionReceiptParams } from 'ethers/providers';
2
- import { LogDescription, Result, DeferredTopicFilter } from 'ethers';
2
+ import { LogDescription, Result, DeferredTopicFilter, BlockParams } from 'ethers';
3
3
  import { ContractContext } from './context.js';
4
4
  export interface IResult {
5
5
  /**
@@ -16,6 +16,10 @@ export interface TypedEvent<TArgsArray extends Array<any> = any, TArgsObject = a
16
16
  name: string;
17
17
  }
18
18
  export type TypedEventFilter<_TEvent extends TypedEvent> = DeferredTopicFilter;
19
+ export interface RichBlock extends BlockParams {
20
+ traces?: Trace[];
21
+ transactionReceipts?: TransactionReceiptParams[];
22
+ }
19
23
  export declare class SimpleEthersError extends Error {
20
24
  e: Error;
21
25
  constructor(message: string, e: Error);
@@ -31,11 +35,12 @@ export declare function formatEthData(data: {
31
35
  transactionReceipt?: any;
32
36
  }): {
33
37
  log: LogParams | undefined;
34
- block: import("ethers").BlockParams | undefined;
38
+ block: RichBlock | undefined;
35
39
  trace: Trace | undefined;
36
40
  transaction: import("ethers").TransactionResponseParams | undefined;
37
41
  transactionReceipt: TransactionReceiptParams | undefined;
38
42
  };
43
+ export declare function formatRichBlock(block: RichBlock): RichBlock;
39
44
  export interface TypedCallTrace<TArgsArray extends Array<any> = any, TArgsObject = any> extends Trace {
40
45
  args: TArgsObject & IResult;
41
46
  name: string;
package/lib/eth/eth.js CHANGED
@@ -81,7 +81,7 @@ export function formatEthData(data) {
81
81
  if (data.block && !data.block.transactions) {
82
82
  data.block.transactions = [];
83
83
  }
84
- const block = data.block ? formatBlock(data.block) : undefined;
84
+ const block = data.block ? formatRichBlock(data.block) : undefined;
85
85
  const trace = data.trace ? data.trace : undefined;
86
86
  const transaction = data.transaction ? formatTransactionResponse(data.transaction) : undefined;
87
87
  const transactionReceipt = data.transactionReceipt ? formatTransactionReceipt(data.transactionReceipt) : undefined;
@@ -93,6 +93,13 @@ export function formatEthData(data) {
93
93
  transactionReceipt,
94
94
  };
95
95
  }
96
+ export function formatRichBlock(block) {
97
+ formatBlock(block);
98
+ if (block.transactionReceipts) {
99
+ block.transactionReceipts = block.transactionReceipts.map((t) => formatTransactionReceipt(t));
100
+ }
101
+ return block;
102
+ }
96
103
  // const TRACE: Trace = {
97
104
  // action: {
98
105
  // from: '0xd771111cbfa2bbdafbf9f0e58b49b3f827da31f5',
@@ -1 +1 @@
1
- {"version":3,"file":"eth.js","sourceRoot":"","sources":["../../src/eth/eth.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LogParams,\n formatBlock,\n formatLog,\n TransactionReceiptParams,\n formatTransactionResponse,\n allowNull,\n arrayOf,\n formatHash,\n formatReceiptLog,\n object,\n formatData,\n} from 'ethers/providers'\nimport { CallExceptionError, LogDescription, Result, DeferredTopicFilter } from 'ethers'\nimport { ContractContext } from './context.js'\nimport { getAddress } from 'ethers/address'\nimport { getBigInt, getNumber, hexlify } from 'ethers/utils'\n\nexport interface IResult {\n /**\n * Returns the Result as a normal Array.\n */\n toArray(): Array<any>\n /**\n * Returns the Result as an Object with each name-value pair.\n */\n toObject(): Record<string, any>\n}\n\nexport interface TypedEvent<TArgsArray extends Array<any> = any, TArgsObject = any> extends LogParams {\n args: TArgsObject & IResult\n name: string\n}\n\nexport type TypedEventFilter<_TEvent extends TypedEvent> = DeferredTopicFilter\n\nexport class SimpleEthersError extends Error {\n e: Error\n\n constructor(message: string, e: Error) {\n super(message)\n this.stack = e.stack\n }\n\n toString() {\n return this.message + '\\n' + this.stack?.toString()\n }\n}\n\nexport function transformEtherError(e: Error, ctx: ContractContext<any, any> | undefined): Error {\n if (e instanceof SimpleEthersError) {\n return e\n }\n\n const checkPage =\n 'Check here for possible cause and fix: https://docs.sentio.xyz/best-practices/handling-errors#ethers-error'\n\n let msg = ''\n const err = e as CallExceptionError\n if (err.code === 'CALL_EXCEPTION') {\n if (err.data === '0x') {\n if (ctx) {\n msg =\n \"jsonrpc eth_call return '0x' (likely contract not existed) at chain \" +\n ctx.chainId +\n ': ' +\n JSON.stringify(e)\n } else {\n msg = \"jsonrpc eth_call return '0x' (likely contract not existed): \" + JSON.stringify(err)\n }\n msg += '\\n' + checkPage\n return new SimpleEthersError(msg, err)\n }\n }\n\n msg = 'ethers call error\\n' + JSON.stringify(e) + '\\n' + e.stack?.toString() + '\\n' + checkPage\n return new Error(msg)\n}\n\nexport function fixEmptyKey(result: LogDescription): Result {\n const keys = []\n\n for (const [i, arg] of result.fragment.inputs.entries()) {\n if (arg.name === '') {\n keys.push('arg' + i)\n } else {\n keys.push(arg.name)\n }\n }\n return Result.fromItems(Array.from(result.args.values()), keys)\n}\n\nconst _formatTransactionReceipt = object(\n {\n to: allowNull(getAddress, null),\n from: allowNull(getAddress, null),\n contractAddress: allowNull(getAddress, null),\n // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n index: getNumber,\n root: allowNull(hexlify),\n gasUsed: getBigInt,\n logsBloom: allowNull(formatData),\n blockHash: formatHash,\n hash: formatHash,\n logs: allowNull(arrayOf(formatReceiptLog)), // Only thing that different\n blockNumber: getNumber,\n //confirmations: allowNull(getNumber, null),\n cumulativeGasUsed: getBigInt,\n effectiveGasPrice: allowNull(getBigInt),\n status: allowNull(getNumber),\n type: allowNull(getNumber, 0),\n },\n {\n effectiveGasPrice: ['gasPrice'],\n hash: ['transactionHash'],\n index: ['transactionIndex'],\n }\n)\n\nfunction formatTransactionReceipt(value: any): TransactionReceiptParams {\n return _formatTransactionReceipt(value)\n}\n\nexport function formatEthData(data: {\n log?: any\n block?: any\n trace?: any\n transaction?: any\n transactionReceipt?: any\n}) {\n const log = data.log ? formatLog(data.log) : undefined\n if (data.block && !data.block.transactions) {\n data.block.transactions = []\n }\n const block = data.block ? formatBlock(data.block) : undefined\n const trace = data.trace ? (data.trace as Trace) : undefined\n const transaction = data.transaction ? formatTransactionResponse(data.transaction) : undefined\n const transactionReceipt = data.transactionReceipt ? formatTransactionReceipt(data.transactionReceipt) : undefined\n return {\n log,\n block,\n trace,\n transaction,\n transactionReceipt,\n }\n}\n\nexport interface TypedCallTrace<TArgsArray extends Array<any> = any, TArgsObject = any> extends Trace {\n args: TArgsObject & IResult\n name: string\n functionSignature: string\n}\n\nexport interface Trace {\n action: TraceAction\n blockHash: string\n blockNumber: number\n result: TraceResult\n subtraces: number\n traceAddress: number[]\n transactionHash: string\n transactionPosition: number\n type: string\n error?: string\n}\n// export type CallType = \"call\" | \"callcode\" | \"delegatecall\" | \"staticcall\"\n\nexport interface TraceAction {\n from: string\n to?: string\n value: number\n gas: number\n input?: string\n callType?: string\n\n init?: string\n address?: string\n balance?: string\n refundAddress?: string\n}\n\n// TODO are more field missing for FailedCall, FailedCreate\nexport interface TraceResult {\n gasUsed: number\n output?: string\n address?: string\n code?: string\n}\n\n// const TRACE: Trace = {\n// action: {\n// from: '0xd771111cbfa2bbdafbf9f0e58b49b3f827da31f5',\n// callType: 'call',\n// gas: 0x12154,\n// input:\n// '0xb1a417f4000000000000000000000000d771111cbfa2bbdafbf9f0e58b49b3f827da31f5000000000000000000000000d771111cbfa2bbdafbf9f0e58b49b3f827da31f500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131888b5aaf000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000',\n// to: '0x0baba1ad5be3a5c0a66e7ac838a129bf948f1ea4',\n// value: 0x131888b5aaf0000,\n// },\n// blockHash: '0x5451711bc530a7c04128fedbe149eb359c10eccd44a83909d448c5244c7eea26',\n// blockNumber: 15533908,\n// result: { gasUsed: 0x114c1, output: '0x' },\n// subtraces: 1,\n// traceAddress: [],\n// transactionHash: '0x66dce11d6217042ed709a38e507e7762c93b1bde4a0447ae7a243493bbdffc0e',\n// transactionPosition: 73,\n// type: 'call',\n// }\n\n// const trac2: Trace =\n// {\n// \"action\": {\n// \"from\": \"0x95ba4cf87d6723ad9c0db21737d862be80e93911\",\n// \"gas\": 0x630d0b,\n// \"init\": \"0x608060405234801561001057600080fd5b50604051602080610b2983398101806040528101908080519060200190929190505050808060405180807f6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e74617481526020017f696f6e000000000000000000000000000000000000000000000000000000000081525060230190506040518091039020600019167f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3600102600019161415156100c657fe5b6100de81610169640100000000026401000000009004565b5060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a0190506040518091039020600019167f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001026000191614151561014a57fe5b6101623361024e640100000000026401000000009004565b5050610290565b60006101878261027d6401000000000261084b176401000000009004565b1515610221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b600080823b905060008111915050919050565b61088a8061029f6000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633659cfe6146100775780634f1ef286146100ba5780635c60da1b146101085780638f2839701461015f578063f851a440146101a2575b6100756101f9565b005b34801561008357600080fd5b506100b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610213565b005b610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050610268565b005b34801561011457600080fd5b5061011d610308565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610360565b005b3480156101ae57600080fd5b506101b761051e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610201610576565b61021161020c610651565b610682565b565b61021b6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025c57610257816106d9565b610265565b6102646101f9565b5b50565b6102706106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fa576102ac836106d9565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af19250505015156102f557600080fd5b610303565b6103026101f9565b5b505050565b60006103126106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103545761034d610651565b905061035d565b61035c6101f9565b5b90565b6103686106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561051257600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f81526020017f787920746f20746865207a65726f20616464726573730000000000000000000081525060400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61048f6106a8565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161050d81610748565b61051b565b61051a6101f9565b5b50565b60006105286106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561056a576105636106a8565b9050610573565b6105726101f9565b5b90565b61057e6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667281526020017f6f6d207468652070726f78792061646d696e000000000000000000000000000081525060400191505060405180910390fd5b61064f610777565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e80600081146106a3573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b6106e281610779565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b565b60006107848261084b565b151561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b600080823b9050600081119150509190505600a165627a7a72305820a4a547cfc7202c5acaaae74d428e988bc62ad5024eb0165532d3a8f91db4ed2400290000000000000000000000000882477e7895bdc5cea7cb1552ed914ab157fe56\",\n// \"value\": 0x0\n// },\n// \"blockHash\": \"0xb2f6986457f5a24ff088a0beb5567c8c1fe2da02687c78e743507ee7c982b977\",\n// \"blockNumber\": 6082465,\n// \"result\": {\n// \"address\": \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n// \"code\": \"0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633659cfe6146100775780634f1ef286146100ba5780635c60da1b146101085780638f2839701461015f578063f851a440146101a2575b6100756101f9565b005b34801561008357600080fd5b506100b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610213565b005b610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050610268565b005b34801561011457600080fd5b5061011d610308565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610360565b005b3480156101ae57600080fd5b506101b761051e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610201610576565b61021161020c610651565b610682565b565b61021b6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025c57610257816106d9565b610265565b6102646101f9565b5b50565b6102706106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fa576102ac836106d9565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af19250505015156102f557600080fd5b610303565b6103026101f9565b5b505050565b60006103126106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103545761034d610651565b905061035d565b61035c6101f9565b5b90565b6103686106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561051257600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f81526020017f787920746f20746865207a65726f20616464726573730000000000000000000081525060400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61048f6106a8565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161050d81610748565b61051b565b61051a6101f9565b5b50565b60006105286106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561056a576105636106a8565b9050610573565b6105726101f9565b5b90565b61057e6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667281526020017f6f6d207468652070726f78792061646d696e000000000000000000000000000081525060400191505060405180910390fd5b61064f610777565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e80600081146106a3573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b6106e281610779565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b565b60006107848261084b565b151561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b600080823b9050600081119150509190505600a165627a7a72305820a4a547cfc7202c5acaaae74d428e988bc62ad5024eb0165532d3a8f91db4ed240029\",\n// \"gasUsed\": 0x74f42\n// },\n// \"subtraces\": 0,\n// \"traceAddress\": [],\n// \"transactionHash\": \"0xe7e0fe390354509cd08c9a0168536938600ddc552b3f7cb96030ebef62e75895\",\n// \"transactionPosition\": 22,\n// \"type\": \"create\"\n// }\n"]}
1
+ {"version":3,"file":"eth.js","sourceRoot":"","sources":["../../src/eth/eth.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n LogParams,\n formatBlock,\n formatLog,\n TransactionReceiptParams,\n formatTransactionResponse,\n allowNull,\n arrayOf,\n formatHash,\n formatReceiptLog,\n object,\n formatData,\n} from 'ethers/providers'\nimport { CallExceptionError, LogDescription, Result, DeferredTopicFilter, BlockParams } from 'ethers'\nimport { ContractContext } from './context.js'\nimport { getAddress } from 'ethers/address'\nimport { getBigInt, getNumber, hexlify } from 'ethers/utils'\n\nexport interface IResult {\n /**\n * Returns the Result as a normal Array.\n */\n toArray(): Array<any>\n /**\n * Returns the Result as an Object with each name-value pair.\n */\n toObject(): Record<string, any>\n}\n\nexport interface TypedEvent<TArgsArray extends Array<any> = any, TArgsObject = any> extends LogParams {\n args: TArgsObject & IResult\n name: string\n}\n\nexport type TypedEventFilter<_TEvent extends TypedEvent> = DeferredTopicFilter\n\nexport interface RichBlock extends BlockParams {\n traces?: Trace[]\n transactionReceipts?: TransactionReceiptParams[]\n}\n\nexport class SimpleEthersError extends Error {\n e: Error\n\n constructor(message: string, e: Error) {\n super(message)\n this.stack = e.stack\n }\n\n toString() {\n return this.message + '\\n' + this.stack?.toString()\n }\n}\n\nexport function transformEtherError(e: Error, ctx: ContractContext<any, any> | undefined): Error {\n if (e instanceof SimpleEthersError) {\n return e\n }\n\n const checkPage =\n 'Check here for possible cause and fix: https://docs.sentio.xyz/best-practices/handling-errors#ethers-error'\n\n let msg = ''\n const err = e as CallExceptionError\n if (err.code === 'CALL_EXCEPTION') {\n if (err.data === '0x') {\n if (ctx) {\n msg =\n \"jsonrpc eth_call return '0x' (likely contract not existed) at chain \" +\n ctx.chainId +\n ': ' +\n JSON.stringify(e)\n } else {\n msg = \"jsonrpc eth_call return '0x' (likely contract not existed): \" + JSON.stringify(err)\n }\n msg += '\\n' + checkPage\n return new SimpleEthersError(msg, err)\n }\n }\n\n msg = 'ethers call error\\n' + JSON.stringify(e) + '\\n' + e.stack?.toString() + '\\n' + checkPage\n return new Error(msg)\n}\n\nexport function fixEmptyKey(result: LogDescription): Result {\n const keys = []\n\n for (const [i, arg] of result.fragment.inputs.entries()) {\n if (arg.name === '') {\n keys.push('arg' + i)\n } else {\n keys.push(arg.name)\n }\n }\n return Result.fromItems(Array.from(result.args.values()), keys)\n}\n\nconst _formatTransactionReceipt = object(\n {\n to: allowNull(getAddress, null),\n from: allowNull(getAddress, null),\n contractAddress: allowNull(getAddress, null),\n // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n index: getNumber,\n root: allowNull(hexlify),\n gasUsed: getBigInt,\n logsBloom: allowNull(formatData),\n blockHash: formatHash,\n hash: formatHash,\n logs: allowNull(arrayOf(formatReceiptLog)), // Only thing that different\n blockNumber: getNumber,\n //confirmations: allowNull(getNumber, null),\n cumulativeGasUsed: getBigInt,\n effectiveGasPrice: allowNull(getBigInt),\n status: allowNull(getNumber),\n type: allowNull(getNumber, 0),\n },\n {\n effectiveGasPrice: ['gasPrice'],\n hash: ['transactionHash'],\n index: ['transactionIndex'],\n }\n)\n\nfunction formatTransactionReceipt(value: any): TransactionReceiptParams {\n return _formatTransactionReceipt(value)\n}\n\nexport function formatEthData(data: {\n log?: any\n block?: any\n trace?: any\n transaction?: any\n transactionReceipt?: any\n}) {\n const log = data.log ? formatLog(data.log) : undefined\n if (data.block && !data.block.transactions) {\n data.block.transactions = []\n }\n const block = data.block ? formatRichBlock(data.block) : undefined\n const trace = data.trace ? (data.trace as Trace) : undefined\n const transaction = data.transaction ? formatTransactionResponse(data.transaction) : undefined\n const transactionReceipt = data.transactionReceipt ? formatTransactionReceipt(data.transactionReceipt) : undefined\n return {\n log,\n block,\n trace,\n transaction,\n transactionReceipt,\n }\n}\n\nexport function formatRichBlock(block: RichBlock): RichBlock {\n formatBlock(block)\n if (block.transactionReceipts) {\n block.transactionReceipts = block.transactionReceipts.map((t) => formatTransactionReceipt(t))\n }\n return block\n}\n\nexport interface TypedCallTrace<TArgsArray extends Array<any> = any, TArgsObject = any> extends Trace {\n args: TArgsObject & IResult\n name: string\n functionSignature: string\n}\n\nexport interface Trace {\n action: TraceAction\n blockHash: string\n blockNumber: number\n result: TraceResult\n subtraces: number\n traceAddress: number[]\n transactionHash: string\n transactionPosition: number\n type: string\n error?: string\n}\n// export type CallType = \"call\" | \"callcode\" | \"delegatecall\" | \"staticcall\"\n\nexport interface TraceAction {\n from: string\n to?: string\n value: number\n gas: number\n input?: string\n callType?: string\n\n init?: string\n address?: string\n balance?: string\n refundAddress?: string\n}\n\n// TODO are more field missing for FailedCall, FailedCreate\nexport interface TraceResult {\n gasUsed: number\n output?: string\n address?: string\n code?: string\n}\n\n// const TRACE: Trace = {\n// action: {\n// from: '0xd771111cbfa2bbdafbf9f0e58b49b3f827da31f5',\n// callType: 'call',\n// gas: 0x12154,\n// input:\n// '0xb1a417f4000000000000000000000000d771111cbfa2bbdafbf9f0e58b49b3f827da31f5000000000000000000000000d771111cbfa2bbdafbf9f0e58b49b3f827da31f500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131888b5aaf000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000',\n// to: '0x0baba1ad5be3a5c0a66e7ac838a129bf948f1ea4',\n// value: 0x131888b5aaf0000,\n// },\n// blockHash: '0x5451711bc530a7c04128fedbe149eb359c10eccd44a83909d448c5244c7eea26',\n// blockNumber: 15533908,\n// result: { gasUsed: 0x114c1, output: '0x' },\n// subtraces: 1,\n// traceAddress: [],\n// transactionHash: '0x66dce11d6217042ed709a38e507e7762c93b1bde4a0447ae7a243493bbdffc0e',\n// transactionPosition: 73,\n// type: 'call',\n// }\n\n// const trac2: Trace =\n// {\n// \"action\": {\n// \"from\": \"0x95ba4cf87d6723ad9c0db21737d862be80e93911\",\n// \"gas\": 0x630d0b,\n// \"init\": \"0x608060405234801561001057600080fd5b50604051602080610b2983398101806040528101908080519060200190929190505050808060405180807f6f72672e7a657070656c696e6f732e70726f78792e696d706c656d656e74617481526020017f696f6e000000000000000000000000000000000000000000000000000000000081525060230190506040518091039020600019167f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c3600102600019161415156100c657fe5b6100de81610169640100000000026401000000009004565b5060405180807f6f72672e7a657070656c696e6f732e70726f78792e61646d696e000000000000815250601a0190506040518091039020600019167f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001026000191614151561014a57fe5b6101623361024e640100000000026401000000009004565b5050610290565b60006101878261027d6401000000000261084b176401000000009004565b1515610221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b600080823b905060008111915050919050565b61088a8061029f6000396000f30060806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633659cfe6146100775780634f1ef286146100ba5780635c60da1b146101085780638f2839701461015f578063f851a440146101a2575b6100756101f9565b005b34801561008357600080fd5b506100b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610213565b005b610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050610268565b005b34801561011457600080fd5b5061011d610308565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610360565b005b3480156101ae57600080fd5b506101b761051e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610201610576565b61021161020c610651565b610682565b565b61021b6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025c57610257816106d9565b610265565b6102646101f9565b5b50565b6102706106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fa576102ac836106d9565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af19250505015156102f557600080fd5b610303565b6103026101f9565b5b505050565b60006103126106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103545761034d610651565b905061035d565b61035c6101f9565b5b90565b6103686106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561051257600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f81526020017f787920746f20746865207a65726f20616464726573730000000000000000000081525060400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61048f6106a8565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161050d81610748565b61051b565b61051a6101f9565b5b50565b60006105286106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561056a576105636106a8565b9050610573565b6105726101f9565b5b90565b61057e6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667281526020017f6f6d207468652070726f78792061646d696e000000000000000000000000000081525060400191505060405180910390fd5b61064f610777565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e80600081146106a3573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b6106e281610779565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b565b60006107848261084b565b151561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b600080823b9050600081119150509190505600a165627a7a72305820a4a547cfc7202c5acaaae74d428e988bc62ad5024eb0165532d3a8f91db4ed2400290000000000000000000000000882477e7895bdc5cea7cb1552ed914ab157fe56\",\n// \"value\": 0x0\n// },\n// \"blockHash\": \"0xb2f6986457f5a24ff088a0beb5567c8c1fe2da02687c78e743507ee7c982b977\",\n// \"blockNumber\": 6082465,\n// \"result\": {\n// \"address\": \"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48\",\n// \"code\": \"0x60806040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633659cfe6146100775780634f1ef286146100ba5780635c60da1b146101085780638f2839701461015f578063f851a440146101a2575b6100756101f9565b005b34801561008357600080fd5b506100b8600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610213565b005b610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001919091929391929390505050610268565b005b34801561011457600080fd5b5061011d610308565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610360565b005b3480156101ae57600080fd5b506101b761051e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610201610576565b61021161020c610651565b610682565b565b61021b6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025c57610257816106d9565b610265565b6102646101f9565b5b50565b6102706106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102fa576102ac836106d9565b3073ffffffffffffffffffffffffffffffffffffffff163483836040518083838082843782019150509250505060006040518083038185875af19250505015156102f557600080fd5b610303565b6103026101f9565b5b505050565b60006103126106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156103545761034d610651565b905061035d565b61035c6101f9565b5b90565b6103686106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561051257600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610466576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001807f43616e6e6f74206368616e6765207468652061646d696e206f6620612070726f81526020017f787920746f20746865207a65726f20616464726573730000000000000000000081525060400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61048f6106a8565b82604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060405180910390a161050d81610748565b61051b565b61051a6101f9565b5b50565b60006105286106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561056a576105636106a8565b9050610573565b6105726101f9565b5b90565b61057e6106a8565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610647576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f43616e6e6f742063616c6c2066616c6c6261636b2066756e6374696f6e20667281526020017f6f6d207468652070726f78792061646d696e000000000000000000000000000081525060400191505060405180910390fd5b61064f610777565b565b6000807f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c36001029050805491505090565b3660008037600080366000845af43d6000803e80600081146106a3573d6000f35b3d6000fd5b6000807f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b6001029050805491505090565b6106e281610779565b7fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b81604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b60010290508181555050565b565b60006107848261084b565b151561081e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001807f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f81526020017f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000081525060400191505060405180910390fd5b7f7050c9e0f4ca769c69bd3a8ef740bc37934f8e2c036e5a723fd8ee048ed3f8c360010290508181555050565b600080823b9050600081119150509190505600a165627a7a72305820a4a547cfc7202c5acaaae74d428e988bc62ad5024eb0165532d3a8f91db4ed240029\",\n// \"gasUsed\": 0x74f42\n// },\n// \"subtraces\": 0,\n// \"traceAddress\": [],\n// \"transactionHash\": \"0xe7e0fe390354509cd08c9a0168536938600ddc552b3f7cb96030ebef62e75895\",\n// \"transactionPosition\": 22,\n// \"type\": \"create\"\n// }\n"]}
@@ -8,6 +8,10 @@ import { parseMoveType } from '../move/index.js';
8
8
  import { getMoveCalls } from './utils.js';
9
9
  import { defaultMoveCoder } from './move-coder.js';
10
10
  // import { dynamic_field } from './builtin/0x2.js'
11
+ const DEFAULT_FETCH_CONFIG = {
12
+ resourceChanges: false,
13
+ allEvents: true,
14
+ };
11
15
  class IndexConfigure {
12
16
  address;
13
17
  network;
@@ -44,7 +48,7 @@ export class SuiBaseProcessor {
44
48
  }
45
49
  onMoveEvent(handler, filter, fetchConfig) {
46
50
  let _filters = [];
47
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {});
51
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig });
48
52
  if (Array.isArray(filter)) {
49
53
  _filters = filter;
50
54
  }
@@ -84,7 +88,7 @@ export class SuiBaseProcessor {
84
88
  }
85
89
  onEntryFunctionCall(handler, filter, fetchConfig) {
86
90
  let _filters = [];
87
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {});
91
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig });
88
92
  if (Array.isArray(filter)) {
89
93
  _filters = filter;
90
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sui-processor.js","sourceRoot":"","sources":["../../src/sui/sui-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Data_SuiCall,\n Data_SuiEvent,\n Data_SuiObject,\n HandleInterval,\n MoveFetchConfig,\n MoveOnIntervalConfig_OwnerType,\n ProcessResult,\n} from '@sentio/protos'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport { getChainId, SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectsContext } from './context.js'\nimport {\n getProgrammableTransaction,\n getTransactionKind,\n MoveCallSuiTransaction,\n SuiEvent,\n SuiMoveObject,\n SuiTransactionBlockResponse,\n} from '@mysten/sui.js'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './move-coder.js'\nimport { PromiseOrVoid } from '../core/index.js'\n// import { dynamic_field } from './builtin/0x2.js'\n\nclass IndexConfigure {\n address: string\n network: SuiNetwork\n startTimestamp: number\n}\n\nexport class SuiBindOptions {\n address: string\n network?: SuiNetwork\n startTimestamp?: number\n}\n\nexport class SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startTimestamp?: number\n}\n\nexport class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {\n static INSTANCE = new SuiProcessorState()\n}\n\nexport class SuiBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n\n eventHandlers: EventHandler<Data_SuiEvent>[] = []\n callHandlers: CallHandler<Data_SuiCall>[] = []\n coder: MoveCoder\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n public onMoveEvent(\n handler: (event: SuiEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n const processor = this\n const allEventType = new Set(_filters.map((f) => processor.config.address + '::' + f.type))\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as SuiTransactionBlockResponse\n if (!txn.events || !txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const [idx, evt] of (txn.events as SuiEvent[]).entries()) {\n const typeQname = parseMoveType(evt.type).qname\n if (!allEventType.has(typeQname)) {\n continue\n }\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n txn,\n idx\n )\n\n const decoded = await processor.coder.decodeEvent<any>(evt)\n await handler(decoded || evt, ctx)\n processResults.push(ctx.getProcessResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0\n )\n if (tx) {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)\n if (calls.length !== 1) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)\n }\n const txKind = getTransactionKind(tx)\n if (!txKind) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\n const programmableTx = getProgrammableTransaction(txKind)\n\n const payload = calls[0]\n const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || [])\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n}\n\nclass ObjectHandler {\n type?: string\n versionInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (resource: Data_SuiObject) => Promise<ProcessResult>\n}\n\nexport class SuiAccountProcessorState extends ListStateStorage<SuiBaseObjectsProcessor<any>> {\n static INSTANCE = new SuiAccountProcessorState()\n}\n\nclass SuiObjectsBindOptions extends SuiBindOptions {\n ownerType: MoveOnIntervalConfig_OwnerType\n}\n\nabstract class SuiBaseObjectsProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOnIntervalConfig_OwnerType\n\n objectHandlers: ObjectHandler[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiObjectsBindOptions) {\n this.config = configure(options)\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n protected abstract transformObjects(objects: SuiMoveObject[]): HandlerType[]\n\n protected onInterval(\n handler: (resources: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n versionInterval: HandleInterval | undefined,\n type: string | undefined\n ): this {\n const processor = this\n this.objectHandlers.push({\n handler: async function (data) {\n const ctx = new SuiObjectsContext(\n processor.config.network,\n processor.config.address,\n data.slot,\n data.timestamp || new Date(0)\n )\n await handler(processor.transformObjects(data.objects as SuiMoveObject[]), ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n versionInterval: versionInterval,\n type,\n })\n return this\n }\n\n public onTimeInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes,\n },\n undefined,\n type\n )\n }\n\n public onSlotInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n slotInterval = 100000,\n backfillSlotInterval = 400000,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: slotInterval, backfillInterval: backfillSlotInterval },\n type\n )\n }\n}\n\nfunction configure(options: SuiBindOptions): IndexConfigure {\n return {\n startTimestamp: options.startTimestamp || 0,\n address: options.address,\n network: options.network || SuiNetwork.MAIN_NET,\n }\n}\n\nexport class SuiAddressObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiBindOptions): SuiAddressObjectsProcessor {\n return new SuiAddressObjectsProcessor({ ...options, ownerType: MoveOnIntervalConfig_OwnerType.ADDRESS })\n }\n\n protected transformObjects(objects: SuiMoveObject[]): SuiMoveObject[] {\n return objects\n }\n}\n// export class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<dynamic_field.Field<any, any>> {\nexport class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiObjectBindOptions): SuiDynamicFieldObjectsProcessor {\n return new SuiDynamicFieldObjectsProcessor({\n address: options.objectId,\n network: options.network,\n startTimestamp: options.startTimestamp,\n ownerType: MoveOnIntervalConfig_OwnerType.OBJECT,\n })\n }\n\n protected transformObjects(objects: SuiMoveObject[]) {\n return objects\n // return defaultMoveCoder().getObjectsFromDynamicFields(objects)\n }\n}\n"]}
1
+ {"version":3,"file":"sui-processor.js","sourceRoot":"","sources":["../../src/sui/sui-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Data_SuiCall,\n Data_SuiEvent,\n Data_SuiObject,\n HandleInterval,\n MoveFetchConfig,\n MoveOnIntervalConfig_OwnerType,\n ProcessResult,\n} from '@sentio/protos'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport { getChainId, SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectsContext } from './context.js'\nimport {\n getProgrammableTransaction,\n getTransactionKind,\n MoveCallSuiTransaction,\n SuiEvent,\n SuiMoveObject,\n SuiTransactionBlockResponse,\n} from '@mysten/sui.js'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './move-coder.js'\nimport { PromiseOrVoid } from '../core/index.js'\n// import { dynamic_field } from './builtin/0x2.js'\n\nconst DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n}\n\nclass IndexConfigure {\n address: string\n network: SuiNetwork\n startTimestamp: number\n}\n\nexport class SuiBindOptions {\n address: string\n network?: SuiNetwork\n startTimestamp?: number\n}\n\nexport class SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startTimestamp?: number\n}\n\nexport class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {\n static INSTANCE = new SuiProcessorState()\n}\n\nexport class SuiBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n\n eventHandlers: EventHandler<Data_SuiEvent>[] = []\n callHandlers: CallHandler<Data_SuiCall>[] = []\n coder: MoveCoder\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n public onMoveEvent(\n handler: (event: SuiEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n const processor = this\n const allEventType = new Set(_filters.map((f) => processor.config.address + '::' + f.type))\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as SuiTransactionBlockResponse\n if (!txn.events || !txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const [idx, evt] of (txn.events as SuiEvent[]).entries()) {\n const typeQname = parseMoveType(evt.type).qname\n if (!allEventType.has(typeQname)) {\n continue\n }\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n txn,\n idx\n )\n\n const decoded = await processor.coder.decodeEvent<any>(evt)\n await handler(decoded || evt, ctx)\n processResults.push(ctx.getProcessResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as SuiTransactionBlockResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx,\n 0\n )\n if (tx) {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)\n if (calls.length !== 1) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)\n }\n const txKind = getTransactionKind(tx)\n if (!txKind) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\n const programmableTx = getProgrammableTransaction(txKind)\n\n const payload = calls[0]\n const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || [])\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n}\n\nclass ObjectHandler {\n type?: string\n versionInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (resource: Data_SuiObject) => Promise<ProcessResult>\n}\n\nexport class SuiAccountProcessorState extends ListStateStorage<SuiBaseObjectsProcessor<any>> {\n static INSTANCE = new SuiAccountProcessorState()\n}\n\nclass SuiObjectsBindOptions extends SuiBindOptions {\n ownerType: MoveOnIntervalConfig_OwnerType\n}\n\nabstract class SuiBaseObjectsProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOnIntervalConfig_OwnerType\n\n objectHandlers: ObjectHandler[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiObjectsBindOptions) {\n this.config = configure(options)\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n protected abstract transformObjects(objects: SuiMoveObject[]): HandlerType[]\n\n protected onInterval(\n handler: (resources: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n versionInterval: HandleInterval | undefined,\n type: string | undefined\n ): this {\n const processor = this\n this.objectHandlers.push({\n handler: async function (data) {\n const ctx = new SuiObjectsContext(\n processor.config.network,\n processor.config.address,\n data.slot,\n data.timestamp || new Date(0)\n )\n await handler(processor.transformObjects(data.objects as SuiMoveObject[]), ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n versionInterval: versionInterval,\n type,\n })\n return this\n }\n\n public onTimeInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes,\n },\n undefined,\n type\n )\n }\n\n public onSlotInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n slotInterval = 100000,\n backfillSlotInterval = 400000,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: slotInterval, backfillInterval: backfillSlotInterval },\n type\n )\n }\n}\n\nfunction configure(options: SuiBindOptions): IndexConfigure {\n return {\n startTimestamp: options.startTimestamp || 0,\n address: options.address,\n network: options.network || SuiNetwork.MAIN_NET,\n }\n}\n\nexport class SuiAddressObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiBindOptions): SuiAddressObjectsProcessor {\n return new SuiAddressObjectsProcessor({ ...options, ownerType: MoveOnIntervalConfig_OwnerType.ADDRESS })\n }\n\n protected transformObjects(objects: SuiMoveObject[]): SuiMoveObject[] {\n return objects\n }\n}\n// export class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<dynamic_field.Field<any, any>> {\nexport class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiObjectBindOptions): SuiDynamicFieldObjectsProcessor {\n return new SuiDynamicFieldObjectsProcessor({\n address: options.objectId,\n network: options.network,\n startTimestamp: options.startTimestamp,\n ownerType: MoveOnIntervalConfig_OwnerType.OBJECT,\n })\n }\n\n protected transformObjects(objects: SuiMoveObject[]) {\n return objects\n // return defaultMoveCoder().getObjectsFromDynamicFields(objects)\n }\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
3
  "license": "Apache-2.0",
4
- "version": "2.13.0-rc.6",
4
+ "version": "2.13.0-rc.7",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "compile": "tsc && cp src/utils/*.csv lib/utils && cp src/tsup.config.ts lib",
@@ -23,8 +23,8 @@
23
23
  "@project-serum/anchor": "^0.26.0",
24
24
  "@sentio/bigdecimal": "^9.1.1-patch.3",
25
25
  "@sentio/ethers-v6": "^1.0.28",
26
- "@sentio/protos": "^2.13.0-rc.6",
27
- "@sentio/runtime": "^2.13.0-rc.6",
26
+ "@sentio/protos": "^2.13.0-rc.7",
27
+ "@sentio/runtime": "^2.13.0-rc.7",
28
28
  "@solana/web3.js": "^1.74.0",
29
29
  "@types/prettier": "^2.7.2",
30
30
  "aptos-sdk": "npm:aptos@^1.8.3",
@@ -88,5 +88,5 @@
88
88
  "engines": {
89
89
  "node": ">=16"
90
90
  },
91
- "gitHead": "515b0f33f32abd67a25c1f965f875a50e8c64d10"
91
+ "gitHead": "3626a615882bef56a71b780a767e7f25b8086bc9"
92
92
  }
@@ -17,6 +17,11 @@ import { ServerError, Status } from 'nice-grpc'
17
17
  import { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'
18
18
  import { PromiseOrVoid } from '../core/index.js'
19
19
 
20
+ const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {
21
+ resourceChanges: false,
22
+ allEvents: true,
23
+ }
24
+
20
25
  type IndexConfigure = {
21
26
  address: string
22
27
  network: AptosNetwork
@@ -59,7 +64,7 @@ export class AptosBaseProcessor {
59
64
  includedFailed = false,
60
65
  fetchConfig?: Partial<MoveFetchConfig>
61
66
  ): this {
62
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})
67
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })
63
68
 
64
69
  // const address = this.config.address
65
70
  // const moduleName = this.moduleName
@@ -93,7 +98,7 @@ export class AptosBaseProcessor {
93
98
  fetchConfig?: Partial<MoveFetchConfig>
94
99
  ): this {
95
100
  let _filters: EventFilter[] = []
96
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})
101
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })
97
102
 
98
103
  if (Array.isArray(filter)) {
99
104
  _filters = filter
@@ -151,7 +156,7 @@ export class AptosBaseProcessor {
151
156
  fetchConfig?: Partial<MoveFetchConfig>
152
157
  ): this {
153
158
  let _filters: FunctionNameAndCallFilter[] = []
154
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})
159
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })
155
160
 
156
161
  if (Array.isArray(filter)) {
157
162
  _filters = filter
@@ -1,5 +1,5 @@
1
1
  import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers'
2
- import { BlockParams, Network } from 'ethers/providers'
2
+ import { Network } from 'ethers/providers'
3
3
 
4
4
  import { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js'
5
5
  import {
@@ -15,8 +15,7 @@ import {
15
15
  import { BindOptions } from './bind-options.js'
16
16
  import { PromiseOrVoid } from '../core/promises.js'
17
17
  import { ServerError, Status } from 'nice-grpc'
18
- import { fixEmptyKey, TypedEvent, TypedCallTrace, formatEthData } from './eth.js'
19
- import * as console from 'console'
18
+ import { fixEmptyKey, TypedEvent, TypedCallTrace, formatEthData, RichBlock } from './eth.js'
20
19
  import { getNetworkFromCtxOrNetworkish } from './provider.js'
21
20
  import sha3 from 'js-sha3'
22
21
  import { ListStateStorage } from '@sentio/runtime'
@@ -88,7 +87,7 @@ export class GlobalProcessor {
88
87
  }
89
88
 
90
89
  public onBlockInterval(
91
- handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid,
90
+ handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,
92
91
  blockInterval = 250,
93
92
  backfillBlockInterval = 1000
94
93
  ): this {
@@ -99,7 +98,7 @@ export class GlobalProcessor {
99
98
  }
100
99
 
101
100
  public onTimeInterval(
102
- handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid,
101
+ handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,
103
102
  timeIntervalInMinutes = 60,
104
103
  backfillTimeIntervalInMinutes = 240
105
104
  ): this {
@@ -115,7 +114,7 @@ export class GlobalProcessor {
115
114
  }
116
115
 
117
116
  public onInterval(
118
- handler: (block: BlockParams, ctx: GlobalContext) => PromiseOrVoid,
117
+ handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,
119
118
  timeInterval: HandleInterval | undefined,
120
119
  blockInterval: HandleInterval | undefined
121
120
  ): this {
@@ -245,7 +244,7 @@ export abstract class BaseProcessor<
245
244
  }
246
245
 
247
246
  public onBlockInterval(
248
- handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,
247
+ handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,
249
248
  blockInterval = 250,
250
249
  backfillBlockInterval = 1000
251
250
  ): this {
@@ -256,7 +255,7 @@ export abstract class BaseProcessor<
256
255
  }
257
256
 
258
257
  public onTimeInterval(
259
- handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,
258
+ handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,
260
259
  timeIntervalInMinutes = 60,
261
260
  backfillTimeIntervalInMinutes = 240
262
261
  ): this {
@@ -268,7 +267,7 @@ export abstract class BaseProcessor<
268
267
  }
269
268
 
270
269
  public onInterval(
271
- handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,
270
+ handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,
272
271
  timeInterval: HandleInterval | undefined,
273
272
  blockInterval: HandleInterval | undefined
274
273
  ): this {
package/src/eth/eth.ts CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  object,
12
12
  formatData,
13
13
  } from 'ethers/providers'
14
- import { CallExceptionError, LogDescription, Result, DeferredTopicFilter } from 'ethers'
14
+ import { CallExceptionError, LogDescription, Result, DeferredTopicFilter, BlockParams } from 'ethers'
15
15
  import { ContractContext } from './context.js'
16
16
  import { getAddress } from 'ethers/address'
17
17
  import { getBigInt, getNumber, hexlify } from 'ethers/utils'
@@ -34,6 +34,11 @@ export interface TypedEvent<TArgsArray extends Array<any> = any, TArgsObject = a
34
34
 
35
35
  export type TypedEventFilter<_TEvent extends TypedEvent> = DeferredTopicFilter
36
36
 
37
+ export interface RichBlock extends BlockParams {
38
+ traces?: Trace[]
39
+ transactionReceipts?: TransactionReceiptParams[]
40
+ }
41
+
37
42
  export class SimpleEthersError extends Error {
38
43
  e: Error
39
44
 
@@ -132,7 +137,7 @@ export function formatEthData(data: {
132
137
  if (data.block && !data.block.transactions) {
133
138
  data.block.transactions = []
134
139
  }
135
- const block = data.block ? formatBlock(data.block) : undefined
140
+ const block = data.block ? formatRichBlock(data.block) : undefined
136
141
  const trace = data.trace ? (data.trace as Trace) : undefined
137
142
  const transaction = data.transaction ? formatTransactionResponse(data.transaction) : undefined
138
143
  const transactionReceipt = data.transactionReceipt ? formatTransactionReceipt(data.transactionReceipt) : undefined
@@ -145,6 +150,14 @@ export function formatEthData(data: {
145
150
  }
146
151
  }
147
152
 
153
+ export function formatRichBlock(block: RichBlock): RichBlock {
154
+ formatBlock(block)
155
+ if (block.transactionReceipts) {
156
+ block.transactionReceipts = block.transactionReceipts.map((t) => formatTransactionReceipt(t))
157
+ }
158
+ return block
159
+ }
160
+
148
161
  export interface TypedCallTrace<TArgsArray extends Array<any> = any, TArgsObject = any> extends Trace {
149
162
  args: TArgsObject & IResult
150
163
  name: string
@@ -25,6 +25,11 @@ import { defaultMoveCoder, MoveCoder } from './move-coder.js'
25
25
  import { PromiseOrVoid } from '../core/index.js'
26
26
  // import { dynamic_field } from './builtin/0x2.js'
27
27
 
28
+ const DEFAULT_FETCH_CONFIG: MoveFetchConfig = {
29
+ resourceChanges: false,
30
+ allEvents: true,
31
+ }
32
+
28
33
  class IndexConfigure {
29
34
  address: string
30
35
  network: SuiNetwork
@@ -72,7 +77,7 @@ export class SuiBaseProcessor {
72
77
  fetchConfig?: Partial<MoveFetchConfig>
73
78
  ): SuiBaseProcessor {
74
79
  let _filters: EventFilter[] = []
75
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})
80
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })
76
81
 
77
82
  if (Array.isArray(filter)) {
78
83
  _filters = filter
@@ -132,7 +137,7 @@ export class SuiBaseProcessor {
132
137
  fetchConfig?: Partial<MoveFetchConfig>
133
138
  ): SuiBaseProcessor {
134
139
  let _filters: FunctionNameAndCallFilter[] = []
135
- const _fetchConfig = MoveFetchConfig.fromPartial(fetchConfig || {})
140
+ const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })
136
141
 
137
142
  if (Array.isArray(filter)) {
138
143
  _filters = filter