@sentio/sdk 2.14.5-rc.1 → 2.15.0-rc.1

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 (160) hide show
  1. package/lib/aptos/api.d.ts +1 -2
  2. package/lib/aptos/api.js +2 -2
  3. package/lib/aptos/api.js.map +1 -1
  4. package/lib/aptos/aptos-processor.js +3 -3
  5. package/lib/aptos/aptos-processor.js.map +1 -1
  6. package/lib/aptos/context.d.ts +2 -2
  7. package/lib/aptos/context.js +3 -4
  8. package/lib/aptos/context.js.map +1 -1
  9. package/lib/aptos/ext/coin.js +2 -2
  10. package/lib/aptos/ext/coin.js.map +1 -1
  11. package/lib/aptos/network.d.ts +7 -7
  12. package/lib/aptos/network.js +6 -19
  13. package/lib/aptos/network.js.map +1 -1
  14. package/lib/core/base-context.d.ts +2 -1
  15. package/lib/core/base-context.js.map +1 -1
  16. package/lib/core/chain.d.ts +194 -93
  17. package/lib/core/chain.js +112 -96
  18. package/lib/core/chain.js.map +1 -1
  19. package/lib/core/yaml-contract-config.d.ts +2 -1
  20. package/lib/core/yaml-contract-config.js.map +1 -1
  21. package/lib/eth/account-processor.d.ts +3 -2
  22. package/lib/eth/account-processor.js +3 -3
  23. package/lib/eth/account-processor.js.map +1 -1
  24. package/lib/eth/base-processor-template.d.ts +2 -3
  25. package/lib/eth/base-processor-template.js +1 -2
  26. package/lib/eth/base-processor-template.js.map +1 -1
  27. package/lib/eth/base-processor.d.ts +5 -5
  28. package/lib/eth/base-processor.js +5 -5
  29. package/lib/eth/base-processor.js.map +1 -1
  30. package/lib/eth/bind-options.d.ts +3 -3
  31. package/lib/eth/bind-options.js +3 -4
  32. package/lib/eth/bind-options.js.map +1 -1
  33. package/lib/eth/binds.d.ts +3 -3
  34. package/lib/eth/binds.js +1 -3
  35. package/lib/eth/binds.js.map +1 -1
  36. package/lib/eth/builtin/internal/eacaggregatorproxy-processor.d.ts +2 -4
  37. package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js +2 -2
  38. package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js.map +1 -1
  39. package/lib/eth/builtin/internal/eacaggregatorproxy-test-utils.js +5 -4
  40. package/lib/eth/builtin/internal/eacaggregatorproxy-test-utils.js.map +1 -1
  41. package/lib/eth/builtin/internal/erc1155-processor.d.ts +2 -4
  42. package/lib/eth/builtin/internal/erc1155-processor.js +2 -2
  43. package/lib/eth/builtin/internal/erc1155-processor.js.map +1 -1
  44. package/lib/eth/builtin/internal/erc1155-test-utils.js +5 -4
  45. package/lib/eth/builtin/internal/erc1155-test-utils.js.map +1 -1
  46. package/lib/eth/builtin/internal/erc20-processor.d.ts +2 -4
  47. package/lib/eth/builtin/internal/erc20-processor.js +2 -2
  48. package/lib/eth/builtin/internal/erc20-processor.js.map +1 -1
  49. package/lib/eth/builtin/internal/erc20-test-utils.js +4 -3
  50. package/lib/eth/builtin/internal/erc20-test-utils.js.map +1 -1
  51. package/lib/eth/builtin/internal/erc20bytes-processor.d.ts +2 -4
  52. package/lib/eth/builtin/internal/erc20bytes-processor.js +2 -2
  53. package/lib/eth/builtin/internal/erc20bytes-processor.js.map +1 -1
  54. package/lib/eth/builtin/internal/erc20bytes-test-utils.js +3 -2
  55. package/lib/eth/builtin/internal/erc20bytes-test-utils.js.map +1 -1
  56. package/lib/eth/builtin/internal/erc721-processor.d.ts +2 -4
  57. package/lib/eth/builtin/internal/erc721-processor.js +2 -2
  58. package/lib/eth/builtin/internal/erc721-processor.js.map +1 -1
  59. package/lib/eth/builtin/internal/erc721-test-utils.js +4 -3
  60. package/lib/eth/builtin/internal/erc721-test-utils.js.map +1 -1
  61. package/lib/eth/builtin/internal/weth9-processor.d.ts +2 -4
  62. package/lib/eth/builtin/internal/weth9-processor.js +2 -2
  63. package/lib/eth/builtin/internal/weth9-processor.js.map +1 -1
  64. package/lib/eth/builtin/internal/weth9-test-utils.js +5 -4
  65. package/lib/eth/builtin/internal/weth9-test-utils.js.map +1 -1
  66. package/lib/eth/codegen/ethers-sentio.js +11 -4
  67. package/lib/eth/codegen/ethers-sentio.js.map +1 -1
  68. package/lib/eth/codegen/file.js +9 -6
  69. package/lib/eth/codegen/file.js.map +1 -1
  70. package/lib/eth/context.d.ts +6 -5
  71. package/lib/eth/context.js +2 -2
  72. package/lib/eth/context.js.map +1 -1
  73. package/lib/eth/eth-plugin.js +7 -9
  74. package/lib/eth/eth-plugin.js.map +1 -1
  75. package/lib/eth/index.d.ts +3 -1
  76. package/lib/eth/index.js +3 -1
  77. package/lib/eth/index.js.map +1 -1
  78. package/lib/eth/provider.d.ts +5 -5
  79. package/lib/eth/provider.js +12 -14
  80. package/lib/eth/provider.js.map +1 -1
  81. package/lib/eth/provider.test.js.map +1 -1
  82. package/lib/solana/solana-context.d.ts +4 -3
  83. package/lib/solana/solana-context.js +3 -2
  84. package/lib/solana/solana-context.js.map +1 -1
  85. package/lib/solana/solana-options.d.ts +2 -1
  86. package/lib/solana/solana-options.js.map +1 -1
  87. package/lib/solana/solana-processor.d.ts +2 -1
  88. package/lib/solana/solana-processor.js +2 -2
  89. package/lib/solana/solana-processor.js.map +1 -1
  90. package/lib/sui/context.d.ts +2 -2
  91. package/lib/sui/context.js +4 -5
  92. package/lib/sui/context.js.map +1 -1
  93. package/lib/sui/network.d.ts +7 -7
  94. package/lib/sui/network.js +6 -19
  95. package/lib/sui/network.js.map +1 -1
  96. package/lib/sui/sui-plugin.js +1 -2
  97. package/lib/sui/sui-plugin.js.map +1 -1
  98. package/lib/sui/sui-processor.js +3 -3
  99. package/lib/sui/sui-processor.js.map +1 -1
  100. package/lib/testing/aptos-facet.js +2 -3
  101. package/lib/testing/aptos-facet.js.map +1 -1
  102. package/lib/testing/eth-facet.d.ts +14 -13
  103. package/lib/testing/eth-facet.js +17 -17
  104. package/lib/testing/eth-facet.js.map +1 -1
  105. package/lib/testing/sui-facet.js +2 -3
  106. package/lib/testing/sui-facet.js.map +1 -1
  107. package/lib/utils/dex-price.d.ts +3 -2
  108. package/lib/utils/dex-price.js +3 -2
  109. package/lib/utils/dex-price.js.map +1 -1
  110. package/lib/utils/erc20.test.js.map +1 -1
  111. package/lib/utils/price.d.ts +2 -1
  112. package/lib/utils/price.js.map +1 -1
  113. package/lib/utils/token.d.ts +3 -4
  114. package/lib/utils/token.js +2 -2
  115. package/lib/utils/token.js.map +1 -1
  116. package/package.json +3 -3
  117. package/src/aptos/api.ts +2 -2
  118. package/src/aptos/aptos-processor.ts +3 -3
  119. package/src/aptos/context.ts +6 -6
  120. package/src/aptos/ext/coin.ts +2 -2
  121. package/src/aptos/network.ts +6 -19
  122. package/src/core/base-context.ts +2 -1
  123. package/src/core/chain.ts +113 -96
  124. package/src/core/yaml-contract-config.ts +3 -1
  125. package/src/eth/account-processor.ts +7 -7
  126. package/src/eth/base-processor-template.ts +3 -5
  127. package/src/eth/base-processor.ts +9 -10
  128. package/src/eth/bind-options.ts +4 -6
  129. package/src/eth/binds.ts +5 -7
  130. package/src/eth/builtin/internal/eacaggregatorproxy-processor.ts +5 -5
  131. package/src/eth/builtin/internal/eacaggregatorproxy-test-utils.ts +17 -4
  132. package/src/eth/builtin/internal/erc1155-processor.ts +5 -5
  133. package/src/eth/builtin/internal/erc1155-test-utils.ts +5 -4
  134. package/src/eth/builtin/internal/erc20-processor.ts +5 -5
  135. package/src/eth/builtin/internal/erc20-test-utils.ts +4 -3
  136. package/src/eth/builtin/internal/erc20bytes-processor.ts +5 -5
  137. package/src/eth/builtin/internal/erc20bytes-test-utils.ts +3 -2
  138. package/src/eth/builtin/internal/erc721-processor.ts +5 -5
  139. package/src/eth/builtin/internal/erc721-test-utils.ts +4 -3
  140. package/src/eth/builtin/internal/weth9-processor.ts +5 -5
  141. package/src/eth/builtin/internal/weth9-test-utils.ts +5 -4
  142. package/src/eth/codegen/ethers-sentio.ts +12 -5
  143. package/src/eth/codegen/file.ts +9 -6
  144. package/src/eth/context.ts +8 -7
  145. package/src/eth/eth-plugin.ts +7 -10
  146. package/src/eth/index.ts +4 -1
  147. package/src/eth/provider.ts +13 -15
  148. package/src/solana/solana-context.ts +12 -5
  149. package/src/solana/solana-options.ts +2 -1
  150. package/src/solana/solana-processor.ts +3 -3
  151. package/src/sui/context.ts +7 -7
  152. package/src/sui/network.ts +6 -19
  153. package/src/sui/sui-plugin.ts +1 -2
  154. package/src/sui/sui-processor.ts +3 -3
  155. package/src/testing/aptos-facet.ts +2 -3
  156. package/src/testing/eth-facet.ts +33 -18
  157. package/src/testing/sui-facet.ts +2 -3
  158. package/src/utils/dex-price.ts +5 -4
  159. package/src/utils/price.ts +2 -1
  160. package/src/utils/token.ts +5 -6
@@ -1 +1 @@
1
- {"version":3,"file":"account-processor.js","sourceRoot":"","sources":["../../src/eth/account-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERC20__factory, ERC721__factory } from './builtin/internal/index.js'\nimport { AddressType, EthFetchConfig, ProcessResult } from '@sentio/protos'\n\nimport { PromiseOrVoid, PartiallyOptional } from '../core/index.js'\n\nimport { AccountBindOptions } from './bind-options.js'\nimport { TransferEvent as ERC20TransferEvent, ERC20Processor } from './builtin/erc20.js'\nimport { TransferEvent as ERC721TransferEvent, ERC721Processor } from './builtin/erc721.js'\nimport { AccountContext } from './context.js'\nimport { AddressOrTypeEventFilter, EventsHandler } from './base-processor.js'\nimport { Block, LogDescription } from 'ethers'\nimport { AccountProcessorState } from './account-processor-state.js'\nimport { formatEthData } from './eth.js'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\n\nconst ERC20_INTERFACE = ERC20__factory.createInterface()\nconst ERC721_INTERFACE = ERC721__factory.createInterface()\n\nexport class AccountProcessor {\n config: AccountBindOptions\n eventHandlers: EventsHandler[] = []\n\n static bind(config: PartiallyOptional<AccountBindOptions, 'network'>): AccountProcessor {\n const processor = new AccountProcessor(config)\n AccountProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n protected constructor(config: PartiallyOptional<AccountBindOptions, 'network'>) {\n this.config = {\n ...config,\n network: getNetworkFromCtxOrNetworkish(config.network),\n }\n }\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n /**\n * Register custom handler function to process erc20 transfer event to this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n * @param fetchConfig\n */\n onERC20TransferIn(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC20(\n handler,\n tokensAddresses,\n (address: string) => ERC721Processor.filters.Transfer(null, this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process erc20 transfer event from this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n * @param fetchConfig\n */\n onERC20TransferOut(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC20(\n handler,\n tokensAddresses,\n (address: string) => ERC20Processor.filters.Transfer(this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process erc20 mint for this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n * @param fetchConfig\n */\n onERC20Minted(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC20(\n handler,\n tokensAddresses,\n (address: string) =>\n ERC20Processor.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address),\n fetchConfig\n )\n }\n\n private onERC20(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC(handler, tokensAddresses, defaultFilter, AddressType.ERC20, fetchConfig)\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event to this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n * @param fetchConfig\n */\n onERC721TransferIn(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC721(\n handler,\n collections,\n (address: string) => ERC721Processor.filters.Transfer(null, this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event from this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n * @param fetchConfig\n */\n onERC721TransferOut(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC721(\n handler,\n collections,\n (address: string) => ERC721Processor.filters.Transfer(this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process ERC721 mint for this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n * @param fetchConfig\n */\n onERC721Minted(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC721(\n handler,\n collections,\n (address: string) =>\n ERC721Processor.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address),\n fetchConfig\n )\n }\n\n private onERC721(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC(handler, collections, defaultFilter, AddressType.ERC721, fetchConfig)\n }\n\n private onERC(\n handler: (event: any, ctx: AccountContext) => PromiseOrVoid,\n contractAddresses: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n addressType: AddressType,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n const filters = []\n for (const token of contractAddresses) {\n const filter = defaultFilter(this.config.address)\n filter.address = token\n filters.push(filter)\n }\n if (!filters.length) {\n const filter = defaultFilter(this.config.address)\n filter.address = undefined\n filter.addressType = addressType\n filters.push(filter)\n }\n return this.onEvent(handler, filters, fetchConfig)\n }\n\n protected onEvent(\n handler: (event: LogDescription, ctx: AccountContext) => PromiseOrVoid,\n filter: AddressOrTypeEventFilter | AddressOrTypeEventFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n const chainId = this.getChainId()\n\n let _filters: AddressOrTypeEventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // let hasVaildConfig = false\n // for (const filter of _filters) {\n // if (filter.address) {\n // hasVaildConfig = true\n // break\n // }\n // if (filter.topics && filter.topics.length) {\n // hasVaildConfig = true\n // break\n // }\n // }\n //\n // if (!hasVaildConfig) {\n // throw Error('no valid config has been found for this account')\n // }\n\n const config = this.config\n\n this.eventHandlers.push({\n filters: _filters,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data) {\n const { log, block, transaction, transactionReceipt } = formatEthData(data)\n\n // const log = data.log as { topics: Array<string>; data: string }\n const ctx = new AccountContext(\n chainId,\n config.address,\n data.timestamp,\n data.block as Block,\n log,\n undefined,\n transaction,\n transactionReceipt\n )\n const logParam = log as any as { topics: Array<string>; data: string }\n const parsed = ERC20_INTERFACE.parseLog(logParam)\n if (parsed) {\n await handler(parsed, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n\n return this\n }\n}\n"]}
1
+ {"version":3,"file":"account-processor.js","sourceRoot":"","sources":["../../src/eth/account-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { ERC20__factory, ERC721__factory } from './builtin/internal/index.js'\nimport { AddressType, EthFetchConfig, ProcessResult } from '@sentio/protos'\n\nimport { PartiallyOptional, PromiseOrVoid } from '../core/index.js'\n\nimport { AccountBindOptions } from './bind-options.js'\nimport { ERC20Processor, TransferEvent as ERC20TransferEvent } from './builtin/erc20.js'\nimport { ERC721Processor, TransferEvent as ERC721TransferEvent } from './builtin/erc721.js'\nimport { AccountContext } from './context.js'\nimport { AddressOrTypeEventFilter, EventsHandler } from './base-processor.js'\nimport { Block, LogDescription } from 'ethers'\nimport { AccountProcessorState } from './account-processor-state.js'\nimport { formatEthData } from './eth.js'\nimport { EthChainId } from '../core/chain.js'\n\nconst ERC20_INTERFACE = ERC20__factory.createInterface()\nconst ERC721_INTERFACE = ERC721__factory.createInterface()\n\nexport class AccountProcessor {\n config: AccountBindOptions\n eventHandlers: EventsHandler[] = []\n\n static bind(config: PartiallyOptional<AccountBindOptions, 'network'>): AccountProcessor {\n const processor = new AccountProcessor(config)\n AccountProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n protected constructor(config: PartiallyOptional<AccountBindOptions, 'network'>) {\n this.config = {\n ...config,\n network: config.network || EthChainId.ETHEREUM,\n }\n }\n\n public getChainId(): EthChainId {\n return this.config.network\n }\n\n /**\n * Register custom handler function to process erc20 transfer event to this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n * @param fetchConfig\n */\n onERC20TransferIn(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC20(\n handler,\n tokensAddresses,\n (address: string) => ERC721Processor.filters.Transfer(null, this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process erc20 transfer event from this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n * @param fetchConfig\n */\n onERC20TransferOut(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC20(\n handler,\n tokensAddresses,\n (address: string) => ERC20Processor.filters.Transfer(this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process erc20 mint for this account\n * @param handler custom handler function\n * @param tokensAddresses all the erc20 token address to watch\n * @param fetchConfig\n */\n onERC20Minted(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC20(\n handler,\n tokensAddresses,\n (address: string) =>\n ERC20Processor.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address),\n fetchConfig\n )\n }\n\n private onERC20(\n handler: (event: ERC20TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n tokensAddresses: string[] = [],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC(handler, tokensAddresses, defaultFilter, AddressType.ERC20, fetchConfig)\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event to this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n * @param fetchConfig\n */\n onERC721TransferIn(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC721(\n handler,\n collections,\n (address: string) => ERC721Processor.filters.Transfer(null, this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process ERC721 transfer event from this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n * @param fetchConfig\n */\n onERC721TransferOut(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC721(\n handler,\n collections,\n (address: string) => ERC721Processor.filters.Transfer(this.config.address),\n fetchConfig\n )\n }\n\n /**\n * Register custom handler function to process ERC721 mint for this account\n * @param handler custom handler function\n * @param collections all the ERC721 token address to watch, if not provided then watch all ERC721\n * @param fetchConfig\n */\n onERC721Minted(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[] = [],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC721(\n handler,\n collections,\n (address: string) =>\n ERC721Processor.filters.Transfer('0x0000000000000000000000000000000000000000', this.config.address),\n fetchConfig\n )\n }\n\n private onERC721(\n handler: (event: ERC721TransferEvent, ctx: AccountContext) => PromiseOrVoid,\n collections: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n return this.onERC(handler, collections, defaultFilter, AddressType.ERC721, fetchConfig)\n }\n\n private onERC(\n handler: (event: any, ctx: AccountContext) => PromiseOrVoid,\n contractAddresses: string[],\n defaultFilter: (address: string) => AddressOrTypeEventFilter,\n addressType: AddressType,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n const filters = []\n for (const token of contractAddresses) {\n const filter = defaultFilter(this.config.address)\n filter.address = token\n filters.push(filter)\n }\n if (!filters.length) {\n const filter = defaultFilter(this.config.address)\n filter.address = undefined\n filter.addressType = addressType\n filters.push(filter)\n }\n return this.onEvent(handler, filters, fetchConfig)\n }\n\n protected onEvent(\n handler: (event: LogDescription, ctx: AccountContext) => PromiseOrVoid,\n filter: AddressOrTypeEventFilter | AddressOrTypeEventFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n const chainId = this.getChainId()\n\n let _filters: AddressOrTypeEventFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // let hasVaildConfig = false\n // for (const filter of _filters) {\n // if (filter.address) {\n // hasVaildConfig = true\n // break\n // }\n // if (filter.topics && filter.topics.length) {\n // hasVaildConfig = true\n // break\n // }\n // }\n //\n // if (!hasVaildConfig) {\n // throw Error('no valid config has been found for this account')\n // }\n\n const config = this.config\n\n this.eventHandlers.push({\n filters: _filters,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data) {\n const { log, block, transaction, transactionReceipt } = formatEthData(data)\n\n // const log = data.log as { topics: Array<string>; data: string }\n const ctx = new AccountContext(\n chainId,\n config.address,\n data.timestamp,\n data.block as Block,\n log,\n undefined,\n transaction,\n transactionReceipt\n )\n const logParam = log as any as { topics: Array<string>; data: string }\n const parsed = ERC20_INTERFACE.parseLog(logParam)\n if (parsed) {\n await handler(parsed, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n\n return this\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BoundContractView, ContractContext, ContractView } from './context.js';
1
+ import { BoundContractView, ContractContext, ContractView, EthContext } from './context.js';
2
2
  import { BaseContract } from 'ethers';
3
3
  import { BaseProcessor } from './base-processor.js';
4
4
  import { BindOptions } from './bind-options.js';
@@ -8,7 +8,6 @@ import { ListStateStorage } from '@sentio/runtime';
8
8
  import { BlockParams } from 'ethers/providers';
9
9
  import { DeferredTopicFilter } from 'ethers/contract';
10
10
  import { TypedEvent, TypedCallTrace } from './eth.js';
11
- import { BaseContext } from '../core/index.js';
12
11
  export declare class ProcessorTemplateProcessorState extends ListStateStorage<BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>> {
13
12
  static INSTANCE: ProcessorTemplateProcessorState;
14
13
  }
@@ -40,7 +39,7 @@ export declare abstract class BaseProcessorTemplate<TContract extends BaseContra
40
39
  * @param options
41
40
  * @param ctx
42
41
  */
43
- bind(options: BindOptions, ctx: BaseContext): void;
42
+ bind(options: BindOptions, ctx: EthContext): void;
44
43
  onEvent(handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, filter: DeferredTopicFilter | DeferredTopicFilter[], fetchConfig?: Partial<EthFetchConfig>): this;
45
44
  onBlockInterval(handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number, fetchConfig?: EthFetchConfig): this;
46
45
  onTimeInterval(handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillBlockInterval?: number, fetchConfig?: EthFetchConfig): this;
@@ -1,7 +1,6 @@
1
1
  import { getOptionsSignature } from './bind-options.js';
2
2
  import { EthFetchConfig } from '@sentio/protos';
3
3
  import { ListStateStorage } from '@sentio/runtime';
4
- import { getNetworkFromCtxOrNetworkish } from './provider.js';
5
4
  class ProcessorTemplateProcessorState extends ListStateStorage {
6
5
  static INSTANCE = new ProcessorTemplateProcessorState();
7
6
  }
@@ -53,7 +52,7 @@ export class BaseProcessorTemplate {
53
52
  contract: {
54
53
  address: options.address,
55
54
  name: options.name || '',
56
- chainId: getNetworkFromCtxOrNetworkish(options.network).chainId.toString(),
55
+ chainId: options.network,
57
56
  abi: '',
58
57
  },
59
58
  startBlock: 0n,
@@ -1 +1 @@
1
- {"version":3,"file":"base-processor-template.js","sourceRoot":"","sources":["../../src/eth/base-processor-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundContractView, ContractContext, ContractView } from './context.js'\nimport { BaseContract } from 'ethers'\nimport { BaseProcessor } from './base-processor.js'\nimport { BindOptions, getOptionsSignature } from './bind-options.js'\nimport { EthFetchConfig, HandleInterval, TemplateInstance } from '@sentio/protos'\nimport { PromiseOrVoid } from '../core/promises.js'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { BlockParams } from 'ethers/providers'\nimport { DeferredTopicFilter } from 'ethers/contract'\nimport { TypedEvent, TypedCallTrace } from './eth.js'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\nimport { BaseContext } from '../core/index.js'\n\nexport class ProcessorTemplateProcessorState extends ListStateStorage<\n BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>\n> {\n static INSTANCE = new ProcessorTemplateProcessorState()\n}\n\nexport class TemplateInstanceState extends ListStateStorage<TemplateInstance> {\n static INSTANCE = new TemplateInstanceState()\n}\n\nexport abstract class BaseProcessorTemplate<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n id: number\n binds = new Set<string>()\n blockHandlers: {\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n fetchConfig?: EthFetchConfig\n }[] = []\n traceHandlers: {\n signature: string\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n fetchConfig?: EthFetchConfig\n }[] = []\n eventHandlers: {\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n filter: DeferredTopicFilter | DeferredTopicFilter[]\n fetchConfig?: EthFetchConfig\n }[] = []\n\n constructor() {\n this.id = ProcessorTemplateProcessorState.INSTANCE.getValues().length\n ProcessorTemplateProcessorState.INSTANCE.addValue(this)\n }\n\n /**\n * Bind template using {@param options}, using {@param ctx}'s network value if not provided in the option\n * @param options\n * @param ctx\n */\n public bind(options: BindOptions, ctx: BaseContext): void {\n if (!options.network) {\n options.network = ctx.getChainId()\n }\n const sig = getOptionsSignature({\n address: options.address,\n network: options.network,\n })\n if (this.binds.has(sig)) {\n console.log(`Same address can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.binds.add(sig)\n\n const processor = this.bindInternal(options)\n\n for (const eh of this.eventHandlers) {\n processor.onEvent(eh.handler, eh.filter, eh.fetchConfig)\n }\n for (const th of this.traceHandlers) {\n processor.onTrace(th.signature, th.handler, th.fetchConfig)\n }\n for (const bh of this.blockHandlers) {\n processor.onInterval(bh.handler, bh.timeIntervalInMinutes, bh.blockInterval, bh.fetchConfig)\n }\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n address: options.address,\n name: options.name || '',\n chainId: getNetworkFromCtxOrNetworkish(options.network).chainId.toString(),\n abi: '',\n },\n startBlock: 0n,\n endBlock: 0n,\n }\n if (options.startBlock) {\n instance.startBlock = BigInt(options.startBlock)\n }\n if (options.endBlock) {\n instance.endBlock = BigInt(options.endBlock)\n }\n TemplateInstanceState.INSTANCE.addValue(instance)\n ctx._res.states.configUpdated = true\n }\n\n public onEvent(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: DeferredTopicFilter | DeferredTopicFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n this.eventHandlers.push({\n handler: handler,\n filter: filter,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 1000,\n backfillBlockInterval = 4000,\n fetchConfig?: EthFetchConfig\n ) {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n },\n fetchConfig\n )\n }\n\n public onTimeInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillBlockInterval = 240,\n fetchConfig?: EthFetchConfig\n ) {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillBlockInterval },\n undefined,\n fetchConfig\n )\n }\n\n public onInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined,\n fetchConfig: EthFetchConfig | undefined\n ) {\n this.blockHandlers.push({ handler, timeIntervalInMinutes: timeInterval, blockInterval, fetchConfig })\n return this\n }\n\n public onTrace(\n signature: string,\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n this.traceHandlers.push({ signature, handler, fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}) })\n return this\n }\n\n protected abstract bindInternal(options: BindOptions): BaseProcessor<TContract, TBoundContractView>\n}\n"]}
1
+ {"version":3,"file":"base-processor-template.js","sourceRoot":"","sources":["../../src/eth/base-processor-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundContractView, ContractContext, ContractView, EthContext } from './context.js'\nimport { BaseContract } from 'ethers'\nimport { BaseProcessor } from './base-processor.js'\nimport { BindOptions, getOptionsSignature } from './bind-options.js'\nimport { EthFetchConfig, HandleInterval, TemplateInstance } from '@sentio/protos'\nimport { PromiseOrVoid } from '../core/promises.js'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { BlockParams } from 'ethers/providers'\nimport { DeferredTopicFilter } from 'ethers/contract'\nimport { TypedEvent, TypedCallTrace } from './eth.js'\n\nexport class ProcessorTemplateProcessorState extends ListStateStorage<\n BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>\n> {\n static INSTANCE = new ProcessorTemplateProcessorState()\n}\n\nexport class TemplateInstanceState extends ListStateStorage<TemplateInstance> {\n static INSTANCE = new TemplateInstanceState()\n}\n\nexport abstract class BaseProcessorTemplate<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n id: number\n binds = new Set<string>()\n blockHandlers: {\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n fetchConfig?: EthFetchConfig\n }[] = []\n traceHandlers: {\n signature: string\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n fetchConfig?: EthFetchConfig\n }[] = []\n eventHandlers: {\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid\n filter: DeferredTopicFilter | DeferredTopicFilter[]\n fetchConfig?: EthFetchConfig\n }[] = []\n\n constructor() {\n this.id = ProcessorTemplateProcessorState.INSTANCE.getValues().length\n ProcessorTemplateProcessorState.INSTANCE.addValue(this)\n }\n\n /**\n * Bind template using {@param options}, using {@param ctx}'s network value if not provided in the option\n * @param options\n * @param ctx\n */\n public bind(options: BindOptions, ctx: EthContext): void {\n if (!options.network) {\n options.network = ctx.getChainId()\n }\n const sig = getOptionsSignature({\n address: options.address,\n network: options.network,\n })\n if (this.binds.has(sig)) {\n console.log(`Same address can be bind to one template only once, ignore duplicate bind: ${sig}`)\n return\n }\n this.binds.add(sig)\n\n const processor = this.bindInternal(options)\n\n for (const eh of this.eventHandlers) {\n processor.onEvent(eh.handler, eh.filter, eh.fetchConfig)\n }\n for (const th of this.traceHandlers) {\n processor.onTrace(th.signature, th.handler, th.fetchConfig)\n }\n for (const bh of this.blockHandlers) {\n processor.onInterval(bh.handler, bh.timeIntervalInMinutes, bh.blockInterval, bh.fetchConfig)\n }\n\n const instance: TemplateInstance = {\n templateId: this.id,\n contract: {\n address: options.address,\n name: options.name || '',\n chainId: options.network,\n abi: '',\n },\n startBlock: 0n,\n endBlock: 0n,\n }\n if (options.startBlock) {\n instance.startBlock = BigInt(options.startBlock)\n }\n if (options.endBlock) {\n instance.endBlock = BigInt(options.endBlock)\n }\n TemplateInstanceState.INSTANCE.addValue(instance)\n ctx._res.states.configUpdated = true\n }\n\n public onEvent(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: DeferredTopicFilter | DeferredTopicFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n this.eventHandlers.push({\n handler: handler,\n filter: filter,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 1000,\n backfillBlockInterval = 4000,\n fetchConfig?: EthFetchConfig\n ) {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n },\n fetchConfig\n )\n }\n\n public onTimeInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillBlockInterval = 240,\n fetchConfig?: EthFetchConfig\n ) {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillBlockInterval },\n undefined,\n fetchConfig\n )\n }\n\n public onInterval(\n handler: (block: BlockParams, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined,\n fetchConfig: EthFetchConfig | undefined\n ) {\n this.blockHandlers.push({ handler, timeIntervalInMinutes: timeInterval, blockInterval, fetchConfig })\n return this\n }\n\n public onTrace(\n signature: string,\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ) {\n this.traceHandlers.push({ signature, handler, fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}) })\n return this\n }\n\n protected abstract bindInternal(options: BindOptions): BaseProcessor<TContract, TBoundContractView>\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers';
2
- import { Network } from 'ethers/providers';
3
2
  import { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js';
4
3
  import { AddressType, Data_EthBlock, Data_EthLog, Data_EthTrace, Data_EthTransaction, EthFetchConfig, HandleInterval, ProcessResult } from '@sentio/protos';
5
4
  import { BindOptions } from './bind-options.js';
6
5
  import { PromiseOrVoid } from '../core/promises.js';
7
- import { TypedEvent, TypedCallTrace, RichBlock } from './eth.js';
6
+ import { RichBlock, TypedCallTrace, TypedEvent } from './eth.js';
8
7
  import { ListStateStorage } from '@sentio/runtime';
8
+ import { EthChainId } from '../core/chain.js';
9
9
  export interface AddressOrTypeEventFilter extends DeferredTopicFilter {
10
10
  addressType?: AddressType;
11
11
  address?: string;
@@ -32,7 +32,7 @@ export declare class TransactionHandler {
32
32
  }
33
33
  declare class BindInternalOptions {
34
34
  address: string;
35
- network: Network;
35
+ network: EthChainId;
36
36
  name: string;
37
37
  startBlock: bigint;
38
38
  endBlock?: bigint;
@@ -51,7 +51,7 @@ export declare class GlobalProcessor {
51
51
  constructor(config: Omit<BindOptions, 'address'>);
52
52
  onBlockInterval(handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number, fetchConfig?: Partial<EthFetchConfig>): this;
53
53
  onTimeInterval(handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number, fetchConfig?: Partial<EthFetchConfig>): this;
54
- getChainId(): number;
54
+ getChainId(): EthChainId;
55
55
  onInterval(handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid, timeInterval: HandleInterval | undefined, blockInterval: HandleInterval | undefined, fetchConfig: Partial<EthFetchConfig> | undefined): this;
56
56
  onTransaction(handler: (transaction: TransactionResponseParams, ctx: GlobalContext) => PromiseOrVoid, fetchConfig?: Partial<EthFetchConfig>): this;
57
57
  }
@@ -62,7 +62,7 @@ export declare abstract class BaseProcessor<TContract extends BaseContract, TBou
62
62
  config: BindInternalOptions;
63
63
  constructor(config: BindOptions);
64
64
  protected abstract CreateBoundContractView(): TBoundContractView;
65
- getChainId(): number;
65
+ getChainId(): EthChainId;
66
66
  onEvent(handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, filter: DeferredTopicFilter | DeferredTopicFilter[], fetchConfig?: Partial<EthFetchConfig>): this;
67
67
  onBlockInterval(handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, blockInterval?: number, backfillBlockInterval?: number, fetchConfig?: Partial<EthFetchConfig>): this;
68
68
  onTimeInterval(handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid, timeIntervalInMinutes?: number, backfillTimeIntervalInMinutes?: number, fetchConfig?: Partial<EthFetchConfig>): this;
@@ -2,9 +2,9 @@ import { ContractContext, GlobalContext } from './context.js';
2
2
  import { EthFetchConfig, ProcessResult, } from '@sentio/protos';
3
3
  import { ServerError, Status } from 'nice-grpc';
4
4
  import { fixEmptyKey, formatEthData } from './eth.js';
5
- import { getNetworkFromCtxOrNetworkish } from './provider.js';
6
5
  import sha3 from 'js-sha3';
7
6
  import { ListStateStorage } from '@sentio/runtime';
7
+ import { EthChainId } from '../core/chain.js';
8
8
  export class EventsHandler {
9
9
  filters;
10
10
  handler;
@@ -50,7 +50,7 @@ export class GlobalProcessor {
50
50
  this.config = {
51
51
  address: '*',
52
52
  name: config.name || 'Global',
53
- network: getNetworkFromCtxOrNetworkish(config.network),
53
+ network: config.network || EthChainId.ETHEREUM,
54
54
  startBlock: 0n,
55
55
  };
56
56
  if (config.startBlock) {
@@ -70,7 +70,7 @@ export class GlobalProcessor {
70
70
  return this.onInterval(handler, { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes }, undefined, fetchConfig);
71
71
  }
72
72
  getChainId() {
73
- return Number(this.config.network.chainId);
73
+ return this.config.network;
74
74
  }
75
75
  onInterval(handler, timeInterval, blockInterval, fetchConfig) {
76
76
  const chainId = this.getChainId();
@@ -116,7 +116,7 @@ export class BaseProcessor {
116
116
  this.config = {
117
117
  address: config.address,
118
118
  name: config.name || '',
119
- network: getNetworkFromCtxOrNetworkish(config.network),
119
+ network: config.network || EthChainId.ETHEREUM,
120
120
  startBlock: 0n,
121
121
  baseLabels: config.baseLabels,
122
122
  };
@@ -128,7 +128,7 @@ export class BaseProcessor {
128
128
  }
129
129
  }
130
130
  getChainId() {
131
- return Number(this.config.network.chainId);
131
+ return this.config.network;
132
132
  }
133
133
  onEvent(handler, filter, fetchConfig) {
134
134
  const chainId = this.getChainId();
@@ -1 +1 @@
1
- {"version":3,"file":"base-processor.js","sourceRoot":"","sources":["../../src/eth/base-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers'\nimport { Network } from 'ethers/providers'\n\nimport { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js'\nimport {\n AddressType,\n Data_EthBlock,\n Data_EthLog,\n Data_EthTrace,\n Data_EthTransaction,\n EthFetchConfig,\n HandleInterval,\n ProcessResult,\n} from '@sentio/protos'\nimport { BindOptions } from './bind-options.js'\nimport { PromiseOrVoid } from '../core/promises.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { fixEmptyKey, TypedEvent, TypedCallTrace, formatEthData, RichBlock } from './eth.js'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\nimport sha3 from 'js-sha3'\nimport { ListStateStorage } from '@sentio/runtime'\n\nexport interface AddressOrTypeEventFilter extends DeferredTopicFilter {\n addressType?: AddressType\n address?: string\n}\n\nexport class EventsHandler {\n filters: AddressOrTypeEventFilter[]\n handler: (event: Data_EthLog) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class TraceHandler {\n signatures: string[]\n handler: (trace: Data_EthTrace) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class BlockHandler {\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (block: Data_EthBlock) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class TransactionHandler {\n handler: (block: Data_EthTransaction) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nclass BindInternalOptions {\n address: string\n network: Network\n name: string\n startBlock: bigint\n endBlock?: bigint\n baseLabels?: { [key: string]: string }\n}\n\nexport class GlobalProcessorState extends ListStateStorage<GlobalProcessor> {\n static INSTANCE = new GlobalProcessorState()\n}\n\nexport class GlobalProcessor {\n config: BindInternalOptions\n blockHandlers: BlockHandler[] = []\n transactionHandler: TransactionHandler[] = []\n\n static bind(config: Omit<BindOptions, 'address'>): GlobalProcessor {\n const processor = new GlobalProcessor(config)\n GlobalProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(config: Omit<BindOptions, 'address'>) {\n this.config = {\n address: '*',\n name: config.name || 'Global',\n network: getNetworkFromCtxOrNetworkish(config.network),\n startBlock: 0n,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n public onBlockInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n },\n fetchConfig\n )\n }\n\n public onTimeInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined,\n fetchConfig\n )\n }\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n public onInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined,\n fetchConfig: Partial<EthFetchConfig> | undefined\n ): this {\n const chainId = this.getChainId()\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const ctx = new GlobalContext(chainId, new Date(block.timestamp * 1000), block, undefined, undefined)\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n\n public onTransaction(\n handler: (transaction: TransactionResponseParams, ctx: GlobalContext) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n this.transactionHandler.push({\n handler: async function (data: Data_EthTransaction) {\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n\n if (!transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is empty')\n }\n const ctx = new GlobalContext(chainId, data.timestamp, block, undefined, trace, transaction, transactionReceipt)\n await handler(transaction, ctx)\n return ctx.getProcessResult()\n },\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n}\n\nexport abstract class BaseProcessor<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n blockHandlers: BlockHandler[] = []\n eventHandlers: EventsHandler[] = []\n traceHandlers: TraceHandler[] = []\n\n config: BindInternalOptions\n\n constructor(config: BindOptions) {\n this.config = {\n address: config.address,\n name: config.name || '',\n network: getNetworkFromCtxOrNetworkish(config.network),\n startBlock: 0n,\n baseLabels: config.baseLabels,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n protected abstract CreateBoundContractView(): TBoundContractView\n\n public getChainId(): number {\n return Number(this.config.network.chainId)\n }\n\n public onEvent(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: DeferredTopicFilter | DeferredTopicFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n let _filters: DeferredTopicFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const contractName = this.config.name\n const processor = this\n this.eventHandlers.push({\n filters: _filters,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthLog) {\n const { log, block, transaction, transactionReceipt } = formatEthData(data)\n if (!log) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Log is empty')\n }\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n log,\n undefined,\n transaction,\n transactionReceipt\n )\n const logParam = log as any as { topics: Array<string>; data: string }\n\n const parsed = contractView.rawContract.interface.parseLog(logParam)\n\n if (parsed) {\n const event: TypedEvent = { ...log, name: parsed.name, args: fixEmptyKey(parsed) }\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n },\n fetchConfig\n )\n }\n\n public onTimeInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined,\n fetchConfig\n )\n }\n\n public onInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined,\n fetchConfig: Partial<EthFetchConfig> | undefined\n ): this {\n const chainId = this.getChainId()\n const processor = this\n const contractName = this.config.name\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n new Date(block.timestamp * 1000),\n block,\n undefined,\n undefined\n )\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n\n public onAllEvents(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const _filters: DeferredTopicFilter[] = []\n const tmpContract = this.CreateBoundContractView()\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'event') {\n const filter = tmpContract.rawContract.filters[fragment.format()]\n _filters.push(filter())\n }\n }\n return this.onEvent(\n function (log, ctx) {\n return handler(log, ctx)\n },\n _filters,\n fetchConfig\n )\n }\n\n public onTrace(\n signatures: string | string[],\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n const contractName = this.config.name\n const processor = this\n if (typeof signatures === 'string') {\n signatures = [signatures]\n }\n\n this.traceHandlers.push({\n signatures,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthTrace) {\n const contractView = processor.CreateBoundContractView()\n const contractInterface = contractView.rawContract.interface\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n const sighash = trace?.action.input?.slice(0, 10)\n if (!sighash) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace has no sighash')\n }\n const fragment = contractInterface.getFunction(sighash)\n\n if (!trace || !fragment) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace is null')\n }\n const typedTrace = trace as TypedCallTrace\n typedTrace.name = fragment.name\n typedTrace.functionSignature = fragment.format()\n // const trace = data.trace as Trace\n if (!trace?.action.input) {\n return ProcessResult.fromPartial({})\n }\n const traceData = '0x' + trace.action.input.slice(10)\n try {\n typedTrace.args = contractInterface.getAbiCoder().decode(fragment.inputs, traceData, true)\n } catch (e) {\n if (!trace.error) {\n throw e\n }\n console.error('Failed to decode successful trace', e)\n }\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n undefined,\n trace,\n transaction,\n transactionReceipt\n )\n await handler(typedTrace, ctx)\n return ctx.getProcessResult()\n },\n })\n return this\n }\n\n public onAllTraces(\n handler: (event: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const tmpContract = this.CreateBoundContractView()\n const sighashes = []\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'function') {\n const signature = fragment.format()\n const test = new TextEncoder().encode(signature)\n const sighash = '0x' + sha3.keccak_256(test).substring(0, 8)\n sighashes.push(sighash)\n }\n }\n return this.onTrace(\n sighashes,\n function (trace, ctx) {\n return handler(trace, ctx)\n },\n fetchConfig\n )\n }\n}\n"]}
1
+ {"version":3,"file":"base-processor.js","sourceRoot":"","sources":["../../src/eth/base-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseContract, DeferredTopicFilter, TransactionResponseParams } from 'ethers'\n\nimport { BoundContractView, ContractContext, ContractView, GlobalContext } from './context.js'\nimport {\n AddressType,\n Data_EthBlock,\n Data_EthLog,\n Data_EthTrace,\n Data_EthTransaction,\n EthFetchConfig,\n HandleInterval,\n ProcessResult,\n} from '@sentio/protos'\nimport { BindOptions } from './bind-options.js'\nimport { PromiseOrVoid } from '../core/promises.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { fixEmptyKey, formatEthData, RichBlock, TypedCallTrace, TypedEvent } from './eth.js'\nimport sha3 from 'js-sha3'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { EthChainId } from '../core/chain.js'\n\nexport interface AddressOrTypeEventFilter extends DeferredTopicFilter {\n addressType?: AddressType\n address?: string\n}\n\nexport class EventsHandler {\n filters: AddressOrTypeEventFilter[]\n handler: (event: Data_EthLog) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class TraceHandler {\n signatures: string[]\n handler: (trace: Data_EthTrace) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class BlockHandler {\n blockInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (block: Data_EthBlock) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nexport class TransactionHandler {\n handler: (block: Data_EthTransaction) => Promise<ProcessResult>\n fetchConfig: EthFetchConfig\n}\n\nclass BindInternalOptions {\n address: string\n network: EthChainId\n name: string\n startBlock: bigint\n endBlock?: bigint\n baseLabels?: { [key: string]: string }\n}\n\nexport class GlobalProcessorState extends ListStateStorage<GlobalProcessor> {\n static INSTANCE = new GlobalProcessorState()\n}\n\nexport class GlobalProcessor {\n config: BindInternalOptions\n blockHandlers: BlockHandler[] = []\n transactionHandler: TransactionHandler[] = []\n\n static bind(config: Omit<BindOptions, 'address'>): GlobalProcessor {\n const processor = new GlobalProcessor(config)\n GlobalProcessorState.INSTANCE.addValue(processor)\n return processor\n }\n\n constructor(config: Omit<BindOptions, 'address'>) {\n this.config = {\n address: '*',\n name: config.name || 'Global',\n network: config.network || EthChainId.ETHEREUM,\n startBlock: 0n,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n public onBlockInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n },\n fetchConfig\n )\n }\n\n public onTimeInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined,\n fetchConfig\n )\n }\n\n public getChainId(): EthChainId {\n return this.config.network\n }\n\n public onInterval(\n handler: (block: RichBlock, ctx: GlobalContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined,\n fetchConfig: Partial<EthFetchConfig> | undefined\n ): this {\n const chainId = this.getChainId()\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const ctx = new GlobalContext(chainId, new Date(block.timestamp * 1000), block, undefined, undefined)\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n\n public onTransaction(\n handler: (transaction: TransactionResponseParams, ctx: GlobalContext) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n this.transactionHandler.push({\n handler: async function (data: Data_EthTransaction) {\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n\n if (!transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'transaction is empty')\n }\n const ctx = new GlobalContext(chainId, data.timestamp, block, undefined, trace, transaction, transactionReceipt)\n await handler(transaction, ctx)\n return ctx.getProcessResult()\n },\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n}\n\nexport abstract class BaseProcessor<\n TContract extends BaseContract,\n TBoundContractView extends BoundContractView<TContract, ContractView<TContract>>\n> {\n blockHandlers: BlockHandler[] = []\n eventHandlers: EventsHandler[] = []\n traceHandlers: TraceHandler[] = []\n\n config: BindInternalOptions\n\n constructor(config: BindOptions) {\n this.config = {\n address: config.address,\n name: config.name || '',\n network: config.network || EthChainId.ETHEREUM,\n startBlock: 0n,\n baseLabels: config.baseLabels,\n }\n if (config.startBlock) {\n this.config.startBlock = BigInt(config.startBlock)\n }\n if (config.endBlock) {\n this.config.endBlock = BigInt(config.endBlock)\n }\n }\n\n protected abstract CreateBoundContractView(): TBoundContractView\n\n public getChainId(): EthChainId {\n return this.config.network\n }\n\n public onEvent(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n filter: DeferredTopicFilter | DeferredTopicFilter[],\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n let _filters: DeferredTopicFilter[] = []\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n const contractName = this.config.name\n const processor = this\n this.eventHandlers.push({\n filters: _filters,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthLog) {\n const { log, block, transaction, transactionReceipt } = formatEthData(data)\n if (!log) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Log is empty')\n }\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n log,\n undefined,\n transaction,\n transactionReceipt\n )\n const logParam = log as any as { topics: Array<string>; data: string }\n\n const parsed = contractView.rawContract.interface.parseLog(logParam)\n\n if (parsed) {\n const event: TypedEvent = { ...log, name: parsed.name, args: fixEmptyKey(parsed) }\n await handler(event, ctx)\n return ctx.getProcessResult()\n }\n return ProcessResult.fromPartial({})\n },\n })\n return this\n }\n\n public onBlockInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n blockInterval = 250,\n backfillBlockInterval = 1000,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n undefined,\n {\n recentInterval: blockInterval,\n backfillInterval: backfillBlockInterval,\n },\n fetchConfig\n )\n }\n\n public onTimeInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n return this.onInterval(\n handler,\n { recentInterval: timeIntervalInMinutes, backfillInterval: backfillTimeIntervalInMinutes },\n undefined,\n fetchConfig\n )\n }\n\n public onInterval(\n handler: (block: RichBlock, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n blockInterval: HandleInterval | undefined,\n fetchConfig: Partial<EthFetchConfig> | undefined\n ): this {\n const chainId = this.getChainId()\n const processor = this\n const contractName = this.config.name\n\n this.blockHandlers.push({\n handler: async function (data: Data_EthBlock) {\n const { block } = formatEthData(data)\n\n if (!block) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Block is empty')\n }\n\n const contractView = processor.CreateBoundContractView()\n\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n new Date(block.timestamp * 1000),\n block,\n undefined,\n undefined\n )\n await handler(block, ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n blockInterval: blockInterval,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n })\n return this\n }\n\n public onAllEvents(\n handler: (event: TypedEvent, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const _filters: DeferredTopicFilter[] = []\n const tmpContract = this.CreateBoundContractView()\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'event') {\n const filter = tmpContract.rawContract.filters[fragment.format()]\n _filters.push(filter())\n }\n }\n return this.onEvent(\n function (log, ctx) {\n return handler(log, ctx)\n },\n _filters,\n fetchConfig\n )\n }\n\n public onTrace(\n signatures: string | string[],\n handler: (trace: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const chainId = this.getChainId()\n const contractName = this.config.name\n const processor = this\n if (typeof signatures === 'string') {\n signatures = [signatures]\n }\n\n this.traceHandlers.push({\n signatures,\n fetchConfig: EthFetchConfig.fromPartial(fetchConfig || {}),\n handler: async function (data: Data_EthTrace) {\n const contractView = processor.CreateBoundContractView()\n const contractInterface = contractView.rawContract.interface\n const { trace, block, transaction, transactionReceipt } = formatEthData(data)\n const sighash = trace?.action.input?.slice(0, 10)\n if (!sighash) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace has no sighash')\n }\n const fragment = contractInterface.getFunction(sighash)\n\n if (!trace || !fragment) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'trace is null')\n }\n const typedTrace = trace as TypedCallTrace\n typedTrace.name = fragment.name\n typedTrace.functionSignature = fragment.format()\n // const trace = data.trace as Trace\n if (!trace?.action.input) {\n return ProcessResult.fromPartial({})\n }\n const traceData = '0x' + trace.action.input.slice(10)\n try {\n typedTrace.args = contractInterface.getAbiCoder().decode(fragment.inputs, traceData, true)\n } catch (e) {\n if (!trace.error) {\n throw e\n }\n console.error('Failed to decode successful trace', e)\n }\n const ctx = new ContractContext<TContract, TBoundContractView>(\n contractName,\n contractView,\n chainId,\n data.timestamp,\n block,\n undefined,\n trace,\n transaction,\n transactionReceipt\n )\n await handler(typedTrace, ctx)\n return ctx.getProcessResult()\n },\n })\n return this\n }\n\n public onAllTraces(\n handler: (event: TypedCallTrace, ctx: ContractContext<TContract, TBoundContractView>) => PromiseOrVoid,\n fetchConfig?: Partial<EthFetchConfig>\n ): this {\n const tmpContract = this.CreateBoundContractView()\n const sighashes = []\n\n for (const fragment of tmpContract.rawContract.interface.fragments) {\n if (fragment.type === 'function') {\n const signature = fragment.format()\n const test = new TextEncoder().encode(signature)\n const sighash = '0x' + sha3.keccak_256(test).substring(0, 8)\n sighashes.push(sighash)\n }\n }\n return this.onTrace(\n sighashes,\n function (trace, ctx) {\n return handler(trace, ctx)\n },\n fetchConfig\n )\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { Networkish, Network } from 'ethers/providers';
1
+ import { EthChainId } from '../core/chain.js';
2
2
  export declare class BindOptions {
3
3
  address: string;
4
- network?: Networkish;
4
+ network?: EthChainId;
5
5
  name?: string;
6
6
  startBlock?: bigint | number;
7
7
  endBlock?: bigint | number;
@@ -12,7 +12,7 @@ export declare class BindOptions {
12
12
  export declare function getOptionsSignature(opts: BindOptions): string;
13
13
  export declare class AccountBindOptions {
14
14
  address: string;
15
- network: Network;
15
+ network: EthChainId;
16
16
  startBlock?: bigint | number;
17
17
  baseLabels?: {
18
18
  [key: string]: string;
@@ -1,9 +1,9 @@
1
- import { getNetworkFromCtxOrNetworkish } from './provider.js';
1
+ import { EthChainId } from '../core/chain.js';
2
2
  export class BindOptions {
3
3
  // Contract address
4
4
  address;
5
5
  // Optional, if not set, then use eth mainnet
6
- network = 1;
6
+ network = EthChainId.ETHEREUM;
7
7
  // Optional, override default contract name
8
8
  name;
9
9
  startBlock;
@@ -13,8 +13,7 @@ export class BindOptions {
13
13
  export function getOptionsSignature(opts) {
14
14
  const sig = [opts.address];
15
15
  if (opts.network) {
16
- const n = getNetworkFromCtxOrNetworkish(opts.network);
17
- sig.push(n.chainId.toString());
16
+ sig.push(opts.network);
18
17
  }
19
18
  if (opts.name) {
20
19
  sig.push(opts.name);
@@ -1 +1 @@
1
- {"version":3,"file":"bind-options.js","sourceRoot":"","sources":["../../src/eth/bind-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AAE7D,MAAM,OAAO,WAAW;IACtB,mBAAmB;IACnB,OAAO,CAAQ;IACf,6CAA6C;IAC7C,OAAO,GAAgB,CAAC,CAAA;IACxB,2CAA2C;IAC3C,IAAI,CAAS;IACb,UAAU,CAAkB;IAC5B,QAAQ,CAAkB;IAC1B,UAAU,CAA4B;CACvC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1B,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;KAC/B;IACD,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACpB;IACD,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;KACrC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;KACnC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,OAAO,kBAAkB;IAC7B,OAAO,CAAQ;IACf,OAAO,CAAS;IAChB,UAAU,CAAkB;IAC5B,UAAU,CAA4B;CACvC","sourcesContent":["import { Networkish, Network } from 'ethers/providers'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\n\nexport class BindOptions {\n // Contract address\n address: string\n // Optional, if not set, then use eth mainnet\n network?: Networkish = 1\n // Optional, override default contract name\n name?: string\n startBlock?: bigint | number\n endBlock?: bigint | number\n baseLabels?: { [key: string]: string }\n}\n\nexport function getOptionsSignature(opts: BindOptions): string {\n const sig = [opts.address]\n if (opts.network) {\n const n = getNetworkFromCtxOrNetworkish(opts.network)\n sig.push(n.chainId.toString())\n }\n if (opts.name) {\n sig.push(opts.name)\n }\n if (opts.startBlock) {\n sig.push(opts.startBlock.toString())\n }\n if (opts.endBlock) {\n sig.push(opts.endBlock.toString())\n }\n return sig.join('_')\n}\n\nexport class AccountBindOptions {\n address: string\n network: Network\n startBlock?: bigint | number\n baseLabels?: { [key: string]: string }\n}\n"]}
1
+ {"version":3,"file":"bind-options.js","sourceRoot":"","sources":["../../src/eth/bind-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,OAAO,WAAW;IACtB,mBAAmB;IACnB,OAAO,CAAQ;IACf,6CAA6C;IAC7C,OAAO,GAAgB,UAAU,CAAC,QAAQ,CAAA;IAC1C,2CAA2C;IAC3C,IAAI,CAAS;IACb,UAAU,CAAkB;IAC5B,QAAQ,CAAkB;IAC1B,UAAU,CAA4B;CACvC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAiB;IACnD,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1B,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACvB;IACD,IAAI,IAAI,CAAC,IAAI,EAAE;QACb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KACpB;IACD,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAA;KACrC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;KACnC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,OAAO,kBAAkB;IAC7B,OAAO,CAAQ;IACf,OAAO,CAAY;IACnB,UAAU,CAAkB;IAC5B,UAAU,CAA4B;CACvC","sourcesContent":["import { EthChainId } from '../core/chain.js'\n\nexport class BindOptions {\n // Contract address\n address: string\n // Optional, if not set, then use eth mainnet\n network?: EthChainId = EthChainId.ETHEREUM\n // Optional, override default contract name\n name?: string\n startBlock?: bigint | number\n endBlock?: bigint | number\n baseLabels?: { [key: string]: string }\n}\n\nexport function getOptionsSignature(opts: BindOptions): string {\n const sig = [opts.address]\n if (opts.network) {\n sig.push(opts.network)\n }\n if (opts.name) {\n sig.push(opts.name)\n }\n if (opts.startBlock) {\n sig.push(opts.startBlock.toString())\n }\n if (opts.endBlock) {\n sig.push(opts.endBlock.toString())\n }\n return sig.join('_')\n}\n\nexport class AccountBindOptions {\n address: string\n network: EthChainId\n startBlock?: bigint | number\n baseLabels?: { [key: string]: string }\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  import { BindOptions } from './bind-options.js';
2
2
  import { ContractView } from './context.js';
3
3
  import { BaseProcessor } from './base-processor.js';
4
- import { Networkish } from 'ethers/providers';
5
4
  import { BaseContract } from 'ethers';
6
5
  import { MapStateStorage } from '@sentio/runtime';
6
+ import { EthChainId } from '../core/chain.js';
7
7
  export declare class ProcessorState extends MapStateStorage<BaseProcessor<any, any>> {
8
8
  static INSTANCE: ProcessorState;
9
9
  }
10
10
  export declare function getProcessor(opts: BindOptions): BaseProcessor<any, any> | undefined;
11
11
  export declare function addProcessor(opts: BindOptions, processor: BaseProcessor<any, any>): void;
12
- export declare function getContractByABI(abiName: string, address: string, network: Networkish): ContractView<BaseContract> | undefined;
13
- export declare function addContractByABI(abiName: string, address: string, network: Networkish, contract: ContractView<BaseContract>): Map<string, ContractView<BaseContract>>;
12
+ export declare function getContractByABI(abiName: string, address: string, network: EthChainId): ContractView<BaseContract> | undefined;
13
+ export declare function addContractByABI(abiName: string, address: string, network: EthChainId, contract: ContractView<BaseContract>): Map<string, ContractView<BaseContract>>;
package/lib/eth/binds.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { getOptionsSignature } from './bind-options.js';
2
2
  import { MapStateStorage } from '@sentio/runtime';
3
- import { getNetworkFromCtxOrNetworkish } from './provider.js';
4
3
  class ProcessorState extends MapStateStorage {
5
4
  static INSTANCE = new ProcessorState();
6
5
  }
@@ -8,8 +7,7 @@ export { ProcessorState };
8
7
  // from abiName_address_chainId => contract wrapper
9
8
  const contracts = new Map();
10
9
  function getKey(abiName, address, network) {
11
- const chainId = getNetworkFromCtxOrNetworkish(network).chainId.toString();
12
- return [abiName, address.toLowerCase(), chainId].join('_');
10
+ return [abiName, address.toLowerCase(), network].join('_');
13
11
  }
14
12
  // Dedup processor that bind multiple times
15
13
  export function getProcessor(opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"binds.js","sourceRoot":"","sources":["../../src/eth/binds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAMpE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAA;AAE7D,MAAa,cAAe,SAAQ,eAAwC;IAC1E,MAAM,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAA;;SAD3B,cAAc;AAI3B,mDAAmD;AACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAA;AAE/D,SAAS,MAAM,CAAC,OAAe,EAAE,OAAe,EAAE,OAAmB;IACnE,MAAM,OAAO,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;IACzE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,SAAkC;IAChF,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAErC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAAe,EAAE,OAAmB;IACpF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7C,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,OAAe,EACf,OAAmB,EACnB,QAAoC;IAEpC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7C,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;AACrC,CAAC","sourcesContent":["import { BindOptions, getOptionsSignature } from './bind-options.js'\nimport { ContractView } from './context.js'\nimport { BaseProcessor } from './base-processor.js'\nimport { Networkish } from 'ethers/providers'\n\nimport { BaseContract } from 'ethers'\nimport { MapStateStorage } from '@sentio/runtime'\nimport { getNetworkFromCtxOrNetworkish } from './provider.js'\n\nexport class ProcessorState extends MapStateStorage<BaseProcessor<any, any>> {\n static INSTANCE = new ProcessorState()\n}\n\n// from abiName_address_chainId => contract wrapper\nconst contracts = new Map<string, ContractView<BaseContract>>()\n\nfunction getKey(abiName: string, address: string, network: Networkish) {\n const chainId = getNetworkFromCtxOrNetworkish(network).chainId.toString()\n return [abiName, address.toLowerCase(), chainId].join('_')\n}\n\n// Dedup processor that bind multiple times\nexport function getProcessor(opts: BindOptions) {\n const sig = getOptionsSignature(opts)\n return ProcessorState.INSTANCE.getValue(sig)\n}\n\nexport function addProcessor(opts: BindOptions, processor: BaseProcessor<any, any>) {\n const sig = getOptionsSignature(opts)\n\n ProcessorState.INSTANCE.getOrSetValue(sig, processor)\n}\n\nexport function getContractByABI(abiName: string, address: string, network: Networkish) {\n const key = getKey(abiName, address, network)\n return contracts.get(key)\n}\n\nexport function addContractByABI(\n abiName: string,\n address: string,\n network: Networkish,\n contract: ContractView<BaseContract>\n) {\n const key = getKey(abiName, address, network)\n return contracts.set(key, contract)\n}\n"]}
1
+ {"version":3,"file":"binds.js","sourceRoot":"","sources":["../../src/eth/binds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAKpE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGjD,MAAa,cAAe,SAAQ,eAAwC;IAC1E,MAAM,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAA;;SAD3B,cAAc;AAI3B,mDAAmD;AACnD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAA;AAE/D,SAAS,MAAM,CAAC,OAAe,EAAE,OAAe,EAAE,OAAmB;IACnE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5D,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,YAAY,CAAC,IAAiB;IAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IACrC,OAAO,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,SAAkC;IAChF,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAErC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,OAAe,EAAE,OAAmB;IACpF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7C,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,OAAe,EACf,OAAmB,EACnB,QAAoC;IAEpC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC7C,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;AACrC,CAAC","sourcesContent":["import { BindOptions, getOptionsSignature } from './bind-options.js'\nimport { ContractView } from './context.js'\nimport { BaseProcessor } from './base-processor.js'\n\nimport { BaseContract } from 'ethers'\nimport { MapStateStorage } from '@sentio/runtime'\nimport { EthChainId } from '../core/chain.js'\n\nexport class ProcessorState extends MapStateStorage<BaseProcessor<any, any>> {\n static INSTANCE = new ProcessorState()\n}\n\n// from abiName_address_chainId => contract wrapper\nconst contracts = new Map<string, ContractView<BaseContract>>()\n\nfunction getKey(abiName: string, address: string, network: EthChainId) {\n return [abiName, address.toLowerCase(), network].join('_')\n}\n\n// Dedup processor that bind multiple times\nexport function getProcessor(opts: BindOptions) {\n const sig = getOptionsSignature(opts)\n return ProcessorState.INSTANCE.getValue(sig)\n}\n\nexport function addProcessor(opts: BindOptions, processor: BaseProcessor<any, any>) {\n const sig = getOptionsSignature(opts)\n\n ProcessorState.INSTANCE.getOrSetValue(sig, processor)\n}\n\nexport function getContractByABI(abiName: string, address: string, network: EthChainId) {\n const key = getKey(abiName, address, network)\n return contracts.get(key)\n}\n\nexport function addContractByABI(\n abiName: string,\n address: string,\n network: EthChainId,\n contract: ContractView<BaseContract>\n) {\n const key = getKey(abiName, address, network)\n return contracts.set(key, contract)\n}\n"]}
@@ -1,7 +1,5 @@
1
1
  import { BigNumberish, Overrides } from "ethers";
2
- import { Networkish } from "ethers/providers";
3
- import { BindOptions, BaseProcessor, BaseProcessorTemplate, BoundContractView, ContractContext, ContractView, TypedCallTrace, EthFetchConfig } from "@sentio/sdk/eth";
4
- import { BaseContext } from "@sentio/sdk";
2
+ import { BindOptions, BaseProcessor, BaseProcessorTemplate, BoundContractView, ContractContext, ContractView, EthChainId, TypedCallTrace, EthContext, EthFetchConfig } from "@sentio/sdk/eth";
5
3
  import { EACAggregatorProxy } from "./index.js";
6
4
  import { AnswerUpdatedEvent, AnswerUpdatedEventFilter, NewRoundEvent, NewRoundEventFilter, OwnershipTransferRequestedEvent, OwnershipTransferRequestedEventFilter, OwnershipTransferredEvent, OwnershipTransferredEventFilter } from "./EACAggregatorProxy.js";
7
5
  export interface AcceptOwnershipCallObject {
@@ -285,4 +283,4 @@ export declare class EACAggregatorProxyProcessorTemplate extends BaseProcessorTe
285
283
  onEventOwnershipTransferRequested(handler: (event: OwnershipTransferRequestedEvent, ctx: EACAggregatorProxyContext) => void, filter?: OwnershipTransferRequestedEventFilter | OwnershipTransferRequestedEventFilter[], fetchConfig?: Partial<EthFetchConfig>): this;
286
284
  onEventOwnershipTransferred(handler: (event: OwnershipTransferredEvent, ctx: EACAggregatorProxyContext) => void, filter?: OwnershipTransferredEventFilter | OwnershipTransferredEventFilter[], fetchConfig?: Partial<EthFetchConfig>): this;
287
285
  }
288
- export declare function getEACAggregatorProxyContract(contextOrNetwork: BaseContext | Networkish, address: string): EACAggregatorProxyContractView;
286
+ export declare function getEACAggregatorProxyContract(contextOrNetwork: EthContext | EthChainId, address: string): EACAggregatorProxyContractView;
@@ -1,4 +1,4 @@
1
- import { addContractByABI, getContractByABI, addProcessor, getProcessor, getProvider, transformEtherError, BaseProcessor, BaseProcessorTemplate, BoundContractView, ContractView, DummyProvider, getNetworkFromCtxOrNetworkish, } from "@sentio/sdk/eth";
1
+ import { addContractByABI, getContractByABI, addProcessor, getProcessor, getProvider, transformEtherError, BaseProcessor, BaseProcessorTemplate, BoundContractView, ContractView, DummyProvider, getEthChainId, } from "@sentio/sdk/eth";
2
2
  import { EACAggregatorProxy__factory } from "./index.js";
3
3
  const templateContract = EACAggregatorProxy__factory.connect("0x0", DummyProvider);
4
4
  export class EACAggregatorProxyContractView extends ContractView {
@@ -459,7 +459,7 @@ export class EACAggregatorProxyProcessorTemplate extends BaseProcessorTemplate {
459
459
  }
460
460
  }
461
461
  export function getEACAggregatorProxyContract(contextOrNetwork, address) {
462
- const network = getNetworkFromCtxOrNetworkish(contextOrNetwork);
462
+ const network = getEthChainId(contextOrNetwork);
463
463
  let contract = getContractByABI("EACAggregatorProxy", address, network);
464
464
  if (!contract) {
465
465
  const rawContract = EACAggregatorProxy__factory.connect(address, getProvider(network));