dequanto 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (477) hide show
  1. package/.vscode/settings.json +11 -0
  2. package/actions/gen.act.ts +38 -0
  3. package/actions/tokens.act.ts +12 -0
  4. package/configs/dequanto.yml +51 -0
  5. package/contracts/abi/erc20.abi.json +222 -0
  6. package/contracts/gen/amm/AmmFactoryV2ContractBase.ts +66 -0
  7. package/contracts/gen/amm/AmmMasterChefV2ContractBase.ts +158 -0
  8. package/contracts/gen/amm/AmmPairContractV2Base.ts +158 -0
  9. package/contracts/gen/amm/AmmPairContractV3Base.ts +125 -0
  10. package/contracts/gen/amm/AmmRouterV2ContractBase.ts +124 -0
  11. package/contracts/gen/amm/AmmVaultV2ContractBase.ts +214 -0
  12. package/contracts/gen/base/ERC20Base.ts +90 -0
  13. package/contracts/gen/bsc/OneInchRouterV3Base.ts +57 -0
  14. package/contracts/gen/eth/WETHBase/WETHBase.sol +756 -0
  15. package/contracts/gen/eth/WETHBase.ts +136 -0
  16. package/contracts/gen/polygon/ERC20PolygonBase.ts +305 -0
  17. package/contracts/gen/polygon/WormholeBridgeContractBase/Address.sol +216 -0
  18. package/contracts/gen/polygon/WormholeBridgeContractBase/BeaconProxy.sol +61 -0
  19. package/contracts/gen/polygon/WormholeBridgeContractBase/Bridge.sol +437 -0
  20. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeGetters.sol +70 -0
  21. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeGovernance.sol +142 -0
  22. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeImplementation.sol +34 -0
  23. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeSetters.sol +57 -0
  24. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeState.sol +52 -0
  25. package/contracts/gen/polygon/WormholeBridgeContractBase/BridgeStructs.sol +66 -0
  26. package/contracts/gen/polygon/WormholeBridgeContractBase/BytesLib.sol +510 -0
  27. package/contracts/gen/polygon/WormholeBridgeContractBase/Context.sol +23 -0
  28. package/contracts/gen/polygon/WormholeBridgeContractBase/ERC1967Proxy.sol +32 -0
  29. package/contracts/gen/polygon/WormholeBridgeContractBase/ERC1967Upgrade.sol +193 -0
  30. package/contracts/gen/polygon/WormholeBridgeContractBase/IBeacon.sol +15 -0
  31. package/contracts/gen/polygon/WormholeBridgeContractBase/IERC20.sol +81 -0
  32. package/contracts/gen/polygon/WormholeBridgeContractBase/IWormhole.sol +42 -0
  33. package/contracts/gen/polygon/WormholeBridgeContractBase/Ownable.sol +71 -0
  34. package/contracts/gen/polygon/WormholeBridgeContractBase/Proxy.sol +85 -0
  35. package/contracts/gen/polygon/WormholeBridgeContractBase/SafeERC20.sol +98 -0
  36. package/contracts/gen/polygon/WormholeBridgeContractBase/StorageSlot.sol +83 -0
  37. package/contracts/gen/polygon/WormholeBridgeContractBase/Structs.sol +40 -0
  38. package/contracts/gen/polygon/WormholeBridgeContractBase/Token.sol +12 -0
  39. package/contracts/gen/polygon/WormholeBridgeContractBase/TokenBridge.sol +15 -0
  40. package/contracts/gen/polygon/WormholeBridgeContractBase/TokenImplementation.sol +177 -0
  41. package/contracts/gen/polygon/WormholeBridgeContractBase/TokenState.sol +31 -0
  42. package/contracts/gen/polygon/WormholeBridgeContractBase.ts +231 -0
  43. package/contracts/gen/xdai/WXDaiTokenContractBase.ts +136 -0
  44. package/data/cex/eth.csv +356 -0
  45. package/data/tokens/1inch.json +16557 -0
  46. package/data/tokens/arbitrum.json +1 -0
  47. package/data/tokens/sushi.json +56388 -0
  48. package/dist/contracts/gen/amm/AmmFactoryV2ContractBase.js +53 -0
  49. package/dist/contracts/gen/amm/AmmMasterChefV2ContractBase.js +122 -0
  50. package/dist/contracts/gen/amm/AmmPairContractV2Base.js +122 -0
  51. package/dist/contracts/gen/amm/AmmPairContractV3Base.js +98 -0
  52. package/dist/contracts/gen/amm/AmmRouterV2ContractBase.js +95 -0
  53. package/dist/contracts/gen/amm/AmmVaultV2ContractBase.js +164 -0
  54. package/dist/contracts/gen/base/ERC20Base.js +64 -0
  55. package/dist/contracts/gen/bsc/OneInchRouterV3Base.js +47 -0
  56. package/dist/contracts/gen/eth/WETHBase.js +96 -0
  57. package/dist/contracts/gen/polygon/ERC20PolygonBase.js +233 -0
  58. package/dist/contracts/gen/polygon/WormholeBridgeContractBase.js +172 -0
  59. package/dist/contracts/gen/xdai/WXDaiTokenContractBase.js +96 -0
  60. package/dist/src/BlockchainExplorer/BlockChainExplorerFactory.js +227 -0
  61. package/dist/src/BlockchainExplorer/BlockChainExplorerProvider.js +32 -0
  62. package/dist/src/BlockchainExplorer/BlockNumberCache.js +33 -0
  63. package/dist/src/BlockchainExplorer/Bscscan.js +27 -0
  64. package/dist/src/BlockchainExplorer/Etherscan.js +27 -0
  65. package/dist/src/BlockchainExplorer/IAbiProvider.js +2 -0
  66. package/dist/src/BlockchainExplorer/IBlockChainExplorer.js +2 -0
  67. package/dist/src/BlockchainExplorer/Polyscan.js +27 -0
  68. package/dist/src/ChainAccounts.js +69 -0
  69. package/dist/src/ChainAccountsService.js +75 -0
  70. package/dist/src/Config.js +7 -0
  71. package/dist/src/blocks/BlockDateResolver.js +125 -0
  72. package/dist/src/bridges/BridgeFactory.js +19 -0
  73. package/dist/src/bridges/hop/HopAddresses.js +520 -0
  74. package/dist/src/bridges/hop/HopBridge.js +327 -0
  75. package/dist/src/bridges/hop/contracts/gen.act.js +43 -0
  76. package/dist/src/bridges/hop/contracts/polygon/Dai_l2AmmWrapperContract.js +52 -0
  77. package/dist/src/bridges/hop/contracts/polygon/Dai_l2BridgeContract.js +319 -0
  78. package/dist/src/bridges/hop/contracts/polygon/Dai_l2SaddleSwapContract.js +178 -0
  79. package/dist/src/bridges/hop/contracts/polygon/Eth_l2AmmWrapperContract.js +52 -0
  80. package/dist/src/bridges/hop/contracts/polygon/Eth_l2BridgeContract.js +319 -0
  81. package/dist/src/bridges/hop/contracts/polygon/Eth_l2SaddleSwapContract.js +178 -0
  82. package/dist/src/bridges/hop/contracts/polygon/Matic_l2AmmWrapperContract.js +52 -0
  83. package/dist/src/bridges/hop/contracts/polygon/Matic_l2BridgeContract.js +319 -0
  84. package/dist/src/bridges/hop/contracts/polygon/Matic_l2SaddleSwapContract.js +178 -0
  85. package/dist/src/bridges/hop/contracts/polygon/Usdc_l2AmmWrapperContract.js +52 -0
  86. package/dist/src/bridges/hop/contracts/polygon/Usdc_l2BridgeContract.js +319 -0
  87. package/dist/src/bridges/hop/contracts/polygon/Usdc_l2SaddleSwapContract.js +178 -0
  88. package/dist/src/bridges/hop/contracts/polygon/Usdt_l2AmmWrapperContract.js +52 -0
  89. package/dist/src/bridges/hop/contracts/polygon/Usdt_l2BridgeContract.js +319 -0
  90. package/dist/src/bridges/hop/contracts/polygon/Usdt_l2SaddleSwapContract.js +178 -0
  91. package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2AmmWrapperContract.js +52 -0
  92. package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2BridgeContract.js +319 -0
  93. package/dist/src/bridges/hop/contracts/polygon/Wbtc_l2SaddleSwapContract.js +178 -0
  94. package/dist/src/bridges/models/IBridge.js +2 -0
  95. package/dist/src/bridges/wormhole/contracts/WormholeBridgeContract.js +15 -0
  96. package/dist/src/chains/PlatformFactory.js +42 -0
  97. package/dist/src/chains/arbitrum/ArbTokenProvider.js +40 -0
  98. package/dist/src/chains/arbitrum/ArbWeb3Client.js +39 -0
  99. package/dist/src/chains/arbitrum/Arbiscan.js +27 -0
  100. package/dist/src/chains/boba/BobaWeb3Client.js +47 -0
  101. package/dist/src/chains/boba/Bobascan.js +28 -0
  102. package/dist/src/chains/xdai/XDaiWeb3Client.js +87 -0
  103. package/dist/src/chains/xdai/XDaiscan.js +27 -0
  104. package/dist/src/chains/xdai/tokens/WXDaiTokenContract.js +15 -0
  105. package/dist/src/clients/BscWeb3Client.js +38 -0
  106. package/dist/src/clients/ClientEventsStream.js +34 -0
  107. package/dist/src/clients/ClientPool.js +560 -0
  108. package/dist/src/clients/ClientPoolStats.js +52 -0
  109. package/dist/src/clients/EthWeb3Client.js +35 -0
  110. package/dist/src/clients/HardhatWeb3Client.js +56 -0
  111. package/dist/src/clients/PolyWeb3Client.js +77 -0
  112. package/dist/src/clients/Web3Client.js +186 -0
  113. package/dist/src/clients/Web3ClientFactory.js +32 -0
  114. package/dist/src/clients/interfaces/IWeb3Client.js +2 -0
  115. package/dist/src/clients/interfaces/IWeb3ClientStatus.js +2 -0
  116. package/dist/src/clients/interfaces/IWeb3EndpointOptions.js +2 -0
  117. package/dist/src/clients/model/ClientStatus.js +9 -0
  118. package/dist/src/clients/model/PromiEventWrap.js +52 -0
  119. package/dist/src/clients/model/SubscriptionWrap.js +42 -0
  120. package/dist/src/clients/utils/ClientEndpoints.js +27 -0
  121. package/dist/src/clients/utils/ClientErrorUtil.js +30 -0
  122. package/dist/src/clients/utils/TxFactory.js +14 -0
  123. package/dist/src/contracts/BscContract.js +30 -0
  124. package/dist/src/contracts/Contract.js +90 -0
  125. package/dist/src/contracts/ContractBase.js +139 -0
  126. package/dist/src/contracts/ContractFactory.js +17 -0
  127. package/dist/src/contracts/ContractProvider.js +40 -0
  128. package/dist/src/contracts/ContractReader.js +76 -0
  129. package/dist/src/contracts/ContractStream.js +20 -0
  130. package/dist/src/contracts/ContractWriter.js +62 -0
  131. package/dist/src/contracts/EthContract.js +31 -0
  132. package/dist/src/contracts/TxContract.js +37 -0
  133. package/dist/src/contracts/common/ERC20.js +14 -0
  134. package/dist/src/contracts/common/ERC20Polygon.js +14 -0
  135. package/dist/src/contracts/common/PoolPair.js +23 -0
  136. package/dist/src/contracts/utils/AbiDeserializer.js +89 -0
  137. package/dist/src/contracts/utils/ConvertUtils.js +21 -0
  138. package/dist/src/contracts/utils/InputDataUtils.js +87 -0
  139. package/dist/src/contracts/utils/TypeUtils.js +24 -0
  140. package/dist/src/defi/OneInch/OneInchRouter.js +14 -0
  141. package/dist/src/env/BigIntSerializer.js +19 -0
  142. package/dist/src/gen/Ast.js +12 -0
  143. package/dist/src/gen/ContractTemplate.js +27 -0
  144. package/dist/src/gen/Generator.js +180 -0
  145. package/dist/src/gen/GeneratorFromAbi.js +361 -0
  146. package/dist/src/handlers/TokenHandler.js +69 -0
  147. package/dist/src/indexer/BlocksTxIndexer.js +52 -0
  148. package/dist/src/indexer/PendingTxIndexer.js +96 -0
  149. package/dist/src/indexer/handlers/BlocksWalker.js +306 -0
  150. package/dist/src/indexer/handlers/TxQueueLoader.js +117 -0
  151. package/dist/src/json/JsonArrayStore.js +296 -0
  152. package/dist/src/json/JsonObjectStore.js +214 -0
  153. package/dist/src/json/JsonStore.spec.js +83 -0
  154. package/dist/src/loggers/ILogger.js +2 -0
  155. package/dist/src/loggers/LoggerService.js +34 -0
  156. package/dist/src/loggers/TxLoggerService.js +122 -0
  157. package/dist/src/models/IContractDetails.js +2 -0
  158. package/dist/src/models/IToken.js +2 -0
  159. package/dist/src/models/ITokenGlob.js +6 -0
  160. package/dist/src/models/ITransactionDetails.js +2 -0
  161. package/dist/src/models/TAddress.js +2 -0
  162. package/dist/src/models/TBufferLike.js +2 -0
  163. package/dist/src/models/THex.js +2 -0
  164. package/dist/src/models/TPlatform.js +2 -0
  165. package/dist/src/models/TResult.js +2 -0
  166. package/dist/src/ns/NameService.js +19 -0
  167. package/dist/src/ns/providers/EnsProvider.js +41 -0
  168. package/dist/src/ns/providers/INsProvider.js +2 -0
  169. package/dist/src/ns/providers/UDProvider.js +39 -0
  170. package/dist/src/ns/utils/$ns.js +17 -0
  171. package/dist/src/structs/PackedRanges.js +186 -0
  172. package/dist/src/structs/PackedRanges.spec.js +30 -0
  173. package/dist/src/tokens/TokenExchangeService.js +110 -0
  174. package/dist/src/tokens/TokenExchanges/AmmBase/AmmUtilts.js +17 -0
  175. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmFactoryV2Contract.js +15 -0
  176. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmMasterChefV2Contract.js +15 -0
  177. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Contract.js +16 -0
  178. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Service.js +144 -0
  179. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmRouterV2Contract.js +15 -0
  180. package/dist/src/tokens/TokenExchanges/AmmBase/V2/AmmVaultV2Contract.js +15 -0
  181. package/dist/src/tokens/TokenExchanges/AmmBase/V3/AmmPairV3Contract.js +22 -0
  182. package/dist/src/tokens/TokenExchanges/AmmV2ExchangeBase.js +194 -0
  183. package/dist/src/tokens/TokenExchanges/OneInchExchange.js +92 -0
  184. package/dist/src/tokens/TokenExchanges/PancakeswapExchange.js +28 -0
  185. package/dist/src/tokens/TokenExchanges/SushiswapPolygonExchange.js +28 -0
  186. package/dist/src/tokens/TokenExchanges/UniswapExchange.js +28 -0
  187. package/dist/src/tokens/TokenOracles/AmmPriceV2Oracle.js +319 -0
  188. package/dist/src/tokens/TokenOracles/TokenPriceStore.js +108 -0
  189. package/dist/src/tokens/TokenPriceService.js +196 -0
  190. package/dist/src/tokens/TokenPriceServiceProvider.js +31 -0
  191. package/dist/src/tokens/TokenProviders/ATokenProvider.js +38 -0
  192. package/dist/src/tokens/TokenProviders/ITokenProvider.js +2 -0
  193. package/dist/src/tokens/TokenProviders/TPChain.js +35 -0
  194. package/dist/src/tokens/TokenProviders/TPCoinmarketcap.js +63 -0
  195. package/dist/src/tokens/TokenProviders/TPOneInch.js +65 -0
  196. package/dist/src/tokens/TokenProviders/TPSushiswap.js +89 -0
  197. package/dist/src/tokens/TokenProviders/TPUniswap.js +84 -0
  198. package/dist/src/tokens/TokenService.js +115 -0
  199. package/dist/src/tokens/TokenSwapService.js +37 -0
  200. package/dist/src/tokens/TokenTransferService.js +189 -0
  201. package/dist/src/tokens/TokensService.js +236 -0
  202. package/dist/src/tokens/TokensServiceBsc.js +18 -0
  203. package/dist/src/tokens/TokensServiceEth.js +15 -0
  204. package/dist/src/tokens/TokensServiceFactory.js +29 -0
  205. package/dist/src/tokens/TokensServicePolygon.js +18 -0
  206. package/dist/src/tokens/TokensServiceXDai.js +24 -0
  207. package/dist/src/tokens/defi/ISwapService.js +2 -0
  208. package/dist/src/tokens/defi/paraswap/Paraswap.js +135 -0
  209. package/dist/src/tokens/erc20/eth/WETH.js +14 -0
  210. package/dist/src/tokens/utils/TokenUtils.js +66 -0
  211. package/dist/src/txs/ITxConfig.js +2 -0
  212. package/dist/src/txs/TxDataBuilder.js +159 -0
  213. package/dist/src/txs/TxLogger.js +119 -0
  214. package/dist/src/txs/TxProvider.js +73 -0
  215. package/dist/src/txs/TxService.js +19 -0
  216. package/dist/src/txs/TxWriter.js +287 -0
  217. package/dist/src/txs/conditional/GasWatcherLogger.js +61 -0
  218. package/dist/src/txs/conditional/GasWatcherService.js +103 -0
  219. package/dist/src/txs/conditional/GasWatcherStore.js +25 -0
  220. package/dist/src/txs/conditional/GasWatcherTx.js +126 -0
  221. package/dist/src/txs/receipt/ITxLogItem.js +2 -0
  222. package/dist/src/txs/receipt/TxLogParser.js +27 -0
  223. package/dist/src/txs/receipt/TxLogsTransfer.js +50 -0
  224. package/dist/src/txs/receipt/TxTopicInMemoryProvider.js +41 -0
  225. package/dist/src/txs/receipt/TxTopicProvider.js +25 -0
  226. package/dist/src/utils/$abiParser.js +159 -0
  227. package/dist/src/utils/$abiType.js +77 -0
  228. package/dist/src/utils/$abiUtils.js +43 -0
  229. package/dist/src/utils/$address.js +41 -0
  230. package/dist/src/utils/$array.js +60 -0
  231. package/dist/src/utils/$bigint.js +130 -0
  232. package/dist/src/utils/$block.js +10 -0
  233. package/dist/src/utils/$class.js +13 -0
  234. package/dist/src/utils/$config.js +18 -0
  235. package/dist/src/utils/$contract.js +67 -0
  236. package/dist/src/utils/$csv.js +79 -0
  237. package/dist/src/utils/$date.js +496 -0
  238. package/dist/src/utils/$fn.js +117 -0
  239. package/dist/src/utils/$is.js +40 -0
  240. package/dist/src/utils/$logger.js +15 -0
  241. package/dist/src/utils/$number.js +95 -0
  242. package/dist/src/utils/$object.js +82 -0
  243. package/dist/src/utils/$path.js +33 -0
  244. package/dist/src/utils/$promise.js +13 -0
  245. package/dist/src/utils/$require.js +127 -0
  246. package/dist/src/utils/$sign.js +35 -0
  247. package/dist/src/utils/$signSerializer.js +264 -0
  248. package/dist/src/utils/$wallet.js +13 -0
  249. package/dist/src/utils/types.js +2 -0
  250. package/dist/src/wallets/Wallet.js +26 -0
  251. package/dist/src/wallets/WalletBsc.js +17 -0
  252. package/dist/src/wallets/WalletService.js +35 -0
  253. package/dist/src/www/utils/BlockChainExplorerFormatter.js +15 -0
  254. package/hardhat.config.js +6 -0
  255. package/package.json +52 -0
  256. package/readme.md +76 -0
  257. package/src/BlockchainExplorer/BlockChainExplorerFactory.ts +273 -0
  258. package/src/BlockchainExplorer/BlockChainExplorerProvider.ts +26 -0
  259. package/src/BlockchainExplorer/BlockNumberCache.ts +46 -0
  260. package/src/BlockchainExplorer/Bscscan.ts +23 -0
  261. package/src/BlockchainExplorer/Etherscan.ts +25 -0
  262. package/src/BlockchainExplorer/IAbiProvider.ts +5 -0
  263. package/src/BlockchainExplorer/IBlockChainExplorer.ts +37 -0
  264. package/src/BlockchainExplorer/Polyscan.ts +23 -0
  265. package/src/ChainAccounts.ts +72 -0
  266. package/src/ChainAccountsService.ts +74 -0
  267. package/src/Config.ts +34 -0
  268. package/src/blocks/BlockDateResolver.ts +149 -0
  269. package/src/bridges/BridgeFactory.ts +16 -0
  270. package/src/bridges/hop/HopAddresses.ts +518 -0
  271. package/src/bridges/hop/HopBridge.ts +430 -0
  272. package/src/bridges/hop/contracts/gen.act.ts +50 -0
  273. package/src/bridges/hop/contracts/polygon/Dai_l2AmmWrapperContract.ts +69 -0
  274. package/src/bridges/hop/contracts/polygon/Dai_l2BridgeContract.ts +453 -0
  275. package/src/bridges/hop/contracts/polygon/Dai_l2SaddleSwapContract.ts +264 -0
  276. package/src/bridges/hop/contracts/polygon/Eth_l2AmmWrapperContract.ts +69 -0
  277. package/src/bridges/hop/contracts/polygon/Eth_l2BridgeContract.ts +453 -0
  278. package/src/bridges/hop/contracts/polygon/Eth_l2SaddleSwapContract.ts +264 -0
  279. package/src/bridges/hop/contracts/polygon/Matic_l2AmmWrapperContract.ts +69 -0
  280. package/src/bridges/hop/contracts/polygon/Matic_l2BridgeContract.ts +453 -0
  281. package/src/bridges/hop/contracts/polygon/Matic_l2SaddleSwapContract.ts +264 -0
  282. package/src/bridges/hop/contracts/polygon/Usdc_l2AmmWrapperContract.ts +69 -0
  283. package/src/bridges/hop/contracts/polygon/Usdc_l2BridgeContract.ts +453 -0
  284. package/src/bridges/hop/contracts/polygon/Usdc_l2SaddleSwapContract.ts +264 -0
  285. package/src/bridges/hop/contracts/polygon/Usdt_l2AmmWrapperContract.ts +69 -0
  286. package/src/bridges/hop/contracts/polygon/Usdt_l2BridgeContract.ts +453 -0
  287. package/src/bridges/hop/contracts/polygon/Usdt_l2SaddleSwapContract.ts +264 -0
  288. package/src/bridges/hop/contracts/polygon/Wbtc_l2AmmWrapperContract.ts +69 -0
  289. package/src/bridges/hop/contracts/polygon/Wbtc_l2BridgeContract.ts +453 -0
  290. package/src/bridges/hop/contracts/polygon/Wbtc_l2SaddleSwapContract.ts +264 -0
  291. package/src/bridges/models/IBridge.ts +43 -0
  292. package/src/bridges/wormhole/contracts/WormholeBridgeContract.ts +14 -0
  293. package/src/chains/PlatformFactory.ts +45 -0
  294. package/src/chains/arbitrum/ArbTokenProvider.ts +39 -0
  295. package/src/chains/arbitrum/ArbWeb3Client.ts +39 -0
  296. package/src/chains/arbitrum/Arbiscan.ts +24 -0
  297. package/src/chains/boba/BobaWeb3Client.ts +49 -0
  298. package/src/chains/boba/Bobascan.ts +25 -0
  299. package/src/chains/xdai/XDaiWeb3Client.ts +82 -0
  300. package/src/chains/xdai/XDaiscan.ts +24 -0
  301. package/src/chains/xdai/tokens/WXDaiTokenContract.json +279 -0
  302. package/src/chains/xdai/tokens/WXDaiTokenContract.ts +14 -0
  303. package/src/clients/BscWeb3Client.ts +38 -0
  304. package/src/clients/ClientEventsStream.ts +33 -0
  305. package/src/clients/ClientPool.ts +673 -0
  306. package/src/clients/ClientPoolStats.ts +64 -0
  307. package/src/clients/EthWeb3Client.ts +36 -0
  308. package/src/clients/HardhatWeb3Client.ts +60 -0
  309. package/src/clients/PolyWeb3Client.ts +91 -0
  310. package/src/clients/Web3Client.ts +228 -0
  311. package/src/clients/Web3ClientFactory.ts +28 -0
  312. package/src/clients/interfaces/IWeb3Client.ts +14 -0
  313. package/src/clients/interfaces/IWeb3ClientStatus.ts +23 -0
  314. package/src/clients/interfaces/IWeb3EndpointOptions.ts +9 -0
  315. package/src/clients/model/ClientStatus.ts +5 -0
  316. package/src/clients/model/PromiEventWrap.ts +61 -0
  317. package/src/clients/model/SubscriptionWrap.ts +53 -0
  318. package/src/clients/utils/ClientEndpoints.ts +26 -0
  319. package/src/clients/utils/ClientErrorUtil.ts +26 -0
  320. package/src/clients/utils/TxFactory.ts +17 -0
  321. package/src/contracts/BscContract.ts +28 -0
  322. package/src/contracts/Contract.ts +126 -0
  323. package/src/contracts/ContractBase.ts +158 -0
  324. package/src/contracts/ContractFactory.ts +19 -0
  325. package/src/contracts/ContractProvider.ts +55 -0
  326. package/src/contracts/ContractReader.ts +87 -0
  327. package/src/contracts/ContractStream.ts +18 -0
  328. package/src/contracts/ContractWriter.ts +97 -0
  329. package/src/contracts/EthContract.ts +29 -0
  330. package/src/contracts/TxContract.ts +43 -0
  331. package/src/contracts/common/ERC20.ts +13 -0
  332. package/src/contracts/common/ERC20Polygon.ts +13 -0
  333. package/src/contracts/common/PoolPair.ts +22 -0
  334. package/src/contracts/utils/AbiDeserializer.ts +98 -0
  335. package/src/contracts/utils/ConvertUtils.ts +16 -0
  336. package/src/contracts/utils/InputDataUtils.ts +93 -0
  337. package/src/contracts/utils/TypeUtils.ts +21 -0
  338. package/src/defi/OneInch/OneInchRouter.ts +13 -0
  339. package/src/env/BigIntSerializer.ts +18 -0
  340. package/src/gen/Ast.ts +12 -0
  341. package/src/gen/ContractTemplate.ts +36 -0
  342. package/src/gen/Generator.ts +227 -0
  343. package/src/gen/GeneratorFromAbi.ts +402 -0
  344. package/src/handlers/TokenHandler.ts +78 -0
  345. package/src/indexer/BlocksTxIndexer.ts +69 -0
  346. package/src/indexer/PendingTxIndexer.ts +124 -0
  347. package/src/indexer/handlers/BlocksWalker.ts +390 -0
  348. package/src/indexer/handlers/TxQueueLoader.ts +143 -0
  349. package/src/json/JsonArrayStore.ts +310 -0
  350. package/src/json/JsonObjectStore.ts +239 -0
  351. package/src/json/JsonStore.spec.ts +98 -0
  352. package/src/loggers/ILogger.ts +3 -0
  353. package/src/loggers/LoggerService.ts +39 -0
  354. package/src/loggers/TxLoggerService.ts +146 -0
  355. package/src/models/IContractDetails.ts +8 -0
  356. package/src/models/IToken.ts +11 -0
  357. package/src/models/ITokenGlob.ts +14 -0
  358. package/src/models/ITransactionDetails.ts +11 -0
  359. package/src/models/TAddress.ts +1 -0
  360. package/src/models/TBufferLike.ts +2 -0
  361. package/src/models/THex.ts +1 -0
  362. package/src/models/TPlatform.ts +1 -0
  363. package/src/models/TResult.ts +6 -0
  364. package/src/ns/NameService.ts +21 -0
  365. package/src/ns/providers/EnsProvider.ts +45 -0
  366. package/src/ns/providers/INsProvider.ts +6 -0
  367. package/src/ns/providers/UDProvider.ts +49 -0
  368. package/src/ns/utils/$ns.ts +15 -0
  369. package/src/structs/PackedRanges.spec.ts +38 -0
  370. package/src/structs/PackedRanges.ts +207 -0
  371. package/src/tokens/TokenExchangeService.ts +126 -0
  372. package/src/tokens/TokenExchanges/AmmBase/AmmUtilts.ts +16 -0
  373. package/src/tokens/TokenExchanges/AmmBase/V2/AmmFactoryV2Contract.ts +15 -0
  374. package/src/tokens/TokenExchanges/AmmBase/V2/AmmMasterChefV2Contract.ts +15 -0
  375. package/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Contract.ts +17 -0
  376. package/src/tokens/TokenExchanges/AmmBase/V2/AmmPairV2Service.ts +208 -0
  377. package/src/tokens/TokenExchanges/AmmBase/V2/AmmRouterV2Contract.ts +15 -0
  378. package/src/tokens/TokenExchanges/AmmBase/V2/AmmVaultV2Contract.ts +15 -0
  379. package/src/tokens/TokenExchanges/AmmBase/V3/AmmPairV3Contract.ts +24 -0
  380. package/src/tokens/TokenExchanges/AmmV2ExchangeBase.ts +242 -0
  381. package/src/tokens/TokenExchanges/OneInchExchange.ts +111 -0
  382. package/src/tokens/TokenExchanges/PancakeswapExchange.ts +30 -0
  383. package/src/tokens/TokenExchanges/SushiswapPolygonExchange.ts +30 -0
  384. package/src/tokens/TokenExchanges/UniswapExchange.ts +31 -0
  385. package/src/tokens/TokenOracles/AmmPriceV2Oracle.ts +440 -0
  386. package/src/tokens/TokenOracles/TokenPriceStore.ts +129 -0
  387. package/src/tokens/TokenPriceService.ts +276 -0
  388. package/src/tokens/TokenPriceServiceProvider.ts +36 -0
  389. package/src/tokens/TokenProviders/ATokenProvider.ts +42 -0
  390. package/src/tokens/TokenProviders/ITokenProvider.ts +9 -0
  391. package/src/tokens/TokenProviders/TPChain.ts +41 -0
  392. package/src/tokens/TokenProviders/TPCoinmarketcap.ts +82 -0
  393. package/src/tokens/TokenProviders/TPOneInch.ts +71 -0
  394. package/src/tokens/TokenProviders/TPSushiswap.ts +96 -0
  395. package/src/tokens/TokenProviders/TPUniswap.ts +85 -0
  396. package/src/tokens/TokenService.ts +128 -0
  397. package/src/tokens/TokenSwapService.ts +47 -0
  398. package/src/tokens/TokenTransferService.ts +216 -0
  399. package/src/tokens/TokensService.ts +252 -0
  400. package/src/tokens/TokensServiceBsc.ts +17 -0
  401. package/src/tokens/TokensServiceEth.ts +9 -0
  402. package/src/tokens/TokensServiceFactory.ts +24 -0
  403. package/src/tokens/TokensServicePolygon.ts +17 -0
  404. package/src/tokens/TokensServiceXDai.ts +26 -0
  405. package/src/tokens/defi/ISwapService.ts +12 -0
  406. package/src/tokens/defi/paraswap/Paraswap.ts +244 -0
  407. package/src/tokens/erc20/eth/WETH.ts +13 -0
  408. package/src/tokens/utils/TokenUtils.ts +63 -0
  409. package/src/txs/ITxConfig.ts +27 -0
  410. package/src/txs/TxDataBuilder.ts +207 -0
  411. package/src/txs/TxLogger.ts +121 -0
  412. package/src/txs/TxProvider.ts +68 -0
  413. package/src/txs/TxService.ts +19 -0
  414. package/src/txs/TxWriter.ts +370 -0
  415. package/src/txs/conditional/GasWatcherLogger.ts +57 -0
  416. package/src/txs/conditional/GasWatcherService.ts +117 -0
  417. package/src/txs/conditional/GasWatcherStore.ts +40 -0
  418. package/src/txs/conditional/GasWatcherTx.ts +143 -0
  419. package/src/txs/receipt/ITxLogItem.ts +25 -0
  420. package/src/txs/receipt/TxLogParser.ts +29 -0
  421. package/src/txs/receipt/TxLogsTransfer.ts +61 -0
  422. package/src/txs/receipt/TxTopicInMemoryProvider.ts +45 -0
  423. package/src/txs/receipt/TxTopicProvider.ts +29 -0
  424. package/src/utils/$abiParser.ts +179 -0
  425. package/src/utils/$abiType.ts +85 -0
  426. package/src/utils/$abiUtils.ts +38 -0
  427. package/src/utils/$address.ts +37 -0
  428. package/src/utils/$array.ts +57 -0
  429. package/src/utils/$bigint.ts +127 -0
  430. package/src/utils/$block.ts +7 -0
  431. package/src/utils/$class.ts +8 -0
  432. package/src/utils/$config.ts +17 -0
  433. package/src/utils/$contract.ts +67 -0
  434. package/src/utils/$csv.ts +54 -0
  435. package/src/utils/$date.ts +473 -0
  436. package/src/utils/$fn.ts +134 -0
  437. package/src/utils/$is.ts +37 -0
  438. package/src/utils/$logger.ts +10 -0
  439. package/src/utils/$number.ts +89 -0
  440. package/src/utils/$object.ts +95 -0
  441. package/src/utils/$path.ts +32 -0
  442. package/src/utils/$promise.ts +7 -0
  443. package/src/utils/$require.ts +118 -0
  444. package/src/utils/$sign.ts +36 -0
  445. package/src/utils/$signSerializer.ts +339 -0
  446. package/src/utils/$wallet.ts +10 -0
  447. package/src/utils/types.ts +29 -0
  448. package/src/wallets/Wallet.ts +33 -0
  449. package/src/wallets/WalletBsc.ts +13 -0
  450. package/src/wallets/WalletService.ts +43 -0
  451. package/src/www/utils/BlockChainExplorerFormatter.ts +13 -0
  452. package/test/ChainAccount.spec.ts +9 -0
  453. package/test/client.spec.ts +59 -0
  454. package/test/fixtures/DaiTokenContract.ts +13 -0
  455. package/test/fixtures/receipts/swap.json +94 -0
  456. package/test/generate/class.spec.ts +27 -0
  457. package/test/hardhat/TestNode.ts +61 -0
  458. package/test/ns.spec.ts +30 -0
  459. package/test/receipt.spec.ts +27 -0
  460. package/test/utils/abi-parser.spec.ts +117 -0
  461. package/test/utils/bigint.spec.ts +40 -0
  462. package/test/utils/date.spec.ts +8 -0
  463. package/test/utils/fn.spec.ts +39 -0
  464. package/test/utils/number.spec.ts +41 -0
  465. package/test/utils/sign.spec.ts +22 -0
  466. package/tsconfig-build.json +24 -0
  467. package/tsconfig-src.json +36 -0
  468. package/tsconfig.json +27 -0
  469. package/typings/globals/assertion/index.d.ts +159 -0
  470. package/typings/globals/assertion/typings.json +10 -0
  471. package/typings/globals/atma-utest/index.d.ts +53 -0
  472. package/typings/globals/atma-utest/typings.json +10 -0
  473. package/typings/globals/axios/index.d.ts +6 -0
  474. package/typings/globals/mask/index.d.ts +6 -0
  475. package/typings/globals/mask/typings.json +9 -0
  476. package/typings/index.d.ts +6 -0
  477. package/typings.json +6 -0
@@ -0,0 +1,29 @@
1
+ import di from 'a-di'
2
+ import { ContractReader } from './ContractReader'
3
+ import { Contract, IContractInit } from './Contract'
4
+ import { ContractProvider } from './ContractProvider'
5
+ import { Etherscan } from '@dequanto/BlockchainExplorer/Etherscan'
6
+ import { EthWeb3Client } from '@dequanto/clients/EthWeb3Client'
7
+
8
+ export class EthContract extends Contract {
9
+
10
+ public client = this.opts.client ?? di.resolve(EthWeb3Client);
11
+ public explorer = this.opts.explorer ?? di.resolve(Etherscan);
12
+ public runner = di.resolve(ContractReader, this.client);
13
+ public provider = di.resolve(ContractProvider, this.explorer);
14
+
15
+ static async create (name: string, opts?: IContractInit): Promise<EthContract>
16
+ static async create (address: string, opts?: IContractInit): Promise<EthContract>
17
+ static async create (mix: string, opts?: IContractInit): Promise<EthContract> {
18
+
19
+ let explorer = di.resolve(Etherscan);
20
+ let contract = Contract.create<EthContract>(mix, {
21
+
22
+ Ctor: EthContract,
23
+ explorer,
24
+
25
+ ...(opts ?? {})
26
+ });
27
+ return contract;
28
+ }
29
+ }
@@ -0,0 +1,43 @@
1
+ import di from 'a-di';
2
+ import alot from 'alot';
3
+ import { Etherscan } from '@dequanto/BlockchainExplorer/Etherscan';
4
+ import { IBlockChainExplorer } from '@dequanto/BlockchainExplorer/IBlockChainExplorer';
5
+ import { ITransactionDetails } from '@dequanto/models/ITransactionDetails';
6
+ import { utils } from 'ethers'
7
+ import { TransactionDescription } from 'ethers/lib/utils';
8
+ import { Transaction } from 'web3-core';
9
+ import { ContractProvider } from './ContractProvider';
10
+
11
+
12
+ export class TxContract {
13
+
14
+ private provider = di.resolve(ContractProvider, this.loader);
15
+
16
+ constructor (private loader: IBlockChainExplorer = di.resolve(Etherscan)) {
17
+
18
+ }
19
+
20
+ async parseTrasaction (tx: Transaction): Promise<TransactionDescription> {
21
+ const abi = await this.provider.getAbi(tx.to);
22
+
23
+ const inter = new utils.Interface(abi);
24
+ const decodedInput = inter.parseTransaction({
25
+ data: tx.input,
26
+ value: tx.value,
27
+ });
28
+
29
+ return decodedInput;
30
+ }
31
+
32
+ async parseTrasactions (arr: Transaction[]): Promise<ITransactionDetails[]> {
33
+ let mapped = await alot(arr).mapAsync(async tx => {
34
+ let details = await this.parseTrasaction(tx);
35
+ return {
36
+ ...tx,
37
+ details: details as any
38
+ };
39
+ }).toArrayAsync();
40
+
41
+ return mapped;
42
+ }
43
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * dequanto
3
+ * name: ERC20Base
4
+ * platform: polygon
5
+ * source.abi: ./contracts/abi/erc20.abi.json
6
+ * output: ./contracts/gen/base/
7
+ */
8
+
9
+ import { ERC20Base } from '@dequanto-contracts/gen/base/ERC20Base';
10
+
11
+ export class ERC20 extends ERC20Base {
12
+
13
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * dequanto
3
+ * name: ERC20PolygonBase
4
+ * platform: polygon
5
+ * source.abi: 0x2791bca1f2de4661ed88a30c99a7a9449aa84174
6
+ * output: ./contracts/gen/polygon/
7
+ */
8
+
9
+ import { ERC20PolygonBase } from '@dequanto-contracts/gen/polygon/ERC20PolygonBase';
10
+
11
+ export class ERC20Polygon extends ERC20PolygonBase {
12
+
13
+ }
@@ -0,0 +1,22 @@
1
+ import di from 'a-di';
2
+ import { Etherscan } from '@dequanto/BlockchainExplorer/Etherscan';
3
+ import { EthWeb3Client } from '@dequanto/clients/EthWeb3Client';
4
+ import { TAddress } from '@dequanto/models/TAddress';
5
+ import { ContractBase } from '@dequanto/contracts/ContractBase';
6
+
7
+ export class PoolPair extends ContractBase {
8
+ abi = null
9
+
10
+ constructor(
11
+ public address: TAddress,
12
+ public client = di.resolve(EthWeb3Client),
13
+ public explorer = di.resolve(Etherscan)
14
+ ) {
15
+ super(address, client, explorer)
16
+ }
17
+
18
+ async getReserves (): Promise<{reserve0: bigint, reserve1: bigint }> {
19
+ return await this.$read('getReserves() returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast)');
20
+ }
21
+
22
+ }
@@ -0,0 +1,98 @@
1
+ import { $abiType } from '@dequanto/utils/$abiType';
2
+ import { AbiItem, AbiOutput } from 'web3-utils';
3
+ import { $abiParser } from '../../utils/$abiParser';
4
+
5
+ export namespace AbiDeserializer {
6
+
7
+ type AbiNativeType = string;
8
+
9
+ export function process(result: any, types: AbiOutput[]) {
10
+ let type: 'array' | 'object' | AbiNativeType = $abiParser.getReturnTypeFromTypes(types);
11
+ if (type === 'array') {
12
+ return toArray(result, types)
13
+ }
14
+ if (type === 'object') {
15
+ return toObject(result, types);
16
+ }
17
+ return toType(result, types[0]);
18
+ }
19
+
20
+
21
+
22
+ function toType(val, type: AbiOutput) {
23
+ if (type == null) {
24
+ return val;
25
+ }
26
+ if (typeof val === 'string') {
27
+ let tsType = $abiType.getTsType(type.type);
28
+
29
+ switch (tsType) {
30
+ case 'bigint':
31
+ return BigInt(val);
32
+ case 'number':
33
+ return Number(val);
34
+ }
35
+ }
36
+ if (type.type === 'tuple[]') {
37
+ if (Array.isArray(val) === false) {
38
+ throw new Error(`${type.name} tuple[] expects array to deserialize. Got ${val}`);
39
+ }
40
+ return val.map(item => {
41
+ return process(item, type.components);
42
+ });
43
+ }
44
+ return val;
45
+ }
46
+
47
+ function toArray(value: object, types: AbiOutput[]) {
48
+ value = normalizeArray(value);
49
+
50
+ if (Array.isArray(value) === false) {
51
+ throw new Error(`Array expected of types: ${types.map(x => x.type)}; Got ${value}`);
52
+ }
53
+
54
+ let out = [];
55
+ for (let i = 0; i < types.length; i++) {
56
+ out[i] = toType(value[i], types[i]);
57
+ }
58
+ return out;
59
+ }
60
+ function toObject(value: object, types: AbiOutput[]) {
61
+ let properties = Object.create(null) as { [key: string]: AbiOutput };
62
+ types.forEach(type => {
63
+ properties[type.name] = type;
64
+ });
65
+
66
+ let out = Object.create(null);
67
+ for (let key in value) {
68
+ if (/^\d+$/.test(key)) {
69
+ continue;
70
+ }
71
+ let info = properties[key];
72
+ out[key] = toType(value[key], info);
73
+ }
74
+ return out;
75
+ }
76
+
77
+ // { 0: a, 1: b, 2: c } to array
78
+ function normalizeArray(val) {
79
+ if (Array.isArray(val)) {
80
+ return val;
81
+ }
82
+ let out = [];
83
+ let length = 0;
84
+ let keys = 0;
85
+ for (let key in val) {
86
+ if (/^\d+$/.test(key)) {
87
+ length++;
88
+ out[Number(key)] = val[key]
89
+ continue;
90
+ }
91
+ keys++;
92
+ }
93
+ if (length === 0 && keys > 0) {
94
+ return val;
95
+ }
96
+ return out;
97
+ }
98
+ }
@@ -0,0 +1,16 @@
1
+ export namespace ConvertUtils {
2
+ export function toWei (amount: number | bigint, dec: number | string = 18) {
3
+ let decimals = BigInt(dec);
4
+
5
+ return BigInt(amount) * 10n ** decimals;
6
+ }
7
+ export function toEther (amount: number | bigint, dec: number | string = 18) {
8
+ const round = 100000n;
9
+ let decimals = BigInt(dec);
10
+ let val = BigInt(amount) * round / 10n ** decimals;
11
+ if (val < Number.MAX_SAFE_INTEGER) {
12
+ return Number(val) / Number(round);
13
+ }
14
+ return val / round;
15
+ }
16
+ }
@@ -0,0 +1,93 @@
1
+ import { IWeb3Client } from '@dequanto/clients/interfaces/IWeb3Client';
2
+ import { Web3Client } from '@dequanto/clients/Web3Client';
3
+ import { ethers, utils } from 'ethers';
4
+ import { AbiItem } from 'web3-utils';
5
+ import { $abiParser } from '../../utils/$abiParser';
6
+
7
+ export namespace InputDataUtils {
8
+ export function split (inputData: string) {
9
+ let str = inputData.substring(2);
10
+ let methodName = str.substring(0, 8);
11
+ let params = str.substring(8);
12
+ let args = [];
13
+ while (params.length > 0) {
14
+ args.push(params.substring(0, 64));
15
+ params = params.substring(64);
16
+ }
17
+ return {
18
+ method: methodName,
19
+ args
20
+ };
21
+ }
22
+
23
+ export function decode (inputs: AbiItem['inputs'], bytes: string) {
24
+ let types = inputs.map(x => x.type);
25
+ let args = utils.defaultAbiCoder.decode(
26
+ types,
27
+ bytes
28
+ );
29
+ let arr = Array.from(args);
30
+ return normalizeArgs(arr);
31
+ }
32
+ export function decodeParamsWithABI (abi: string | AbiItem, bytes: string): any[] {
33
+ if (typeof abi === 'string') {
34
+ abi = $abiParser.parseMethod(abi);
35
+ }
36
+ let inputs = abi.inputs;
37
+ let types = inputs.map(x => x.type);
38
+ let args = utils.defaultAbiCoder.decode(
39
+ types,
40
+ bytes
41
+ );
42
+ let arr = Array.from(args);
43
+ return normalizeArgs(arr);
44
+ }
45
+ export function decodeWithABI (IFunctionABI: string | AbiItem, ...params): string {
46
+ let iface = new ethers.utils.Interface([ IFunctionABI as any ]);
47
+ let methodName: string;
48
+
49
+ if (typeof IFunctionABI === 'string') {
50
+ methodName = /function \s*(?<methodName>[\w\d_]+)/.exec(IFunctionABI)?.groups?.methodName;
51
+ } else {
52
+ methodName = IFunctionABI.name;
53
+ }
54
+
55
+ if (methodName == null) {
56
+ throw new Error(`Invalid method in ${IFunctionABI}. Expects "function foo(...)"`)
57
+ }
58
+ return iface.encodeFunctionData(methodName, params);
59
+ }
60
+
61
+
62
+ /**
63
+ * function work(uint256 id, address worker, uint256 principalAmount, uint256 loan, uint256 maxReturn, bytes calldata data)
64
+ */
65
+ export function encodeWithABI (IFunctionABI: string | AbiItem, ...params): string {
66
+ let iface = new ethers.utils.Interface([ IFunctionABI as any ]);
67
+ let methodName: string;
68
+
69
+ if (typeof IFunctionABI === 'string') {
70
+ methodName = /function \s*(?<methodName>[\w\d_]+)/.exec(IFunctionABI)?.groups?.methodName;
71
+ } else {
72
+ methodName = IFunctionABI.name;
73
+ }
74
+ if (methodName == null) {
75
+ throw new Error(`Invalid method in ${IFunctionABI}. Expects "function foo(...)"`)
76
+ }
77
+ return iface.encodeFunctionData(methodName, params);
78
+ }
79
+
80
+ export function encodeWithTypes (client: Web3Client, types: any[], paramaters: any[]): string {
81
+ return client.encodeParameters(types, paramaters);
82
+ }
83
+
84
+ export function normalizeArgs (args: any[]) {
85
+ return args.map(val => {
86
+ if (val?._isBigNumber) {
87
+ return BigInt(val.toString());
88
+ }
89
+
90
+ return val;
91
+ })
92
+ }
93
+ }
@@ -0,0 +1,21 @@
1
+ export namespace TypeUtils {
2
+ export function normalize (args: any[]) {
3
+ args = Array.from(args);
4
+
5
+ for (let i = 0; i < args.length; i++) {
6
+
7
+ let val = args[i];
8
+ if (val == null || typeof val !== 'object') {
9
+ continue;
10
+ }
11
+ if (Array.isArray(val)) {
12
+ args[i] = normalize(val);
13
+ continue;
14
+ }
15
+ if (val._isBigNumber) {
16
+ args[i] = BigInt(val.toString());
17
+ }
18
+ }
19
+ return args;
20
+ }
21
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * dequanto
3
+ * name: OneInchRouterV3Base
4
+ * platform: bsc
5
+ * source.abi: 0x11111112542d85b3ef69ae05771c2dccff4faa26
6
+ * output: ./contracts/gen/bsc/
7
+ */
8
+
9
+ import { OneInchRouterV3Base } from '../../../contracts/gen/bsc/OneInchRouterV3Base';
10
+
11
+ export class OneInchRouterContract extends OneInchRouterV3Base {
12
+
13
+ }
@@ -0,0 +1,18 @@
1
+ (BigInt as any).prototype.toJSON = function () { return this.toString() };
2
+ (BigInt as any).prototype.toBuffer = function () {
3
+ let hex = (this as bigint).toString(16);
4
+ if (hex.length % 2 !== 0) {
5
+ hex = `0${hex}`;
6
+ }
7
+ return Buffer.from(hex, 'hex');
8
+ };
9
+
10
+ (BigInt as any).prototype.valueOf = function () {
11
+ if (this > BigInt(Number.MAX_VALUE)) {
12
+ throw new Error(`BigInt to Number overfows: ${this}`)
13
+ }
14
+ return Number(this);
15
+ };
16
+
17
+ export function BigIntSerializer () {}
18
+
package/src/gen/Ast.ts ADDED
@@ -0,0 +1,12 @@
1
+ //import parser from '@solidity-parser/parser';
2
+
3
+
4
+ export class Ast {
5
+
6
+ static parse (source: string) {
7
+ // let ast = parser.parse(source, {
8
+ // tolerant: true,
9
+ // });
10
+
11
+ }
12
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * AUTO-Generated Class: $DATE$
3
+ * Implementation: $EXPLORER_URL$
4
+ */
5
+ import di from 'a-di';
6
+ import { TAddress } from '@dequanto/models/TAddress';
7
+ import { TBufferLike } from '@dequanto/models/TBufferLike';
8
+ import { ClientEventsStream } from '@dequanto/clients/ClientEventsStream';
9
+ import { ContractBase } from '@dequanto/contracts/ContractBase';
10
+ import { AbiItem } from 'web3-utils';
11
+ import { TransactionReceipt } from 'web3-core';
12
+ import { EventData } from 'web3-eth-contract';
13
+ import { TxWriter } from '@dequanto/txs/TxWriter';
14
+ import { Web3Client } from '@dequanto/clients/Web3Client';
15
+ import { IBlockChainExplorer } from '@dequanto/BlockchainExplorer/IBlockChainExplorer';
16
+
17
+ /* IMPORTS */
18
+ export class $NAME$ extends ContractBase {
19
+ constructor(
20
+ public address: TAddress = '$ADDRESS$',
21
+ public client: Web3Client = di.resolve($EthWeb3Client$),
22
+ public explorer: IBlockChainExplorer = di.resolve($Etherscan$)
23
+ ) {
24
+ super(address, client, explorer)
25
+ }
26
+
27
+ /* METHODS */
28
+
29
+ /* EVENTS */
30
+
31
+ /* EVENTS_EXTRACTORS */
32
+
33
+ abi = $ABI$
34
+ }
35
+
36
+ /* $EVENT_INTERFACES$ */
@@ -0,0 +1,227 @@
1
+ import di from 'a-di';
2
+ import alot from 'alot';
3
+ import { AbiItem } from 'web3-utils';
4
+ import { IBlockChainExplorer } from '@dequanto/BlockchainExplorer/IBlockChainExplorer';
5
+ import { $address } from '@dequanto/utils/$address';
6
+ import { $require } from '@dequanto/utils/$require';
7
+ import { GeneratorFromAbi } from './GeneratorFromAbi';
8
+ import { TAddress } from '@dequanto/models/TAddress';
9
+ import { File, Directory } from 'atma-io';
10
+ import { class_Uri, obj_setProperty } from 'atma-utils';
11
+ import { BlockChainExplorerProvider } from '@dequanto/BlockchainExplorer/BlockChainExplorerProvider';
12
+ import { TPlatform } from '@dequanto/models/TPlatform';
13
+
14
+ export interface IGenerateOptions {
15
+ platform: TPlatform
16
+ name: string
17
+ defaultAddress?: TAddress
18
+
19
+ source: {
20
+ abi?: TAddress
21
+ code?: string
22
+ }
23
+
24
+ output?: string
25
+
26
+ location?: string
27
+
28
+ /**
29
+ * a) Slot to read the implementation address from
30
+ * b) The implementation address
31
+ * c) Method function to read the implementation address from
32
+ */
33
+ implementation?: string
34
+
35
+ /** ABI will be save alongside with TS classes */
36
+ saveAbi?: boolean
37
+ }
38
+ const KEYS = {
39
+ 'platform': 1,
40
+ 'name': 1,
41
+ 'defaultAddress': 1,
42
+ 'source.abi': 1,
43
+ 'source.code': 1,
44
+ 'output': 1,
45
+ 'implementation': 1
46
+ };
47
+
48
+ export class Generator {
49
+
50
+ explorer: IBlockChainExplorer;
51
+
52
+ constructor (public options: IGenerateOptions) {
53
+ let {
54
+ platform,
55
+ } = options;
56
+
57
+ this.explorer = BlockChainExplorerProvider.get(platform);
58
+
59
+ if (options.defaultAddress == null && $address.isValid(options.source.abi)) {
60
+ options.defaultAddress = options.source.abi;
61
+ }
62
+ }
63
+
64
+ static async generateForClass (path: string) {
65
+
66
+ let i = path.indexOf('*');
67
+ if (i > -1) {
68
+ let base = path.substring(0, i).replace(/\\/g, '/');
69
+ let glob = path.substring(i).replace(/\\/g, '/');
70
+ let files = await Directory.readFilesAsync(base, glob);
71
+
72
+ await alot(files)
73
+ .forEachAsync(async file => {
74
+ await this.generateForClass(file.uri.toString());
75
+ })
76
+ .toArrayAsync({ threads: 1 });
77
+ return;
78
+ }
79
+
80
+ let jsCode = await File.readAsync <string> (path, { skipHooks: true });
81
+ let startIdx = jsCode.indexOf('/*');
82
+ let endIdx = jsCode.indexOf('*/');
83
+ if (startIdx === -1 || endIdx === -1) {
84
+ throw new Error(`${path} should contain dequanto options in comment`);
85
+ }
86
+
87
+ let header = jsCode.substring(startIdx, endIdx);
88
+ let lines = header.split('\n');
89
+ let rgxOpts = /(?<key>[\w.]+)\s*:\s*(?<value>[^\n]+)/;
90
+ let options = {} as IGenerateOptions;
91
+ for (let line of lines) {
92
+ let match = rgxOpts.exec(line);
93
+ if (match == null) {
94
+ continue;
95
+ }
96
+ let key = match.groups.key.trim();
97
+ let value: any = match.groups.value.trim();
98
+ if (value === 'true') {
99
+ value = true;
100
+ } else if (value === 'false') {
101
+ value = false;
102
+ } else if (/^[\d\.]$/.test(value)) {
103
+ value = Number(value)
104
+ }
105
+
106
+ if (key in KEYS === false) {
107
+ throw new Error(`Invalid options key ${key}`);
108
+ }
109
+
110
+ obj_setProperty(options, key, value);
111
+ }
112
+
113
+ // make Contracts in dequanto package relative to dequanto root
114
+ let rgxRoot = /[\\\/]dequanto[\\\/].+/;
115
+ if (rgxRoot.test(path)) {
116
+ let root = path.replace(rgxRoot, '/dequanto/');
117
+ options.output = class_Uri.combine(root, options.output);
118
+ }
119
+ let generator = new Generator({
120
+ ...options,
121
+ location: new class_Uri(path).toDir().toString()
122
+ });
123
+ await generator.generate();
124
+ }
125
+
126
+ async generate () {
127
+ let { name, platform: network, output, implementation: implSource } = this.options;
128
+
129
+ let { abiJson, implementation } = await this.getAbi({ implementation: implSource });
130
+ let sources = await this.getSources(implementation, name);
131
+ let generator = di.resolve(GeneratorFromAbi);
132
+
133
+ let address = this.options.defaultAddress;
134
+
135
+ return await generator.generate(abiJson, {
136
+ network: network,
137
+ name: name,
138
+ address: address,
139
+ output: output,
140
+ implementation: implementation,
141
+ sources: sources,
142
+ saveAbi: this.options.saveAbi
143
+ });
144
+ }
145
+
146
+ private async getAbi(opts: { implementation: string }) {
147
+ let abi = this.options.source.abi;
148
+ $require.notNull(abi, `Abi not provided to get the Abi Json from`);
149
+
150
+ let abiJson: AbiItem[]
151
+ let implementation: TAddress;
152
+ if (abi.startsWith('0x')) {
153
+ let { abi, implementation: impl } = await this.getAbiByAddress(opts);
154
+ abiJson = abi;
155
+ implementation= impl;
156
+ } else {
157
+ let path = abi;
158
+ let location = this.options.location;
159
+ if (location && path[0] !== '/') {
160
+ // if path not relative, check the file at ClassFile location
161
+ let relPath = class_Uri.combine(location, path);
162
+ if (await File.existsAsync(relPath)) {
163
+ path = relPath;
164
+ }
165
+ }
166
+ abiJson = await File.readAsync(path);
167
+ }
168
+
169
+ $require.notNull(abiJson, `Abi not resolved from ${abi}`);
170
+ return { abiJson, implementation };
171
+ }
172
+ private async getSources (implementation: TAddress, name: string) {
173
+ if ($address.isValid(implementation) === false) {
174
+ return null;
175
+ }
176
+
177
+ console.log('Loading contract source code.');
178
+ let meta = await this.explorer.getContractSource(implementation);
179
+ if (meta?.SourceCode == null) {
180
+ console.log('No contract source found.');
181
+ return null;
182
+ }
183
+ if (/^\s*\{/.test(meta.SourceCode) === false) {
184
+ console.log('Source contract as single file fetched.');
185
+ return {
186
+ [`${name}.sol`]: {
187
+ content: meta.SourceCode
188
+ }
189
+ };
190
+ }
191
+
192
+ let code = meta
193
+ .SourceCode
194
+ .replace(/\{\{/g, '{')
195
+ .replace(/\}\}/g, '}')
196
+
197
+ try {
198
+ let sources = JSON.parse(code);
199
+ let files = sources.sources;
200
+
201
+ console.log(`Source code (${Object.keys(files).join(', ')}) fetched.`)
202
+ return files;
203
+ } catch (error) {
204
+ console.error(`Source code can't be parsed: `, code);
205
+ throw new Error(`Source code can't be parsed: ${error.message}`);
206
+ }
207
+ }
208
+
209
+ private async getAbiByAddress (opts: { implementation: string }) {
210
+ let address = $address.expectValid(this.options.source?.abi, 'contract address is not valid');
211
+ let explorer = $require.notNull(this.explorer, `Explorer not resolved for network: ${this.options.platform}`);
212
+
213
+ try {
214
+ console.log(`Loading contracts ABI for ${address}. `)
215
+ let { abi, implementation } = await explorer.getContractAbi(address, opts);
216
+
217
+ let hasProxy = $address.eq(address, implementation) === false;
218
+ console.log(`Proxy detected: ${hasProxy ? 'YES' : 'NO' }`, hasProxy ? implementation : '');
219
+
220
+ let abiJson = JSON.parse(abi) as AbiItem[];
221
+ return { abi: abiJson, implementation };
222
+ } catch (error) {
223
+ console.error(error);
224
+ throw new Error(`ABI is not resolved from ${this.options.platform}/${address}: ${error.message ?? error}`);
225
+ }
226
+ }
227
+ }