@sentio/sdk 4.0.0-rc.1 → 4.0.0-rc.11

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 (357) hide show
  1. package/lib/aptos/aptos-plugin.d.ts +1 -1
  2. package/lib/aptos/aptos-plugin.d.ts.map +1 -1
  3. package/lib/aptos/aptos-plugin.js +43 -42
  4. package/lib/aptos/aptos-plugin.js.map +1 -1
  5. package/lib/aptos/aptos-processor.d.ts +1 -1
  6. package/lib/aptos/aptos-processor.d.ts.map +1 -1
  7. package/lib/aptos/aptos-processor.js +25 -25
  8. package/lib/aptos/aptos-processor.js.map +1 -1
  9. package/lib/aptos/aptos-resource-processor-template.d.ts +1 -1
  10. package/lib/aptos/aptos-resource-processor-template.d.ts.map +1 -1
  11. package/lib/aptos/aptos-resource-processor-template.js +10 -5
  12. package/lib/aptos/aptos-resource-processor-template.js.map +1 -1
  13. package/lib/aptos/context.d.ts +1 -1
  14. package/lib/aptos/context.d.ts.map +1 -1
  15. package/lib/aptos/context.js +11 -9
  16. package/lib/aptos/context.js.map +1 -1
  17. package/lib/aptos/data.d.ts +4 -4
  18. package/lib/aptos/data.d.ts.map +1 -1
  19. package/lib/aptos/network.js +1 -1
  20. package/lib/aptos/network.js.map +1 -1
  21. package/lib/core/base-context.d.ts +3 -2
  22. package/lib/core/base-context.d.ts.map +1 -1
  23. package/lib/core/base-context.js +12 -11
  24. package/lib/core/base-context.js.map +1 -1
  25. package/lib/core/core-plugin.d.ts.map +1 -1
  26. package/lib/core/core-plugin.js +6 -4
  27. package/lib/core/core-plugin.js.map +1 -1
  28. package/lib/core/event-logger.d.ts +10 -2
  29. package/lib/core/event-logger.d.ts.map +1 -1
  30. package/lib/core/event-logger.js +42 -27
  31. package/lib/core/event-logger.js.map +1 -1
  32. package/lib/core/exporter.d.ts.map +1 -1
  33. package/lib/core/exporter.js +5 -3
  34. package/lib/core/exporter.js.map +1 -1
  35. package/lib/core/handler-options.d.ts +1 -1
  36. package/lib/core/handler-options.d.ts.map +1 -1
  37. package/lib/core/handler-register.d.ts +1 -1
  38. package/lib/core/handler-register.d.ts.map +1 -1
  39. package/lib/core/handler-register.js +2 -2
  40. package/lib/core/handler-register.js.map +1 -1
  41. package/lib/core/meter.d.ts +4 -3
  42. package/lib/core/meter.d.ts.map +1 -1
  43. package/lib/core/meter.js +5 -4
  44. package/lib/core/meter.js.map +1 -1
  45. package/lib/core/normalization.d.ts +1 -1
  46. package/lib/core/normalization.d.ts.map +1 -1
  47. package/lib/core/normalization.js +41 -31
  48. package/lib/core/normalization.js.map +1 -1
  49. package/lib/core/numberish.d.ts +1 -1
  50. package/lib/core/numberish.d.ts.map +1 -1
  51. package/lib/core/numberish.js +35 -30
  52. package/lib/core/numberish.js.map +1 -1
  53. package/lib/core/partition-handler-manager.d.ts +1 -1
  54. package/lib/core/partition-handler-manager.d.ts.map +1 -1
  55. package/lib/core/partition-handler-manager.js +10 -9
  56. package/lib/core/partition-handler-manager.js.map +1 -1
  57. package/lib/cosmos/context.d.ts.map +1 -1
  58. package/lib/cosmos/context.js +4 -2
  59. package/lib/cosmos/context.js.map +1 -1
  60. package/lib/cosmos/cosmos-plugin.d.ts.map +1 -1
  61. package/lib/cosmos/cosmos-plugin.js +11 -10
  62. package/lib/cosmos/cosmos-plugin.js.map +1 -1
  63. package/lib/cosmos/cosmos-processor.js.map +1 -1
  64. package/lib/eth/abi-decoder/decode-worker.js +2 -2
  65. package/lib/eth/abi-decoder/decode-worker.js.map +1 -1
  66. package/lib/eth/account-processor.d.ts +2 -2
  67. package/lib/eth/account-processor.d.ts.map +1 -1
  68. package/lib/eth/account-processor.js +10 -9
  69. package/lib/eth/account-processor.js.map +1 -1
  70. package/lib/eth/base-processor-template.d.ts +3 -3
  71. package/lib/eth/base-processor-template.d.ts.map +1 -1
  72. package/lib/eth/base-processor-template.js +12 -8
  73. package/lib/eth/base-processor-template.js.map +1 -1
  74. package/lib/eth/base-processor.d.ts +1 -1
  75. package/lib/eth/base-processor.d.ts.map +1 -1
  76. package/lib/eth/base-processor.js +53 -46
  77. package/lib/eth/base-processor.js.map +1 -1
  78. package/lib/eth/builtin/internal/eacaggregatorproxy-processor.d.ts.map +1 -1
  79. package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js +48 -46
  80. package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js.map +1 -1
  81. package/lib/eth/builtin/internal/erc1155-processor.d.ts.map +1 -1
  82. package/lib/eth/builtin/internal/erc1155-processor.js +18 -16
  83. package/lib/eth/builtin/internal/erc1155-processor.js.map +1 -1
  84. package/lib/eth/builtin/internal/erc20-processor.d.ts.map +1 -1
  85. package/lib/eth/builtin/internal/erc20-processor.js +38 -36
  86. package/lib/eth/builtin/internal/erc20-processor.js.map +1 -1
  87. package/lib/eth/builtin/internal/erc20bytes-processor.d.ts.map +1 -1
  88. package/lib/eth/builtin/internal/erc20bytes-processor.js +20 -18
  89. package/lib/eth/builtin/internal/erc20bytes-processor.js.map +1 -1
  90. package/lib/eth/builtin/internal/erc721-processor.d.ts.map +1 -1
  91. package/lib/eth/builtin/internal/erc721-processor.js +30 -28
  92. package/lib/eth/builtin/internal/erc721-processor.js.map +1 -1
  93. package/lib/eth/builtin/internal/weth9-processor.d.ts.map +1 -1
  94. package/lib/eth/builtin/internal/weth9-processor.js +24 -22
  95. package/lib/eth/builtin/internal/weth9-processor.js.map +1 -1
  96. package/lib/eth/codegen/file.d.ts.map +1 -1
  97. package/lib/eth/codegen/file.js +2 -1
  98. package/lib/eth/codegen/file.js.map +1 -1
  99. package/lib/eth/codegen/function-calls.js +1 -1
  100. package/lib/eth/context.d.ts +1 -1
  101. package/lib/eth/context.d.ts.map +1 -1
  102. package/lib/eth/context.js +17 -11
  103. package/lib/eth/context.js.map +1 -1
  104. package/lib/eth/eth-plugin.d.ts.map +1 -1
  105. package/lib/eth/eth-plugin.js +85 -76
  106. package/lib/eth/eth-plugin.js.map +1 -1
  107. package/lib/eth/eth.d.ts +6 -6
  108. package/lib/eth/eth.d.ts.map +1 -1
  109. package/lib/eth/eth.js +39 -26
  110. package/lib/eth/eth.js.map +1 -1
  111. package/lib/eth/generic-processor.js +1 -1
  112. package/lib/eth/generic-processor.js.map +1 -1
  113. package/lib/eth/index.d.ts +2 -2
  114. package/lib/eth/index.d.ts.map +1 -1
  115. package/lib/eth/index.js +1 -2
  116. package/lib/eth/index.js.map +1 -1
  117. package/lib/eth/provider.d.ts +13 -0
  118. package/lib/eth/provider.d.ts.map +1 -0
  119. package/lib/eth/provider.js +164 -0
  120. package/lib/eth/provider.js.map +1 -0
  121. package/lib/fuel/asset-processor.d.ts +2 -2
  122. package/lib/fuel/asset-processor.d.ts.map +1 -1
  123. package/lib/fuel/asset-processor.js +5 -3
  124. package/lib/fuel/asset-processor.js.map +1 -1
  125. package/lib/fuel/context.d.ts.map +1 -1
  126. package/lib/fuel/context.js +4 -2
  127. package/lib/fuel/context.js.map +1 -1
  128. package/lib/fuel/fuel-plugin.d.ts.map +1 -1
  129. package/lib/fuel/fuel-plugin.js +41 -53
  130. package/lib/fuel/fuel-plugin.js.map +1 -1
  131. package/lib/fuel/fuel-processor-template.d.ts.map +1 -1
  132. package/lib/fuel/fuel-processor-template.js +7 -5
  133. package/lib/fuel/fuel-processor-template.js.map +1 -1
  134. package/lib/fuel/fuel-processor.d.ts.map +1 -1
  135. package/lib/fuel/fuel-processor.js +30 -20
  136. package/lib/fuel/fuel-processor.js.map +1 -1
  137. package/lib/fuel/global-processor.d.ts.map +1 -1
  138. package/lib/fuel/global-processor.js +2 -1
  139. package/lib/fuel/global-processor.js.map +1 -1
  140. package/lib/fuel/network.js +5 -5
  141. package/lib/fuel/network.js.map +1 -1
  142. package/lib/fuel/types.d.ts +10 -4
  143. package/lib/fuel/types.d.ts.map +1 -1
  144. package/lib/fuel/types.js.map +1 -1
  145. package/lib/iota/context.d.ts +1 -1
  146. package/lib/iota/context.d.ts.map +1 -1
  147. package/lib/iota/context.js +8 -6
  148. package/lib/iota/context.js.map +1 -1
  149. package/lib/iota/iota-object-processor-template.d.ts +1 -1
  150. package/lib/iota/iota-object-processor-template.d.ts.map +1 -1
  151. package/lib/iota/iota-object-processor-template.js +17 -12
  152. package/lib/iota/iota-object-processor-template.js.map +1 -1
  153. package/lib/iota/iota-object-processor.d.ts +1 -1
  154. package/lib/iota/iota-object-processor.d.ts.map +1 -1
  155. package/lib/iota/iota-object-processor.js +23 -16
  156. package/lib/iota/iota-object-processor.js.map +1 -1
  157. package/lib/iota/iota-plugin-part.d.ts +1 -1
  158. package/lib/iota/iota-plugin-part.d.ts.map +1 -1
  159. package/lib/iota/iota-plugin-part.js +16 -15
  160. package/lib/iota/iota-plugin-part.js.map +1 -1
  161. package/lib/iota/iota-processor.d.ts +1 -1
  162. package/lib/iota/iota-processor.d.ts.map +1 -1
  163. package/lib/iota/iota-processor.js +18 -17
  164. package/lib/iota/iota-processor.js.map +1 -1
  165. package/lib/iota/network.js +6 -6
  166. package/lib/iota/network.js.map +1 -1
  167. package/lib/move/filter.d.ts +1 -1
  168. package/lib/move/filter.d.ts.map +1 -1
  169. package/lib/move/index.d.ts +1 -1
  170. package/lib/move/index.d.ts.map +1 -1
  171. package/lib/move/index.js +0 -1
  172. package/lib/move/index.js.map +1 -1
  173. package/lib/solana/builtin/types.d.ts +4 -4
  174. package/lib/solana/solana-context.d.ts.map +1 -1
  175. package/lib/solana/solana-context.js +4 -3
  176. package/lib/solana/solana-context.js.map +1 -1
  177. package/lib/solana/solana-plugin.d.ts.map +1 -1
  178. package/lib/solana/solana-plugin.js +19 -18
  179. package/lib/solana/solana-plugin.js.map +1 -1
  180. package/lib/solana/solana-processor.d.ts.map +1 -1
  181. package/lib/solana/solana-processor.js +8 -3
  182. package/lib/solana/solana-processor.js.map +1 -1
  183. package/lib/store/cache.d.ts.map +1 -1
  184. package/lib/store/cache.js +22 -17
  185. package/lib/store/cache.js.map +1 -1
  186. package/lib/store/convert.d.ts +1 -1
  187. package/lib/store/convert.d.ts.map +1 -1
  188. package/lib/store/convert.js +67 -104
  189. package/lib/store/convert.js.map +1 -1
  190. package/lib/store/decorators.d.ts +1 -1
  191. package/lib/store/decorators.d.ts.map +1 -1
  192. package/lib/store/decorators.js +3 -1
  193. package/lib/store/decorators.js.map +1 -1
  194. package/lib/store/store.d.ts.map +1 -1
  195. package/lib/store/store.js +24 -16
  196. package/lib/store/store.js.map +1 -1
  197. package/lib/store/types.js +24 -32
  198. package/lib/store/types.js.map +1 -1
  199. package/lib/store/util.d.ts +1 -1
  200. package/lib/store/util.d.ts.map +1 -1
  201. package/lib/store/util.js +13 -17
  202. package/lib/store/util.js.map +1 -1
  203. package/lib/sui/context.d.ts +1 -1
  204. package/lib/sui/context.d.ts.map +1 -1
  205. package/lib/sui/context.js +8 -6
  206. package/lib/sui/context.js.map +1 -1
  207. package/lib/sui/network.d.ts.map +1 -1
  208. package/lib/sui/network.js +11 -6
  209. package/lib/sui/network.js.map +1 -1
  210. package/lib/sui/sui-object-processor-template.d.ts +1 -1
  211. package/lib/sui/sui-object-processor-template.d.ts.map +1 -1
  212. package/lib/sui/sui-object-processor-template.js +17 -12
  213. package/lib/sui/sui-object-processor-template.js.map +1 -1
  214. package/lib/sui/sui-object-processor.d.ts +1 -1
  215. package/lib/sui/sui-object-processor.d.ts.map +1 -1
  216. package/lib/sui/sui-object-processor.js +29 -21
  217. package/lib/sui/sui-object-processor.js.map +1 -1
  218. package/lib/sui/sui-plugin-part.d.ts +1 -1
  219. package/lib/sui/sui-plugin-part.d.ts.map +1 -1
  220. package/lib/sui/sui-plugin-part.js +16 -15
  221. package/lib/sui/sui-plugin-part.js.map +1 -1
  222. package/lib/sui/sui-plugin.d.ts +1 -1
  223. package/lib/sui/sui-plugin.d.ts.map +1 -1
  224. package/lib/sui/sui-plugin.js +35 -34
  225. package/lib/sui/sui-plugin.js.map +1 -1
  226. package/lib/sui/sui-processor.d.ts +1 -1
  227. package/lib/sui/sui-processor.d.ts.map +1 -1
  228. package/lib/sui/sui-processor.js +24 -21
  229. package/lib/sui/sui-processor.js.map +1 -1
  230. package/lib/sui/to-client-types.d.ts +4 -0
  231. package/lib/sui/to-client-types.d.ts.map +1 -0
  232. package/lib/sui/to-client-types.js +69 -0
  233. package/lib/sui/to-client-types.js.map +1 -0
  234. package/lib/testing/aptos-facet.d.ts.map +1 -1
  235. package/lib/testing/aptos-facet.js +18 -11
  236. package/lib/testing/aptos-facet.js.map +1 -1
  237. package/lib/testing/cosmos-facet.d.ts.map +1 -1
  238. package/lib/testing/cosmos-facet.js +10 -6
  239. package/lib/testing/cosmos-facet.js.map +1 -1
  240. package/lib/testing/eth-facet.d.ts +1 -1
  241. package/lib/testing/eth-facet.d.ts.map +1 -1
  242. package/lib/testing/eth-facet.js +34 -18
  243. package/lib/testing/eth-facet.js.map +1 -1
  244. package/lib/testing/fuel-facet.d.ts.map +1 -1
  245. package/lib/testing/fuel-facet.js +28 -18
  246. package/lib/testing/fuel-facet.js.map +1 -1
  247. package/lib/testing/iota-facet.d.ts.map +1 -1
  248. package/lib/testing/iota-facet.js +32 -20
  249. package/lib/testing/iota-facet.js.map +1 -1
  250. package/lib/testing/memory-database.d.ts +11 -3
  251. package/lib/testing/memory-database.d.ts.map +1 -1
  252. package/lib/testing/memory-database.js +84 -71
  253. package/lib/testing/memory-database.js.map +1 -1
  254. package/lib/testing/metric-utils.d.ts +2 -2
  255. package/lib/testing/metric-utils.d.ts.map +1 -1
  256. package/lib/testing/metric-utils.js +13 -12
  257. package/lib/testing/metric-utils.js.map +1 -1
  258. package/lib/testing/solana-facet.d.ts +3 -2
  259. package/lib/testing/solana-facet.d.ts.map +1 -1
  260. package/lib/testing/solana-facet.js +8 -5
  261. package/lib/testing/solana-facet.js.map +1 -1
  262. package/lib/testing/sui-facet.d.ts.map +1 -1
  263. package/lib/testing/sui-facet.js +30 -20
  264. package/lib/testing/sui-facet.js.map +1 -1
  265. package/lib/testing/test-processor-server.d.ts +1452 -16
  266. package/lib/testing/test-processor-server.d.ts.map +1 -1
  267. package/lib/testing/test-processor-server.js +109 -46
  268. package/lib/testing/test-processor-server.js.map +1 -1
  269. package/lib/testing/test-provider.js +1 -1
  270. package/lib/testing/test-provider.js.map +1 -1
  271. package/lib/utils/price.d.ts +1 -1
  272. package/lib/utils/price.d.ts.map +1 -1
  273. package/lib/utils/price.js +19 -12
  274. package/lib/utils/price.js.map +1 -1
  275. package/package.json +5 -7
  276. package/src/aptos/aptos-plugin.ts +105 -91
  277. package/src/aptos/aptos-processor.ts +33 -25
  278. package/src/aptos/aptos-resource-processor-template.ts +15 -6
  279. package/src/aptos/context.ts +11 -10
  280. package/src/aptos/data.ts +4 -4
  281. package/src/aptos/network.ts +1 -1
  282. package/src/core/base-context.ts +19 -12
  283. package/src/core/core-plugin.ts +10 -7
  284. package/src/core/event-logger.ts +63 -35
  285. package/src/core/exporter.ts +5 -4
  286. package/src/core/handler-options.ts +1 -1
  287. package/src/core/handler-register.ts +3 -3
  288. package/src/core/meter.ts +9 -7
  289. package/src/core/normalization.ts +53 -31
  290. package/src/core/numberish.ts +46 -30
  291. package/src/core/partition-handler-manager.ts +13 -11
  292. package/src/cosmos/context.ts +4 -3
  293. package/src/cosmos/cosmos-plugin.ts +19 -15
  294. package/src/cosmos/cosmos-processor.ts +2 -2
  295. package/src/eth/abi-decoder/decode-worker.ts +2 -2
  296. package/src/eth/account-processor.ts +21 -12
  297. package/src/eth/base-processor-template.ts +22 -10
  298. package/src/eth/base-processor.ts +66 -54
  299. package/src/eth/builtin/internal/eacaggregatorproxy-processor.ts +177 -116
  300. package/src/eth/builtin/internal/erc1155-processor.ts +73 -38
  301. package/src/eth/builtin/internal/erc20-processor.ts +152 -91
  302. package/src/eth/builtin/internal/erc20bytes-processor.ts +80 -46
  303. package/src/eth/builtin/internal/erc721-processor.ts +109 -65
  304. package/src/eth/builtin/internal/weth9-processor.ts +95 -56
  305. package/src/eth/codegen/file.ts +2 -1
  306. package/src/eth/codegen/function-calls.ts +1 -1
  307. package/src/eth/context.ts +29 -13
  308. package/src/eth/eth-plugin.ts +137 -127
  309. package/src/eth/eth.ts +46 -32
  310. package/src/eth/generic-processor.ts +1 -1
  311. package/src/eth/index.ts +2 -2
  312. package/src/eth/provider.ts +193 -0
  313. package/src/fuel/asset-processor.ts +16 -8
  314. package/src/fuel/context.ts +4 -3
  315. package/src/fuel/fuel-plugin.ts +71 -73
  316. package/src/fuel/fuel-processor-template.ts +7 -6
  317. package/src/fuel/fuel-processor.ts +35 -23
  318. package/src/fuel/global-processor.ts +3 -3
  319. package/src/fuel/network.ts +5 -5
  320. package/src/fuel/types.ts +10 -4
  321. package/src/iota/context.ts +8 -7
  322. package/src/iota/iota-object-processor-template.ts +25 -15
  323. package/src/iota/iota-object-processor.ts +33 -22
  324. package/src/iota/iota-plugin-part.ts +41 -34
  325. package/src/iota/iota-processor.ts +25 -17
  326. package/src/iota/network.ts +6 -6
  327. package/src/move/filter.ts +1 -1
  328. package/src/move/index.ts +1 -1
  329. package/src/solana/solana-context.ts +4 -3
  330. package/src/solana/solana-plugin.ts +27 -24
  331. package/src/solana/solana-processor.ts +14 -6
  332. package/src/store/cache.ts +22 -18
  333. package/src/store/convert.ts +68 -104
  334. package/src/store/decorators.ts +3 -2
  335. package/src/store/store.ts +30 -22
  336. package/src/store/types.ts +24 -33
  337. package/src/store/util.ts +13 -18
  338. package/src/sui/context.ts +8 -7
  339. package/src/sui/network.ts +12 -7
  340. package/src/sui/sui-object-processor-template.ts +25 -15
  341. package/src/sui/sui-object-processor.ts +50 -28
  342. package/src/sui/sui-plugin-part.ts +41 -34
  343. package/src/sui/sui-plugin.ts +49 -47
  344. package/src/sui/sui-processor.ts +31 -21
  345. package/src/sui/to-client-types.ts +75 -0
  346. package/src/testing/aptos-facet.ts +18 -11
  347. package/src/testing/cosmos-facet.ts +10 -6
  348. package/src/testing/eth-facet.ts +40 -18
  349. package/src/testing/fuel-facet.ts +28 -18
  350. package/src/testing/iota-facet.ts +32 -20
  351. package/src/testing/memory-database.ts +126 -88
  352. package/src/testing/metric-utils.ts +15 -14
  353. package/src/testing/solana-facet.ts +11 -6
  354. package/src/testing/sui-facet.ts +30 -20
  355. package/src/testing/test-processor-server.ts +170 -80
  356. package/src/testing/test-provider.ts +1 -1
  357. package/src/utils/price.ts +20 -13
package/src/eth/eth.ts CHANGED
@@ -23,8 +23,9 @@ import {
23
23
  import type { AccessList } from 'ethers/transaction'
24
24
  import { ContractContext } from './context.js'
25
25
  import { getAddress } from 'ethers/address'
26
- import { getBigInt } from 'ethers/utils'
27
- import { EthCallContext, EthCallParam } from '@sentio/protos'
26
+ import { getBigInt, getNumber } from 'ethers/utils'
27
+ import { type EthCallContext, type EthCallParam, EthCallParamSchema } from '@sentio/protos'
28
+ import { create } from '@bufbuild/protobuf'
28
29
  import { ALL_ADDRESS } from '../core/index.js'
29
30
 
30
31
  export interface IResult {
@@ -126,14 +127,14 @@ class FormattedTransactionReceipt implements TransactionReceiptParams {
126
127
  return this.data.transactionHash
127
128
  }
128
129
  get index(): number {
129
- return this.data.transactionIndex
130
+ return getNumber(this.data.transactionIndex)
130
131
  }
131
132
 
132
133
  get blockHash(): string {
133
134
  return this.data.blockHash
134
135
  }
135
136
  get blockNumber(): number {
136
- return this.data.blockNumber
137
+ return getNumber(this.data.blockNumber)
137
138
  }
138
139
  get logsBloom(): string {
139
140
  return this.data.logsBloom
@@ -178,10 +179,10 @@ class FormattedTransactionReceipt implements TransactionReceiptParams {
178
179
  return this._l1Fee !== undefined ? this._l1Fee : (this._l1Fee = allowNull(getBigInt)(this.data.l1Fee))
179
180
  }
180
181
  get type(): number {
181
- return this.data.type
182
+ return allowNull(getNumber, 0)(this.data.type)
182
183
  }
183
184
  get status(): number | null {
184
- return this.data.status
185
+ return allowNull(getNumber)(this.data.status)
185
186
  }
186
187
  get root(): string | null {
187
188
  return this.data.root
@@ -197,7 +198,7 @@ export class FormattedLog implements LogParams {
197
198
  return this.raw.blockHash
198
199
  }
199
200
  get blockNumber(): number {
200
- return this.raw.blockNumber
201
+ return getNumber(this.raw.blockNumber)
201
202
  }
202
203
  get removed(): boolean {
203
204
  return this.raw.removed
@@ -213,11 +214,14 @@ export class FormattedLog implements LogParams {
213
214
  }
214
215
 
215
216
  get transactionIndex(): number {
216
- return this.raw.transactionIndex
217
+ // Raw RPC logs carry these as hex strings (e.g. "0xf3"); coerce so the value honors the
218
+ // declared `number` type and is valid for the int32 RecordMetaData fields it feeds.
219
+ // (Restores the getNumber coercion that ethers' formatLog applied before #1411.)
220
+ return getNumber(this.raw.transactionIndex)
217
221
  }
218
222
 
219
223
  get index(): number {
220
- return this.raw.logIndex
224
+ return getNumber(this.raw.logIndex)
221
225
  }
222
226
 
223
227
  get data(): string {
@@ -240,11 +244,12 @@ function formatLog(log: any): LogParams {
240
244
  }
241
245
 
242
246
  export function formatEthData(data: {
243
- log?: any
244
- block?: any
245
- trace?: any
246
- transaction?: any
247
- transactionReceipt?: any
247
+ // raw_* JSON payloads sent by the driver
248
+ rawLog?: string
249
+ rawBlock?: string
250
+ rawTrace?: string
251
+ rawTransaction?: string
252
+ rawTransactionReceipt?: string
248
253
  __formattedEthData?: any
249
254
  }) {
250
255
  // Return cached result if it exists
@@ -253,22 +258,29 @@ export function formatEthData(data: {
253
258
  }
254
259
 
255
260
  try {
256
- const log = data.log ? formatLog(data.log) : undefined
257
- if (data.block && !data.block.transactions) {
258
- data.block.transactions = []
261
+ // All Eth* data is delivered as raw_* JSON payloads; parse them here.
262
+ const logObj = data.rawLog ? JSON.parse(data.rawLog) : undefined
263
+ const blockObj = data.rawBlock ? JSON.parse(data.rawBlock) : undefined
264
+ const traceObj = data.rawTrace ? JSON.parse(data.rawTrace) : undefined
265
+ const transactionObj = data.rawTransaction ? JSON.parse(data.rawTransaction) : undefined
266
+ const transactionReceiptObj = data.rawTransactionReceipt ? JSON.parse(data.rawTransactionReceipt) : undefined
267
+
268
+ const log = logObj ? formatLog(logObj) : undefined
269
+ if (blockObj && !blockObj.transactions) {
270
+ blockObj.transactions = []
259
271
  }
260
- const block = data.block ? formatRichBlock(data.block) : undefined
261
- const trace = data.trace ? (data.trace as Trace) : undefined
272
+ const block = blockObj ? formatRichBlock(blockObj) : undefined
273
+ const trace = traceObj ? (traceObj as Trace) : undefined
262
274
  let transaction = undefined
263
- if (data.transaction) {
264
- if (!data.transaction.v) {
265
- data.transaction.v = '0x1c'
266
- data.transaction.r = '0x88ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0'
267
- data.transaction.s = '0x45e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a'
275
+ if (transactionObj) {
276
+ if (!transactionObj.v) {
277
+ transactionObj.v = '0x1c'
278
+ transactionObj.r = '0x88ff6cf0fefd94db46111149ae4bfc179e9b94721fffd821d38d16464b3f71d0'
279
+ transactionObj.s = '0x45e0aff800961cfce805daef7016b9b675c137a6a41a548f7b60a3484c06a33a'
268
280
  }
269
- transaction = formatTransactionResponse(data.transaction)
281
+ transaction = formatTransactionResponse(transactionObj)
270
282
  }
271
- const transactionReceipt = data.transactionReceipt ? formatTransactionReceipt(data.transactionReceipt) : undefined
283
+ const transactionReceipt = transactionReceiptObj ? formatTransactionReceipt(transactionReceiptObj) : undefined
272
284
 
273
285
  const result = {
274
286
  log,
@@ -291,7 +303,7 @@ class FormattedTransactionResponse implements TransactionResponseParams {
291
303
  constructor(readonly raw: any) {}
292
304
 
293
305
  get blockNumber(): number | null {
294
- return this.raw.blockNumber
306
+ return allowNull(getNumber)(this.raw.blockNumber)
295
307
  }
296
308
  _blockHash: string | undefined | null
297
309
  get blockHash(): string | null {
@@ -309,13 +321,15 @@ class FormattedTransactionResponse implements TransactionResponseParams {
309
321
  return this.raw.hash
310
322
  }
311
323
  get index(): number {
312
- return this.raw.transactionIndex
324
+ // transactionIndex is absent for pending/partial txs; default to 0 (matches the prior
325
+ // `this.transaction.index || 0` handling) while still coercing hex strings when present.
326
+ return allowNull(getNumber, 0)(this.raw.transactionIndex)
313
327
  }
314
328
  get type(): number {
315
329
  if (this.raw.type === '0x' || this.raw.type == null) {
316
330
  return 0
317
331
  }
318
- return this.raw.type
332
+ return getNumber(this.raw.type)
319
333
  }
320
334
  _to: string | null
321
335
  get to(): string | null {
@@ -332,7 +346,7 @@ class FormattedTransactionResponse implements TransactionResponseParams {
332
346
  return this._from ?? (this._from = getAddress(this.raw.from))
333
347
  }
334
348
  get nonce(): number {
335
- return this.raw.nonce
349
+ return getNumber(this.raw.nonce)
336
350
  }
337
351
  _gasLimit: bigint
338
352
  get gasLimit(): bigint {
@@ -528,10 +542,10 @@ export function encodeCallData(
528
542
  try {
529
543
  const iface = new Interface([funcABI])
530
544
  const calldata = iface.encodeFunctionData(name, values)
531
- return {
545
+ return create(EthCallParamSchema, {
532
546
  context,
533
547
  calldata
534
- }
548
+ })
535
549
  } catch (e) {
536
550
  const stack = new Error().stack
537
551
  throw transformEtherError(e, undefined, stack)
@@ -2,7 +2,7 @@ import { BaseContract } from 'ethers'
2
2
  import { BoundContractView, ContractView } from './context.js'
3
3
  import { BindOptions } from './bind-options.js'
4
4
  import { BaseProcessor } from './base-processor.js'
5
- import { getProvider } from '@sentio/runtime'
5
+ import { getProvider } from './provider.js'
6
6
  import { addProcessor } from './binds.js'
7
7
 
8
8
  export class GenericProcessor extends BaseProcessor<
package/src/eth/index.ts CHANGED
@@ -3,7 +3,7 @@ export { GenericProcessor } from './generic-processor.js'
3
3
  export { BaseProcessorTemplate } from './base-processor-template.js'
4
4
  export { AccountProcessor } from './account-processor.js'
5
5
 
6
- export { getProvider, DummyProvider } from '@sentio/runtime'
6
+ export { getProvider, DummyProvider } from './provider.js'
7
7
 
8
8
  export { EthContext } from './context.js'
9
9
  export * from './eth.js'
@@ -13,7 +13,7 @@ export { AccountContext, ContractContext, GlobalContext, ContractView, BoundCont
13
13
 
14
14
  export { EthPlugin } from './eth-plugin.js'
15
15
 
16
- export { EthFetchConfig, PreprocessResult } from '@sentio/protos'
16
+ export type { EthFetchConfig, PreprocessResult } from '@sentio/protos'
17
17
 
18
18
  export { EthChainId } from '@sentio/chain'
19
19
 
@@ -0,0 +1,193 @@
1
+ import { JsonRpcProvider, Network } from 'ethers'
2
+
3
+ import PQueue from 'p-queue'
4
+ import { EthChainId } from '@sentio/chain'
5
+ import { LRUCache } from 'lru-cache'
6
+ import { Endpoints, providerMetrics, processMetrics, metricsStorage, GLOBAL_CONFIG } from '@sentio/runtime'
7
+ const { miss_count, hit_count, queue_size } = providerMetrics
8
+
9
+ export const DummyProvider = new JsonRpcProvider('', Network.from(1))
10
+
11
+ const providers = new Map<string, JsonRpcProvider>()
12
+
13
+ // export function getEthChainId(networkish?: EthContext | EthChainId): EthChainId {
14
+ // if (!networkish) {
15
+ // networkish = EthChainId.ETHEREUM
16
+ // }
17
+ // if (networkish instanceof BaseContext) {
18
+ // networkish = networkish.getChainId()
19
+ // }
20
+ // return networkish
21
+ // }
22
+
23
+ export function getProvider(chainId?: EthChainId): JsonRpcProvider {
24
+ // const network = getNetworkFromCtxOrNetworkish(networkish)
25
+ if (!chainId) {
26
+ chainId = EthChainId.ETHEREUM
27
+ }
28
+ const network = Network.from(parseInt(chainId))
29
+ // TODO check if other key needed
30
+
31
+ const address = Endpoints.INSTANCE.getChainRpcUrl(chainId)
32
+ const key = network.chainId.toString() + '-' + address
33
+
34
+ // console.debug(`init provider for ${chainId}, address: ${address}`)
35
+ let provider = providers.get(key)
36
+
37
+ if (provider) {
38
+ return provider
39
+ }
40
+
41
+ if (address === undefined) {
42
+ throw Error(
43
+ 'Provider not found for chain ' +
44
+ network.chainId +
45
+ ', configured chains: ' +
46
+ [...Endpoints.INSTANCE.chainRpc.keys()].join(' ')
47
+ )
48
+ }
49
+ // console.log(
50
+ // `init provider for chain ${network.chainId}, concurrency: ${Endpoints.INSTANCE.concurrency}, batchCount: ${Endpoints.INSTANCE.batchCount}`
51
+ // )
52
+ provider = new QueuedStaticJsonRpcProvider(
53
+ address,
54
+ network,
55
+ Endpoints.INSTANCE.concurrency,
56
+ Endpoints.INSTANCE.batchCount
57
+ )
58
+ providers.set(key, provider)
59
+ return provider
60
+ }
61
+
62
+ function getTag(prefix: string, value: any): string {
63
+ return (
64
+ prefix +
65
+ ':' +
66
+ JSON.stringify(value, (k, v) => {
67
+ if (v == null) {
68
+ return 'null'
69
+ }
70
+ if (typeof v === 'bigint') {
71
+ return `bigint:${v.toString()}`
72
+ }
73
+ if (typeof v === 'string') {
74
+ return v.toLowerCase()
75
+ }
76
+
77
+ // Sort object keys
78
+ if (typeof v === 'object' && !Array.isArray(v)) {
79
+ const keys = Object.keys(v)
80
+ keys.sort()
81
+ return keys.reduce(
82
+ (accum, key) => {
83
+ accum[key] = v[key]
84
+ return accum
85
+ },
86
+ <any>{}
87
+ )
88
+ }
89
+
90
+ return v
91
+ })
92
+ )
93
+ }
94
+
95
+ export class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
96
+ executor: PQueue
97
+ #performCache = new LRUCache<string, Promise<any>>({
98
+ max: 300000, // 300k items
99
+ maxSize: 500 * 1024 * 1024 // 500mb key size for cache
100
+ // ttl: 1000 * 60 * 60, // 1 hour no ttl for better performance
101
+ // sizeCalculation: (value: any) => {
102
+ // assume each item is 1kb for simplicity
103
+ // return 1024
104
+ // }
105
+ })
106
+ #retryCache = new LRUCache<string, number>({
107
+ max: 300000 // 300k items
108
+ })
109
+
110
+ constructor(url: string, network: Network, concurrency: number, batchCount = 1) {
111
+ // TODO re-enable match when possible
112
+ super(url, network, { staticNetwork: network, batchMaxCount: batchCount })
113
+ this.executor = new PQueue({ concurrency: concurrency })
114
+ }
115
+
116
+ async send(method: string, params: Array<any>): Promise<any> {
117
+ if (method !== 'eth_call' || params.length > 2) {
118
+ return await this.executor.add(() => super.send(method, params))
119
+ }
120
+ const tag = getTag(method, params)
121
+ const block = params[params.length - 1]
122
+ let perform = this.#performCache.get(tag)
123
+ if (!perform) {
124
+ miss_count.add(1)
125
+ const handler = metricsStorage.getStore()
126
+ const queued: number = Date.now()
127
+ perform = this.executor.add(() => {
128
+ const started = Date.now()
129
+ processMetrics.processor_rpc_queue_duration.record(started - queued, {
130
+ chain_id: this._network.chainId.toString(),
131
+ handler
132
+ })
133
+
134
+ let success = true
135
+ return super
136
+ .send(method, params)
137
+ .catch((e) => {
138
+ success = false
139
+ throw e
140
+ })
141
+ .finally(() => {
142
+ processMetrics.processor_rpc_duration.record(Date.now() - started, {
143
+ chain_id: this._network.chainId.toString(),
144
+ handler,
145
+ success
146
+ })
147
+ })
148
+ })
149
+
150
+ queue_size.record(this.executor.size)
151
+
152
+ this.#performCache.set(tag, perform, {
153
+ size: tag.length
154
+ })
155
+ // For non latest block call, we cache permanently, otherwise we cache for one minute
156
+ if (block === 'latest') {
157
+ setTimeout(() => {
158
+ if (this.#performCache.get(tag) === perform) {
159
+ this.#performCache.delete(tag)
160
+ }
161
+ }, 60 * 1000)
162
+ }
163
+ } else {
164
+ hit_count.add(1)
165
+ }
166
+
167
+ let result
168
+ try {
169
+ result = await perform
170
+ } catch (e: any) {
171
+ this.#performCache.delete(tag)
172
+ if (e.code === 'TIMEOUT') {
173
+ let retryCount = this.#retryCache.get(tag)
174
+ if (GLOBAL_CONFIG.execution.rpcRetryTimes && retryCount === undefined) {
175
+ retryCount = GLOBAL_CONFIG.execution.rpcRetryTimes
176
+ }
177
+ if (retryCount) {
178
+ this.#retryCache.set(tag, retryCount - 1)
179
+ return this.send(method, params)
180
+ }
181
+ }
182
+ throw e
183
+ }
184
+ if (!result) {
185
+ throw Error('Unexpected null response')
186
+ }
187
+ return result
188
+ }
189
+
190
+ toString() {
191
+ return 'QueuedStaticJsonRpcProvider'
192
+ }
193
+ }
@@ -1,5 +1,11 @@
1
1
  import { CallHandler, FuelBaseProcessor, FuelProcessorState } from './types.js'
2
- import { Data_FuelReceipt, Data_FuelTransaction, FuelAssetHandlerConfig_AssetFilter } from '@sentio/protos'
2
+ import {
3
+ Data_FuelTransaction,
4
+ FuelAssetHandlerConfig_AssetFilter,
5
+ FuelAssetHandlerConfig_AssetFilterSchema,
6
+ timestampDate
7
+ } from '@sentio/protos'
8
+ import { create } from '@bufbuild/protobuf'
3
9
  import { FuelNetwork, getProvider } from './network.js'
4
10
  import { FuelContext } from './context.js'
5
11
  import { decodeFuelTransaction } from './transaction.js'
@@ -8,7 +14,7 @@ import { getOptionsSignature } from './fuel-processor.js'
8
14
  import { getHandlerName, proxyProcessor } from '../utils/metrics.js'
9
15
 
10
16
  export class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorConfig> {
11
- txHandlers: CallHandler<Data_FuelTransaction | Data_FuelReceipt>[] = []
17
+ txHandlers: CallHandler<Data_FuelTransaction>[] = []
12
18
  blockHandlers = []
13
19
  private provider: Provider
14
20
 
@@ -42,11 +48,13 @@ export class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorC
42
48
  for (const assetId of assetIds) {
43
49
  for (const from of froms) {
44
50
  for (const to of tos) {
45
- filters.push({
46
- assetId: assetId,
47
- fromAddress: from,
48
- toAddress: to
49
- })
51
+ filters.push(
52
+ create(FuelAssetHandlerConfig_AssetFilterSchema, {
53
+ assetId: assetId,
54
+ fromAddress: from,
55
+ toAddress: to
56
+ })
57
+ )
50
58
  }
51
59
  }
52
60
  }
@@ -94,7 +102,7 @@ export class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorC
94
102
  this.config.chainId,
95
103
  assetId,
96
104
  this.config.name ?? '',
97
- call.timestamp || new Date(0),
105
+ call.timestamp ? timestampDate(call.timestamp) : new Date(0),
98
106
  tx,
99
107
  null
100
108
  )
@@ -1,6 +1,7 @@
1
1
  import { BaseContext, Labels, normalizeLabels } from '../core/index.js'
2
2
  import { FuelChainId } from '@sentio/chain'
3
- import { RecordMetaData } from '@sentio/protos'
3
+ import { RecordMetaData, RecordMetaDataSchema } from '@sentio/protos'
4
+ import { create } from '@bufbuild/protobuf'
4
5
  import type { CallResult, Contract } from 'fuels'
5
6
  import { InvocationScopeLike } from 'fuels'
6
7
  import { FuelBlock, FuelLog, FuelTransaction } from './types.js'
@@ -39,7 +40,7 @@ export class FuelContext extends BaseContext {
39
40
  }
40
41
 
41
42
  protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
42
- return {
43
+ return create(RecordMetaDataSchema, {
43
44
  address: this.contractAddress,
44
45
  contractName: this.contractName,
45
46
  blockNumber: BigInt(this.block?.height?.toString() ?? (this.transaction?.blockNumber || 0)),
@@ -49,7 +50,7 @@ export class FuelContext extends BaseContext {
49
50
  name: name,
50
51
  logIndex: this.logIndex,
51
52
  labels: normalizeLabels(labels)
52
- }
53
+ })
53
54
  }
54
55
  }
55
56