@instadapp/interop-x 0.0.0-dev.9e91661 → 0.0.0-dev.a271713

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 (326) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +23 -13
  3. package/dist/src/abi/aaveV2Resolver.json +832 -0
  4. package/dist/src/abi/balanceResolver.json +211 -0
  5. package/dist/src/abi/connectors/index.js +36 -0
  6. package/dist/src/abi/connectors/v1/aave.js +148 -0
  7. package/dist/src/abi/connectors/v1/aave_claim.js +4 -0
  8. package/dist/src/abi/connectors/v1/aave_migrate.js +109 -0
  9. package/dist/src/abi/connectors/v1/aave_polygon_migrate.js +110 -0
  10. package/dist/src/abi/connectors/v1/aave_stake.js +4 -0
  11. package/dist/src/abi/connectors/v1/aave_v1_import.js +54 -0
  12. package/dist/src/abi/connectors/v1/aave_v2.js +230 -0
  13. package/dist/src/abi/connectors/v1/aave_v2_import.js +59 -0
  14. package/dist/src/abi/connectors/v1/authority.js +100 -0
  15. package/dist/src/abi/connectors/v1/basic.js +136 -0
  16. package/dist/src/abi/connectors/v1/chi.js +36 -0
  17. package/dist/src/abi/connectors/v1/comp.js +4 -0
  18. package/dist/src/abi/connectors/v1/compound.js +4 -0
  19. package/dist/src/abi/connectors/v1/compoundImport.js +69 -0
  20. package/dist/src/abi/connectors/v1/compoundImport_v2.js +4 -0
  21. package/dist/src/abi/connectors/v1/compound_old.js +448 -0
  22. package/dist/src/abi/connectors/v1/curve.js +140 -0
  23. package/dist/src/abi/connectors/v1/curve_claim.js +63 -0
  24. package/dist/src/abi/connectors/v1/curve_gauge.js +158 -0
  25. package/dist/src/abi/connectors/v1/curve_sbtc.js +140 -0
  26. package/dist/src/abi/connectors/v1/curve_susd.js +140 -0
  27. package/dist/src/abi/connectors/v1/curve_three.js +79 -0
  28. package/dist/src/abi/connectors/v1/curve_y.js +140 -0
  29. package/dist/src/abi/connectors/v1/dsa_migrate_v1_to_v2.js +4 -0
  30. package/dist/src/abi/connectors/v1/dydx.js +148 -0
  31. package/dist/src/abi/connectors/v1/dydx_flash.js +52 -0
  32. package/dist/src/abi/connectors/v1/fee.js +50 -0
  33. package/dist/src/abi/connectors/v1/gelato.js +1138 -0
  34. package/dist/src/abi/connectors/v1/index.js +58 -0
  35. package/dist/src/abi/connectors/v1/instapool.js +439 -0
  36. package/dist/src/abi/connectors/v1/instapool_v2.js +126 -0
  37. package/dist/src/abi/connectors/v1/kyber.js +117 -0
  38. package/dist/src/abi/connectors/v1/maker.js +480 -0
  39. package/dist/src/abi/connectors/v1/maker_old.js +300 -0
  40. package/dist/src/abi/connectors/v1/math.js +43 -0
  41. package/dist/src/abi/connectors/v1/migrate.js +46 -0
  42. package/dist/src/abi/connectors/v1/oasis.js +198 -0
  43. package/dist/src/abi/connectors/v1/oneInch.js +160 -0
  44. package/dist/src/abi/connectors/v1/polygon_bridge.js +4 -0
  45. package/dist/src/abi/connectors/v1/refinance.js +4 -0
  46. package/dist/src/abi/connectors/v1/staking.js +220 -0
  47. package/dist/src/abi/connectors/v1/swerve.js +179 -0
  48. package/dist/src/abi/connectors/v1/uniswap.js +297 -0
  49. package/dist/src/abi/connectors/v2/1INCH-A.js +4 -0
  50. package/dist/src/abi/connectors/v2/1INCH-B.js +4 -0
  51. package/dist/src/abi/connectors/v2/AAVE-CLAIM-A.js +4 -0
  52. package/dist/src/abi/connectors/v2/AAVE-CLAIM-B.js +166 -0
  53. package/dist/src/abi/connectors/v2/AAVE-STAKE-A.js +4 -0
  54. package/dist/src/abi/connectors/v2/AAVE-V1-A.js +130 -0
  55. package/dist/src/abi/connectors/v2/AAVE-V1-IMPORT-A.js +4 -0
  56. package/dist/src/abi/connectors/v2/AAVE-V2-A.js +230 -0
  57. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-A.js +4 -0
  58. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-B.js +225 -0
  59. package/dist/src/abi/connectors/v2/AUTHORITY-A.js +100 -0
  60. package/dist/src/abi/connectors/v2/B-COMPOUND-A.js +4 -0
  61. package/dist/src/abi/connectors/v2/B-LIQUITY-A.js +4 -0
  62. package/dist/src/abi/connectors/v2/B-MAKERDAO-A.js +4 -0
  63. package/dist/src/abi/connectors/v2/BASIC-A.js +136 -0
  64. package/dist/src/abi/connectors/v2/BASIC-B.js +4 -0
  65. package/dist/src/abi/connectors/v2/BASIC-C.js +4 -0
  66. package/dist/src/abi/connectors/v2/COMP-A.js +4 -0
  67. package/dist/src/abi/connectors/v2/COMPOUND-A.js +4 -0
  68. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-A.js +4 -0
  69. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-B.js +195 -0
  70. package/dist/src/abi/connectors/v2/G-UNISWAP-A.js +4 -0
  71. package/dist/src/abi/connectors/v2/GELATO-AAVE-A.js +4 -0
  72. package/dist/src/abi/connectors/v2/INST-A.js +4 -0
  73. package/dist/src/abi/connectors/v2/INST-LM-A.js +4 -0
  74. package/dist/src/abi/connectors/v2/INST-STAKING-A.js +4 -0
  75. package/dist/src/abi/connectors/v2/INST-STAKING-B.js +4 -0
  76. package/dist/src/abi/connectors/v2/INSTAPOOL-A.js +4 -0
  77. package/dist/src/abi/connectors/v2/LIQUITY-A.js +4 -0
  78. package/dist/src/abi/connectors/v2/MAKERDAO-A.js +4 -0
  79. package/dist/src/abi/connectors/v2/MAKERDAO-CLAIM-A.js +136 -0
  80. package/dist/src/abi/connectors/v2/PARASWAP-A.js +4 -0
  81. package/dist/src/abi/connectors/v2/POLYGON-BRIDGE-A.js +4 -0
  82. package/dist/src/abi/connectors/v2/REFINANCE-A.js +4 -0
  83. package/dist/src/abi/connectors/v2/REFLEXER-A.js +4 -0
  84. package/dist/src/abi/connectors/v2/STAKE-ERC20-A.js +4 -0
  85. package/dist/src/abi/connectors/v2/UNISWAP-A.js +297 -0
  86. package/dist/src/abi/connectors/v2/UNISWAP-V2-A.js +4 -0
  87. package/dist/src/abi/connectors/v2/UNISWAP-V3-A.js +4 -0
  88. package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.js +4 -0
  89. package/dist/src/abi/connectors/v2/WETH-A.js +4 -0
  90. package/dist/src/abi/connectors/v2/YEARN-VAULT-A.js +4 -0
  91. package/dist/src/abi/connectors/v2/index.js +89 -0
  92. package/dist/src/abi/index.js +10 -4
  93. package/dist/src/abi/instList.json +232 -0
  94. package/dist/src/abi/interopX.json +1436 -0
  95. package/dist/src/alias.js +10 -0
  96. package/dist/src/api/index.js +8 -1
  97. package/dist/src/constants/addresses.js +10 -7
  98. package/dist/src/constants/blockConfirmations.js +8 -0
  99. package/dist/src/constants/capPerChain.js +8 -0
  100. package/dist/src/constants/index.js +3 -1
  101. package/dist/src/constants/tokens.js +30 -7
  102. package/dist/src/constants/wrappedNativeToken.js +8 -0
  103. package/dist/src/crons/index.js +3 -0
  104. package/dist/src/crons/prices.js +16 -0
  105. package/dist/src/db/models/transaction.js +41 -15
  106. package/dist/src/errors/index.js +30 -0
  107. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  108. package/dist/src/gnosis/actions/aaveV2/source.js +74 -0
  109. package/dist/src/gnosis/actions/aaveV2/target.js +87 -0
  110. package/dist/src/gnosis/actions/aaveV3/index.js +11 -0
  111. package/dist/src/gnosis/actions/aaveV3/source.js +74 -0
  112. package/dist/src/gnosis/actions/aaveV3/target.js +87 -0
  113. package/dist/src/gnosis/actions/index.js +4 -4
  114. package/dist/src/gnosis/index.js +11 -7
  115. package/dist/src/index.js +8 -18
  116. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +8 -3
  117. package/dist/src/net/protocol/dial/TransactionStatusDialProtocol.js +2 -0
  118. package/dist/src/net/protocol/index.js +11 -1
  119. package/dist/src/providers/index.js +17 -0
  120. package/dist/src/providers/retry-provider.js +45 -0
  121. package/dist/src/services/Prices.js +74 -0
  122. package/dist/src/services/index.js +8 -0
  123. package/dist/src/tasks/InteropX/ProcessSubmitEvents.js +271 -0
  124. package/dist/src/tasks/InteropX/ProcessValidateEvents.js +203 -0
  125. package/dist/src/tasks/InteropX/SyncLogExecuteEvents.js +113 -0
  126. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +88 -0
  127. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +106 -0
  128. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
  129. package/dist/src/tasks/index.js +19 -29
  130. package/dist/src/typechain/{InteropBridgeToken.js → AaveV2Resolver.js} +0 -0
  131. package/dist/src/typechain/{InteropXGateway.js → BalanceResolver.js} +0 -0
  132. package/dist/src/typechain/InstList.js +2 -0
  133. package/dist/src/typechain/InteropX.js +2 -0
  134. package/dist/src/typechain/factories/AaveV2Resolver__factory.js +1191 -0
  135. package/dist/src/typechain/factories/BalanceResolver__factory.js +228 -0
  136. package/dist/src/typechain/factories/InstList__factory.js +249 -0
  137. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  138. package/dist/src/typechain/factories/index.js +9 -5
  139. package/dist/src/typechain/index.js +9 -5
  140. package/dist/src/utils/async.js +18 -0
  141. package/dist/src/utils/dsa.js +24 -0
  142. package/dist/src/utils/formatting.js +67 -0
  143. package/dist/src/utils/gnosis.js +87 -0
  144. package/dist/src/utils/http.js +10 -0
  145. package/dist/src/utils/index.js +22 -154
  146. package/dist/src/utils/interop.js +16 -0
  147. package/dist/src/utils/tokens.js +22 -0
  148. package/dist/src/utils/validate.js +111 -0
  149. package/dist/src/utils/web3.js +93 -0
  150. package/package.json +23 -13
  151. package/src/abi/aaveV2Resolver.json +832 -0
  152. package/src/abi/balanceResolver.json +211 -0
  153. package/src/abi/connectors/index.ts +14 -0
  154. package/src/abi/connectors/v1/aave.ts +147 -0
  155. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  156. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  157. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  158. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  159. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  160. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  161. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  162. package/src/abi/connectors/v1/authority.ts +99 -0
  163. package/src/abi/connectors/v1/basic.ts +135 -0
  164. package/src/abi/connectors/v1/chi.ts +35 -0
  165. package/src/abi/connectors/v1/comp.ts +3 -0
  166. package/src/abi/connectors/v1/compound.ts +3 -0
  167. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  168. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  169. package/src/abi/connectors/v1/compound_old.ts +447 -0
  170. package/src/abi/connectors/v1/curve.ts +139 -0
  171. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  172. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  173. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  174. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  175. package/src/abi/connectors/v1/curve_three.ts +78 -0
  176. package/src/abi/connectors/v1/curve_y.ts +139 -0
  177. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  178. package/src/abi/connectors/v1/dydx.ts +147 -0
  179. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  180. package/src/abi/connectors/v1/fee.ts +49 -0
  181. package/src/abi/connectors/v1/gelato.ts +1137 -0
  182. package/src/abi/connectors/v1/index.ts +42 -0
  183. package/src/abi/connectors/v1/instapool.ts +438 -0
  184. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  185. package/src/abi/connectors/v1/kyber.ts +116 -0
  186. package/src/abi/connectors/v1/maker.ts +479 -0
  187. package/src/abi/connectors/v1/maker_old.ts +299 -0
  188. package/src/abi/connectors/v1/math.ts +42 -0
  189. package/src/abi/connectors/v1/migrate.ts +45 -0
  190. package/src/abi/connectors/v1/oasis.ts +197 -0
  191. package/src/abi/connectors/v1/oneInch.ts +159 -0
  192. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  193. package/src/abi/connectors/v1/refinance.ts +3 -0
  194. package/src/abi/connectors/v1/staking.ts +219 -0
  195. package/src/abi/connectors/v1/swerve.ts +178 -0
  196. package/src/abi/connectors/v1/uniswap.ts +297 -0
  197. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  198. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  199. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  200. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  201. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  202. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  203. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  204. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  205. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  206. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  207. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  208. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  209. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  210. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  211. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  212. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  213. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  214. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  215. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  216. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  217. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  218. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  219. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  220. package/src/abi/connectors/v2/INST-A.ts +3 -0
  221. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  222. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  223. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  224. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  225. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  226. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  227. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  228. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  229. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  230. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  231. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  232. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  233. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  234. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  235. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  236. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  237. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  238. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  239. package/src/abi/connectors/v2/index.ts +87 -0
  240. package/src/abi/index.ts +13 -7
  241. package/src/abi/instList.json +232 -0
  242. package/src/abi/interopX.json +1436 -0
  243. package/src/alias.ts +6 -0
  244. package/src/api/index.ts +9 -1
  245. package/src/constants/addresses.ts +21 -8
  246. package/src/constants/blockConfirmations.ts +5 -0
  247. package/src/constants/capPerChain.ts +5 -0
  248. package/src/constants/index.ts +3 -1
  249. package/src/constants/tokens.ts +31 -8
  250. package/src/constants/wrappedNativeToken.ts +5 -0
  251. package/src/crons/index.ts +1 -0
  252. package/src/crons/prices.ts +12 -0
  253. package/src/db/models/transaction.ts +159 -65
  254. package/src/errors/index.ts +26 -0
  255. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  256. package/src/gnosis/actions/aaveV2/source.ts +119 -0
  257. package/src/gnosis/actions/aaveV2/target.ts +142 -0
  258. package/src/gnosis/actions/aaveV3/index.ts +9 -0
  259. package/src/gnosis/actions/aaveV3/source.ts +119 -0
  260. package/src/gnosis/actions/aaveV3/target.ts +142 -0
  261. package/src/gnosis/actions/index.ts +4 -4
  262. package/src/gnosis/index.ts +11 -5
  263. package/src/index.ts +7 -17
  264. package/src/net/protocol/dial/SignatureDialProtocol.ts +11 -5
  265. package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +3 -1
  266. package/src/net/protocol/index.ts +13 -3
  267. package/src/providers/index.ts +1 -0
  268. package/src/providers/retry-provider.ts +51 -0
  269. package/src/services/Prices.ts +89 -0
  270. package/src/services/index.ts +1 -0
  271. package/src/tasks/InteropX/ProcessSubmitEvents.ts +382 -0
  272. package/src/tasks/InteropX/ProcessValidateEvents.ts +297 -0
  273. package/src/tasks/InteropX/SyncLogExecuteEvents.ts +161 -0
  274. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
  275. package/src/tasks/InteropX/SyncLogValidateEvents.ts +151 -0
  276. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
  277. package/src/tasks/index.ts +21 -35
  278. package/src/typechain/AaveV2Resolver.ts +1017 -0
  279. package/src/typechain/BalanceResolver.ts +266 -0
  280. package/src/typechain/InstList.ts +402 -0
  281. package/src/typechain/InteropX.ts +1216 -0
  282. package/src/typechain/factories/AaveV2Resolver__factory.ts +1198 -0
  283. package/src/typechain/factories/BalanceResolver__factory.ts +235 -0
  284. package/src/typechain/factories/InstList__factory.ts +253 -0
  285. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  286. package/src/typechain/factories/index.ts +4 -2
  287. package/src/typechain/index.ts +8 -4
  288. package/src/utils/async.ts +22 -0
  289. package/src/utils/dsa.ts +30 -0
  290. package/src/utils/formatting.ts +68 -0
  291. package/src/utils/gnosis.ts +166 -0
  292. package/src/utils/http.ts +6 -0
  293. package/src/utils/index.ts +9 -198
  294. package/src/utils/interop.ts +28 -0
  295. package/src/utils/tokens.ts +21 -0
  296. package/src/utils/validate.ts +174 -0
  297. package/src/utils/web3.ts +132 -0
  298. package/tsconfig.json +7 -2
  299. package/dist/src/abi/interopBridgeToken.json +0 -298
  300. package/dist/src/abi/interopXGateway.json +0 -184
  301. package/dist/src/constants/itokens.js +0 -13
  302. package/dist/src/gnosis/actions/deposit.js +0 -40
  303. package/dist/src/gnosis/actions/withdraw.js +0 -45
  304. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -147
  305. package/dist/src/tasks/InteropBridge/SyncBurnEvents.js +0 -71
  306. package/dist/src/tasks/InteropBridge/SyncMintEvents.js +0 -67
  307. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -163
  308. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -74
  309. package/dist/src/tasks/InteropXGateway/SyncWithdrawtEvents.js +0 -72
  310. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +0 -471
  311. package/dist/src/typechain/factories/InteropXGateway__factory.js +0 -265
  312. package/src/abi/interopBridgeToken.json +0 -298
  313. package/src/abi/interopXGateway.json +0 -184
  314. package/src/constants/itokens.ts +0 -10
  315. package/src/gnosis/actions/deposit.ts +0 -54
  316. package/src/gnosis/actions/withdraw.ts +0 -61
  317. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -232
  318. package/src/tasks/InteropBridge/SyncBurnEvents.ts +0 -121
  319. package/src/tasks/InteropBridge/SyncMintEvents.ts +0 -99
  320. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -258
  321. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
  322. package/src/tasks/InteropXGateway/SyncWithdrawtEvents.ts +0 -105
  323. package/src/typechain/InteropBridgeToken.ts +0 -692
  324. package/src/typechain/InteropXGateway.ts +0 -407
  325. package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -478
  326. package/src/typechain/factories/InteropXGateway__factory.ts +0 -272
@@ -0,0 +1,142 @@
1
+ import abi from "@/abi";
2
+ import config from "@/config";
3
+ import { addresses } from "@/constants";
4
+ import { Transaction } from "@/db";
5
+ import { JsonRpcRetryProvider } from "@/providers";
6
+ import { InteropX } from "@/typechain";
7
+ import { InstList } from "@/typechain/InstList";
8
+ import { ChainId } from "@/types";
9
+ import { encodeConnectorMethod, getContract, getRpcProviderUrl } from "@/utils";
10
+ import { ethers } from "ethers";
11
+ import { MetaTransaction, OperationType } from "ethers-multisend";
12
+
13
+
14
+ export default async function (transaction: Transaction) {
15
+ const transactions: MetaTransaction[] = [];
16
+ const logs: any[] = [];
17
+
18
+ const {
19
+ sourceSpells,
20
+ position,
21
+ actionId,
22
+ sourceSender,
23
+ sourceDsaId,
24
+ targetDsaId,
25
+ sourceChainId,
26
+ targetChainId,
27
+ vnonce,
28
+ metadata,
29
+ } = transaction.validateEvent;
30
+
31
+ const targetChainProvider = new JsonRpcRetryProvider(
32
+ getRpcProviderUrl(targetChainId as ChainId)
33
+ );
34
+ const targetWallet = new ethers.Wallet(
35
+ config.privateKey,
36
+ targetChainProvider
37
+ );
38
+
39
+
40
+ const targetInstListContract = getContract<InstList>(
41
+ addresses[targetChainId].instList,
42
+ abi.instList,
43
+ targetChainProvider,
44
+ );
45
+
46
+ const targetDsaAddress = await targetInstListContract.accountAddr(targetDsaId)
47
+ const dsaAddress = addresses[targetChainId].dsaAddress;
48
+ const interopAddress = addresses[targetChainId].interopX;
49
+ const contract = getContract<InteropX>(
50
+ interopAddress,
51
+ abi.interopX,
52
+ targetWallet
53
+ );
54
+
55
+ const targetSpells: any[] = [];
56
+ const commonSpells: any[] = [];
57
+
58
+ for (const supplyToken of position.supply) {
59
+ let spellData = {
60
+ connector: "AAVE-V2-A",
61
+ method: "deposit",
62
+ args: [supplyToken.targetToken, supplyToken.amount, "0", "0"],
63
+ };
64
+
65
+ targetSpells.push({
66
+ connector: spellData.connector,
67
+ data: encodeConnectorMethod(spellData),
68
+ });
69
+
70
+ let spellDataBasicWithdraw = {
71
+ connector: "BASIC-A",
72
+ method: "withdraw",
73
+ args: [supplyToken.targetToken, supplyToken.amount, targetDsaAddress, "0", "0"],
74
+ };
75
+
76
+ commonSpells.push({
77
+ connector: spellDataBasicWithdraw.connector,
78
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
79
+ });
80
+ }
81
+
82
+ for (const withdrawToken of position.withdraw) {
83
+
84
+ let spellData = {
85
+ connector: "AAVE-V2-A",
86
+ method: "borrow",
87
+ args: [
88
+ withdrawToken.targetToken,
89
+ withdrawToken.amount,
90
+ "2",
91
+ "0",
92
+ "0",
93
+ ],
94
+ };
95
+
96
+ targetSpells.push({
97
+ connector: spellData.connector,
98
+ data: encodeConnectorMethod(spellData),
99
+ });
100
+
101
+ let spellData2 = {
102
+ connector: "BASIC-A",
103
+ method: "withdraw",
104
+ args: [
105
+ withdrawToken.targetToken,
106
+ withdrawToken.amount,
107
+ dsaAddress,
108
+ "0",
109
+ "0",
110
+ ],
111
+ };
112
+
113
+ targetSpells.push({
114
+ connector: spellData.connector,
115
+ data: encodeConnectorMethod(spellData2),
116
+ });
117
+ }
118
+
119
+ const { data } = await contract.populateTransaction.targetAction(
120
+ sourceSpells,
121
+ targetSpells,
122
+ commonSpells,
123
+ position,
124
+ actionId,
125
+ sourceSender,
126
+ sourceDsaId,
127
+ targetDsaId,
128
+ sourceChainId,
129
+ targetChainId,
130
+ vnonce,
131
+ metadata
132
+ );
133
+
134
+ transactions.push({
135
+ to: interopAddress,
136
+ data: data!,
137
+ value: "0",
138
+ operation: OperationType.Call,
139
+ });
140
+
141
+ return { transactions, logs }
142
+ }
@@ -0,0 +1,9 @@
1
+ import { Transaction } from "@/db";
2
+ import source from "./source";
3
+ import target from "./target";
4
+
5
+
6
+
7
+ export default async function (transaction: Transaction, type: 'source' | 'target') {
8
+ return type === 'source' ? source(transaction) : target(transaction);
9
+ }
@@ -0,0 +1,119 @@
1
+ import abi from "@/abi";
2
+ import config from "@/config";
3
+ import { addresses } from "@/constants";
4
+ import { Transaction } from "@/db";
5
+ import { JsonRpcRetryProvider } from "@/providers";
6
+ import { InteropX } from "@/typechain";
7
+ import { ChainId } from "@/types";
8
+ import { encodeConnectorMethod, getContract, getRpcProviderUrl } from "@/utils";
9
+ import { ethers } from "ethers";
10
+ import { MetaTransaction, OperationType } from "ethers-multisend";
11
+
12
+ export default async function (transaction: Transaction) {
13
+ const transactions: MetaTransaction[] = [];
14
+ const logs: any[] = [];
15
+
16
+ const {
17
+ position,
18
+ actionId,
19
+ actionIdHashHash,
20
+ sourceSender,
21
+ sourceDsaId,
22
+ targetDsaId,
23
+ sourceChainId,
24
+ targetChainId,
25
+ vnonce,
26
+ metadata,
27
+ } = transaction.submitEvent;
28
+
29
+ const sourceChainProvider = new JsonRpcRetryProvider(
30
+ getRpcProviderUrl(sourceChainId as ChainId)
31
+ );
32
+ const sourceWallet = new ethers.Wallet(
33
+ config.privateKey,
34
+ sourceChainProvider
35
+ );
36
+ const dsaAddress = addresses[sourceChainId].dsaAddress;
37
+ const sourceUserAddress =
38
+ Number(sourceDsaId) == 0 ? sourceSender : dsaAddress;
39
+ const interopAddress = addresses[sourceChainId].interopX;
40
+ const contract = getContract<InteropX>(
41
+ interopAddress,
42
+ abi.interopX,
43
+ sourceWallet
44
+ );
45
+
46
+ const sourceSpells: any[] = [];
47
+ const commonSpells: any[] = [];
48
+
49
+ for (const withdraw of position.withdraw) {
50
+ let spellData = {
51
+ connector: "AAVE-V2-A",
52
+ method: "payback",
53
+ args: [withdraw.sourceToken, withdraw.amount, "2", "0", "0"],
54
+ };
55
+
56
+ sourceSpells.push({
57
+ connector: spellData.connector,
58
+ data: encodeConnectorMethod(spellData),
59
+ });
60
+
61
+ let spellDataBasicWithdraw = {
62
+ connector: "BASIC-A",
63
+ method: "withdraw",
64
+ args: [withdraw.sourceToken, withdraw.amount, sourceUserAddress, "0", "0"],
65
+ };
66
+
67
+ commonSpells.push({
68
+ connector: spellDataBasicWithdraw.connector,
69
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
70
+ });
71
+ }
72
+
73
+ for (const supply of position.supply) {
74
+ let spellDataWithdraw = {
75
+ connector: "AAVE-V2-A",
76
+ method: "withdraw",
77
+ args: [supply.sourceToken, supply.amount, "0", "0"],
78
+ };
79
+
80
+ sourceSpells.push({
81
+ connector: spellDataWithdraw.connector,
82
+ data: encodeConnectorMethod(spellDataWithdraw),
83
+ });
84
+
85
+ let spellDataBasicWithdraw = {
86
+ connector: "BASIC-A",
87
+ method: "withdraw",
88
+ args: [supply.sourceToken, supply.amount, dsaAddress, "0", "0"],
89
+ };
90
+
91
+ sourceSpells.push({
92
+ connector: spellDataBasicWithdraw.connector,
93
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
94
+ });
95
+ }
96
+
97
+ const { data } = await contract.populateTransaction.sourceAction(
98
+ sourceSpells,
99
+ commonSpells,
100
+ position,
101
+ actionId,
102
+ sourceSender,
103
+ sourceDsaId,
104
+ targetDsaId,
105
+ sourceChainId,
106
+ targetChainId,
107
+ vnonce,
108
+ metadata
109
+ );
110
+
111
+ transactions.push({
112
+ to: interopAddress,
113
+ data: data!,
114
+ value: "0",
115
+ operation: OperationType.Call,
116
+ });
117
+
118
+ return { transactions, logs };
119
+ }
@@ -0,0 +1,142 @@
1
+ import abi from "@/abi";
2
+ import config from "@/config";
3
+ import { addresses } from "@/constants";
4
+ import { Transaction } from "@/db";
5
+ import { JsonRpcRetryProvider } from "@/providers";
6
+ import { InteropX } from "@/typechain";
7
+ import { InstList } from "@/typechain/InstList";
8
+ import { ChainId } from "@/types";
9
+ import { encodeConnectorMethod, getContract, getRpcProviderUrl } from "@/utils";
10
+ import { ethers } from "ethers";
11
+ import { MetaTransaction, OperationType } from "ethers-multisend";
12
+
13
+
14
+ export default async function (transaction: Transaction) {
15
+ const transactions: MetaTransaction[] = [];
16
+ const logs: any[] = [];
17
+
18
+ const {
19
+ sourceSpells,
20
+ position,
21
+ actionId,
22
+ sourceSender,
23
+ sourceDsaId,
24
+ targetDsaId,
25
+ sourceChainId,
26
+ targetChainId,
27
+ vnonce,
28
+ metadata,
29
+ } = transaction.validateEvent;
30
+
31
+ const targetChainProvider = new JsonRpcRetryProvider(
32
+ getRpcProviderUrl(targetChainId as ChainId)
33
+ );
34
+ const targetWallet = new ethers.Wallet(
35
+ config.privateKey,
36
+ targetChainProvider
37
+ );
38
+
39
+
40
+ const targetInstListContract = getContract<InstList>(
41
+ addresses[targetChainId].instList,
42
+ abi.instList,
43
+ targetChainProvider,
44
+ );
45
+
46
+ const targetDsaAddress = await targetInstListContract.accountAddr(targetDsaId)
47
+ const dsaAddress = addresses[targetChainId].dsaAddress;
48
+ const interopAddress = addresses[targetChainId].interopX;
49
+ const contract = getContract<InteropX>(
50
+ interopAddress,
51
+ abi.interopX,
52
+ targetWallet
53
+ );
54
+
55
+ const targetSpells: any[] = [];
56
+ const commonSpells: any[] = [];
57
+
58
+ for (const supplyToken of position.supply) {
59
+ let spellData = {
60
+ connector: "AAVE-V2-A",
61
+ method: "deposit",
62
+ args: [supplyToken.targetToken, supplyToken.amount, "0", "0"],
63
+ };
64
+
65
+ targetSpells.push({
66
+ connector: spellData.connector,
67
+ data: encodeConnectorMethod(spellData),
68
+ });
69
+
70
+ let spellDataBasicWithdraw = {
71
+ connector: "BASIC-A",
72
+ method: "withdraw",
73
+ args: [supplyToken.targetToken, supplyToken.amount, targetDsaAddress, "0", "0"],
74
+ };
75
+
76
+ commonSpells.push({
77
+ connector: spellDataBasicWithdraw.connector,
78
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
79
+ });
80
+ }
81
+
82
+ for (const withdrawToken of position.withdraw) {
83
+
84
+ let spellData = {
85
+ connector: "AAVE-V2-A",
86
+ method: "borrow",
87
+ args: [
88
+ withdrawToken.targetToken,
89
+ withdrawToken.amount,
90
+ "2",
91
+ "0",
92
+ "0",
93
+ ],
94
+ };
95
+
96
+ targetSpells.push({
97
+ connector: spellData.connector,
98
+ data: encodeConnectorMethod(spellData),
99
+ });
100
+
101
+ let spellData2 = {
102
+ connector: "BASIC-A",
103
+ method: "withdraw",
104
+ args: [
105
+ withdrawToken.targetToken,
106
+ withdrawToken.amount,
107
+ dsaAddress,
108
+ "0",
109
+ "0",
110
+ ],
111
+ };
112
+
113
+ targetSpells.push({
114
+ connector: spellData.connector,
115
+ data: encodeConnectorMethod(spellData2),
116
+ });
117
+ }
118
+
119
+ const { data } = await contract.populateTransaction.targetAction(
120
+ sourceSpells,
121
+ targetSpells,
122
+ commonSpells,
123
+ position,
124
+ actionId,
125
+ sourceSender,
126
+ sourceDsaId,
127
+ targetDsaId,
128
+ sourceChainId,
129
+ targetChainId,
130
+ vnonce,
131
+ metadata
132
+ );
133
+
134
+ transactions.push({
135
+ to: interopAddress,
136
+ data: data!,
137
+ value: "0",
138
+ operation: OperationType.Call,
139
+ });
140
+
141
+ return { transactions, logs }
142
+ }
@@ -1,7 +1,7 @@
1
- import deposit from "./deposit"
2
- import withdraw from "./withdraw"
1
+ import aaveV2 from "./aaveV2"
2
+ import aaveV3 from "./aaveV3"
3
3
 
4
4
  export default {
5
- deposit,
6
- withdraw,
5
+ 'A:AAVE-V2:AAVE-V2': aaveV2,
6
+ 'A:AAVE-V3:AAVE-V3': aaveV3,
7
7
  }
@@ -2,12 +2,18 @@ import { Transaction } from "@/db";
2
2
  import { encodeMulti } from "ethers-multisend";
3
3
  import actions from "./actions";
4
4
 
5
- export const buildGnosisData = async (transaction: Transaction, type?: 'source' | 'target') => {
6
- type = type || transaction.sourceStatus === 'pending' ? 'source' : 'target';
5
+ export const buildGnosisAction = async (transaction: Transaction, type: 'source' | 'target') => {
6
+ // type = type || (transaction.sourceStatus === 'success' ? 'target' : 'source')
7
7
 
8
- if (actions.hasOwnProperty(transaction.action)) {
9
- return encodeMulti(actions[transaction.action](transaction, type)).data;
8
+ if (actions.hasOwnProperty(transaction.actionId)) {
9
+
10
+ const { transactions, logs } = await actions[transaction.actionId](transaction, type);
11
+
12
+ return {
13
+ data: encodeMulti(transactions).data,
14
+ logs
15
+ };
10
16
  }
11
17
 
12
- throw new Error(`Unknown action: ${transaction.action}`);
18
+ throw new Error(`Unknown action: ${transaction.actionId}`);
13
19
  }
package/src/index.ts CHANGED
@@ -1,22 +1,7 @@
1
- import moduleAlias from 'module-alias';
1
+ import './alias'
2
2
  import expandHomeDir from "expand-home-dir";
3
3
  import fs from 'fs-extra'
4
- moduleAlias.addAliases({
5
- "@/": __dirname + "/",
6
- "@/logger": __dirname + "/logger",
7
- "@/tasks": __dirname + "/tasks",
8
- "@/utils": __dirname + "/utils",
9
- "@/api": __dirname + "/api",
10
- "@/net": __dirname + "/net",
11
- "@/db": __dirname + "/db",
12
- "@/config": __dirname + "/config",
13
- "@/types": __dirname + "/types",
14
- "@/abi": __dirname + "/abi",
15
- "@/constants": __dirname + "/constants",
16
- "@/typechain": __dirname + "/typechain"
17
- })
18
4
 
19
- moduleAlias();
20
5
  import dotenv from "dotenv";
21
6
  import chalk from 'chalk';
22
7
  import { ethers } from "ethers";
@@ -97,6 +82,7 @@ import { startPeer, protocol, peerPool } from "@/net";
97
82
  import { startApiServer } from '@/api';
98
83
  import { Transaction } from './db';
99
84
  import { shortenHash } from './utils';
85
+ import './crons';
100
86
 
101
87
  async function main() {
102
88
 
@@ -104,7 +90,9 @@ async function main() {
104
90
 
105
91
  const tasks = new Tasks()
106
92
 
107
- tasks.start();
93
+ setTimeout(() => {
94
+ tasks.start();
95
+ }, 10000)
108
96
 
109
97
  startApiServer()
110
98
 
@@ -129,10 +117,12 @@ async function main() {
129
117
  transaction.sourceStatus = payload.data.sourceStatus
130
118
  transaction.sourceTransactionHash = payload.data.sourceTransactionHash
131
119
  transaction.sourceErrors = payload.data.sourceErrors
120
+ transaction.sourceLogs = payload.data.sourceLogs
132
121
 
133
122
  transaction.targetStatus = payload.data.targetStatus
134
123
  transaction.targetTransactionHash = payload.data.targetTransactionHash
135
124
  transaction.targetErrors = payload.data.targetErrors
125
+ transaction.targetLogs = payload.data.targetLogs
136
126
 
137
127
  transaction.status = payload.data.status
138
128
 
@@ -5,13 +5,14 @@ import { Transaction } from "@/db";
5
5
  import { signGnosisSafeTx } from "@/utils";
6
6
  import { addresses } from "@/constants";
7
7
  import { ChainId } from "@/types";
8
- import { buildGnosisData } from "@/gnosis";
8
+ import { buildGnosisAction } from "@/gnosis";
9
9
 
10
10
  export interface ISignatureRequest {
11
- type: 'source' | 'target' ,
11
+ type: 'source' | 'target',
12
12
  transactionHash: string
13
13
  safeTxGas: string
14
14
  safeNonce: string
15
+ chainId: number
15
16
  }
16
17
  export interface ISignatureResponse {
17
18
  signer: string,
@@ -26,6 +27,10 @@ export class SignatureDialProtocol extends BaseDialProtocol<ISignatureRequest, I
26
27
  }
27
28
 
28
29
  async response(data: ISignatureRequest): Promise<ISignatureResponse> {
30
+ console.log({
31
+ tag: 'SignatureDialProtocol',
32
+ data
33
+ })
29
34
  const signer = config.wallet;
30
35
 
31
36
  let transaction: Transaction | null;
@@ -47,11 +52,12 @@ export class SignatureDialProtocol extends BaseDialProtocol<ISignatureRequest, I
47
52
  error: 'Event not found'
48
53
  };
49
54
  }
55
+ const { data: gnosisData } = await buildGnosisAction(transaction, data.type);
50
56
 
51
57
  const signedData = await signGnosisSafeTx({
52
- to: addresses[transaction.targetChainId].multisend,
53
- data: await buildGnosisData(transaction, data.type),
54
- chainId: transaction.targetChainId as ChainId,
58
+ to: addresses[data.chainId].multisend,
59
+ data: gnosisData,
60
+ chainId: data.chainId as ChainId,
55
61
  safeTxGas: data.safeTxGas,
56
62
  nonce: data.safeNonce,
57
63
  }, { signer });
@@ -1,7 +1,7 @@
1
1
  import { BaseDialProtocol } from "./BaseDialProtocol";
2
2
  import { Transaction } from "@/db";
3
3
 
4
- export class TransactionStatusDialProtocol extends BaseDialProtocol<string, Pick<Transaction, 'transactionHash' | 'sourceStatus' | 'sourceTransactionHash' | 'sourceErrors' | 'targetStatus' | 'targetTransactionHash' | 'targetErrors' | 'status'> | null> {
4
+ export class TransactionStatusDialProtocol extends BaseDialProtocol<string, Pick<Transaction, 'transactionHash' | 'sourceStatus' | 'sourceTransactionHash' | 'sourceErrors' | 'sourceLogs' | 'targetStatus' | 'targetTransactionHash' | 'targetErrors' | 'targetLogs' | 'status'> | null> {
5
5
  protected timeout = 30000;
6
6
 
7
7
  constructor(libp2p) {
@@ -20,10 +20,12 @@ export class TransactionStatusDialProtocol extends BaseDialProtocol<string, Pick
20
20
  sourceStatus: transaction.sourceStatus,
21
21
  sourceTransactionHash: transaction.sourceTransactionHash,
22
22
  sourceErrors: transaction.sourceErrors,
23
+ sourceLogs: transaction.sourceLogs,
23
24
 
24
25
  targetStatus: transaction.targetStatus,
25
26
  targetTransactionHash: transaction.targetTransactionHash,
26
27
  targetErrors: transaction.targetErrors,
28
+ targetLogs: transaction.targetLogs,
27
29
 
28
30
  status: transaction.status,
29
31
  }
@@ -36,7 +36,7 @@ interface PeerInfoEvent extends BaseMessageEvent {
36
36
  }
37
37
 
38
38
  interface TransactionStatusEvent extends BaseMessageEvent {
39
- data: Pick<Transaction, 'transactionHash' | 'sourceStatus' | 'sourceTransactionHash' | 'sourceErrors' | 'targetStatus' | 'targetTransactionHash' | 'targetErrors' | 'status'>
39
+ data: Pick<Transaction, 'transactionHash' | 'sourceStatus' | 'sourceTransactionHash' | 'sourceErrors' | 'sourceLogs' | 'targetStatus' | 'targetTransactionHash' | 'targetErrors' | 'targetLogs' | 'status'>
40
40
  }
41
41
 
42
42
  declare interface Protocol {
@@ -68,23 +68,33 @@ class Protocol extends EventEmitter {
68
68
  Buffer.from(transaction.sourceStatus),
69
69
  Buffer.from(transaction.sourceTransactionHash || ''),
70
70
  transaction.sourceErrors ? transaction.sourceErrors.map((e) => Buffer.from(e)) : [],
71
+ transaction.sourceLogs ? transaction.sourceLogs.map((e) => [Buffer.from(e.type), Buffer.from(e.message)]) : [],
71
72
 
72
73
  Buffer.from(transaction.targetStatus),
73
74
  Buffer.from(transaction.targetTransactionHash || ''),
74
75
  transaction.targetErrors ? transaction.targetErrors.map((e) => Buffer.from(e)) : [],
76
+ transaction.targetLogs ? transaction.targetLogs.map((e) => [Buffer.from(e.type), Buffer.from(e.message)]) : [],
75
77
 
76
78
  Buffer.from(transaction.status),
77
79
  ],
78
- decode: ([transactionHash, sourceStatus, sourceTransactionHash, sourceErrors, targetStatus, targetTransactionHash, targetErrors, status]: [Buffer, Buffer, Buffer, Buffer[], Buffer, Buffer, Buffer[], Buffer]) => ({
80
+ decode: ([transactionHash, sourceStatus, sourceTransactionHash, sourceErrors, sourceLogs, targetStatus, targetTransactionHash, targetErrors, targetLogs, status]: [Buffer, Buffer, Buffer, Buffer[],[Buffer,Buffer][], Buffer, Buffer, Buffer[],[Buffer,Buffer][], Buffer]) => ({
79
81
  transactionHash: transactionHash.toString(),
80
82
 
81
83
  sourceStatus: sourceStatus.toString(),
82
84
  sourceTransactionHash: sourceTransactionHash.toString() || null,
83
85
  sourceErrors: sourceErrors.map((e) => e.toString()),
86
+ sourceLogs: sourceLogs.map(e => ({
87
+ type: e[0].toString(),
88
+ message: e[1].toString(),
89
+ })),
84
90
 
85
91
  targetStatus: targetStatus.toString(),
86
- targetTransactionHash: targetTransactionHash.toString()|| null,
92
+ targetTransactionHash: targetTransactionHash.toString() || null,
87
93
  targetErrors: targetErrors.map((e) => e.toString()),
94
+ targetLogs: targetLogs.map(e => ({
95
+ type: e[0].toString(),
96
+ message: e[1].toString(),
97
+ })),
88
98
 
89
99
  status: status.toString(),
90
100
  }),
@@ -0,0 +1 @@
1
+ export * from './retry-provider';
@@ -0,0 +1,51 @@
1
+ import { ethers } from "ethers";
2
+ import wait from "waait";
3
+ import Bluebird from "bluebird";
4
+
5
+ export interface RetryOptions {
6
+ delay?: number;
7
+ timeouts: number[];
8
+ }
9
+
10
+ export function promiseTimeout<T>(ms: number, promise: Promise<T>): Promise<T> {
11
+ return Bluebird.resolve(promise).timeout(ms);
12
+ }
13
+
14
+ export function retryOperation(
15
+ retriesLeft: number,
16
+ operation: () => Promise<any>,
17
+ options: RetryOptions
18
+ ) {
19
+ return new Promise((resolve, reject) => {
20
+ const { timeouts } = options;
21
+ // Find the timeout for this specific iteration
22
+ const timeout = timeouts[timeouts.length - retriesLeft];
23
+
24
+ // Wrap the original operation in a timeout
25
+ const execution = promiseTimeout(timeout, operation());
26
+
27
+ // If the promise is successful, resolve it and bubble the result up
28
+ return execution.then(resolve).catch((reason: any) => {
29
+ // If there are any retries left, we call the same retryOperation function again,
30
+ // but decrementing the number of retries left by 1
31
+ if (retriesLeft - 1 > 0) {
32
+ // Delay the new attempt slightly
33
+ return wait(options.delay || 50)
34
+ .then(retryOperation.bind(null, retriesLeft - 1, operation, options))
35
+ .then(resolve)
36
+ .catch(reject);
37
+ }
38
+ // Reject (and bubble the result up) if there are no more retries
39
+ return reject(reason);
40
+ });
41
+ });
42
+ }
43
+
44
+ export class JsonRpcRetryProvider extends ethers.providers.JsonRpcProvider {
45
+ public perform(method: string, params: any): Promise<any> {
46
+ const timeouts = [5_000, 10_000];
47
+ const operation = () => super.perform(method, params);
48
+
49
+ return retryOperation(2, operation, { timeouts, delay: 50 });
50
+ }
51
+ }