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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TPChain = void 0;
4
+ class TPChain {
5
+ constructor(platform, explorer) {
6
+ this.platform = platform;
7
+ this.explorer = explorer;
8
+ }
9
+ async getByAddress(platform, address) {
10
+ if (this.platform !== platform) {
11
+ return null;
12
+ }
13
+ try {
14
+ let source = await this.explorer?.getContractSource(address);
15
+ return {
16
+ address: address,
17
+ symbol: source
18
+ .ContractName
19
+ ?.replace(/bep20/i, ''),
20
+ };
21
+ }
22
+ catch (error) {
23
+ // just ignore if not resolved
24
+ return null;
25
+ }
26
+ }
27
+ getBySymbol(platform, symbol) {
28
+ // Does not support by name
29
+ return null;
30
+ }
31
+ async redownloadTokens() {
32
+ return [];
33
+ }
34
+ }
35
+ exports.TPChain = TPChain;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TPCoinmarketcap = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const atma_utils_1 = require("atma-utils");
9
+ const JsonArrayStore_1 = require("@dequanto/json/JsonArrayStore");
10
+ const _config_1 = require("@dequanto/utils/$config");
11
+ const ATokenProvider_1 = require("./ATokenProvider");
12
+ const coinmarketcap = _config_1.$config.get('coinmarketcap');
13
+ const tokensStore = new JsonArrayStore_1.JsonArrayStore({
14
+ path: atma_utils_1.class_Uri.combine(coinmarketcap?.cache ?? './data/tokens/coinmarketcap/', 'tokens.json'),
15
+ key: (x) => x.symbol
16
+ });
17
+ const HOST = `https://pro-api.coinmarketcap.com/`;
18
+ class TPCoinmarketcap extends ATokenProvider_1.ATokenProvider {
19
+ getTokens() {
20
+ return tokensStore.getAll();
21
+ }
22
+ async redownloadTokens() {
23
+ if (coinmarketcap == null) {
24
+ console.warn(`No ApiKey for coinmarketcap found. Skipping this token provider`);
25
+ return [];
26
+ }
27
+ let url = atma_utils_1.class_Uri.combine(HOST, `/v1/cryptocurrency/map?CMC_PRO_API_KEY=${coinmarketcap.key}`);
28
+ let resp = await axios_1.default.get(url);
29
+ let tokens = resp.data.data;
30
+ let arr = tokens.map(token => {
31
+ if (token.platform == null) {
32
+ return null;
33
+ }
34
+ let platform;
35
+ switch (token.platform.name) {
36
+ case "Binance Smart Chain":
37
+ platform = "bsc";
38
+ break;
39
+ case "Ethereum":
40
+ platform = "eth";
41
+ break;
42
+ case "Polygon":
43
+ platform = "polygon";
44
+ break;
45
+ case "xDai":
46
+ platform = "xdai";
47
+ break;
48
+ default:
49
+ return null;
50
+ }
51
+ return {
52
+ symbol: token.symbol,
53
+ name: token.name,
54
+ platforms: [{
55
+ platform,
56
+ address: token.platform.token_address
57
+ }]
58
+ };
59
+ }).filter(Boolean);
60
+ await tokensStore.saveAll(arr);
61
+ }
62
+ }
63
+ exports.TPCoinmarketcap = TPCoinmarketcap;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TPOneInch = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const JsonArrayStore_1 = require("@dequanto/json/JsonArrayStore");
9
+ const TokenUtils_1 = require("../utils/TokenUtils");
10
+ const ATokenProvider_1 = require("./ATokenProvider");
11
+ const _path_1 = require("@dequanto/utils/$path");
12
+ class TPOneInch extends ATokenProvider_1.ATokenProvider {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.store = new JsonArrayStore_1.JsonArrayStore({
16
+ path: _path_1.$path.resolve('/data/tokens/1inch.json'),
17
+ key: x => x.symbol,
18
+ format: true,
19
+ });
20
+ }
21
+ getTokens() {
22
+ return this.store.getAll();
23
+ }
24
+ async redownloadTokens() {
25
+ let tokensByPlatform = await Promise.all([
26
+ this.downloadForPlatform('eth'),
27
+ this.downloadForPlatform('bsc'),
28
+ this.downloadForPlatform('polygon'),
29
+ ]);
30
+ let globals = TokenUtils_1.TokenUtils.merge(...tokensByPlatform);
31
+ await this.store.saveAll(globals);
32
+ return globals;
33
+ }
34
+ async downloadForPlatform(platform) {
35
+ let url;
36
+ switch (platform) {
37
+ case 'eth':
38
+ url = `https://api.1inch.exchange/v3.0/1/tokens`;
39
+ break;
40
+ case 'bsc':
41
+ url = `https://api.1inch.exchange/v3.0/56/tokens`;
42
+ break;
43
+ case 'polygon':
44
+ url = `https://api.1inch.exchange/v3.0/137/tokens`;
45
+ break;
46
+ default:
47
+ throw new Error(`Invalid Platform ${platform}`);
48
+ }
49
+ let resp = await axios_1.default.get(url);
50
+ let hash = resp.data.tokens;
51
+ let arr = Object.keys(hash).map(key => {
52
+ let t = hash[key];
53
+ return {
54
+ symbol: t.symbol,
55
+ name: t.name,
56
+ decimals: t.decimals,
57
+ logo: t.logoURI,
58
+ platform: platform,
59
+ address: t.address,
60
+ };
61
+ });
62
+ return arr;
63
+ }
64
+ }
65
+ exports.TPOneInch = TPOneInch;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TPSushiswap = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const JsonArrayStore_1 = require("@dequanto/json/JsonArrayStore");
9
+ const TokenUtils_1 = require("../utils/TokenUtils");
10
+ const ATokenProvider_1 = require("./ATokenProvider");
11
+ const _path_1 = require("@dequanto/utils/$path");
12
+ class TPSushiswap extends ATokenProvider_1.ATokenProvider {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.store = new JsonArrayStore_1.JsonArrayStore({
16
+ path: _path_1.$path.resolve('/data/tokens/sushi.json'),
17
+ key: x => x.symbol,
18
+ format: true,
19
+ });
20
+ }
21
+ getTokens() {
22
+ return this.store.getAll();
23
+ }
24
+ /** Finds remote */
25
+ async find(address) {
26
+ throw new Error('Not implemented');
27
+ }
28
+ async redownloadTokens() {
29
+ let tokensByPlatform = await Promise.all([
30
+ this.downloadForPlatform('eth'),
31
+ this.downloadForPlatform('polygon'),
32
+ this.downloadForPlatform('xdai'),
33
+ ]);
34
+ let globals = TokenUtils_1.TokenUtils.merge(...tokensByPlatform);
35
+ await this.store.saveAll(globals);
36
+ return globals;
37
+ }
38
+ async downloadForPlatform(platform) {
39
+ let url;
40
+ let mapper;
41
+ function mapperApi(resp) {
42
+ let arr = resp.data[1];
43
+ return arr.map(t => {
44
+ return {
45
+ symbol: t.Symbol,
46
+ name: t.Name,
47
+ decimals: t.Decimals,
48
+ platform: platform,
49
+ address: t.Contract,
50
+ };
51
+ });
52
+ }
53
+ function mapperGithub(resp) {
54
+ let arr = resp.data;
55
+ return arr.map(t => {
56
+ return {
57
+ symbol: t.symbol,
58
+ name: t.name,
59
+ decimals: t.decimals,
60
+ platform: platform,
61
+ address: t.address,
62
+ };
63
+ });
64
+ }
65
+ switch (platform) {
66
+ case 'eth':
67
+ url = `https://api2.sushipro.io/?action=all_tokens&chainID=1`;
68
+ mapper = mapperApi;
69
+ break;
70
+ case 'bsc':
71
+ throw new Error(`Bsc is not supported by sushiswap api`);
72
+ break;
73
+ case 'polygon':
74
+ url = `https://api2.sushipro.io/?action=all_tokens&chainID=137`;
75
+ mapper = mapperApi;
76
+ break;
77
+ case 'xdai':
78
+ url = `https://raw.githubusercontent.com/sushiswap/default-token-list/master/tokens/xdai.json`;
79
+ mapper = mapperGithub;
80
+ break;
81
+ default:
82
+ throw new Error(`Invalid Platform ${platform}`);
83
+ }
84
+ let resp = await axios_1.default.get(url);
85
+ let tokens = mapper(resp);
86
+ return tokens;
87
+ }
88
+ }
89
+ exports.TPSushiswap = TPSushiswap;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TPUniswap = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const JsonArrayStore_1 = require("@dequanto/json/JsonArrayStore");
9
+ const ATokenProvider_1 = require("./ATokenProvider");
10
+ const _path_1 = require("@dequanto/utils/$path");
11
+ const TheGraphUrl = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2';
12
+ class TPUniswap extends ATokenProvider_1.ATokenProvider {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.store = new JsonArrayStore_1.JsonArrayStore({
16
+ path: _path_1.$path.resolve('/data/tokens/uni.json'),
17
+ key: x => x.symbol
18
+ });
19
+ }
20
+ getTokens() {
21
+ return this.store.getAll();
22
+ }
23
+ /** Finds remote */
24
+ async find(address) {
25
+ let body = {
26
+ query: `
27
+ {
28
+ tokens (where: {id: "${address}"}) {
29
+ id
30
+ symbol
31
+ name
32
+ decimals
33
+ }
34
+ }
35
+ `
36
+ };
37
+ let resp = await axios_1.default.post(TheGraphUrl, body);
38
+ return resp.data.data?.tokens[0];
39
+ }
40
+ async redownloadTokens() {
41
+ let skip = 0;
42
+ let take = 1000;
43
+ let out = [];
44
+ while (true) {
45
+ let body = {
46
+ query: `
47
+ {
48
+ tokens (skip: ${skip} first:${take}) {
49
+ id
50
+ symbol
51
+ name
52
+ decimals
53
+ }
54
+ }
55
+ `
56
+ };
57
+ let resp = await axios_1.default.post(TheGraphUrl, body);
58
+ console.log(resp);
59
+ let tokens = resp.data.data?.tokens ?? [];
60
+ let arr = tokens.map(uniT => {
61
+ return {
62
+ symbol: uniT.symbol,
63
+ name: uniT.name,
64
+ decimals: Number(uniT.decimals) || 18,
65
+ platforms: [
66
+ {
67
+ platform: 'eth',
68
+ address: uniT.id,
69
+ decimals: uniT.decimals,
70
+ }
71
+ ]
72
+ };
73
+ });
74
+ out = out.concat(...arr);
75
+ if (tokens.length < take) {
76
+ break;
77
+ }
78
+ skip += take;
79
+ }
80
+ await this.store.saveAll(out);
81
+ return out;
82
+ }
83
+ }
84
+ exports.TPUniswap = TPUniswap;
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenService = void 0;
7
+ const a_di_1 = __importDefault(require("a-di"));
8
+ const WXDaiTokenContract_1 = require("@dequanto/chains/xdai/tokens/WXDaiTokenContract");
9
+ const _bigint_1 = require("@dequanto/utils/$bigint");
10
+ const TokensServiceFactory_1 = require("./TokensServiceFactory");
11
+ const _require_1 = require("@dequanto/utils/$require");
12
+ class TokenService {
13
+ constructor(client) {
14
+ this.client = client;
15
+ this.tokensProvider = TokensServiceFactory_1.TokensServiceFactory.get(this.client.platform);
16
+ }
17
+ async balanceOf(address, token) {
18
+ token = await this.getToken(token);
19
+ let isNative = this.tokensProvider.isNative(token.address);
20
+ if (isNative) {
21
+ return this.client.getBalance(address);
22
+ }
23
+ let erc20 = await this.tokensProvider.erc20(token);
24
+ let balance = await erc20.balanceOf(address);
25
+ return balance;
26
+ }
27
+ async hasToken(address, token, amount) {
28
+ let t = await this.getToken(token);
29
+ let balance = await this.balanceOf(address, t);
30
+ let wei = _bigint_1.$bigint.toWei(amount, t.decimals);
31
+ return wei <= balance;
32
+ }
33
+ async ensureApproved(account, tokenMix, spender, amount) {
34
+ let token = await this.getToken(tokenMix);
35
+ let erc20 = await this.tokensProvider.erc20(token.address);
36
+ let approved = await erc20.allowance(account.address, spender);
37
+ let desiredApproval = typeof amount === 'bigint'
38
+ ? amount
39
+ : _bigint_1.$bigint.toWei(amount, token.decimals);
40
+ if (true || approved < desiredApproval) {
41
+ return await erc20
42
+ .$config({
43
+ gasEstimation: true,
44
+ type: 2,
45
+ }, {
46
+ retries: 0
47
+ })
48
+ .approve(account, spender, desiredApproval * 2n);
49
+ }
50
+ return null;
51
+ }
52
+ /**
53
+ * @param amount Can be negative (wraps all with rest)
54
+ */
55
+ async wrapNativeToERC20(account, amount) {
56
+ let amountWei = _bigint_1.$bigint.toWei(amount, 18);
57
+ if (amountWei < 0n) {
58
+ let balance = await this.client.getBalance(account.address);
59
+ amountWei = balance + amountWei;
60
+ }
61
+ _require_1.$require.gt(amountWei, 0n);
62
+ let depositor;
63
+ switch (this.client.platform) {
64
+ case 'xdai':
65
+ depositor = a_di_1.default.resolve(WXDaiTokenContract_1.WXDaiTokenContract);
66
+ break;
67
+ }
68
+ if (depositor == null) {
69
+ throw new Error(`Wrapping depositor not found for platform ${this.client?.platform}`);
70
+ }
71
+ return await depositor.deposit({
72
+ ...account,
73
+ value: amountWei
74
+ });
75
+ }
76
+ /**
77
+ *
78
+ */
79
+ async unwrapNative(account, amount) {
80
+ let depositor;
81
+ switch (this.client.platform) {
82
+ case 'xdai':
83
+ depositor = a_di_1.default.resolve(WXDaiTokenContract_1.WXDaiTokenContract);
84
+ break;
85
+ }
86
+ if (depositor == null) {
87
+ throw new Error(`Wrapping depositor not found for platform ${this.client?.platform}`);
88
+ }
89
+ if (amount == null || amount === Infinity) {
90
+ amount = await depositor.balanceOf(account.address);
91
+ }
92
+ let amountWei = typeof amount === 'number'
93
+ ? _bigint_1.$bigint.toWei(amount, 18)
94
+ : amount;
95
+ console.log(amount, amountWei);
96
+ _require_1.$require.gt(amountWei, 0n);
97
+ return await depositor.withdraw(account, amountWei);
98
+ }
99
+ async getToken(mix) {
100
+ let token = typeof mix === 'string'
101
+ ? await this.tokensProvider.getKnownToken(mix)
102
+ : mix;
103
+ if (this.tokensProvider.isNative(token.address)) {
104
+ token = {
105
+ ...token,
106
+ address: '0x0000000000000000000000000000000000000000',
107
+ };
108
+ }
109
+ if (token == null || token.address == null) {
110
+ throw new Error(`Address undefined: ${token}`);
111
+ }
112
+ return token;
113
+ }
114
+ }
115
+ exports.TokenService = TokenService;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenSwapService = void 0;
7
+ const ChainAccountsService_1 = require("@dequanto/ChainAccountsService");
8
+ const a_di_1 = __importDefault(require("a-di"));
9
+ const Paraswap_1 = require("./defi/paraswap/Paraswap");
10
+ class TokenSwapService {
11
+ constructor(client, provider = a_di_1.default.resolve(Paraswap_1.Paraswap, client.platform, client)) {
12
+ this.client = client;
13
+ this.provider = provider;
14
+ }
15
+ async swap(account, params) {
16
+ if (typeof account === 'string') {
17
+ let accountsService = a_di_1.default.resolve(ChainAccountsService_1.ChainAccountsService);
18
+ let acc = await accountsService.get(account, this.client.platform);
19
+ if (acc == null) {
20
+ throw new Error(`Account ${account} not found`);
21
+ }
22
+ account = acc;
23
+ }
24
+ // let transfer = di.resolve(TokenTransferService, this.client);
25
+ // let balance = await transfer.getBalance(account, params.from);
26
+ // let token = await transfer.getToken(TOKEN_FROM);
27
+ // let amount = balance - $bigint.toWei(24, token.decimals);
28
+ let { from, to, amount } = params;
29
+ let tx = await this.provider.swap(account, {
30
+ from: from,
31
+ to: to,
32
+ fromAmount: amount,
33
+ });
34
+ return tx;
35
+ }
36
+ }
37
+ exports.TokenSwapService = TokenSwapService;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenTransferService = void 0;
7
+ const a_di_1 = __importDefault(require("a-di"));
8
+ const TxDataBuilder_1 = require("@dequanto/txs/TxDataBuilder");
9
+ const TxWriter_1 = require("@dequanto/txs/TxWriter");
10
+ const _bigint_1 = require("@dequanto/utils/$bigint");
11
+ const _is_1 = require("@dequanto/utils/$is");
12
+ const TokensService_1 = require("./TokensService");
13
+ const _address_1 = require("@dequanto/utils/$address");
14
+ const _promise_1 = require("@dequanto/utils/$promise");
15
+ const LoggerService_1 = require("@dequanto/loggers/LoggerService");
16
+ const _logger_1 = require("@dequanto/utils/$logger");
17
+ class TokenTransferService {
18
+ constructor(client, logger = a_di_1.default.resolve(LoggerService_1.LoggerService)) {
19
+ this.client = client;
20
+ this.logger = logger;
21
+ this.tokenService = a_di_1.default.resolve(TokensService_1.TokensService, this.client.platform);
22
+ }
23
+ $config(txConfig) {
24
+ this.txConfig = txConfig;
25
+ return this;
26
+ }
27
+ async getBalance(address, token) {
28
+ token = await this.getToken(token);
29
+ let isNative = this.tokenService.isNative(token.address);
30
+ if (isNative) {
31
+ return this.client.getBalance(address);
32
+ }
33
+ let erc20 = await TokensService_1.TokensService.erc20(token, this.client.platform);
34
+ let balance = await erc20.balanceOf(address);
35
+ return balance;
36
+ }
37
+ async getReceived(receipt) {
38
+ let receiver = receipt.from;
39
+ let ANYTOKEN = 'USDC';
40
+ let erc20 = await TokensService_1.TokensService.erc20(ANYTOKEN, this.client.platform);
41
+ let transfers = erc20.extractLogsTransfer(receipt);
42
+ let transfer = transfers.find(x => _address_1.$address.eq(x.to, receiver));
43
+ return transfer?.value ?? 0n;
44
+ }
45
+ /** Returns NULL for transaction, if no balance to transfer */
46
+ async transferAll(from, to, token) {
47
+ token = await this.getToken(token);
48
+ let isNative = this.tokenService.isNative(token.address);
49
+ if (isNative) {
50
+ return this.transferNativeAll(from, to);
51
+ }
52
+ return this.transferErc20All(from, to, token);
53
+ }
54
+ async transferAllWithRemainder(from, to, token, remainder) {
55
+ token = await this.getToken(token);
56
+ let isNative = this.tokenService.isNative(token.address);
57
+ if (isNative) {
58
+ return this.transferNativeAll(from, to, { remainder });
59
+ }
60
+ return this.transferErc20All(from, to, token, { remainder });
61
+ }
62
+ async transfer(from, to, token, amount) {
63
+ token = await this.getToken(token);
64
+ amount = this.getAmount(amount, token);
65
+ let isNative = this.tokenService.isNative(token.address);
66
+ if (isNative) {
67
+ return this.transferNative(from, to, amount);
68
+ }
69
+ return this.transferErc20(from, to, token, amount);
70
+ }
71
+ async getToken(token) {
72
+ if (typeof token === 'string') {
73
+ token = await this.tokenService.getKnownToken(token);
74
+ }
75
+ _is_1.$is.notNull(token, 'Token is undefined to transfer');
76
+ return token;
77
+ }
78
+ isNativeToken(token) {
79
+ return this.tokenService.isNative(typeof token === 'string' ? token : token.address);
80
+ }
81
+ async transferNativeAll(from, to, opts) {
82
+ let buildTxRetries = 1;
83
+ const buildTx = async () => {
84
+ let GAS = 21000;
85
+ let GAS_RATIO = 1.05;
86
+ let [balance, gasPrice] = await Promise.all([
87
+ this.client.getBalance(from.address),
88
+ this.client.getGasPrice()
89
+ ]);
90
+ if (opts?.remainder != null) {
91
+ let remainder = this.getAmount(opts.remainder, 18);
92
+ balance -= remainder;
93
+ }
94
+ let $gasPrice = _bigint_1.$bigint.multWithFloat(gasPrice.price, GAS_RATIO);
95
+ console.log('$gasPrice', _bigint_1.$bigint.toGweiFromWei($gasPrice));
96
+ let gasConsumed = BigInt(GAS) * $gasPrice;
97
+ let transferValue = balance - gasConsumed;
98
+ if (transferValue <= 0) {
99
+ if (--buildTxRetries > -1) {
100
+ _logger_1.$logger.log(`No balance to transfer retry in 5s`);
101
+ await _promise_1.$promise.wait(5000);
102
+ return buildTx();
103
+ }
104
+ // No balance to transfer
105
+ _logger_1.$logger.log(`No balance to transfer in ${from.address}. ${opts?.remainder ? ("Remainder: " + opts?.remainder) : ""}`);
106
+ return null;
107
+ }
108
+ let txBuilder = new TxDataBuilder_1.TxDataBuilder(this.client, from, {
109
+ to: to,
110
+ value: _bigint_1.$bigint.toHex(transferValue)
111
+ });
112
+ txBuilder.data.gasPrice = _bigint_1.$bigint.toHex($gasPrice);
113
+ // txBuilder.data.maxFeePerGas = $bigint.toHex($gasPrice - 20n**9n);
114
+ // txBuilder.data.maxPriorityFeePerGas = $bigint.toHex(20n**9n);
115
+ txBuilder.data.gasLimit = GAS;
116
+ txBuilder.data.type = 1;
117
+ txBuilder.setConfig(this.txConfig);
118
+ await Promise.all([
119
+ txBuilder.setNonce({ overriding: true }),
120
+ ]);
121
+ _logger_1.$logger.log(`TransferNative ALL. Balance ${balance}; GasConsumed ${gasConsumed}; TransferValue ${transferValue}; Nonce: ${txBuilder.data.nonce}`);
122
+ return txBuilder;
123
+ };
124
+ let txBuilder = await buildTx();
125
+ return TxWriter_1.TxWriter.write(this.client, txBuilder, from, {
126
+ retries: 3,
127
+ async onErrorRebuild(tx, error, errCount) {
128
+ // In case we got `balance` value, but that one was outdated, then all our calculations where wrong.
129
+ // Retry the calculation and transfer once again.
130
+ if (/insufficient funds/.test(error.message)) {
131
+ const ms = 6000 * errCount;
132
+ _logger_1.$logger.log(`TokenTransfer Failed: insufficient funds. Waiting ${ms}ms to retry`);
133
+ await _promise_1.$promise.wait(ms);
134
+ return buildTx();
135
+ }
136
+ return null;
137
+ }
138
+ });
139
+ }
140
+ async transferNative(from, to, amount) {
141
+ let txBuilder = new TxDataBuilder_1.TxDataBuilder(this.client, from, {
142
+ to: to,
143
+ value: _bigint_1.$bigint.toHex(amount)
144
+ });
145
+ let GAS = 21000;
146
+ await Promise.all([
147
+ txBuilder.setGas({ priceRatio: this.gasPriorityFee, gasLimit: GAS }),
148
+ txBuilder.setNonce(),
149
+ ]);
150
+ txBuilder.setConfig(this.txConfig);
151
+ return TxWriter_1.TxWriter.write(this.client, txBuilder, from);
152
+ }
153
+ async transferErc20All(from, to, token, opts) {
154
+ let erc20 = await TokensService_1.TokensService.erc20(token, this.client.platform);
155
+ let balance = await erc20.balanceOf(from.address);
156
+ if (opts?.remainder != null) {
157
+ let remainder = this.getAmount(opts.remainder, 18);
158
+ balance -= remainder;
159
+ }
160
+ if (balance <= 0n) {
161
+ if (opts?.retryCount == null || opts?.retryCount !== 0) {
162
+ // re-read
163
+ this.logger.warn(`TransferErc20All has no balance to transfer: ${token.address}. Balance re-fetch scheduled.`);
164
+ await _promise_1.$promise.wait(4000);
165
+ return this.transferErc20All(from, to, token, {
166
+ ...(opts ?? {}),
167
+ retryCount: 0
168
+ });
169
+ }
170
+ return null;
171
+ }
172
+ return erc20
173
+ .$config(this.txConfig)
174
+ .transfer(from, to, balance);
175
+ }
176
+ async transferErc20(from, to, token, amount) {
177
+ let erc20 = await TokensService_1.TokensService.erc20(token, this.client.platform);
178
+ return erc20
179
+ .$config(this.txConfig)
180
+ .transfer(from, to, amount);
181
+ }
182
+ getAmount(amount, mix) {
183
+ if (typeof amount === 'number') {
184
+ amount = _bigint_1.$bigint.toWei(amount, typeof mix === 'number' ? mix : mix.decimals);
185
+ }
186
+ return amount;
187
+ }
188
+ }
189
+ exports.TokenTransferService = TokenTransferService;