@sentio/sdk 1.27.2 → 1.27.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 (99) hide show
  1. package/lib/aptos/types.js +4 -3
  2. package/lib/aptos/types.js.map +1 -1
  3. package/lib/{tests/aptos.test.d.ts → aptos/types.test.d.ts} +0 -0
  4. package/lib/aptos/types.test.js.map +1 -0
  5. package/lib/aptos/utils.d.ts +2 -1
  6. package/lib/aptos/utils.js +9 -1
  7. package/lib/aptos/utils.js.map +1 -1
  8. package/lib/aptos-codegen/codegen.js +1 -7
  9. package/lib/aptos-codegen/codegen.js.map +1 -1
  10. package/lib/processor-runner.js +2 -2
  11. package/lib/processor-runner.js.map +1 -1
  12. package/package.json +4 -4
  13. package/src/aptos/types.ts +5 -4
  14. package/src/aptos/utils.ts +9 -1
  15. package/src/aptos-codegen/codegen.ts +2 -9
  16. package/src/processor-runner.ts +2 -2
  17. package/lib/core/generic-processor.test.js +0 -58
  18. package/lib/core/meter.test.js +0 -21
  19. package/lib/core/numberish.test.js +0 -70
  20. package/lib/tests/aptos.test.js +0 -304
  21. package/lib/tests/aptos.test.js.map +0 -1
  22. package/lib/tests/codegen.test.d.ts +0 -1
  23. package/lib/tests/codegen.test.js +0 -49
  24. package/lib/tests/codegen.test.js.map +0 -1
  25. package/lib/tests/erc20-template.test.d.ts +0 -1
  26. package/lib/tests/erc20-template.test.js +0 -56
  27. package/lib/tests/erc20-template.test.js.map +0 -1
  28. package/lib/tests/erc20.d.ts +0 -1
  29. package/lib/tests/erc20.js +0 -54
  30. package/lib/tests/erc20.js.map +0 -1
  31. package/lib/tests/erc20.test.d.ts +0 -1
  32. package/lib/tests/erc20.test.js +0 -94
  33. package/lib/tests/erc20.test.js.map +0 -1
  34. package/lib/tests/error-capture.test.d.ts +0 -1
  35. package/lib/tests/error-capture.test.js +0 -76
  36. package/lib/tests/error-capture.test.js.map +0 -1
  37. package/lib/tests/logger.test.d.ts +0 -1
  38. package/lib/tests/logger.test.js +0 -40
  39. package/lib/tests/logger.test.js.map +0 -1
  40. package/lib/tests/solana.test.d.ts +0 -1
  41. package/lib/tests/solana.test.js +0 -77
  42. package/lib/tests/solana.test.js.map +0 -1
  43. package/lib/tests/souffl3.d.ts +0 -1
  44. package/lib/tests/souffl3.js +0 -46
  45. package/lib/tests/souffl3.js.map +0 -1
  46. package/lib/tests/sui.test.d.ts +0 -1
  47. package/lib/tests/sui.test.js +0 -193
  48. package/lib/tests/sui.test.js.map +0 -1
  49. package/lib/tests/types/aptos/soffl3.d.ts +0 -786
  50. package/lib/tests/types/aptos/soffl3.js +0 -559
  51. package/lib/tests/types/aptos/soffl3.js.map +0 -1
  52. package/lib/tests/types/aptos/souffle.d.ts +0 -348
  53. package/lib/tests/types/aptos/souffle.js +0 -303
  54. package/lib/tests/types/aptos/souffle.js.map +0 -1
  55. package/lib/tests/types/solana/basic_1.d.ts +0 -26
  56. package/lib/tests/types/solana/basic_1.js +0 -66
  57. package/lib/tests/types/solana/basic_1.js.map +0 -1
  58. package/lib/tests/types/solana/basic_1_processor.d.ts +0 -13
  59. package/lib/tests/types/solana/basic_1_processor.js +0 -41
  60. package/lib/tests/types/solana/basic_1_processor.js.map +0 -1
  61. package/lib/tests/wormhole-token-bridge.d.ts +0 -1
  62. package/lib/tests/wormhole-token-bridge.js +0 -22
  63. package/lib/tests/wormhole-token-bridge.js.map +0 -1
  64. package/lib/utils/dex-price.test.js +0 -22
  65. package/lib/utils/erc20.test.js +0 -23
  66. package/src/aptos-codegen/typegen.test.ts +0 -44
  67. package/src/core/generic-processor.test.ts +0 -69
  68. package/src/core/meter.test.ts +0 -23
  69. package/src/core/numberish.test.ts +0 -82
  70. package/src/tests/abis/aptos/soffl3.json +0 -1411
  71. package/src/tests/abis/aptos/souffle.json +0 -389
  72. package/src/tests/abis/evm/CommitmentPool.json +0 -1034
  73. package/src/tests/abis/evm/Seaport.json +0 -2595
  74. package/src/tests/abis/evm/anyswapRouter.json +0 -490
  75. package/src/tests/abis/solana/basic_1.json +0 -62
  76. package/src/tests/aptos.test.ts +0 -324
  77. package/src/tests/codegen.test.ts +0 -29
  78. package/src/tests/erc20-template.test.ts +0 -60
  79. package/src/tests/erc20.test.ts +0 -115
  80. package/src/tests/erc20.ts +0 -60
  81. package/src/tests/error-capture.test.ts +0 -82
  82. package/src/tests/logger.test.ts +0 -46
  83. package/src/tests/solana.test.ts +0 -79
  84. package/src/tests/souffl3.ts +0 -52
  85. package/src/tests/sui.test.ts +0 -197
  86. package/src/tests/types/aptos/soffl3.ts +0 -1377
  87. package/src/tests/types/aptos/souffle.ts +0 -698
  88. package/src/tests/types/solana/basic_1.ts +0 -62
  89. package/src/tests/types/solana/basic_1_processor.ts +0 -41
  90. package/src/tests/wormhole-token-bridge.ts +0 -21
  91. package/src/types/global.d.ts +0 -5
  92. package/src/utils/dex-price.test.ts +0 -25
  93. package/src/utils/erc20.test.ts +0 -26
  94. package/templates/aptos/.gitignore +0 -107
  95. package/templates/aptos/src/processor.test.ts +0 -14
  96. package/templates/evm/.gitignore +0 -107
  97. package/templates/evm/src/processor.test.ts +0 -29
  98. package/templates/raw/.gitignore +0 -107
  99. package/templates/raw/src/processor.test.ts +0 -14
@@ -1,324 +0,0 @@
1
- import { expect } from 'chai'
2
- import { TextEncoder } from 'util'
3
- import { HandlerType, ProcessBindingsRequest } from '..'
4
-
5
- import { firstCounterValue, firstGaugeValue, TestProcessorServer } from '../testing'
6
-
7
- describe('Test Aptos Example', () => {
8
- const service = new TestProcessorServer(() => {
9
- require('./souffl3')
10
- })
11
-
12
- beforeAll(async () => {
13
- await service.start({ templateInstances: [] })
14
- })
15
-
16
- test('check configuration ', async () => {
17
- const config = await service.getConfig({})
18
- expect(config.contractConfigs).length(4)
19
- })
20
-
21
- test('Check souffl3 transaction dispatch', async () => {
22
- const request: ProcessBindingsRequest = {
23
- bindings: [
24
- {
25
- data: {
26
- raw: new TextEncoder().encode(JSON.stringify(testData)),
27
- },
28
- handlerId: 1,
29
- handlerType: HandlerType.APT_CALL,
30
- },
31
- ],
32
- }
33
- const res = await service.processBindings(request)
34
- expect(res.result?.counters).length(1)
35
- expect(res.result?.gauges).length(0)
36
- expect(res.result?.counters[0].metadata?.blockNumber.toInt()).equal(18483034)
37
- })
38
-
39
- test('Check souffl3 function call dispatch', async () => {
40
- const request: ProcessBindingsRequest = {
41
- bindings: [
42
- {
43
- data: {
44
- raw: new TextEncoder().encode(JSON.stringify(testData)),
45
- },
46
- handlerId: 0,
47
- handlerType: HandlerType.APT_CALL,
48
- },
49
- ],
50
- }
51
- const res = await service.processBindings(request)
52
- expect(res.result?.counters).length(2)
53
- expect(res.result?.gauges).length(0)
54
- expect(res.result?.counters[0].metadata?.blockNumber.toInt()).equal(18483034)
55
- })
56
-
57
- test('Check souffl3 event dispatch', async () => {
58
- const request: ProcessBindingsRequest = {
59
- bindings: [
60
- {
61
- data: {
62
- raw: new TextEncoder().encode(
63
- JSON.stringify({
64
- ...testData,
65
- events: [testData.events[testData.events.length - 1]],
66
- })
67
- ),
68
- },
69
- handlerId: 0,
70
- handlerType: HandlerType.APT_EVENT,
71
- },
72
- ],
73
- }
74
- const res = await service.processBindings(request)
75
- expect(res.result?.counters).length(1)
76
- expect(res.result?.gauges).length(0)
77
- expect(res.result?.counters[0].metadata?.blockNumber.toInt()).equal(18483034)
78
- expect(res.result?.events).length(1)
79
- })
80
-
81
- test('Check token deposit event dispatch', async () => {
82
- const request: ProcessBindingsRequest = {
83
- bindings: [
84
- {
85
- data: {
86
- raw: new TextEncoder().encode(
87
- JSON.stringify({
88
- ...testData,
89
- events: [tokenTestData],
90
- })
91
- ),
92
- },
93
- handlerId: 2,
94
- handlerType: HandlerType.APT_EVENT,
95
- },
96
- ],
97
- }
98
- const res = await service.processBindings(request)
99
- expect(firstCounterValue(res.result, 'deposit')).equal(1n)
100
- expect(firstGaugeValue(res.result, 'version')).equal(0n)
101
- })
102
-
103
- test('Check create poposal event dispatch', async () => {
104
- const request: ProcessBindingsRequest = {
105
- bindings: [
106
- {
107
- data: {
108
- raw: new TextEncoder().encode(JSON.stringify({ ...testData, events: [createProposalData] })),
109
- },
110
- handlerId: 3,
111
- handlerType: HandlerType.APT_EVENT,
112
- },
113
- ],
114
- }
115
- const res = await service.processBindings(request)
116
- expect(firstGaugeValue(res.result, 'size')).equal(2n)
117
- })
118
-
119
- test('check on timer', async () => {
120
- const request: ProcessBindingsRequest = {
121
- bindings: [
122
- {
123
- data: {
124
- raw: new TextEncoder().encode(
125
- JSON.stringify({
126
- version: '12345',
127
- resources: [
128
- {
129
- type: '0x1::coin::SupplyConfig',
130
- data: {
131
- allow_upgrades: false,
132
- },
133
- },
134
- ],
135
- })
136
- ),
137
- },
138
- handlerId: 0,
139
- handlerType: HandlerType.APT_RESOURCE,
140
- },
141
- ],
142
- }
143
- const res = await service.processBindings(request)
144
- expect(firstCounterValue(res.result, 'onTimer')).equal(1n)
145
- })
146
- })
147
-
148
- const testData = {
149
- version: '18483034',
150
- hash: '0xbf4df6f390546a793ba9b7caff120002b3257986dbea9c697fd64acf7dfeb052',
151
- state_change_hash: '0x6063039cca5a1eb33d3986d3665fc783238579961eaa4746c41e25fa4f72aac6',
152
- event_root_hash: '0x425e39bcf994672108f83c34f637e84166af7ecedcbe26aed0dff0d62da8055d',
153
- state_checkpoint_hash: null,
154
- gas_used: '854',
155
- success: true,
156
- vm_status: 'Executed successfully',
157
- accumulator_root_hash: '0x47aa479d9e15993ea2abe04043c89186fb5da0b5eb8b5c6d18bd55d5f0c2c877',
158
- changes: [],
159
- sender: '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807',
160
- sequence_number: '30',
161
- max_gas_amount: '20000',
162
- gas_unit_price: '1',
163
- expiration_timestamp_secs: '1663144544',
164
- payload: {
165
- function: '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807::SouffleChefCampaign::pull_token_v2',
166
- type_arguments: ['0x1::aptos_coin::AptosCoin'],
167
- arguments: [
168
- '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807',
169
- '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807',
170
- 'Souffl3 BlueBerry',
171
- '1',
172
- ],
173
- type: 'entry_function_payload',
174
- },
175
- signature: {
176
- public_key: '0x6c3f579afbf8a728827385039f7604ec1d06e5c802d8f9689ee8ec9d349fedc5',
177
- signature:
178
- '0xd2db95052e774f095d924030a50c29325a17e8d69d35c748f45bb0e22eb7d3b9e47545c98bd7130fd3ef46cbedc30c9aaeaf39c2d922ee8e7d578c0b1e76f30b',
179
- type: 'ed25519_signature',
180
- },
181
- events: [
182
- {
183
- guid: {
184
- creation_number: '3',
185
- account_address: '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807',
186
- },
187
- sequence_number: '10',
188
- type: '0x1::coin::WithdrawEvent',
189
- data: {
190
- amount: '1',
191
- },
192
- },
193
- {
194
- version: '18483034',
195
- guid: {
196
- creation_number: '2',
197
- account_address: '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807',
198
- },
199
- sequence_number: '11',
200
- type: '0x1::coin::DepositEvent',
201
- data: {
202
- amount: '1',
203
- },
204
- },
205
- {
206
- guid: {
207
- creation_number: '9',
208
- account_address: '0x21d5fe032affa1c8b10d343e9ad5a5618bc13baf5ed4a674fafaa12c54f416cc',
209
- },
210
- sequence_number: '9',
211
- type: '0x3::token::CreateTokenDataEvent',
212
- data: {
213
- description:
214
- 'Souffl3 offers a one-stop marketplace for the launch, listing, and trading of NFT assets on APTOS.\nWebsite:https://souffl3.com/\nEveryone can win through our Bake Off campaign on the Aptos Testnet, rewards including Souffl3 Genesis NFT and whitelists of other collab projects, everyone is welcome to participate!',
215
- id: {
216
- collection: 'Souffl3 BlueBerry',
217
- creator: '0x21d5fe032affa1c8b10d343e9ad5a5618bc13baf5ed4a674fafaa12c54f416cc',
218
- name: 'Souffl3 BlueBerry #2',
219
- },
220
- maximum: '999999999999',
221
- mutability_config: {
222
- description: true,
223
- maximum: true,
224
- properties: true,
225
- royalty: true,
226
- uri: true,
227
- },
228
- name: 'Souffl3 BlueBerry #2',
229
- property_keys: ['author', 'point'],
230
- property_types: ['string', 'integer'],
231
- property_values: ['0x33454e4a4f59204c616273', '0x30'],
232
- royalty_payee_address: '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807',
233
- royalty_points_denominator: '100',
234
- royalty_points_numerator: '20',
235
- uri: 'https://y3x4txhvirx5zl57efzbl6dg7psaier5q35hhwuqwzjwuahrycya.arweave.net/xu_J3PVEb9yvvyFyFfhm--QEEj2G-nPakLZTagDxwLA',
236
- },
237
- },
238
- {
239
- guid: {
240
- creation_number: '2',
241
- account_address: '0x21d5fe032affa1c8b10d343e9ad5a5618bc13baf5ed4a674fafaa12c54f416cc',
242
- },
243
- sequence_number: '27',
244
- type: '0x3::token::DepositEvent',
245
- data: {
246
- amount: '1',
247
- id: {
248
- property_version: '0',
249
- token_data_id: {
250
- collection: 'Souffl3 BlueBerry',
251
- creator: '0x21d5fe032affa1c8b10d343e9ad5a5618bc13baf5ed4a674fafaa12c54f416cc',
252
- name: 'Souffl3 BlueBerry #2',
253
- },
254
- },
255
- },
256
- },
257
- {
258
- version: '18483034',
259
- guid: {
260
- creation_number: '7',
261
- account_address: '0x21d5fe032affa1c8b10d343e9ad5a5618bc13baf5ed4a674fafaa12c54f416cc',
262
- },
263
- sequence_number: '980533',
264
- type: '0x4188c8694687e844677c2aa87171019e23d61cac60de5082a278a8aa47e9d807::SouffleChefCampaign::PullTokenEvent<0x1::aptos_coin::AptosCoin>',
265
- data: {
266
- receiver: '0x3a80be5daa84f2da7e07b3ec9234da48a5647f757187879c97a1fa03f31f1195',
267
- },
268
- },
269
- ],
270
- timestamp: '1663143945131218',
271
- type: 'user_transaction',
272
- }
273
-
274
- const tokenTestData = {
275
- guid: {
276
- creation_number: '4',
277
- account_address: '0x89bc80de59187f707a59ae7a4121718dafe3e6068e0509104ef7e41a56bc97db',
278
- },
279
- sequence_number: '10',
280
- type: '0x3::token::DepositEvent',
281
- data: {
282
- amount: '1',
283
- id: {
284
- property_version: '0',
285
- token_data_id: {
286
- collection: 'Topaz Troopers',
287
- creator: '0x9125e4054d884fdc7296b66e12c0d63a7baa0d88c77e8e784987c0a967c670ac',
288
- name: 'Topaz Trooper #11293',
289
- },
290
- },
291
- },
292
- }
293
-
294
- const createProposalData = {
295
- guid: {
296
- creation_number: '5',
297
- account_address: '0x1',
298
- },
299
- sequence_number: '3',
300
- type: '0x1::voting::CreateProposalEvent',
301
- data: {
302
- early_resolution_vote_threshold: {
303
- vec: ['9272156337856446330'],
304
- },
305
- execution_hash: '0x31549239ce8abdc1e9c259178614c3d44d015bd6d48635ddcfbfa4a77e7222b0',
306
- expiration_secs: '1665463839',
307
- metadata: {
308
- data: [
309
- {
310
- key: 'metadata_hash',
311
- value:
312
- '0x61633230656566373063616466363939663530353564323463356363353931396463306330656562643463303662653332346336323030313561633361653066',
313
- },
314
- {
315
- key: 'metadata_location',
316
- value:
317
- '0x68747470733a2f2f676973742e67697468756275736572636f6e74656e742e636f6d2f6d6f76656b6576696e2f30353766623134356234303836366566663863323263393166623964613931392f7261772f626162383566306637343334663030386138373831656563376663616464316163356135353438312f6769737466696c65312e747874',
318
- },
319
- ],
320
- },
321
- min_vote_threshold: '100000000000000',
322
- proposal_id: '3',
323
- },
324
- }
@@ -1,29 +0,0 @@
1
- import { codeGenEthersProcessor } from '../cli/build'
2
- import path from 'path'
3
- import * as fs from 'fs'
4
- import os from 'os'
5
-
6
- describe('Test EVM codegen', () => {
7
- const codeGenFolder = fs.mkdtempSync(path.join(os.tmpdir(), 'codegen_test'))
8
-
9
- jest.setTimeout(20000)
10
-
11
- // TODO make sure code could be compile
12
- test('code gen for evm', async () => {
13
- console.log('source code generated to ' + codeGenFolder)
14
-
15
- await codeGenEthersProcessor(
16
- path.join(__dirname, 'abis/evm'),
17
- 'lib/target-ethers-sentio',
18
- `${codeGenFolder}/internal`
19
- )
20
- expect(fs.existsSync(codeGenFolder)).toEqual(true)
21
- expect(fs.readdirSync(codeGenFolder).length).toEqual(4)
22
- })
23
-
24
- // afterAll(() => {
25
- // if (fs.existsSync(codeGenFolder)) {
26
- // fs.rmSync(codeGenFolder, { recursive: true, force: true })
27
- // }
28
- // })
29
- })
@@ -1,60 +0,0 @@
1
- import { expect } from 'chai'
2
-
3
- import { StartRequest } from '..'
4
- import Long from 'long'
5
- import { TestProcessorServer } from '../testing'
6
- import { ERC20Processor, ERC20ProcessorTemplate } from '../builtin/internal/erc20_processor'
7
-
8
- describe('Test Template', () => {
9
- const service = new TestProcessorServer(() => {
10
- const filter = ERC20Processor.filters.Transfer(
11
- '0x0000000000000000000000000000000000000000',
12
- '0xb329e39ebefd16f40d38f07643652ce17ca5bac1'
13
- )
14
-
15
- const processorTemplate = new ERC20ProcessorTemplate().onEventTransfer(async function (event, ctx) {
16
- console.log('')
17
- })
18
-
19
- ERC20Processor.bind({
20
- address: '0x1e4ede388cbc9f4b5c79681b7f94d36a11abebc9',
21
- network: 1,
22
- name: 'x2y2',
23
- startBlock: 14201940,
24
- }).onEventTransfer(async function (event, ctx) {
25
- processorTemplate.bind({
26
- address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
27
- network: 3,
28
- name: 'dynamic',
29
- })
30
- // template.bind('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 3, 'dynamic')
31
- ctx.meter.Counter('c1').add(1)
32
- }, filter)
33
- })
34
-
35
- beforeAll(async () => {
36
- const request: StartRequest = {
37
- templateInstances: [
38
- {
39
- contract: {
40
- address: 'dynamic2',
41
- name: 'dynamic2',
42
- chainId: '1',
43
- abi: '',
44
- },
45
- startBlock: Long.ZERO,
46
- endBlock: Long.ZERO,
47
- templateId: 0,
48
- },
49
- ],
50
- }
51
- await service.start(request)
52
- })
53
-
54
- test('Check template instantiate', async () => {
55
- const config = await service.getConfig({})
56
- expect(config.contractConfigs).length(2)
57
- expect(config.contractConfigs?.[1].contract?.name).equals('dynamic2')
58
- expect(config.templateInstances).length(1)
59
- })
60
- })
@@ -1,115 +0,0 @@
1
- // TODO move out of this package
2
-
3
- import { expect } from 'chai'
4
-
5
- import { HandlerType } from '..'
6
-
7
- import { TestProcessorServer, firstCounterValue, firstGaugeValue } from '../testing'
8
- import { BigNumber } from 'ethers'
9
- import { mockTransferLog } from '../builtin/erc20/test-utils'
10
- import { Trace } from '@sentio/sdk'
11
-
12
- describe('Test Basic Examples', () => {
13
- const service = new TestProcessorServer(() => require('./erc20'))
14
-
15
- beforeAll(async () => {
16
- await service.start()
17
- })
18
-
19
- test('check configuration', async () => {
20
- const config = await service.getConfig({})
21
- expect(config.contractConfigs).length(5)
22
-
23
- expect(config.contractConfigs?.[2].contract?.name).equals('ERC20')
24
- expect(config.contractConfigs?.[3].contract?.name).equals('ERC20')
25
- expect(config.contractConfigs?.[4].contract?.name).equals('ytoken')
26
- })
27
-
28
- test('Check block dispatch', async () => {
29
- const res = (await service.testBlock(blockData)).result
30
- expect(res?.counters).length(0)
31
- expect(res?.gauges).length(1)
32
- expect(firstGaugeValue(res, 'g1')).equals(10n)
33
- expect(res?.gauges[0].metadata?.contractName).equals('x2y2')
34
-
35
- const gauge = res?.gauges?.[0]
36
- expect(gauge?.metadata?.blockNumber?.toString()).equals('14373295')
37
- expect(gauge?.runtimeInfo?.from).equals(HandlerType.BLOCK)
38
-
39
- const res2 = (await service.testBlock(blockData, 56)).result
40
- expect(res2?.counters).length(0)
41
- expect(res2?.gauges).length(1)
42
- expect(firstGaugeValue(res2, 'g2')).equals(20n)
43
- })
44
-
45
- test('Check log dispatch', async () => {
46
- const logData = mockTransferLog('0x1E4EDE388cbc9F4b5c79681B7f94d36a11ABEBC9', {
47
- from: '0x0000000000000000000000000000000000000000',
48
- to: '0xB329e39Ebefd16f40d38f07643652cE17Ca5Bac1',
49
- value: BigNumber.from('0x9a71db64810aaa0000'),
50
- })
51
-
52
- let res = await service.testLog(logData)
53
-
54
- const counters = res.result?.counters
55
- expect(counters).length(1)
56
- expect(firstCounterValue(res.result, 'c1')).equals(1n)
57
-
58
- expect(counters?.[0].metadata?.chainId).equals('1')
59
- expect(counters?.[0].runtimeInfo?.from).equals(HandlerType.ETH_LOG)
60
- expect(res.configUpdated).equals(true)
61
-
62
- const logData2 = Object.assign({}, logData)
63
- logData2.address = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
64
- res = await service.testLog(logData2, 56)
65
-
66
- expect(firstCounterValue(res.result, 'c2')).equals(2n)
67
- expect(res.result?.counters[0].metadata?.chainId).equals('56')
68
-
69
- expect(res.result?.gauges).length(0)
70
-
71
- const config = await service.getConfig({})
72
- expect(config.contractConfigs).length(6) //config increased
73
- expect(config.contractConfigs?.[5].contract?.name).equals('dynamic')
74
-
75
- // repeat trigger won't bind again
76
- await service.testLogs([logData])
77
- const config2 = await service.getConfig({})
78
- expect(config).deep.equals(config2)
79
- })
80
-
81
- const blockData = {
82
- hash: '0x2b9b7cce1f17f3b7e1f3c2472cc806a07bee3f0baca07d021350950d81d73a42',
83
- number: 14373295,
84
- timestamp: 1647106437,
85
- extraData: '0xe4b883e5bda9e7a59ee4bb99e9b1bc493421',
86
- }
87
-
88
- test('Check trace dispatch', async () => {
89
- const res = (await service.testTrace(traceData)).result
90
- expect(res?.counters).length(1)
91
- })
92
-
93
- const traceData: Trace = {
94
- action: {
95
- from: '0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91',
96
- callType: 'call',
97
- gas: 0xbb0a,
98
- input:
99
- '0x095ea7b30000000000000000000000003eabf546fff0a41edaaf5b667333a846285713180000000000000000000000000000000000000000000000000000002a03956d85',
100
- to: '0x1E4EDE388cbc9F4b5c79681B7f94d36a11ABEBC9',
101
- value: 0x0,
102
- },
103
- blockHash: '0xb1fe1fefca4063ab9cc06a10356a6dd397b8c3dd38e21470e107a711ad559c13',
104
- blockNumber: 15548801,
105
- result: {
106
- gasUsed: 0x95df,
107
- output: '0x0000000000000000000000000000000000000000000000000000000000000001',
108
- },
109
- subtraces: 1,
110
- traceAddress: [],
111
- transactionHash: '0xc05c37b34e13380d0b7e0475b27a0c77fda826f82c603f9c45922e952d63b7a5',
112
- transactionPosition: 69,
113
- type: 'call',
114
- }
115
- })
@@ -1,60 +0,0 @@
1
- import { ERC20Processor, ERC20ProcessorTemplate } from '../builtin/erc20'
2
- import { EventTracker } from '../core/event-tracker'
3
- import { Exporter } from '../core/exporter'
4
-
5
- export const filter = ERC20Processor.filters.Transfer(
6
- '0x0000000000000000000000000000000000000000',
7
- '0xb329e39ebefd16f40d38f07643652ce17ca5bac1'
8
- )
9
-
10
- const tracker = EventTracker.register('sdf')
11
- const exporter = Exporter.register('transfer', 'xxx')
12
-
13
- const processorTemplate = new ERC20ProcessorTemplate().onEventTransfer(async function (event, ctx) {
14
- console.log('')
15
- })
16
-
17
- ERC20Processor.bind({
18
- address: '0x1e4ede388cbc9f4b5c79681b7f94d36a11abebc9',
19
- // network: 1,
20
- name: 'x2y2',
21
- startBlock: 14201940,
22
- })
23
- .onEventTransfer(async function (event, ctx) {
24
- processorTemplate.bind({ address: '0x1E4EDE388cbc9F4b5c79681B7f94d36a11ABEBC9', network: 3, name: 'dynamic' })
25
- // template.bind('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', 3, 'dynamic')
26
- ctx.meter.Counter('c1').add(1)
27
- }, filter)
28
- .onBlock(async function (block, ctx) {
29
- ctx.meter.Gauge('g1').record(10, { k: 'v' })
30
- })
31
- .onCallApprove(function (call, ctx) {
32
- ctx.meter.Counter('added').add(call.args.amount, { spender: call.args.spender })
33
- })
34
-
35
- ERC20Processor.bind({ address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', network: 56, name: 'usdc' })
36
- .onEventTransfer(async function (event, ctx) {
37
- ctx.meter.Counter('c2').add(2)
38
- tracker.trackEvent(ctx, { distinctId: event.args.from })
39
- exporter.emit(ctx, event)
40
- }, filter)
41
- .onBlock(async function (block, ctx) {
42
- ctx.meter.Gauge('g2').record(20, { k: 'v' })
43
- })
44
- // .onEventApproval(async function (event, ctx) {
45
- // BigNumber.from(10 ** 18)
46
- // // console.log(n)
47
- // })
48
- ERC20Processor.bind({ address: 'xxxx', network: 56 })
49
-
50
- ERC20Processor.bind({ address: 'yyyy', network: 1 })
51
- ERC20Processor.bind({ address: 'yyyy', network: 1 })
52
- ERC20Processor.bind({ address: 'yyyy', network: 1, startBlock: 21, name: 'ytoken' })
53
-
54
- // const template = Erc20Processor.template
55
- // .onTransfer(async function (event, ctx) {
56
- // ctx.meter.Counter('c2').add(2)
57
- // }, filter)
58
- // .onBlock(async function (block, ctx) {
59
- // ctx.meter.Gauge('h1').record(20, { k: 'v' })
60
- // })
@@ -1,82 +0,0 @@
1
- import { assert } from 'chai'
2
-
3
- import { TestProcessorServer } from '../testing'
4
- import { BigNumber } from 'ethers'
5
- import { mockApprovalLog, mockOwnershipTransferredLog, mockTransferLog } from '../builtin/erc20/test-utils'
6
- import { ERC20Processor } from '../builtin/internal/erc20_processor'
7
- import { conversion } from '../utils'
8
- import { BigDecimal } from '@sentio/sdk'
9
-
10
- describe('Test Error Capture', () => {
11
- const service = new TestProcessorServer(() => {
12
- ERC20Processor.bind({ address: '0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91' })
13
- .onEventApproval((evt, ctx) => {
14
- const v = new BigDecimal(1).div(conversion.toBigDecimal(evt.args.value))
15
- ctx.meter.Gauge('xx').record(v)
16
- })
17
- .onEventTransfer((evt, ctx) => {
18
- const v = new BigDecimal(0).div(conversion.toBigDecimal(evt.args.value))
19
- ctx.meter.Gauge('xx').record(v)
20
- })
21
- .onEventOwnershipTransferred((evt, ctx) => {
22
- ctx.meter.Gauge('xx').record(BigNumber.from(10 ** 18))
23
- })
24
- })
25
-
26
- beforeAll(async () => {
27
- await service.start()
28
- })
29
-
30
- test('Check infinite', async () => {
31
- let err: Error | undefined
32
- try {
33
- // TODO check why order matters
34
- // await service.testLog(mockApprovalLog("0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91", {
35
- // value: BigNumber.from(3000000),
36
- // spender: "0x0000000000000000000000000000000000000000",
37
- // owner: "0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91"
38
- // }))
39
- await service.testLog(
40
- mockApprovalLog('0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91', {
41
- owner: '0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91',
42
- spender: '0x0000000000000000000000000000000000000000',
43
- value: BigNumber.from(0),
44
- })
45
- )
46
- } catch (e) {
47
- err = e
48
- }
49
- assert(err?.message.includes('Record infinite value'))
50
- })
51
-
52
- test('Check NaN', async () => {
53
- let err: Error | undefined
54
- try {
55
- await service.testLog(
56
- mockTransferLog('0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91', {
57
- from: '0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91',
58
- to: '0x0000000000000000000000000000000000000000',
59
- value: BigNumber.from(0),
60
- })
61
- )
62
- } catch (e) {
63
- err = e
64
- }
65
- assert(err?.message.includes('NaN'))
66
- })
67
-
68
- test('Check overflow', async () => {
69
- let err: Error | undefined
70
- try {
71
- await service.testLog(
72
- mockOwnershipTransferredLog('0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91', {
73
- previousOwner: '0x80009ff8154bd5653c6dda2fa5f5053e5a5c1a91',
74
- newOwner: '0x0000000000000000000000000000000000000000',
75
- })
76
- )
77
- } catch (e) {
78
- err = e
79
- }
80
- assert(err?.message.includes('overflow'))
81
- })
82
- })