@sentio/sdk 1.7.12 → 1.7.15

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 (293) hide show
  1. package/{base-processor-template.d.ts → lib/base-processor-template.d.ts} +0 -0
  2. package/{base-processor-template.js → lib/base-processor-template.js} +0 -0
  3. package/lib/base-processor-template.js.map +1 -0
  4. package/{base-processor.d.ts → lib/base-processor.d.ts} +0 -0
  5. package/{base-processor.js → lib/base-processor.js} +0 -0
  6. package/lib/base-processor.js.map +1 -0
  7. package/{bind-options.d.ts → lib/bind-options.d.ts} +0 -0
  8. package/{bind-options.js → lib/bind-options.js} +0 -0
  9. package/lib/bind-options.js.map +1 -0
  10. package/{binds.d.ts → lib/binds.d.ts} +0 -0
  11. package/{binds.js → lib/binds.js} +0 -0
  12. package/lib/binds.js.map +1 -0
  13. package/{builtin → lib/builtin}/erc20/index.d.ts +0 -0
  14. package/{builtin → lib/builtin}/erc20/index.js +0 -0
  15. package/lib/builtin/erc20/index.js.map +1 -0
  16. package/{builtin → lib/builtin}/erc20/test-utils.d.ts +0 -0
  17. package/{builtin → lib/builtin}/erc20/test-utils.js +0 -0
  18. package/lib/builtin/erc20/test-utils.js.map +1 -0
  19. package/{builtin → lib/builtin}/internal/Erc20.d.ts +0 -0
  20. package/{builtin → lib/builtin}/internal/Erc20.js +0 -0
  21. package/lib/builtin/internal/Erc20.js.map +1 -0
  22. package/{builtin → lib/builtin}/internal/common.d.ts +0 -0
  23. package/{builtin → lib/builtin}/internal/common.js +0 -0
  24. package/lib/builtin/internal/common.js.map +1 -0
  25. package/{builtin → lib/builtin}/internal/erc20_processor.d.ts +0 -0
  26. package/{builtin → lib/builtin}/internal/erc20_processor.js +0 -0
  27. package/lib/builtin/internal/erc20_processor.js.map +1 -0
  28. package/{builtin → lib/builtin}/internal/factories/Erc20__factory.d.ts +0 -0
  29. package/{builtin → lib/builtin}/internal/factories/Erc20__factory.js +0 -0
  30. package/lib/builtin/internal/factories/Erc20__factory.js.map +1 -0
  31. package/{builtin → lib/builtin}/internal/factories/index.d.ts +0 -0
  32. package/{builtin → lib/builtin}/internal/factories/index.js +0 -0
  33. package/{builtin → lib/builtin}/internal/factories/index.js.map +1 -1
  34. package/{builtin → lib/builtin}/internal/index.d.ts +0 -0
  35. package/{builtin → lib/builtin}/internal/index.js +0 -0
  36. package/lib/builtin/internal/index.js.map +1 -0
  37. package/{chain-config.d.ts → lib/chain-config.d.ts} +0 -0
  38. package/{chain-config.js → lib/chain-config.js} +0 -0
  39. package/lib/chain-config.js.map +1 -0
  40. package/{cli → lib/cli}/build.d.ts +0 -0
  41. package/{cli → lib/cli}/build.js +0 -0
  42. package/lib/cli/build.js.map +1 -0
  43. package/{cli → lib/cli}/cli.d.ts +0 -0
  44. package/{cli → lib/cli}/cli.js +0 -0
  45. package/lib/cli/cli.js.map +1 -0
  46. package/{cli → lib/cli}/config.d.ts +0 -0
  47. package/{cli → lib/cli}/config.js +0 -0
  48. package/lib/cli/config.js.map +1 -0
  49. package/{cli → lib/cli}/key.d.ts +0 -0
  50. package/{cli → lib/cli}/key.js +0 -0
  51. package/{cli → lib/cli}/key.js.map +1 -1
  52. package/{cli → lib/cli}/solana-code-gen.d.ts +0 -0
  53. package/{cli → lib/cli}/solana-code-gen.js +0 -0
  54. package/{cli → lib/cli}/solana-code-gen.js.map +1 -1
  55. package/{cli → lib/cli}/upload.d.ts +0 -0
  56. package/{cli → lib/cli}/upload.js +0 -0
  57. package/{cli → lib/cli}/upload.js.map +1 -1
  58. package/{cli → lib/cli}/webpack.config.js +0 -0
  59. package/{context.d.ts → lib/context.d.ts} +0 -0
  60. package/{context.js → lib/context.js} +0 -0
  61. package/lib/context.js.map +1 -0
  62. package/{contract-namer.d.ts → lib/contract-namer.d.ts} +0 -0
  63. package/{contract-namer.js → lib/contract-namer.js} +0 -0
  64. package/{contract-namer.js.map → lib/contract-namer.js.map} +1 -1
  65. package/{error.d.ts → lib/error.d.ts} +0 -0
  66. package/{error.js → lib/error.js} +0 -0
  67. package/lib/error.js.map +1 -0
  68. package/{gen → lib/gen}/builtin.d.ts +0 -0
  69. package/{gen → lib/gen}/builtin.js +0 -0
  70. package/lib/gen/builtin.js.map +1 -0
  71. package/{gen → lib/gen}/google/protobuf/empty.d.ts +0 -0
  72. package/{gen → lib/gen}/google/protobuf/empty.js +0 -0
  73. package/lib/gen/google/protobuf/empty.js.map +1 -0
  74. package/{gen → lib/gen}/processor/protos/processor.d.ts +0 -0
  75. package/{gen → lib/gen}/processor/protos/processor.js +0 -0
  76. package/lib/gen/processor/protos/processor.js.map +1 -0
  77. package/{generic-processor.d.ts → lib/generic-processor.d.ts} +0 -0
  78. package/{generic-processor.js → lib/generic-processor.js} +0 -0
  79. package/lib/generic-processor.js.map +1 -0
  80. package/{index.d.ts → lib/index.d.ts} +0 -0
  81. package/{index.js → lib/index.js} +0 -0
  82. package/lib/index.js.map +1 -0
  83. package/{meter.d.ts → lib/meter.d.ts} +0 -0
  84. package/{meter.js → lib/meter.js} +0 -0
  85. package/lib/meter.js.map +1 -0
  86. package/{numberish.d.ts → lib/numberish.d.ts} +0 -0
  87. package/{numberish.js → lib/numberish.js} +0 -0
  88. package/lib/numberish.js.map +1 -0
  89. package/{numberish.test.d.ts → lib/numberish.test.d.ts} +0 -0
  90. package/{numberish.test.js → lib/numberish.test.js} +0 -0
  91. package/{numberish.test.js.map → lib/numberish.test.js.map} +1 -1
  92. package/{processor-runner.d.ts → lib/processor-runner.d.ts} +0 -0
  93. package/{processor-runner.js → lib/processor-runner.js} +0 -0
  94. package/lib/processor-runner.js.map +1 -0
  95. package/{processor-state.d.ts → lib/processor-state.d.ts} +0 -0
  96. package/{processor-state.js → lib/processor-state.js} +0 -0
  97. package/lib/processor-state.js.map +1 -0
  98. package/{promise-or-void.d.ts → lib/promise-or-void.d.ts} +0 -0
  99. package/{promise-or-void.js → lib/promise-or-void.js} +0 -0
  100. package/lib/promise-or-void.js.map +1 -0
  101. package/{provider.d.ts → lib/provider.d.ts} +0 -0
  102. package/{provider.js → lib/provider.js} +1 -1
  103. package/lib/provider.js.map +1 -0
  104. package/{release.config.js → lib/release.config.js} +0 -0
  105. package/{service.d.ts → lib/service.d.ts} +0 -0
  106. package/{service.js → lib/service.js} +0 -0
  107. package/lib/service.js.map +1 -0
  108. package/{solana → lib/solana}/builtin/index.d.ts +0 -0
  109. package/{solana → lib/solana}/builtin/index.js +0 -0
  110. package/lib/solana/builtin/index.js.map +1 -0
  111. package/{solana → lib/solana}/builtin/spl-token-processor.d.ts +0 -0
  112. package/{solana → lib/solana}/builtin/spl-token-processor.js +0 -0
  113. package/lib/solana/builtin/spl-token-processor.js.map +1 -0
  114. package/{solana → lib/solana}/builtin/types.d.ts +0 -0
  115. package/{solana → lib/solana}/builtin/types.js +0 -0
  116. package/lib/solana/builtin/types.js.map +1 -0
  117. package/{solana → lib/solana}/builtin/wormhole-processor.d.ts +0 -0
  118. package/{solana → lib/solana}/builtin/wormhole-processor.js +0 -0
  119. package/lib/solana/builtin/wormhole-processor.js.map +1 -0
  120. package/{solana-processor.d.ts → lib/solana-processor.d.ts} +0 -0
  121. package/{solana-processor.js → lib/solana-processor.js} +0 -0
  122. package/lib/solana-processor.js.map +1 -0
  123. package/{target-ethers-sentio → lib/target-ethers-sentio}/codegen.d.ts +0 -0
  124. package/{target-ethers-sentio → lib/target-ethers-sentio}/codegen.js +0 -0
  125. package/{target-ethers-sentio → lib/target-ethers-sentio}/codegen.js.map +0 -0
  126. package/{target-ethers-sentio → lib/target-ethers-sentio}/index.d.ts +0 -0
  127. package/{target-ethers-sentio → lib/target-ethers-sentio}/index.js +0 -0
  128. package/{target-ethers-sentio → lib/target-ethers-sentio}/index.js.map +0 -0
  129. package/{test → lib/test}/codegen.test.d.ts +0 -0
  130. package/{test → lib/test}/codegen.test.js +4 -8
  131. package/lib/test/codegen.test.js.map +1 -0
  132. package/{test → lib/test}/erc20-template.d.ts +0 -0
  133. package/{test → lib/test}/erc20-template.js +0 -0
  134. package/lib/test/erc20-template.js.map +1 -0
  135. package/{test → lib/test}/erc20-template.test.d.ts +0 -0
  136. package/{test → lib/test}/erc20-template.test.js +0 -0
  137. package/{test → lib/test}/erc20-template.test.js.map +1 -1
  138. package/{test → lib/test}/erc20.d.ts +0 -0
  139. package/{test → lib/test}/erc20.js +0 -0
  140. package/lib/test/erc20.js.map +1 -0
  141. package/{test → lib/test}/erc20.test.d.ts +0 -0
  142. package/{test → lib/test}/erc20.test.js +0 -0
  143. package/{test → lib/test}/erc20.test.js.map +1 -1
  144. package/{test → lib/test}/generic-processor.test.d.ts +0 -0
  145. package/{test → lib/test}/generic-processor.test.js +11 -1
  146. package/lib/test/generic-processor.test.js.map +1 -0
  147. package/{test → lib/test}/index.d.ts +0 -0
  148. package/{test → lib/test}/index.js +0 -0
  149. package/{test → lib/test}/index.js.map +1 -1
  150. package/{test → lib/test}/metric-utils.d.ts +0 -0
  151. package/{test → lib/test}/metric-utils.js +0 -0
  152. package/lib/test/metric-utils.js.map +1 -0
  153. package/{test → lib/test}/mirrorworld.d.ts +0 -0
  154. package/{test → lib/test}/mirrorworld.js +0 -0
  155. package/{test → lib/test}/mirrorworld.js.map +1 -1
  156. package/{test → lib/test}/solana.test.d.ts +0 -0
  157. package/{test → lib/test}/solana.test.js +0 -0
  158. package/lib/test/solana.test.js.map +1 -0
  159. package/{test → lib/test}/test-processor-server.d.ts +0 -0
  160. package/{test → lib/test}/test-processor-server.js +0 -0
  161. package/lib/test/test-processor-server.js.map +1 -0
  162. package/{test → lib/test}/types/game_wallet.d.ts +0 -0
  163. package/{test → lib/test}/types/game_wallet.js +0 -0
  164. package/lib/test/types/game_wallet.js.map +1 -0
  165. package/{test → lib/test}/types/game_wallet_processor.d.ts +0 -0
  166. package/{test → lib/test}/types/game_wallet_processor.js +0 -0
  167. package/lib/test/types/game_wallet_processor.js.map +1 -0
  168. package/{test → lib/test}/wormhole-token-bridge.d.ts +0 -0
  169. package/{test → lib/test}/wormhole-token-bridge.js +0 -0
  170. package/lib/test/wormhole-token-bridge.js.map +1 -0
  171. package/{utils → lib/utils}/chainmap.d.ts +0 -0
  172. package/{utils → lib/utils}/chainmap.js +0 -0
  173. package/lib/utils/chainmap.js.map +1 -0
  174. package/{utils → lib/utils}/convert.d.ts +0 -0
  175. package/{utils → lib/utils}/convert.js +0 -0
  176. package/lib/utils/convert.js.map +1 -0
  177. package/{utils → lib/utils}/index.d.ts +0 -0
  178. package/{utils → lib/utils}/index.js +0 -0
  179. package/lib/utils/index.js.map +1 -0
  180. package/package.json +47 -6
  181. package/src/abis/erc20.json +198 -0
  182. package/src/base-processor-template.ts +92 -0
  183. package/src/base-processor.ts +128 -0
  184. package/src/bind-options.ts +41 -0
  185. package/src/binds.ts +73 -0
  186. package/src/builtin/erc20/index.ts +6 -0
  187. package/src/builtin/erc20/test-utils.ts +49 -0
  188. package/src/builtin/internal/Erc20.ts +356 -0
  189. package/src/builtin/internal/common.ts +46 -0
  190. package/src/builtin/internal/erc20_processor.ts +295 -0
  191. package/src/builtin/internal/factories/Erc20__factory.ts +216 -0
  192. package/src/builtin/internal/factories/index.ts +4 -0
  193. package/src/builtin/internal/index.ts +6 -0
  194. package/src/chain-config.ts +6 -0
  195. package/src/cli/build.ts +180 -0
  196. package/src/cli/cli.ts +217 -0
  197. package/src/cli/config.ts +43 -0
  198. package/src/cli/key.ts +43 -0
  199. package/src/cli/solana-code-gen.ts +16 -0
  200. package/src/cli/upload.ts +86 -0
  201. package/src/cli/webpack.config.js +42 -0
  202. package/src/context.ts +93 -0
  203. package/src/contract-namer.ts +17 -0
  204. package/src/error.ts +43 -0
  205. package/src/gen/builtin.ts +22 -0
  206. package/src/gen/google/protobuf/empty.ts +70 -0
  207. package/src/gen/processor/protos/processor.ts +3071 -0
  208. package/src/generic-processor.ts +38 -0
  209. package/src/index.ts +19 -0
  210. package/src/meter.ts +122 -0
  211. package/src/numberish.test.ts +82 -0
  212. package/src/numberish.ts +99 -0
  213. package/src/processor-runner.ts +75 -0
  214. package/src/processor-state.ts +24 -0
  215. package/src/promise-or-void.ts +1 -0
  216. package/src/provider.ts +74 -0
  217. package/src/service.ts +434 -0
  218. package/src/solana/builtin/index.ts +2 -0
  219. package/src/solana/builtin/spl-token-processor.ts +164 -0
  220. package/src/solana/builtin/types.ts +268 -0
  221. package/src/solana/builtin/wormhole-processor.ts +178 -0
  222. package/src/solana-processor.ts +105 -0
  223. package/src/target-ethers-sentio/codegen.ts +289 -0
  224. package/src/target-ethers-sentio/index.ts +50 -0
  225. package/src/target-ethers-sentio/tsconfig.json +9 -0
  226. package/src/test/abis/evm/anyswapRouter.json +490 -0
  227. package/src/test/abis/solana/mirrorworld.json +1392 -0
  228. package/src/test/codegen.test.ts +26 -0
  229. package/src/test/erc20-template.test.ts +39 -0
  230. package/src/test/erc20-template.ts +25 -0
  231. package/src/test/erc20.test.ts +92 -0
  232. package/src/test/erc20.ts +48 -0
  233. package/src/test/generic-processor.test.ts +72 -0
  234. package/src/test/index.ts +1 -0
  235. package/src/test/metric-utils.ts +49 -0
  236. package/src/test/mirrorworld.ts +40 -0
  237. package/src/test/sentio.yaml +4 -0
  238. package/src/test/solana.test.ts +93 -0
  239. package/src/test/test-processor-server.ts +210 -0
  240. package/src/test/types/game_wallet.ts +1392 -0
  241. package/src/test/types/game_wallet_processor.ts +113 -0
  242. package/src/test/wormhole-token-bridge.ts +21 -0
  243. package/src/types/global.d.ts +17 -0
  244. package/src/utils/chainmap.ts +95 -0
  245. package/src/utils/convert.ts +6 -0
  246. package/src/utils/index.ts +2 -0
  247. package/base-processor-template.js.map +0 -1
  248. package/base-processor.js.map +0 -1
  249. package/bind-options.js.map +0 -1
  250. package/binds.js.map +0 -1
  251. package/builtin/erc20/index.js.map +0 -1
  252. package/builtin/erc20/test-utils.js.map +0 -1
  253. package/builtin/internal/Erc20.js.map +0 -1
  254. package/builtin/internal/common.js.map +0 -1
  255. package/builtin/internal/erc20_processor.js.map +0 -1
  256. package/builtin/internal/factories/Erc20__factory.js.map +0 -1
  257. package/builtin/internal/index.js.map +0 -1
  258. package/chain-config.js.map +0 -1
  259. package/cli/build.js.map +0 -1
  260. package/cli/cli.js.map +0 -1
  261. package/cli/config.js.map +0 -1
  262. package/context.js.map +0 -1
  263. package/error.js.map +0 -1
  264. package/gen/builtin.js.map +0 -1
  265. package/gen/google/protobuf/empty.js.map +0 -1
  266. package/gen/processor/protos/processor.js.map +0 -1
  267. package/generic-processor.js.map +0 -1
  268. package/index.js.map +0 -1
  269. package/meter.js.map +0 -1
  270. package/numberish.js.map +0 -1
  271. package/processor-runner.js.map +0 -1
  272. package/processor-state.js.map +0 -1
  273. package/promise-or-void.js.map +0 -1
  274. package/provider.js.map +0 -1
  275. package/service.js.map +0 -1
  276. package/solana/builtin/index.js.map +0 -1
  277. package/solana/builtin/spl-token-processor.js.map +0 -1
  278. package/solana/builtin/types.js.map +0 -1
  279. package/solana/builtin/wormhole-processor.js.map +0 -1
  280. package/solana-processor.js.map +0 -1
  281. package/test/codegen.test.js.map +0 -1
  282. package/test/erc20-template.js.map +0 -1
  283. package/test/erc20.js.map +0 -1
  284. package/test/generic-processor.test.js.map +0 -1
  285. package/test/metric-utils.js.map +0 -1
  286. package/test/solana.test.js.map +0 -1
  287. package/test/test-processor-server.js.map +0 -1
  288. package/test/types/game_wallet.js.map +0 -1
  289. package/test/types/game_wallet_processor.js.map +0 -1
  290. package/test/wormhole-token-bridge.js.map +0 -1
  291. package/utils/chainmap.js.map +0 -1
  292. package/utils/convert.js.map +0 -1
  293. package/utils/index.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { Event } from '@ethersproject/contracts'
2
+ import { BytesLike } from '@ethersproject/bytes'
3
+ import { Block, Log, getNetwork } from '@ethersproject/providers'
4
+ import { BaseContract, EventFilter } from '@ethersproject/contracts'
5
+ import Long from 'long'
6
+
7
+ import { BoundContractView, Context, ContractView } from './context'
8
+ import { O11yResult } from './gen/processor/protos/processor'
9
+ import { BindInternalOptions, BindOptions } from './bind-options'
10
+ import { PromiseOrVoid } from './promise-or-void'
11
+
12
+ export class EventsHandler {
13
+ filters: EventFilter[]
14
+ handler: (event: Log) => Promise<O11yResult>
15
+ }
16
+
17
+ export abstract class BaseProcessor<
18
+ TContract extends BaseContract,
19
+ TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>
20
+ > {
21
+ blockHandlers: ((block: Block) => Promise<O11yResult>)[] = []
22
+ eventHandlers: EventsHandler[] = []
23
+
24
+ name: string
25
+ config: BindInternalOptions
26
+
27
+ constructor(config: BindOptions) {
28
+ this.config = {
29
+ address: config.address,
30
+ name: config.name || '',
31
+ network: config.network ? config.network : 1,
32
+ startBlock: new Long(0),
33
+ }
34
+ if (config.startBlock) {
35
+ if (typeof config.startBlock === 'number') {
36
+ this.config.startBlock = Long.fromNumber(config.startBlock)
37
+ } else {
38
+ this.config.startBlock = config.startBlock
39
+ }
40
+ }
41
+ if (config.endBlock) {
42
+ if (typeof config.endBlock === 'number') {
43
+ this.config.endBlock = Long.fromNumber(config.endBlock)
44
+ } else {
45
+ this.config.endBlock = config.endBlock
46
+ }
47
+ }
48
+ }
49
+
50
+ protected abstract CreateBoundContractView(): TBoundContractView
51
+
52
+ public getChainId(): number {
53
+ return getNetwork(this.config.network).chainId
54
+ }
55
+
56
+ public onEvent(
57
+ handler: (event: Event, ctx: Context<TContract, TBoundContractView>) => PromiseOrVoid,
58
+ filter: EventFilter | EventFilter[]
59
+ ) {
60
+ const chainId = this.getChainId()
61
+
62
+ let _filters: EventFilter[] = []
63
+
64
+ if (Array.isArray(filter)) {
65
+ _filters = filter
66
+ } else {
67
+ _filters.push(filter)
68
+ }
69
+
70
+ const contractView = this.CreateBoundContractView()
71
+ this.eventHandlers.push({
72
+ filters: _filters,
73
+ handler: async function (log) {
74
+ const ctx = new Context<TContract, TBoundContractView>(contractView, chainId, undefined, log)
75
+ // let event: Event = <Event>deepCopy(log);
76
+ const event: Event = <Event>log
77
+ const parsed = contractView.rawContract.interface.parseLog(log)
78
+ if (parsed) {
79
+ event.args = parsed.args
80
+ event.decode = (data: BytesLike, topics?: Array<any>) => {
81
+ return contractView.rawContract.interface.decodeEventLog(parsed.eventFragment, data, topics)
82
+ }
83
+ event.event = parsed.name
84
+ event.eventSignature = parsed.signature
85
+
86
+ // TODO fix this bug
87
+ await handler(event, ctx)
88
+ return {
89
+ gauges: ctx.gauges,
90
+ counters: ctx.counters,
91
+ }
92
+ }
93
+ return {
94
+ gauges: [],
95
+ counters: [],
96
+ }
97
+ },
98
+ })
99
+ return this
100
+ }
101
+
102
+ public onBlock(handler: (block: Block, ctx: Context<TContract, TBoundContractView>) => PromiseOrVoid) {
103
+ const chainId = this.getChainId()
104
+ const contractView = this.CreateBoundContractView()
105
+
106
+ this.blockHandlers.push(async function (block: Block) {
107
+ const ctx = new Context<TContract, TBoundContractView>(contractView, chainId, block, undefined)
108
+ await handler(block, ctx)
109
+ return {
110
+ gauges: ctx.gauges,
111
+ counters: ctx.counters,
112
+ }
113
+ })
114
+ return this
115
+ }
116
+
117
+ public onAllEvents(handler: (event: Log, ctx: Context<TContract, TBoundContractView>) => PromiseOrVoid) {
118
+ const _filters: EventFilter[] = []
119
+ const tmpContract = this.CreateBoundContractView()
120
+
121
+ for (const key in tmpContract.filters) {
122
+ _filters.push(tmpContract.filters[key]())
123
+ }
124
+ return this.onEvent(function (log, ctx) {
125
+ return handler(log, ctx)
126
+ }, _filters)
127
+ }
128
+ }
@@ -0,0 +1,41 @@
1
+ import { Networkish } from '@ethersproject/networks'
2
+ import Long from 'long'
3
+ import { getNetwork } from '@ethersproject/providers'
4
+
5
+ export class BindOptions {
6
+ address: string
7
+ network?: Networkish = 1
8
+ name?: string
9
+ startBlock?: Long | number
10
+ endBlock?: Long | number
11
+ }
12
+
13
+ export function getOptionsSignature(opts: BindOptions): string {
14
+ const sig = [opts.address]
15
+ if (opts.network) {
16
+ sig.push(getNetwork(opts.network).chainId.toString())
17
+ }
18
+ if (opts.name) {
19
+ sig.push(opts.name)
20
+ }
21
+ if (opts.startBlock) {
22
+ sig.push(opts.startBlock.toString())
23
+ }
24
+ if (opts.endBlock) {
25
+ sig.push(opts.endBlock.toString())
26
+ }
27
+ return sig.join('_')
28
+ }
29
+
30
+ export class BindInternalOptions {
31
+ address: string
32
+ network: Networkish
33
+ name: string
34
+ startBlock: Long
35
+ endBlock?: Long
36
+ }
37
+
38
+ export class SolanaBindOptions extends BindOptions {
39
+ declare network?: string
40
+ processInnerInstruction?: boolean
41
+ }
package/src/binds.ts ADDED
@@ -0,0 +1,73 @@
1
+ import { BindOptions, getOptionsSignature } from './bind-options'
2
+ import { BaseProcessor } from './base-processor'
3
+ import { Networkish } from '@ethersproject/networks'
4
+ import { getNetwork } from '@ethersproject/providers'
5
+ import { ContractView } from './context'
6
+ import { BaseContract } from 'ethers'
7
+ import { ContractNamer } from './contract-namer'
8
+
9
+ function getKey(abiName: string, address: string, network: Networkish) {
10
+ const chainId = getNetwork(network).chainId.toString()
11
+ return [abiName, address.toLowerCase(), chainId].join('_')
12
+ }
13
+
14
+ // TODO move to processor state
15
+ const addressToName = new Map<string, string>()
16
+ const namerMap = new Map<string, ContractNamer>()
17
+
18
+ // Get contract name by ABI, and other options
19
+ // If there is contract using same ABI and different (address, network) pair
20
+ // It will be renamed as ABI, ABI_1, ABI_2
21
+ // Otherwise just use same contract name
22
+ export function getContractName(
23
+ abiName: string,
24
+ contractName: string | undefined,
25
+ address: string,
26
+ network: Networkish = 1
27
+ ): string {
28
+ const key = getKey(abiName, address, network)
29
+ let name = addressToName.get(key)
30
+ if (name) {
31
+ return name
32
+ }
33
+ if (contractName) {
34
+ addressToName.set(key, contractName)
35
+ return contractName
36
+ }
37
+
38
+ let namer = namerMap.get(abiName)
39
+ if (!namer) {
40
+ namer = new ContractNamer(abiName)
41
+ namerMap.set(abiName, namer)
42
+ }
43
+ name = namer.nextName()
44
+ addressToName.set(key, name)
45
+ return name
46
+ }
47
+
48
+ export function getProcessor(abiName: string, opts: BindOptions) {
49
+ const sig = abiName + '_' + getOptionsSignature(opts)
50
+ return global.PROCESSOR_STATE.processorMap.get(sig)
51
+ }
52
+
53
+ export function addProcessor(abiName: string, opts: BindOptions, processor: BaseProcessor<any, any>) {
54
+ const sig = abiName + '_' + getOptionsSignature(opts)
55
+
56
+ global.PROCESSOR_STATE.processors.push(processor)
57
+ global.PROCESSOR_STATE.processorMap.set(sig, processor)
58
+ }
59
+
60
+ export function getContractByABI(abiName: string, address: string, network: Networkish) {
61
+ const key = getKey(abiName, address, network)
62
+ return global.PROCESSOR_STATE.contracts.get(key)
63
+ }
64
+
65
+ export function addContractByABI(
66
+ abiName: string,
67
+ address: string,
68
+ network: Networkish,
69
+ contract: ContractView<BaseContract>
70
+ ) {
71
+ const key = getKey(abiName, address, network)
72
+ return global.PROCESSOR_STATE.contracts.set(key, contract)
73
+ }
@@ -0,0 +1,6 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+
5
+ export * from "../internal/erc20_processor";
6
+ export * from "../internal/Erc20";
@@ -0,0 +1,49 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import { Log } from "@ethersproject/providers";
5
+ import { getErc20Contract, ApprovalEventObject, TransferEventObject } from ".";
6
+ const mockField = {
7
+ blockHash:
8
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
9
+ blockNumber: 0,
10
+ logIndex: 0,
11
+ removed: false,
12
+ transactionHash:
13
+ "0x0000000000000000000000000000000000000000000000000000000000000000",
14
+ transactionIndex: 0,
15
+ };
16
+
17
+ export function mockApprovalLog(
18
+ contractAddress: string,
19
+ event: ApprovalEventObject
20
+ ): Log {
21
+ const contract = getErc20Contract(contractAddress);
22
+ const encodedLog = contract.rawContract.interface.encodeEventLog(
23
+ contract.rawContract.interface.getEvent("Approval"),
24
+ Object.values(event)
25
+ );
26
+ return {
27
+ ...mockField,
28
+ address: contractAddress,
29
+ data: encodedLog.data,
30
+ topics: encodedLog.topics,
31
+ };
32
+ }
33
+
34
+ export function mockTransferLog(
35
+ contractAddress: string,
36
+ event: TransferEventObject
37
+ ): Log {
38
+ const contract = getErc20Contract(contractAddress);
39
+ const encodedLog = contract.rawContract.interface.encodeEventLog(
40
+ contract.rawContract.interface.getEvent("Transfer"),
41
+ Object.values(event)
42
+ );
43
+ return {
44
+ ...mockField,
45
+ address: contractAddress,
46
+ data: encodedLog.data,
47
+ topics: encodedLog.topics,
48
+ };
49
+ }
@@ -0,0 +1,356 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type {
5
+ BaseContract,
6
+ BigNumber,
7
+ BigNumberish,
8
+ BytesLike,
9
+ CallOverrides,
10
+ ContractTransaction,
11
+ Overrides,
12
+ PopulatedTransaction,
13
+ Signer,
14
+ utils,
15
+ } from "ethers";
16
+ import type {
17
+ FunctionFragment,
18
+ Result,
19
+ EventFragment,
20
+ } from "@ethersproject/abi";
21
+ import type { Listener, Provider } from "@ethersproject/providers";
22
+ import type {
23
+ TypedEventFilter,
24
+ TypedEvent,
25
+ TypedListener,
26
+ OnEvent,
27
+ PromiseOrValue,
28
+ } from "./common";
29
+
30
+ export interface Erc20Interface extends utils.Interface {
31
+ functions: {
32
+ "allowance(address,address)": FunctionFragment;
33
+ "approve(address,uint256)": FunctionFragment;
34
+ "balanceOf(address)": FunctionFragment;
35
+ "decimals()": FunctionFragment;
36
+ "totalSupply()": FunctionFragment;
37
+ "transfer(address,uint256)": FunctionFragment;
38
+ "transferFrom(address,address,uint256)": FunctionFragment;
39
+ };
40
+
41
+ getFunction(
42
+ nameOrSignatureOrTopic:
43
+ | "allowance"
44
+ | "approve"
45
+ | "balanceOf"
46
+ | "decimals"
47
+ | "totalSupply"
48
+ | "transfer"
49
+ | "transferFrom"
50
+ ): FunctionFragment;
51
+
52
+ encodeFunctionData(
53
+ functionFragment: "allowance",
54
+ values: [PromiseOrValue<string>, PromiseOrValue<string>]
55
+ ): string;
56
+ encodeFunctionData(
57
+ functionFragment: "approve",
58
+ values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
59
+ ): string;
60
+ encodeFunctionData(
61
+ functionFragment: "balanceOf",
62
+ values: [PromiseOrValue<string>]
63
+ ): string;
64
+ encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
65
+ encodeFunctionData(
66
+ functionFragment: "totalSupply",
67
+ values?: undefined
68
+ ): string;
69
+ encodeFunctionData(
70
+ functionFragment: "transfer",
71
+ values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]
72
+ ): string;
73
+ encodeFunctionData(
74
+ functionFragment: "transferFrom",
75
+ values: [
76
+ PromiseOrValue<string>,
77
+ PromiseOrValue<string>,
78
+ PromiseOrValue<BigNumberish>
79
+ ]
80
+ ): string;
81
+
82
+ decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
83
+ decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
84
+ decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
85
+ decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
86
+ decodeFunctionResult(
87
+ functionFragment: "totalSupply",
88
+ data: BytesLike
89
+ ): Result;
90
+ decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
91
+ decodeFunctionResult(
92
+ functionFragment: "transferFrom",
93
+ data: BytesLike
94
+ ): Result;
95
+
96
+ events: {
97
+ "Approval(address,address,uint256)": EventFragment;
98
+ "Transfer(address,address,uint256)": EventFragment;
99
+ };
100
+
101
+ getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
102
+ getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
103
+ }
104
+
105
+ export interface ApprovalEventObject {
106
+ owner: string;
107
+ spender: string;
108
+ value: BigNumber;
109
+ }
110
+ export type ApprovalEvent = TypedEvent<
111
+ [string, string, BigNumber],
112
+ ApprovalEventObject
113
+ >;
114
+
115
+ export type ApprovalEventFilter = TypedEventFilter<ApprovalEvent>;
116
+
117
+ export interface TransferEventObject {
118
+ from: string;
119
+ to: string;
120
+ value: BigNumber;
121
+ }
122
+ export type TransferEvent = TypedEvent<
123
+ [string, string, BigNumber],
124
+ TransferEventObject
125
+ >;
126
+
127
+ export type TransferEventFilter = TypedEventFilter<TransferEvent>;
128
+
129
+ export interface Erc20 extends BaseContract {
130
+ connect(signerOrProvider: Signer | Provider | string): this;
131
+ attach(addressOrName: string): this;
132
+ deployed(): Promise<this>;
133
+
134
+ interface: Erc20Interface;
135
+
136
+ queryFilter<TEvent extends TypedEvent>(
137
+ event: TypedEventFilter<TEvent>,
138
+ fromBlockOrBlockhash?: string | number | undefined,
139
+ toBlock?: string | number | undefined
140
+ ): Promise<Array<TEvent>>;
141
+
142
+ listeners<TEvent extends TypedEvent>(
143
+ eventFilter?: TypedEventFilter<TEvent>
144
+ ): Array<TypedListener<TEvent>>;
145
+ listeners(eventName?: string): Array<Listener>;
146
+ removeAllListeners<TEvent extends TypedEvent>(
147
+ eventFilter: TypedEventFilter<TEvent>
148
+ ): this;
149
+ removeAllListeners(eventName?: string): this;
150
+ off: OnEvent<this>;
151
+ on: OnEvent<this>;
152
+ once: OnEvent<this>;
153
+ removeListener: OnEvent<this>;
154
+
155
+ functions: {
156
+ allowance(
157
+ owner: PromiseOrValue<string>,
158
+ spender: PromiseOrValue<string>,
159
+ overrides?: CallOverrides
160
+ ): Promise<[BigNumber]>;
161
+
162
+ approve(
163
+ spender: PromiseOrValue<string>,
164
+ amount: PromiseOrValue<BigNumberish>,
165
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
166
+ ): Promise<ContractTransaction>;
167
+
168
+ balanceOf(
169
+ account: PromiseOrValue<string>,
170
+ overrides?: CallOverrides
171
+ ): Promise<[BigNumber]>;
172
+
173
+ decimals(overrides?: CallOverrides): Promise<[number]>;
174
+
175
+ totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
176
+
177
+ transfer(
178
+ to: PromiseOrValue<string>,
179
+ amount: PromiseOrValue<BigNumberish>,
180
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
181
+ ): Promise<ContractTransaction>;
182
+
183
+ transferFrom(
184
+ from: PromiseOrValue<string>,
185
+ to: PromiseOrValue<string>,
186
+ amount: PromiseOrValue<BigNumberish>,
187
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
188
+ ): Promise<ContractTransaction>;
189
+ };
190
+
191
+ allowance(
192
+ owner: PromiseOrValue<string>,
193
+ spender: PromiseOrValue<string>,
194
+ overrides?: CallOverrides
195
+ ): Promise<BigNumber>;
196
+
197
+ approve(
198
+ spender: PromiseOrValue<string>,
199
+ amount: PromiseOrValue<BigNumberish>,
200
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
201
+ ): Promise<ContractTransaction>;
202
+
203
+ balanceOf(
204
+ account: PromiseOrValue<string>,
205
+ overrides?: CallOverrides
206
+ ): Promise<BigNumber>;
207
+
208
+ decimals(overrides?: CallOverrides): Promise<number>;
209
+
210
+ totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
211
+
212
+ transfer(
213
+ to: PromiseOrValue<string>,
214
+ amount: PromiseOrValue<BigNumberish>,
215
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
216
+ ): Promise<ContractTransaction>;
217
+
218
+ transferFrom(
219
+ from: PromiseOrValue<string>,
220
+ to: PromiseOrValue<string>,
221
+ amount: PromiseOrValue<BigNumberish>,
222
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
223
+ ): Promise<ContractTransaction>;
224
+
225
+ callStatic: {
226
+ allowance(
227
+ owner: PromiseOrValue<string>,
228
+ spender: PromiseOrValue<string>,
229
+ overrides?: CallOverrides
230
+ ): Promise<BigNumber>;
231
+
232
+ approve(
233
+ spender: PromiseOrValue<string>,
234
+ amount: PromiseOrValue<BigNumberish>,
235
+ overrides?: CallOverrides
236
+ ): Promise<boolean>;
237
+
238
+ balanceOf(
239
+ account: PromiseOrValue<string>,
240
+ overrides?: CallOverrides
241
+ ): Promise<BigNumber>;
242
+
243
+ decimals(overrides?: CallOverrides): Promise<number>;
244
+
245
+ totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
246
+
247
+ transfer(
248
+ to: PromiseOrValue<string>,
249
+ amount: PromiseOrValue<BigNumberish>,
250
+ overrides?: CallOverrides
251
+ ): Promise<boolean>;
252
+
253
+ transferFrom(
254
+ from: PromiseOrValue<string>,
255
+ to: PromiseOrValue<string>,
256
+ amount: PromiseOrValue<BigNumberish>,
257
+ overrides?: CallOverrides
258
+ ): Promise<boolean>;
259
+ };
260
+
261
+ filters: {
262
+ "Approval(address,address,uint256)"(
263
+ owner?: PromiseOrValue<string> | null,
264
+ spender?: PromiseOrValue<string> | null,
265
+ value?: null
266
+ ): ApprovalEventFilter;
267
+ Approval(
268
+ owner?: PromiseOrValue<string> | null,
269
+ spender?: PromiseOrValue<string> | null,
270
+ value?: null
271
+ ): ApprovalEventFilter;
272
+
273
+ "Transfer(address,address,uint256)"(
274
+ from?: PromiseOrValue<string> | null,
275
+ to?: PromiseOrValue<string> | null,
276
+ value?: null
277
+ ): TransferEventFilter;
278
+ Transfer(
279
+ from?: PromiseOrValue<string> | null,
280
+ to?: PromiseOrValue<string> | null,
281
+ value?: null
282
+ ): TransferEventFilter;
283
+ };
284
+
285
+ estimateGas: {
286
+ allowance(
287
+ owner: PromiseOrValue<string>,
288
+ spender: PromiseOrValue<string>,
289
+ overrides?: CallOverrides
290
+ ): Promise<BigNumber>;
291
+
292
+ approve(
293
+ spender: PromiseOrValue<string>,
294
+ amount: PromiseOrValue<BigNumberish>,
295
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
296
+ ): Promise<BigNumber>;
297
+
298
+ balanceOf(
299
+ account: PromiseOrValue<string>,
300
+ overrides?: CallOverrides
301
+ ): Promise<BigNumber>;
302
+
303
+ decimals(overrides?: CallOverrides): Promise<BigNumber>;
304
+
305
+ totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
306
+
307
+ transfer(
308
+ to: PromiseOrValue<string>,
309
+ amount: PromiseOrValue<BigNumberish>,
310
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
311
+ ): Promise<BigNumber>;
312
+
313
+ transferFrom(
314
+ from: PromiseOrValue<string>,
315
+ to: PromiseOrValue<string>,
316
+ amount: PromiseOrValue<BigNumberish>,
317
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
318
+ ): Promise<BigNumber>;
319
+ };
320
+
321
+ populateTransaction: {
322
+ allowance(
323
+ owner: PromiseOrValue<string>,
324
+ spender: PromiseOrValue<string>,
325
+ overrides?: CallOverrides
326
+ ): Promise<PopulatedTransaction>;
327
+
328
+ approve(
329
+ spender: PromiseOrValue<string>,
330
+ amount: PromiseOrValue<BigNumberish>,
331
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
332
+ ): Promise<PopulatedTransaction>;
333
+
334
+ balanceOf(
335
+ account: PromiseOrValue<string>,
336
+ overrides?: CallOverrides
337
+ ): Promise<PopulatedTransaction>;
338
+
339
+ decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
340
+
341
+ totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
342
+
343
+ transfer(
344
+ to: PromiseOrValue<string>,
345
+ amount: PromiseOrValue<BigNumberish>,
346
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
347
+ ): Promise<PopulatedTransaction>;
348
+
349
+ transferFrom(
350
+ from: PromiseOrValue<string>,
351
+ to: PromiseOrValue<string>,
352
+ amount: PromiseOrValue<BigNumberish>,
353
+ overrides?: Overrides & { from?: PromiseOrValue<string> }
354
+ ): Promise<PopulatedTransaction>;
355
+ };
356
+ }
@@ -0,0 +1,46 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type { Listener } from "@ethersproject/providers";
5
+ import type { Event, EventFilter } from "ethers";
6
+
7
+ export interface TypedEvent<
8
+ TArgsArray extends Array<any> = any,
9
+ TArgsObject = any
10
+ > extends Event {
11
+ args: TArgsArray & TArgsObject;
12
+ }
13
+
14
+ export interface TypedEventFilter<_TEvent extends TypedEvent>
15
+ extends EventFilter {}
16
+
17
+ export interface TypedListener<TEvent extends TypedEvent> {
18
+ (...listenerArg: [...__TypechainArgsArray<TEvent>, TEvent]): void;
19
+ }
20
+
21
+ type __TypechainArgsArray<T> = T extends TypedEvent<infer U> ? U : never;
22
+
23
+ export interface OnEvent<TRes> {
24
+ <TEvent extends TypedEvent>(
25
+ eventFilter: TypedEventFilter<TEvent>,
26
+ listener: TypedListener<TEvent>
27
+ ): TRes;
28
+ (eventName: string, listener: Listener): TRes;
29
+ }
30
+
31
+ export type MinEthersFactory<C, ARGS> = {
32
+ deploy(...a: ARGS[]): Promise<C>;
33
+ };
34
+
35
+ export type GetContractTypeFromFactory<F> = F extends MinEthersFactory<
36
+ infer C,
37
+ any
38
+ >
39
+ ? C
40
+ : never;
41
+
42
+ export type GetARGsTypeFromFactory<F> = F extends MinEthersFactory<any, any>
43
+ ? Parameters<F["deploy"]>
44
+ : never;
45
+
46
+ export type PromiseOrValue<T> = T | Promise<T>;