@sentio/sdk 2.43.3-rc.3 → 2.44.0-rc.10

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 (65) hide show
  1. package/lib/btc/btc-plugin.d.ts +3 -1
  2. package/lib/btc/btc-plugin.d.ts.map +1 -1
  3. package/lib/btc/btc-plugin.js +41 -3
  4. package/lib/btc/btc-plugin.js.map +1 -1
  5. package/lib/btc/btc-processor.d.ts +7 -2
  6. package/lib/btc/btc-processor.d.ts.map +1 -1
  7. package/lib/btc/btc-processor.js +40 -1
  8. package/lib/btc/btc-processor.js.map +1 -1
  9. package/lib/btc/types.d.ts +29 -10
  10. package/lib/btc/types.d.ts.map +1 -1
  11. package/lib/btc/types.js +29 -0
  12. package/lib/btc/types.js.map +1 -1
  13. package/lib/fuel/asset-processor.d.ts.map +1 -1
  14. package/lib/fuel/asset-processor.js +7 -1
  15. package/lib/fuel/asset-processor.js.map +1 -1
  16. package/lib/fuel/base-processor.d.ts.map +1 -1
  17. package/lib/fuel/base-processor.js +2 -3
  18. package/lib/fuel/base-processor.js.map +1 -1
  19. package/lib/fuel/codegen/codegen.js +50 -9
  20. package/lib/fuel/codegen/codegen.js.map +1 -1
  21. package/lib/fuel/context.d.ts +6 -6
  22. package/lib/fuel/context.d.ts.map +1 -1
  23. package/lib/fuel/context.js.map +1 -1
  24. package/lib/fuel/fuel-processor-template.d.ts +42 -0
  25. package/lib/fuel/fuel-processor-template.d.ts.map +1 -0
  26. package/lib/fuel/fuel-processor-template.js +109 -0
  27. package/lib/fuel/fuel-processor-template.js.map +1 -0
  28. package/lib/fuel/fuel-processor.d.ts +5 -2
  29. package/lib/fuel/fuel-processor.d.ts.map +1 -1
  30. package/lib/fuel/fuel-processor.js +26 -1
  31. package/lib/fuel/fuel-processor.js.map +1 -1
  32. package/lib/fuel/global-processor.d.ts.map +1 -1
  33. package/lib/fuel/global-processor.js +7 -1
  34. package/lib/fuel/global-processor.js.map +1 -1
  35. package/lib/fuel/index.d.ts +1 -0
  36. package/lib/fuel/index.d.ts.map +1 -1
  37. package/lib/fuel/index.js +1 -0
  38. package/lib/fuel/index.js.map +1 -1
  39. package/lib/fuel/types.d.ts +2 -2
  40. package/lib/fuel/types.d.ts.map +1 -1
  41. package/lib/fuel/types.js +2 -2
  42. package/lib/fuel/types.js.map +1 -1
  43. package/lib/sui/sui-object-processor-template.d.ts +1 -0
  44. package/lib/sui/sui-object-processor-template.d.ts.map +1 -1
  45. package/lib/sui/sui-object-processor-template.js +63 -4
  46. package/lib/sui/sui-object-processor-template.js.map +1 -1
  47. package/lib/sui/sui-object-processor.d.ts +1 -0
  48. package/lib/sui/sui-object-processor.d.ts.map +1 -1
  49. package/lib/sui/sui-object-processor.js +1 -0
  50. package/lib/sui/sui-object-processor.js.map +1 -1
  51. package/package.json +3 -3
  52. package/src/btc/btc-plugin.ts +50 -3
  53. package/src/btc/btc-processor.ts +79 -2
  54. package/src/btc/types.ts +51 -10
  55. package/src/fuel/asset-processor.ts +8 -1
  56. package/src/fuel/base-processor.ts +3 -3
  57. package/src/fuel/codegen/codegen.ts +55 -11
  58. package/src/fuel/context.ts +4 -4
  59. package/src/fuel/fuel-processor-template.ts +161 -0
  60. package/src/fuel/fuel-processor.ts +32 -3
  61. package/src/fuel/global-processor.ts +8 -2
  62. package/src/fuel/index.ts +1 -0
  63. package/src/fuel/types.ts +2 -2
  64. package/src/sui/sui-object-processor-template.ts +79 -4
  65. package/src/sui/sui-object-processor.ts +1 -0
@@ -25,7 +25,7 @@ export class FuelProcessor<TContract extends Contract> implements FuelBaseProces
25
25
 
26
26
  static bind(config: FuelProcessorConfig): FuelProcessor<any> {
27
27
  const processor = new FuelProcessor(config)
28
- FuelProcessorState.INSTANCE.addValue(processor)
28
+ addFuelProcessor(config, processor)
29
29
  return processor
30
30
  }
31
31
 
@@ -49,7 +49,7 @@ export class FuelProcessor<TContract extends Contract> implements FuelBaseProces
49
49
  }
50
50
 
51
51
  public onTransaction(
52
- handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => void | Promise<void>,
52
+ handler: (transaction: FuelTransaction, ctx: FuelContractContext<TContract>) => PromiseOrVoid,
53
53
  config: FuelFetchConfig = DEFAULT_FUEL_FETCH_CONFIG
54
54
  ) {
55
55
  const callHandler = {
@@ -161,7 +161,7 @@ export class FuelProcessor<TContract extends Contract> implements FuelBaseProces
161
161
 
162
162
  public onLog<T>(
163
163
  logIdFilter: string | string[],
164
- handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => void | Promise<void>
164
+ handler: (logs: FuelLog<T>, ctx: FuelContractContext<TContract>) => PromiseOrVoid
165
165
  ) {
166
166
  const logIds = new Set(Array.isArray(logIdFilter) ? logIdFilter : [logIdFilter])
167
167
 
@@ -308,3 +308,32 @@ export type FuelProcessorConfig = {
308
308
  endBlock?: bigint
309
309
  abi: JsonAbi
310
310
  }
311
+
312
+ export function getOptionsSignature(opts: Omit<FuelProcessorConfig, 'abi'>): string {
313
+ const sig = [opts.address]
314
+ if (opts.chainId) {
315
+ sig.push(opts.chainId)
316
+ }
317
+ if (opts.name) {
318
+ sig.push(opts.name)
319
+ }
320
+ if (opts.startBlock) {
321
+ sig.push(opts.startBlock.toString())
322
+ }
323
+ if (opts.endBlock) {
324
+ sig.push(opts.endBlock.toString())
325
+ }
326
+ return sig.join('_')
327
+ }
328
+
329
+ // Dedup processor that bind multiple times
330
+ export function getFuelProcessor(opts: Omit<FuelProcessorConfig, 'abi'>) {
331
+ const sig = getOptionsSignature(opts)
332
+ return FuelProcessorState.INSTANCE.getValue(sig)
333
+ }
334
+
335
+ export function addFuelProcessor(opts: Omit<FuelProcessorConfig, 'abi'>, processor: FuelBaseProcessor<any>) {
336
+ const sig = getOptionsSignature(opts)
337
+
338
+ FuelProcessorState.INSTANCE.getOrSetValue(sig, processor)
339
+ }
@@ -4,7 +4,7 @@ import { Provider } from 'fuels'
4
4
  import { getRpcEndpoint } from './network.js'
5
5
  import { decodeFuelTransaction, DEFAULT_FUEL_FETCH_CONFIG, FuelFetchConfig } from './transaction.js'
6
6
  import { FuelContext } from './context.js'
7
- import { FuelProcessorConfig } from './fuel-processor.js'
7
+ import { FuelProcessorConfig, getOptionsSignature } from './fuel-processor.js'
8
8
  import { mergeProcessResults } from '@sentio/runtime'
9
9
 
10
10
  type GlobalFuelProcessorConfig = Omit<FuelProcessorConfig, 'address' | 'abi'>
@@ -17,7 +17,13 @@ export class FuelGlobalProcessor implements FuelBaseProcessor<GlobalFuelProcesso
17
17
 
18
18
  static bind(config: GlobalFuelProcessorConfig): FuelGlobalProcessor {
19
19
  const processor = new FuelGlobalProcessor(config)
20
- FuelProcessorState.INSTANCE.addValue(processor)
20
+ const sig =
21
+ 'global_' +
22
+ getOptionsSignature({
23
+ ...config,
24
+ address: '*'
25
+ })
26
+ FuelProcessorState.INSTANCE.getOrSetValue(sig, processor)
21
27
  return processor
22
28
  }
23
29
 
package/src/fuel/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { FuelPlugin } from './fuel-plugin.js'
2
2
  export * from './context.js'
3
3
  export * from './fuel-processor.js'
4
+ export * from './fuel-processor-template.js'
4
5
  export * from './network.js'
5
6
  export * from './transaction.js'
6
7
  export * from './base-processor.js'
package/src/fuel/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ListStateStorage } from '@sentio/runtime'
1
+ import { MapStateStorage } from '@sentio/runtime'
2
2
  import {
3
3
  Data_FuelBlock,
4
4
  Data_FuelCall,
@@ -17,7 +17,7 @@ export interface FuelBaseProcessor<T> {
17
17
  blockHandlers: BlockHandler[]
18
18
  }
19
19
 
20
- export class FuelProcessorState extends ListStateStorage<FuelBaseProcessor<any>> {
20
+ export class FuelProcessorState extends MapStateStorage<FuelBaseProcessor<any>> {
21
21
  static INSTANCE = new FuelProcessorState()
22
22
  }
23
23
 
@@ -5,6 +5,7 @@ import { SuiMoveObject, SuiTransactionBlockResponse } from '@mysten/sui.js/clien
5
5
  import { PromiseOrVoid } from '../core/index.js'
6
6
  import {
7
7
  DEFAULT_ACCOUNT_FETCH_CONFIG,
8
+ SuiAccountProcessorState,
8
9
  SuiAddressProcessor,
9
10
  SuiBaseObjectOrAddressProcessor,
10
11
  SuiObjectBindOptions,
@@ -13,7 +14,8 @@ import {
13
14
  } from './sui-object-processor.js'
14
15
  import { TemplateInstanceState } from '../core/template.js'
15
16
  import { SuiBindOptions } from './sui-processor.js'
16
- import { TransactionFilter } from '../move/index.js'
17
+ import { TransactionFilter, accountAddressString } from '../move/index.js'
18
+ import { ServerError, Status } from 'nice-grpc'
17
19
 
18
20
  class ObjectHandler<HandlerType> {
19
21
  type?: string
@@ -48,7 +50,12 @@ export abstract class SuiObjectOrAddressProcessorTemplate<
48
50
  bind(options: OptionType, ctx: SuiContext): void {
49
51
  options.network = options.network || ctx.network
50
52
  options.startCheckpoint = options.startCheckpoint || ctx.checkpoint
51
- const id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address
53
+ let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address
54
+
55
+ if (id === '*') {
56
+ throw new ServerError(Status.INVALID_ARGUMENT, "can't bind template instance with *")
57
+ }
58
+ id = accountAddressString(id)
52
59
 
53
60
  const sig = [options.network, id].join('_')
54
61
  if (this.binds.has(sig)) {
@@ -80,6 +87,69 @@ export abstract class SuiObjectOrAddressProcessorTemplate<
80
87
  endBlock: 0n,
81
88
  baseLabels: config.baseLabels
82
89
  })
90
+ console.log(`successfully bind template ${sig}`)
91
+ }
92
+
93
+ unbind(options: OptionType, ctx: SuiContext): void {
94
+ options.network = options.network || ctx.network
95
+ options.startCheckpoint = options.startCheckpoint || ctx.checkpoint
96
+ let id = (options as SuiObjectBindOptions).objectId || (options as SuiBindOptions).address
97
+
98
+ if (id === '*') {
99
+ throw new ServerError(Status.INVALID_ARGUMENT, "can't delete template instance bind with *")
100
+ }
101
+ id = accountAddressString(id)
102
+
103
+ const sig = [options.network, id].join('_')
104
+ if (!this.binds.has(sig)) {
105
+ console.log(`the template instance ${sig} not existed or already unbind`)
106
+ return
107
+ }
108
+ this.binds.delete(sig)
109
+
110
+ let deleted = 0
111
+ const oldTemplateInstances = TemplateInstanceState.INSTANCE.unregister()
112
+ for (const templateInstance of oldTemplateInstances) {
113
+ if (templateInstance.contract?.chainId === options.network && templateInstance.contract.address == id) {
114
+ deleted++
115
+ continue
116
+ }
117
+ TemplateInstanceState.INSTANCE.addValue(templateInstance)
118
+ }
119
+
120
+ if (deleted !== 1) {
121
+ throw new ServerError(
122
+ Status.INVALID_ARGUMENT,
123
+ `Failed to delete template instance ${sig}, deleted ${deleted} times`
124
+ )
125
+ }
126
+
127
+ const oldProcessors = SuiAccountProcessorState.INSTANCE.unregister()
128
+ deleted = 0
129
+ for (const processor of oldProcessors) {
130
+ if (processor.templateId === this.id) {
131
+ if (processor.config.network == options.network && processor.config.address === id) {
132
+ deleted++
133
+ continue
134
+ }
135
+ }
136
+ SuiAccountProcessorState.INSTANCE.addValue(processor)
137
+ }
138
+
139
+ if (deleted !== 1) {
140
+ throw new ServerError(
141
+ Status.INVALID_ARGUMENT,
142
+ `Failed to delete processor for template ${this.id}, ${sig}. deleted ${deleted} times`
143
+ )
144
+ }
145
+
146
+ console.log(`successfully unbind template ${sig}`)
147
+
148
+ ctx.update({
149
+ states: {
150
+ configUpdated: true
151
+ }
152
+ })
83
153
  }
84
154
 
85
155
  protected onInterval(
@@ -153,6 +223,7 @@ export class SuiAddressProcessorTemplate extends SuiObjectOrAddressProcessorTemp
153
223
  for (const handler of this.handlers) {
154
224
  p.onTransactionBlock(handler.handler, handler.filter, handler.fetchConfig)
155
225
  }
226
+ p.templateId = this.id
156
227
  return p
157
228
  }
158
229
 
@@ -176,7 +247,9 @@ export class SuiObjectProcessorTemplate extends SuiObjectOrAddressProcessorTempl
176
247
  SuiObjectProcessor
177
248
  > {
178
249
  createProcessor(options: SuiObjectBindOptions): SuiObjectProcessor {
179
- return SuiObjectProcessor.bind(options)
250
+ const p = SuiObjectProcessor.bind(options)
251
+ p.templateId = this.id
252
+ return p
180
253
  }
181
254
  }
182
255
 
@@ -186,6 +259,8 @@ export class SuiWrappedObjectProcessorTemplate extends SuiObjectOrAddressProcess
186
259
  SuiWrappedObjectProcessor
187
260
  > {
188
261
  createProcessor(options: SuiObjectBindOptions): SuiWrappedObjectProcessor {
189
- return SuiWrappedObjectProcessor.bind(options)
262
+ const p = SuiWrappedObjectProcessor.bind(options)
263
+ p.templateId = this.id
264
+ return p
190
265
  }
191
266
  }
@@ -46,6 +46,7 @@ export interface SuiInternalObjectsBindOptions extends SuiBindOptions {
46
46
  export abstract class SuiBaseObjectOrAddressProcessor<HandlerType> {
47
47
  config: IndexConfigure
48
48
  ownerType: MoveOwnerType
49
+ templateId: number | undefined
49
50
 
50
51
  objectHandlers: ObjectHandler[] = []
51
52