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

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 (263) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +16 -13
  3. package/dist/src/abi/connectors/index.js +36 -0
  4. package/dist/src/abi/connectors/v1/aave.js +148 -0
  5. package/dist/src/abi/connectors/v1/aave_claim.js +4 -0
  6. package/dist/src/abi/connectors/v1/aave_migrate.js +109 -0
  7. package/dist/src/abi/connectors/v1/aave_polygon_migrate.js +110 -0
  8. package/dist/src/abi/connectors/v1/aave_stake.js +4 -0
  9. package/dist/src/abi/connectors/v1/aave_v1_import.js +54 -0
  10. package/dist/src/abi/connectors/v1/aave_v2.js +230 -0
  11. package/dist/src/abi/connectors/v1/aave_v2_import.js +59 -0
  12. package/dist/src/abi/connectors/v1/authority.js +100 -0
  13. package/dist/src/abi/connectors/v1/basic.js +136 -0
  14. package/dist/src/abi/connectors/v1/chi.js +36 -0
  15. package/dist/src/abi/connectors/v1/comp.js +4 -0
  16. package/dist/src/abi/connectors/v1/compound.js +4 -0
  17. package/dist/src/abi/connectors/v1/compoundImport.js +69 -0
  18. package/dist/src/abi/connectors/v1/compoundImport_v2.js +4 -0
  19. package/dist/src/abi/connectors/v1/compound_old.js +448 -0
  20. package/dist/src/abi/connectors/v1/curve.js +140 -0
  21. package/dist/src/abi/connectors/v1/curve_claim.js +63 -0
  22. package/dist/src/abi/connectors/v1/curve_gauge.js +158 -0
  23. package/dist/src/abi/connectors/v1/curve_sbtc.js +140 -0
  24. package/dist/src/abi/connectors/v1/curve_susd.js +140 -0
  25. package/dist/src/abi/connectors/v1/curve_three.js +79 -0
  26. package/dist/src/abi/connectors/v1/curve_y.js +140 -0
  27. package/dist/src/abi/connectors/v1/dsa_migrate_v1_to_v2.js +4 -0
  28. package/dist/src/abi/connectors/v1/dydx.js +148 -0
  29. package/dist/src/abi/connectors/v1/dydx_flash.js +52 -0
  30. package/dist/src/abi/connectors/v1/fee.js +50 -0
  31. package/dist/src/abi/connectors/v1/gelato.js +1138 -0
  32. package/dist/src/abi/connectors/v1/index.js +58 -0
  33. package/dist/src/abi/connectors/v1/instapool.js +439 -0
  34. package/dist/src/abi/connectors/v1/instapool_v2.js +126 -0
  35. package/dist/src/abi/connectors/v1/kyber.js +117 -0
  36. package/dist/src/abi/connectors/v1/maker.js +480 -0
  37. package/dist/src/abi/connectors/v1/maker_old.js +300 -0
  38. package/dist/src/abi/connectors/v1/math.js +43 -0
  39. package/dist/src/abi/connectors/v1/migrate.js +46 -0
  40. package/dist/src/abi/connectors/v1/oasis.js +198 -0
  41. package/dist/src/abi/connectors/v1/oneInch.js +160 -0
  42. package/dist/src/abi/connectors/v1/polygon_bridge.js +4 -0
  43. package/dist/src/abi/connectors/v1/refinance.js +4 -0
  44. package/dist/src/abi/connectors/v1/staking.js +220 -0
  45. package/dist/src/abi/connectors/v1/swerve.js +179 -0
  46. package/dist/src/abi/connectors/v1/uniswap.js +297 -0
  47. package/dist/src/abi/connectors/v2/1INCH-A.js +4 -0
  48. package/dist/src/abi/connectors/v2/1INCH-B.js +4 -0
  49. package/dist/src/abi/connectors/v2/AAVE-CLAIM-A.js +4 -0
  50. package/dist/src/abi/connectors/v2/AAVE-CLAIM-B.js +166 -0
  51. package/dist/src/abi/connectors/v2/AAVE-STAKE-A.js +4 -0
  52. package/dist/src/abi/connectors/v2/AAVE-V1-A.js +130 -0
  53. package/dist/src/abi/connectors/v2/AAVE-V1-IMPORT-A.js +4 -0
  54. package/dist/src/abi/connectors/v2/AAVE-V2-A.js +230 -0
  55. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-A.js +4 -0
  56. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-B.js +225 -0
  57. package/dist/src/abi/connectors/v2/AUTHORITY-A.js +100 -0
  58. package/dist/src/abi/connectors/v2/B-COMPOUND-A.js +4 -0
  59. package/dist/src/abi/connectors/v2/B-LIQUITY-A.js +4 -0
  60. package/dist/src/abi/connectors/v2/B-MAKERDAO-A.js +4 -0
  61. package/dist/src/abi/connectors/v2/BASIC-A.js +136 -0
  62. package/dist/src/abi/connectors/v2/BASIC-B.js +4 -0
  63. package/dist/src/abi/connectors/v2/BASIC-C.js +4 -0
  64. package/dist/src/abi/connectors/v2/COMP-A.js +4 -0
  65. package/dist/src/abi/connectors/v2/COMPOUND-A.js +4 -0
  66. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-A.js +4 -0
  67. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-B.js +195 -0
  68. package/dist/src/abi/connectors/v2/G-UNISWAP-A.js +4 -0
  69. package/dist/src/abi/connectors/v2/GELATO-AAVE-A.js +4 -0
  70. package/dist/src/abi/connectors/v2/INST-A.js +4 -0
  71. package/dist/src/abi/connectors/v2/INST-LM-A.js +4 -0
  72. package/dist/src/abi/connectors/v2/INST-STAKING-A.js +4 -0
  73. package/dist/src/abi/connectors/v2/INST-STAKING-B.js +4 -0
  74. package/dist/src/abi/connectors/v2/INSTAPOOL-A.js +4 -0
  75. package/dist/src/abi/connectors/v2/LIQUITY-A.js +4 -0
  76. package/dist/src/abi/connectors/v2/MAKERDAO-A.js +4 -0
  77. package/dist/src/abi/connectors/v2/MAKERDAO-CLAIM-A.js +136 -0
  78. package/dist/src/abi/connectors/v2/PARASWAP-A.js +4 -0
  79. package/dist/src/abi/connectors/v2/POLYGON-BRIDGE-A.js +4 -0
  80. package/dist/src/abi/connectors/v2/REFINANCE-A.js +4 -0
  81. package/dist/src/abi/connectors/v2/REFLEXER-A.js +4 -0
  82. package/dist/src/abi/connectors/v2/STAKE-ERC20-A.js +4 -0
  83. package/dist/src/abi/connectors/v2/UNISWAP-A.js +297 -0
  84. package/dist/src/abi/connectors/v2/UNISWAP-V2-A.js +4 -0
  85. package/dist/src/abi/connectors/v2/UNISWAP-V3-A.js +4 -0
  86. package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.js +4 -0
  87. package/dist/src/abi/connectors/v2/WETH-A.js +4 -0
  88. package/dist/src/abi/connectors/v2/YEARN-VAULT-A.js +4 -0
  89. package/dist/src/abi/connectors/v2/index.js +89 -0
  90. package/dist/src/abi/index.js +4 -4
  91. package/dist/src/abi/interopX.json +1436 -0
  92. package/dist/src/alias.js +10 -0
  93. package/dist/src/api/index.js +1 -1
  94. package/dist/src/constants/addresses.js +4 -7
  95. package/dist/src/constants/blockConfirmations.js +8 -0
  96. package/dist/src/constants/index.js +1 -1
  97. package/dist/src/constants/tokens.js +62 -39
  98. package/dist/src/db/models/transaction.js +37 -15
  99. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  100. package/dist/src/gnosis/actions/aaveV2/source.js +73 -0
  101. package/dist/src/gnosis/actions/aaveV2/target.js +85 -0
  102. package/dist/src/gnosis/actions/index.js +2 -4
  103. package/dist/src/gnosis/index.js +11 -7
  104. package/dist/src/index.js +7 -18
  105. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +8 -3
  106. package/dist/src/net/protocol/dial/TransactionStatusDialProtocol.js +2 -0
  107. package/dist/src/net/protocol/index.js +11 -1
  108. package/dist/src/tasks/InteropX/ProcessSubmitSubmitEvents.js +179 -0
  109. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +87 -0
  110. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +105 -0
  111. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
  112. package/dist/src/tasks/index.js +14 -29
  113. package/dist/src/typechain/{InteropBridgeToken.js → InteropX.js} +0 -0
  114. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  115. package/dist/src/typechain/factories/index.js +3 -5
  116. package/dist/src/typechain/index.js +3 -5
  117. package/dist/src/utils/index.js +97 -31
  118. package/package.json +16 -13
  119. package/src/abi/connectors/index.ts +14 -0
  120. package/src/abi/connectors/v1/aave.ts +147 -0
  121. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  122. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  123. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  124. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  125. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  126. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  127. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  128. package/src/abi/connectors/v1/authority.ts +99 -0
  129. package/src/abi/connectors/v1/basic.ts +135 -0
  130. package/src/abi/connectors/v1/chi.ts +35 -0
  131. package/src/abi/connectors/v1/comp.ts +3 -0
  132. package/src/abi/connectors/v1/compound.ts +3 -0
  133. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  134. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  135. package/src/abi/connectors/v1/compound_old.ts +447 -0
  136. package/src/abi/connectors/v1/curve.ts +139 -0
  137. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  138. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  139. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  140. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  141. package/src/abi/connectors/v1/curve_three.ts +78 -0
  142. package/src/abi/connectors/v1/curve_y.ts +139 -0
  143. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  144. package/src/abi/connectors/v1/dydx.ts +147 -0
  145. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  146. package/src/abi/connectors/v1/fee.ts +49 -0
  147. package/src/abi/connectors/v1/gelato.ts +1137 -0
  148. package/src/abi/connectors/v1/index.ts +42 -0
  149. package/src/abi/connectors/v1/instapool.ts +438 -0
  150. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  151. package/src/abi/connectors/v1/kyber.ts +116 -0
  152. package/src/abi/connectors/v1/maker.ts +479 -0
  153. package/src/abi/connectors/v1/maker_old.ts +299 -0
  154. package/src/abi/connectors/v1/math.ts +42 -0
  155. package/src/abi/connectors/v1/migrate.ts +45 -0
  156. package/src/abi/connectors/v1/oasis.ts +197 -0
  157. package/src/abi/connectors/v1/oneInch.ts +159 -0
  158. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  159. package/src/abi/connectors/v1/refinance.ts +3 -0
  160. package/src/abi/connectors/v1/staking.ts +219 -0
  161. package/src/abi/connectors/v1/swerve.ts +178 -0
  162. package/src/abi/connectors/v1/uniswap.ts +297 -0
  163. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  164. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  165. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  166. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  167. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  168. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  169. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  170. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  171. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  172. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  173. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  174. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  175. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  176. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  177. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  178. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  179. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  180. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  181. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  182. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  183. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  184. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  185. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  186. package/src/abi/connectors/v2/INST-A.ts +3 -0
  187. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  188. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  189. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  190. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  191. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  192. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  193. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  194. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  195. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  196. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  197. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  198. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  199. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  200. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  201. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  202. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  203. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  204. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  205. package/src/abi/connectors/v2/index.ts +87 -0
  206. package/src/abi/index.ts +7 -7
  207. package/src/abi/interopX.json +1436 -0
  208. package/src/alias.ts +6 -0
  209. package/src/api/index.ts +1 -1
  210. package/src/constants/addresses.ts +5 -8
  211. package/src/constants/blockConfirmations.ts +5 -0
  212. package/src/constants/index.ts +1 -1
  213. package/src/constants/tokens.ts +63 -40
  214. package/src/db/models/transaction.ts +138 -65
  215. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  216. package/src/gnosis/actions/aaveV2/source.ts +118 -0
  217. package/src/gnosis/actions/aaveV2/target.ts +132 -0
  218. package/src/gnosis/actions/index.ts +2 -4
  219. package/src/gnosis/index.ts +11 -5
  220. package/src/index.ts +6 -17
  221. package/src/net/protocol/dial/SignatureDialProtocol.ts +11 -5
  222. package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +3 -1
  223. package/src/net/protocol/index.ts +13 -3
  224. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +269 -0
  225. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +139 -0
  226. package/src/tasks/InteropX/SyncLogValidateEvents.ts +152 -0
  227. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
  228. package/src/tasks/index.ts +16 -37
  229. package/src/typechain/InteropX.ts +1216 -0
  230. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  231. package/src/typechain/factories/index.ts +1 -2
  232. package/src/typechain/index.ts +2 -4
  233. package/src/utils/index.ts +232 -65
  234. package/tsconfig.json +7 -2
  235. package/dist/src/abi/interopBridgeToken.json +0 -298
  236. package/dist/src/abi/interopXGateway.json +0 -184
  237. package/dist/src/constants/itokens.js +0 -13
  238. package/dist/src/gnosis/actions/deposit.js +0 -40
  239. package/dist/src/gnosis/actions/withdraw.js +0 -45
  240. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -147
  241. package/dist/src/tasks/InteropBridge/SyncBurnEvents.js +0 -71
  242. package/dist/src/tasks/InteropBridge/SyncMintEvents.js +0 -67
  243. package/dist/src/tasks/InteropXGateway/ProcessDepositEvents.js +0 -163
  244. package/dist/src/tasks/InteropXGateway/SyncDepositEvents.js +0 -74
  245. package/dist/src/tasks/InteropXGateway/SyncWithdrawtEvents.js +0 -72
  246. package/dist/src/typechain/InteropXGateway.js +0 -2
  247. package/dist/src/typechain/factories/InteropBridgeToken__factory.js +0 -471
  248. package/dist/src/typechain/factories/InteropXGateway__factory.js +0 -265
  249. package/src/abi/interopBridgeToken.json +0 -298
  250. package/src/abi/interopXGateway.json +0 -184
  251. package/src/constants/itokens.ts +0 -10
  252. package/src/gnosis/actions/deposit.ts +0 -54
  253. package/src/gnosis/actions/withdraw.ts +0 -61
  254. package/src/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -232
  255. package/src/tasks/InteropBridge/SyncBurnEvents.ts +0 -121
  256. package/src/tasks/InteropBridge/SyncMintEvents.ts +0 -99
  257. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -258
  258. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
  259. package/src/tasks/InteropXGateway/SyncWithdrawtEvents.ts +0 -105
  260. package/src/typechain/InteropBridgeToken.ts +0 -692
  261. package/src/typechain/InteropXGateway.ts +0 -407
  262. package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -478
  263. package/src/typechain/factories/InteropXGateway__factory.ts +0 -272
@@ -0,0 +1,132 @@
1
+ import abi from "@/abi";
2
+ import config from "@/config";
3
+ import { addresses } from "@/constants";
4
+ import { Transaction } from "@/db";
5
+ import { InteropX } from "@/typechain";
6
+ import { ChainId } from "@/types";
7
+ import { encodeConnectorMethod, getContract, getRpcProviderUrl } from "@/utils";
8
+ import { ethers } from "ethers";
9
+ import { MetaTransaction, OperationType } from "ethers-multisend";
10
+
11
+
12
+ export default async function (transaction: Transaction) {
13
+ const transactions: MetaTransaction[] = [];
14
+ const logs: any[] = [];
15
+
16
+ const {
17
+ sourceSpells,
18
+ position,
19
+ actionId,
20
+ sourceSender,
21
+ sourceDsaId,
22
+ targetDsaId,
23
+ sourceChainId,
24
+ targetChainId,
25
+ vnonce,
26
+ metadata,
27
+ } = transaction.validateEvent;
28
+
29
+ const targetChainProvider = new ethers.providers.JsonRpcProvider(
30
+ getRpcProviderUrl(targetChainId as ChainId)
31
+ );
32
+ const targetWallet = new ethers.Wallet(
33
+ config.privateKey,
34
+ targetChainProvider
35
+ );
36
+ const dsaAddress = addresses[targetChainId].dsaAddress;
37
+ const sourceUserAddress = Number(sourceDsaId) == 0 ? sourceSender : dsaAddress;
38
+ const interopAddress = addresses[sourceChainId].interopX;
39
+ const contract = getContract<InteropX>(
40
+ interopAddress,
41
+ abi.interopX,
42
+ targetWallet
43
+ );
44
+
45
+ const targetSpells: any[] = [];
46
+ const commonSpells: any[] = [];
47
+
48
+ for (const supplyToken of position.supply) {
49
+ let spellData = {
50
+ connector: "AAVE-V2-A",
51
+ method: "deposit",
52
+ args: [supplyToken.targetToken, supplyToken.amount, "0", "0"],
53
+ };
54
+
55
+ targetSpells.push({
56
+ connector: spellData.connector,
57
+ data: encodeConnectorMethod(spellData),
58
+ });
59
+
60
+ let spellDataBasicWithdraw = {
61
+ connector: "BASIC-A",
62
+ method: "withdraw",
63
+ args: [supplyToken.targetToken, supplyToken.amount, sourceUserAddress, "0", "0"],
64
+ };
65
+
66
+ commonSpells.push({
67
+ connector: spellDataBasicWithdraw.method,
68
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
69
+ });
70
+ }
71
+
72
+ for (const withdrawToken of position.withdraw) {
73
+
74
+ let spellData = {
75
+ connector: "AAVE-V2-A",
76
+ method: "borrow",
77
+ args: [
78
+ withdrawToken.targetToken,
79
+ withdrawToken.amount,
80
+ "2",
81
+ "0",
82
+ "0",
83
+ ],
84
+ };
85
+
86
+ targetSpells.push({
87
+ connector: spellData.connector,
88
+ data: encodeConnectorMethod(spellData),
89
+ });
90
+
91
+ let spellData2 = {
92
+ connector: "BASIC-A",
93
+ method: "withdraw",
94
+ args: [
95
+ withdrawToken.targetToken,
96
+ withdrawToken.amount,
97
+ dsaAddress,
98
+ "0",
99
+ "0",
100
+ ],
101
+ };
102
+
103
+ targetSpells.push({
104
+ connector: spellData.connector,
105
+ data: encodeConnectorMethod(spellData2),
106
+ });
107
+ }
108
+
109
+ const { data } = await contract.populateTransaction.targetAction(
110
+ sourceSpells,
111
+ targetSpells,
112
+ commonSpells,
113
+ position,
114
+ actionId,
115
+ sourceSender,
116
+ sourceDsaId,
117
+ targetDsaId,
118
+ sourceChainId,
119
+ targetChainId,
120
+ vnonce,
121
+ metadata
122
+ );
123
+
124
+ transactions.push({
125
+ to: interopAddress,
126
+ data: data!,
127
+ value: "0",
128
+ operation: OperationType.Call,
129
+ });
130
+
131
+ return { transactions, logs }
132
+ }
@@ -1,7 +1,5 @@
1
- import deposit from "./deposit"
2
- import withdraw from "./withdraw"
1
+ import aaveV2 from "./aaveV2"
3
2
 
4
3
  export default {
5
- deposit,
6
- withdraw,
4
+ 'A:AAVE-V2:AAVE-V2': aaveV2,
7
5
  }
@@ -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";
@@ -104,7 +89,9 @@ async function main() {
104
89
 
105
90
  const tasks = new Tasks()
106
91
 
107
- tasks.start();
92
+ setTimeout(() => {
93
+ tasks.start();
94
+ }, 10000)
108
95
 
109
96
  startApiServer()
110
97
 
@@ -129,10 +116,12 @@ async function main() {
129
116
  transaction.sourceStatus = payload.data.sourceStatus
130
117
  transaction.sourceTransactionHash = payload.data.sourceTransactionHash
131
118
  transaction.sourceErrors = payload.data.sourceErrors
119
+ transaction.sourceLogs = payload.data.sourceLogs
132
120
 
133
121
  transaction.targetStatus = payload.data.targetStatus
134
122
  transaction.targetTransactionHash = payload.data.targetTransactionHash
135
123
  transaction.targetErrors = payload.data.targetErrors
124
+ transaction.targetLogs = payload.data.targetLogs
136
125
 
137
126
  transaction.status = payload.data.status
138
127
 
@@ -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,269 @@
1
+ import { BaseTask } from "../BaseTask";
2
+ import Logger from "@/logger";
3
+ import { ethers, Wallet } from "ethers";
4
+ import abi from "@/abi";
5
+ import { Transaction } from "@/db";
6
+ import {
7
+ buildSignatureBytes,
8
+ generateGnosisTransaction,
9
+ generateInteropTransactionHash,
10
+ getContract,
11
+ getRpcProviderUrl,
12
+ LiquidityError,
13
+ Signature,
14
+ } from "@/utils";
15
+ import { addresses, blockConfirmations } from "@/constants";
16
+ import { ChainId } from "@/types";
17
+ import config from "@/config";
18
+ import { GnosisSafe, InteropX } from "@/typechain";
19
+ import moment from "moment";
20
+ import { Op } from "sequelize";
21
+ import { buildGnosisAction } from "@/gnosis";
22
+ import { peerPool, protocol } from "@/net";
23
+ import { LogDescription } from "ethers/lib/utils";
24
+ import wait from "waait";
25
+
26
+ class ProcessSubmitSubmitEvents extends BaseTask {
27
+ sourceProvider: ethers.providers.JsonRpcProvider;
28
+ sourceGnosisContract: GnosisSafe;
29
+ sourceWallet: Wallet;
30
+ chainId: ChainId;
31
+ leadNodeOnly: boolean = true;
32
+ blockConfirmationsCount: number = 12;
33
+
34
+ constructor({ chainId }: { chainId: ChainId }) {
35
+ super({
36
+ logger: new Logger("InteropX::ProcessSubmitSubmitEvents"),
37
+ });
38
+ this.chainId = chainId;
39
+ }
40
+
41
+ async pollHandler() {
42
+ const currentBlockNumber = await this.sourceProvider.getBlockNumber();
43
+
44
+ const transaction = await Transaction.findOne({
45
+ where: {
46
+ status: "pending",
47
+ sourceStatus: "pending",
48
+ sourceChainId: this.chainId,
49
+ submitBlockNumber: {
50
+ [Op.lt]: currentBlockNumber - this.blockConfirmationsCount,
51
+ },
52
+ sourceDelayUntil: {
53
+ [Op.or]: {
54
+ [Op.is]: null,
55
+ [Op.lt]: new Date(),
56
+ },
57
+ },
58
+
59
+ submitEvent: { $ne: null },
60
+
61
+ createdAt: {
62
+ [Op.gt]: moment().subtract({ hours: 12 }).toDate(),
63
+ },
64
+ },
65
+ });
66
+
67
+ if (!transaction) {
68
+ return;
69
+ }
70
+
71
+ this.logger.debug(`Processing transaction ${transaction.transactionHash}`);
72
+
73
+ transaction.sourceStatus = "proccessing";
74
+ await transaction.save();
75
+
76
+ const ownersThreshold = await this.sourceGnosisContract.getThreshold();
77
+ await wait(10000);
78
+
79
+ this.logger.debug(`Build gnosis action for ${transaction.transactionHash}`);
80
+
81
+ let data,
82
+ logs = [];
83
+
84
+ try {
85
+ ({ data, logs } = await buildGnosisAction(transaction, "source"));
86
+ } catch (error) {
87
+ if (error instanceof LiquidityError) {
88
+ await transaction.save();
89
+ transaction.sourceDelayUntil = new Date(Date.now() + 60 * 5 * 1000);
90
+ transaction.sourceStatus = "pending";
91
+
92
+ await transaction.save();
93
+
94
+ throw error;
95
+ return;
96
+ }
97
+
98
+ transaction.sourceStatus = "failed";
99
+ transaction.sourceErrors = [error.message];
100
+ transaction.targetStatus = "failed";
101
+
102
+ transaction.status = "failed";
103
+ await transaction.save();
104
+ protocol.sendTransaction(transaction);
105
+ return;
106
+ }
107
+
108
+ this.logger.debug(
109
+ `Generating gnosis tx for ${transaction.transactionHash}`
110
+ );
111
+
112
+ let gnosisTx = await generateGnosisTransaction(
113
+ {
114
+ baseGas: "0",
115
+ data,
116
+ gasPrice: "0",
117
+ gasToken: "0x0000000000000000000000000000000000000000",
118
+ nonce: "0",
119
+ operation: "1",
120
+ refundReceiver: "0x0000000000000000000000000000000000000000",
121
+ safeAddress: this.sourceGnosisContract.address,
122
+ safeTxGas: "79668",
123
+ to: addresses[transaction.sourceChainId].multisend,
124
+ value: "0",
125
+ },
126
+ this.sourceGnosisContract
127
+ );
128
+
129
+ const owners = await this.sourceGnosisContract
130
+ .getOwners()
131
+ .then((owners) => owners.map((owner) => owner.toLowerCase()));
132
+
133
+ const ownerPeerIds = peerPool.activePeers
134
+ .filter((peer) => owners.includes(peer.publicAddress.toLowerCase()))
135
+ .map((peer) => peer.id);
136
+
137
+ console.log(
138
+ `Collecting signatures for execution ${transaction.transactionHash}`
139
+ );
140
+
141
+ console.log(ownerPeerIds);
142
+
143
+ const signatures = await protocol.requestSignatures(
144
+ {
145
+ type: "source",
146
+ transactionHash: transaction.transactionHash,
147
+ safeTxGas: gnosisTx.safeTxGas,
148
+ safeNonce: gnosisTx.nonce,
149
+ chainId: this.chainId,
150
+ },
151
+ ownerPeerIds
152
+ );
153
+
154
+ const validSignatures = signatures.filter(
155
+ (s) => !!s.data && s.data !== "0x"
156
+ ) as Signature[];
157
+
158
+ console.log({
159
+ signatures,
160
+ validSignatures,
161
+ ownersThreshold: ownersThreshold.toString(),
162
+ });
163
+
164
+ if (
165
+ validSignatures.length === 0 ||
166
+ ownersThreshold.gt(validSignatures.length)
167
+ ) {
168
+ await transaction.save();
169
+ transaction.sourceDelayUntil = new Date(Date.now() + 30 * 1000);
170
+ transaction.sourceStatus = "pending";
171
+
172
+ await transaction.save();
173
+ const errorMessage = signatures.find((s) => !!s.error)?.error;
174
+ throw new Error(
175
+ `Not enough signatures` + (errorMessage ? `: ${errorMessage}` : "")
176
+ );
177
+ }
178
+
179
+ console.log(
180
+ `Executing transaction for execution ${transaction.transactionHash}`
181
+ );
182
+
183
+ const { data: txData } =
184
+ await this.sourceGnosisContract.populateTransaction.execTransaction(
185
+ gnosisTx.to,
186
+ gnosisTx.value,
187
+ gnosisTx.data,
188
+ gnosisTx.operation,
189
+ gnosisTx.safeTxGas,
190
+ gnosisTx.baseGas,
191
+ gnosisTx.gasPrice,
192
+ gnosisTx.gasToken,
193
+ gnosisTx.refundReceiver,
194
+ buildSignatureBytes(validSignatures)
195
+ );
196
+
197
+ const [gasPrice, gasLimit] = await Promise.all([
198
+ this.sourceProvider.getGasPrice(),
199
+ this.sourceProvider.estimateGas({
200
+ from: this.sourceWallet.address,
201
+ to: this.sourceGnosisContract.address,
202
+ data: txData,
203
+ }),
204
+ ]);
205
+
206
+ const txSent = await this.sourceWallet.sendTransaction({
207
+ from: this.sourceWallet.address,
208
+ to: this.sourceGnosisContract.address,
209
+ gasPrice: gasPrice.mul(120).div(100),
210
+ gasLimit: 5_000_000,//gasLimit.mul(120).div(100),
211
+ data: txData,
212
+ });
213
+
214
+ console.log(txSent);
215
+
216
+ const receipt = await txSent.wait();
217
+
218
+ const parsedLogs: LogDescription[] = [];
219
+
220
+ receipt.logs.forEach((log) => {
221
+ try {
222
+ parsedLogs.push(this.sourceGnosisContract.interface.parseLog(log));
223
+ } catch (e) {}
224
+ });
225
+
226
+ if (parsedLogs.find((e) => e.name === "ExecutionSuccess")) {
227
+ console.log("ExecutionSuccess");
228
+ transaction.sourceStatus = "success";
229
+ if (txSent.blockNumber)
230
+ transaction.sourceBlockNumber = txSent.blockNumber;
231
+ transaction.sourceTransactionHash = txSent.hash;
232
+ transaction.sourceLogs = logs;
233
+ await transaction.save();
234
+ } else {
235
+ console.log("ExecutionFailure");
236
+ transaction.sourceStatus = "failed";
237
+ if (txSent.blockNumber)
238
+ transaction.sourceBlockNumber = txSent.blockNumber;
239
+ transaction.sourceTransactionHash = txSent.hash;
240
+ transaction.status = "failed";
241
+ await transaction.save();
242
+ }
243
+
244
+ protocol.sendTransaction(transaction);
245
+ }
246
+
247
+ async start(): Promise<void> {
248
+ this.blockConfirmationsCount = blockConfirmations[this.chainId] + 1;
249
+
250
+ this.sourceProvider = new ethers.providers.JsonRpcProvider(
251
+ getRpcProviderUrl(this.chainId)
252
+ );
253
+
254
+ this.sourceWallet = new ethers.Wallet(
255
+ config.privateKey!,
256
+ this.sourceProvider
257
+ );
258
+
259
+ this.sourceGnosisContract = getContract<GnosisSafe>(
260
+ addresses[this.chainId].gnosisSafe,
261
+ abi.gnosisSafe,
262
+ this.sourceWallet
263
+ );
264
+
265
+ await super.start();
266
+ }
267
+ }
268
+
269
+ export default ProcessSubmitSubmitEvents;