@instadapp/interop-x 0.0.0-dev.0bace53 → 0.0.0-dev.0ca1aa1
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.
- package/.github/workflows/ci.yml +19 -0
- package/dist/package.json +22 -12
- package/dist/src/abi/aaveV2Resolver.json +832 -0
- package/dist/src/abi/aaveV3Resolver.json +628 -0
- package/dist/src/abi/balanceResolver.json +211 -0
- package/dist/src/abi/connectors/index.js +36 -0
- package/dist/src/abi/connectors/v1/aave.js +148 -0
- package/dist/src/abi/connectors/v1/aave_claim.js +4 -0
- package/dist/src/abi/connectors/v1/aave_migrate.js +109 -0
- package/dist/src/abi/connectors/v1/aave_polygon_migrate.js +110 -0
- package/dist/src/abi/connectors/v1/aave_stake.js +4 -0
- package/dist/src/abi/connectors/v1/aave_v1_import.js +54 -0
- package/dist/src/abi/connectors/v1/aave_v2.js +230 -0
- package/dist/src/abi/connectors/v1/aave_v2_import.js +59 -0
- package/dist/src/abi/connectors/v1/authority.js +100 -0
- package/dist/src/abi/connectors/v1/basic.js +136 -0
- package/dist/src/abi/connectors/v1/chi.js +36 -0
- package/dist/src/abi/connectors/v1/comp.js +4 -0
- package/dist/src/abi/connectors/v1/compound.js +4 -0
- package/dist/src/abi/connectors/v1/compoundImport.js +69 -0
- package/dist/src/abi/connectors/v1/compoundImport_v2.js +4 -0
- package/dist/src/abi/connectors/v1/compound_old.js +448 -0
- package/dist/src/abi/connectors/v1/curve.js +140 -0
- package/dist/src/abi/connectors/v1/curve_claim.js +63 -0
- package/dist/src/abi/connectors/v1/curve_gauge.js +158 -0
- package/dist/src/abi/connectors/v1/curve_sbtc.js +140 -0
- package/dist/src/abi/connectors/v1/curve_susd.js +140 -0
- package/dist/src/abi/connectors/v1/curve_three.js +79 -0
- package/dist/src/abi/connectors/v1/curve_y.js +140 -0
- package/dist/src/abi/connectors/v1/dsa_migrate_v1_to_v2.js +4 -0
- package/dist/src/abi/connectors/v1/dydx.js +148 -0
- package/dist/src/abi/connectors/v1/dydx_flash.js +52 -0
- package/dist/src/abi/connectors/v1/fee.js +50 -0
- package/dist/src/abi/connectors/v1/gelato.js +1138 -0
- package/dist/src/abi/connectors/v1/index.js +58 -0
- package/dist/src/abi/connectors/v1/instapool.js +439 -0
- package/dist/src/abi/connectors/v1/instapool_v2.js +126 -0
- package/dist/src/abi/connectors/v1/kyber.js +117 -0
- package/dist/src/abi/connectors/v1/maker.js +480 -0
- package/dist/src/abi/connectors/v1/maker_old.js +300 -0
- package/dist/src/abi/connectors/v1/math.js +43 -0
- package/dist/src/abi/connectors/v1/migrate.js +46 -0
- package/dist/src/abi/connectors/v1/oasis.js +198 -0
- package/dist/src/abi/connectors/v1/oneInch.js +160 -0
- package/dist/src/abi/connectors/v1/polygon_bridge.js +4 -0
- package/dist/src/abi/connectors/v1/refinance.js +4 -0
- package/dist/src/abi/connectors/v1/staking.js +220 -0
- package/dist/src/abi/connectors/v1/swerve.js +179 -0
- package/dist/src/abi/connectors/v1/uniswap.js +297 -0
- package/dist/src/abi/connectors/v2/1INCH-A.js +42 -0
- package/dist/src/abi/connectors/v2/1INCH-B.js +4 -0
- package/dist/src/abi/connectors/v2/1INCH-V3-A.js +42 -0
- package/dist/src/abi/connectors/v2/1INCH-V4-A.js +42 -0
- package/dist/src/abi/connectors/v2/AAVE-CLAIM-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-CLAIM-B.js +166 -0
- package/dist/src/abi/connectors/v2/AAVE-IMPORT-V2-V3-A.js +57 -0
- package/dist/src/abi/connectors/v2/AAVE-STAKE-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V1-A.js +130 -0
- package/dist/src/abi/connectors/v2/AAVE-V1-IMPORT-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-A.js +188 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-A.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-B.js +225 -0
- package/dist/src/abi/connectors/v2/AAVE-V2-IMPORT-C.js +4 -0
- package/dist/src/abi/connectors/v2/AAVE-V3-A.js +322 -0
- package/dist/src/abi/connectors/v2/AAVE-V3-CLAIM-A.js +58 -0
- package/dist/src/abi/connectors/v2/AAVE-V3-IMPORT-A.js +59 -0
- package/dist/src/abi/connectors/v2/AAVE-V3-IMPORT-PERMIT-A.js +81 -0
- package/dist/src/abi/connectors/v2/AUTHORITY-A.js +100 -0
- package/dist/src/abi/connectors/v2/B-COMPOUND-A.js +4 -0
- package/dist/src/abi/connectors/v2/B-LIQUITY-A.js +4 -0
- package/dist/src/abi/connectors/v2/B-MAKERDAO-A.js +4 -0
- package/dist/src/abi/connectors/v2/BASIC-A.js +94 -0
- package/dist/src/abi/connectors/v2/BASIC-B.js +4 -0
- package/dist/src/abi/connectors/v2/BASIC-C.js +4 -0
- package/dist/src/abi/connectors/v2/BENQI-A.js +901 -0
- package/dist/src/abi/connectors/v2/COMP-A.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-A.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-A.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-B.js +195 -0
- package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-C.js +4 -0
- package/dist/src/abi/connectors/v2/COMPOUND-IMPORT-D.js +27 -0
- package/dist/src/abi/connectors/v2/DSA-SPELL-A.js +60 -0
- package/dist/src/abi/connectors/v2/G-UNISWAP-A.js +4 -0
- package/dist/src/abi/connectors/v2/GELATO-AAVE-A.js +4 -0
- package/dist/src/abi/connectors/v2/HOP-A.js +41 -0
- package/dist/src/abi/connectors/v2/HOP-MAINNET-A.js +38 -0
- package/dist/src/abi/connectors/v2/INST-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-LM-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-STAKING-A.js +4 -0
- package/dist/src/abi/connectors/v2/INST-STAKING-B.js +4 -0
- package/dist/src/abi/connectors/v2/INSTA-DEX-SIMULATION-A.js +40 -0
- package/dist/src/abi/connectors/v2/INSTAPOOL-A.js +4 -0
- package/dist/src/abi/connectors/v2/INSTAPOOL-B.js +4 -0
- package/dist/src/abi/connectors/v2/INSTAPOOL-C.js +4 -0
- package/dist/src/abi/connectors/v2/INTEROP-A.js +4 -0
- package/dist/src/abi/connectors/v2/INTEROP-STAGING-A.js +4 -0
- package/dist/src/abi/connectors/v2/LIDO-STETH-A.js +36 -0
- package/dist/src/abi/connectors/v2/LIQUITY-A.js +4 -0
- package/dist/src/abi/connectors/v2/LITE-A.js +4 -0
- package/dist/src/abi/connectors/v2/MAKERDAO-A.js +4 -0
- package/dist/src/abi/connectors/v2/MAKERDAO-CLAIM-A.js +136 -0
- package/dist/src/abi/connectors/v2/MSTABLE-A.js +4 -0
- package/dist/src/abi/connectors/v2/NOTIONAL-V2-A.js +484 -0
- package/dist/src/abi/connectors/v2/PANGOLIN-A.js +136 -0
- package/dist/src/abi/connectors/v2/PANGOLIN-STAKE-A.js +227 -0
- package/dist/src/abi/connectors/v2/PARASWAP-A.js +29 -0
- package/dist/src/abi/connectors/v2/PARASWAP-V5-A.js +29 -0
- package/dist/src/abi/connectors/v2/POLYGON-BRIDGE-A.js +4 -0
- package/dist/src/abi/connectors/v2/POOLTOGETHER-A.js +4 -0
- package/dist/src/abi/connectors/v2/QI-A.js +4 -0
- package/dist/src/abi/connectors/v2/QUICKSWAP-A.js +136 -0
- package/dist/src/abi/connectors/v2/REFINANCE-A.js +4 -0
- package/dist/src/abi/connectors/v2/REFLEXER-A.js +4 -0
- package/dist/src/abi/connectors/v2/STAKE-ERC20-A.js +4 -0
- package/dist/src/abi/connectors/v2/SUSHISWAP-A.js +136 -0
- package/dist/src/abi/connectors/v2/SWAP-AGGREGATOR-A.js +25 -0
- package/dist/src/abi/connectors/v2/UBIQUITY-A.js +73 -0
- package/dist/src/abi/connectors/v2/UNISWAP-A.js +297 -0
- package/dist/src/abi/connectors/v2/UNISWAP-SELL-BETA.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V2-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-ROUTER-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.js +4 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-STAKER-B.js +193 -0
- package/dist/src/abi/connectors/v2/UNISWAP-V3-SWAP-A.js +74 -0
- package/dist/src/abi/connectors/v2/UNIVERSE-A.js +4 -0
- package/dist/src/abi/connectors/v2/WAVAX-A.js +4 -0
- package/dist/src/abi/connectors/v2/WETH-A.js +4 -0
- package/dist/src/abi/connectors/v2/WFTM-A.js +60 -0
- package/dist/src/abi/connectors/v2/WMATIC-A.js +4 -0
- package/dist/src/abi/connectors/v2/YEARN-VAULT-A.js +4 -0
- package/dist/src/abi/connectors/v2/ZEROX-A.js +29 -0
- package/dist/src/abi/connectors/v2/ZEROX-V4-A.js +29 -0
- package/dist/src/abi/connectors/v2/index.js +173 -0
- package/dist/src/abi/index.js +12 -2
- package/dist/src/abi/instList.json +232 -0
- package/dist/src/abi/interopX.json +1436 -0
- package/dist/src/api/index.js +8 -1
- package/dist/src/constants/addresses.js +12 -7
- package/dist/src/constants/blockConfirmations.js +8 -0
- package/dist/src/constants/capPerChain.js +8 -0
- package/dist/src/constants/index.js +3 -0
- package/dist/src/constants/tokens.js +30 -7
- package/dist/src/constants/wrappedNativeToken.js +8 -0
- package/dist/src/crons/index.js +3 -0
- package/dist/src/crons/prices.js +16 -0
- package/dist/src/db/models/transaction.js +26 -16
- package/dist/src/errors/index.js +30 -0
- package/dist/src/gnosis/actions/aaveV2/index.js +11 -0
- package/dist/src/gnosis/actions/aaveV2/source.js +98 -0
- package/dist/src/gnosis/actions/aaveV2/target.js +100 -0
- package/dist/src/gnosis/actions/aaveV3/index.js +11 -0
- package/dist/src/gnosis/actions/aaveV3/source.js +83 -0
- package/dist/src/gnosis/actions/aaveV3/target.js +87 -0
- package/dist/src/gnosis/actions/index.js +4 -2
- package/dist/src/gnosis/index.js +3 -3
- package/dist/src/index.js +2 -1
- package/dist/src/net/protocol/dial/SignatureDialProtocol.js +2 -2
- package/dist/src/providers/index.js +17 -0
- package/dist/src/providers/retry-provider.js +56 -0
- package/dist/src/services/Prices.js +74 -0
- package/dist/src/services/index.js +8 -0
- package/dist/src/tasks/InteropX/ProcessSubmitEvents.js +273 -0
- package/dist/src/tasks/InteropX/ProcessValidateEvents.js +203 -0
- package/dist/src/tasks/InteropX/SyncLogExecuteEvents.js +113 -0
- package/dist/src/tasks/{InteropXContract/SyncBridgeRequestEvents.js → InteropX/SyncLogSubmitEvents.js} +28 -17
- package/dist/src/tasks/{InteropXContract/SyncBridgeRequestSentEvents.js → InteropX/SyncLogValidateEvents.js} +44 -27
- package/dist/src/tasks/Transactions/SyncTransactionStatusTask.js +6 -3
- package/dist/src/tasks/index.js +19 -12
- package/dist/src/typechain/{InteropXContract.js → AaveV2Resolver.js} +0 -0
- package/dist/src/typechain/AaveV3Resolver.js +2 -0
- package/dist/src/typechain/BalanceResolver.js +2 -0
- package/dist/src/typechain/InstList.js +2 -0
- package/dist/src/typechain/InteropX.js +2 -0
- package/dist/src/typechain/factories/AaveV2Resolver__factory.js +1191 -0
- package/dist/src/typechain/factories/AaveV3Resolver__factory.js +887 -0
- package/dist/src/typechain/factories/BalanceResolver__factory.js +228 -0
- package/dist/src/typechain/factories/InstList__factory.js +249 -0
- package/dist/src/typechain/factories/InteropX__factory.js +1928 -0
- package/dist/src/typechain/factories/index.js +11 -3
- package/dist/src/typechain/index.js +11 -3
- package/dist/src/utils/aave.js +252 -0
- package/dist/src/utils/async.js +18 -0
- package/dist/src/utils/dsa.js +36 -0
- package/dist/src/utils/formatting.js +67 -0
- package/dist/src/utils/gnosis.js +87 -0
- package/dist/src/utils/http.js +10 -0
- package/dist/src/utils/index.js +23 -165
- package/dist/src/utils/interop.js +16 -0
- package/dist/src/utils/tokens.js +22 -0
- package/dist/src/utils/validate.js +111 -0
- package/dist/src/utils/web3.js +106 -0
- package/package.json +22 -12
- package/src/abi/aaveV2Resolver.json +832 -0
- package/src/abi/aaveV3Resolver.json +628 -0
- package/src/abi/balanceResolver.json +211 -0
- package/src/abi/connectors/index.ts +14 -0
- package/src/abi/connectors/v1/aave.ts +147 -0
- package/src/abi/connectors/v1/aave_claim.ts +3 -0
- package/src/abi/connectors/v1/aave_migrate.ts +108 -0
- package/src/abi/connectors/v1/aave_polygon_migrate.ts +109 -0
- package/src/abi/connectors/v1/aave_stake.ts +3 -0
- package/src/abi/connectors/v1/aave_v1_import.ts +53 -0
- package/src/abi/connectors/v1/aave_v2.ts +229 -0
- package/src/abi/connectors/v1/aave_v2_import.ts +58 -0
- package/src/abi/connectors/v1/authority.ts +99 -0
- package/src/abi/connectors/v1/basic.ts +135 -0
- package/src/abi/connectors/v1/chi.ts +35 -0
- package/src/abi/connectors/v1/comp.ts +3 -0
- package/src/abi/connectors/v1/compound.ts +3 -0
- package/src/abi/connectors/v1/compoundImport.ts +68 -0
- package/src/abi/connectors/v1/compoundImport_v2.ts +3 -0
- package/src/abi/connectors/v1/compound_old.ts +447 -0
- package/src/abi/connectors/v1/curve.ts +139 -0
- package/src/abi/connectors/v1/curve_claim.ts +62 -0
- package/src/abi/connectors/v1/curve_gauge.ts +157 -0
- package/src/abi/connectors/v1/curve_sbtc.ts +139 -0
- package/src/abi/connectors/v1/curve_susd.ts +139 -0
- package/src/abi/connectors/v1/curve_three.ts +78 -0
- package/src/abi/connectors/v1/curve_y.ts +139 -0
- package/src/abi/connectors/v1/dsa_migrate_v1_to_v2.ts +3 -0
- package/src/abi/connectors/v1/dydx.ts +147 -0
- package/src/abi/connectors/v1/dydx_flash.ts +51 -0
- package/src/abi/connectors/v1/fee.ts +49 -0
- package/src/abi/connectors/v1/gelato.ts +1137 -0
- package/src/abi/connectors/v1/index.ts +42 -0
- package/src/abi/connectors/v1/instapool.ts +438 -0
- package/src/abi/connectors/v1/instapool_v2.ts +125 -0
- package/src/abi/connectors/v1/kyber.ts +116 -0
- package/src/abi/connectors/v1/maker.ts +479 -0
- package/src/abi/connectors/v1/maker_old.ts +299 -0
- package/src/abi/connectors/v1/math.ts +42 -0
- package/src/abi/connectors/v1/migrate.ts +45 -0
- package/src/abi/connectors/v1/oasis.ts +197 -0
- package/src/abi/connectors/v1/oneInch.ts +159 -0
- package/src/abi/connectors/v1/polygon_bridge.ts +3 -0
- package/src/abi/connectors/v1/refinance.ts +3 -0
- package/src/abi/connectors/v1/staking.ts +219 -0
- package/src/abi/connectors/v1/swerve.ts +178 -0
- package/src/abi/connectors/v1/uniswap.ts +297 -0
- package/src/abi/connectors/v2/1INCH-A.ts +41 -0
- package/src/abi/connectors/v2/1INCH-B.ts +3 -0
- package/src/abi/connectors/v2/1INCH-V3-A.ts +41 -0
- package/src/abi/connectors/v2/1INCH-V4-A.ts +41 -0
- package/src/abi/connectors/v2/AAVE-CLAIM-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-CLAIM-B.ts +165 -0
- package/src/abi/connectors/v2/AAVE-IMPORT-V2-V3-A.ts +56 -0
- package/src/abi/connectors/v2/AAVE-STAKE-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V1-A.ts +130 -0
- package/src/abi/connectors/v2/AAVE-V1-IMPORT-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V2-A.ts +187 -0
- package/src/abi/connectors/v2/AAVE-V2-IMPORT-A.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V2-IMPORT-B.ts +224 -0
- package/src/abi/connectors/v2/AAVE-V2-IMPORT-C.ts +3 -0
- package/src/abi/connectors/v2/AAVE-V3-A.ts +321 -0
- package/src/abi/connectors/v2/AAVE-V3-CLAIM-A.ts +57 -0
- package/src/abi/connectors/v2/AAVE-V3-IMPORT-A.ts +58 -0
- package/src/abi/connectors/v2/AAVE-V3-IMPORT-PERMIT-A.ts +80 -0
- package/src/abi/connectors/v2/AUTHORITY-A.ts +99 -0
- package/src/abi/connectors/v2/B-COMPOUND-A.ts +3 -0
- package/src/abi/connectors/v2/B-LIQUITY-A.ts +3 -0
- package/src/abi/connectors/v2/B-MAKERDAO-A.ts +3 -0
- package/src/abi/connectors/v2/BASIC-A.ts +93 -0
- package/src/abi/connectors/v2/BASIC-B.ts +3 -0
- package/src/abi/connectors/v2/BASIC-C.ts +3 -0
- package/src/abi/connectors/v2/BENQI-A.ts +900 -0
- package/src/abi/connectors/v2/COMP-A.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-A.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-IMPORT-A.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-IMPORT-B.ts +194 -0
- package/src/abi/connectors/v2/COMPOUND-IMPORT-C.ts +3 -0
- package/src/abi/connectors/v2/COMPOUND-IMPORT-D.ts +26 -0
- package/src/abi/connectors/v2/DSA-SPELL-A.ts +59 -0
- package/src/abi/connectors/v2/G-UNISWAP-A.ts +3 -0
- package/src/abi/connectors/v2/GELATO-AAVE-A.ts +3 -0
- package/src/abi/connectors/v2/HOP-A.ts +40 -0
- package/src/abi/connectors/v2/HOP-MAINNET-A.ts +37 -0
- package/src/abi/connectors/v2/INST-A.ts +3 -0
- package/src/abi/connectors/v2/INST-LM-A.ts +3 -0
- package/src/abi/connectors/v2/INST-STAKING-A.ts +3 -0
- package/src/abi/connectors/v2/INST-STAKING-B.ts +3 -0
- package/src/abi/connectors/v2/INSTA-DEX-SIMULATION-A.ts +39 -0
- package/src/abi/connectors/v2/INSTAPOOL-A.ts +3 -0
- package/src/abi/connectors/v2/INSTAPOOL-B.ts +3 -0
- package/src/abi/connectors/v2/INSTAPOOL-C.ts +3 -0
- package/src/abi/connectors/v2/INTEROP-A.ts +3 -0
- package/src/abi/connectors/v2/INTEROP-STAGING-A.ts +3 -0
- package/src/abi/connectors/v2/LIDO-STETH-A.ts +35 -0
- package/src/abi/connectors/v2/LIQUITY-A.ts +3 -0
- package/src/abi/connectors/v2/LITE-A.ts +3 -0
- package/src/abi/connectors/v2/MAKERDAO-A.ts +3 -0
- package/src/abi/connectors/v2/MAKERDAO-CLAIM-A.ts +135 -0
- package/src/abi/connectors/v2/MSTABLE-A.ts +3 -0
- package/src/abi/connectors/v2/NOTIONAL-V2-A.ts +483 -0
- package/src/abi/connectors/v2/PANGOLIN-A.ts +135 -0
- package/src/abi/connectors/v2/PANGOLIN-STAKE-A.ts +226 -0
- package/src/abi/connectors/v2/PARASWAP-A.ts +28 -0
- package/src/abi/connectors/v2/PARASWAP-V5-A.ts +28 -0
- package/src/abi/connectors/v2/POLYGON-BRIDGE-A.ts +3 -0
- package/src/abi/connectors/v2/POOLTOGETHER-A.ts +3 -0
- package/src/abi/connectors/v2/QI-A.ts +3 -0
- package/src/abi/connectors/v2/QUICKSWAP-A.ts +135 -0
- package/src/abi/connectors/v2/REFINANCE-A.ts +3 -0
- package/src/abi/connectors/v2/REFLEXER-A.ts +3 -0
- package/src/abi/connectors/v2/STAKE-ERC20-A.ts +3 -0
- package/src/abi/connectors/v2/SUSHISWAP-A.ts +135 -0
- package/src/abi/connectors/v2/SWAP-AGGREGATOR-A.ts +24 -0
- package/src/abi/connectors/v2/UBIQUITY-A.ts +72 -0
- package/src/abi/connectors/v2/UNISWAP-A.ts +297 -0
- package/src/abi/connectors/v2/UNISWAP-SELL-BETA.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V2-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V3-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V3-ROUTER-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V3-STAKE-A.ts +3 -0
- package/src/abi/connectors/v2/UNISWAP-V3-STAKER-B.ts +192 -0
- package/src/abi/connectors/v2/UNISWAP-V3-SWAP-A.ts +73 -0
- package/src/abi/connectors/v2/UNIVERSE-A.ts +3 -0
- package/src/abi/connectors/v2/WAVAX-A.ts +3 -0
- package/src/abi/connectors/v2/WETH-A.ts +3 -0
- package/src/abi/connectors/v2/WFTM-A.ts +59 -0
- package/src/abi/connectors/v2/WMATIC-A.ts +3 -0
- package/src/abi/connectors/v2/YEARN-VAULT-A.ts +3 -0
- package/src/abi/connectors/v2/ZEROX-A.ts +28 -0
- package/src/abi/connectors/v2/ZEROX-V4-A.ts +28 -0
- package/src/abi/connectors/v2/index.ts +173 -0
- package/src/abi/index.ts +15 -5
- package/src/abi/instList.json +232 -0
- package/src/abi/interopX.json +1436 -0
- package/src/api/index.ts +9 -1
- package/src/constants/addresses.ts +24 -8
- package/src/constants/blockConfirmations.ts +5 -0
- package/src/constants/capPerChain.ts +5 -0
- package/src/constants/index.ts +3 -0
- package/src/constants/tokens.ts +31 -8
- package/src/constants/wrappedNativeToken.ts +5 -0
- package/src/crons/index.ts +1 -0
- package/src/crons/prices.ts +12 -0
- package/src/db/models/transaction.ts +148 -93
- package/src/errors/index.ts +26 -0
- package/src/gnosis/actions/aaveV2/index.ts +9 -0
- package/src/gnosis/actions/aaveV2/source.ts +171 -0
- package/src/gnosis/actions/aaveV2/target.ts +160 -0
- package/src/gnosis/actions/aaveV3/index.ts +9 -0
- package/src/gnosis/actions/aaveV3/source.ts +131 -0
- package/src/gnosis/actions/aaveV3/target.ts +142 -0
- package/src/gnosis/actions/index.ts +4 -2
- package/src/gnosis/index.ts +3 -3
- package/src/index.ts +1 -0
- package/src/net/protocol/dial/SignatureDialProtocol.ts +3 -2
- package/src/providers/index.ts +1 -0
- package/src/providers/retry-provider.ts +63 -0
- package/src/services/Prices.ts +89 -0
- package/src/services/index.ts +1 -0
- package/src/tasks/InteropX/ProcessSubmitEvents.ts +386 -0
- package/src/tasks/InteropX/ProcessValidateEvents.ts +297 -0
- package/src/tasks/InteropX/SyncLogExecuteEvents.ts +161 -0
- package/src/tasks/InteropX/SyncLogSubmitEvents.ts +138 -0
- package/src/tasks/InteropX/SyncLogValidateEvents.ts +151 -0
- package/src/tasks/Transactions/SyncTransactionStatusTask.ts +6 -3
- package/src/tasks/index.ts +20 -12
- package/src/typechain/AaveV2Resolver.ts +1017 -0
- package/src/typechain/AaveV3Resolver.ts +935 -0
- package/src/typechain/BalanceResolver.ts +266 -0
- package/src/typechain/InstList.ts +402 -0
- package/src/typechain/InteropX.ts +1216 -0
- package/src/typechain/factories/AaveV2Resolver__factory.ts +1198 -0
- package/src/typechain/factories/AaveV3Resolver__factory.ts +894 -0
- package/src/typechain/factories/BalanceResolver__factory.ts +235 -0
- package/src/typechain/factories/InstList__factory.ts +253 -0
- package/src/typechain/factories/InteropX__factory.ts +1932 -0
- package/src/typechain/factories/index.ts +5 -1
- package/src/typechain/index.ts +10 -2
- package/src/utils/aave.ts +355 -0
- package/src/utils/async.ts +22 -0
- package/src/utils/dsa.ts +56 -0
- package/src/utils/formatting.ts +68 -0
- package/src/utils/gnosis.ts +166 -0
- package/src/utils/http.ts +6 -0
- package/src/utils/index.ts +10 -240
- package/src/utils/interop.ts +28 -0
- package/src/utils/tokens.ts +21 -0
- package/src/utils/validate.ts +179 -0
- package/src/utils/web3.ts +145 -0
- package/tests/aaveV3ValidateCrossChainPosition.ts +15 -0
- package/dist/src/abi/interopXContract.json +0 -391
- package/dist/src/gnosis/actions/withdraw/index.js +0 -41
- package/dist/src/tasks/InteropXContract/ProcessBridgeRequestEvents.js +0 -152
- package/dist/src/typechain/factories/InteropXContract__factory.js +0 -526
- package/src/abi/interopXContract.json +0 -391
- package/src/gnosis/actions/withdraw/index.ts +0 -56
- package/src/tasks/InteropXContract/ProcessBridgeRequestEvents.ts +0 -216
- package/src/tasks/InteropXContract/SyncBridgeRequestEvents.ts +0 -114
- package/src/tasks/InteropXContract/SyncBridgeRequestSentEvents.ts +0 -120
- package/src/typechain/InteropXContract.ts +0 -524
- package/src/typechain/factories/InteropXContract__factory.ts +0 -533
@@ -1,6 +1,10 @@
|
|
1
1
|
/* Autogenerated file. Do not edit manually. */
|
2
2
|
/* tslint:disable */
|
3
3
|
/* eslint-disable */
|
4
|
+
export { AaveV2Resolver__factory } from "./AaveV2Resolver__factory";
|
5
|
+
export { AaveV3Resolver__factory } from "./AaveV3Resolver__factory";
|
6
|
+
export { BalanceResolver__factory } from "./BalanceResolver__factory";
|
4
7
|
export { Erc20__factory } from "./Erc20__factory";
|
5
8
|
export { GnosisSafe__factory } from "./GnosisSafe__factory";
|
6
|
-
export {
|
9
|
+
export { InstList__factory } from "./InstList__factory";
|
10
|
+
export { InteropX__factory } from "./InteropX__factory";
|
package/src/typechain/index.ts
CHANGED
@@ -1,10 +1,18 @@
|
|
1
1
|
/* Autogenerated file. Do not edit manually. */
|
2
2
|
/* tslint:disable */
|
3
3
|
/* eslint-disable */
|
4
|
+
export type { AaveV2Resolver } from "./AaveV2Resolver";
|
5
|
+
export type { AaveV3Resolver } from "./AaveV3Resolver";
|
6
|
+
export type { BalanceResolver } from "./BalanceResolver";
|
4
7
|
export type { Erc20 } from "./Erc20";
|
5
8
|
export type { GnosisSafe } from "./GnosisSafe";
|
6
|
-
export type {
|
9
|
+
export type { InstList } from "./InstList";
|
10
|
+
export type { InteropX } from "./InteropX";
|
7
11
|
export * as factories from "./factories";
|
12
|
+
export { AaveV2Resolver__factory } from "./factories/AaveV2Resolver__factory";
|
13
|
+
export { AaveV3Resolver__factory } from "./factories/AaveV3Resolver__factory";
|
14
|
+
export { BalanceResolver__factory } from "./factories/BalanceResolver__factory";
|
8
15
|
export { Erc20__factory } from "./factories/Erc20__factory";
|
9
16
|
export { GnosisSafe__factory } from "./factories/GnosisSafe__factory";
|
10
|
-
export {
|
17
|
+
export { InstList__factory } from "./factories/InstList__factory";
|
18
|
+
export { InteropX__factory } from "./factories/InteropX__factory";
|
@@ -0,0 +1,355 @@
|
|
1
|
+
import {
|
2
|
+
BigNumber
|
3
|
+
} from "bignumber.js";
|
4
|
+
import { http } from "./http";
|
5
|
+
import { chainIdToNetwork } from "./web3";
|
6
|
+
|
7
|
+
const getIsolationApi = (network: string) =>
|
8
|
+
`https://api.instadapp.io/defi/${network}/aave/v3/isolated`;
|
9
|
+
|
10
|
+
const getEmodeApi = (network: string) =>
|
11
|
+
`https://api.instadapp.io/defi/${network}/aave/v3/emode`;
|
12
|
+
|
13
|
+
const getPositionApi = (network: string) =>
|
14
|
+
`https://api.instadapp.io/defi/${network}/aave/v3/position`;
|
15
|
+
|
16
|
+
const safeHF = 1.3;
|
17
|
+
const isolatedDebtCeilingSafeMargin = 0.8;
|
18
|
+
|
19
|
+
export const aaveV3ValidateCrossChainPosition = async ({ sourceAddress, targetAddress, sourceChainId, targetChainId, }) => {
|
20
|
+
let totalSupplySource = new BigNumber(0),
|
21
|
+
totalDebtSource = new BigNumber(0),
|
22
|
+
totalSupplyTarget = new BigNumber(0),
|
23
|
+
totalDebtTarget = new BigNumber(0),
|
24
|
+
totalDebtSourceInUsd = new BigNumber(0),
|
25
|
+
totalDebtTargetInUsd = new BigNumber(0);
|
26
|
+
|
27
|
+
const sourceNetwork = chainIdToNetwork(sourceChainId);
|
28
|
+
const targetNetwork = chainIdToNetwork(targetChainId);
|
29
|
+
|
30
|
+
//fetch user position
|
31
|
+
const { data: userSourcePosition } = await http.get(getPositionApi(sourceNetwork), {
|
32
|
+
params: {
|
33
|
+
user: sourceAddress,
|
34
|
+
},
|
35
|
+
})
|
36
|
+
|
37
|
+
const { data: userTargetPosition } = await http.get(getPositionApi(targetNetwork), {
|
38
|
+
params: {
|
39
|
+
user: targetAddress
|
40
|
+
},
|
41
|
+
})
|
42
|
+
|
43
|
+
const { data: targetEmode } = await http.get(getEmodeApi(targetNetwork), {
|
44
|
+
params: {
|
45
|
+
user: targetAddress
|
46
|
+
},
|
47
|
+
})
|
48
|
+
|
49
|
+
|
50
|
+
const { data: sourceIso } = await http.get(getIsolationApi(sourceNetwork), {
|
51
|
+
params: {
|
52
|
+
user: sourceAddress,
|
53
|
+
},
|
54
|
+
})
|
55
|
+
|
56
|
+
const { data: targetIso } = await http.get(getIsolationApi(targetNetwork), {
|
57
|
+
params: {
|
58
|
+
user: targetAddress
|
59
|
+
},
|
60
|
+
})
|
61
|
+
|
62
|
+
|
63
|
+
const sourceDeposits: any = [];
|
64
|
+
const sourceDebts: any = [];
|
65
|
+
const targetDeposits: any = [];
|
66
|
+
const targetDebts: any = [];
|
67
|
+
|
68
|
+
userSourcePosition.data.forEach((info: any) => {
|
69
|
+
if (info.supply > "0") sourceDeposits.push(info);
|
70
|
+
if (info.borrow > "0") sourceDebts.push(info);
|
71
|
+
});
|
72
|
+
|
73
|
+
userTargetPosition.data.forEach((info: any) => {
|
74
|
+
if (info.supply > "0") targetDeposits.push(info);
|
75
|
+
if (info.borrow > "0") targetDebts.push(info);
|
76
|
+
});
|
77
|
+
|
78
|
+
const sourceIsoAssets = sourceIso.isolatedAssets;
|
79
|
+
const targetIsoAssets = targetIso.isolatedAssets;
|
80
|
+
|
81
|
+
sourceDeposits.forEach((asset: any) => {
|
82
|
+
totalSupplySource = totalSupplySource.plus(
|
83
|
+
new BigNumber(asset.supply).multipliedBy(
|
84
|
+
new BigNumber(10).pow(new BigNumber(asset.aDecimals))
|
85
|
+
)
|
86
|
+
);
|
87
|
+
});
|
88
|
+
|
89
|
+
sourceDebts.forEach((asset: any) => {
|
90
|
+
totalDebtSource = totalDebtSource.plus(
|
91
|
+
new BigNumber(asset.borrow).multipliedBy(10 ** asset.aDecimals)
|
92
|
+
);
|
93
|
+
|
94
|
+
totalDebtSourceInUsd = totalDebtSourceInUsd.plus(
|
95
|
+
new BigNumber(asset.borrow).multipliedBy(asset.priceInUsd)
|
96
|
+
);
|
97
|
+
});
|
98
|
+
|
99
|
+
targetDeposits.forEach((asset: any) => {
|
100
|
+
totalSupplyTarget = totalSupplyTarget.plus(
|
101
|
+
new BigNumber(asset.supply).pow(10 ** asset.aDecimals)
|
102
|
+
);
|
103
|
+
});
|
104
|
+
|
105
|
+
targetDebts.forEach((asset: any) => {
|
106
|
+
totalDebtTarget = totalDebtTarget.plus(
|
107
|
+
new BigNumber(asset.borrow).pow(10 ** asset.aDecimals)
|
108
|
+
);
|
109
|
+
|
110
|
+
totalDebtTargetInUsd = totalDebtTargetInUsd.plus(
|
111
|
+
new BigNumber(asset.borrow).multipliedBy(asset.priceInUsd)
|
112
|
+
);
|
113
|
+
});
|
114
|
+
|
115
|
+
/**
|
116
|
+
* user deposit on source chain should be available on target chain
|
117
|
+
* user debts on source chain should be available on target chain
|
118
|
+
*/
|
119
|
+
let bool = false;
|
120
|
+
sourceDebts.forEach((asset: any) => {
|
121
|
+
if (!userTargetPosition.data.find((x: any) => x.key === asset.key))
|
122
|
+
bool = true;
|
123
|
+
});
|
124
|
+
|
125
|
+
sourceDeposits.forEach((asset: any) => {
|
126
|
+
if (!userTargetPosition.data.find((x: any) => x.key === asset.key))
|
127
|
+
bool = true;
|
128
|
+
});
|
129
|
+
if (bool) throw "user asset on source chain not available on target chain";
|
130
|
+
|
131
|
+
/**
|
132
|
+
* checking conditions related to EMODE
|
133
|
+
*/
|
134
|
+
if (
|
135
|
+
userSourcePosition.emodeId > "0" &&
|
136
|
+
userTargetPosition.emodeId !== userSourcePosition.emodeId
|
137
|
+
)
|
138
|
+
/**
|
139
|
+
* if user position on emode on source chain and not on target chain, can't migrate.
|
140
|
+
* as in source chain tvl and lt for position will be greater > tvl and lt for the same assets.
|
141
|
+
*/
|
142
|
+
throw "User emode Id not same between respective chains";
|
143
|
+
else if (
|
144
|
+
userSourcePosition.emodeId === userTargetPosition.emodeId &&
|
145
|
+
userTargetPosition.emodeId > "0"
|
146
|
+
) {
|
147
|
+
/**
|
148
|
+
* if the user emode Id is same on both chain
|
149
|
+
* @conditions user debt tokens on source chain must be present on the target chain emode Id.
|
150
|
+
*/
|
151
|
+
sourceDebts.forEach((asset: any) => {
|
152
|
+
if (
|
153
|
+
!targetEmode[userTargetPosition.emodeId].find(
|
154
|
+
(x: any) => x.key === asset.aTokenKey
|
155
|
+
)
|
156
|
+
)
|
157
|
+
bool = true;
|
158
|
+
});
|
159
|
+
if (bool) throw "user source debt not a valid debt for target emode";
|
160
|
+
|
161
|
+
let liquidationThreshold = new BigNumber(0);
|
162
|
+
|
163
|
+
/**
|
164
|
+
* liquidation threshold = (∑Collateral amount * liquidation threshold) / ∑collateral amount
|
165
|
+
*/
|
166
|
+
sourceDeposits.forEach((asset: any) => {
|
167
|
+
const lt = userTargetPosition.data.find(
|
168
|
+
(x: any) => x.key === asset.key
|
169
|
+
).eModeLiquidation;
|
170
|
+
liquidationThreshold.plus(
|
171
|
+
new BigNumber(asset.supply).pow(10 ** asset.aDecimals).multipliedBy(lt)
|
172
|
+
);
|
173
|
+
});
|
174
|
+
|
175
|
+
targetDeposits.forEach((asset: any) => {
|
176
|
+
liquidationThreshold.plus(
|
177
|
+
new BigNumber(asset.supply)
|
178
|
+
.pow(10 ** asset.aDecimals)
|
179
|
+
.multipliedBy(asset.eModeLiquidation)
|
180
|
+
);
|
181
|
+
});
|
182
|
+
|
183
|
+
liquidationThreshold = liquidationThreshold.dividedBy(
|
184
|
+
totalSupplySource.plus(totalSupplyTarget)
|
185
|
+
);
|
186
|
+
|
187
|
+
let hfAfterMigration = totalSupplySource
|
188
|
+
.plus(totalSupplyTarget)
|
189
|
+
.dividedBy(totalDebtSource.plus(totalDebtTarget))
|
190
|
+
.dividedBy(liquidationThreshold);
|
191
|
+
|
192
|
+
/**
|
193
|
+
* checking user HF on the target chain
|
194
|
+
* HF = (debt / collateral) / liquidation threshold
|
195
|
+
*/
|
196
|
+
if (hfAfterMigration.lt(safeHF))
|
197
|
+
throw "position not safe to migrate on target chain";
|
198
|
+
} else if (userTargetPosition.emodeId > "0") {
|
199
|
+
/**
|
200
|
+
* if the user have emode on target chain
|
201
|
+
* @conditions user debt tokens on source chain must be present on the target chain emode Id.
|
202
|
+
*/
|
203
|
+
sourceDebts.forEach((asset: any) => {
|
204
|
+
if (
|
205
|
+
!targetEmode[userTargetPosition.emodeId].find(
|
206
|
+
(x: any) => x.key === asset.aTokenKey
|
207
|
+
)
|
208
|
+
)
|
209
|
+
bool = true;
|
210
|
+
});
|
211
|
+
if (bool) throw "user source debt not a valid debt for target emode";
|
212
|
+
|
213
|
+
let liquidationThreshold = new BigNumber(0);
|
214
|
+
|
215
|
+
/**
|
216
|
+
* liquidation threshold = (∑Collateral amount * liquidation threshold) / ∑collateral amount
|
217
|
+
*/
|
218
|
+
sourceDeposits.forEach((asset: any) => {
|
219
|
+
const lt = userTargetPosition.data.find(
|
220
|
+
(x: any) => x.key === asset.key
|
221
|
+
).eModeLiquidation;
|
222
|
+
liquidationThreshold.plus(
|
223
|
+
new BigNumber(asset.supply).pow(10 ** asset.aDecimals).multipliedBy(lt)
|
224
|
+
);
|
225
|
+
});
|
226
|
+
|
227
|
+
targetDeposits.forEach((asset: any) => {
|
228
|
+
liquidationThreshold.plus(
|
229
|
+
new BigNumber(asset.supply)
|
230
|
+
.pow(10 ** asset.aDecimals)
|
231
|
+
.multipliedBy(asset.eModeLiquidation)
|
232
|
+
);
|
233
|
+
});
|
234
|
+
|
235
|
+
liquidationThreshold = liquidationThreshold.dividedBy(
|
236
|
+
totalSupplySource.plus(totalSupplyTarget)
|
237
|
+
);
|
238
|
+
|
239
|
+
let hfAfterMigration = totalSupplySource
|
240
|
+
.plus(totalSupplyTarget)
|
241
|
+
.dividedBy(totalDebtSource.plus(totalDebtTarget))
|
242
|
+
.dividedBy(liquidationThreshold);
|
243
|
+
|
244
|
+
/**
|
245
|
+
* checking user HF on the target chain
|
246
|
+
* HF = (debt / collateral) / liquidation threshold
|
247
|
+
*/
|
248
|
+
if (hfAfterMigration.lt(safeHF))
|
249
|
+
throw "position not safe to migrate on target chain";
|
250
|
+
}
|
251
|
+
|
252
|
+
|
253
|
+
// checking conditions related to ISOLATION MODE
|
254
|
+
let isSourceOnlyIsolatedAssetEnabledAsCollateral = true,
|
255
|
+
sourceIsolatedAssetAsCollateral: any = [];
|
256
|
+
|
257
|
+
let isTargetOnlyIsolatedAssetEnabledAsCollateral = true,
|
258
|
+
targteIsolatedAssetAsCollateral: any = [];
|
259
|
+
|
260
|
+
/**
|
261
|
+
* user should have enabled only isolated asset as collateral for supply
|
262
|
+
*/
|
263
|
+
sourceDeposits.forEach((asset: any) => {
|
264
|
+
if (asset.isEnabledAsCollateral) {
|
265
|
+
const ele = sourceIsoAssets.find((x: any) => x.key === asset.aTokenKey);
|
266
|
+
if (!ele) isSourceOnlyIsolatedAssetEnabledAsCollateral = false;
|
267
|
+
sourceIsolatedAssetAsCollateral.push(asset);
|
268
|
+
}
|
269
|
+
});
|
270
|
+
|
271
|
+
if (sourceIsolatedAssetAsCollateral.length === 0)
|
272
|
+
isSourceOnlyIsolatedAssetEnabledAsCollateral = false;
|
273
|
+
|
274
|
+
targetDeposits.forEach((asset: any) => {
|
275
|
+
if (asset.isEnabledAsCollateral) {
|
276
|
+
const ele = targetIsoAssets.find((x: any) => x.key === asset.aTokenKey);
|
277
|
+
if (!ele) isTargetOnlyIsolatedAssetEnabledAsCollateral = false;
|
278
|
+
targteIsolatedAssetAsCollateral.push(asset);
|
279
|
+
}
|
280
|
+
});
|
281
|
+
|
282
|
+
if (targteIsolatedAssetAsCollateral.length === 0)
|
283
|
+
isTargetOnlyIsolatedAssetEnabledAsCollateral = false;
|
284
|
+
|
285
|
+
if (isSourceOnlyIsolatedAssetEnabledAsCollateral) {
|
286
|
+
const ele = targetIsoAssets.find(
|
287
|
+
(x: any) => x.key === sourceIsolatedAssetAsCollateral[0].aTokenKey
|
288
|
+
);
|
289
|
+
|
290
|
+
/**
|
291
|
+
* if user isolated asset on source chain is also isolated on target chain
|
292
|
+
*/
|
293
|
+
if (ele)
|
294
|
+
if (isTargetOnlyIsolatedAssetEnabledAsCollateral) {
|
295
|
+
/**
|
296
|
+
* if the user is in isolation mode on both chain then.
|
297
|
+
* @conditions user total debt on source chain should be less than target chain isolated debt ceiling.
|
298
|
+
*/
|
299
|
+
const maxDebtCeiling = new BigNumber(
|
300
|
+
targteIsolatedAssetAsCollateral[0].isolationDebtCeiling
|
301
|
+
).multipliedBy(isolatedDebtCeilingSafeMargin);
|
302
|
+
|
303
|
+
if (
|
304
|
+
maxDebtCeiling.lt(totalDebtSourceInUsd.plus(totalDebtTargetInUsd))
|
305
|
+
) {
|
306
|
+
throw "position not safe to migrate on target chain: target isolated debt ceiling will reach";
|
307
|
+
}
|
308
|
+
|
309
|
+
sourceDebts.forEach((asset: any) => {
|
310
|
+
if (
|
311
|
+
!targetIso.borrowableInIsolation.find(
|
312
|
+
(x: any) => x.key === asset.aTokenKey
|
313
|
+
)
|
314
|
+
) {
|
315
|
+
throw "user source debt not isolated on target chain";
|
316
|
+
}
|
317
|
+
});
|
318
|
+
} else {
|
319
|
+
throw "can't migrate due to user on isolation mode on only one chain";
|
320
|
+
}
|
321
|
+
} else {
|
322
|
+
const tokenInfoSupply: any = [
|
323
|
+
[],
|
324
|
+
[],
|
325
|
+
[]
|
326
|
+
];
|
327
|
+
const tokenInfoBorrow: any = [
|
328
|
+
[],
|
329
|
+
[],
|
330
|
+
[]
|
331
|
+
];
|
332
|
+
|
333
|
+
sourceDeposits.forEach((asset: any) => {
|
334
|
+
tokenInfoSupply[0].push(asset.underlyingTokenAddress);
|
335
|
+
const ele = userTargetPosition.data.find((x: any) => x.key === asset.key);
|
336
|
+
tokenInfoSupply[1].push(ele.underlyingTokenAddress);
|
337
|
+
tokenInfoSupply[2].push(
|
338
|
+
new BigNumber(asset.supply)
|
339
|
+
.multipliedBy(10 ** asset.aDecimals)
|
340
|
+
.toString()
|
341
|
+
);
|
342
|
+
});
|
343
|
+
|
344
|
+
sourceDebts.forEach((asset: any) => {
|
345
|
+
tokenInfoBorrow[0].push(asset.underlyingTokenAddress);
|
346
|
+
const ele = userTargetPosition.data.find((x: any) => x.key === asset.key);
|
347
|
+
tokenInfoBorrow[1].push(ele.underlyingTokenAddress);
|
348
|
+
tokenInfoBorrow[2].push(
|
349
|
+
new BigNumber(asset.borrow)
|
350
|
+
.multipliedBy(10 ** asset.aDecimals)
|
351
|
+
.toString()
|
352
|
+
);
|
353
|
+
});
|
354
|
+
}
|
355
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
/**
|
2
|
+
* Call an async function with a maximum time limit (in milliseconds) for the timeout
|
3
|
+
* Resolved promise for async function call, or an error if time limit reached
|
4
|
+
*/
|
5
|
+
export const asyncCallWithTimeout = async <T>(
|
6
|
+
asyncPromise: Promise<T>,
|
7
|
+
timeout: number
|
8
|
+
) => {
|
9
|
+
let timeoutHandle;
|
10
|
+
|
11
|
+
const timeoutPromise = new Promise((_resolve, reject) => {
|
12
|
+
timeoutHandle = setTimeout(
|
13
|
+
() => reject(new Error("Async call timeout limit reached")),
|
14
|
+
timeout
|
15
|
+
);
|
16
|
+
});
|
17
|
+
|
18
|
+
return Promise.race([asyncPromise, timeoutPromise]).then((result) => {
|
19
|
+
clearTimeout(timeoutHandle);
|
20
|
+
return result;
|
21
|
+
}) as Promise<T>;
|
22
|
+
};
|
package/src/utils/dsa.ts
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
import Web3EthAbi from "web3-eth-abi";
|
2
|
+
import { connectors } from "@/abi/connectors";
|
3
|
+
import { getContract, getRpcProviderUrl } from "./web3";
|
4
|
+
import { InstList } from "@/typechain";
|
5
|
+
import { addresses } from "@/constants";
|
6
|
+
import abi from "@/abi";
|
7
|
+
import { JsonRpcRetryProvider } from "@/providers";
|
8
|
+
import { ChainId } from "@/types";
|
9
|
+
import { ethers } from "ethers";
|
10
|
+
|
11
|
+
export const encodeConnectorMethod = (params: {
|
12
|
+
connector: string;
|
13
|
+
method: string;
|
14
|
+
args: string[];
|
15
|
+
}) => {
|
16
|
+
const connectorInterface = getInterface(
|
17
|
+
connectors.versions[2][params.connector],
|
18
|
+
params.method
|
19
|
+
);
|
20
|
+
|
21
|
+
if (!connectorInterface)
|
22
|
+
throw new Error(`ConnectorInterface '${params.method}' not found`);
|
23
|
+
|
24
|
+
//@ts-ignore
|
25
|
+
return Web3EthAbi.encodeFunctionCall(connectorInterface, params.args);
|
26
|
+
};
|
27
|
+
|
28
|
+
const getInterface = (abiItems: any[], method: string) => {
|
29
|
+
const abiItem = abiItems.find((abiItem) => abiItem.name === method);
|
30
|
+
|
31
|
+
if (!abiItem) {
|
32
|
+
console.error(`${method} is an invalid method.`);
|
33
|
+
return;
|
34
|
+
}
|
35
|
+
|
36
|
+
return abiItem;
|
37
|
+
};
|
38
|
+
|
39
|
+
|
40
|
+
export const getDsaAccountAddress = async ({
|
41
|
+
dsaId,
|
42
|
+
chainId,
|
43
|
+
provider = null as ethers.providers.Provider | null,
|
44
|
+
}) => {
|
45
|
+
if (!dsaId) throw new Error("DSA id is required");
|
46
|
+
|
47
|
+
provider = provider || new JsonRpcRetryProvider(getRpcProviderUrl(chainId));
|
48
|
+
|
49
|
+
const instListContract = getContract<InstList>(
|
50
|
+
addresses[chainId].instList,
|
51
|
+
abi.instList,
|
52
|
+
provider,
|
53
|
+
);
|
54
|
+
|
55
|
+
return await instListContract.accountAddr(dsaId)
|
56
|
+
}
|
@@ -0,0 +1,68 @@
|
|
1
|
+
const locale = "en-US";
|
2
|
+
|
3
|
+
export function formatUsd(value: any, fractionDigits = 0) {
|
4
|
+
const formatter = new Intl.NumberFormat(locale, {
|
5
|
+
style: "currency",
|
6
|
+
currency: "USD",
|
7
|
+
minimumFractionDigits: fractionDigits,
|
8
|
+
maximumFractionDigits: fractionDigits
|
9
|
+
});
|
10
|
+
|
11
|
+
return formatter.format(value);
|
12
|
+
}
|
13
|
+
|
14
|
+
export function shortenHash(hash: string, length: number = 4) {
|
15
|
+
if (!hash) return;
|
16
|
+
|
17
|
+
if (hash.length < 12) return hash;
|
18
|
+
|
19
|
+
const beginningChars = hash.startsWith("0x") ? length + 2 : length;
|
20
|
+
|
21
|
+
const shortened = hash.substr(0, beginningChars) + "…" + hash.substr(-length);
|
22
|
+
|
23
|
+
return shortened;
|
24
|
+
}
|
25
|
+
|
26
|
+
export function short(buffer: Buffer): string {
|
27
|
+
return buffer.toString("hex").slice(0, 8) + "...";
|
28
|
+
}
|
29
|
+
|
30
|
+
export const chainIdToName = (chainId: string | number) => {
|
31
|
+
switch (String(chainId)) {
|
32
|
+
case "1":
|
33
|
+
return "Mainnet";
|
34
|
+
case "137":
|
35
|
+
return "Polygon";
|
36
|
+
case "43114":
|
37
|
+
return "Avalanche";
|
38
|
+
default:
|
39
|
+
return "Mainnet";
|
40
|
+
}
|
41
|
+
};
|
42
|
+
|
43
|
+
export const getChainIdNativeSymbol = (chainId: string | number) => {
|
44
|
+
switch (String(chainId)) {
|
45
|
+
case "137":
|
46
|
+
return "MATIC";
|
47
|
+
case "43114":
|
48
|
+
return "AVAX";
|
49
|
+
case "1":
|
50
|
+
return "ETH";
|
51
|
+
default:
|
52
|
+
return "ETH";
|
53
|
+
}
|
54
|
+
};
|
55
|
+
|
56
|
+
|
57
|
+
export const getExplorerUrl = (chainId: string | number, suffix = '/') => {
|
58
|
+
switch (String(chainId)) {
|
59
|
+
case "1":
|
60
|
+
return `https://etherscan.io${suffix}`;
|
61
|
+
case "137":
|
62
|
+
return `https://polygonscan.com${suffix}`;
|
63
|
+
case "43114":
|
64
|
+
return `https://snowtrace.io${suffix}`;
|
65
|
+
default:
|
66
|
+
return `https://etherscan.io${suffix}`;
|
67
|
+
}
|
68
|
+
}
|
@@ -0,0 +1,166 @@
|
|
1
|
+
import { addresses } from "@/constants";
|
2
|
+
import { peerPool } from "@/net";
|
3
|
+
import { GnosisSafe } from "@/typechain";
|
4
|
+
import { ChainId } from "@/types";
|
5
|
+
import { messagePrefix } from "@ethersproject/hash";
|
6
|
+
import { ethers, Wallet } from "ethers";
|
7
|
+
|
8
|
+
export interface Signature {
|
9
|
+
signer: string;
|
10
|
+
hash?: string;
|
11
|
+
data: string;
|
12
|
+
}
|
13
|
+
|
14
|
+
export const buildSignatureBytes = (signatures: Signature[]): string => {
|
15
|
+
signatures.sort((left, right) =>
|
16
|
+
left.signer.toLowerCase().localeCompare(right.signer.toLowerCase())
|
17
|
+
);
|
18
|
+
let signatureBytes = "0x";
|
19
|
+
for (const sig of signatures) {
|
20
|
+
signatureBytes += sig.data.slice(2);
|
21
|
+
}
|
22
|
+
return signatureBytes;
|
23
|
+
};
|
24
|
+
|
25
|
+
const gnosisSignatureTypes = {
|
26
|
+
SafeTx: [
|
27
|
+
{ type: "address", name: "to" },
|
28
|
+
{ type: "uint256", name: "value" },
|
29
|
+
{ type: "bytes", name: "data" },
|
30
|
+
{ type: "uint8", name: "operation" },
|
31
|
+
{ type: "uint256", name: "safeTxGas" },
|
32
|
+
{ type: "uint256", name: "baseGas" },
|
33
|
+
{ type: "uint256", name: "gasPrice" },
|
34
|
+
{ type: "address", name: "gasToken" },
|
35
|
+
{ type: "address", name: "refundReceiver" },
|
36
|
+
{ type: "uint256", name: "nonce" },
|
37
|
+
],
|
38
|
+
};
|
39
|
+
|
40
|
+
export const getGnosisSignatureAddress = ({ signature, message, chainId }: { signature: string, message: Record<string, any>, chainId: ChainId }) => {
|
41
|
+
|
42
|
+
const gnosisSafe = addresses[chainId].gnosisSafe;
|
43
|
+
|
44
|
+
const domain = {
|
45
|
+
verifyingContract: gnosisSafe,
|
46
|
+
chainId,
|
47
|
+
};
|
48
|
+
|
49
|
+
return ethers.utils.verifyTypedData(domain, gnosisSignatureTypes, message, signature)
|
50
|
+
|
51
|
+
}
|
52
|
+
|
53
|
+
export const generateGnosisSignatureMessage = ({
|
54
|
+
to,
|
55
|
+
data = null as any,
|
56
|
+
value = "0",
|
57
|
+
operation = "1",
|
58
|
+
baseGas = "0",
|
59
|
+
gasPrice = "0",
|
60
|
+
gasToken = "0x0000000000000000000000000000000000000000",
|
61
|
+
refundReceiver = "0x0000000000000000000000000000000000000000",
|
62
|
+
safeTxGas = "79668" as string | number,
|
63
|
+
nonce = "0",
|
64
|
+
chainId = 137 as ChainId,
|
65
|
+
}) => {
|
66
|
+
const gnosisSafe = addresses[chainId].gnosisSafe;
|
67
|
+
|
68
|
+
const message = {
|
69
|
+
baseGas,
|
70
|
+
data,
|
71
|
+
gasPrice,
|
72
|
+
gasToken,
|
73
|
+
nonce: Number(nonce),
|
74
|
+
operation,
|
75
|
+
refundReceiver,
|
76
|
+
safeAddress: gnosisSafe,
|
77
|
+
safeTxGas: String(safeTxGas),
|
78
|
+
to,
|
79
|
+
value,
|
80
|
+
};
|
81
|
+
|
82
|
+
return message;
|
83
|
+
}
|
84
|
+
|
85
|
+
export const signGnosisSafeTx = async ({
|
86
|
+
to,
|
87
|
+
data = null as any,
|
88
|
+
value = "0",
|
89
|
+
operation = "1",
|
90
|
+
baseGas = "0",
|
91
|
+
gasPrice = "0",
|
92
|
+
gasToken = "0x0000000000000000000000000000000000000000",
|
93
|
+
refundReceiver = "0x0000000000000000000000000000000000000000",
|
94
|
+
safeTxGas = "79668" as string | number,
|
95
|
+
nonce = "0",
|
96
|
+
chainId = 137 as ChainId,
|
97
|
+
}, { signer }: { signer: Wallet }
|
98
|
+
) => {
|
99
|
+
const gnosisSafe = addresses[chainId].gnosisSafe;
|
100
|
+
|
101
|
+
const domain = {
|
102
|
+
verifyingContract: gnosisSafe,
|
103
|
+
chainId,
|
104
|
+
};
|
105
|
+
|
106
|
+
const message = generateGnosisSignatureMessage({ to, data, value, operation, baseGas, gasPrice, gasToken, refundReceiver, safeTxGas, nonce, chainId });
|
107
|
+
|
108
|
+
return await signer._signTypedData(domain, gnosisSignatureTypes, message);
|
109
|
+
};
|
110
|
+
|
111
|
+
export const generateGnosisTransaction = async (
|
112
|
+
transactionData: any,
|
113
|
+
safeContract: GnosisSafe
|
114
|
+
) => {
|
115
|
+
console.log(transactionData);
|
116
|
+
|
117
|
+
let isExecuted = await safeContract.dataHashes(
|
118
|
+
await safeContract.getTransactionHash(
|
119
|
+
transactionData.to,
|
120
|
+
transactionData.value,
|
121
|
+
transactionData.data,
|
122
|
+
transactionData.operation,
|
123
|
+
transactionData.safeTxGas,
|
124
|
+
transactionData.baseGas,
|
125
|
+
transactionData.gasPrice,
|
126
|
+
transactionData.gasToken,
|
127
|
+
transactionData.refundReceiver,
|
128
|
+
transactionData.nonce
|
129
|
+
)
|
130
|
+
);
|
131
|
+
|
132
|
+
while (isExecuted == 1) {
|
133
|
+
transactionData.safeTxGas = ethers.BigNumber.from(
|
134
|
+
String(transactionData.safeTxGas)
|
135
|
+
)
|
136
|
+
.add(1)
|
137
|
+
.toString();
|
138
|
+
|
139
|
+
isExecuted = await safeContract.dataHashes(
|
140
|
+
await safeContract.getTransactionHash(
|
141
|
+
transactionData.to,
|
142
|
+
transactionData.value,
|
143
|
+
transactionData.data,
|
144
|
+
transactionData.operation,
|
145
|
+
transactionData.safeTxGas,
|
146
|
+
transactionData.baseGas,
|
147
|
+
transactionData.gasPrice,
|
148
|
+
transactionData.gasToken,
|
149
|
+
transactionData.refundReceiver,
|
150
|
+
transactionData.nonce
|
151
|
+
)
|
152
|
+
);
|
153
|
+
}
|
154
|
+
|
155
|
+
return transactionData;
|
156
|
+
};
|
157
|
+
|
158
|
+
export const getGnosisOwnerPeerIds = async ({ gnosisContract = null as unknown as GnosisSafe }) => {
|
159
|
+
const owners = await gnosisContract
|
160
|
+
.getOwners()
|
161
|
+
.then((owners) => owners.map((owner) => owner.toLowerCase()));
|
162
|
+
|
163
|
+
return peerPool.activePeers
|
164
|
+
.filter((peer) => owners.includes(peer.publicAddress.toLowerCase()))
|
165
|
+
.map((peer) => peer.id);
|
166
|
+
}
|