@instadapp/interop-x 0.0.0-dev.48c6eec → 0.0.0-dev.4e07f7a

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 (231) hide show
  1. package/.github/workflows/ci.yml +19 -0
  2. package/dist/package.json +4 -2
  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 -2
  91. package/dist/src/abi/interopX.json +1436 -0
  92. package/dist/src/constants/addresses.js +4 -7
  93. package/dist/src/constants/blockConfirmations.js +8 -0
  94. package/dist/src/constants/index.js +1 -0
  95. package/dist/src/db/models/transaction.js +11 -9
  96. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  97. package/dist/src/gnosis/actions/aaveV2/source.js +75 -0
  98. package/dist/src/gnosis/actions/aaveV2/target.js +8 -0
  99. package/dist/src/gnosis/actions/index.js +2 -2
  100. package/dist/src/index.js +1 -1
  101. package/dist/src/net/protocol/dial/SignatureDialProtocol.js +2 -2
  102. package/dist/src/tasks/{InteropXContract/ProcessBridgeRequestEvents.js → InteropX/ProcessSubmitSubmitEvents.js} +64 -51
  103. package/dist/src/tasks/{InteropXContract/SyncBridgeRequestEvents.js → InteropX/SyncLogSubmitEvents.js} +23 -15
  104. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +4 -3
  105. package/dist/src/tasks/index.js +9 -13
  106. package/dist/src/typechain/{InteropXContract.js → InteropX.js} +0 -0
  107. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  108. package/dist/src/typechain/factories/index.js +3 -3
  109. package/dist/src/typechain/index.js +3 -3
  110. package/dist/src/utils/index.js +62 -32
  111. package/package.json +4 -2
  112. package/src/abi/connectors/index.ts +14 -0
  113. package/src/abi/connectors/v1/aave.ts +147 -0
  114. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  115. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  116. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  117. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  118. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  119. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  120. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  121. package/src/abi/connectors/v1/authority.ts +99 -0
  122. package/src/abi/connectors/v1/basic.ts +135 -0
  123. package/src/abi/connectors/v1/chi.ts +35 -0
  124. package/src/abi/connectors/v1/comp.ts +3 -0
  125. package/src/abi/connectors/v1/compound.ts +3 -0
  126. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  127. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  128. package/src/abi/connectors/v1/compound_old.ts +447 -0
  129. package/src/abi/connectors/v1/curve.ts +139 -0
  130. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  131. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  132. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  133. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  134. package/src/abi/connectors/v1/curve_three.ts +78 -0
  135. package/src/abi/connectors/v1/curve_y.ts +139 -0
  136. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  137. package/src/abi/connectors/v1/dydx.ts +147 -0
  138. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  139. package/src/abi/connectors/v1/fee.ts +49 -0
  140. package/src/abi/connectors/v1/gelato.ts +1137 -0
  141. package/src/abi/connectors/v1/index.ts +42 -0
  142. package/src/abi/connectors/v1/instapool.ts +438 -0
  143. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  144. package/src/abi/connectors/v1/kyber.ts +116 -0
  145. package/src/abi/connectors/v1/maker.ts +479 -0
  146. package/src/abi/connectors/v1/maker_old.ts +299 -0
  147. package/src/abi/connectors/v1/math.ts +42 -0
  148. package/src/abi/connectors/v1/migrate.ts +45 -0
  149. package/src/abi/connectors/v1/oasis.ts +197 -0
  150. package/src/abi/connectors/v1/oneInch.ts +159 -0
  151. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  152. package/src/abi/connectors/v1/refinance.ts +3 -0
  153. package/src/abi/connectors/v1/staking.ts +219 -0
  154. package/src/abi/connectors/v1/swerve.ts +178 -0
  155. package/src/abi/connectors/v1/uniswap.ts +297 -0
  156. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  157. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  158. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  159. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  160. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  161. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  162. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  163. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  164. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  165. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  166. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  167. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  168. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  169. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  170. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  171. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  172. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  173. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  174. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  175. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  176. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  177. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  178. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  179. package/src/abi/connectors/v2/INST-A.ts +3 -0
  180. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  181. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  182. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  183. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  184. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  185. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  186. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  187. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  188. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  189. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  190. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  191. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  192. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  193. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  194. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  195. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  196. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  197. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  198. package/src/abi/connectors/v2/index.ts +87 -0
  199. package/src/abi/index.ts +7 -5
  200. package/src/abi/interopX.json +1436 -0
  201. package/src/constants/addresses.ts +5 -8
  202. package/src/constants/blockConfirmations.ts +5 -0
  203. package/src/constants/index.ts +1 -0
  204. package/src/db/models/transaction.ts +28 -37
  205. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  206. package/src/gnosis/actions/aaveV2/source.ts +120 -0
  207. package/src/gnosis/actions/aaveV2/target.ts +13 -0
  208. package/src/gnosis/actions/index.ts +2 -2
  209. package/src/net/protocol/dial/SignatureDialProtocol.ts +3 -2
  210. package/src/tasks/InteropX/ProcessSubmitSubmitEvents.ts +260 -0
  211. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
  212. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +4 -3
  213. package/src/tasks/index.ts +8 -15
  214. package/src/typechain/InteropX.ts +1216 -0
  215. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  216. package/src/typechain/factories/index.ts +1 -1
  217. package/src/typechain/index.ts +2 -2
  218. package/src/utils/index.ts +180 -90
  219. package/dist/src/abi/interopXContract.json +0 -454
  220. package/dist/src/gnosis/actions/withdraw/index.js +0 -115
  221. package/dist/src/tasks/InteropXContract/SyncBridgeCommittedEvents.js +0 -93
  222. package/dist/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.js +0 -90
  223. package/dist/src/typechain/factories/InteropXContract__factory.js +0 -635
  224. package/src/abi/interopXContract.json +0 -454
  225. package/src/gnosis/actions/withdraw/index.ts +0 -155
  226. package/src/tasks/InteropXContract/ProcessBridgeRequestEvents.ts +0 -226
  227. package/src/tasks/InteropXContract/SyncBridgeCommittedEvents.ts +0 -125
  228. package/src/tasks/InteropXContract/SyncBridgeRequestEvents.ts +0 -115
  229. package/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.ts +0 -121
  230. package/src/typechain/InteropXContract.ts +0 -680
  231. package/src/typechain/factories/InteropXContract__factory.ts +0 -642
@@ -1,17 +1,14 @@
1
1
  export const addresses = {
2
- // 1: {
3
- // gnosisSafe: '0x811Bff6eF88dAAA0aD6438386B534A81cE3F160F',
4
- // multisend: '0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761',
5
- // interopXContract: '',
6
- // },
7
2
  137: {
8
3
  gnosisSafe: '0x5635d2910e51da33d9DC0422c893CF4F28B69A25',
9
4
  multisend: '0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761',
10
- interopXContract: '0x65AcB77B5191CED1B1ae85B454D20E2d128fAfEe',
5
+ interopX: '0xDB6083df37C5F224a3dF84A4B5f9fB60b6c8670a',
6
+ dsaAddress: '0x9Fbd453a8e7a158510fBae5D9935958507cf4b19',
11
7
  },
12
8
  43114: {
13
9
  gnosisSafe: '0x31d7a5194Fe60AC209Cf1Ce2d539C9A60662Ed6b',
14
10
  multisend: '0x998739BFdAAdde7C933B942a68053933098f9EDa',
15
- interopXContract: '0xd61f55C6d9deD35B9d13243b816c4BcC1d78592b',
11
+ interopX: '0xd61f55C6d9deD35B9d13243b816c4BcC1d78592b',
12
+ dsaAddress: '0xFcB7d826E32081c4799de2f83b47b49df600dc8c',
16
13
  }
17
- } as Record<number, { gnosisSafe: string, multisend: string, interopXContract: string }>
14
+ } as Record<number, { gnosisSafe: string, multisend: string, interopX: string, dsaAddress: string }>
@@ -0,0 +1,5 @@
1
+ export const blockConfirmations = {
2
+ "1": 12,
3
+ "137": 32,
4
+ "43114": 12,
5
+ };
@@ -1,2 +1,3 @@
1
1
  export * from './addresses';
2
2
  export * from './tokens';
3
+ export * from './blockConfirmations';
@@ -1,7 +1,7 @@
1
1
  import { sequelize } from '@/db/sequelize'
2
2
  import { CreationOptional, InferAttributes, InferCreationAttributes, Model, DataTypes } from 'sequelize';
3
3
 
4
- export interface IPositionTokenInfo{
4
+ export interface IPositionTokenInfo {
5
5
  amount: string;
6
6
  sourceToken: string;
7
7
  targetToken: string;
@@ -16,14 +16,17 @@ export class Transaction extends Model<InferAttributes<Transaction>, InferCreati
16
16
  declare id: CreationOptional<number>;
17
17
 
18
18
  declare transactionHash: string;
19
-
19
+ declare vnonce: string;
20
20
  declare actionId: string;
21
- declare bridger: string;
22
- declare requestTransactionHash: string;
21
+ declare sourceSender: string;
23
22
 
24
- declare requestBlockNumber: number;
23
+ declare submitChainId: number;
24
+ declare submitTransactionHash: string;
25
+ declare submitBlockNumber: number;
26
+ declare submitCreatedAt: Date;
25
27
 
26
28
  declare sourceChainId: number;
29
+ declare sourceDsaId: string;
27
30
  declare sourceTransactionHash: CreationOptional<string>;
28
31
  declare sourceBlockNumber: CreationOptional<number>;
29
32
  declare sourceStatus: CreationOptional<string>;
@@ -33,6 +36,7 @@ export class Transaction extends Model<InferAttributes<Transaction>, InferCreati
33
36
  declare sourceDelayUntil: CreationOptional<Date>;
34
37
 
35
38
  declare targetChainId: number;
39
+ declare targetDsaId: string;
36
40
  declare targetTransactionHash: CreationOptional<string>;
37
41
  declare targetBlockNumber: CreationOptional<number>;
38
42
  declare targetStatus: CreationOptional<string>;
@@ -41,33 +45,18 @@ export class Transaction extends Model<InferAttributes<Transaction>, InferCreati
41
45
  declare targetCreatedAt: CreationOptional<Date>;
42
46
  declare targetDelayUntil: CreationOptional<Date>;
43
47
 
44
- declare requestEvent: {
45
- actionId: string;
46
- bridger: string;
47
- metadata: string;
48
+ declare submitEvent: {
48
49
  position: IPosition;
49
- sourceChainId: number;
50
- targetChainId: number;
51
- };
52
- declare requestSentEvent: CreationOptional<{
53
50
  actionId: string;
54
- bridger: string;
55
- metadata: string;
56
- position: IPosition;
51
+ actionIdHashHash: string;
52
+ sourceSender: string;
53
+ sourceDsaId: string;
54
+ targetDsaId: string;
57
55
  sourceChainId: number;
58
56
  targetChainId: number;
59
- requestTransactionHash: string;
60
- }>;
61
- declare committedEvent: CreationOptional<{
62
- actionId: string;
63
- bridger: string;
57
+ vnonce: string;
64
58
  metadata: string;
65
- position: IPosition;
66
- sourceChainId: number;
67
- targetChainId: number;
68
- requestTransactionHash: string;
69
- }>;
70
- declare completedEvent: CreationOptional<any>;
59
+ };
71
60
 
72
61
  declare status: CreationOptional<string>;
73
62
 
@@ -82,19 +71,23 @@ Transaction.init({
82
71
  primaryKey: true
83
72
  },
84
73
 
85
- requestTransactionHash: DataTypes.NUMBER,
86
- requestBlockNumber: DataTypes.NUMBER,
87
-
88
74
  transactionHash: DataTypes.STRING,
89
75
  actionId: DataTypes.STRING,
90
- bridger: DataTypes.STRING,
76
+ vnonce: DataTypes.STRING,
77
+ sourceSender: DataTypes.STRING,
78
+
79
+ submitChainId: DataTypes.NUMBER,
80
+ submitTransactionHash: DataTypes.STRING,
81
+ submitBlockNumber: DataTypes.NUMBER,
82
+ submitCreatedAt: DataTypes.DATE,
91
83
 
92
84
  sourceChainId: DataTypes.NUMBER,
85
+ sourceDsaId: DataTypes.STRING,
93
86
  sourceTransactionHash: DataTypes.STRING,
94
87
  sourceBlockNumber: DataTypes.NUMBER,
95
88
  sourceStatus: {
96
89
  type: DataTypes.STRING,
97
- defaultValue: 'uninitialised'
90
+ defaultValue: 'pending'
98
91
  },
99
92
  sourceErrors: {
100
93
  type: DataTypes.JSON,
@@ -111,11 +104,12 @@ Transaction.init({
111
104
  sourceDelayUntil: DataTypes.STRING,
112
105
 
113
106
  targetChainId: DataTypes.NUMBER,
107
+ targetDsaId: DataTypes.STRING,
114
108
  targetTransactionHash: DataTypes.STRING,
115
109
  targetBlockNumber: DataTypes.NUMBER,
116
110
  targetStatus: {
117
111
  type: DataTypes.STRING,
118
- defaultValue: 'uninitialised'
112
+ defaultValue: 'pending'
119
113
  },
120
114
  targetErrors: {
121
115
  type: DataTypes.JSON,
@@ -128,13 +122,10 @@ Transaction.init({
128
122
  targetCreatedAt: DataTypes.DATE,
129
123
  targetDelayUntil: DataTypes.DATE,
130
124
 
131
- requestEvent: {
125
+ submitEvent: {
132
126
  type: DataTypes.JSON,
133
127
  allowNull: false
134
128
  },
135
- requestSentEvent: DataTypes.JSON,
136
- committedEvent: DataTypes.JSON,
137
- completedEvent: DataTypes.JSON,
138
129
 
139
130
  status: {
140
131
  type: DataTypes.STRING,
@@ -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,120 @@
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
+ export default async function (transaction: Transaction) {
12
+ const transactions: MetaTransaction[] = [];
13
+ const logs: any[] = [];
14
+
15
+ const {
16
+ position,
17
+ actionId,
18
+ actionIdHashHash,
19
+ sourceSender,
20
+ sourceDsaId,
21
+ targetDsaId,
22
+ sourceChainId,
23
+ targetChainId,
24
+ vnonce,
25
+ metadata,
26
+ } = transaction.submitEvent;
27
+
28
+ const sourceChainProvider = new ethers.providers.JsonRpcProvider(
29
+ getRpcProviderUrl(sourceChainId as ChainId)
30
+ );
31
+ const sourceWallet = new ethers.Wallet(
32
+ config.privateKey,
33
+ sourceChainProvider
34
+ );
35
+ const dsaAddress = addresses[sourceChainId].dsaAddress;
36
+ const sourceUserAddress =
37
+ Number(sourceDsaId) == 0 ? sourceSender : dsaAddress;
38
+ const interopAddress = addresses[sourceChainId].interopX;
39
+ const contract = getContract<InteropX>(
40
+ interopAddress,
41
+ abi.interopX,
42
+ sourceWallet
43
+ );
44
+
45
+ const sourceSpells: any[] = [];
46
+ const commonSpells: any[] = [];
47
+
48
+ for (const withdraw of position.withdraw) {
49
+ let spellData = {
50
+ connector: "AAVE-V2-A",
51
+ method: "payback",
52
+ args: [withdraw.sourceToken, withdraw.amount, "2", "0", "0"],
53
+ };
54
+
55
+ sourceSpells.push({
56
+ connector: spellData.method,
57
+ data: encodeConnectorMethod(spellData),
58
+ });
59
+ }
60
+
61
+ for (const supply of position.supply) {
62
+ let spellDataWithdraw = {
63
+ connector: "AAVE-V2-A",
64
+ method: "withdraw",
65
+ args: [supply.sourceToken, supply.amount, "0", "0"],
66
+ };
67
+
68
+ sourceSpells.push({
69
+ connector: spellDataWithdraw.method,
70
+ data: encodeConnectorMethod(spellDataWithdraw),
71
+ });
72
+
73
+ let spellDataBasicWithdraw = {
74
+ connector: "BASIC-A",
75
+ method: "withdraw",
76
+ args: [supply.sourceToken, supply.amount, sourceUserAddress, "0", "0"],
77
+ };
78
+
79
+ sourceSpells.push({
80
+ connector: spellDataBasicWithdraw.method,
81
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
82
+ });
83
+ }
84
+
85
+ for (const withdraw of position.withdraw) {
86
+ let spellDataBasicWithdraw = {
87
+ connector: "BASIC-A",
88
+ method: "withdraw",
89
+ args: [withdraw.sourceToken, withdraw.amount, sourceSender, "0", "0"],
90
+ };
91
+
92
+ commonSpells.push({
93
+ connector: spellDataBasicWithdraw.method,
94
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
95
+ });
96
+ }
97
+
98
+ const { data } = await contract.populateTransaction.sourceAction(
99
+ sourceSpells,
100
+ commonSpells,
101
+ position,
102
+ actionId,
103
+ sourceSender,
104
+ sourceDsaId,
105
+ targetDsaId,
106
+ sourceChainId,
107
+ targetChainId,
108
+ vnonce,
109
+ metadata
110
+ );
111
+
112
+ transactions.push({
113
+ to: interopAddress,
114
+ data: data!,
115
+ value: "0",
116
+ operation: OperationType.Call,
117
+ });
118
+
119
+ return { transactions, logs };
120
+ }
@@ -0,0 +1,13 @@
1
+
2
+
3
+ import { Transaction } from "@/db";
4
+ import { MetaTransaction, OperationType } from "ethers-multisend";
5
+
6
+
7
+ export default async function (transaction: Transaction) {
8
+ const transactions: MetaTransaction[] = [];
9
+ const logs: any[] = [];
10
+
11
+
12
+ return { transactions, logs }
13
+ }
@@ -1,5 +1,5 @@
1
- import withdraw from "./withdraw"
1
+ import aaveV2 from "./aaveV2"
2
2
 
3
3
  export default {
4
- withdraw,
4
+ 'A:AAVE-V2:AAVE-V2': aaveV2,
5
5
  }
@@ -12,6 +12,7 @@ export interface ISignatureRequest {
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,
@@ -54,9 +55,9 @@ export class SignatureDialProtocol extends BaseDialProtocol<ISignatureRequest, I
54
55
  const { data: gnosisData } = await buildGnosisAction(transaction, data.type);
55
56
 
56
57
  const signedData = await signGnosisSafeTx({
57
- to: addresses[transaction.sourceChainId].multisend,
58
+ to: addresses[data.chainId].multisend,
58
59
  data: gnosisData,
59
- chainId: transaction.sourceChainId as ChainId,
60
+ chainId: data.chainId as ChainId,
60
61
  safeTxGas: data.safeTxGas,
61
62
  nonce: data.safeNonce,
62
63
  }, { signer });
@@ -0,0 +1,260 @@
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
+
80
+ this.logger.debug(`Build gnosis action for ${transaction.transactionHash}`);
81
+
82
+ let data,
83
+ logs = [];
84
+
85
+ try {
86
+ ({ data, logs } = await buildGnosisAction(transaction, "source"));
87
+ } catch (error) {
88
+ if (error instanceof LiquidityError) {
89
+ await transaction.save();
90
+ transaction.sourceDelayUntil = new Date(Date.now() + 60 * 5 * 1000);
91
+ transaction.sourceStatus = "pending";
92
+
93
+ await transaction.save();
94
+
95
+ throw error;
96
+ return;
97
+ }
98
+
99
+ transaction.sourceStatus = "failed";
100
+ transaction.sourceErrors = [error.message];
101
+ transaction.targetStatus = "failed";
102
+
103
+ transaction.status = "failed";
104
+ await transaction.save();
105
+ protocol.sendTransaction(transaction);
106
+ return;
107
+ }
108
+
109
+ this.logger.debug(`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 txSent = await this.sourceWallet.sendTransaction({
198
+ from: this.sourceWallet.address,
199
+ gasPrice: ethers.BigNumber.from(120 * 10 ** 9),
200
+ to: this.sourceGnosisContract.address,
201
+ data: txData,
202
+ });
203
+
204
+ console.log(txSent);
205
+
206
+ const receipt = await txSent.wait();
207
+
208
+ const parsedLogs: LogDescription[] = [];
209
+
210
+ receipt.logs.forEach((log) => {
211
+ try {
212
+ parsedLogs.push(this.sourceGnosisContract.interface.parseLog(log));
213
+ } catch (e) {}
214
+ });
215
+
216
+ if (parsedLogs.find((e) => e.name === "ExecutionSuccess")) {
217
+ console.log("ExecutionSuccess");
218
+ transaction.sourceStatus = "success";
219
+ if (txSent.blockNumber)
220
+ transaction.sourceBlockNumber = txSent.blockNumber;
221
+ transaction.sourceTransactionHash = txSent.hash;
222
+ transaction.sourceLogs = logs;
223
+ await transaction.save();
224
+ } else {
225
+ console.log("ExecutionFailure");
226
+ transaction.sourceStatus = "failed";
227
+ if (txSent.blockNumber)
228
+ transaction.sourceBlockNumber = txSent.blockNumber;
229
+ transaction.sourceTransactionHash = txSent.hash;
230
+ transaction.sourceTransactionHash = txSent.hash;
231
+ transaction.status = "failed";
232
+ await transaction.save();
233
+ }
234
+
235
+ protocol.sendTransaction(transaction);
236
+ }
237
+
238
+ async start(): Promise<void> {
239
+ this.blockConfirmationsCount = blockConfirmations[this.chainId] + 1;
240
+
241
+ this.sourceProvider = new ethers.providers.JsonRpcProvider(
242
+ getRpcProviderUrl(this.chainId)
243
+ );
244
+
245
+ this.sourceWallet = new ethers.Wallet(
246
+ config.privateKey!,
247
+ this.sourceProvider
248
+ );
249
+
250
+ this.sourceGnosisContract = getContract<GnosisSafe>(
251
+ addresses[this.chainId].gnosisSafe,
252
+ abi.gnosisSafe,
253
+ this.sourceWallet
254
+ );
255
+
256
+ await super.start();
257
+ }
258
+ }
259
+
260
+ export default ProcessSubmitSubmitEvents;