@sentio/sdk 1.19.2 → 1.19.4

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.
Files changed (36) hide show
  1. package/lib/core/aptos-processor.d.ts +19 -0
  2. package/lib/core/aptos-processor.js +59 -1
  3. package/lib/core/aptos-processor.js.map +1 -1
  4. package/lib/core/generic-processor.test.js +1 -1
  5. package/lib/core/generic-processor.test.js.map +1 -1
  6. package/lib/core/logger.d.ts +5 -2
  7. package/lib/core/logger.js +10 -4
  8. package/lib/core/logger.js.map +1 -1
  9. package/lib/gen/processor/protos/processor.d.ts +165 -163
  10. package/lib/gen/processor/protos/processor.js +455 -482
  11. package/lib/gen/processor/protos/processor.js.map +1 -1
  12. package/lib/processor-runner.js +1 -1
  13. package/lib/processor-runner.js.map +1 -1
  14. package/lib/service.d.ts +13 -7
  15. package/lib/service.js +102 -18
  16. package/lib/service.js.map +1 -1
  17. package/lib/testing/test-processor-server.d.ts +15 -15
  18. package/lib/testing/test-processor-server.js +9 -4
  19. package/lib/testing/test-processor-server.js.map +1 -1
  20. package/lib/tests/erc20.test.js +1 -1
  21. package/lib/tests/erc20.test.js.map +1 -1
  22. package/lib/tests/logger.test.js +1 -1
  23. package/lib/tests/logger.test.js.map +1 -1
  24. package/lib/utils/erc20.test.js +0 -1
  25. package/lib/utils/erc20.test.js.map +1 -1
  26. package/package.json +1 -1
  27. package/src/core/aptos-processor.ts +70 -0
  28. package/src/core/generic-processor.test.ts +1 -1
  29. package/src/core/logger.ts +12 -4
  30. package/src/gen/processor/protos/processor.ts +606 -650
  31. package/src/processor-runner.ts +1 -1
  32. package/src/service.ts +126 -34
  33. package/src/testing/test-processor-server.ts +27 -32
  34. package/src/tests/erc20.test.ts +1 -1
  35. package/src/tests/logger.test.ts +1 -1
  36. package/src/utils/erc20.test.ts +1 -4
@@ -10,7 +10,7 @@ import path from 'path'
10
10
  import fs from 'fs-extra'
11
11
  import { ProcessorState } from './processor-state'
12
12
  import { load } from './loader'
13
- import { CompressionAlgorithms } from '@grpc/grpc-js/src/compression-algorithms'
13
+ import { CompressionAlgorithms } from '@grpc/grpc-js/build/src/compression-algorithms'
14
14
 
15
15
  global.PROCESSOR_STATE = new ProcessorState()
16
16
 
package/src/service.ts CHANGED
@@ -3,28 +3,25 @@ import { CallContext, ServerError, Status } from 'nice-grpc'
3
3
  import { APTOS_TESTNET_ID, SOL_MAINMET_ID, SUI_DEVNET_ID } from './utils/chain'
4
4
 
5
5
  import {
6
+ AptosCallHandlerConfig,
7
+ AptosEventHandlerConfig,
6
8
  BlockBinding,
7
9
  ContractConfig,
10
+ DataBinding,
8
11
  HandlerType,
9
12
  LogFilter,
10
13
  LogHandlerConfig,
11
- ProcessResult,
14
+ ProcessBindingResponse,
15
+ ProcessBindingsRequest,
12
16
  ProcessBlocksRequest,
13
- ProcessBlocksResponse,
14
17
  ProcessConfigRequest,
15
18
  ProcessConfigResponse,
16
19
  ProcessInstructionsRequest,
17
- ProcessInstructionsResponse,
18
- ProcessLogsRequest,
19
- ProcessLogsResponse,
20
20
  ProcessorServiceImplementation,
21
- ProcessTracesRequest,
22
- ProcessTracesResponse,
21
+ ProcessResult,
23
22
  ProcessTransactionsRequest,
24
- ProcessTransactionsResponse,
25
23
  StartRequest,
26
24
  TemplateInstance,
27
- TraceBinding,
28
25
  } from './gen/processor/protos/processor'
29
26
 
30
27
  import { Empty } from './gen/google/protobuf/empty'
@@ -40,6 +37,8 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
40
37
  private eventHandlers: ((event: Log) => Promise<ProcessResult>)[] = []
41
38
  private traceHandlers: ((trace: Trace) => Promise<ProcessResult>)[] = []
42
39
  private blockHandlers: ((block: Block) => Promise<ProcessResult>)[] = []
40
+ private aptosEventHandlers: ((event: any) => Promise<ProcessResult>)[] = []
41
+ private aptosCallHandlers: ((func: any) => Promise<ProcessResult>)[] = []
43
42
 
44
43
  // map from chain id to list of processors
45
44
  // private blockHandlers = new Map<string, ((block: Block) => Promise<ProcessResult>)[]>()
@@ -98,6 +97,8 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
98
97
  startBlock: processor.config.startBlock,
99
98
  endBlock: DEFAULT_MAX_BLOCK,
100
99
  instructionConfig: undefined,
100
+ aptosEventConfigs: [],
101
+ aptosCallConfigs: [],
101
102
  }
102
103
  if (processor.config.endBlock) {
103
104
  contractConfig.endBlock = processor.config.endBlock
@@ -106,6 +107,8 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
106
107
  // Step 1. Prepare all the block handlers
107
108
  for (const blockHandler of processor.blockHandlers) {
108
109
  const handlerId = this.blockHandlers.push(blockHandler) - 1
110
+ // TODO wrap the block handler into one
111
+
109
112
  contractConfig.blockConfigs.push({
110
113
  handlerId: handlerId,
111
114
  })
@@ -161,7 +164,7 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
161
164
  processorType: USER_PROCESSOR,
162
165
  contract: {
163
166
  name: solanaProcessor.contractName,
164
- chainId: SOL_MAINMET_ID, // TODO set in processor
167
+ chainId: SOL_MAINMET_ID,
165
168
  address: solanaProcessor.address,
166
169
  abi: '',
167
170
  },
@@ -175,6 +178,8 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
175
178
  parsedInstruction: solanaProcessor.fromParsedInstruction !== null,
176
179
  rawDataInstruction: solanaProcessor.decodeInstruction !== null,
177
180
  },
181
+ aptosEventConfigs: [],
182
+ aptosCallConfigs: [],
178
183
  }
179
184
  this.contractConfigs.push(contractConfig)
180
185
  }
@@ -195,6 +200,8 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
195
200
  startBlock: suiProcessor.config.startSeqNumber,
196
201
  endBlock: DEFAULT_MAX_BLOCK,
197
202
  instructionConfig: undefined,
203
+ aptosEventConfigs: [],
204
+ aptosCallConfigs: [],
198
205
  }
199
206
  this.contractConfigs.push(contractConfig)
200
207
  }
@@ -215,6 +222,33 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
215
222
  startBlock: aptosProcessor.config.startSeqNumber,
216
223
  endBlock: DEFAULT_MAX_BLOCK,
217
224
  instructionConfig: undefined,
225
+ aptosEventConfigs: [],
226
+ aptosCallConfigs: [],
227
+ }
228
+ // 1. Prepare event handlers
229
+ for (const handler of aptosProcessor.eventHandlers) {
230
+ const handlerId = this.aptosEventHandlers.push(handler.handler) - 1
231
+ const eventHandlerConfig: AptosEventHandlerConfig = {
232
+ filters: handler.filters,
233
+ handlerId,
234
+ }
235
+ contractConfig.aptosEventConfigs.push(eventHandlerConfig)
236
+ }
237
+
238
+ // 2. Prepare function handlers
239
+ for (const handler of aptosProcessor.callHandlers) {
240
+ const handlerId = this.aptosCallHandlers.push(handler.handler) - 1
241
+ const functionHandlerConfig: AptosCallHandlerConfig = {
242
+ filters: handler.filters.map((filter) => {
243
+ return {
244
+ function: filter.function,
245
+ typeArguments: filter.typeArguments ?? [],
246
+ withTypeArguments: filter.typeArguments ? true : false,
247
+ }
248
+ }),
249
+ handlerId,
250
+ }
251
+ contractConfig.aptosCallConfigs.push(functionHandlerConfig)
218
252
  }
219
253
  this.contractConfigs.push(contractConfig)
220
254
  }
@@ -264,21 +298,55 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
264
298
  return {}
265
299
  }
266
300
 
267
- async processLogs(request: ProcessLogsRequest, context: CallContext): Promise<ProcessLogsResponse> {
301
+ async processBindings(request: ProcessBindingsRequest, options?: CallContext): Promise<ProcessBindingResponse> {
302
+ if (!this.started) {
303
+ throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')
304
+ }
305
+
306
+ const promises = request.bindings.map((binding) => this.processBinding(binding))
307
+ const result = mergeProcessResults(await Promise.all(promises))
308
+
309
+ let updated = false
310
+ if (
311
+ global.PROCESSOR_STATE.templatesInstances &&
312
+ this.templateInstances.length != global.PROCESSOR_STATE.templatesInstances.length
313
+ ) {
314
+ await this.configure()
315
+ updated = true
316
+ }
317
+
318
+ return {
319
+ result,
320
+ configUpdated: updated,
321
+ }
322
+ }
323
+
324
+ async processBinding(request: DataBinding, options?: CallContext): Promise<ProcessResult> {
325
+ switch (request.handlerType) {
326
+ case HandlerType.APT_CALL:
327
+ return this.processAptosCall(request)
328
+ case HandlerType.APT_EVENT:
329
+ return this.processAptosEvent(request)
330
+ default:
331
+ throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType)
332
+ }
333
+ }
334
+
335
+ async processLogs(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {
268
336
  if (!this.started) {
269
337
  throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')
270
338
  }
271
339
 
272
340
  const promises: Promise<ProcessResult>[] = []
273
- for (const l of request.logBindings) {
274
- if (!l.log) {
341
+ for (const l of request.bindings) {
342
+ if (!l.data) {
275
343
  throw new ServerError(Status.INVALID_ARGUMENT, "Log can't be null")
276
344
  }
277
345
  // const jsonString = Buffer.from(l.log.raw.buffer).toString("utf-8")
278
346
  // const jsonString = String.fromCharCode.apply(null, l.log.raw)
279
347
 
280
348
  try {
281
- const jsonString = Utf8ArrayToStr(l.log.raw)
349
+ const jsonString = Utf8ArrayToStr(l.data.raw)
282
350
  const log: Log = JSON.parse(jsonString)
283
351
  const handler = this.eventHandlers[l.handlerId]
284
352
  const promise = handler(log).catch((e) => {
@@ -302,7 +370,7 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
302
370
  updated = true
303
371
  }
304
372
 
305
- recordRuntimeInfo(result, HandlerType.LOG)
373
+ recordRuntimeInfo(result, HandlerType.ETH_LOG)
306
374
  return {
307
375
  result,
308
376
  configUpdated: updated,
@@ -312,16 +380,12 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
312
380
  async processTransactions(
313
381
  request: ProcessTransactionsRequest,
314
382
  context: CallContext
315
- ): Promise<ProcessTransactionsResponse> {
383
+ ): Promise<ProcessBindingResponse> {
316
384
  if (!this.started) {
317
385
  throw new ServerError(Status.UNAVAILABLE, 'Service not started.')
318
386
  }
319
387
 
320
- const result: ProcessResult = {
321
- gauges: [],
322
- counters: [],
323
- logs: [],
324
- }
388
+ const result = ProcessResult.fromPartial({})
325
389
 
326
390
  if (request.chainId.toLowerCase().startsWith('sui') && global.PROCESSOR_STATE.suiProcessors) {
327
391
  const processorPromises: Promise<void>[] = []
@@ -374,22 +438,19 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
374
438
  recordRuntimeInfo(result, HandlerType.TRANSACTION)
375
439
  return {
376
440
  result,
441
+ configUpdated: false,
377
442
  }
378
443
  }
379
444
 
380
445
  async processInstructions(
381
446
  request: ProcessInstructionsRequest,
382
447
  context: CallContext
383
- ): Promise<ProcessInstructionsResponse> {
448
+ ): Promise<ProcessBindingResponse> {
384
449
  if (!this.started) {
385
450
  throw new ServerError(Status.UNAVAILABLE, 'Service not started.')
386
451
  }
387
452
 
388
- const result: ProcessResult = {
389
- gauges: [],
390
- counters: [],
391
- logs: [],
392
- }
453
+ const result = ProcessResult.fromPartial({})
393
454
 
394
455
  // Only have instruction handlers for solana processors
395
456
  if (global.PROCESSOR_STATE.solanaProcessors) {
@@ -436,10 +497,11 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
436
497
  recordRuntimeInfo(result, HandlerType.INSTRUCTION)
437
498
  return {
438
499
  result,
500
+ configUpdated: false,
439
501
  }
440
502
  }
441
503
 
442
- async processBlocks(request: ProcessBlocksRequest, context: CallContext): Promise<ProcessBlocksResponse> {
504
+ async processBlocks(request: ProcessBlocksRequest, context: CallContext): Promise<ProcessBindingResponse> {
443
505
  if (!this.started) {
444
506
  throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')
445
507
  }
@@ -450,6 +512,7 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
450
512
  recordRuntimeInfo(result, HandlerType.BLOCK)
451
513
  return {
452
514
  result,
515
+ configUpdated: false,
453
516
  }
454
517
  }
455
518
 
@@ -471,31 +534,60 @@ export class ProcessorServiceImpl implements ProcessorServiceImplementation {
471
534
  return mergeProcessResults(await Promise.all(promises))
472
535
  }
473
536
 
474
- async processTraces(request: ProcessTracesRequest, context: CallContext): Promise<ProcessTracesResponse> {
537
+ async processTraces(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {
475
538
  if (!this.started) {
476
539
  throw new ServerError(Status.UNAVAILABLE, 'Service Not started.')
477
540
  }
478
541
 
479
- const promises = request.traceBindings.map((binding) => this.processTrace(binding))
542
+ const promises = request.bindings.map((binding) => this.processTrace(binding))
480
543
  const result = mergeProcessResults(await Promise.all(promises))
481
544
 
482
- recordRuntimeInfo(result, HandlerType.TRACE)
545
+ recordRuntimeInfo(result, HandlerType.ETH_TRACE)
483
546
  return {
484
547
  result,
548
+ configUpdated: false,
485
549
  }
486
550
  }
487
551
 
488
- async processTrace(binding: TraceBinding): Promise<ProcessResult> {
489
- if (!binding.trace) {
552
+ async processTrace(binding: DataBinding): Promise<ProcessResult> {
553
+ if (!binding.data) {
490
554
  throw new ServerError(Status.INVALID_ARGUMENT, "Trace can't be empty")
491
555
  }
492
- const jsonString = Utf8ArrayToStr(binding.trace.raw)
556
+ const jsonString = Utf8ArrayToStr(binding.data.raw)
493
557
  const trace: Trace = JSON.parse(jsonString)
494
558
 
495
559
  return this.traceHandlers[binding.handlerId](trace).catch((e) => {
496
560
  throw new ServerError(Status.INTERNAL, 'error processing trace: ' + jsonString + '\n' + errorString(e))
497
561
  })
498
562
  }
563
+
564
+ async processAptosEvent(binding: DataBinding): Promise<ProcessResult> {
565
+ if (!binding.data) {
566
+ throw new ServerError(Status.INVALID_ARGUMENT, "Event can't be empty")
567
+ }
568
+ const jsonString = Utf8ArrayToStr(binding.data.raw)
569
+ const event = JSON.parse(jsonString)
570
+ // only support aptos event for now
571
+ const result = await this.aptosEventHandlers[binding.handlerId](event).catch((e) => {
572
+ throw new ServerError(Status.INTERNAL, 'error processing event: ' + jsonString + '\n' + errorString(e))
573
+ })
574
+ recordRuntimeInfo(result, HandlerType.APT_EVENT)
575
+ return result
576
+ }
577
+
578
+ async processAptosCall(binding: DataBinding): Promise<ProcessResult> {
579
+ if (!binding.data) {
580
+ throw new ServerError(Status.INVALID_ARGUMENT, "Event can't be empty")
581
+ }
582
+ const jsonString = Utf8ArrayToStr(binding.data.raw)
583
+ const call = JSON.parse(jsonString)
584
+ // only support aptos call for now
585
+ const result = await this.aptosCallHandlers[binding.handlerId](call).catch((e) => {
586
+ throw new ServerError(Status.INTERNAL, 'error processing call: ' + jsonString + '\n' + errorString(e))
587
+ })
588
+ recordRuntimeInfo(result, HandlerType.APT_CALL)
589
+ return result
590
+ }
499
591
  }
500
592
 
501
593
  // https://ourcodeworld.com/articles/read/164/how-to-convert-an-uint8array-to-string-in-javascript
@@ -1,25 +1,21 @@
1
1
  import {
2
2
  BlockBinding,
3
3
  ContractConfig,
4
- LogBinding,
4
+ DataBinding,
5
+ HandlerType,
6
+ ProcessBindingResponse,
7
+ ProcessBindingsRequest,
5
8
  ProcessBlocksRequest,
6
- ProcessBlocksResponse,
7
9
  ProcessConfigRequest,
8
10
  ProcessConfigResponse,
9
11
  ProcessInstructionsRequest,
10
- ProcessInstructionsResponse,
11
- ProcessLogsRequest,
12
- ProcessLogsResponse,
13
12
  ProcessorServiceImpl,
14
13
  ProcessorServiceImplementation,
15
14
  ProcessorState,
16
- ProcessTracesRequest,
17
- ProcessTracesResponse,
18
15
  ProcessTransactionsRequest,
19
- ProcessTransactionsResponse,
20
16
  setProvider,
21
17
  StartRequest,
22
- TraceBinding,
18
+ Trace,
23
19
  } from '@sentio/sdk'
24
20
  import { CallContext } from 'nice-grpc-common'
25
21
  import { Empty } from '../gen/google/protobuf/empty'
@@ -28,7 +24,6 @@ import { CHAIN_MAP } from '../utils/chain'
28
24
  import { Block, Log } from '@ethersproject/abstract-provider'
29
25
  import Long from 'long'
30
26
  import { getNetwork, Networkish } from '@ethersproject/providers'
31
- import { Trace } from '@sentio/sdk'
32
27
 
33
28
  const TEST_CONTEXT: CallContext = <CallContext>{}
34
29
 
@@ -71,37 +66,31 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
71
66
  return this.service.getConfig(request, context)
72
67
  }
73
68
 
74
- processBlocks(request: ProcessBlocksRequest, context = TEST_CONTEXT): Promise<ProcessBlocksResponse> {
69
+ processBlocks(request: ProcessBlocksRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {
75
70
  return this.service.processBlocks(request, context)
76
71
  }
77
72
 
78
- processInstructions(
79
- request: ProcessInstructionsRequest,
80
- context = TEST_CONTEXT
81
- ): Promise<ProcessInstructionsResponse> {
73
+ processInstructions(request: ProcessInstructionsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {
82
74
  return this.service.processInstructions(request, context)
83
75
  }
84
76
 
85
- processLogs(request: ProcessLogsRequest, context = TEST_CONTEXT): Promise<ProcessLogsResponse> {
77
+ processLogs(request: ProcessBindingsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {
86
78
  return this.service.processLogs(request, context)
87
79
  }
88
80
 
89
- processTraces(request: ProcessTracesRequest, context: CallContext = TEST_CONTEXT): Promise<ProcessTracesResponse> {
81
+ processTraces(request: ProcessBindingsRequest, context: CallContext = TEST_CONTEXT): Promise<ProcessBindingResponse> {
90
82
  return this.service.processTraces(request, context)
91
83
  }
92
84
 
93
- processTransactions(
94
- request: ProcessTransactionsRequest,
95
- context = TEST_CONTEXT
96
- ): Promise<ProcessTransactionsResponse> {
85
+ processTransactions(request: ProcessTransactionsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {
97
86
  return this.service.processTransactions(request, context)
98
87
  }
99
88
 
100
- testTrace(trace: Trace, network: Networkish = 1): Promise<ProcessTracesResponse> {
89
+ testTrace(trace: Trace, network: Networkish = 1): Promise<ProcessBindingResponse> {
101
90
  return this.testTraces([trace], network)
102
91
  }
103
92
 
104
- testTraces(traces: Trace[], network: Networkish = 1): Promise<ProcessTracesResponse> {
93
+ testTraces(traces: Trace[], network: Networkish = 1): Promise<ProcessBindingResponse> {
105
94
  const bindings = []
106
95
  for (const trace of traces) {
107
96
  const binding = this.buildTraceBinding(trace, network)
@@ -111,11 +100,11 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
111
100
  bindings.push(binding)
112
101
  }
113
102
  return this.processTraces({
114
- traceBindings: bindings,
103
+ bindings: bindings,
115
104
  })
116
105
  }
117
106
 
118
- buildTraceBinding(trace: Trace, network: Networkish = 1): TraceBinding | undefined {
107
+ buildTraceBinding(trace: Trace, network: Networkish = 1): DataBinding | undefined {
119
108
  if (trace.type !== 'call' || !trace.action.input) {
120
109
  throw Error('Invalid test trace: ' + JSON.stringify(trace))
121
110
  }
@@ -131,10 +120,11 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
131
120
  for (const config of contract.traceConfigs) {
132
121
  if (config.signature == signature) {
133
122
  return {
134
- trace: {
123
+ data: {
135
124
  raw: toBytes(trace),
136
125
  },
137
126
  handlerId: config.handlerId,
127
+ handlerType: HandlerType.ETH_TRACE,
138
128
  }
139
129
  }
140
130
  }
@@ -142,11 +132,11 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
142
132
  return undefined
143
133
  }
144
134
 
145
- testLog(log: Log, network: Networkish = 1): Promise<ProcessLogsResponse> {
135
+ testLog(log: Log, network: Networkish = 1): Promise<ProcessBindingResponse> {
146
136
  return this.testLogs([log], network)
147
137
  }
148
138
 
149
- testLogs(logs: Log[], network: Networkish = 1): Promise<ProcessLogsResponse> {
139
+ testLogs(logs: Log[], network: Networkish = 1): Promise<ProcessBindingResponse> {
150
140
  const bindings = []
151
141
  for (const log of logs) {
152
142
  const binding = this.buildLogBinding(log, network)
@@ -156,11 +146,11 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
156
146
  bindings.push(binding)
157
147
  }
158
148
  return this.processLogs({
159
- logBindings: bindings,
149
+ bindings: bindings,
160
150
  })
161
151
  }
162
152
 
163
- buildLogBinding(log: Log, network: Networkish = 1): LogBinding | undefined {
153
+ buildLogBinding(log: Log, network: Networkish = 1): DataBinding | undefined {
164
154
  for (const contract of this.contractConfig) {
165
155
  if (contract.contract?.chainId !== getNetwork(network).chainId.toString()) {
166
156
  continue
@@ -191,10 +181,11 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
191
181
  }
192
182
  if (match) {
193
183
  return {
194
- log: {
184
+ data: {
195
185
  raw: toBytes(log),
196
186
  },
197
187
  handlerId: config.handlerId,
188
+ handlerType: HandlerType.ETH_LOG,
198
189
  }
199
190
  }
200
191
  }
@@ -203,7 +194,7 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
203
194
  return undefined
204
195
  }
205
196
 
206
- testBlock(block: Partial<Block> & { number: number }, network: Networkish = 1): Promise<ProcessBlocksResponse> {
197
+ testBlock(block: Partial<Block> & { number: number }, network: Networkish = 1): Promise<ProcessBindingResponse> {
207
198
  return this.testBlocks([block], network)
208
199
  }
209
200
 
@@ -246,6 +237,10 @@ export class TestProcessorServer implements ProcessorServiceImplementation {
246
237
  }
247
238
  return binding
248
239
  }
240
+
241
+ processBindings(request: ProcessBindingsRequest, context: CallContext): Promise<ProcessBindingResponse> {
242
+ return this.service.processBindings(request, context)
243
+ }
249
244
  }
250
245
 
251
246
  function toBytes(obj: any): Uint8Array {
@@ -57,7 +57,7 @@ describe('Test Basic Examples', () => {
57
57
  expect(firstCounterValue(res.result, 'c1')).equals(1n)
58
58
 
59
59
  expect(counters?.[0].metadata?.chainId).equals('1')
60
- expect(counters?.[0].runtimeInfo?.from).equals(HandlerType.LOG)
60
+ expect(counters?.[0].runtimeInfo?.from).equals(HandlerType.ETH_LOG)
61
61
  expect(res.configUpdated).equals(true)
62
62
 
63
63
  const logData2 = Object.assign({}, logData)
@@ -41,6 +41,6 @@ describe('Test Error Capture', () => {
41
41
  )
42
42
  const log = res.result?.logs?.[0]
43
43
  expect(log?.message).eq('transferred 0')
44
- expect(log?.metadata?.labels['from'].toLowerCase()).eq('0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91')
44
+ expect(JSON.parse(log?.attributes || '')['from'].toLowerCase()).eq('0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91')
45
45
  })
46
46
  })
@@ -1,7 +1,4 @@
1
- import { ProcessorState, DummyProvider } from '@sentio/sdk'
2
-
3
- console.log(DummyProvider)
4
-
1
+ import { ProcessorState } from '@sentio/sdk'
5
2
  import { getERC20TokenInfo } from './token'
6
3
  import { loadTestProvidersFromEnv } from '../testing/test-provider'
7
4