dequanto 0.0.1 → 0.1.3

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 (1265) hide show
  1. package/.circleci/config.yml +51 -0
  2. package/.github/workflows/npm-publish.yml +32 -0
  3. package/.vscode/settings.json +42 -11
  4. package/actions/chains.act.ts +136 -0
  5. package/actions/contracts.act.ts +178 -0
  6. package/actions/gen.act.ts +38 -38
  7. package/actions/logs.act.ts +7 -0
  8. package/actions/rpc.act.ts +918 -0
  9. package/actions/safe.act.ts +7 -0
  10. package/actions/tokens.act.ts +41 -12
  11. package/configs/defi.yml +28 -0
  12. package/configs/dequanto.yml +377 -51
  13. package/data/cex/eth.csv +356 -356
  14. package/data/chainlink/feeds.json +3674 -0
  15. package/data/chains/chains.json +972 -0
  16. package/data/evm/eventHashes.json +19314 -0
  17. package/data/evm/events.json +19314 -0
  18. package/data/evm/functionHashes.json +121138 -0
  19. package/data/evm/functions.json +121140 -0
  20. package/data/rpc/coregeth.json +1786 -0
  21. package/data/rpc/eth.json +5873 -0
  22. package/data/rpc/flashbots.json +662 -0
  23. package/data/rpc/metamask.json +3673 -0
  24. package/data/rpc/overrides.json +104 -0
  25. package/data/tokens/1inch.json +11107 -4733
  26. package/data/tokens/arbitrum.json +1 -1
  27. package/data/tokens/coingecko.json +118642 -0
  28. package/data/tokens/sushi.json +6067 -48632
  29. package/exports/core.lib.ts +103 -0
  30. package/hardhat.config.js +41 -1
  31. package/importmap.json +27 -0
  32. package/package-bundler.json +181 -0
  33. package/package.json +121 -49
  34. package/readme.md +22 -4
  35. package/src/ChainAccountService.ts +216 -0
  36. package/src/abi/$abiCoder.ts +62 -0
  37. package/src/abi/$rlp.ts +126 -0
  38. package/src/abi/Logger.ts +24 -0
  39. package/src/abi/_version.ts +1 -0
  40. package/src/abi/abi-coder-packed.ts +90 -0
  41. package/src/abi/abi-coder.ts +163 -0
  42. package/src/abi/coders/abstract-coder.ts +455 -0
  43. package/src/abi/coders/address.ts +39 -0
  44. package/src/abi/coders/anonymous.ts +29 -0
  45. package/src/abi/coders/array.ts +190 -0
  46. package/src/abi/coders/boolean.ts +25 -0
  47. package/src/abi/coders/bytes.ts +41 -0
  48. package/src/abi/coders/fixed-bytes.ts +36 -0
  49. package/src/abi/coders/null.ts +28 -0
  50. package/src/abi/coders/number.ts +59 -0
  51. package/src/abi/coders/string.ts +23 -0
  52. package/src/abi/coders/tuple.ts +61 -0
  53. package/src/abi/fragments.ts +1632 -0
  54. package/src/blocks/BlockDateResolver.ts +159 -149
  55. package/src/bridges/BridgeFactory.ts +16 -16
  56. package/src/bridges/hop/HopAddresses.ts +1 -1
  57. package/src/bridges/hop/HopBridge.ts +437 -430
  58. package/src/bridges/hop/contracts/gen.act.ts +51 -50
  59. package/src/bridges/models/IBridge.ts +44 -43
  60. package/src/chains/PlatformFactory.ts +46 -45
  61. package/src/chains/arbitrum/ArbTokenProvider.ts +39 -39
  62. package/src/chains/arbitrum/ArbWeb3Client.ts +21 -39
  63. package/src/chains/arbitrum/Arbiscan.ts +21 -24
  64. package/src/chains/arbitrum/TokensServiceArbitrum.ts +19 -0
  65. package/src/chains/boba/BobaWeb3Client.ts +21 -49
  66. package/src/chains/boba/Bobascan.ts +22 -25
  67. package/src/chains/xdai/XDaiWeb3Client.ts +56 -82
  68. package/src/chains/xdai/XDaiscan.ts +21 -24
  69. package/src/class/PackedRanges.ts +213 -0
  70. package/src/class/PromiseEvent.ts +21 -0
  71. package/src/class/SubjectKind.ts +5 -0
  72. package/src/class/SubjectStream.ts +137 -0
  73. package/src/class/Subscription.ts +7 -0
  74. package/src/clients/BscWeb3Client.ts +21 -38
  75. package/src/clients/ClientEventsStream.ts +95 -33
  76. package/src/clients/ClientPool.ts +616 -207
  77. package/src/clients/ClientPoolStats.ts +70 -64
  78. package/src/clients/EthWeb3Client.ts +23 -36
  79. package/src/clients/EvmWeb3Client.ts +26 -0
  80. package/src/clients/PolyWeb3Client.ts +42 -91
  81. package/src/clients/Web3BatchRequests.ts +119 -0
  82. package/src/clients/Web3Client.ts +700 -134
  83. package/src/clients/Web3ClientFactory.ts +31 -1
  84. package/src/clients/compatibility/Web3.ts +186 -0
  85. package/src/clients/debug/ClientDebugMethods.ts +100 -0
  86. package/src/clients/handlers/RateLimitGuard.ts +353 -0
  87. package/src/clients/interfaces/IWeb3Client.ts +63 -14
  88. package/src/clients/interfaces/IWeb3ClientStatus.ts +21 -23
  89. package/src/clients/interfaces/IWeb3EndpointOptions.ts +16 -9
  90. package/src/clients/model/ClientStatus.ts +6 -5
  91. package/src/clients/model/PromiEventWrap.ts +62 -61
  92. package/src/clients/model/SubscriptionWrap.ts +53 -53
  93. package/src/clients/utils/$web3Abi.ts +29 -0
  94. package/src/clients/utils/ClientEndpoints.ts +32 -26
  95. package/src/clients/utils/ClientErrorUtil.ts +29 -26
  96. package/src/clients/utils/TxFactory.ts +5 -17
  97. package/src/config/AConfigBase.ts +35 -0
  98. package/src/config/Config.ts +45 -0
  99. package/src/config/ConfigProvider.ts +4 -0
  100. package/src/config/ConfigProviderBrowser.ts +21 -0
  101. package/src/config/ConfigProviderIsoPlatform.ts +90 -0
  102. package/src/config/dequanto.d.ts +5 -0
  103. package/src/config/interface/IConfigData.ts +63 -0
  104. package/src/contracts/BscContract.ts +28 -28
  105. package/src/contracts/Contract.ts +120 -126
  106. package/src/contracts/ContractAbiProvider.ts +69 -0
  107. package/src/contracts/ContractBase.ts +496 -60
  108. package/src/contracts/ContractClassFactory.ts +114 -0
  109. package/src/contracts/ContractCreationResolver.ts +85 -0
  110. package/src/contracts/ContractProvider.ts +55 -55
  111. package/src/contracts/ContractReader.ts +339 -87
  112. package/src/contracts/ContractStorageReaderBase.ts +29 -0
  113. package/src/contracts/ContractStream.ts +34 -18
  114. package/src/contracts/ContractWriter.ts +139 -97
  115. package/src/contracts/EthContract.ts +29 -29
  116. package/src/contracts/TxContract.ts +39 -43
  117. package/src/contracts/deploy/ContractDeployer.ts +155 -0
  118. package/src/contracts/deploy/ContractDeployment.ts +53 -0
  119. package/src/contracts/deploy/ContractSource.ts +3 -0
  120. package/src/contracts/deploy/Deployments.ts +672 -0
  121. package/src/contracts/deploy/proxy/$proxyDeploy.ts +302 -0
  122. package/src/contracts/deploy/proxy/ProxyDeployment.ts +401 -0
  123. package/src/contracts/deploy/storage/DeploymentsStorage.ts +368 -0
  124. package/src/contracts/utils/AbiDeserializer.ts +111 -98
  125. package/src/contracts/utils/ContractBaseUtils.ts +105 -0
  126. package/src/contracts/utils/ConvertUtils.ts +16 -16
  127. package/src/contracts/utils/InputDataUtils.ts +32 -93
  128. package/src/contracts/utils/TypeUtils.ts +21 -21
  129. package/src/contracts/wrappers/FnRequestWrapper.ts +15 -0
  130. package/src/contracts/wrappers/FnSignedWrapper.ts +42 -0
  131. package/src/env/BigIntSerializer.ts +19 -18
  132. package/src/erc4337/Erc4337Factory.ts +54 -0
  133. package/src/erc4337/Erc4337Service.ts +219 -0
  134. package/src/erc4337/Erc4337TxWriter.ts +169 -0
  135. package/src/erc4337/models/Erc4337Abi.ts +7 -0
  136. package/src/erc4337/models/IErc4337Info.ts +8 -0
  137. package/src/erc4337/models/UserOperation.ts +18 -0
  138. package/src/erc4337/utils/$erc4337.ts +31 -0
  139. package/src/evm/EvmBytecode.ts +298 -0
  140. package/src/evm/OpcodesInfo.ts +211 -0
  141. package/src/evm/OpcodesWalker.ts +156 -0
  142. package/src/evm/Stack.ts +58 -0
  143. package/src/evm/functions/$opcodes.ts +122 -0
  144. package/src/evm/functions/opcodes.spec.ts +47 -0
  145. package/src/evm/interfaces/IJumps.ts +3 -0
  146. package/src/evm/interfaces/IMemory.ts +3 -0
  147. package/src/evm/interfaces/IOpcode.ts +11 -0
  148. package/src/evm/interfaces/IStorage.ts +3 -0
  149. package/src/evm/opcodes/add.ts +49 -0
  150. package/src/evm/opcodes/addmod.ts +19 -0
  151. package/src/evm/opcodes/address.ts +22 -0
  152. package/src/evm/opcodes/and.ts +58 -0
  153. package/src/evm/opcodes/balance.ts +25 -0
  154. package/src/evm/opcodes/blockhash.ts +25 -0
  155. package/src/evm/opcodes/byte.ts +34 -0
  156. package/src/evm/opcodes/call.ts +69 -0
  157. package/src/evm/opcodes/callcode.ts +69 -0
  158. package/src/evm/opcodes/calldatacopy.ts +36 -0
  159. package/src/evm/opcodes/calldataload.ts +40 -0
  160. package/src/evm/opcodes/calldatasize.ts +21 -0
  161. package/src/evm/opcodes/caller.ts +22 -0
  162. package/src/evm/opcodes/callvalue.ts +21 -0
  163. package/src/evm/opcodes/codecopy.ts +37 -0
  164. package/src/evm/opcodes/codesize.ts +21 -0
  165. package/src/evm/opcodes/coinbase.ts +21 -0
  166. package/src/evm/opcodes/create.ts +42 -0
  167. package/src/evm/opcodes/create2.ts +41 -0
  168. package/src/evm/opcodes/delegatecall.ts +63 -0
  169. package/src/evm/opcodes/difficulty.ts +21 -0
  170. package/src/evm/opcodes/div.ts +35 -0
  171. package/src/evm/opcodes/dup.ts +7 -0
  172. package/src/evm/opcodes/eq.ts +92 -0
  173. package/src/evm/opcodes/exp.ts +34 -0
  174. package/src/evm/opcodes/extcodecopy.ts +42 -0
  175. package/src/evm/opcodes/extcodehash.ts +25 -0
  176. package/src/evm/opcodes/extcodesize.ts +25 -0
  177. package/src/evm/opcodes/gas.ts +21 -0
  178. package/src/evm/opcodes/gaslimit.ts +21 -0
  179. package/src/evm/opcodes/gasprice.ts +21 -0
  180. package/src/evm/opcodes/gt.ts +39 -0
  181. package/src/evm/opcodes/invalid.ts +24 -0
  182. package/src/evm/opcodes/iszero.ts +48 -0
  183. package/src/evm/opcodes/jump.ts +66 -0
  184. package/src/evm/opcodes/jumpdest.ts +6 -0
  185. package/src/evm/opcodes/jumpi.ts +367 -0
  186. package/src/evm/opcodes/log.ts +89 -0
  187. package/src/evm/opcodes/lt.ts +39 -0
  188. package/src/evm/opcodes/mload.ts +30 -0
  189. package/src/evm/opcodes/mod.ts +33 -0
  190. package/src/evm/opcodes/msize.ts +21 -0
  191. package/src/evm/opcodes/mstore.ts +33 -0
  192. package/src/evm/opcodes/mul.ts +38 -0
  193. package/src/evm/opcodes/mulmod.ts +19 -0
  194. package/src/evm/opcodes/not.ts +30 -0
  195. package/src/evm/opcodes/number.ts +21 -0
  196. package/src/evm/opcodes/or.ts +33 -0
  197. package/src/evm/opcodes/origin.ts +21 -0
  198. package/src/evm/opcodes/pc.ts +7 -0
  199. package/src/evm/opcodes/pop.ts +6 -0
  200. package/src/evm/opcodes/push.ts +8 -0
  201. package/src/evm/opcodes/return.ts +78 -0
  202. package/src/evm/opcodes/returndatacopy.ts +37 -0
  203. package/src/evm/opcodes/returndatasize.ts +21 -0
  204. package/src/evm/opcodes/revert.ts +64 -0
  205. package/src/evm/opcodes/sar.ts +33 -0
  206. package/src/evm/opcodes/selfdestruct.ts +26 -0
  207. package/src/evm/opcodes/sha3.ts +63 -0
  208. package/src/evm/opcodes/shl.ts +42 -0
  209. package/src/evm/opcodes/shr.ts +33 -0
  210. package/src/evm/opcodes/signextend.ts +25 -0
  211. package/src/evm/opcodes/sload.ts +190 -0
  212. package/src/evm/opcodes/sstore.ts +259 -0
  213. package/src/evm/opcodes/staticcall.ts +63 -0
  214. package/src/evm/opcodes/stop.ts +22 -0
  215. package/src/evm/opcodes/sub.ts +33 -0
  216. package/src/evm/opcodes/swap.ts +7 -0
  217. package/src/evm/opcodes/timestamp.ts +21 -0
  218. package/src/evm/opcodes/xor.ts +33 -0
  219. package/src/evm/utils/$bytecode.ts +76 -0
  220. package/src/evm/utils/BigNumber.ts +9 -0
  221. package/src/evm/utils/hex.ts +37 -0
  222. package/src/evm/utils/opcodes.ts +213 -0
  223. package/src/evm/utils/stringify.ts +12 -0
  224. package/src/evm/utils/stringifyEvents.ts +37 -0
  225. package/src/evm/utils/stringifyFunctions.ts +41 -0
  226. package/src/evm/utils/stringifyInstructions.ts +38 -0
  227. package/src/evm/utils/stringifyMappings.ts +65 -0
  228. package/src/evm/utils/stringifyStructs.ts +16 -0
  229. package/src/evm/utils/stringifyVariables.ts +32 -0
  230. package/src/explorer/BlockChainExplorerFactory.ts +644 -0
  231. package/src/explorer/BlockChainExplorerProvider.ts +57 -0
  232. package/src/explorer/BlockChainExplorerStorage.ts +124 -0
  233. package/src/explorer/BlockNumberCache.ts +47 -0
  234. package/src/explorer/Bscscan.ts +24 -0
  235. package/src/explorer/ContractVerifier.ts +289 -0
  236. package/src/explorer/ContractVerifierHtml.ts +207 -0
  237. package/src/explorer/Etherscan.ts +37 -0
  238. package/src/explorer/Evmscan.ts +8 -0
  239. package/src/explorer/IAbiProvider.ts +5 -0
  240. package/src/explorer/IBlockChainExplorer.ts +69 -0
  241. package/src/explorer/Polyscan.ts +24 -0
  242. package/src/explorer/verifiers/FsHtmlVerifier.ts +195 -0
  243. package/src/explorer/verifiers/IVerifier.ts +14 -0
  244. package/src/flashbots/FlashbotWeb3Client.ts +24 -0
  245. package/src/flashbots/FlashbotsProvider.ts +163 -0
  246. package/src/gen/Ast.ts +12 -12
  247. package/src/gen/ContractStorageReaderTemplate.ts +18 -0
  248. package/src/gen/ContractTemplate.ts +134 -36
  249. package/src/gen/Generator.ts +414 -227
  250. package/src/gen/GeneratorFromAbi.ts +451 -128
  251. package/src/gen/GeneratorStorageReader.ts +114 -0
  252. package/src/gen/utils/$gen.ts +11 -0
  253. package/src/gen/utils/Str.ts +40 -0
  254. package/src/handlers/TokenHandler.ts +77 -78
  255. package/src/hardhat/HardhatProvider.ts +469 -0
  256. package/src/hardhat/HardhatWeb3Client.ts +66 -0
  257. package/src/indexer/BlocksTxIndexer.ts +116 -69
  258. package/src/indexer/EventsIndexer.ts +379 -0
  259. package/src/indexer/PendingTxIndexer.ts +123 -124
  260. package/src/indexer/handlers/BlocksWalker.ts +420 -390
  261. package/src/indexer/handlers/TxQueueLoader.ts +144 -143
  262. package/src/indexer/storage/FsEventsIndexerStore.ts +182 -0
  263. package/src/indexer/storage/FsEventsMetaStore.ts +65 -0
  264. package/src/indexer/storage/FsEventsStoreUtils.ts +43 -0
  265. package/src/indexer/storage/interfaces.ts +25 -0
  266. package/src/json/JsonArrayMultiStore.ts +219 -0
  267. package/src/json/JsonArrayStore.ts +193 -310
  268. package/src/json/JsonObjectStore.ts +78 -239
  269. package/src/json/JsonStoreFs.ts +187 -0
  270. package/src/loggers/ILogger.ts +6 -3
  271. package/src/loggers/LoggerService.ts +83 -39
  272. package/src/loggers/TxLoggerService.ts +144 -146
  273. package/src/models/IContractDetails.ts +10 -8
  274. package/src/models/IToken.ts +35 -11
  275. package/src/models/ITokenGlob.ts +14 -14
  276. package/src/models/ITransactionDetails.ts +10 -11
  277. package/src/models/TAccount.ts +53 -0
  278. package/src/models/TAddress.ts +2 -1
  279. package/src/models/TBufferLike.ts +2 -2
  280. package/src/models/TError.ts +4 -0
  281. package/src/models/TEth.ts +223 -0
  282. package/src/models/THex.ts +1 -1
  283. package/src/models/TPlatform.ts +16 -1
  284. package/src/models/TResult.ts +6 -6
  285. package/src/models/TTx.ts +42 -0
  286. package/src/ns/NameService.ts +54 -21
  287. package/src/ns/providers/ANsProvider.ts +110 -0
  288. package/src/ns/providers/EnsProvider.ts +109 -45
  289. package/src/ns/providers/INsProvider.ts +31 -6
  290. package/src/ns/providers/SpaceIdProvider.ts +17 -0
  291. package/src/ns/providers/UDProvider.ts +77 -49
  292. package/src/ns/utils/$ns.ts +27 -15
  293. package/src/prebuilt/1inch/OneInchRouterContract/OneInchRouterContract.ts +313 -0
  294. package/src/prebuilt/amm/AmmFactoryV2Contract/AmmFactoryV2Contract.ts +298 -0
  295. package/src/prebuilt/amm/AmmMasterChefV2Contract/AmmMasterChefV2Contract.ts +642 -0
  296. package/src/prebuilt/amm/AmmPairV2Contract/AmmPairV2Contract.ts +700 -0
  297. package/src/prebuilt/amm/AmmPairV3Contract/AmmPairV3Contract.ts +686 -0
  298. package/src/prebuilt/amm/AmmRouterV2Contract/AmmRouterV2Contract.ts +404 -0
  299. package/src/prebuilt/amm/AmmVaultV2Contract/AmmVaultV2Contract.ts +818 -0
  300. package/src/prebuilt/ens/EnsBaseRegistrar/EnsBaseRegistrar.ts +711 -0
  301. package/src/prebuilt/ens/EnsDnsRegistrar/EnsDnsRegistrar.ts +333 -0
  302. package/src/prebuilt/ens/EnsEthRegistrarController/EnsEthRegistrarController.ts +477 -0
  303. package/src/prebuilt/ens/EnsNameWrapper/EnsNameWrapper.ts +1003 -0
  304. package/src/prebuilt/ens/EnsPublicResolver/EnsPublicResolver.ts +873 -0
  305. package/src/prebuilt/ens/EnsRegistry/EnsRegistry.ts +415 -0
  306. package/src/prebuilt/ens/EnsReverseRegistrar/EnsReverseRegistrar.ts +407 -0
  307. package/src/prebuilt/erc4337/EntryPoint/EntryPoint.ts +640 -0
  308. package/src/prebuilt/erc4337/SimpleAccount/SimpleAccount.ts +501 -0
  309. package/src/prebuilt/erc4337/SimpleAccountFactory/SimpleAccountFactory.ts +184 -0
  310. package/src/prebuilt/openzeppelin/AccessControl.json +206 -0
  311. package/src/prebuilt/openzeppelin/AccessControl.ts +257 -0
  312. package/src/prebuilt/openzeppelin/AccessControlCrossChain.json +219 -0
  313. package/src/prebuilt/openzeppelin/AccessControlCrossChain.ts +266 -0
  314. package/src/prebuilt/openzeppelin/AccessControlDefaultAdminRules.json +391 -0
  315. package/src/prebuilt/openzeppelin/AccessControlDefaultAdminRules.ts +450 -0
  316. package/src/prebuilt/openzeppelin/AccessControlEnumerable.json +249 -0
  317. package/src/prebuilt/openzeppelin/AccessControlEnumerable.ts +275 -0
  318. package/src/prebuilt/openzeppelin/ConditionalEscrow.json +156 -0
  319. package/src/prebuilt/openzeppelin/ConditionalEscrow.ts +259 -0
  320. package/src/prebuilt/openzeppelin/CrossChainEnabledPolygonChild.json +30 -0
  321. package/src/prebuilt/openzeppelin/CrossChainEnabledPolygonChild.ts +150 -0
  322. package/src/prebuilt/openzeppelin/EIP712.json +67 -0
  323. package/src/prebuilt/openzeppelin/EIP712.ts +170 -0
  324. package/src/prebuilt/openzeppelin/ERC1155.json +325 -0
  325. package/src/prebuilt/openzeppelin/ERC1155.ts +291 -0
  326. package/src/prebuilt/openzeppelin/ERC1155Burnable.json +360 -0
  327. package/src/prebuilt/openzeppelin/ERC1155Burnable.ts +309 -0
  328. package/src/prebuilt/openzeppelin/ERC1155Holder.json +99 -0
  329. package/src/prebuilt/openzeppelin/ERC1155Holder.ts +163 -0
  330. package/src/prebuilt/openzeppelin/ERC1155Pausable.json +353 -0
  331. package/src/prebuilt/openzeppelin/ERC1155Pausable.ts +338 -0
  332. package/src/prebuilt/openzeppelin/ERC1155PresetMinterPauser.json +734 -0
  333. package/src/prebuilt/openzeppelin/ERC1155PresetMinterPauser.ts +567 -0
  334. package/src/prebuilt/openzeppelin/ERC1155Receiver.json +99 -0
  335. package/src/prebuilt/openzeppelin/ERC1155Receiver.ts +163 -0
  336. package/src/prebuilt/openzeppelin/ERC1155Supply.json +352 -0
  337. package/src/prebuilt/openzeppelin/ERC1155Supply.ts +305 -0
  338. package/src/prebuilt/openzeppelin/ERC1155URIStorage.json +314 -0
  339. package/src/prebuilt/openzeppelin/ERC1155URIStorage.ts +287 -0
  340. package/src/prebuilt/openzeppelin/ERC165.json +21 -0
  341. package/src/prebuilt/openzeppelin/ERC165.ts +143 -0
  342. package/src/prebuilt/openzeppelin/ERC165Storage.json +21 -0
  343. package/src/prebuilt/openzeppelin/ERC165Storage.ts +143 -0
  344. package/src/prebuilt/openzeppelin/ERC1820Implementer.json +26 -0
  345. package/src/prebuilt/openzeppelin/ERC1820Implementer.ts +143 -0
  346. package/src/prebuilt/openzeppelin/ERC20.json +288 -0
  347. package/src/prebuilt/openzeppelin/ERC20.ts +280 -0
  348. package/src/prebuilt/openzeppelin/ERC20Burnable.json +303 -0
  349. package/src/prebuilt/openzeppelin/ERC20Burnable.ts +298 -0
  350. package/src/prebuilt/openzeppelin/ERC20Capped.json +285 -0
  351. package/src/prebuilt/openzeppelin/ERC20Capped.ts +285 -0
  352. package/src/prebuilt/openzeppelin/ERC20FlashMint.json +349 -0
  353. package/src/prebuilt/openzeppelin/ERC20FlashMint.ts +305 -0
  354. package/src/prebuilt/openzeppelin/ERC20Pausable.json +311 -0
  355. package/src/prebuilt/openzeppelin/ERC20Pausable.ts +327 -0
  356. package/src/prebuilt/openzeppelin/ERC20Permit.json +412 -0
  357. package/src/prebuilt/openzeppelin/ERC20Permit.ts +348 -0
  358. package/src/prebuilt/openzeppelin/ERC20PresetFixedSupply.json +329 -0
  359. package/src/prebuilt/openzeppelin/ERC20PresetFixedSupply.ts +302 -0
  360. package/src/prebuilt/openzeppelin/ERC20PresetMinterPauser.json +663 -0
  361. package/src/prebuilt/openzeppelin/ERC20PresetMinterPauser.ts +554 -0
  362. package/src/prebuilt/openzeppelin/ERC20Snapshot.json +328 -0
  363. package/src/prebuilt/openzeppelin/ERC20Snapshot.ts +315 -0
  364. package/src/prebuilt/openzeppelin/ERC20Votes.json +675 -0
  365. package/src/prebuilt/openzeppelin/ERC20Votes.ts +484 -0
  366. package/src/prebuilt/openzeppelin/ERC20VotesComp.json +718 -0
  367. package/src/prebuilt/openzeppelin/ERC20VotesComp.ts +502 -0
  368. package/src/prebuilt/openzeppelin/ERC20Wrapper.json +333 -0
  369. package/src/prebuilt/openzeppelin/ERC20Wrapper.ts +307 -0
  370. package/src/prebuilt/openzeppelin/ERC2771Context.json +21 -0
  371. package/src/prebuilt/openzeppelin/ERC2771Context.ts +143 -0
  372. package/src/prebuilt/openzeppelin/ERC2981.json +50 -0
  373. package/src/prebuilt/openzeppelin/ERC2981.ts +152 -0
  374. package/src/prebuilt/openzeppelin/ERC4626.json +662 -0
  375. package/src/prebuilt/openzeppelin/ERC4626.ts +470 -0
  376. package/src/prebuilt/openzeppelin/ERC721.json +348 -0
  377. package/src/prebuilt/openzeppelin/ERC721.ts +314 -0
  378. package/src/prebuilt/openzeppelin/ERC721Burnable.json +345 -0
  379. package/src/prebuilt/openzeppelin/ERC721Burnable.ts +321 -0
  380. package/src/prebuilt/openzeppelin/ERC721Consecutive.json +363 -0
  381. package/src/prebuilt/openzeppelin/ERC721Consecutive.ts +331 -0
  382. package/src/prebuilt/openzeppelin/ERC721Enumerable.json +388 -0
  383. package/src/prebuilt/openzeppelin/ERC721Enumerable.ts +337 -0
  384. package/src/prebuilt/openzeppelin/ERC721Holder.json +36 -0
  385. package/src/prebuilt/openzeppelin/ERC721Holder.ts +143 -0
  386. package/src/prebuilt/openzeppelin/ERC721Pausable.json +371 -0
  387. package/src/prebuilt/openzeppelin/ERC721Pausable.ts +361 -0
  388. package/src/prebuilt/openzeppelin/ERC721PresetMinterPauserAutoId.json +742 -0
  389. package/src/prebuilt/openzeppelin/ERC721PresetMinterPauserAutoId.ts +595 -0
  390. package/src/prebuilt/openzeppelin/ERC721Royalty.json +361 -0
  391. package/src/prebuilt/openzeppelin/ERC721Royalty.ts +319 -0
  392. package/src/prebuilt/openzeppelin/ERC721URIStorage.json +364 -0
  393. package/src/prebuilt/openzeppelin/ERC721URIStorage.ts +352 -0
  394. package/src/prebuilt/openzeppelin/ERC721Votes.json +637 -0
  395. package/src/prebuilt/openzeppelin/ERC721Votes.ts +489 -0
  396. package/src/prebuilt/openzeppelin/ERC721Wrapper.json +427 -0
  397. package/src/prebuilt/openzeppelin/ERC721Wrapper.ts +352 -0
  398. package/src/prebuilt/openzeppelin/ERC777.json +578 -0
  399. package/src/prebuilt/openzeppelin/ERC777.ts +456 -0
  400. package/src/prebuilt/openzeppelin/ERC777PresetFixedSupply.json +588 -0
  401. package/src/prebuilt/openzeppelin/ERC777PresetFixedSupply.ts +456 -0
  402. package/src/prebuilt/openzeppelin/Escrow.json +137 -0
  403. package/src/prebuilt/openzeppelin/Escrow.ts +250 -0
  404. package/src/prebuilt/openzeppelin/Governor.json +1010 -0
  405. package/src/prebuilt/openzeppelin/Governor.ts +590 -0
  406. package/src/prebuilt/openzeppelin/GovernorCompatibilityBravo.json +1325 -0
  407. package/src/prebuilt/openzeppelin/GovernorCompatibilityBravo.ts +700 -0
  408. package/src/prebuilt/openzeppelin/GovernorCountingSimple.json +1039 -0
  409. package/src/prebuilt/openzeppelin/GovernorCountingSimple.ts +599 -0
  410. package/src/prebuilt/openzeppelin/GovernorPreventLateQuorum.json +1074 -0
  411. package/src/prebuilt/openzeppelin/GovernorPreventLateQuorum.ts +652 -0
  412. package/src/prebuilt/openzeppelin/GovernorProposalThreshold.json +1010 -0
  413. package/src/prebuilt/openzeppelin/GovernorProposalThreshold.ts +590 -0
  414. package/src/prebuilt/openzeppelin/GovernorSettings.json +1106 -0
  415. package/src/prebuilt/openzeppelin/GovernorSettings.ts +686 -0
  416. package/src/prebuilt/openzeppelin/GovernorTimelockCompound.json +1134 -0
  417. package/src/prebuilt/openzeppelin/GovernorTimelockCompound.ts +683 -0
  418. package/src/prebuilt/openzeppelin/GovernorTimelockControl.json +1127 -0
  419. package/src/prebuilt/openzeppelin/GovernorTimelockControl.ts +672 -0
  420. package/src/prebuilt/openzeppelin/GovernorVotes.json +1023 -0
  421. package/src/prebuilt/openzeppelin/GovernorVotes.ts +599 -0
  422. package/src/prebuilt/openzeppelin/GovernorVotesComp.json +1023 -0
  423. package/src/prebuilt/openzeppelin/GovernorVotesComp.ts +599 -0
  424. package/src/prebuilt/openzeppelin/GovernorVotesQuorumFraction.json +1100 -0
  425. package/src/prebuilt/openzeppelin/GovernorVotesQuorumFraction.ts +653 -0
  426. package/src/prebuilt/openzeppelin/IAMB.json +327 -0
  427. package/src/prebuilt/openzeppelin/IAMB.ts +330 -0
  428. package/src/prebuilt/openzeppelin/IAccessControl.json +174 -0
  429. package/src/prebuilt/openzeppelin/IAccessControl.ts +239 -0
  430. package/src/prebuilt/openzeppelin/IAccessControlDefaultAdminRules.json +346 -0
  431. package/src/prebuilt/openzeppelin/IAccessControlDefaultAdminRules.ts +423 -0
  432. package/src/prebuilt/openzeppelin/IAccessControlEnumerable.json +217 -0
  433. package/src/prebuilt/openzeppelin/IAccessControlEnumerable.ts +257 -0
  434. package/src/prebuilt/openzeppelin/IArbSys.json +355 -0
  435. package/src/prebuilt/openzeppelin/IArbSys.ts +300 -0
  436. package/src/prebuilt/openzeppelin/IBeacon.json +15 -0
  437. package/src/prebuilt/openzeppelin/IBeacon.ts +143 -0
  438. package/src/prebuilt/openzeppelin/IBridge.json +529 -0
  439. package/src/prebuilt/openzeppelin/IBridge.ts +430 -0
  440. package/src/prebuilt/openzeppelin/ICompoundTimelock.json +415 -0
  441. package/src/prebuilt/openzeppelin/ICompoundTimelock.ts +380 -0
  442. package/src/prebuilt/openzeppelin/ICrossDomainMessenger.json +101 -0
  443. package/src/prebuilt/openzeppelin/ICrossDomainMessenger.ts +208 -0
  444. package/src/prebuilt/openzeppelin/IERC1155.json +295 -0
  445. package/src/prebuilt/openzeppelin/IERC1155.ts +278 -0
  446. package/src/prebuilt/openzeppelin/IERC1155MetadataURI.json +314 -0
  447. package/src/prebuilt/openzeppelin/IERC1155MetadataURI.ts +287 -0
  448. package/src/prebuilt/openzeppelin/IERC1155Receiver.json +99 -0
  449. package/src/prebuilt/openzeppelin/IERC1155Receiver.ts +163 -0
  450. package/src/prebuilt/openzeppelin/IERC1271.json +26 -0
  451. package/src/prebuilt/openzeppelin/IERC1271.ts +143 -0
  452. package/src/prebuilt/openzeppelin/IERC1363.json +373 -0
  453. package/src/prebuilt/openzeppelin/IERC1363.ts +287 -0
  454. package/src/prebuilt/openzeppelin/IERC1363Receiver.json +36 -0
  455. package/src/prebuilt/openzeppelin/IERC1363Receiver.ts +143 -0
  456. package/src/prebuilt/openzeppelin/IERC1363Spender.json +31 -0
  457. package/src/prebuilt/openzeppelin/IERC1363Spender.ts +143 -0
  458. package/src/prebuilt/openzeppelin/IERC165.json +21 -0
  459. package/src/prebuilt/openzeppelin/IERC165.ts +143 -0
  460. package/src/prebuilt/openzeppelin/IERC1820Implementer.json +26 -0
  461. package/src/prebuilt/openzeppelin/IERC1820Implementer.ts +143 -0
  462. package/src/prebuilt/openzeppelin/IERC1820Registry.json +215 -0
  463. package/src/prebuilt/openzeppelin/IERC1820Registry.ts +245 -0
  464. package/src/prebuilt/openzeppelin/IERC1822Proxiable.json +15 -0
  465. package/src/prebuilt/openzeppelin/IERC1822Proxiable.ts +143 -0
  466. package/src/prebuilt/openzeppelin/IERC20.json +185 -0
  467. package/src/prebuilt/openzeppelin/IERC20.ts +227 -0
  468. package/src/prebuilt/openzeppelin/IERC20Metadata.json +224 -0
  469. package/src/prebuilt/openzeppelin/IERC20Metadata.ts +254 -0
  470. package/src/prebuilt/openzeppelin/IERC20Permit.json +77 -0
  471. package/src/prebuilt/openzeppelin/IERC20Permit.ts +161 -0
  472. package/src/prebuilt/openzeppelin/IERC2612.json +77 -0
  473. package/src/prebuilt/openzeppelin/IERC2612.ts +161 -0
  474. package/src/prebuilt/openzeppelin/IERC2981.json +50 -0
  475. package/src/prebuilt/openzeppelin/IERC2981.ts +152 -0
  476. package/src/prebuilt/openzeppelin/IERC3156FlashBorrower.json +41 -0
  477. package/src/prebuilt/openzeppelin/IERC3156FlashBorrower.ts +143 -0
  478. package/src/prebuilt/openzeppelin/IERC3156FlashLender.json +79 -0
  479. package/src/prebuilt/openzeppelin/IERC3156FlashLender.ts +161 -0
  480. package/src/prebuilt/openzeppelin/IERC4626.json +614 -0
  481. package/src/prebuilt/openzeppelin/IERC4626.ts +448 -0
  482. package/src/prebuilt/openzeppelin/IERC4906.json +319 -0
  483. package/src/prebuilt/openzeppelin/IERC4906.ts +325 -0
  484. package/src/prebuilt/openzeppelin/IERC5267.json +51 -0
  485. package/src/prebuilt/openzeppelin/IERC5267.ts +157 -0
  486. package/src/prebuilt/openzeppelin/IERC5313.json +15 -0
  487. package/src/prebuilt/openzeppelin/IERC5313.ts +143 -0
  488. package/src/prebuilt/openzeppelin/IERC5805.json +210 -0
  489. package/src/prebuilt/openzeppelin/IERC5805.ts +243 -0
  490. package/src/prebuilt/openzeppelin/IERC6372.json +28 -0
  491. package/src/prebuilt/openzeppelin/IERC6372.ts +152 -0
  492. package/src/prebuilt/openzeppelin/IERC721.json +287 -0
  493. package/src/prebuilt/openzeppelin/IERC721.ts +283 -0
  494. package/src/prebuilt/openzeppelin/IERC721Enumerable.json +343 -0
  495. package/src/prebuilt/openzeppelin/IERC721Enumerable.ts +310 -0
  496. package/src/prebuilt/openzeppelin/IERC721Metadata.json +332 -0
  497. package/src/prebuilt/openzeppelin/IERC721Metadata.ts +310 -0
  498. package/src/prebuilt/openzeppelin/IERC721Receiver.json +36 -0
  499. package/src/prebuilt/openzeppelin/IERC721Receiver.ts +143 -0
  500. package/src/prebuilt/openzeppelin/IERC777.json +393 -0
  501. package/src/prebuilt/openzeppelin/IERC777.ts +359 -0
  502. package/src/prebuilt/openzeppelin/IERC777Recipient.json +40 -0
  503. package/src/prebuilt/openzeppelin/IERC777Recipient.ts +143 -0
  504. package/src/prebuilt/openzeppelin/IERC777Sender.json +40 -0
  505. package/src/prebuilt/openzeppelin/IERC777Sender.ts +143 -0
  506. package/src/prebuilt/openzeppelin/IFxMessageProcessor.json +25 -0
  507. package/src/prebuilt/openzeppelin/IFxMessageProcessor.ts +143 -0
  508. package/src/prebuilt/openzeppelin/IGovernor.json +762 -0
  509. package/src/prebuilt/openzeppelin/IGovernor.ts +471 -0
  510. package/src/prebuilt/openzeppelin/IGovernorCompatibilityBravo.json +992 -0
  511. package/src/prebuilt/openzeppelin/IGovernorCompatibilityBravo.ts +536 -0
  512. package/src/prebuilt/openzeppelin/IGovernorTimelock.json +847 -0
  513. package/src/prebuilt/openzeppelin/IGovernorTimelock.ts +521 -0
  514. package/src/prebuilt/openzeppelin/IInbox.json +444 -0
  515. package/src/prebuilt/openzeppelin/IInbox.ts +337 -0
  516. package/src/prebuilt/openzeppelin/IOutbox.json +410 -0
  517. package/src/prebuilt/openzeppelin/IOutbox.ts +317 -0
  518. package/src/prebuilt/openzeppelin/ITransparentUpgradeableProxy.json +117 -0
  519. package/src/prebuilt/openzeppelin/ITransparentUpgradeableProxy.ts +239 -0
  520. package/src/prebuilt/openzeppelin/IVotes.json +184 -0
  521. package/src/prebuilt/openzeppelin/IVotes.ts +225 -0
  522. package/src/prebuilt/openzeppelin/LibArbitrumL2.json +15 -0
  523. package/src/prebuilt/openzeppelin/LibArbitrumL2.ts +143 -0
  524. package/src/prebuilt/openzeppelin/MinimalForwarder.json +208 -0
  525. package/src/prebuilt/openzeppelin/MinimalForwarder.ts +201 -0
  526. package/src/prebuilt/openzeppelin/Multicall.json +21 -0
  527. package/src/prebuilt/openzeppelin/Multicall.ts +143 -0
  528. package/src/prebuilt/openzeppelin/Ownable.json +54 -0
  529. package/src/prebuilt/openzeppelin/Ownable.ts +177 -0
  530. package/src/prebuilt/openzeppelin/Ownable2Step.json +93 -0
  531. package/src/prebuilt/openzeppelin/Ownable2Step.ts +218 -0
  532. package/src/prebuilt/openzeppelin/Pausable.json +41 -0
  533. package/src/prebuilt/openzeppelin/Pausable.ts +178 -0
  534. package/src/prebuilt/openzeppelin/PaymentSplitter.json +304 -0
  535. package/src/prebuilt/openzeppelin/PaymentSplitter.ts +296 -0
  536. package/src/prebuilt/openzeppelin/ProxyAdmin.json +151 -0
  537. package/src/prebuilt/openzeppelin/ProxyAdmin.ts +228 -0
  538. package/src/prebuilt/openzeppelin/PullPayment.json +34 -0
  539. package/src/prebuilt/openzeppelin/PullPayment.ts +152 -0
  540. package/src/prebuilt/openzeppelin/RefundEscrow.json +226 -0
  541. package/src/prebuilt/openzeppelin/RefundEscrow.ts +356 -0
  542. package/src/prebuilt/openzeppelin/TimelockController.json +891 -0
  543. package/src/prebuilt/openzeppelin/TimelockController.ts +573 -0
  544. package/src/prebuilt/openzeppelin/TokenTimelock.json +69 -0
  545. package/src/prebuilt/openzeppelin/TokenTimelock.ts +174 -0
  546. package/src/prebuilt/openzeppelin/UUPSUpgradeable.json +91 -0
  547. package/src/prebuilt/openzeppelin/UUPSUpgradeable.ts +219 -0
  548. package/src/prebuilt/openzeppelin/UpgradeableBeacon.json +104 -0
  549. package/src/prebuilt/openzeppelin/UpgradeableBeacon.ts +222 -0
  550. package/src/prebuilt/openzeppelin/VestingWallet.json +225 -0
  551. package/src/prebuilt/openzeppelin/VestingWallet.ts +254 -0
  552. package/src/prebuilt/openzeppelin/Votes.json +307 -0
  553. package/src/prebuilt/openzeppelin/Votes.ts +304 -0
  554. package/src/prebuilt/openzeppelin/compiled/TransparentUpgradeableProxy/TransparentUpgradeableProxy.ts +214 -0
  555. package/src/prebuilt/safe/CreateCall.ts +168 -0
  556. package/src/prebuilt/safe/GnosisSafe.ts +683 -0
  557. package/src/prebuilt/safe/MultiSend.ts +147 -0
  558. package/src/prebuilt/safe/Safe.ts +742 -0
  559. package/src/prebuilt/safe/SafeL2.ts +780 -0
  560. package/src/prebuilt/safe/SafeProxyFactory.ts +197 -0
  561. package/src/prebuilt/weth/WETH/WETH.ts +390 -0
  562. package/src/rpc/$rpc.ts +124 -0
  563. package/src/rpc/Rpc.ts +3010 -0
  564. package/src/rpc/RpcBase.ts +154 -0
  565. package/src/rpc/RpcContract.ts +179 -0
  566. package/src/rpc/RpcError.ts +41 -0
  567. package/src/rpc/RpcFunction.ts +42 -0
  568. package/src/rpc/RpcHandler.ts +3 -0
  569. package/src/rpc/RpcModelMiddleware.ts +110 -0
  570. package/src/rpc/RpcSubscription.ts +46 -0
  571. package/src/rpc/transports/HttpTransport.ts +54 -0
  572. package/src/rpc/transports/ITransport.ts +87 -0
  573. package/src/rpc/transports/MessageBasedTransport.ts +133 -0
  574. package/src/rpc/transports/RpcTransport.ts +66 -0
  575. package/src/rpc/transports/WsTransport.ts +87 -0
  576. package/src/rpc/transports/WsTransportIsomorphic.ts +26 -0
  577. package/src/rpc/transports/compatibility/EIP1193Transport.ts +38 -0
  578. package/src/rpc/transports/compatibility/Web3Transport.ts +35 -0
  579. package/src/safe/$gnosis.ts +7 -0
  580. package/src/safe/GnosisSafeFactory.ts +104 -0
  581. package/src/safe/GnosisSafeHandler.ts +472 -0
  582. package/src/safe/GnosisSafeService.ts +86 -0
  583. package/src/safe/SafeTx.ts +93 -0
  584. package/src/safe/abi/GnosisSafe.json +979 -0
  585. package/src/safe/abi/v1_4_1/CreateCall.json +68 -0
  586. package/src/safe/abi/v1_4_1/MultiSend.json +20 -0
  587. package/src/safe/abi/v1_4_1/Safe.json +999 -0
  588. package/src/safe/abi/v1_4_1/SafeL2.json +1104 -0
  589. package/src/safe/abi/v1_4_1/SafeProxyFactory.json +139 -0
  590. package/src/safe/transport/FileServiceTransport.ts +109 -0
  591. package/src/safe/transport/ISafeServiceTransport.ts +20 -0
  592. package/src/safe/transport/InMemoryServiceTransport.ts +84 -0
  593. package/src/safe/transport/SafeServiceTransport.ts +148 -0
  594. package/src/safe/types/SafeServiceTypes.ts +326 -0
  595. package/src/services/TimelockService.ts +666 -0
  596. package/src/solidity/SlotsDump.ts +245 -0
  597. package/src/solidity/SlotsParser/Ast.ts +601 -0
  598. package/src/solidity/SlotsParser/MappingSettersResolver.ts +681 -0
  599. package/src/solidity/SlotsParser/SourceFile.ts +240 -0
  600. package/src/solidity/SlotsParser/models.ts +32 -0
  601. package/src/solidity/SlotsParser.ts +497 -0
  602. package/src/solidity/SlotsStorage.ts +209 -0
  603. package/src/solidity/SolidityParser.ts +108 -0
  604. package/src/solidity/SourceCodeProvider.ts +83 -0
  605. package/src/solidity/storage/Accessor.spec.ts +45 -0
  606. package/src/solidity/storage/Accessor.ts +136 -0
  607. package/src/solidity/storage/MappingKeysLoader.ts +112 -0
  608. package/src/solidity/storage/SlotDynamicArray.ts +46 -0
  609. package/src/solidity/storage/SlotFixedArray.ts +31 -0
  610. package/src/solidity/storage/SlotsStorageHandler.ts +18 -0
  611. package/src/solidity/storage/SlotsStorageTransport.ts +215 -0
  612. package/src/solidity/storage/handlers/SlotBytesHandler.ts +135 -0
  613. package/src/solidity/storage/handlers/SlotDynamicArrayHandler.ts +58 -0
  614. package/src/solidity/storage/handlers/SlotFixedArrayHandler.ts +58 -0
  615. package/src/solidity/storage/handlers/SlotMappingHandler.ts +75 -0
  616. package/src/solidity/storage/handlers/SlotStringHandler.ts +27 -0
  617. package/src/solidity/storage/handlers/SlotStructHandler.ts +47 -0
  618. package/src/solidity/storage/handlers/SlotValueConstantHandler.ts +30 -0
  619. package/src/solidity/storage/handlers/SlotValueHandler.ts +36 -0
  620. package/src/solidity/storage/handlers/SlotValueImmutableHandler.ts +49 -0
  621. package/src/solidity/utils/$str.ts +73 -0
  622. package/src/solidity/utils/$types.ts +61 -0
  623. package/src/tokens/TokenDataProvider.ts +284 -0
  624. package/src/tokens/TokenExchangeService.ts +129 -126
  625. package/src/tokens/TokenExchanges/AmmBase/AmmUtilts.ts +16 -16
  626. package/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Service.ts +228 -208
  627. package/src/tokens/TokenExchanges/AmmV2ExchangeBase.ts +242 -242
  628. package/src/tokens/TokenExchanges/AmmV2PriceQuote.ts +433 -0
  629. package/src/tokens/TokenExchanges/OneInchExchange.ts +114 -111
  630. package/src/tokens/TokenExchanges/PancakeswapExchange.ts +25 -30
  631. package/src/tokens/TokenExchanges/SushiswapPolygonExchange.ts +33 -30
  632. package/src/tokens/TokenExchanges/UniswapV2Exchange.ts +28 -0
  633. package/src/tokens/TokenOracles/IOracle.ts +36 -0
  634. package/src/tokens/TokenOracles/TokenPriceStore.ts +130 -129
  635. package/src/tokens/TokenOracles/amm/AmmV1Oracle.ts +219 -0
  636. package/src/tokens/TokenOracles/amm/AmmV2Oracle.ts +57 -0
  637. package/src/tokens/TokenOracles/chainlink/ChainlinkFeedProvider.ts +133 -0
  638. package/src/tokens/TokenOracles/chainlink/ChainlinkOracle.ts +135 -0
  639. package/src/tokens/TokenOracles/coingecko/CoingeckoOracle.ts +121 -0
  640. package/src/tokens/TokenOracles/coingecko/CoingeckoTokenProvider.ts +51 -0
  641. package/src/tokens/TokenPriceService.ts +273 -276
  642. package/src/tokens/TokenPriceServiceProvider.ts +36 -36
  643. package/src/tokens/TokenProviders/ITokenProvider.ts +9 -9
  644. package/src/tokens/TokenProviders/TPChain.ts +53 -41
  645. package/src/tokens/TokenProviders/TPCoingecko.ts +177 -0
  646. package/src/tokens/TokenProviders/TPCoinmarketcap.ts +82 -82
  647. package/src/tokens/TokenProviders/TPConfig.ts +53 -0
  648. package/src/tokens/TokenProviders/TPExplorer.ts +41 -0
  649. package/src/tokens/TokenProviders/TPOneInch.ts +71 -71
  650. package/src/tokens/TokenProviders/TPSushiswap.ts +88 -96
  651. package/src/tokens/TokenProviders/TPUniswap.ts +87 -85
  652. package/src/tokens/TokenService.ts +142 -128
  653. package/src/tokens/TokenSwapService.ts +44 -47
  654. package/src/tokens/TokenTransferService.ts +233 -216
  655. package/src/tokens/TokensService.ts +42 -186
  656. package/src/tokens/TokensServiceBsc.ts +17 -17
  657. package/src/tokens/TokensServiceEth.ts +9 -9
  658. package/src/tokens/TokensServiceFactory.ts +15 -1
  659. package/src/tokens/TokensServicePolygon.ts +17 -17
  660. package/src/tokens/TokensServiceXDai.ts +26 -26
  661. package/src/tokens/defi/ISwapService.ts +12 -12
  662. package/src/tokens/defi/paraswap/Paraswap.ts +242 -244
  663. package/src/tokens/utils/TokenUtils.ts +63 -63
  664. package/src/txs/ITxBuilderOptions.ts +41 -0
  665. package/src/txs/TxDataBuilder.ts +308 -207
  666. package/src/txs/TxLogger.ts +120 -121
  667. package/src/txs/TxNonceManager.ts +86 -0
  668. package/src/txs/TxProvider.ts +70 -68
  669. package/src/txs/TxService.ts +20 -19
  670. package/src/txs/TxWriter.ts +342 -78
  671. package/src/txs/agents/Erc4337Agent.ts +32 -0
  672. package/src/txs/agents/SafeAgent.ts +20 -0
  673. package/src/txs/agents/TxWriterAccountAgents.ts +27 -0
  674. package/src/txs/conditional/GasWatcherLogger.ts +57 -57
  675. package/src/txs/conditional/GasWatcherService.ts +116 -117
  676. package/src/txs/conditional/GasWatcherStore.ts +41 -40
  677. package/src/txs/conditional/GasWatcherTx.ts +142 -143
  678. package/src/txs/receipt/ITxLogItem.ts +31 -25
  679. package/src/txs/receipt/TxLogParser.ts +56 -29
  680. package/src/txs/receipt/TxLogsTransfer.ts +61 -61
  681. package/src/txs/receipt/TxTopicInMemoryProvider.ts +45 -45
  682. package/src/txs/receipt/TxTopicProvider.ts +29 -29
  683. package/src/txs/sig-transports/SigFileTransport.ts +49 -0
  684. package/src/types/TAbi.ts +32 -0
  685. package/src/utils/$abiParser.ts +245 -179
  686. package/src/utils/$abiType.ts +277 -85
  687. package/src/utils/$abiUtils.ts +332 -38
  688. package/src/utils/$account.ts +48 -0
  689. package/src/utils/$address.ts +71 -37
  690. package/src/utils/$array.ts +113 -57
  691. package/src/utils/$base.ts +67 -0
  692. package/src/utils/$bigfloat.ts +562 -0
  693. package/src/utils/$bigint.ts +238 -127
  694. package/src/utils/$block.ts +20 -7
  695. package/src/utils/$bloom.ts +43 -0
  696. package/src/utils/$buffer.ts +196 -0
  697. package/src/utils/$cache.ts +7 -0
  698. package/src/utils/$class.ts +8 -8
  699. package/src/utils/$cli.ts +42 -0
  700. package/src/utils/$color.ts +213 -0
  701. package/src/utils/$config.ts +80 -17
  702. package/src/utils/$const.ts +1 -0
  703. package/src/utils/$contract.ts +309 -67
  704. package/src/utils/$crypto.ts +223 -0
  705. package/src/utils/$csv.ts +70 -54
  706. package/src/utils/$date.ts +697 -473
  707. package/src/utils/$error.ts +16 -0
  708. package/src/utils/$fn.ts +134 -134
  709. package/src/utils/$gas.ts +26 -0
  710. package/src/utils/$hex.ts +133 -0
  711. package/src/utils/$http.ts +219 -0
  712. package/src/utils/$is.ts +73 -37
  713. package/src/utils/$logger.ts +216 -10
  714. package/src/utils/$machine.ts +85 -0
  715. package/src/utils/$number.ts +135 -89
  716. package/src/utils/$object.ts +95 -95
  717. package/src/utils/$path.ts +76 -32
  718. package/src/utils/$perf.ts +20 -0
  719. package/src/utils/$platform.ts +5 -0
  720. package/src/utils/$promise.ts +154 -7
  721. package/src/utils/$regexp.ts +16 -0
  722. package/src/utils/$require.ts +212 -118
  723. package/src/utils/$secret.ts +27 -0
  724. package/src/utils/$semver.ts +27 -0
  725. package/src/utils/$sig.ts +722 -0
  726. package/src/utils/$sign.ts +136 -36
  727. package/src/utils/$signRaw.ts +50 -0
  728. package/src/utils/$signRawNative.ts +105 -0
  729. package/src/utils/$signSerializer.ts +27 -21
  730. package/src/utils/$txData.ts +23 -0
  731. package/src/utils/$wallet.ts +3 -10
  732. package/src/utils/types.ts +58 -29
  733. package/src/wallets/Wallet.ts +33 -33
  734. package/src/wallets/WalletBsc.ts +13 -13
  735. package/src/wallets/WalletService.ts +43 -43
  736. package/test/Batch.spec.ts +89 -0
  737. package/test/BlockChainExplorer.spec.ts +24 -0
  738. package/test/ChainAccount.spec.ts +52 -9
  739. package/test/Fixtures.ts +36 -0
  740. package/test/Web3Client.spec.ts +81 -0
  741. package/test/browser/block.spec.ts +9 -0
  742. package/test/client/block.spec.ts +19 -0
  743. package/test/config.js +68 -0
  744. package/test/config.spec.ts +31 -0
  745. package/test/config.yml +4 -0
  746. package/test/contracts/ContractCreationResolver.spec.ts +26 -0
  747. package/test/ecrecover.spec.ts +63 -0
  748. package/test/erc2612/PermitToken.sol +10 -0
  749. package/test/erc4337/erc4337.spec.ts +407 -0
  750. package/test/fixtures/DaiTokenContract.ts +13 -13
  751. package/test/fixtures/abi/deployments.json +105 -0
  752. package/test/fixtures/abi/encode.json +23798 -0
  753. package/test/fixtures/abi/encodePacked.json +34586 -0
  754. package/test/fixtures/artifacts/AnyERC20/AnyERC20.json +340 -0
  755. package/test/fixtures/artifacts/AnyERC20/AnyERC20.sol +15 -0
  756. package/test/fixtures/contracts/AlphaKlimaSimple.sol +36 -0
  757. package/test/fixtures/contracts/Counter.sol +25 -0
  758. package/test/fixtures/contracts/Ecrecover.sol +33 -0
  759. package/test/fixtures/contracts/Foo.sol +49 -0
  760. package/test/fixtures/contracts/FooErc20.sol +7 -0
  761. package/test/fixtures/contracts/FooNestedModel.sol +6 -0
  762. package/test/fixtures/contracts/FreeToken.sol +263 -0
  763. package/test/fixtures/deployments/DeploymentsFoo.sol +14 -0
  764. package/test/fixtures/deployments/DeploymentsFooV2.sol +11 -0
  765. package/test/fixtures/deployments/DeploymentsFooV3.sol +12 -0
  766. package/test/fixtures/erc4337/core/BaseAccount.sol +107 -0
  767. package/test/fixtures/erc4337/core/BasePaymaster.sol +112 -0
  768. package/test/fixtures/erc4337/core/EntryPoint.sol +631 -0
  769. package/test/fixtures/erc4337/core/Helpers.sol +81 -0
  770. package/test/fixtures/erc4337/core/NonceManager.sol +40 -0
  771. package/test/fixtures/erc4337/core/SenderCreator.sol +28 -0
  772. package/test/fixtures/erc4337/core/StakeManager.sol +124 -0
  773. package/test/fixtures/erc4337/interfaces/IAccount.sol +34 -0
  774. package/test/fixtures/erc4337/interfaces/IAggregator.sol +36 -0
  775. package/test/fixtures/erc4337/interfaces/IEntryPoint.sol +205 -0
  776. package/test/fixtures/erc4337/interfaces/INonceManager.sol +27 -0
  777. package/test/fixtures/erc4337/interfaces/IPaymaster.sol +51 -0
  778. package/test/fixtures/erc4337/interfaces/IStakeManager.sol +104 -0
  779. package/test/fixtures/erc4337/interfaces/UserOperation.sol +91 -0
  780. package/test/fixtures/erc4337/samples/DepositPaymaster.sol +167 -0
  781. package/test/fixtures/erc4337/samples/IOracle.sol +11 -0
  782. package/test/fixtures/erc4337/samples/SimpleAccount.sol +138 -0
  783. package/test/fixtures/erc4337/samples/SimpleAccountFactory.sol +52 -0
  784. package/test/fixtures/erc4337/samples/TokenPaymaster.sol +113 -0
  785. package/test/fixtures/erc4337/samples/VerifyingPaymaster.sol +104 -0
  786. package/test/fixtures/erc4337/samples/bls/BLSAccount.sol +64 -0
  787. package/test/fixtures/erc4337/samples/bls/BLSAccountFactory.sol +61 -0
  788. package/test/fixtures/erc4337/samples/bls/BLSHelper.sol +232 -0
  789. package/test/fixtures/erc4337/samples/bls/BLSSignatureAggregator.sol +164 -0
  790. package/test/fixtures/erc4337/samples/bls/IBLSAccount.sol +16 -0
  791. package/test/fixtures/erc4337/samples/bls/lib/BLSOpen.sol +64 -0
  792. package/test/fixtures/erc4337/samples/bls/lib/hubble-contracts/contracts/libs/BLS.sol +440 -0
  793. package/test/fixtures/erc4337/samples/bls/lib/hubble-contracts/contracts/libs/BNPairingPrecompileCostEstimator.sol +108 -0
  794. package/test/fixtures/erc4337/samples/bls/lib/hubble-contracts/contracts/libs/ModExp.sol +652 -0
  795. package/test/fixtures/erc4337/samples/callback/TokenCallbackHandler.sol +61 -0
  796. package/test/fixtures/erc4337/utils/Exec.sol +70 -0
  797. package/test/fixtures/explorer/0xfbD2aa7efA2B46Ce3c58D7ab0D92C176c71499C0.html +2788 -0
  798. package/test/fixtures/gnosis/GnosisSafe.sol +422 -0
  799. package/test/fixtures/gnosis/GnosisSafeL2.sol +86 -0
  800. package/test/fixtures/gnosis/accessors/SimulateTxAccessor.sol +52 -0
  801. package/test/fixtures/gnosis/base/Executor.sol +27 -0
  802. package/test/fixtures/gnosis/base/FallbackManager.sol +53 -0
  803. package/test/fixtures/gnosis/base/GuardManager.sol +62 -0
  804. package/test/fixtures/gnosis/base/ModuleManager.sol +133 -0
  805. package/test/fixtures/gnosis/base/OwnerManager.sol +149 -0
  806. package/test/fixtures/gnosis/common/Enum.sol +8 -0
  807. package/test/fixtures/gnosis/common/EtherPaymentFallback.sol +13 -0
  808. package/test/fixtures/gnosis/common/SecuredTokenTransfer.sol +35 -0
  809. package/test/fixtures/gnosis/common/SelfAuthorized.sol +16 -0
  810. package/test/fixtures/gnosis/common/SignatureDecoder.sol +36 -0
  811. package/test/fixtures/gnosis/common/Singleton.sol +11 -0
  812. package/test/fixtures/gnosis/common/StorageAccessible.sol +47 -0
  813. package/test/fixtures/gnosis/external/GnosisSafeMath.sol +54 -0
  814. package/test/fixtures/gnosis/interfaces/ERC1155TokenReceiver.sol +49 -0
  815. package/test/fixtures/gnosis/interfaces/ERC721TokenReceiver.sol +24 -0
  816. package/test/fixtures/gnosis/interfaces/ERC777TokensRecipient.sol +13 -0
  817. package/test/fixtures/gnosis/interfaces/IERC165.sol +15 -0
  818. package/test/fixtures/gnosis/interfaces/ISignatureValidator.sol +20 -0
  819. package/test/fixtures/gnosis/interfaces/ViewStorageAccessible.sol +11 -0
  820. package/test/fixtures/gnosis/libraries/CreateCall.sol +30 -0
  821. package/test/fixtures/gnosis/libraries/GnosisSafeStorage.sol +21 -0
  822. package/test/fixtures/gnosis/libraries/MultiSend.sol +66 -0
  823. package/test/fixtures/gnosis/libraries/MultiSendCallOnly.sol +61 -0
  824. package/test/fixtures/gnosis/libraries/SignMessageLib.sol +34 -0
  825. package/test/fixtures/gnosis/proxies/GnosisSafeProxy.sol +44 -0
  826. package/test/fixtures/gnosis/proxies/GnosisSafeProxyFactory.sol +107 -0
  827. package/test/fixtures/gnosis/proxies/IProxyCreationCallback.sol +12 -0
  828. package/test/fixtures/mapping-setters/GTC.sol +611 -0
  829. package/test/fixtures/mapping-setters/UniswapV3Staker/Address.sol +189 -0
  830. package/test/fixtures/mapping-setters/UniswapV3Staker/FullMath.sol +124 -0
  831. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC165.sol +24 -0
  832. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC20.sol +77 -0
  833. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC20Minimal.sol +52 -0
  834. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721.sol +129 -0
  835. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Enumerable.sol +29 -0
  836. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Metadata.sol +27 -0
  837. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Permit.sol +32 -0
  838. package/test/fixtures/mapping-setters/UniswapV3Staker/IERC721Receiver.sol +21 -0
  839. package/test/fixtures/mapping-setters/UniswapV3Staker/IMulticall.sol +13 -0
  840. package/test/fixtures/mapping-setters/UniswapV3Staker/INonfungiblePositionManager.sol +180 -0
  841. package/test/fixtures/mapping-setters/UniswapV3Staker/IPeripheryImmutableState.sol +12 -0
  842. package/test/fixtures/mapping-setters/UniswapV3Staker/IPeripheryPayments.sol +28 -0
  843. package/test/fixtures/mapping-setters/UniswapV3Staker/IPoolInitializer.sol +22 -0
  844. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3Factory.sol +78 -0
  845. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3Pool.sol +24 -0
  846. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolActions.sol +103 -0
  847. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolDerivedState.sol +40 -0
  848. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolEvents.sol +121 -0
  849. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolImmutables.sol +35 -0
  850. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolOwnerActions.sol +23 -0
  851. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3PoolState.sol +116 -0
  852. package/test/fixtures/mapping-setters/UniswapV3Staker/IUniswapV3Staker.sol +183 -0
  853. package/test/fixtures/mapping-setters/UniswapV3Staker/IncentiveId.sol +14 -0
  854. package/test/fixtures/mapping-setters/UniswapV3Staker/Math.sol +31 -0
  855. package/test/fixtures/mapping-setters/UniswapV3Staker/Multicall.sol +28 -0
  856. package/test/fixtures/mapping-setters/UniswapV3Staker/NFTPositionInfo.sol +47 -0
  857. package/test/fixtures/mapping-setters/UniswapV3Staker/PoolAddress.sol +48 -0
  858. package/test/fixtures/mapping-setters/UniswapV3Staker/RewardMath.sol +42 -0
  859. package/test/fixtures/mapping-setters/UniswapV3Staker/TransferHelper.sol +60 -0
  860. package/test/fixtures/mapping-setters/UniswapV3Staker/TransferHelperExtended.sol +39 -0
  861. package/test/fixtures/mapping-setters/UniswapV3Staker/UniswapV3Staker.sol +350 -0
  862. package/test/fixtures/openzeppelin/Proxy.sol +11 -0
  863. package/test/fixtures/openzeppelin/ProxyAdmin.sol +11 -0
  864. package/test/fixtures/openzeppelin/beacon/BeaconProxy.sol +11 -0
  865. package/test/fixtures/openzeppelin/beacon/UpgradeableBeacon.sol +11 -0
  866. package/test/fixtures/parser/AlphaKlima.sol +36 -0
  867. package/test/fixtures/parser/CToken/CErc20.sol +228 -0
  868. package/test/fixtures/parser/CToken/CErc20Delegate.sol +44 -0
  869. package/test/fixtures/parser/CToken/CErc20Delegator.sol +476 -0
  870. package/test/fixtures/parser/CToken/CToken.sol +1156 -0
  871. package/test/fixtures/parser/CToken/CTokenInterfaces.sol +293 -0
  872. package/test/fixtures/parser/CToken/ComptrollerInterface.sol +72 -0
  873. package/test/fixtures/parser/CToken/EIP20Interface.sol +63 -0
  874. package/test/fixtures/parser/CToken/EIP20NonStandardInterface.sol +71 -0
  875. package/test/fixtures/parser/CToken/ErrorReporter.sol +127 -0
  876. package/test/fixtures/parser/CToken/ExponentialNoError.sol +171 -0
  877. package/test/fixtures/parser/CToken/InterestRateModel.sol +30 -0
  878. package/test/fixtures/parser/DAI.sol +194 -0
  879. package/test/fixtures/parser/PriceOracle.sol +1964 -0
  880. package/test/fixtures/parser/SAFE/Context.sol +24 -0
  881. package/test/fixtures/parser/SAFE/ERC20.sol +383 -0
  882. package/test/fixtures/parser/SAFE/IERC20.sol +82 -0
  883. package/test/fixtures/parser/SAFE/IERC20Metadata.sol +28 -0
  884. package/test/fixtures/parser/SAFE/Ownable.sol +76 -0
  885. package/test/fixtures/parser/SAFE/Pausable.sol +91 -0
  886. package/test/fixtures/parser/SAFE/SafeToken.sol +48 -0
  887. package/test/fixtures/parser/SAFE/TokenRescuer.sol +29 -0
  888. package/test/fixtures/parser/SomeERC20/Context.sol +24 -0
  889. package/test/fixtures/parser/SomeERC20/ERC20.sol +389 -0
  890. package/test/fixtures/parser/SomeERC20/IERC20.sol +82 -0
  891. package/test/fixtures/parser/SomeERC20/IERC20Metadata.sol +28 -0
  892. package/test/fixtures/parser/SomeERC20/Ownable.sol +83 -0
  893. package/test/fixtures/parser/SomeERC20/SomeToken.sol +210 -0
  894. package/test/fixtures/parser/TetherToken.sol +447 -0
  895. package/test/fixtures/parser/USDC.sol +2231 -0
  896. package/test/fixtures/parser/v04/ENJToken.sol +493 -0
  897. package/test/fixtures/parser/v04/MultiSigWallet.sol +371 -0
  898. package/test/fixtures/receipts/swap.json +93 -93
  899. package/test/fixtures/scan/WETH.sol +1533 -0
  900. package/test/fixtures/slots/FooStorage.sol +8 -0
  901. package/test/fixtures/slots/FooStorageBase.sol +6 -0
  902. package/test/fixtures/slots/Vault.sol +85 -0
  903. package/test/flashbots/flashbots.spec.ts +79 -0
  904. package/test/generate/class.spec.ts +293 -5
  905. package/test/generate/evm.spec.ts +71 -0
  906. package/test/generate/gen.spec.ts +69 -0
  907. package/test/generate/openzeppelin.spec.ts +22 -0
  908. package/test/generate/slotreader.spec.ts +34 -0
  909. package/test/hardhat/TestNode.ts +76 -61
  910. package/test/hardhat/compile.spec.ts +22 -0
  911. package/test/hardhat/deploy.spec.ts +579 -0
  912. package/test/hardhat/deployments/deployments.spec.ts +233 -0
  913. package/test/hardhat/deployments/proxy-layout.spec.ts +296 -0
  914. package/test/hardhat/forked.spec.ts +56 -0
  915. package/test/hardhat/gas.spec.ts +40 -0
  916. package/test/hardhat/permit.ts +33 -0
  917. package/test/hardhat/revert.spec.ts +30 -0
  918. package/test/indexer/BlocksWalker.spec.ts +51 -0
  919. package/test/indexer/EventsIndexer.spec.ts +170 -0
  920. package/test/json/JsonStore.spec.ts +170 -0
  921. package/test/node/block.spec.ts +11 -0
  922. package/test/ns.spec.ts +67 -30
  923. package/test/perf/calldata.spec.ts +93 -0
  924. package/test/receipt.spec.ts +52 -27
  925. package/test/rpc/rpc.spec.ts +353 -0
  926. package/test/rpc/rpcUtil.spec.ts +31 -0
  927. package/test/safe/safe.spec.ts +352 -0
  928. package/test/services/timelock.spec.ts +97 -0
  929. package/test/solidity/AbiExtractor.spec.ts +468 -0
  930. package/test/solidity/MappingSettersResolver.spec.ts +516 -0
  931. package/test/solidity/SlotsDump.spec.ts +154 -0
  932. package/test/solidity/SlotsParser.spec.ts +536 -0
  933. package/test/solidity/SlotsReader.spec.ts +388 -0
  934. package/test/solidity/Storage.spec.ts +404 -0
  935. package/test/structs/PackedRanges.spec.ts +56 -0
  936. package/test/subscriptions.spec.ts +127 -0
  937. package/test/token.spec.ts +17 -0
  938. package/test/tokens/oracles.spec.ts +51 -0
  939. package/test/utils/abi-parser-args.spec.ts +143 -0
  940. package/test/utils/abi-parser.spec.ts +141 -117
  941. package/test/utils/abi-types.spec.ts +31 -0
  942. package/test/utils/abi-utils.spec.ts +23 -0
  943. package/test/utils/abi.spec.ts +178 -0
  944. package/test/utils/address.spec.ts +66 -0
  945. package/test/utils/bigfloat/div.spec.ts +1919 -0
  946. package/test/utils/bigfloat/mod.spec.ts +1745 -0
  947. package/test/utils/bigfloat/mul.spec.ts +2085 -0
  948. package/test/utils/bigfloat/round.spec.ts +174 -0
  949. package/test/utils/bigfloat/sqrt.spec.ts +420 -0
  950. package/test/utils/bigint.spec.ts +39 -40
  951. package/test/utils/bytecode.spec.ts +107 -0
  952. package/test/utils/crypto.spec.ts +37 -0
  953. package/test/utils/date.spec.ts +9 -8
  954. package/test/utils/fn.spec.ts +39 -39
  955. package/test/utils/logbloom.spec.ts +17 -0
  956. package/test/utils/number.spec.ts +52 -41
  957. package/test/utils/rlp.spec.ts +142 -0
  958. package/test/utils/sign.spec.ts +327 -22
  959. package/tools/build-dts.ts +111 -0
  960. package/tools/copy-dts.ts +48 -0
  961. package/tsconfig-build.json +24 -24
  962. package/tsconfig-src.json +44 -36
  963. package/tsconfig.esm.json +12 -0
  964. package/tsconfig.json +34 -27
  965. package/tsconfig.umd.json +28 -0
  966. package/typings/globals/axios/index.d.ts +6 -6
  967. package/typings.json +6 -6
  968. package/contracts/abi/erc20.abi.json +0 -222
  969. package/contracts/gen/amm/AmmFactoryV2ContractBase.ts +0 -66
  970. package/contracts/gen/amm/AmmMasterChefV2ContractBase.ts +0 -158
  971. package/contracts/gen/amm/AmmPairContractV2Base.ts +0 -158
  972. package/contracts/gen/amm/AmmPairContractV3Base.ts +0 -125
  973. package/contracts/gen/amm/AmmRouterV2ContractBase.ts +0 -124
  974. package/contracts/gen/amm/AmmVaultV2ContractBase.ts +0 -214
  975. package/contracts/gen/base/ERC20Base.ts +0 -90
  976. package/contracts/gen/bsc/OneInchRouterV3Base.ts +0 -57
  977. package/contracts/gen/eth/WETHBase/WETHBase.sol +0 -756
  978. package/contracts/gen/eth/WETHBase.ts +0 -136
  979. package/contracts/gen/polygon/ERC20PolygonBase.ts +0 -305
  980. package/contracts/gen/polygon/WormholeBridgeContractBase/Address.sol +0 -216
  981. package/contracts/gen/polygon/WormholeBridgeContractBase/BeaconProxy.sol +0 -61
  982. package/contracts/gen/polygon/WormholeBridgeContractBase/Bridge.sol +0 -437
  983. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeGetters.sol +0 -70
  984. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeGovernance.sol +0 -142
  985. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeImplementation.sol +0 -34
  986. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeSetters.sol +0 -57
  987. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeState.sol +0 -52
  988. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeStructs.sol +0 -66
  989. package/contracts/gen/polygon/WormholeBridgeContractBase/BytesLib.sol +0 -510
  990. package/contracts/gen/polygon/WormholeBridgeContractBase/Context.sol +0 -23
  991. package/contracts/gen/polygon/WormholeBridgeContractBase/ERC1967Proxy.sol +0 -32
  992. package/contracts/gen/polygon/WormholeBridgeContractBase/ERC1967Upgrade.sol +0 -193
  993. package/contracts/gen/polygon/WormholeBridgeContractBase/IBeacon.sol +0 -15
  994. package/contracts/gen/polygon/WormholeBridgeContractBase/IERC20.sol +0 -81
  995. package/contracts/gen/polygon/WormholeBridgeContractBase/IWormhole.sol +0 -42
  996. package/contracts/gen/polygon/WormholeBridgeContractBase/Ownable.sol +0 -71
  997. package/contracts/gen/polygon/WormholeBridgeContractBase/Proxy.sol +0 -85
  998. package/contracts/gen/polygon/WormholeBridgeContractBase/SafeERC20.sol +0 -98
  999. package/contracts/gen/polygon/WormholeBridgeContractBase/StorageSlot.sol +0 -83
  1000. package/contracts/gen/polygon/WormholeBridgeContractBase/Structs.sol +0 -40
  1001. package/contracts/gen/polygon/WormholeBridgeContractBase/Token.sol +0 -12
  1002. package/contracts/gen/polygon/WormholeBridgeContractBase/TokenBridge.sol +0 -15
  1003. package/contracts/gen/polygon/WormholeBridgeContractBase/TokenImplementation.sol +0 -177
  1004. package/contracts/gen/polygon/WormholeBridgeContractBase/TokenState.sol +0 -31
  1005. package/contracts/gen/polygon/WormholeBridgeContractBase.ts +0 -231
  1006. package/contracts/gen/xdai/WXDaiTokenContractBase.ts +0 -136
  1007. package/dist/contracts/gen/amm/AmmFactoryV2ContractBase.js +0 -53
  1008. package/dist/contracts/gen/amm/AmmMasterChefV2ContractBase.js +0 -122
  1009. package/dist/contracts/gen/amm/AmmPairContractV2Base.js +0 -122
  1010. package/dist/contracts/gen/amm/AmmPairContractV3Base.js +0 -98
  1011. package/dist/contracts/gen/amm/AmmRouterV2ContractBase.js +0 -95
  1012. package/dist/contracts/gen/amm/AmmVaultV2ContractBase.js +0 -164
  1013. package/dist/contracts/gen/base/ERC20Base.js +0 -64
  1014. package/dist/contracts/gen/bsc/OneInchRouterV3Base.js +0 -47
  1015. package/dist/contracts/gen/eth/WETHBase.js +0 -96
  1016. package/dist/contracts/gen/polygon/ERC20PolygonBase.js +0 -233
  1017. package/dist/contracts/gen/polygon/WormholeBridgeContractBase.js +0 -172
  1018. package/dist/contracts/gen/xdai/WXDaiTokenContractBase.js +0 -96
  1019. package/dist/src/BlockchainExplorer/BlockChainExplorerFactory.js +0 -227
  1020. package/dist/src/BlockchainExplorer/BlockChainExplorerProvider.js +0 -32
  1021. package/dist/src/BlockchainExplorer/BlockNumberCache.js +0 -33
  1022. package/dist/src/BlockchainExplorer/Bscscan.js +0 -27
  1023. package/dist/src/BlockchainExplorer/Etherscan.js +0 -27
  1024. package/dist/src/BlockchainExplorer/IAbiProvider.js +0 -2
  1025. package/dist/src/BlockchainExplorer/IBlockChainExplorer.js +0 -2
  1026. package/dist/src/BlockchainExplorer/Polyscan.js +0 -27
  1027. package/dist/src/ChainAccounts.js +0 -69
  1028. package/dist/src/ChainAccountsService.js +0 -75
  1029. package/dist/src/Config.js +0 -7
  1030. package/dist/src/blocks/BlockDateResolver.js +0 -125
  1031. package/dist/src/bridges/BridgeFactory.js +0 -19
  1032. package/dist/src/bridges/hop/HopAddresses.js +0 -520
  1033. package/dist/src/bridges/hop/HopBridge.js +0 -327
  1034. package/dist/src/bridges/hop/contracts/gen.act.js +0 -43
  1035. package/dist/src/bridges/hop/contracts/polygon/Dai_l2AmmWrapperContract.js +0 -52
  1036. package/dist/src/bridges/hop/contracts/polygon/Dai_l2BridgeContract.js +0 -319
  1037. package/dist/src/bridges/hop/contracts/polygon/Dai_l2SaddleSwapContract.js +0 -178
  1038. package/dist/src/bridges/hop/contracts/polygon/Eth_l2AmmWrapperContract.js +0 -52
  1039. package/dist/src/bridges/hop/contracts/polygon/Eth_l2BridgeContract.js +0 -319
  1040. package/dist/src/bridges/hop/contracts/polygon/Eth_l2SaddleSwapContract.js +0 -178
  1041. package/dist/src/bridges/hop/contracts/polygon/Matic_l2AmmWrapperContract.js +0 -52
  1042. package/dist/src/bridges/hop/contracts/polygon/Matic_l2BridgeContract.js +0 -319
  1043. package/dist/src/bridges/hop/contracts/polygon/Matic_l2SaddleSwapContract.js +0 -178
  1044. package/dist/src/bridges/hop/contracts/polygon/Usdc_l2AmmWrapperContract.js +0 -52
  1045. package/dist/src/bridges/hop/contracts/polygon/Usdc_l2BridgeContract.js +0 -319
  1046. package/dist/src/bridges/hop/contracts/polygon/Usdc_l2SaddleSwapContract.js +0 -178
  1047. package/dist/src/bridges/hop/contracts/polygon/Usdt_l2AmmWrapperContract.js +0 -52
  1048. package/dist/src/bridges/hop/contracts/polygon/Usdt_l2BridgeContract.js +0 -319
  1049. package/dist/src/bridges/hop/contracts/polygon/Usdt_l2SaddleSwapContract.js +0 -178
  1050. package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2AmmWrapperContract.js +0 -52
  1051. package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2BridgeContract.js +0 -319
  1052. package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2SaddleSwapContract.js +0 -178
  1053. package/dist/src/bridges/models/IBridge.js +0 -2
  1054. package/dist/src/bridges/wormhole/contracts/WormholeBridgeContract.js +0 -15
  1055. package/dist/src/chains/PlatformFactory.js +0 -42
  1056. package/dist/src/chains/arbitrum/ArbTokenProvider.js +0 -40
  1057. package/dist/src/chains/arbitrum/ArbWeb3Client.js +0 -39
  1058. package/dist/src/chains/arbitrum/Arbiscan.js +0 -27
  1059. package/dist/src/chains/boba/BobaWeb3Client.js +0 -47
  1060. package/dist/src/chains/boba/Bobascan.js +0 -28
  1061. package/dist/src/chains/xdai/XDaiWeb3Client.js +0 -87
  1062. package/dist/src/chains/xdai/XDaiscan.js +0 -27
  1063. package/dist/src/chains/xdai/tokens/WXDaiTokenContract.js +0 -15
  1064. package/dist/src/clients/BscWeb3Client.js +0 -38
  1065. package/dist/src/clients/ClientEventsStream.js +0 -34
  1066. package/dist/src/clients/ClientPool.js +0 -560
  1067. package/dist/src/clients/ClientPoolStats.js +0 -52
  1068. package/dist/src/clients/EthWeb3Client.js +0 -35
  1069. package/dist/src/clients/HardhatWeb3Client.js +0 -56
  1070. package/dist/src/clients/PolyWeb3Client.js +0 -77
  1071. package/dist/src/clients/Web3Client.js +0 -186
  1072. package/dist/src/clients/Web3ClientFactory.js +0 -32
  1073. package/dist/src/clients/interfaces/IWeb3Client.js +0 -2
  1074. package/dist/src/clients/interfaces/IWeb3ClientStatus.js +0 -2
  1075. package/dist/src/clients/interfaces/IWeb3EndpointOptions.js +0 -2
  1076. package/dist/src/clients/model/ClientStatus.js +0 -9
  1077. package/dist/src/clients/model/PromiEventWrap.js +0 -52
  1078. package/dist/src/clients/model/SubscriptionWrap.js +0 -42
  1079. package/dist/src/clients/utils/ClientEndpoints.js +0 -27
  1080. package/dist/src/clients/utils/ClientErrorUtil.js +0 -30
  1081. package/dist/src/clients/utils/TxFactory.js +0 -14
  1082. package/dist/src/contracts/BscContract.js +0 -30
  1083. package/dist/src/contracts/Contract.js +0 -90
  1084. package/dist/src/contracts/ContractBase.js +0 -139
  1085. package/dist/src/contracts/ContractFactory.js +0 -17
  1086. package/dist/src/contracts/ContractProvider.js +0 -40
  1087. package/dist/src/contracts/ContractReader.js +0 -76
  1088. package/dist/src/contracts/ContractStream.js +0 -20
  1089. package/dist/src/contracts/ContractWriter.js +0 -62
  1090. package/dist/src/contracts/EthContract.js +0 -31
  1091. package/dist/src/contracts/TxContract.js +0 -37
  1092. package/dist/src/contracts/common/ERC20.js +0 -14
  1093. package/dist/src/contracts/common/ERC20Polygon.js +0 -14
  1094. package/dist/src/contracts/common/PoolPair.js +0 -23
  1095. package/dist/src/contracts/utils/AbiDeserializer.js +0 -89
  1096. package/dist/src/contracts/utils/ConvertUtils.js +0 -21
  1097. package/dist/src/contracts/utils/InputDataUtils.js +0 -87
  1098. package/dist/src/contracts/utils/TypeUtils.js +0 -24
  1099. package/dist/src/defi/OneInch/OneInchRouter.js +0 -14
  1100. package/dist/src/env/BigIntSerializer.js +0 -19
  1101. package/dist/src/gen/Ast.js +0 -12
  1102. package/dist/src/gen/ContractTemplate.js +0 -27
  1103. package/dist/src/gen/Generator.js +0 -180
  1104. package/dist/src/gen/GeneratorFromAbi.js +0 -361
  1105. package/dist/src/handlers/TokenHandler.js +0 -69
  1106. package/dist/src/indexer/BlocksTxIndexer.js +0 -52
  1107. package/dist/src/indexer/PendingTxIndexer.js +0 -96
  1108. package/dist/src/indexer/handlers/BlocksWalker.js +0 -306
  1109. package/dist/src/indexer/handlers/TxQueueLoader.js +0 -117
  1110. package/dist/src/json/JsonArrayStore.js +0 -296
  1111. package/dist/src/json/JsonObjectStore.js +0 -214
  1112. package/dist/src/json/JsonStore.spec.js +0 -83
  1113. package/dist/src/loggers/ILogger.js +0 -2
  1114. package/dist/src/loggers/LoggerService.js +0 -34
  1115. package/dist/src/loggers/TxLoggerService.js +0 -122
  1116. package/dist/src/models/IContractDetails.js +0 -2
  1117. package/dist/src/models/IToken.js +0 -2
  1118. package/dist/src/models/ITokenGlob.js +0 -6
  1119. package/dist/src/models/ITransactionDetails.js +0 -2
  1120. package/dist/src/models/TAddress.js +0 -2
  1121. package/dist/src/models/TBufferLike.js +0 -2
  1122. package/dist/src/models/THex.js +0 -2
  1123. package/dist/src/models/TPlatform.js +0 -2
  1124. package/dist/src/models/TResult.js +0 -2
  1125. package/dist/src/ns/NameService.js +0 -19
  1126. package/dist/src/ns/providers/EnsProvider.js +0 -41
  1127. package/dist/src/ns/providers/INsProvider.js +0 -2
  1128. package/dist/src/ns/providers/UDProvider.js +0 -39
  1129. package/dist/src/ns/utils/$ns.js +0 -17
  1130. package/dist/src/structs/PackedRanges.js +0 -186
  1131. package/dist/src/structs/PackedRanges.spec.js +0 -30
  1132. package/dist/src/tokens/TokenExchangeService.js +0 -110
  1133. package/dist/src/tokens/TokenExchanges/AmmBase/AmmUtilts.js +0 -17
  1134. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmFactoryV2Contract.js +0 -15
  1135. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmMasterChefV2Contract.js +0 -15
  1136. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Contract.js +0 -16
  1137. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Service.js +0 -144
  1138. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmRouterV2Contract.js +0 -15
  1139. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmVaultV2Contract.js +0 -15
  1140. package/dist/src/tokens/TokenExchanges/AmmBase/V3/AmmPairV3Contract.js +0 -22
  1141. package/dist/src/tokens/TokenExchanges/AmmV2ExchangeBase.js +0 -194
  1142. package/dist/src/tokens/TokenExchanges/OneInchExchange.js +0 -92
  1143. package/dist/src/tokens/TokenExchanges/PancakeswapExchange.js +0 -28
  1144. package/dist/src/tokens/TokenExchanges/SushiswapPolygonExchange.js +0 -28
  1145. package/dist/src/tokens/TokenExchanges/UniswapExchange.js +0 -28
  1146. package/dist/src/tokens/TokenOracles/AmmPriceV2Oracle.js +0 -319
  1147. package/dist/src/tokens/TokenOracles/TokenPriceStore.js +0 -108
  1148. package/dist/src/tokens/TokenPriceService.js +0 -196
  1149. package/dist/src/tokens/TokenPriceServiceProvider.js +0 -31
  1150. package/dist/src/tokens/TokenProviders/ATokenProvider.js +0 -38
  1151. package/dist/src/tokens/TokenProviders/ITokenProvider.js +0 -2
  1152. package/dist/src/tokens/TokenProviders/TPChain.js +0 -35
  1153. package/dist/src/tokens/TokenProviders/TPCoinmarketcap.js +0 -63
  1154. package/dist/src/tokens/TokenProviders/TPOneInch.js +0 -65
  1155. package/dist/src/tokens/TokenProviders/TPSushiswap.js +0 -89
  1156. package/dist/src/tokens/TokenProviders/TPUniswap.js +0 -84
  1157. package/dist/src/tokens/TokenService.js +0 -115
  1158. package/dist/src/tokens/TokenSwapService.js +0 -37
  1159. package/dist/src/tokens/TokenTransferService.js +0 -189
  1160. package/dist/src/tokens/TokensService.js +0 -236
  1161. package/dist/src/tokens/TokensServiceBsc.js +0 -18
  1162. package/dist/src/tokens/TokensServiceEth.js +0 -15
  1163. package/dist/src/tokens/TokensServiceFactory.js +0 -29
  1164. package/dist/src/tokens/TokensServicePolygon.js +0 -18
  1165. package/dist/src/tokens/TokensServiceXDai.js +0 -24
  1166. package/dist/src/tokens/defi/ISwapService.js +0 -2
  1167. package/dist/src/tokens/defi/paraswap/Paraswap.js +0 -135
  1168. package/dist/src/tokens/erc20/eth/WETH.js +0 -14
  1169. package/dist/src/tokens/utils/TokenUtils.js +0 -66
  1170. package/dist/src/txs/ITxConfig.js +0 -2
  1171. package/dist/src/txs/TxDataBuilder.js +0 -159
  1172. package/dist/src/txs/TxLogger.js +0 -119
  1173. package/dist/src/txs/TxProvider.js +0 -73
  1174. package/dist/src/txs/TxService.js +0 -19
  1175. package/dist/src/txs/TxWriter.js +0 -287
  1176. package/dist/src/txs/conditional/GasWatcherLogger.js +0 -61
  1177. package/dist/src/txs/conditional/GasWatcherService.js +0 -103
  1178. package/dist/src/txs/conditional/GasWatcherStore.js +0 -25
  1179. package/dist/src/txs/conditional/GasWatcherTx.js +0 -126
  1180. package/dist/src/txs/receipt/ITxLogItem.js +0 -2
  1181. package/dist/src/txs/receipt/TxLogParser.js +0 -27
  1182. package/dist/src/txs/receipt/TxLogsTransfer.js +0 -50
  1183. package/dist/src/txs/receipt/TxTopicInMemoryProvider.js +0 -41
  1184. package/dist/src/txs/receipt/TxTopicProvider.js +0 -25
  1185. package/dist/src/utils/$abiParser.js +0 -159
  1186. package/dist/src/utils/$abiType.js +0 -77
  1187. package/dist/src/utils/$abiUtils.js +0 -43
  1188. package/dist/src/utils/$address.js +0 -41
  1189. package/dist/src/utils/$array.js +0 -60
  1190. package/dist/src/utils/$bigint.js +0 -130
  1191. package/dist/src/utils/$block.js +0 -10
  1192. package/dist/src/utils/$class.js +0 -13
  1193. package/dist/src/utils/$config.js +0 -18
  1194. package/dist/src/utils/$contract.js +0 -67
  1195. package/dist/src/utils/$csv.js +0 -79
  1196. package/dist/src/utils/$date.js +0 -496
  1197. package/dist/src/utils/$fn.js +0 -117
  1198. package/dist/src/utils/$is.js +0 -40
  1199. package/dist/src/utils/$logger.js +0 -15
  1200. package/dist/src/utils/$number.js +0 -95
  1201. package/dist/src/utils/$object.js +0 -82
  1202. package/dist/src/utils/$path.js +0 -33
  1203. package/dist/src/utils/$promise.js +0 -13
  1204. package/dist/src/utils/$require.js +0 -127
  1205. package/dist/src/utils/$sign.js +0 -35
  1206. package/dist/src/utils/$signSerializer.js +0 -264
  1207. package/dist/src/utils/$wallet.js +0 -13
  1208. package/dist/src/utils/types.js +0 -2
  1209. package/dist/src/wallets/Wallet.js +0 -26
  1210. package/dist/src/wallets/WalletBsc.js +0 -17
  1211. package/dist/src/wallets/WalletService.js +0 -35
  1212. package/dist/src/www/utils/BlockChainExplorerFormatter.js +0 -15
  1213. package/src/BlockchainExplorer/BlockChainExplorerFactory.ts +0 -273
  1214. package/src/BlockchainExplorer/BlockChainExplorerProvider.ts +0 -26
  1215. package/src/BlockchainExplorer/BlockNumberCache.ts +0 -46
  1216. package/src/BlockchainExplorer/Bscscan.ts +0 -23
  1217. package/src/BlockchainExplorer/Etherscan.ts +0 -25
  1218. package/src/BlockchainExplorer/IAbiProvider.ts +0 -5
  1219. package/src/BlockchainExplorer/IBlockChainExplorer.ts +0 -37
  1220. package/src/BlockchainExplorer/Polyscan.ts +0 -23
  1221. package/src/ChainAccounts.ts +0 -72
  1222. package/src/ChainAccountsService.ts +0 -74
  1223. package/src/Config.ts +0 -34
  1224. package/src/bridges/hop/contracts/polygon/Dai_l2AmmWrapperContract.ts +0 -69
  1225. package/src/bridges/hop/contracts/polygon/Dai_l2BridgeContract.ts +0 -453
  1226. package/src/bridges/hop/contracts/polygon/Dai_l2SaddleSwapContract.ts +0 -264
  1227. package/src/bridges/hop/contracts/polygon/Eth_l2AmmWrapperContract.ts +0 -69
  1228. package/src/bridges/hop/contracts/polygon/Eth_l2BridgeContract.ts +0 -453
  1229. package/src/bridges/hop/contracts/polygon/Eth_l2SaddleSwapContract.ts +0 -264
  1230. package/src/bridges/hop/contracts/polygon/Matic_l2AmmWrapperContract.ts +0 -69
  1231. package/src/bridges/hop/contracts/polygon/Matic_l2BridgeContract.ts +0 -453
  1232. package/src/bridges/hop/contracts/polygon/Matic_l2SaddleSwapContract.ts +0 -264
  1233. package/src/bridges/hop/contracts/polygon/Usdc_l2AmmWrapperContract.ts +0 -69
  1234. package/src/bridges/hop/contracts/polygon/Usdc_l2BridgeContract.ts +0 -453
  1235. package/src/bridges/hop/contracts/polygon/Usdc_l2SaddleSwapContract.ts +0 -264
  1236. package/src/bridges/hop/contracts/polygon/Usdt_l2AmmWrapperContract.ts +0 -69
  1237. package/src/bridges/hop/contracts/polygon/Usdt_l2BridgeContract.ts +0 -453
  1238. package/src/bridges/hop/contracts/polygon/Usdt_l2SaddleSwapContract.ts +0 -264
  1239. package/src/bridges/hop/contracts/polygon/Wbtc_l2AmmWrapperContract.ts +0 -69
  1240. package/src/bridges/hop/contracts/polygon/Wbtc_l2BridgeContract.ts +0 -453
  1241. package/src/bridges/hop/contracts/polygon/Wbtc_l2SaddleSwapContract.ts +0 -264
  1242. package/src/bridges/wormhole/contracts/WormholeBridgeContract.ts +0 -14
  1243. package/src/chains/xdai/tokens/WXDaiTokenContract.json +0 -279
  1244. package/src/chains/xdai/tokens/WXDaiTokenContract.ts +0 -14
  1245. package/src/clients/HardhatWeb3Client.ts +0 -60
  1246. package/src/contracts/ContractFactory.ts +0 -19
  1247. package/src/contracts/common/ERC20.ts +0 -13
  1248. package/src/contracts/common/ERC20Polygon.ts +0 -13
  1249. package/src/contracts/common/PoolPair.ts +0 -22
  1250. package/src/defi/OneInch/OneInchRouter.ts +0 -13
  1251. package/src/json/JsonStore.spec.ts +0 -98
  1252. package/src/structs/PackedRanges.spec.ts +0 -38
  1253. package/src/structs/PackedRanges.ts +0 -207
  1254. package/src/tokens/TokenExchanges/AmmBase/V2/AmmFactoryV2Contract.ts +0 -15
  1255. package/src/tokens/TokenExchanges/AmmBase/V2/AmmMasterChefV2Contract.ts +0 -15
  1256. package/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Contract.ts +0 -17
  1257. package/src/tokens/TokenExchanges/AmmBase/V2/AmmRouterV2Contract.ts +0 -15
  1258. package/src/tokens/TokenExchanges/AmmBase/V2/AmmVaultV2Contract.ts +0 -15
  1259. package/src/tokens/TokenExchanges/AmmBase/V3/AmmPairV3Contract.ts +0 -24
  1260. package/src/tokens/TokenExchanges/UniswapExchange.ts +0 -31
  1261. package/src/tokens/TokenOracles/AmmPriceV2Oracle.ts +0 -440
  1262. package/src/tokens/erc20/eth/WETH.ts +0 -13
  1263. package/src/txs/ITxConfig.ts +0 -27
  1264. package/src/www/utils/BlockChainExplorerFormatter.ts +0 -13
  1265. package/test/client.spec.ts +0 -59
@@ -1,61 +1,159 @@
1
1
  import alot from 'alot';
2
2
  import memd from 'memd';
3
- import Web3 from 'web3';
4
- import { AbiItem } from 'web3-utils';
5
3
  import { $date } from '@dequanto/utils/$date';
6
4
  import { $number } from '@dequanto/utils/$number';
7
- import { PromiEvent } from 'web3-core';
8
- import { PromiEventWrap } from './model/PromiEventWrap';
5
+ import { $require } from '@dequanto/utils/$require';
6
+ import { $contract } from '@dequanto/utils/$contract';
7
+ import { $logger, l } from '@dequanto/utils/$logger';
8
+ import { $promise } from '@dequanto/utils/$promise';
9
+ import { $array } from '@dequanto/utils/$array';
10
+ import { $bigint } from '@dequanto/utils/$bigint';
11
+
12
+ import { PromiseEventWrap } from './model/PromiEventWrap';
9
13
  import { IWeb3ClientStatus } from './interfaces/IWeb3ClientStatus';
10
14
  import { ClientStatus } from './model/ClientStatus';
11
- import { ClientPoolTrace, ClientPoolTraceError } from './ClientPoolStats';
12
- import { class_Dfr } from 'atma-utils';
13
- import { TAddress } from '@dequanto/models/TAddress';
14
- import { ClientEventsStream } from './ClientEventsStream';
15
- import { Subscription } from 'web3-core-subscriptions';
15
+ import { ClientPoolTrace, ClientPoolTraceError, ErrorCode } from './ClientPoolStats';
16
+ import { class_Dfr, obj_extendDefaults } from 'atma-utils';
16
17
  import { ClientErrorUtil } from './utils/ClientErrorUtil';
17
- import { $fn } from '@dequanto/utils/$fn';
18
- import { $promise } from '@dequanto/utils/$promise';
18
+ import { IWeb3ClientOptions } from './interfaces/IWeb3Client';
19
+ import { RateLimitGuard } from './handlers/RateLimitGuard';
20
+ import { Web3BatchRequests } from './Web3BatchRequests';
21
+
22
+ import { HttpTransport } from '@dequanto/rpc/transports/HttpTransport';
23
+ import { WsTransport } from '@dequanto/rpc/transports/WsTransport';
24
+ import { Rpc } from '@dequanto/rpc/Rpc';
25
+
26
+ import { Web3Transport } from '@dequanto/rpc/transports/compatibility/Web3Transport';
27
+ import { PromiseEvent } from '@dequanto/class/PromiseEvent';
28
+ import { TTransport } from '@dequanto/rpc/transports/ITransport';
29
+
30
+ import { TRpc } from '@dequanto/rpc/RpcBase';
31
+ import { TEth } from '@dequanto/models/TEth';
32
+ import { $rpc } from '@dequanto/rpc/$rpc';
33
+ import { Web3 } from './compatibility/Web3';
19
34
 
35
+ export interface IPoolClientConfig {
36
+ url?: string
37
+ options?: TTransport.Options.Http | TTransport.Options.Ws
20
38
 
21
- interface IPoolClientConfig {
22
- url: string
39
+ /** Will be a pefered node for submitting transactions */
23
40
  safe?: boolean
24
41
  distinct?: boolean
42
+
43
+ web3?: TTransport.Transport
44
+
45
+ name?: string
46
+ /** Will be used only if manually requested with .getWeb3, or .getNodeUrl */
47
+ manual?: boolean
48
+
49
+ /** max block range per request when getting for example the past logs*/
50
+ fetchableBlockRange?: number
51
+
52
+ /** True if the node supports traceTransaction calls */
53
+ traceable?: boolean
54
+
55
+ // requestCout/timeSpan: e.g. 100/1min
56
+ rateLimit?: string
57
+
58
+ // the max block range to fetch per single request when getting Logs
59
+ blockRangeLimit?: string | number
60
+
61
+ // maximum of requests to be batched, otherwise batches will be paginated
62
+ batchLimit?: number
63
+
64
+ // Will be used only for the specified methods
65
+ methods?: {
66
+ exclude?: string[]
67
+ only?: string[]
68
+ }
25
69
  }
26
70
  export interface IPoolWeb3Request {
27
71
  ws?: boolean
28
72
  preferSafe?: boolean
29
73
  distinct?: boolean
74
+ name?: string
75
+
76
+ /** HTTP Web3 Client traces */
30
77
  trace?: ClientPoolTrace
78
+
79
+ /** Supported node features */
80
+ node?: {
81
+ // For specific url
82
+ url?: string
83
+
84
+ /** Supports traceTransaction */
85
+ traceable?: boolean
86
+ }
87
+
88
+ /** RPC method - will find the node that has the configuration */
89
+ method?: string
90
+
91
+ // Amount of batch requests to be performed, sothat we can choose the appropriate wClient and handle the rate limits correctly
92
+ batchRequestCount?: number
93
+
94
+ // By fetching logs, specifies the desired block range to query
95
+ blockRangeCount?: number
31
96
  }
97
+
32
98
  export class ClientPool {
33
99
 
34
100
  private discoveredPartial = false;
35
101
  private discoveredFull = false;
36
- private clients = this.config.map(cfg => new WClient(cfg));
102
+ private clients: WClient[];
37
103
  private ws: WClient;
38
104
 
39
- constructor (public config: { url: string }[] ) {
105
+ /** Minimum rate limit range to assume the RPC is alive */
106
+ MINIMUM_BLOCK_RANGE = 200
107
+
108
+ constructor(config: IWeb3ClientOptions) {
40
109
 
110
+ if (config.endpoints != null && config.endpoints.length > 0) {
111
+ this.clients = config.endpoints.map(cfg => new WClient(cfg))
112
+ } else if (config.web3 || config.provider) {
113
+ this.clients = [new WClient({ web3: config.web3 ?? config.provider })];
114
+ } else {
115
+ console.dir(config, { depth: null });
116
+ throw new Error(`Neither Node endpoints nor Web3 instance`)
117
+ }
41
118
  if (this.clients.length < 2) {
42
119
  this.discoveredPartial = true;
43
120
  this.discoveredFull = true;
44
121
  }
45
122
  }
46
123
 
47
- callSync <TResult> (fn: (web3: Web3) => TResult ): TResult {
124
+ // callSync<TResult>(fn: (web3: Web3) => TResult): TResult {
48
125
 
49
- let arr = this.clients.filter(x => x.status === 'ok');
50
- let wClient = arr[ $number.randomInt(0, arr.length) ];
51
- let { status, result } = wClient.callSync(fn);
52
- if (status == ClientStatus.Ok) {
53
- return result;
54
- }
55
- throw result;
126
+ // let arr = this.clients.filter(x => x.status === 'ok');
127
+ // let wClient = arr[$number.randomInt(0, arr.length)];
128
+ // let { status, result } = wClient.callSync(fn);
129
+ // if (status == ClientStatus.Ok) {
130
+ // return result;
131
+ // }
132
+ // throw result;
133
+ // }
134
+
135
+ async callBatched(data: {
136
+ requests: (rpc: Rpc) => Promise<Web3BatchRequests.IRpcRequest[]>
137
+ map?: (results: any[]) => any
138
+ }, opts?: IPoolWeb3Request) {
139
+ return this.call(async (wClient) => {
140
+ let requests = await data.requests(wClient.rpc);
141
+ let results = await wClient.callBatched(requests);
142
+ let mapped = data?.map?.(results) ?? results;
143
+ return mapped;
144
+ }, {
145
+ ...(opts ?? {}),
146
+
147
+ /**
148
+ * web3@1.6.0 has a bug with batch request via websockets, as the callback can stuck if a single response contains multiple IDs, as only the first one will be taken
149
+ * https://github.com/web3/web3.js/blob/9238e106294784b4a6a20af020765973f0437022/packages/web3-providers-ws/src/index.js#L128
150
+ */
151
+ ws: false
152
+ });
56
153
  }
57
154
 
58
- async call <TResult> (fn: (web3: Web3) => Promise<TResult>, opts?: IPoolWeb3Request): Promise<TResult> {
155
+ async call<TResult>(fn: (wClient: WClient) => Promise<TResult>, opts?: IPoolWeb3Request): Promise<TResult> {
156
+ // Client - Retries
59
157
  let used = new Map<WClient, number>();
60
158
  let errors = [];
61
159
 
@@ -71,55 +169,94 @@ export class ClientPool {
71
169
 
72
170
  error = new Error(`Live clients not found in \n${urls}`);
73
171
  }
74
- throw ClientPoolTraceError.create(error, opts?.trace);
172
+ throw ClientPoolTraceError.create(error, opts?.trace, ErrorCode.NO_LIVE_CLIENT);
75
173
  }
76
- let { status, result, error, time } = await wClient.call(fn);
77
174
 
175
+ let wClientUsage = used.get(wClient);
176
+ let { status, result, error, time } = await wClient.call(fn, opts);
177
+
178
+ if (error != null && error.data != null) {
179
+ error.data = $contract.decodeCustomError(error.data, []);
180
+ }
78
181
  opts
79
182
  ?.trace
80
183
  ?.onComplete({ status, error, time, url: wClient.config.url })
81
184
 
82
- used.set(wClient, 1);
185
+
186
+ if (wClientUsage == null) {
187
+ // per default NO_RETRIES
188
+ used.set(wClient, 0);
189
+ } else {
190
+ // decrease retry count
191
+ used.set(wClient, wClientUsage - 1);
192
+ }
193
+
83
194
  errors.push(error ?? result);
84
195
 
85
196
  if (status == ClientStatus.Ok) {
86
197
  return result;
87
198
  }
199
+ if (status == ClientStatus.RateLimited) {
200
+ if (wClientUsage == null) {
201
+ const RETRIES = 5;
202
+ used.set(wClient, RETRIES);
203
+ }
204
+ }
88
205
  if (status === ClientStatus.CallError) {
89
- let error = ClientPoolTraceError.create(errors.pop(), opts?.trace);
90
- //console.log(`Errored ${error.message}`);
206
+ let error = ClientPoolTraceError.create(errors.pop(), opts?.trace, ErrorCode.CALL);
91
207
  throw error;
92
208
  return result;
93
209
  }
210
+
211
+ // if not the CallError, process the while loop to check another NodeProvider
94
212
  }
95
213
  }
96
- async getWeb3 (options?: IPoolWeb3Request) {
97
- let wClient = await this.next(null, options);
214
+ async getRpc(options?: IPoolWeb3Request) {
215
+ let wClient = await this.getWrappedWeb3(options);
216
+ return wClient?.rpc;
217
+ }
218
+ async getWrappedWeb3(options?: IPoolWeb3Request) {
219
+ let wClient = await this.next(null, options, { manual: true });
98
220
  if (wClient == null) {
99
- throw new Error(`Not client found in ${this.clients.length} Clients`);
221
+ throw new Error(`No client found in ${this.clients.length} Clients with options: ${JSON.stringify(options)}`);
100
222
  }
101
- return wClient?.web3;
223
+ return wClient;
102
224
  }
103
- async getNodeURL (options?: IPoolWeb3Request) {
104
- let wClient = await this.next(null, options);
225
+ async getNodeURL(options?: IPoolWeb3Request) {
226
+ let wClient = await this.next(null, options, { manual: true });
105
227
  if (wClient == null) {
106
- throw new Error(`Not client found in ${this.clients.length} Clients`);
228
+ let stats = await this.getNodeStats();
229
+ let info = stats.map(x => ` ${x.url}. ERR: ${x.fail}; OK: ${x.success}; Ping: ${x.ping}`).join('\n');
230
+ let requirements = JSON.stringify(options);
231
+ throw new Error(`No alive node for ${requirements} found. \n ${info}`);
107
232
  }
108
233
  return wClient?.config.url;
109
234
  }
110
- async releaseWeb3 () {
235
+ async releaseWeb3() {
111
236
 
112
237
  }
113
238
 
114
- callPromiEvent <TResult extends PromiEvent<any>> (
115
- fn: (web3: Web3) => TResult
239
+ getOptionForFetchableRange(blockRangeLimits?: WClient['blockRangeLimits']): number {
240
+ const DEFAULT = blockRangeLimits?.blocks;
241
+ let max = alot(this.clients).max(x => x.config?.fetchableBlockRange ?? 0);
242
+ if (max === 0) {
243
+ return DEFAULT;
244
+ }
245
+ if (typeof DEFAULT === 'number') {
246
+ return Math.min(DEFAULT, max);
247
+ }
248
+ return max;
249
+ }
250
+
251
+ callPromiEvent<TResult extends PromiseEvent<any>>(
252
+ fn: (web3: WClient) => TResult
116
253
  , opts?: { preferSafe?: boolean, parallel?: number, silent?: boolean, distinct?: boolean }
117
- , used: Map<WClient, number> = new Map<WClient, number>()
254
+ , used: Map<WClient, number> = new Map<WClient, number>()
118
255
  , errors = []
119
- , root?: PromiEventWrap
256
+ , root?: PromiseEventWrap
120
257
  ): TResult {
121
258
 
122
- root = root ?? new PromiEventWrap();
259
+ root = root ?? new PromiseEventWrap();
123
260
 
124
261
  (async () => {
125
262
  let wClient = await this.next(used, opts);
@@ -141,12 +278,11 @@ export class ClientPool {
141
278
  return root as any as TResult;
142
279
  }
143
280
 
144
- let promiEvent = wClient.callPromiEvent(fn);
281
+ let promiseEvent = wClient.callPromiEvent(fn);
145
282
 
146
- root.bind(promiEvent);
283
+ root.bind(promiseEvent);
147
284
 
148
- promiEvent.on('error', async error => {
149
- console.log('!!client ERROR', error);
285
+ promiseEvent.on('error', async error => {
150
286
  error.message += ` (RPC: ${wClient.config.url})`;
151
287
  if (ClientErrorUtil.isConnectionFailed(error)) {
152
288
  this.callPromiEvent(
@@ -155,23 +291,16 @@ export class ClientPool {
155
291
  return;
156
292
  }
157
293
  if (ClientErrorUtil.isAlreadyKnown(error)) {
158
- console.log(`TxWriter ERROR ${error.message}. Check pending...`);
159
- let web3 = await this.getWeb3();
160
- let txs = await web3.eth.getPendingTransactions();
161
- console.log('PENDING ', txs?.map(x => x.hash));
162
- // throw anyways
163
- // this.callPromiEvent(
164
- // fn, opts, used, errors, root
165
- // );
166
- // return;
294
+ $logger.log(`TxWriter ERROR ${error.message}. Check pending...`);
295
+ let rpc = await this.getRpc();
296
+ let txs = await rpc.eth_pendingTransactions();
297
+ $logger.log('PENDING ', txs?.map(x => x.hash));
298
+ // throw anyway
167
299
  }
168
300
  root.emit('error', error);
169
301
  root.reject(error);
170
302
  });
171
- promiEvent.catch(error => {
172
- console.log('!!client CATCH', error);
173
- //root.reject(error);
174
- });
303
+
175
304
 
176
305
  used.set(wClient, 1);
177
306
 
@@ -196,15 +325,15 @@ export class ClientPool {
196
325
  return root as any as TResult;
197
326
  }
198
327
 
199
- getEventStream (address: TAddress, abi: any, event: string) {
200
- if (this.ws == null) {
201
- this.ws = this.clients.find(x => x.config.url.startsWith('ws'));
202
- }
203
- let stream = this.ws.getEventStream(address, abi, event);
204
- return stream;
205
- }
328
+ // getEventStream (address: TAddress, abi: TAbiItem[], event: string) {
329
+ // if (this.ws == null) {
330
+ // this.ws = this.clients.find(x => x.config.url?.startsWith('ws'));
331
+ // }
332
+ // let stream = this.ws.getEventStream(address, abi, event);
333
+ // return stream;
334
+ // }
206
335
 
207
- getNodeStats () {
336
+ getNodeStats() {
208
337
  return this
209
338
  .clients
210
339
  .filter(client => client.getRequestCount() > 0)
@@ -216,34 +345,79 @@ export class ClientPool {
216
345
  });
217
346
  }
218
347
 
219
- async getNodeInfos (): Promise<IWeb3ClientStatus[]> {
348
+ async getNodeInfos(options?: {
349
+ timeout?: number
350
+ calls?: ('net_peerCount' | 'eth_blockNumber' | 'eth_syncing' | 'net_version')[]
351
+ }): Promise<IWeb3ClientStatus[]> {
352
+ const Calls = {
353
+ async net_peerCount(wClient: WClient) {
354
+ /** @TODO Public nodes smt. do not allow net_peerCount methods. Allow to switch this on/off on node-url-config level */
355
+ try {
356
+ return await wClient.rpc.net_peerCount();
357
+ } catch (error) {
358
+ return `ERROR: ${error.message}`;
359
+ }
360
+ },
361
+ async eth_syncing(wClient: WClient): Promise<IWeb3ClientStatus['syncing']> {
362
+ let syncing = await wClient.rpc.eth_syncing();
363
+ if (syncing == null || typeof syncing === 'boolean') {
364
+ return null;
365
+ }
366
+ return syncing as any;
367
+ },
368
+ async net_version(wClient: WClient): Promise<IWeb3ClientStatus['node']> {
369
+ return await wClient.rpc.net_version()
370
+ },
371
+ async eth_blockNumber(wClient: WClient): Promise<IWeb3ClientStatus['blockNumber']> {
372
+ return await wClient.rpc.eth_blockNumber()
373
+ }
374
+ } as const;
375
+
376
+
377
+ async function query<TReturn extends Promise<any>>(wClient: WClient, method: (wClient: WClient) => TReturn): Promise<TReturn> {
378
+ let methodName = method.name;
379
+ let shouldCall = methodName === 'eth_blockNumber' || options?.calls == null || options?.calls.includes(methodName as any);
380
+ if (shouldCall === false) {
381
+ return null;
382
+ }
383
+ let promise = method(wClient);
384
+ return options?.timeout == null ? promise : $promise.timeout(promise, options.timeout);
385
+ }
386
+
220
387
  let nodes = await alot(this.clients).mapAsync(async (wClient, idx) => {
221
388
 
222
389
  let url = wClient.config.url;
223
390
  try {
224
391
  let start = Date.now();
225
- let [ syncing, blockNumber, peers ] = await Promise.all([
226
- wClient.eth.isSyncing(),
227
- wClient.eth.getBlockNumber(),
228
- /** @TODO Public nodes smt. do not allow net_peerCount methods. Allow to switch this on/off on node-url-config level */
229
- wClient.eth.net.getPeerCount(),
392
+ let [syncing, blockNumberUint, peers, node] = await Promise.all([
393
+ query(wClient, Calls.eth_syncing),
394
+ query(wClient, Calls.eth_blockNumber),
395
+ query(wClient, Calls.net_peerCount),
396
+ query(wClient, Calls.net_version),
230
397
  ]);
398
+ let blockNumber = Number(blockNumberUint);
231
399
 
232
- let ping = Math.round((Date.now() - start) / 3);
233
- let syncData = typeof syncing === 'boolean' ? null : syncing;
234
- return <IWeb3ClientStatus> {
400
+ let ping = Math.round((Date.now() - start) / 4);
401
+ let blockNumberBehind = 0;
402
+ if (syncing?.currentBlock && syncing.currentBlock < blockNumber) {
403
+ blockNumberBehind = blockNumber - Number(syncing.currentBlock);
404
+ blockNumber = Number(syncing.currentBlock);
405
+ }
406
+
407
+ return <IWeb3ClientStatus>{
235
408
  url: url,
236
- status: 'live',
237
- syncing: <any> syncData,
409
+ status: syncing ? 'sync' : (isNaN(blockNumber) ? 'off': 'live'),
410
+ syncing: syncing,
238
411
  blockNumber: blockNumber,
239
- blockNumberBehind: 0,
240
- peers: peers,
412
+ blockNumberBehind: blockNumberBehind,
413
+ peers: Number(peers),
241
414
  pingMs: ping,
415
+ node: node,
242
416
  i: idx,
243
417
  };
244
418
 
245
419
  } catch (error) {
246
- return <IWeb3ClientStatus> {
420
+ return <IWeb3ClientStatus>{
247
421
  url,
248
422
  status: 'error',
249
423
  error: error,
@@ -261,57 +435,53 @@ export class ClientPool {
261
435
  return nodes;
262
436
  }
263
437
 
264
- // callSubscribtion <TResult> (
265
- // event: any
266
- // , cb: (error, result) => void
267
- // , opts?: { preferSafe?: boolean }
268
- // , used: Map<WClient, number> = new Map<WClient, number>()
269
- // , errors = []
270
- // , root?: PromiEventWrap
271
- // ) {
272
- // root = root ?? new PromiEventWrap();
273
-
274
- // let wClient = this.next(used);
275
- // if (wClient == null) {
276
- // setTimeout(() => {
277
- // let error = new Error('Clients not found');
278
- // root.emit('error', error);
279
- // root.reject(error);
280
- // });
281
- // return root as any as TResult;
282
- // }
283
-
284
- // let promiEvent = wClient.callSubscription(fn);
285
-
286
- // root.bind(promiEvent);
287
-
288
- // promiEvent.on('error', error => {
289
- // if (ErrorUtil.isConnectionFailed(error)) {
290
- // this.callPromiEvent(
291
- // fn, opts, used, errors, root
292
- // );
293
- // return;
294
- // }
295
- // root.emit('error', error);
296
- // root.reject(error);
297
- // });
298
-
299
- // used.set(wClient, 1);
300
- // return root as any as TResult;
301
- // }
438
+ private async next(used?: Map<WClient, number>, opts?: IPoolWeb3Request, params?: { manual?: boolean }): Promise<WClient> {
439
+ let clients = this.clients;
440
+ if (params?.manual !== true) {
441
+ clients = clients.filter(x => x.config.manual !== true);
442
+ }
443
+ if (opts?.method != null) {
444
+ let clientsWithSupportedMethod = clients.filter(x => {
445
+ let methods = x.config.methods;
446
+ if (methods == null) {
447
+ return false;
448
+ }
449
+ if (methods.exclude?.includes(opts.method) === true) {
450
+ return false;
451
+ }
452
+ if (methods.only != null) {
453
+ return methods.only.includes(opts.method) === true;
454
+ }
455
+ return true;
456
+ });
457
+ if (clientsWithSupportedMethod.length > 0) {
458
+ // if there are no clients with manually specified method, use all clients
459
+ clients = clientsWithSupportedMethod;
460
+ }
461
+ } else {
462
+ // Unspecified method, so exclude clients with specific methods
463
+ clients = clients.filter(x => x.config.methods == null);
464
+ }
302
465
 
303
- private async next (used?: Map<WClient, number>, opts?: IPoolWeb3Request): Promise<WClient> {
304
466
  if (opts?.ws === true) {
305
467
  if (this.ws == null) {
306
- this.ws = this.clients.find(x => x.config.url.startsWith('ws'));
468
+ this.ws = clients.find(x => x.config.url?.startsWith('ws'));
469
+ }
470
+ if (this.ws == null) {
471
+ this.ws = clients.find(x => x.config.web3 != null);
307
472
  }
308
473
  return this.ws;
309
474
  }
310
475
 
311
- let clients = this.clients;
312
-
313
476
  if (opts?.ws === false) {
314
- clients = this.clients.filter(x => x.config.url.startsWith('http'));
477
+ // filter out all WS providers (important for batched requests, as web3js has issues submitting multiple batch requests and handle response IDs)
478
+ clients = clients.filter(x => x.config.url?.startsWith('http') || x.config.url == null);
479
+ }
480
+ if (opts?.node?.traceable === true) {
481
+ clients = clients.filter(x => x.config.traceable === true);
482
+ }
483
+ if (opts?.node?.url != null) {
484
+ clients = clients.filter(x => x.config.url === opts.node.url);
315
485
  }
316
486
 
317
487
  if (this.discoveredPartial === false) {
@@ -320,7 +490,7 @@ export class ClientPool {
320
490
  }
321
491
 
322
492
  // we check OK clients first
323
- let okClients = clients.filter(x => x.status === 'ok' );
493
+ let okClients = clients.filter(x => x.status === 'ok');
324
494
  if (okClients.length === 0) {
325
495
  // then switch to at least not off
326
496
  let notOffClients = clients.filter(x => x.status !== 'off');
@@ -333,7 +503,7 @@ export class ClientPool {
333
503
 
334
504
  let available = used == null
335
505
  ? clients
336
- : clients.filter(x => used.has(x) === false);
506
+ : clients.filter(x => used.has(x) === false || used.get(x) > 0);
337
507
 
338
508
  if (available.length === 0) {
339
509
  if (this.discoveredFull === false) {
@@ -344,7 +514,7 @@ export class ClientPool {
344
514
  }
345
515
  return null;
346
516
  }
347
- let healthy = available.filter(x => x.healthy());
517
+ let healthy = available.filter(x => x.healthy());
348
518
 
349
519
  if (opts?.preferSafe === true) {
350
520
  let safe = healthy.filter(x => x.config.safe === true);
@@ -362,9 +532,53 @@ export class ClientPool {
362
532
  let arr = healthy.length > 0
363
533
  ? healthy
364
534
  : available;
365
- let i = $number.randomInt(0, arr.length);
366
- let client = arr[i];
367
- return client;
535
+
536
+ if (opts?.blockRangeCount != null) {
537
+ let upperThreshold = alot(arr).max(x => x.blockRangeLimits.blocks) * .5;
538
+ arr = arr.filter(x => {
539
+ let blocks = x.blockRangeLimits.blocks;
540
+ if (blocks == null) {
541
+ // Block limit is unknown yet
542
+ return true;
543
+ }
544
+ if (blocks < this.MINIMUM_BLOCK_RANGE) {
545
+ // Was not possible to load a minimum amount of blocks
546
+ return false;
547
+ }
548
+ // Get if higher than 50% of max supported limit
549
+ return x.blockRangeLimits.blocks >= upperThreshold
550
+ });
551
+ }
552
+ return await this.getClientWithLowestWaitTime(arr);
553
+ }
554
+
555
+
556
+ private async getClientWithLowestWaitTime(clients: WClient[]): Promise<WClient> {
557
+ if (clients.length === 0) {
558
+ return null;
559
+ }
560
+
561
+ clients = $array.shuffle(clients);
562
+
563
+ let minWait = Infinity;
564
+ let minClient: WClient = null;
565
+ for (let i = 0; i < clients.length; i++) {
566
+ let client = clients[i];
567
+ let waitMs = client.getRateLimitGuardTime();
568
+ if (waitMs === 0) {
569
+ return client;
570
+ }
571
+ if (minWait > waitMs) {
572
+ minWait = waitMs;
573
+ minClient = client;
574
+ }
575
+ }
576
+
577
+ const MAX_WAIT = 60_000;
578
+ if (minWait > MAX_WAIT) {
579
+ throw new Error(`rate limit overflows. Waiting ${minWait}ms`);
580
+ }
581
+ return minClient;
368
582
  }
369
583
 
370
584
  /**
@@ -375,7 +589,7 @@ export class ClientPool {
375
589
  * - Complete Promise - when all clients are resolved
376
590
  */
377
591
  @memd.deco.memoize({ perInstance: true })
378
- private discoverLive (): { ready: class_Dfr, completed: class_Dfr } {
592
+ private discoverLive(): { ready: class_Dfr, completed: class_Dfr } {
379
593
 
380
594
  this.clients.forEach(x => x.status = 'ping');
381
595
 
@@ -397,17 +611,17 @@ export class ClientPool {
397
611
  (async () => {
398
612
  let nodeInfosAsync = clients.map(async (wClient, idx) => {
399
613
  try {
400
- let clientInfo = {
614
+ let clientInfo = <TClientInfo>{
401
615
  i: idx,
402
616
  error: null,
403
617
  status: null,
404
618
  blockNumberBehind: 0,
405
- blockNumber: await $fn.timeoutPromise(wClient.eth.getBlockNumber(), 20_000)
619
+ blockNumber: await $promise.timeout(wClient.rpc.eth_blockNumber(), 20_000)
406
620
  };
407
621
  onIntermediateSuccess(clientInfo);
408
622
  return clientInfo;
409
623
  } catch (error) {
410
- return <TClientInfo> {
624
+ return <TClientInfo>{
411
625
  i: idx,
412
626
  error: error,
413
627
  status: 'off',
@@ -423,6 +637,7 @@ export class ClientPool {
423
637
  let messages = nodeInfos.map(x => {
424
638
  let url = clients[x.i]?.config.url;
425
639
  let message = x.error?.message;
640
+ console.log(`Stack`, x.error?.stack);
426
641
  return ` ${url}: ${message}`;
427
642
  }).join('\n');
428
643
 
@@ -435,8 +650,8 @@ export class ClientPool {
435
650
 
436
651
  const blockLatest = alot(nodeInfos).max(x => x.blockNumber);
437
652
 
438
- nodeInfos.forEach(node => {
439
- node.blockNumberBehind = node.blockNumber - blockLatest;
653
+ nodeInfos.forEach(info => {
654
+ info.blockNumberBehind = info.blockNumber - blockLatest;
440
655
  });
441
656
  nodeInfos.forEach(info => {
442
657
  this.clients[info.i].status = isOk(info);
@@ -450,23 +665,24 @@ export class ClientPool {
450
665
  }
451
666
  })();
452
667
 
453
- function isOk (info: TClientInfo): WClient['status'] {
668
+ function isOk(info: TClientInfo): WClient['status'] {
454
669
  if (info.error) {
455
670
  return 'off';
456
671
  }
457
- if (isNaN(info.blockNumber) || info.blockNumberBehind < -200) {
672
+ if (info.blockNumber == null || info.blockNumberBehind < -200n) {
458
673
  return 'off';
459
674
  }
460
675
  return 'ok';
461
676
  }
462
- function onIntermediateSuccess (info: TClientInfo) {
463
- const TOLERATE_BLOCK_COUNT = 5;
677
+ function onIntermediateSuccess(info: TClientInfo) {
678
+ const TOLERATE_BLOCK_COUNT = 5n;
464
679
  const WAIT_POOL_OK = Math.min(3, clientInfos.length);
680
+ const count = clientInfos.push(info);
465
681
 
466
682
  if (isReady === true) {
467
683
  return;
468
684
  }
469
- if (clientInfos.push(info) < WAIT_POOL_OK) {
685
+ if (count < WAIT_POOL_OK) {
470
686
  return;
471
687
  }
472
688
 
@@ -480,8 +696,9 @@ export class ClientPool {
480
696
  }
481
697
  if (ok.length >= WAIT_POOL_OK) {
482
698
  ok.forEach(info => {
483
- clients[info.i].status = 'ok';
699
+ clients[info.i].status = info.status = 'ok';
484
700
  });
701
+
485
702
  isReady = true;
486
703
  ready.resolve();
487
704
  }
@@ -491,9 +708,9 @@ export class ClientPool {
491
708
  }
492
709
  }
493
710
 
494
- class WClient {
711
+ export class WClient {
495
712
  lastStatus = 0;
496
- lastDate: Date = new Date(2000);
713
+ lastDate = new Date(2000).getTime();
497
714
 
498
715
  status: 'ok' | 'off' | 'ping' = 'ok'
499
716
 
@@ -503,10 +720,21 @@ class WClient {
503
720
  ping: 0
504
721
  };
505
722
 
506
- web3: Web3
507
- eth: Web3['eth']
723
+ rpc: Rpc
724
+
725
+ config: IPoolClientConfig
726
+ rateLimitGuard: RateLimitGuard
508
727
 
509
- healthy () {
728
+ /** For getLogs method, as some providers limit the range request or page result value */
729
+ blockRangeLimits: {
730
+ blocks?: number
731
+ results?: number
732
+ }
733
+
734
+ // Max requests per single Web3 Batch request
735
+ batchLimit?: number
736
+
737
+ healthy() {
510
738
  if (this.getRequestCount() === 0) {
511
739
  return true;
512
740
  }
@@ -517,21 +745,91 @@ class WClient {
517
745
  if (health > .5) {
518
746
  return true;
519
747
  }
520
- if (Date.now() - this.lastDate.getTime() > $date.parseTimespan('10m')) {
748
+ if (Date.now() - this.lastDate > $date.parseTimespan('10m')) {
521
749
  return true;
522
750
  }
523
751
  return false;
524
752
  }
525
753
 
526
- constructor (public config: IPoolClientConfig) {
527
- this.web3 = new Web3(config.url);
528
- this.web3.eth.handleRevert = true;
529
- this.eth = this.web3.eth;
754
+ private updateRateLimitInfo(info: ReturnType<typeof RateLimitGuard['extractRateLimitFromError']>) {
755
+ if (this.rateLimitGuard == null) {
756
+ this.rateLimitGuard = new RateLimitGuard({
757
+ id: this.config.url ?? 'web3',
758
+ rates: []
759
+ });
760
+ }
761
+ this.rateLimitGuard.updateRateLimitInfo(info);
530
762
  }
763
+ public updateBlockRangeInfo(info: WClient['blockRangeLimits']) {
764
+ if (this.blockRangeLimits == null) {
765
+ this.blockRangeLimits = {};
766
+ }
767
+ if (info.blocks != null) {
768
+ this.blockRangeLimits.blocks = info.blocks;
769
+ }
770
+ if (info.results != null) {
771
+ this.blockRangeLimits.results = info.results;
772
+ }
773
+ }
774
+
775
+ constructor(mix: IPoolClientConfig) {
776
+ const hasUrl = 'url' in mix && typeof mix.url === 'string';
777
+ const hasWeb3 = 'web3' in mix && typeof mix.web3 != null;
778
+ if (hasUrl || hasWeb3) {
779
+ this.config = mix;
780
+ let transport = mix as TTransport.Options.Any;
781
+ this.rpc = new Rpc(transport);
782
+ } else {
783
+ throw new Error(`Neither Node URL nor Web3 Instance in argument`);
784
+ }
785
+
786
+ this.blockRangeLimits = { blocks: Infinity };
787
+
788
+ if (mix.rateLimit) {
789
+ let rates = RateLimitGuard.parseRateLimit(mix.rateLimit);
790
+ this.rateLimitGuard = new RateLimitGuard({
791
+ id: this.config?.url ?? 'web3',
792
+ rates: rates
793
+ })
794
+ }
795
+ if (mix.blockRangeLimit) {
796
+ this.updateBlockRangeInfo({
797
+ blocks: $number.parse(mix.blockRangeLimit)
798
+ })
799
+ }
800
+ if (mix.batchLimit) {
801
+ this.batchLimit = $number.parse(mix.batchLimit);
802
+ }
803
+ if (mix.fetchableBlockRange) {
804
+ this.updateBlockRangeInfo({
805
+ blocks: $number.parse(mix.fetchableBlockRange)
806
+ });
807
+ }
808
+ }
809
+
810
+
811
+ // @memd.deco.memoize()
812
+ // private createWebSocketClient(url: string) {
813
+ // let { options } = this.config;
814
+
815
+ // // options = obj_extendDefaults(options ?? {}, { clientConfig: {} });
816
+ // // obj_extendDefaults((options as TTransport.Options.Ws).clientConfig, {
817
+ // // // default frame size is too small
818
+ // // maxReceivedFrameSize: 50_000_000,
819
+ // // maxReceivedMessageSize: 50_000_000,
820
+ // // });
821
+
822
+ // let transport = new WsTransport({ url, ...options });
823
+
824
+ // // transport.on('close', ev => this.websocket.code = ev.code);
825
+ // // transport.on('connect', _ => this.websocket.code = WS_STATE.CONNECTED);
826
+
827
+ // return transport;
828
+ // }
531
829
 
532
- async send <TResult> (fn: (web3: Web3) => PromiEvent<TResult> ): Promise<{ status: ClientStatus, error?, result?: PromiEvent<TResult> }> {
830
+ async send<TResult>(fn: (web3: WClient) => PromiseEvent<TResult>): Promise<{ status: ClientStatus, error?, result?: PromiseEvent<TResult> }> {
533
831
  return new Promise((resolve, reject) => {
534
- let result = fn(this.web3);
832
+ let result = fn(this);
535
833
 
536
834
  result.then(
537
835
  _ => {
@@ -540,7 +838,7 @@ class WClient {
540
838
  resolve({ status: ClientStatus.Ok, result })
541
839
  },
542
840
  error => {
543
- if (ClientErrorUtil.isConnectionFailed (error)) {
841
+ if (ClientErrorUtil.isConnectionFailed(error)) {
544
842
  this.lastStatus = ClientStatus.NetworkError;
545
843
  this.requests.fail++;
546
844
  resolve({ status: ClientStatus.NetworkError, error });
@@ -550,43 +848,117 @@ class WClient {
550
848
  );
551
849
  });
552
850
  }
851
+ sendSignedTransaction (tx: TEth.Hex) {
852
+ let promise = new PromiseEvent<TEth.TxReceipt>();
853
+ this
854
+ .rpc
855
+ .eth_sendRawTransaction(tx)
856
+ .then(async hash => {
857
+ promise.emit('transactionHash', hash);
858
+ let receipt = await $rpc.waitForReceipt(this.rpc, hash);
859
+ promise.resolve(receipt);
860
+ }, error => {
861
+ promise.reject(error);
862
+ });
863
+ return promise;
864
+ }
865
+ sendTransaction (tx) {
866
+ let promise = new PromiseEvent<TEth.TxReceipt>();
867
+ this
868
+ .rpc
869
+ .eth_sendTransaction(tx)
870
+ .then(async hash => {
871
+ promise.emit('transactionHash', hash);
872
+ let receipt = await $rpc.waitForReceipt(this.rpc, hash);
873
+ promise.resolve(receipt);
874
+ }, error => {
875
+ promise.reject(error);
876
+ });
877
+ return promise;
878
+ }
553
879
 
554
- // async call <TResult> (fn: (web3: Web3) => Promise<TResult> ): Promise<{ status: number, result?: TResult }> {
555
- // try {
556
- // let result = await fn(this.web3);
557
-
558
- // this.lastStatus = Status.Ok;
559
- // this.requests.success++;
880
+ async callBatched<TResult = any>(requests: TRpc.IRpcAction[]): Promise<TResult[]> {
881
+ let total = requests.length;
882
+ let spanLimit = this.getSpanLimit(requests.length);
883
+ let output = [] as TResult[];
884
+ let errors = [];
885
+ let pageIdx = 0;
886
+ while (requests.length > 0) {
887
+ ++pageIdx;
888
+ let page = requests.splice(0, spanLimit);
889
+ if (requests.length > 0 || pageIdx > 1) {
890
+ $logger.throttled(`Sending ${page.length} batched requests. Loaded ${output.length}/${total}`);
891
+ }
892
+ let { status, error, result: pageResult } = await this.call(async (client) => {
893
+ let batch = new Web3BatchRequests.BatchRequest(client.rpc, page);
894
+ let results = await batch.execute();
895
+ return results;
896
+ });
897
+ if (status === ClientStatus.Ok) {
898
+ output.push(...pageResult);
899
+ continue;
900
+ }
901
+ if (status === ClientStatus.RateLimited) {
902
+ spanLimit = this.getSpanLimit(requests.length);
903
+ }
904
+ errors.push(error);
905
+ if (errors.length > 2) {
906
+ throw error;
907
+ }
908
+ requests.unshift(...page);
909
+ }
910
+ return output;
911
+ }
560
912
 
561
- // return { status: Status.Ok, result };
913
+ async call<TResult extends PromiseLike<any>>(fn: (wClient: WClient) => TResult, options?: {
914
+ // For the rate limit guard, to make sure we wait enough time to proceed with batch request for example
915
+ batchRequestCount?: number
916
+ }): Promise<{ status: ClientStatus, error?, result?: Awaited<TResult>, time: number }> {
917
+ let now = Date.now();
918
+ await this.rateLimitGuard?.wait(options?.batchRequestCount ?? 1, now);
919
+
920
+ let connectionError = await this.ensureConnected();
921
+ if (connectionError) {
922
+ return {
923
+ status: ClientStatus.NetworkError,
924
+ result: null,
925
+ error: connectionError,
926
+ time: Date.now() - now
927
+ };
928
+ }
562
929
 
563
- // } catch (error) {
564
- // console.log(error);
565
- // if (this.isConnectionFailed (error)) {
566
- // this.lastStatus = Status.NetworkError;
567
- // this.requests.fail++;
568
- // return { status: Status.NetworkError, result: error };
569
- // }
570
- // return { status: Status.CallError, result: error }
571
- // }
572
- // }
573
- async call <TResult extends PromiseLike<any>> (fn: (web3: Web3) => TResult ): Promise<{ status: ClientStatus, error?, result?: TResult, time: number }> {
574
930
  return new Promise((resolve, reject) => {
575
931
  let start = Date.now();
576
- let result = fn(this.web3);
932
+ let result = fn(this);
577
933
 
578
934
  result.then(
579
- _ => {
935
+ result => {
580
936
  let time = Date.now() - start;
581
937
  let status = ClientStatus.Ok;
582
938
  this.onComplete(status, time);
939
+ this.rateLimitGuard?.onComplete(now);
583
940
  resolve({ status, result, time })
584
941
  },
585
942
  error => {
586
943
  let time = Date.now() - start;
587
- let status = ClientStatus.CallError;
944
+ let status = ClientStatus.CallError;
945
+
946
+ if (RateLimitGuard.isRateLimited(error)) {
947
+ status = ClientStatus.RateLimited;
588
948
 
589
- if (ClientErrorUtil.isConnectionFailed (error)) {
949
+ let rateLimitInfo = RateLimitGuard.extractRateLimitFromError(error);
950
+ if (rateLimitInfo == null) {
951
+ l`RateLimit not extracted: ${error.message}`;
952
+ }
953
+ this.updateRateLimitInfo(rateLimitInfo);
954
+ } else if (RateLimitGuard.isBatchLimit(error)) {
955
+ status = ClientStatus.RateLimited;
956
+ let limit = RateLimitGuard.extractBatchLimitFromError(error);
957
+ if (limit !== this.batchLimit) {
958
+ l`yellow<New BatchLimit> for "${this.config.url}" bold<${limit}>`;
959
+ this.batchLimit = limit;
960
+ }
961
+ } else if (ClientErrorUtil.isConnectionFailed(error)) {
590
962
  status = ClientStatus.NetworkError;
591
963
  }
592
964
  this.onComplete(status, time);
@@ -596,10 +968,10 @@ class WClient {
596
968
  });
597
969
  }
598
970
 
599
- callPromiEvent <TResult extends PromiEvent<any>> (fn: (web3: Web3) => TResult ): TResult {
600
- let result = fn(this.web3);
971
+ callPromiEvent<TResult extends PromiseEvent<any>>(fn: (web3: WClient) => TResult): TResult {
972
+ let result = fn(this);
601
973
  result.on('error', error => {
602
- if (ClientErrorUtil.isConnectionFailed (error)) {
974
+ if (ClientErrorUtil.isConnectionFailed(error)) {
603
975
  this.lastStatus = ClientStatus.NetworkError;
604
976
  this.requests.fail++;
605
977
  }
@@ -610,10 +982,10 @@ class WClient {
610
982
  })
611
983
  return result;
612
984
  }
613
- callSubscription <TResult extends PromiEvent<any>> (fn: (web3: Web3) => TResult ): TResult {
614
- let result = fn(this.web3);
985
+ callSubscription<TResult extends PromiseEvent<any>>(fn: (web3: WClient) => TResult): TResult {
986
+ let result = fn(this);
615
987
  result.on('error', error => {
616
- if (ClientErrorUtil.isConnectionFailed (error)) {
988
+ if (ClientErrorUtil.isConnectionFailed(error)) {
617
989
  this.lastStatus = ClientStatus.NetworkError;
618
990
  this.requests.fail++;
619
991
  }
@@ -625,32 +997,18 @@ class WClient {
625
997
  return result;
626
998
  }
627
999
 
628
- getEventStream (address: TAddress, abi: AbiItem[], event: string, options = {}): ClientEventsStream {
629
- let eventAbi = abi.find(x => x.type === 'event' && x.name === event);
630
- if (eventAbi == null) {
631
- let events = abi.filter(x => x.type === 'event').map(x => x.name).join(', ');
632
- throw new Error(`Event "${event}" not present in ABI. Events: ${ events }`);
633
- }
634
- const contract = new this.eth.Contract(abi, address);
635
- const stream = contract
636
- .events
637
- [event](options);
638
-
639
- const worker = new ClientEventsStream(contract, eventAbi, stream)
640
- return worker;
641
- }
642
1000
 
643
- callSync <TResult> (fn: (web3: Web3) => TResult ): { status: number, result?: TResult } {
644
- try {
645
- let result = fn(this.web3);
646
- return { status: ClientStatus.Ok, result };
1001
+ // callSync<TResult>(fn: (web3: Web3) => TResult): { status: number, result?: TResult } {
1002
+ // try {
1003
+ // let result = fn(this.web3);
1004
+ // return { status: ClientStatus.Ok, result };
647
1005
 
648
- } catch (error) {
649
- return { status: ClientStatus.CallError, result: error }
650
- }
651
- }
1006
+ // } catch (error) {
1007
+ // return { status: ClientStatus.CallError, result: error }
1008
+ // }
1009
+ // }
652
1010
 
653
- onComplete (status: ClientStatus, timeMs: number) {
1011
+ onComplete(status: ClientStatus, timeMs: number) {
654
1012
  let callCount = this.getRequestCount();
655
1013
  let ping = this.requests.ping;
656
1014
 
@@ -666,8 +1024,59 @@ class WClient {
666
1024
  this.requests.ping = (ping * callCount + timeMs) / (callCount + 1);
667
1025
  }
668
1026
 
669
- getRequestCount () {
1027
+ async ensureConnected(): Promise<Error> {
1028
+ // if (this.config.url?.startsWith('ws')) {
1029
+ // if (this.websocket.code === WS_STATE.ECONNRESET) {
1030
+ // // recreate connection when ERRCONNRESET was thrown previously
1031
+ // this.createWebSocketClient();
1032
+ // }
1033
+
1034
+ // let web3 = this.web3;
1035
+ // let provider = web3.eth.currentProvider as WebsocketProvider & { url };
1036
+ // if (provider.connected === false) {
1037
+ // provider.connect();
1038
+ // try {
1039
+ // await $promise.waitForTrue(() => provider.connected, {
1040
+ // intervalMs: 200,
1041
+ // timeoutMessage: `Couldn't connect to WS ${provider.url}`,
1042
+ // timeoutMs: 20_000
1043
+ // });
1044
+ // return null;
1045
+ // } catch (error) {
1046
+ // return error;
1047
+ // }
1048
+ // }
1049
+ // }
1050
+ return null;
1051
+ }
1052
+
1053
+ getRequestCount() {
670
1054
  return this.requests.success + this.requests.fail;
671
1055
  }
672
1056
 
1057
+ /**
1058
+ * Checks the rate limit wait time, so that the POOL can select the wClient with shortest wait time
1059
+ **/
1060
+ getRateLimitGuardTime() {
1061
+ return this.rateLimitGuard?.checkWaitTime() ?? 0;
1062
+ }
1063
+
1064
+ private getSpanLimit(requestCount: number) {
1065
+ let a = this.rateLimitGuard?.getSpanLimit() ?? Infinity;
1066
+ let b = this.batchLimit ?? Infinity;
1067
+
1068
+ let min = requestCount === 0
1069
+ ? Math.min(a, b)
1070
+ : Math.min(a, b, requestCount);
1071
+ $require.gt(min, 0, `Span-limit must be > 0. ${a}/${b}/${requestCount}`);
1072
+ return min;
1073
+ }
673
1074
  }
1075
+
1076
+
1077
+
1078
+ const WS_STATE = {
1079
+ NOTSET: 0,
1080
+ CONNECTED: 1,
1081
+ ECONNRESET: 1006
1082
+ };