@subsquid/portal-client 0.3.2 → 0.4.0

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 (131) hide show
  1. package/lib/client.d.ts +40 -18
  2. package/lib/client.d.ts.map +1 -1
  3. package/lib/client.js +166 -188
  4. package/lib/client.js.map +1 -1
  5. package/lib/query/common/data.d.ts +21 -0
  6. package/lib/query/common/data.d.ts.map +1 -0
  7. package/lib/query/common/data.js +3 -0
  8. package/lib/query/common/data.js.map +1 -0
  9. package/lib/query/common/query.d.ts +7 -0
  10. package/lib/query/common/query.d.ts.map +1 -0
  11. package/lib/query/common/query.js +3 -0
  12. package/lib/query/common/query.js.map +1 -0
  13. package/lib/query/evm/data.d.ts +159 -0
  14. package/lib/query/evm/data.d.ts.map +1 -0
  15. package/lib/query/evm/data.js +3 -0
  16. package/lib/query/evm/data.js.map +1 -0
  17. package/lib/query/evm/fields.d.ts +50 -0
  18. package/lib/query/evm/fields.d.ts.map +1 -0
  19. package/lib/query/evm/fields.js +3 -0
  20. package/lib/query/evm/fields.js.map +1 -0
  21. package/lib/query/evm/index.d.ts +4 -0
  22. package/lib/query/evm/index.d.ts.map +1 -0
  23. package/lib/query/evm/index.js +7 -0
  24. package/lib/query/evm/index.js.map +1 -0
  25. package/lib/query/evm/query.d.ts +54 -0
  26. package/lib/query/evm/query.d.ts.map +1 -0
  27. package/lib/query/evm/query.js +3 -0
  28. package/lib/query/evm/query.js.map +1 -0
  29. package/lib/query/evm/schema.d.ts +322 -0
  30. package/lib/query/evm/schema.d.ts.map +1 -0
  31. package/lib/query/evm/schema.js +224 -0
  32. package/lib/query/evm/schema.js.map +1 -0
  33. package/lib/query/index.d.ts +576 -8
  34. package/lib/query/index.d.ts.map +1 -1
  35. package/lib/query/index.js +15 -24
  36. package/lib/query/index.js.map +1 -1
  37. package/lib/query/solana/data.d.ts +115 -0
  38. package/lib/query/solana/data.d.ts.map +1 -0
  39. package/lib/query/solana/data.js +3 -0
  40. package/lib/query/solana/data.js.map +1 -0
  41. package/lib/query/solana/fields.d.ts +31 -0
  42. package/lib/query/solana/fields.d.ts.map +1 -0
  43. package/lib/query/solana/fields.js +3 -0
  44. package/lib/query/solana/fields.js.map +1 -0
  45. package/lib/query/solana/index.d.ts +4 -0
  46. package/lib/query/solana/index.d.ts.map +1 -0
  47. package/lib/query/solana/index.js +7 -0
  48. package/lib/query/solana/index.js.map +1 -0
  49. package/lib/query/solana/query.d.ts +74 -0
  50. package/lib/query/solana/query.d.ts.map +1 -0
  51. package/lib/query/solana/query.js +3 -0
  52. package/lib/query/solana/query.js.map +1 -0
  53. package/lib/query/solana/schema.d.ts +160 -0
  54. package/lib/query/solana/schema.d.ts.map +1 -0
  55. package/lib/query/solana/schema.js +130 -0
  56. package/lib/query/solana/schema.js.map +1 -0
  57. package/lib/query/substrate/data.d.ts +98 -0
  58. package/lib/query/substrate/data.d.ts.map +1 -0
  59. package/lib/query/substrate/data.js +3 -0
  60. package/lib/query/substrate/data.js.map +1 -0
  61. package/lib/query/substrate/fields.d.ts +22 -0
  62. package/lib/query/substrate/fields.d.ts.map +1 -0
  63. package/lib/query/substrate/fields.js +3 -0
  64. package/lib/query/substrate/fields.js.map +1 -0
  65. package/lib/query/substrate/index.d.ts +4 -0
  66. package/lib/query/substrate/index.d.ts.map +1 -0
  67. package/lib/query/substrate/index.js +7 -0
  68. package/lib/query/substrate/index.js.map +1 -0
  69. package/lib/query/substrate/query.d.ts +50 -0
  70. package/lib/query/substrate/query.d.ts.map +1 -0
  71. package/lib/query/substrate/query.js +3 -0
  72. package/lib/query/substrate/query.js.map +1 -0
  73. package/lib/query/substrate/schema.d.ts +102 -0
  74. package/lib/query/substrate/schema.d.ts.map +1 -0
  75. package/lib/query/substrate/schema.js +88 -0
  76. package/lib/query/substrate/schema.js.map +1 -0
  77. package/lib/query/type-util.d.ts +13 -0
  78. package/lib/query/type-util.d.ts.map +1 -0
  79. package/lib/query/type-util.js +3 -0
  80. package/lib/query/type-util.js.map +1 -0
  81. package/lib/query/util.d.ts +5 -0
  82. package/lib/query/util.d.ts.map +1 -0
  83. package/lib/query/util.js +23 -0
  84. package/lib/query/util.js.map +1 -0
  85. package/lib/util.d.ts +19 -0
  86. package/lib/util.d.ts.map +1 -0
  87. package/lib/util.js +57 -0
  88. package/lib/util.js.map +1 -0
  89. package/package.json +3 -3
  90. package/src/client.ts +231 -247
  91. package/src/query/common/data.ts +24 -0
  92. package/src/query/common/query.ts +6 -0
  93. package/src/query/evm/data.ts +182 -0
  94. package/src/query/evm/fields.ts +105 -0
  95. package/src/query/evm/index.ts +3 -0
  96. package/src/query/evm/query.ts +59 -0
  97. package/src/query/evm/schema.ts +277 -0
  98. package/src/query/index.ts +19 -36
  99. package/src/query/solana/data.ts +132 -0
  100. package/src/query/solana/fields.ts +42 -0
  101. package/src/query/solana/index.ts +3 -0
  102. package/src/query/solana/query.ts +89 -0
  103. package/src/query/solana/schema.ts +164 -0
  104. package/src/query/substrate/data.ts +101 -0
  105. package/src/query/substrate/fields.ts +30 -0
  106. package/src/query/substrate/index.ts +3 -0
  107. package/src/query/substrate/query.ts +60 -0
  108. package/src/query/substrate/schema.ts +114 -0
  109. package/src/query/type-util.ts +25 -0
  110. package/src/query/util.ts +23 -0
  111. package/src/util.ts +56 -0
  112. package/lib/query/common.d.ts +0 -56
  113. package/lib/query/common.d.ts.map +0 -1
  114. package/lib/query/common.js +0 -16
  115. package/lib/query/common.js.map +0 -1
  116. package/lib/query/evm.d.ts +0 -267
  117. package/lib/query/evm.d.ts.map +0 -1
  118. package/lib/query/evm.js +0 -245
  119. package/lib/query/evm.js.map +0 -1
  120. package/lib/query/solana.d.ts +0 -224
  121. package/lib/query/solana.d.ts.map +0 -1
  122. package/lib/query/solana.js +0 -121
  123. package/lib/query/solana.js.map +0 -1
  124. package/lib/query/substrate.d.ts +0 -173
  125. package/lib/query/substrate.d.ts.map +0 -1
  126. package/lib/query/substrate.js +0 -71
  127. package/lib/query/substrate.js.map +0 -1
  128. package/src/query/common.ts +0 -83
  129. package/src/query/evm.ts +0 -677
  130. package/src/query/solana.ts +0 -438
  131. package/src/query/substrate.ts +0 -288
package/src/query/evm.ts DELETED
@@ -1,677 +0,0 @@
1
- import {
2
- QTY,
3
- BYTES,
4
- constant,
5
- NAT,
6
- nullable,
7
- object,
8
- option,
9
- STRING,
10
- taggedUnion,
11
- Validator,
12
- withDefault,
13
- oneOf,
14
- ANY,
15
- } from '@subsquid/util-internal-validation'
16
- import {array} from '@subsquid/util-internal-validation'
17
- import {
18
- Select,
19
- Selector,
20
- Trues,
21
- Hex,
22
- ConditionalOmit,
23
- Simplify,
24
- PortalQuery,
25
- project,
26
- type Selected,
27
- type ObjectValidatorShape,
28
- } from './common'
29
-
30
- type AddPrefix<Prefix extends string, S> = S extends string ? `${Prefix}${Capitalize<S>}` : never
31
-
32
- type RemovePrefix<Prefix extends string, T> = T extends `${Prefix}${infer S}` ? Uncapitalize<S> : never
33
-
34
- type RemoveKeysPrefix<Prefix extends string, T> = {
35
- [K in keyof T as RemovePrefix<Prefix, K>]: T[K]
36
- }
37
-
38
- export type BlockHeaderFields = {
39
- number: number
40
- hash: Hex
41
- parentHash: Hex
42
- timestamp: number
43
- transactionsRoot: Hex
44
- receiptsRoot: Hex
45
- stateRoot: Hex
46
- logsBloom: Hex
47
- sha3Uncles: Hex
48
- extraData: Hex
49
- miner: Hex
50
- nonce: Hex
51
- mixHash: Hex
52
- size: number
53
- gasLimit: bigint
54
- gasUsed: bigint
55
- difficulty: bigint
56
- totalDifficulty?: bigint
57
- baseFeePerGas: bigint
58
- blobGasUsed: bigint
59
- excessBlobGas: bigint
60
- l1BlockNumber?: number
61
- }
62
-
63
- export type TransactionFields = {
64
- transactionIndex: number
65
- hash: Hex
66
- nonce: number
67
- from: Hex
68
- to?: Hex
69
- input: Hex
70
- value: bigint
71
- gas: bigint
72
- gasPrice: bigint
73
- maxFeePerGas?: bigint
74
- maxPriorityFeePerGas?: bigint
75
- v: bigint
76
- r: Hex
77
- s: Hex
78
- yParity?: number
79
- chainId?: number
80
- sighash?: Hex
81
- contractAddress?: Hex
82
- gasUsed: bigint
83
- cumulativeGasUsed: bigint
84
- effectiveGasPrice: bigint
85
- type: number
86
- status: number
87
- blobVersionedHashes?: Hex[]
88
-
89
- l1Fee?: bigint
90
- l1FeeScalar?: number
91
- l1GasPrice?: bigint
92
- l1GasUsed?: bigint
93
- l1BlobBaseFee?: bigint
94
- l1BlobBaseFeeScalar?: number
95
- l1BaseFeeScalar?: number
96
- }
97
-
98
- export type LogFields = {
99
- logIndex: number
100
- transactionIndex: number
101
- transactionHash: Hex
102
- address: Hex
103
- data: Hex
104
- topics: Hex[]
105
- }
106
-
107
- export type TraceType = 'create' | 'call' | 'suicide' | 'reward'
108
-
109
- export type TraceBaseFields = {
110
- type: TraceType
111
- transactionIndex: number
112
- traceAddress: number[]
113
- subtraces: number
114
- error: string | null
115
- revertReason?: string
116
- }
117
-
118
- export type TraceCreateFields = TraceBaseFields & {
119
- type: 'create'
120
- }
121
-
122
- export type TraceCreateActionFields = {
123
- from: Hex
124
- value: bigint
125
- gas: bigint
126
- init: Hex
127
- }
128
-
129
- export type TraceCreateResultFields = {
130
- gasUsed: bigint
131
- code?: Hex
132
- address: Hex
133
- }
134
-
135
- export type TraceCallFields = TraceBaseFields & {
136
- type: 'call'
137
- }
138
-
139
- export type TraceCallActionFields = {
140
- callType: string
141
- from: Hex
142
- to: Hex
143
- value?: bigint
144
- gas: bigint
145
- input: Hex
146
- sighash?: Hex
147
- }
148
-
149
- export type TraceCallResultFields = {
150
- gasUsed: bigint
151
- output?: Hex
152
- }
153
-
154
- export type TraceSuicideFields = TraceBaseFields & {
155
- type: 'suicide'
156
- }
157
-
158
- export type TraceSuicideActionFields = {
159
- address: Hex
160
- refundAddress: Hex
161
- balance: bigint
162
- }
163
-
164
- export type TraceRewardFields = TraceBaseFields & {
165
- type: 'reward'
166
- }
167
-
168
- export type TraceRewardActionFields = {
169
- author: Hex
170
- value: bigint
171
- type: string
172
- }
173
-
174
- export type StateDiffBaseFields = {
175
- transactionIndex: number
176
- address: Hex
177
- key: 'balance' | 'code' | 'nonce' | Hex
178
- kind: string
179
- }
180
-
181
- export type StateDiffAddFields = StateDiffBaseFields & {
182
- kind: '+'
183
- prev?: undefined
184
- next: Hex
185
- }
186
-
187
- export type StateDiffNoChangeFields = StateDiffBaseFields & {
188
- kind: '='
189
- prev?: undefined
190
- next?: undefined
191
- }
192
-
193
- export type StateDiffChangeFields = StateDiffBaseFields & {
194
- kind: '*'
195
- prev: Hex
196
- next: Hex
197
- }
198
-
199
- export type StateDiffDeleteFields = StateDiffBaseFields & {
200
- kind: '-'
201
- prev: Hex
202
- next?: undefined
203
- }
204
-
205
- export type BlockHeaderFieldSelection = Selector<keyof BlockHeaderFields, 'number' | 'hash'>
206
- export type BlockHeader<T extends BlockHeaderFieldSelection = Trues<BlockHeaderFieldSelection>> = Select<
207
- BlockHeaderFields,
208
- T
209
- >
210
-
211
- export type TransactionFieldSelection = Selector<keyof TransactionFields>
212
- export type Transaction<T extends TransactionFieldSelection = Trues<TransactionFieldSelection>> = Select<
213
- TransactionFields,
214
- T
215
- >
216
-
217
- export type LogFieldSelection = Selector<keyof LogFields>
218
- export type Log<T extends LogFieldSelection = Trues<LogFieldSelection>> = Select<LogFields, T>
219
-
220
- export type TraceCreateFieldSelection = Selector<
221
- | keyof TraceBaseFields
222
- | AddPrefix<'create', keyof TraceCreateActionFields>
223
- | AddPrefix<'createResult', keyof TraceCreateResultFields>
224
- >
225
-
226
- export type TraceCallFieldSelection = Selector<
227
- | keyof TraceBaseFields
228
- | AddPrefix<'call', keyof TraceCallActionFields>
229
- | AddPrefix<'callResult', keyof TraceCallResultFields>
230
- >
231
-
232
- export type TraceSuicideFieldSelection = Selector<
233
- keyof TraceBaseFields | AddPrefix<'suicide', keyof TraceSuicideActionFields>
234
- >
235
-
236
- export type TraceRewardFieldSelection = Selector<
237
- keyof TraceBaseFields | AddPrefix<'reward', keyof TraceRewardActionFields>
238
- >
239
-
240
- export type TraceFieldSelection = Simplify<
241
- TraceCreateFieldSelection & TraceCallFieldSelection & TraceSuicideFieldSelection & TraceRewardFieldSelection
242
- >
243
-
244
- export type TraceCreateAction<F extends TraceFieldSelection = Trues<TraceFieldSelection>> = Select<
245
- TraceCreateActionFields,
246
- RemoveKeysPrefix<'create', F>
247
- >
248
-
249
- export type TraceCreateResult<F extends TraceCreateFieldSelection = Trues<TraceCreateFieldSelection>> = Select<
250
- TraceCreateResultFields,
251
- RemoveKeysPrefix<'createResult', F>
252
- >
253
-
254
- export type TraceCallAction<F extends TraceCallFieldSelection = Trues<TraceCallFieldSelection>> = Select<
255
- TraceCallActionFields,
256
- RemoveKeysPrefix<'call', F>
257
- >
258
-
259
- export type TraceCallResult<F extends TraceCallFieldSelection = Trues<TraceCallFieldSelection>> = Select<
260
- TraceCallResultFields,
261
- RemoveKeysPrefix<'callResult', F>
262
- >
263
-
264
- export type TraceSuicideAction<F extends TraceSuicideFieldSelection = Trues<TraceSuicideFieldSelection>> = Select<
265
- TraceSuicideActionFields,
266
- RemoveKeysPrefix<'suicide', F>
267
- >
268
-
269
- export type TraceRewardAction<F extends TraceRewardFieldSelection = Trues<TraceRewardFieldSelection>> = Select<
270
- TraceRewardActionFields,
271
- RemoveKeysPrefix<'reward', F>
272
- >
273
-
274
- export type TraceCreate<F extends TraceCreateFieldSelection = Trues<TraceCreateFieldSelection>> = Simplify<
275
- Select<TraceCreateFields, F> &
276
- ConditionalOmit<{action: TraceCreateAction<F>; result?: TraceCreateResult<F>}, {[k: string]: never} | undefined>
277
- >
278
-
279
- export type TraceCall<F extends TraceCallFieldSelection = Trues<TraceCallFieldSelection>> = Simplify<
280
- Select<TraceCallFields, F> &
281
- ConditionalOmit<{action: TraceCallAction<F>; result?: TraceCallResult<F>}, {[k: string]: never} | undefined>
282
- >
283
-
284
- export type TraceSuicide<F extends TraceSuicideFieldSelection = Trues<TraceSuicideFieldSelection>> = Simplify<
285
- Select<TraceSuicideFields, F> & ConditionalOmit<{action: TraceSuicideAction<F>}, {[k: string]: never} | undefined>
286
- >
287
-
288
- export type TraceReward<F extends TraceRewardFieldSelection = Trues<TraceRewardFieldSelection>> = Simplify<
289
- Select<TraceRewardFields, F> & ConditionalOmit<{action: TraceRewardAction<F>}, {[k: string]: never} | undefined>
290
- >
291
-
292
- export type Trace<F extends TraceFieldSelection = Trues<TraceFieldSelection>> = F extends any
293
- ? TraceCreate<F> | TraceCall<F> | TraceSuicide<F> | TraceReward<F>
294
- : never
295
-
296
- export type StateDiffFieldSelection = Selector<keyof StateDiffBaseFields>
297
-
298
- export type StateDiffNoChange<F extends StateDiffFieldSelection = Trues<StateDiffFieldSelection>> = Select<
299
- StateDiffNoChangeFields,
300
- F
301
- >
302
-
303
- export type StateDiffAdd<F extends StateDiffFieldSelection = Trues<StateDiffFieldSelection>> = Select<
304
- StateDiffAddFields,
305
- F
306
- >
307
-
308
- export type StateDiffChange<F extends StateDiffFieldSelection = Trues<StateDiffFieldSelection>> = Select<
309
- StateDiffChangeFields,
310
- F
311
- >
312
-
313
- export type StateDiffDelete<F extends StateDiffFieldSelection = Trues<StateDiffFieldSelection>> = Select<
314
- StateDiffDeleteFields,
315
- F
316
- >
317
-
318
- export type StateDiff<F extends StateDiffFieldSelection = Trues<StateDiffFieldSelection>> = F extends any
319
- ? StateDiffNoChange<F> | StateDiffAdd<F> | StateDiffChange<F> | StateDiffDelete<F>
320
- : never
321
-
322
- export type FieldSelection = {
323
- block?: BlockHeaderFieldSelection
324
- transaction?: TransactionFieldSelection
325
- log?: LogFieldSelection
326
- trace?: TraceFieldSelection
327
- stateDiff?: StateDiffFieldSelection
328
- }
329
-
330
- export type LogRequest = {
331
- address?: Hex[]
332
- topic0?: Hex[]
333
- topic1?: Hex[]
334
- topic2?: Hex[]
335
- topic3?: Hex[]
336
- transaction?: boolean
337
- transactionTraces?: boolean
338
- transactionLogs?: boolean
339
- transactionStateDiffs?: boolean
340
- }
341
-
342
- export type TransactionRequest = {
343
- to?: Hex[]
344
- from?: Hex[]
345
- sighash?: Hex[]
346
- type?: number[]
347
- logs?: boolean
348
- traces?: boolean
349
- stateDiffs?: boolean
350
- }
351
-
352
- export type TraceRequest = {
353
- type?: TraceType[]
354
- createFrom?: Hex[]
355
- callTo?: Hex[]
356
- callFrom?: Hex[]
357
- callSighash?: Hex[]
358
- suicideRefundAddress?: Hex[]
359
- rewardAuthor?: Hex[]
360
- transaction?: boolean
361
- transactionLogs?: boolean
362
- subtraces?: boolean
363
- parents?: boolean
364
- }
365
-
366
- export type StateDiffRequest = {
367
- address?: Hex[]
368
- key?: Hex[]
369
- kind?: string[]
370
- transaction?: boolean
371
- }
372
-
373
- export type DataRequest = {
374
- logs?: LogRequest[]
375
- transactions?: TransactionRequest[]
376
- traces?: TraceRequest[]
377
- stateDiffs?: StateDiffRequest[]
378
- includeAllBlocks?: boolean
379
- }
380
-
381
- export type Query<F extends FieldSelection = FieldSelection> = Simplify<
382
- PortalQuery & {
383
- type: 'evm'
384
- fields: F
385
- } & DataRequest
386
- >
387
-
388
- export type Block<F extends FieldSelection> = Simplify<{
389
- header: BlockHeader<Selected<F, 'block'>>
390
- logs: Log<Selected<F, 'log'>>[]
391
- transactions: Transaction<Selected<F, 'transaction'>>[]
392
- traces: Trace<Selected<F, 'trace'>>[]
393
- stateDiffs: StateDiff<Selected<F, 'stateDiff'>>[]
394
- }>
395
-
396
- export const getBlockSchema = <F extends FieldSelection>(fields: F): Validator<Block<F>, unknown> => {
397
- let header = object(project(BlockHeaderShape, {...fields.block, number: true, hash: true}))
398
- let log = object(project(LogShape, fields.log))
399
- let transaction = object(project(TransactionShape, fields.transaction))
400
- let trace = getTraceFrameValidator(fields.trace)
401
- let stateDiff = getStateDiffValidator(fields.stateDiff)
402
-
403
- return object({
404
- header,
405
- logs: withDefault([], array(log)),
406
- transactions: withDefault([], array(transaction)),
407
- traces: withDefault([], array(trace)),
408
- stateDiffs: withDefault([], array(stateDiff)),
409
- }) as Validator<Block<F>, unknown>
410
- }
411
-
412
- const BlockHeaderShape: ObjectValidatorShape<BlockHeaderFields> = {
413
- number: NAT,
414
- hash: BYTES,
415
- parentHash: BYTES,
416
- timestamp: NAT,
417
- transactionsRoot: BYTES,
418
- receiptsRoot: BYTES,
419
- stateRoot: BYTES,
420
- logsBloom: BYTES,
421
- sha3Uncles: BYTES,
422
- extraData: BYTES,
423
- miner: BYTES,
424
- nonce: BYTES,
425
- mixHash: BYTES,
426
- size: NAT,
427
- gasLimit: QTY,
428
- gasUsed: QTY,
429
- difficulty: QTY,
430
- totalDifficulty: option(QTY),
431
- baseFeePerGas: QTY,
432
- blobGasUsed: QTY,
433
- excessBlobGas: QTY,
434
- l1BlockNumber: option(NAT),
435
- }
436
-
437
- const LogShape: ObjectValidatorShape<LogFields> = {
438
- logIndex: NAT,
439
- transactionIndex: NAT,
440
- transactionHash: BYTES,
441
- address: BYTES,
442
- data: BYTES,
443
- topics: array(BYTES),
444
- }
445
-
446
- const TransactionShape: ObjectValidatorShape<TransactionFields> = {
447
- transactionIndex: NAT,
448
- hash: BYTES,
449
- nonce: NAT,
450
- from: BYTES,
451
- to: option(BYTES),
452
- input: BYTES,
453
- value: QTY,
454
- gas: QTY,
455
- gasPrice: QTY,
456
- maxFeePerGas: option(QTY),
457
- maxPriorityFeePerGas: option(QTY),
458
- v: QTY,
459
- r: BYTES,
460
- s: BYTES,
461
- yParity: option(NAT),
462
- chainId: option(NAT),
463
- sighash: option(BYTES),
464
- contractAddress: option(BYTES),
465
- gasUsed: QTY,
466
- cumulativeGasUsed: QTY,
467
- effectiveGasPrice: QTY,
468
- type: NAT,
469
- status: NAT,
470
- blobVersionedHashes: option(array(BYTES)),
471
- l1Fee: option(QTY),
472
- l1FeeScalar: option(NAT),
473
- l1GasPrice: option(QTY),
474
- l1GasUsed: option(QTY),
475
- l1BlobBaseFee: option(QTY),
476
- l1BlobBaseFeeScalar: option(NAT),
477
- l1BaseFeeScalar: option(NAT),
478
- }
479
-
480
- function getTraceFrameValidator<T extends FieldSelection['trace']>(
481
- fields: T
482
- ): Validator<Trace<NonNullable<T>>, unknown> {
483
- let BaseShape = project(TraceBaseShape, fields)
484
-
485
- let createAction = object(
486
- project(TraceCreateActionShape, {
487
- from: fields?.createFrom,
488
- value: fields?.createValue,
489
- gas: fields?.createGas,
490
- init: fields?.createInit,
491
- })
492
- )
493
-
494
- let createResult = object(
495
- project(TraceCreateResultShape, {
496
- gasUsed: fields?.createResultGasUsed,
497
- code: fields?.createResultCode,
498
- address: fields?.createResultAddress,
499
- })
500
- )
501
-
502
- let create = object({
503
- ...BaseShape,
504
- type: constant('create'),
505
- action: withDefault({}, createAction),
506
- result: isEmpty(createResult) ? undefined : option(createResult),
507
- })
508
-
509
- let callAction = object(
510
- project(TraceCallActionShape, {
511
- callType: fields?.callCallType,
512
- from: fields?.callFrom,
513
- to: fields?.callTo,
514
- value: fields?.callValue,
515
- gas: fields?.callGas,
516
- input: fields?.callInput,
517
- sighash: fields?.callSighash,
518
- })
519
- )
520
-
521
- let callResult = object(
522
- project(TraceCallResultShape, {
523
- gasUsed: fields?.callResultGasUsed,
524
- output: fields?.callResultOutput,
525
- })
526
- )
527
-
528
- let call = object({
529
- ...BaseShape,
530
- type: constant('call'),
531
- action: withDefault({}, callAction),
532
- result: isEmpty(callResult) ? undefined : option(callResult),
533
- })
534
-
535
- let suicideAction = object(
536
- project(TraceSuicideActionShape, {
537
- address: fields?.suicideAddress,
538
- refundAddress: fields?.suicideRefundAddress,
539
- balance: fields?.suicideBalance,
540
- })
541
- )
542
-
543
- let suicide = object({
544
- ...BaseShape,
545
- type: constant('suicide'),
546
- action: withDefault({}, suicideAction),
547
- })
548
-
549
- let rewardAction = object(
550
- project(TraceRewardActionShape, {
551
- author: fields?.rewardAuthor,
552
- value: fields?.rewardValue,
553
- type: fields?.rewardType,
554
- })
555
- )
556
-
557
- let reward = object({
558
- ...BaseShape,
559
- type: constant('reward'),
560
- action: withDefault({}, rewardAction),
561
- })
562
-
563
- return taggedUnion('type', {
564
- create,
565
- call,
566
- suicide,
567
- reward,
568
- }) as Validator<Trace<NonNullable<T>>, unknown>
569
- }
570
-
571
- const TraceBaseShape: ObjectValidatorShape<TraceBaseFields> = {
572
- type: oneOf({
573
- create: constant('create'),
574
- call: constant('call'),
575
- suicide: constant('suicide'),
576
- reward: constant('reward'),
577
- }),
578
- transactionIndex: NAT,
579
- traceAddress: array(NAT),
580
- subtraces: NAT,
581
- error: nullable(STRING),
582
- revertReason: option(STRING),
583
- }
584
-
585
- const TraceCreateActionShape: ObjectValidatorShape<TraceCreateActionFields> = {
586
- from: BYTES,
587
- value: QTY,
588
- gas: QTY,
589
- init: BYTES,
590
- }
591
-
592
- const TraceCreateResultShape: ObjectValidatorShape<TraceCreateResultFields> = {
593
- gasUsed: QTY,
594
- code: option(BYTES),
595
- address: BYTES,
596
- }
597
-
598
- const TraceCallActionShape: ObjectValidatorShape<TraceCallActionFields> = {
599
- callType: STRING,
600
- from: BYTES,
601
- to: BYTES,
602
- value: option(QTY),
603
- gas: QTY,
604
- input: BYTES,
605
- sighash: option(BYTES),
606
- }
607
-
608
- const TraceCallResultShape: ObjectValidatorShape<TraceCallResultFields> = {
609
- gasUsed: QTY,
610
- output: option(BYTES),
611
- }
612
-
613
- const TraceSuicideActionShape: ObjectValidatorShape<TraceSuicideActionFields> = {
614
- address: BYTES,
615
- refundAddress: BYTES,
616
- balance: QTY,
617
- }
618
-
619
- const TraceRewardActionShape: ObjectValidatorShape<TraceRewardActionFields> = {
620
- author: BYTES,
621
- value: QTY,
622
- type: STRING,
623
- }
624
-
625
- function getStateDiffValidator<T extends FieldSelection['stateDiff']>(
626
- fields: T
627
- ): Validator<StateDiff<NonNullable<T>>, unknown> {
628
- return taggedUnion('kind', {
629
- '+': object(project(StateDiffAddShape, fields)),
630
- '-': object(project(StateDiffDeleteShape, fields)),
631
- '*': object(project(StateDiffChangeShape, fields)),
632
- '=': object(project(StateDiffNoChangeShape, fields)),
633
- }) as Validator<StateDiff<NonNullable<T>>, unknown>
634
- }
635
-
636
- const StateDiffBaseShape: ObjectValidatorShape<StateDiffBaseFields> = {
637
- kind: oneOf({
638
- '+': constant('+'),
639
- '-': constant('-'),
640
- '*': constant('*'),
641
- '=': constant('='),
642
- }),
643
- transactionIndex: NAT,
644
- address: BYTES,
645
- key: STRING,
646
- }
647
-
648
- const StateDiffAddShape: ObjectValidatorShape<StateDiffAddFields> = {
649
- ...StateDiffBaseShape,
650
- kind: constant('+'),
651
- next: BYTES,
652
- }
653
-
654
- const StateDiffDeleteShape: ObjectValidatorShape<StateDiffDeleteFields> = {
655
- ...StateDiffBaseShape,
656
- kind: constant('-'),
657
- prev: BYTES,
658
- }
659
-
660
- const StateDiffChangeShape: ObjectValidatorShape<StateDiffChangeFields> = {
661
- ...StateDiffBaseShape,
662
- kind: constant('*'),
663
- prev: BYTES,
664
- next: BYTES,
665
- }
666
-
667
- const StateDiffNoChangeShape: ObjectValidatorShape<StateDiffNoChangeFields> = {
668
- ...StateDiffBaseShape,
669
- kind: constant('='),
670
- }
671
-
672
- export function isEmpty(obj: object): boolean {
673
- for (let _ in obj) {
674
- return false
675
- }
676
- return true
677
- }