@instadapp/interop-x 0.0.0-dev.fded533 → 0.0.0-dev.ffcf753

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 (261) 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 +3 -0
  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 +9 -0
  103. package/dist/src/gnosis/index.js +20 -0
  104. package/dist/src/index.js +7 -18
  105. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +9 -10
  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/ProcessValidateEvents.js +183 -0
  110. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +87 -0
  111. package/dist/src/tasks/InteropX/SyncLogValidateEvents.js +105 -0
  112. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +8 -3
  113. package/dist/src/tasks/index.js +17 -29
  114. package/dist/src/typechain/{InteropBridgeToken.js → InteropX.js} +0 -0
  115. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  116. package/dist/src/typechain/factories/index.js +3 -5
  117. package/dist/src/typechain/index.js +3 -5
  118. package/dist/src/utils/index.js +97 -112
  119. package/package.json +16 -13
  120. package/src/abi/connectors/index.ts +14 -0
  121. package/src/abi/connectors/v1/aave.ts +147 -0
  122. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  123. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  124. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  125. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  126. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  127. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  128. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  129. package/src/abi/connectors/v1/authority.ts +99 -0
  130. package/src/abi/connectors/v1/basic.ts +135 -0
  131. package/src/abi/connectors/v1/chi.ts +35 -0
  132. package/src/abi/connectors/v1/comp.ts +3 -0
  133. package/src/abi/connectors/v1/compound.ts +3 -0
  134. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  135. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  136. package/src/abi/connectors/v1/compound_old.ts +447 -0
  137. package/src/abi/connectors/v1/curve.ts +139 -0
  138. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  139. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  140. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  141. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  142. package/src/abi/connectors/v1/curve_three.ts +78 -0
  143. package/src/abi/connectors/v1/curve_y.ts +139 -0
  144. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  145. package/src/abi/connectors/v1/dydx.ts +147 -0
  146. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  147. package/src/abi/connectors/v1/fee.ts +49 -0
  148. package/src/abi/connectors/v1/gelato.ts +1137 -0
  149. package/src/abi/connectors/v1/index.ts +42 -0
  150. package/src/abi/connectors/v1/instapool.ts +438 -0
  151. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  152. package/src/abi/connectors/v1/kyber.ts +116 -0
  153. package/src/abi/connectors/v1/maker.ts +479 -0
  154. package/src/abi/connectors/v1/maker_old.ts +299 -0
  155. package/src/abi/connectors/v1/math.ts +42 -0
  156. package/src/abi/connectors/v1/migrate.ts +45 -0
  157. package/src/abi/connectors/v1/oasis.ts +197 -0
  158. package/src/abi/connectors/v1/oneInch.ts +159 -0
  159. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  160. package/src/abi/connectors/v1/refinance.ts +3 -0
  161. package/src/abi/connectors/v1/staking.ts +219 -0
  162. package/src/abi/connectors/v1/swerve.ts +178 -0
  163. package/src/abi/connectors/v1/uniswap.ts +297 -0
  164. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  165. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  166. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  167. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  168. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  169. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  170. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  171. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  172. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  173. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  174. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  175. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  176. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  177. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  178. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  179. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  180. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  181. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  182. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  183. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  184. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  185. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  186. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  187. package/src/abi/connectors/v2/INST-A.ts +3 -0
  188. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  189. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  190. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  191. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  192. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  193. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  194. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  195. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  196. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  197. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  198. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  199. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  200. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  201. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  202. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  203. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  204. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  205. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  206. package/src/abi/connectors/v2/index.ts +87 -0
  207. package/src/abi/index.ts +7 -7
  208. package/src/abi/interopX.json +1436 -0
  209. package/src/alias.ts +6 -0
  210. package/src/api/index.ts +3 -0
  211. package/src/constants/addresses.ts +5 -8
  212. package/src/constants/blockConfirmations.ts +5 -0
  213. package/src/constants/index.ts +1 -1
  214. package/src/constants/tokens.ts +63 -40
  215. package/src/db/models/transaction.ts +138 -65
  216. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  217. package/src/gnosis/actions/aaveV2/source.ts +118 -0
  218. package/src/gnosis/actions/aaveV2/target.ts +132 -0
  219. package/src/gnosis/actions/index.ts +5 -0
  220. package/src/gnosis/index.ts +19 -0
  221. package/src/index.ts +6 -17
  222. package/src/net/protocol/dial/SignatureDialProtocol.ts +12 -13
  223. package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +3 -1
  224. package/src/net/protocol/index.ts +13 -3
  225. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +269 -0
  226. package/src/tasks/InteropX/ProcessValidateEvents.ts +274 -0
  227. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +139 -0
  228. package/src/tasks/InteropX/SyncLogValidateEvents.ts +152 -0
  229. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +8 -3
  230. package/src/tasks/index.ts +19 -36
  231. package/src/typechain/InteropX.ts +1216 -0
  232. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  233. package/src/typechain/factories/index.ts +1 -2
  234. package/src/typechain/index.ts +2 -4
  235. package/src/utils/index.ts +229 -183
  236. package/tsconfig.json +7 -2
  237. package/dist/src/abi/interopBridgeToken.json +0 -298
  238. package/dist/src/abi/interopXGateway.json +0 -184
  239. package/dist/src/constants/itokens.js +0 -13
  240. package/dist/src/tasks/InteropBridge/ProcessWithdrawEvents.js +0 -146
  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 -162
  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/tasks/InteropBridge/ProcessWithdrawEvents.ts +0 -231
  253. package/src/tasks/InteropBridge/SyncBurnEvents.ts +0 -121
  254. package/src/tasks/InteropBridge/SyncMintEvents.ts +0 -99
  255. package/src/tasks/InteropXGateway/ProcessDepositEvents.ts +0 -257
  256. package/src/tasks/InteropXGateway/SyncDepositEvents.ts +0 -124
  257. package/src/tasks/InteropXGateway/SyncWithdrawtEvents.ts +0 -105
  258. package/src/typechain/InteropBridgeToken.ts +0 -692
  259. package/src/typechain/InteropXGateway.ts +0 -407
  260. package/src/typechain/factories/InteropBridgeToken__factory.ts +0 -478
  261. 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[targetChainId].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
+ }
@@ -0,0 +1,5 @@
1
+ import aaveV2 from "./aaveV2"
2
+
3
+ export default {
4
+ 'A:AAVE-V2:AAVE-V2': aaveV2,
5
+ }
@@ -0,0 +1,19 @@
1
+ import { Transaction } from "@/db";
2
+ import { encodeMulti } from "ethers-multisend";
3
+ import actions from "./actions";
4
+
5
+ export const buildGnosisAction = async (transaction: Transaction, type: 'source' | 'target') => {
6
+ // type = type || (transaction.sourceStatus === 'success' ? 'target' : 'source')
7
+
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
+ };
16
+ }
17
+
18
+ throw new Error(`Unknown action: ${transaction.actionId}`);
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
 
@@ -2,15 +2,17 @@ import { BaseDialProtocol } from "./BaseDialProtocol";
2
2
  import wait from "waait";
3
3
  import config from "@/config";
4
4
  import { Transaction } from "@/db";
5
- import { buildDataForTransaction, signGnosisSafeTx } from "@/utils";
5
+ import { signGnosisSafeTx } from "@/utils";
6
6
  import { addresses } from "@/constants";
7
7
  import { ChainId } from "@/types";
8
+ import { buildGnosisAction } from "@/gnosis";
8
9
 
9
10
  export interface ISignatureRequest {
10
- type: 'source' | 'target' ,
11
+ type: 'source' | 'target',
11
12
  transactionHash: string
12
13
  safeTxGas: string
13
14
  safeNonce: string
15
+ chainId: number
14
16
  }
15
17
  export interface ISignatureResponse {
16
18
  signer: string,
@@ -25,6 +27,10 @@ export class SignatureDialProtocol extends BaseDialProtocol<ISignatureRequest, I
25
27
  }
26
28
 
27
29
  async response(data: ISignatureRequest): Promise<ISignatureResponse> {
30
+ console.log({
31
+ tag: 'SignatureDialProtocol',
32
+ data
33
+ })
28
34
  const signer = config.wallet;
29
35
 
30
36
  let transaction: Transaction | null;
@@ -46,19 +52,12 @@ export class SignatureDialProtocol extends BaseDialProtocol<ISignatureRequest, I
46
52
  error: 'Event not found'
47
53
  };
48
54
  }
49
-
50
- console.log("signing:", {
51
- to: addresses[transaction.targetChainId].multisend,
52
- data: await buildDataForTransaction(transaction, data.type),
53
- chainId: transaction.targetChainId as ChainId,
54
- safeTxGas: data.safeTxGas,
55
- nonce: data.safeNonce,
56
- });
55
+ const { data: gnosisData } = await buildGnosisAction(transaction, data.type);
57
56
 
58
57
  const signedData = await signGnosisSafeTx({
59
- to: addresses[transaction.targetChainId].multisend,
60
- data: await buildDataForTransaction(transaction, data.type),
61
- chainId: transaction.targetChainId as ChainId,
58
+ to: addresses[data.chainId].multisend,
59
+ data: gnosisData,
60
+ chainId: data.chainId as ChainId,
62
61
  safeTxGas: data.safeTxGas,
63
62
  nonce: data.safeNonce,
64
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;