@instadapp/interop-x 0.0.0-dev.0ee2ee3 → 0.0.0-dev.107fdbd

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 (273) hide show
  1. package/.env.example +2 -1
  2. package/.github/workflows/ci.yml +19 -0
  3. package/dist/package.json +75 -0
  4. package/dist/src/abi/connectors/index.js +36 -0
  5. package/dist/src/abi/connectors/v1/aave.js +148 -0
  6. package/dist/src/abi/connectors/v1/aave_claim.js +4 -0
  7. package/dist/src/abi/connectors/v1/aave_migrate.js +109 -0
  8. package/dist/src/abi/connectors/v1/aave_polygon_migrate.js +110 -0
  9. package/dist/src/abi/connectors/v1/aave_stake.js +4 -0
  10. package/dist/src/abi/connectors/v1/aave_v1_import.js +54 -0
  11. package/dist/src/abi/connectors/v1/aave_v2.js +230 -0
  12. package/dist/src/abi/connectors/v1/aave_v2_import.js +59 -0
  13. package/dist/src/abi/connectors/v1/authority.js +100 -0
  14. package/dist/src/abi/connectors/v1/basic.js +136 -0
  15. package/dist/src/abi/connectors/v1/chi.js +36 -0
  16. package/dist/src/abi/connectors/v1/comp.js +4 -0
  17. package/dist/src/abi/connectors/v1/compound.js +4 -0
  18. package/dist/src/abi/connectors/v1/compoundImport.js +69 -0
  19. package/dist/src/abi/connectors/v1/compoundImport_v2.js +4 -0
  20. package/dist/src/abi/connectors/v1/compound_old.js +448 -0
  21. package/dist/src/abi/connectors/v1/curve.js +140 -0
  22. package/dist/src/abi/connectors/v1/curve_claim.js +63 -0
  23. package/dist/src/abi/connectors/v1/curve_gauge.js +158 -0
  24. package/dist/src/abi/connectors/v1/curve_sbtc.js +140 -0
  25. package/dist/src/abi/connectors/v1/curve_susd.js +140 -0
  26. package/dist/src/abi/connectors/v1/curve_three.js +79 -0
  27. package/dist/src/abi/connectors/v1/curve_y.js +140 -0
  28. package/dist/src/abi/connectors/v1/dsa_migrate_v1_to_v2.js +4 -0
  29. package/dist/src/abi/connectors/v1/dydx.js +148 -0
  30. package/dist/src/abi/connectors/v1/dydx_flash.js +52 -0
  31. package/dist/src/abi/connectors/v1/fee.js +50 -0
  32. package/dist/src/abi/connectors/v1/gelato.js +1138 -0
  33. package/dist/src/abi/connectors/v1/index.js +58 -0
  34. package/dist/src/abi/connectors/v1/instapool.js +439 -0
  35. package/dist/src/abi/connectors/v1/instapool_v2.js +126 -0
  36. package/dist/src/abi/connectors/v1/kyber.js +117 -0
  37. package/dist/src/abi/connectors/v1/maker.js +480 -0
  38. package/dist/src/abi/connectors/v1/maker_old.js +300 -0
  39. package/dist/src/abi/connectors/v1/math.js +43 -0
  40. package/dist/src/abi/connectors/v1/migrate.js +46 -0
  41. package/dist/src/abi/connectors/v1/oasis.js +198 -0
  42. package/dist/src/abi/connectors/v1/oneInch.js +160 -0
  43. package/dist/src/abi/connectors/v1/polygon_bridge.js +4 -0
  44. package/dist/src/abi/connectors/v1/refinance.js +4 -0
  45. package/dist/src/abi/connectors/v1/staking.js +220 -0
  46. package/dist/src/abi/connectors/v1/swerve.js +179 -0
  47. package/dist/src/abi/connectors/v1/uniswap.js +297 -0
  48. package/dist/src/abi/connectors/v2/1INCH-A.js +4 -0
  49. package/dist/src/abi/connectors/v2/1INCH-B.js +4 -0
  50. package/dist/src/abi/connectors/v2/AAVE-CLAIM-A.js +4 -0
  51. package/dist/src/abi/connectors/v2/AAVE-CLAIM-B.js +166 -0
  52. package/dist/src/abi/connectors/v2/AAVE-STAKE-A.js +4 -0
  53. package/dist/src/abi/connectors/v2/AAVE-V1-A.js +130 -0
  54. package/dist/src/abi/connectors/v2/AAVE-V1-IMPORT-A.js +4 -0
  55. package/dist/src/abi/connectors/v2/AAVE-V2-A.js +230 -0
  56. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-A.js +4 -0
  57. package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-B.js +225 -0
  58. package/dist/src/abi/connectors/v2/AUTHORITY-A.js +100 -0
  59. package/dist/src/abi/connectors/v2/B-COMPOUND-A.js +4 -0
  60. package/dist/src/abi/connectors/v2/B-LIQUITY-A.js +4 -0
  61. package/dist/src/abi/connectors/v2/B-MAKERDAO-A.js +4 -0
  62. package/dist/src/abi/connectors/v2/BASIC-A.js +136 -0
  63. package/dist/src/abi/connectors/v2/BASIC-B.js +4 -0
  64. package/dist/src/abi/connectors/v2/BASIC-C.js +4 -0
  65. package/dist/src/abi/connectors/v2/COMP-A.js +4 -0
  66. package/dist/src/abi/connectors/v2/COMPOUND-A.js +4 -0
  67. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-A.js +4 -0
  68. package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-B.js +195 -0
  69. package/dist/src/abi/connectors/v2/G-UNISWAP-A.js +4 -0
  70. package/dist/src/abi/connectors/v2/GELATO-AAVE-A.js +4 -0
  71. package/dist/src/abi/connectors/v2/INST-A.js +4 -0
  72. package/dist/src/abi/connectors/v2/INST-LM-A.js +4 -0
  73. package/dist/src/abi/connectors/v2/INST-STAKING-A.js +4 -0
  74. package/dist/src/abi/connectors/v2/INST-STAKING-B.js +4 -0
  75. package/dist/src/abi/connectors/v2/INSTAPOOL-A.js +4 -0
  76. package/dist/src/abi/connectors/v2/LIQUITY-A.js +4 -0
  77. package/dist/src/abi/connectors/v2/MAKERDAO-A.js +4 -0
  78. package/dist/src/abi/connectors/v2/MAKERDAO-CLAIM-A.js +136 -0
  79. package/dist/src/abi/connectors/v2/PARASWAP-A.js +4 -0
  80. package/dist/src/abi/connectors/v2/POLYGON-BRIDGE-A.js +4 -0
  81. package/dist/src/abi/connectors/v2/REFINANCE-A.js +4 -0
  82. package/dist/src/abi/connectors/v2/REFLEXER-A.js +4 -0
  83. package/dist/src/abi/connectors/v2/STAKE-ERC20-A.js +4 -0
  84. package/dist/src/abi/connectors/v2/UNISWAP-A.js +297 -0
  85. package/dist/src/abi/connectors/v2/UNISWAP-V2-A.js +4 -0
  86. package/dist/src/abi/connectors/v2/UNISWAP-V3-A.js +4 -0
  87. package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.js +4 -0
  88. package/dist/src/abi/connectors/v2/WETH-A.js +4 -0
  89. package/dist/src/abi/connectors/v2/YEARN-VAULT-A.js +4 -0
  90. package/dist/src/abi/connectors/v2/index.js +89 -0
  91. package/dist/src/abi/erc20.json +350 -0
  92. package/dist/src/abi/gnosisSafe.json +747 -0
  93. package/dist/src/abi/index.js +15 -0
  94. package/dist/src/abi/interopX.json +1436 -0
  95. package/dist/src/alias.js +10 -0
  96. package/dist/src/api/index.js +36 -0
  97. package/dist/src/config/index.js +31 -0
  98. package/dist/src/constants/addresses.js +17 -0
  99. package/dist/{constants → src/constants}/index.js +1 -0
  100. package/dist/src/constants/tokens.js +130 -0
  101. package/dist/{db → src/db}/index.js +0 -0
  102. package/dist/{db → src/db}/models/index.js +1 -1
  103. package/dist/src/db/models/transaction.js +72 -0
  104. package/dist/{db → src/db}/sequelize.js +2 -1
  105. package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
  106. package/dist/src/gnosis/actions/aaveV2/source.js +62 -0
  107. package/dist/src/gnosis/actions/aaveV2/target.js +8 -0
  108. package/dist/src/gnosis/actions/index.js +9 -0
  109. package/dist/src/gnosis/index.js +20 -0
  110. package/dist/src/index.js +119 -0
  111. package/dist/{logger → src/logger}/index.js +0 -0
  112. package/dist/{net → src/net}/index.js +0 -0
  113. package/dist/{net → src/net}/peer/index.js +15 -6
  114. package/dist/{net → src/net}/pool/index.js +34 -11
  115. package/dist/{net → src/net}/protocol/dial/BaseDialProtocol.js +1 -1
  116. package/dist/{net → src/net}/protocol/dial/SignatureDialProtocol.js +21 -14
  117. package/dist/src/net/protocol/dial/TransactionStatusDialProtocol.js +30 -0
  118. package/dist/{net → src/net}/protocol/index.js +54 -4
  119. package/dist/src/tasks/AutoUpdateTask.js +70 -0
  120. package/dist/{tasks → src/tasks}/BaseTask.js +14 -6
  121. package/dist/src/tasks/InteropX/SyncLogSubmitEvents.js +84 -0
  122. package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +58 -0
  123. package/dist/src/tasks/index.js +34 -0
  124. package/dist/src/typechain/Erc20.js +2 -0
  125. package/dist/src/typechain/GnosisSafe.js +2 -0
  126. package/dist/src/typechain/InteropX.js +2 -0
  127. package/dist/src/typechain/common.js +2 -0
  128. package/dist/src/typechain/factories/Erc20__factory.js +367 -0
  129. package/dist/src/typechain/factories/GnosisSafe__factory.js +1174 -0
  130. package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
  131. package/dist/src/typechain/factories/index.js +12 -0
  132. package/dist/src/typechain/index.js +33 -0
  133. package/dist/{types.js → src/types.js} +0 -0
  134. package/dist/src/utils/index.js +222 -0
  135. package/package.json +32 -16
  136. package/patches/@ethersproject+properties+5.6.0.patch +13 -0
  137. package/src/abi/connectors/index.ts +14 -0
  138. package/src/abi/connectors/v1/aave.ts +147 -0
  139. package/src/abi/connectors/v1/aave_claim.ts +3 -0
  140. package/src/abi/connectors/v1/aave_migrate.ts +108 -0
  141. package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
  142. package/src/abi/connectors/v1/aave_stake.ts +3 -0
  143. package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
  144. package/src/abi/connectors/v1/aave_v2.ts +229 -0
  145. package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
  146. package/src/abi/connectors/v1/authority.ts +99 -0
  147. package/src/abi/connectors/v1/basic.ts +135 -0
  148. package/src/abi/connectors/v1/chi.ts +35 -0
  149. package/src/abi/connectors/v1/comp.ts +3 -0
  150. package/src/abi/connectors/v1/compound.ts +3 -0
  151. package/src/abi/connectors/v1/compoundImport.ts +68 -0
  152. package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
  153. package/src/abi/connectors/v1/compound_old.ts +447 -0
  154. package/src/abi/connectors/v1/curve.ts +139 -0
  155. package/src/abi/connectors/v1/curve_claim.ts +62 -0
  156. package/src/abi/connectors/v1/curve_gauge.ts +157 -0
  157. package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
  158. package/src/abi/connectors/v1/curve_susd.ts +139 -0
  159. package/src/abi/connectors/v1/curve_three.ts +78 -0
  160. package/src/abi/connectors/v1/curve_y.ts +139 -0
  161. package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
  162. package/src/abi/connectors/v1/dydx.ts +147 -0
  163. package/src/abi/connectors/v1/dydx_flash.ts +51 -0
  164. package/src/abi/connectors/v1/fee.ts +49 -0
  165. package/src/abi/connectors/v1/gelato.ts +1137 -0
  166. package/src/abi/connectors/v1/index.ts +42 -0
  167. package/src/abi/connectors/v1/instapool.ts +438 -0
  168. package/src/abi/connectors/v1/instapool_v2.ts +125 -0
  169. package/src/abi/connectors/v1/kyber.ts +116 -0
  170. package/src/abi/connectors/v1/maker.ts +479 -0
  171. package/src/abi/connectors/v1/maker_old.ts +299 -0
  172. package/src/abi/connectors/v1/math.ts +42 -0
  173. package/src/abi/connectors/v1/migrate.ts +45 -0
  174. package/src/abi/connectors/v1/oasis.ts +197 -0
  175. package/src/abi/connectors/v1/oneInch.ts +159 -0
  176. package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
  177. package/src/abi/connectors/v1/refinance.ts +3 -0
  178. package/src/abi/connectors/v1/staking.ts +219 -0
  179. package/src/abi/connectors/v1/swerve.ts +178 -0
  180. package/src/abi/connectors/v1/uniswap.ts +297 -0
  181. package/src/abi/connectors/v2/1INCH-A.ts +3 -0
  182. package/src/abi/connectors/v2/1INCH-B.ts +3 -0
  183. package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
  184. package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
  185. package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
  186. package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
  187. package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
  188. package/src/abi/connectors/v2/AAVE-V2-A.ts +229 -0
  189. package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
  190. package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
  191. package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
  192. package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
  193. package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
  194. package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
  195. package/src/abi/connectors/v2/BASIC-A.ts +135 -0
  196. package/src/abi/connectors/v2/BASIC-B.ts +3 -0
  197. package/src/abi/connectors/v2/BASIC-C.ts +3 -0
  198. package/src/abi/connectors/v2/COMP-A.ts +3 -0
  199. package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
  200. package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
  201. package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
  202. package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
  203. package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
  204. package/src/abi/connectors/v2/INST-A.ts +3 -0
  205. package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
  206. package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
  207. package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
  208. package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
  209. package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
  210. package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
  211. package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
  212. package/src/abi/connectors/v2/PARASWAP-A.ts +3 -0
  213. package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
  214. package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
  215. package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
  216. package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
  217. package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
  218. package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
  219. package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
  220. package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
  221. package/src/abi/connectors/v2/WETH-A.ts +3 -0
  222. package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
  223. package/src/abi/connectors/v2/index.ts +87 -0
  224. package/src/abi/erc20.json +350 -0
  225. package/src/abi/gnosisSafe.json +747 -0
  226. package/src/abi/index.ts +11 -0
  227. package/src/abi/interopX.json +1436 -0
  228. package/src/alias.ts +6 -0
  229. package/src/api/index.ts +36 -0
  230. package/src/config/index.ts +18 -2
  231. package/src/constants/addresses.ts +10 -6
  232. package/src/constants/index.ts +1 -0
  233. package/src/constants/tokens.ts +127 -0
  234. package/src/db/index.ts +1 -1
  235. package/src/db/models/index.ts +1 -1
  236. package/src/db/models/transaction.ts +136 -0
  237. package/src/db/sequelize.ts +2 -1
  238. package/src/gnosis/actions/aaveV2/index.ts +9 -0
  239. package/src/gnosis/actions/aaveV2/source.ts +104 -0
  240. package/src/gnosis/actions/aaveV2/target.ts +13 -0
  241. package/src/gnosis/actions/index.ts +5 -0
  242. package/src/gnosis/index.ts +19 -0
  243. package/src/index.ts +118 -7
  244. package/src/net/peer/index.ts +17 -9
  245. package/src/net/pool/index.ts +43 -13
  246. package/src/net/protocol/dial/BaseDialProtocol.ts +1 -1
  247. package/src/net/protocol/dial/SignatureDialProtocol.ts +24 -17
  248. package/src/net/protocol/dial/TransactionStatusDialProtocol.ts +33 -0
  249. package/src/net/protocol/index.ts +71 -5
  250. package/src/tasks/AutoUpdateTask.ts +82 -0
  251. package/src/tasks/BaseTask.ts +16 -7
  252. package/src/tasks/InteropX/SyncLogSubmitEvents.ts +136 -0
  253. package/src/tasks/Transactions/SyncTransactionStatusTask.ts +70 -0
  254. package/src/tasks/index.ts +17 -2
  255. package/src/typechain/Erc20.ts +491 -0
  256. package/src/typechain/GnosisSafe.ts +1728 -0
  257. package/src/typechain/InteropX.ts +1216 -0
  258. package/src/typechain/common.ts +44 -0
  259. package/src/typechain/factories/Erc20__factory.ts +368 -0
  260. package/src/typechain/factories/GnosisSafe__factory.ts +1178 -0
  261. package/src/typechain/factories/InteropX__factory.ts +1932 -0
  262. package/src/typechain/factories/index.ts +6 -0
  263. package/src/typechain/index.ts +10 -0
  264. package/src/types.ts +2 -2
  265. package/src/utils/index.ts +285 -36
  266. package/tsconfig.json +8 -0
  267. package/dist/config/index.js +0 -17
  268. package/dist/constants/addresses.js +0 -13
  269. package/dist/db/models/execution.js +0 -38
  270. package/dist/index.js +0 -34
  271. package/dist/tasks/index.js +0 -19
  272. package/dist/utils/index.js +0 -89
  273. package/src/db/models/execution.ts +0 -57
package/src/alias.ts ADDED
@@ -0,0 +1,6 @@
1
+ import moduleAlias from 'module-alias';
2
+ moduleAlias.addAliases({
3
+ "@": __dirname,
4
+ })
5
+
6
+ moduleAlias();
@@ -0,0 +1,36 @@
1
+ import fastify from "fastify"
2
+ import cors from '@fastify/cors'
3
+ import Logger from "@/logger"
4
+ import { Transaction } from "@/db";
5
+
6
+ const logger = new Logger("RPC");
7
+
8
+
9
+ const server = fastify({ logger: false })
10
+
11
+ server.register(cors, {})
12
+
13
+ server.get('/', async () => 'Interop X API')
14
+
15
+ export const startApiServer = async () => {
16
+ const HOST = process.env.API_HOST || '0.0.0.0';
17
+ const PORT = process.env.API_PORT || '8080';
18
+ try {
19
+ server.get('/transactions', async (req) => {
20
+ return await Transaction.findAndCountAll({
21
+ limit: 20,
22
+ offset: 0,
23
+ order: [
24
+ ['updatedAt', 'DESC']
25
+ ]
26
+ })
27
+ })
28
+
29
+ await server.listen(PORT, HOST)
30
+
31
+ logger.log(`RPC Server listening at http://${HOST}:${PORT}`)
32
+ } catch (err) {
33
+ logger.error(err.message)
34
+ process.exit(1)
35
+ }
36
+ }
@@ -1,5 +1,7 @@
1
1
  import { ethers, Wallet } from "ethers"
2
- import { EventBus, EventBusType } from "types"
2
+ import { EventBus, EventBusType } from "@/types"
3
+ import fs from 'fs-extra'
4
+ import expandHomeDir from "expand-home-dir";
3
5
 
4
6
  class Config {
5
7
  public readonly events: EventBusType
@@ -7,18 +9,32 @@ class Config {
7
9
  public readonly leadNodeAddress: string
8
10
  public readonly privateKey: string
9
11
  public readonly wallet: Wallet
12
+ public readonly staging: boolean
13
+ public readonly autoUpdate: boolean
14
+ public readonly baseConfigPath: string
10
15
 
11
16
  constructor() {
12
17
  this.events = new EventBus() as EventBusType
13
- this.maxPeers = 10
18
+ this.maxPeers = 20
14
19
  this.privateKey = process.env.PRIVATE_KEY as string;
20
+ this.staging = !! process.env.STAGING && process.env.STAGING === 'true';
21
+ this.autoUpdate = !! process.env.AUTO_UPDATE && process.env.AUTO_UPDATE === 'true';
15
22
  this.wallet = new Wallet(this.privateKey);
16
23
  this.leadNodeAddress = '0x910E413DBF3F6276Fe8213fF656726bDc142E08E'
24
+ this.baseConfigPath = expandHomeDir(`~/.interop-x`);
25
+ }
26
+
27
+ get publicAddress(){
28
+ return this.wallet.address
17
29
  }
18
30
 
19
31
  isLeadNode() {
20
32
  return ethers.utils.getAddress(this.leadNodeAddress) === ethers.utils.getAddress(this.wallet.address)
21
33
  }
34
+
35
+ isMaintenanceMode(){
36
+ return fs.existsSync(this.baseConfigPath + '/maintenance')
37
+ }
22
38
  }
23
39
 
24
40
  export default new Config()
@@ -1,10 +1,14 @@
1
1
  export const addresses = {
2
- 1: {
3
- gnosisSafe: '0x5635d2910e51da33d9DC0422c893CF4F28B69A25',
4
- multisend: "0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761",
5
- },
6
2
  137: {
7
3
  gnosisSafe: '0x5635d2910e51da33d9DC0422c893CF4F28B69A25',
8
- multisend: "0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761",
4
+ multisend: '0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761',
5
+ interopX: '0xDB6083df37C5F224a3dF84A4B5f9fB60b6c8670a',
6
+ dsaAddress: '0x9Fbd453a8e7a158510fBae5D9935958507cf4b19',
9
7
  },
10
- }
8
+ 43114: {
9
+ gnosisSafe: '0x31d7a5194Fe60AC209Cf1Ce2d539C9A60662Ed6b',
10
+ multisend: '0x998739BFdAAdde7C933B942a68053933098f9EDa',
11
+ interopX: '0xd61f55C6d9deD35B9d13243b816c4BcC1d78592b',
12
+ dsaAddress: '0xFcB7d826E32081c4799de2f83b47b49df600dc8c',
13
+ }
14
+ } as Record<number, { gnosisSafe: string, multisend: string, interopX: string, dsaAddress: string }>
@@ -1 +1,2 @@
1
1
  export * from './addresses';
2
+ export * from './tokens';
@@ -0,0 +1,127 @@
1
+ export const tokens = {
2
+ // 1: [
3
+ // {
4
+ // aliases: ['eth'],
5
+ // symbol: "ETH",
6
+ // name: "Ethereum",
7
+ // address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
8
+ // decimals: 18,
9
+ // },
10
+ // {
11
+ // aliases: ['weth'],
12
+ // symbol: "WETH",
13
+ // name: "Wrapped Ethereum",
14
+ // address: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
15
+ // decimals: 18,
16
+ // },
17
+ // {
18
+ // aliases: ['dai'],
19
+ // symbol: "DAI",
20
+ // name: "DAI Stable",
21
+ // address: "0x6B175474E89094C44Da98b954EedeAC495271d0F",
22
+ // decimals: 18,
23
+ // },
24
+ // {
25
+ // aliases: ['usdc'],
26
+ // symbol: "USDC",
27
+ // name: "USD Coin",
28
+ // address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
29
+ // decimals: 6,
30
+ // },
31
+ // {
32
+ // aliases: ['usdt'],
33
+ // symbol: "USDT",
34
+ // name: "Tether USD Coin",
35
+ // address: "0xdAC17F958D2ee523a2206206994597C13D831ec7",
36
+ // decimals: 6,
37
+ // },
38
+ // {
39
+ // aliases: ['wbtc'],
40
+ // symbol: "WBTC",
41
+ // name: "Wrapped BTC",
42
+ // address: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
43
+ // decimals: 8,
44
+ // },
45
+ // ],
46
+ 137: [
47
+ {
48
+ aliases: ['eth', 'weth'],
49
+ symbol: "ETH",
50
+ name: "Ethereum",
51
+ address: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619",
52
+ decimals: 18,
53
+ },
54
+ {
55
+ aliases: ['dai'],
56
+ symbol: "DAI",
57
+ name: "DAI Stable",
58
+ address: "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063",
59
+ decimals: 18,
60
+ },
61
+ {
62
+ aliases: ['usdc'],
63
+ symbol: "USDC",
64
+ name: "USD Coin",
65
+ address: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
66
+ decimals: 6,
67
+ },
68
+ {
69
+ aliases: ['usdt'],
70
+ symbol: "USDT",
71
+ name: "Tether USD Coin",
72
+ address: "0xc2132D05D31c914a87C6611C10748AEb04B58e8F",
73
+ decimals: 6,
74
+ },
75
+ {
76
+ aliases: ['wbtc'],
77
+ symbol: "WBTC",
78
+ name: "Wrapped BTC",
79
+ address: "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6",
80
+ decimals: 8,
81
+ },
82
+ ],
83
+ 43114: [
84
+ {
85
+ aliases: ['eth', 'weth'],
86
+ symbol: "ETH",
87
+ name: "Ethereum",
88
+ address: "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB",
89
+ decimals: 18,
90
+ },
91
+ {
92
+ aliases: ['dai'],
93
+ symbol: "DAI",
94
+ name: "DAI Stable",
95
+ address: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70",
96
+ decimals: 18,
97
+ },
98
+ {
99
+ aliases: ['usdc'],
100
+ symbol: "USDC",
101
+ name: "USD Coin",
102
+ address: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664",
103
+ decimals: 6,
104
+ },
105
+ {
106
+ aliases: ['usdt'],
107
+ symbol: "USDt",
108
+ name: "Tether USD Coin",
109
+ address: "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
110
+ decimals: 6,
111
+ },
112
+ {
113
+ aliases: ['usdt'],
114
+ symbol: "USDT.e",
115
+ name: "Tether USD",
116
+ address: "0xc7198437980c041c805A1EDcbA50c1Ce5db95118",
117
+ decimals: 6,
118
+ },
119
+ {
120
+ aliases: ["wbtc"],
121
+ symbol: "WBTC",
122
+ name: "Wrapped BTC",
123
+ address: "0x50b7545627a5162F82A992c33b87aDc75187B218",
124
+ decimals: 8,
125
+ },
126
+ ],
127
+ } as Record<number, { aliases: string[], symbol: string, name: string, address: string, decimals: number }[]>;
package/src/db/index.ts CHANGED
@@ -1 +1 @@
1
- export * from "./models"
1
+ export * from "./models"
@@ -1 +1 @@
1
- export * from './execution';
1
+ export * from './transaction';
@@ -0,0 +1,136 @@
1
+ import { sequelize } from '@/db/sequelize'
2
+ import { CreationOptional, InferAttributes, InferCreationAttributes, Model, DataTypes } from 'sequelize';
3
+
4
+ export interface IPositionTokenInfo {
5
+ amount: string;
6
+ sourceToken: string;
7
+ targetToken: string;
8
+ }
9
+
10
+ export interface IPosition {
11
+ supply: IPositionTokenInfo[];
12
+ withdraw: IPositionTokenInfo[];
13
+ }
14
+
15
+ export class Transaction extends Model<InferAttributes<Transaction>, InferCreationAttributes<Transaction>> {
16
+ declare id: CreationOptional<number>;
17
+
18
+ declare transactionHash: string;
19
+ declare vnonce: string;
20
+ declare actionId: string;
21
+ declare sourceSender: string;
22
+
23
+ declare submitChainId: number;
24
+ declare submitTransactionHash: string;
25
+ declare submitBlockNumber: number;
26
+ declare submitCreatedAt: Date;
27
+
28
+ declare sourceChainId: number;
29
+ declare sourceDsaId: string;
30
+ declare sourceTransactionHash: CreationOptional<string>;
31
+ declare sourceBlockNumber: CreationOptional<number>;
32
+ declare sourceStatus: CreationOptional<string>;
33
+ declare sourceErrors: CreationOptional<string[]>;
34
+ declare sourceLogs: CreationOptional<any[]>;
35
+ declare sourceCreatedAt: CreationOptional<Date>;
36
+ declare sourceDelayUntil: CreationOptional<Date>;
37
+
38
+ declare targetChainId: number;
39
+ declare targetDsaId: string;
40
+ declare targetTransactionHash: CreationOptional<string>;
41
+ declare targetBlockNumber: CreationOptional<number>;
42
+ declare targetStatus: CreationOptional<string>;
43
+ declare targetErrors: CreationOptional<string[]>;
44
+ declare targetLogs: CreationOptional<any[]>;
45
+ declare targetCreatedAt: CreationOptional<Date>;
46
+ declare targetDelayUntil: CreationOptional<Date>;
47
+
48
+ declare submitEvent: {
49
+ position: IPosition;
50
+ actionId: string;
51
+ actionIdHashHash: string;
52
+ sourceSender: string;
53
+ sourceDsaId: string;
54
+ targetDsaId: string;
55
+ sourceChainId: number;
56
+ targetChainId: number;
57
+ vnonce: string;
58
+ metadata: string;
59
+ };
60
+
61
+ declare status: CreationOptional<string>;
62
+
63
+ declare createdAt: CreationOptional<Date>;
64
+ declare updatedAt: CreationOptional<Date>;
65
+ }
66
+
67
+ Transaction.init({
68
+ id: {
69
+ type: DataTypes.INTEGER,
70
+ autoIncrement: true,
71
+ primaryKey: true
72
+ },
73
+
74
+ transactionHash: DataTypes.STRING,
75
+ actionId: 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,
83
+
84
+ sourceChainId: DataTypes.NUMBER,
85
+ sourceDsaId: DataTypes.STRING,
86
+ sourceTransactionHash: DataTypes.STRING,
87
+ sourceBlockNumber: DataTypes.NUMBER,
88
+ sourceStatus: {
89
+ type: DataTypes.STRING,
90
+ defaultValue: 'pending'
91
+ },
92
+ sourceErrors: {
93
+ type: DataTypes.JSON,
94
+ // defaultValue: [],
95
+ },
96
+ sourceLogs: {
97
+ type: DataTypes.JSON,
98
+ // defaultValue: [],
99
+ },
100
+ sourceCreatedAt: {
101
+ type: DataTypes.DATE,
102
+ defaultValue: Date.now()
103
+ },
104
+ sourceDelayUntil: DataTypes.STRING,
105
+
106
+ targetChainId: DataTypes.NUMBER,
107
+ targetDsaId: DataTypes.STRING,
108
+ targetTransactionHash: DataTypes.STRING,
109
+ targetBlockNumber: DataTypes.NUMBER,
110
+ targetStatus: {
111
+ type: DataTypes.STRING,
112
+ defaultValue: 'pending'
113
+ },
114
+ targetErrors: {
115
+ type: DataTypes.JSON,
116
+ // defaultValue: [],
117
+ },
118
+ targetLogs: {
119
+ type: DataTypes.JSON,
120
+ // defaultValue: [],
121
+ },
122
+ targetCreatedAt: DataTypes.DATE,
123
+ targetDelayUntil: DataTypes.DATE,
124
+
125
+ submitEvent: {
126
+ type: DataTypes.JSON,
127
+ allowNull: false
128
+ },
129
+
130
+ status: {
131
+ type: DataTypes.STRING,
132
+ defaultValue: 'pending'
133
+ },
134
+ createdAt: DataTypes.DATE,
135
+ updatedAt: DataTypes.DATE,
136
+ }, { sequelize, tableName: 'transactions' });
@@ -1,9 +1,10 @@
1
1
  //@ts-ignore
2
+ import config from "@/config";
2
3
  import expandHomeDir from "expand-home-dir";
3
4
 
4
5
  import { Sequelize } from 'sequelize';
5
6
 
6
- const basePath = expandHomeDir('~/.interop-x/data');
7
+ const basePath = expandHomeDir(`~/.interop-x/data/${config.publicAddress}/${config.staging ? 'staging' : ''}`);
7
8
 
8
9
  export const sequelize = new Sequelize({
9
10
  dialect: 'sqlite',
@@ -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,104 @@
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 interopAddress = addresses[sourceChainId].interopX;
36
+ const contract = getContract<InteropX>(
37
+ interopAddress,
38
+ abi.interopX,
39
+ sourceWallet
40
+ );
41
+
42
+ const sourceSpells: any[] = [];
43
+ const commonSpells = [];
44
+
45
+ for (const withdraw of position.withdraw) {
46
+ let spellData = {
47
+ connector: "AAVE-V2-A",
48
+ method: "payback",
49
+ args: [withdraw.sourceToken, withdraw.amount, "2", "0", "0"],
50
+ };
51
+
52
+ sourceSpells.push({
53
+ connector: spellData.method,
54
+ data: encodeConnectorMethod(spellData),
55
+ });
56
+ }
57
+
58
+ for (const supply of position.supply) {
59
+ let spellDataWithdraw = {
60
+ connector: "AAVE-V2-A",
61
+ method: "withdraw",
62
+ args: [supply.sourceToken, supply.amount, "0", "0"],
63
+ };
64
+
65
+ sourceSpells.push({
66
+ connector: spellDataWithdraw.method,
67
+ data: encodeConnectorMethod(spellDataWithdraw),
68
+ });
69
+
70
+ let spellDataBasicWithdraw = {
71
+ connector: "BASIC-A",
72
+ method: "withdraw",
73
+ args: [supply.sourceToken, supply.amount, interopAddress, "0", "0"],
74
+ };
75
+
76
+ sourceSpells.push({
77
+ connector: spellDataBasicWithdraw.method,
78
+ data: encodeConnectorMethod(spellDataBasicWithdraw),
79
+ });
80
+ }
81
+
82
+ const { data } = await contract.populateTransaction.sourceAction(
83
+ sourceSpells,
84
+ commonSpells,
85
+ position,
86
+ actionId,
87
+ sourceSender,
88
+ sourceDsaId,
89
+ targetDsaId,
90
+ sourceChainId,
91
+ targetChainId,
92
+ vnonce,
93
+ metadata
94
+ );
95
+
96
+ transactions.push({
97
+ to: interopAddress,
98
+ data: data!,
99
+ value: "0",
100
+ operation: OperationType.Call,
101
+ });
102
+
103
+ return { transactions, logs };
104
+ }
@@ -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
+ }
@@ -0,0 +1,5 @@
1
+ import aaveV2 from "./aaveV2"
2
+
3
+ export default {
4
+ '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,21 +1,132 @@
1
- import { assert } from "console";
1
+ import './alias'
2
+ import expandHomeDir from "expand-home-dir";
3
+ import fs from 'fs-extra'
4
+
2
5
  import dotenv from "dotenv";
3
- import { Tasks } from "tasks";
4
- import Logger from "./logger";
5
- import { startPeer } from "./net";
6
+ import chalk from 'chalk';
7
+ import { ethers } from "ethers";
8
+ import packageJson from '../package.json'
6
9
  dotenv.config();
7
10
 
8
- assert(process.env.PRIVATE_KEY, "PRIVATE_KEY is not defined");
9
-
11
+ import Logger from "@/logger";
10
12
  const logger = new Logger('Process')
11
13
 
14
+ const GIT_SHORT_HASH = '@GIT_SHORT_HASH@';
15
+
16
+ const printUsage = () => {
17
+ console.log()
18
+ console.log(`Interop X Node (v${packageJson.version} - rev.${GIT_SHORT_HASH})`)
19
+ console.log()
20
+
21
+ console.log('Usage:')
22
+ console.log(' interop-x help Show this message')
23
+ console.log(' interop-x version Print out the installed version of Interop X')
24
+
25
+ console.log()
26
+
27
+ console.log(' interop-x down Put the node into maintenance mode')
28
+ console.log(' interop-x up Take the node out of maintenance mode')
29
+
30
+ console.log()
31
+
32
+ console.log(' PRIVATE_KEY=abcd1234 interop-x Start the node with the given private key')
33
+ console.log(' PRIVATE_KEY=abcd1234 STAGING=true interop-x Start the node in staging mode')
34
+ console.log(' PRIVATE_KEY=abcd1234 AUTO_UPDATE=true interop-x Start the node in auto update mode')
35
+ console.log(' PRIVATE_KEY=abcd1234 API_HOST=0.0.0.0 API_PORT=8080 interop-x Start the node with custom API host and port')
36
+ console.log()
37
+
38
+ }
39
+
40
+ if (process.argv.at(-1) === 'help') {
41
+ printUsage()
42
+ process.exit(0)
43
+ }
44
+
45
+ const basePath = expandHomeDir(`~/.interop-x`);
46
+
47
+ if (process.argv.at(-1) === 'down') {
48
+ fs.outputFileSync(basePath + '/maintenance', Date.now().toString())
49
+ console.log(chalk.red('Maintenance mode enabled'))
50
+ process.exit(0)
51
+ }
52
+
53
+ if (process.argv.at(-1) === 'up') {
54
+ fs.removeSync(basePath + '/maintenance')
55
+ console.log(chalk.green('Maintenance mode disabled'))
56
+ process.exit(0)
57
+ }
58
+
59
+
60
+ if (process.argv.at(-1) === 'version') {
61
+ console.log(`Interop X Node (v${packageJson.version} - rev.${GIT_SHORT_HASH})`)
62
+ process.exit(0)
63
+ }
64
+
65
+ if (!process.env.PRIVATE_KEY) {
66
+ console.error(chalk.bgRed.white.bold('Please provide a private key\n'))
67
+ printUsage()
68
+ process.exit(1)
69
+ }
70
+ try {
71
+ new ethers.Wallet(process.env.PRIVATE_KEY!)
72
+ } catch (e) {
73
+ console.error(chalk.bgRed.white('Invalid private key\n'))
74
+ printUsage()
75
+ process.exit(1)
76
+ }
77
+
78
+ logger.debug(`Starting Interop X Node (v${packageJson.version} - rev.${GIT_SHORT_HASH})`)
79
+
80
+ import { Tasks } from "@/tasks";
81
+ import { startPeer, protocol, peerPool } from "@/net";
82
+ import { startApiServer } from '@/api';
83
+ import { Transaction } from './db';
84
+ import { shortenHash } from './utils';
85
+
12
86
  async function main() {
13
87
 
14
88
  startPeer({})
15
89
 
16
90
  const tasks = new Tasks()
17
91
 
18
- tasks.start();
92
+ setTimeout(() => {
93
+ tasks.start();
94
+ }, 10000)
95
+
96
+ startApiServer()
97
+
98
+ protocol.on('TransactionStatus', async (payload) => {
99
+ if (!peerPool.isLeadNode(payload.peerId)) {
100
+ const peer = peerPool.getPeer(payload.peerId)
101
+
102
+ if (!peer) {
103
+ return;
104
+ }
105
+
106
+ logger.info(`ignored transaction status from ${payload.peerId} ${shortenHash(peer.publicAddress)} `)
107
+ return;
108
+ }
109
+
110
+ const transaction = await Transaction.findOne({ where: { transactionHash: payload.data.transactionHash } })
111
+
112
+ if (!transaction) {
113
+ return;
114
+ }
115
+
116
+ transaction.sourceStatus = payload.data.sourceStatus
117
+ transaction.sourceTransactionHash = payload.data.sourceTransactionHash
118
+ transaction.sourceErrors = payload.data.sourceErrors
119
+ transaction.sourceLogs = payload.data.sourceLogs
120
+
121
+ transaction.targetStatus = payload.data.targetStatus
122
+ transaction.targetTransactionHash = payload.data.targetTransactionHash
123
+ transaction.targetErrors = payload.data.targetErrors
124
+ transaction.targetLogs = payload.data.targetLogs
125
+
126
+ transaction.status = payload.data.status
127
+
128
+ await transaction.save()
129
+ })
19
130
  }
20
131
 
21
132
  main()