From d56d13a337e110581e275ce8a06adc65ab151a68 Mon Sep 17 00:00:00 2001 From: William Poulin Date: Tue, 2 Jan 2024 17:51:43 -0500 Subject: [PATCH] chore(apps): Migrated app tokens to ATI (#3169) * chore(app-tokens): Migrated app tokens to ATI * more * more * more * more * more * more * more * more * fix build --- .../aave-safety-module.module.ts | 4 - ...ve-safety-module.stk-aave.token-fetcher.ts | 52 - ...ve-safety-module.stk-abpt.token-fetcher.ts | 53 - src/apps/airswap/airswap.module.ts | 12 - src/apps/airswap/assets/logo.png | Bin 11271 -> 0 bytes .../airswap/contracts/abis/staking-v-2.json | 243 --- .../airswap/contracts/abis/staking-v-3.json | 523 ----- src/apps/airswap/contracts/index.ts | 4 - .../contracts/viem.contract-factory.ts | 20 - src/apps/airswap/contracts/viem/StakingV2.ts | 537 ----- src/apps/airswap/contracts/viem/StakingV3.ts | 537 ----- src/apps/airswap/contracts/viem/index.ts | 9 - .../airswap.s-ast-v2.token-fetcher.ts | 41 - .../airswap.s-ast-v3.token-fetcher.ts | 41 - .../arbitrum/camelot.x-grail.token-fetcher.ts | 37 - src/apps/camelot/camelot.module.ts | 2 - .../contracts/abis/camelot-x-grail.json | 608 ------ .../contracts/viem.contract-factory.ts | 4 - .../camelot/contracts/viem/CamelotXGrail.ts | 1387 ------------- src/apps/camelot/contracts/viem/index.ts | 2 - .../cask-protocol.wallet.token-fetcher.ts | 9 - src/apps/cask-protocol/assets/logo.png | Bin 8767 -> 0 bytes .../cask-protocol.wallet.token-fetcher.ts | 9 - .../cask-protocol.wallet.token-fetcher.ts | 9 - .../cask-protocol/cask-protocol.module.ts | 28 - .../cask-protocol.wallet.token-fetcher.ts | 9 - .../cask-protocol.wallet.token-fetcher.ts | 46 - .../contracts/abis/cask-vault-token.json | 1568 --------------- src/apps/cask-protocol/contracts/index.ts | 4 - .../contracts/viem.contract-factory.ts | 17 - .../contracts/viem/CaskVaultToken.ts | 1582 --------------- .../cask-protocol/contracts/viem/index.ts | 7 - .../cask-protocol.wallet.token-fetcher.ts | 9 - .../cask-protocol.wallet.token-fetcher.ts | 9 - .../cask-protocol.wallet.token-fetcher.ts | 9 - .../cask-protocol.wallet.token-fetcher.ts | 9 - ...onvex.stash-token-wrapped.token-fetcher.ts | 44 - src/apps/convex/ethereum/index.ts | 2 - .../gains-network.g-token.token-fetcher.ts | 10 - .../gains-network/gains-network.module.ts | 2 - .../gearbox/contracts/abis/phantom-token.json | 237 --- .../contracts/viem.contract-factory.ts | 4 - .../gearbox/contracts/viem/PhantomToken.ts | 251 --- src/apps/gearbox/contracts/viem/index.ts | 2 - .../ethereum/gearbox.phantom.token-fetcher.ts | 51 - src/apps/gearbox/gearbox.module.ts | 2 - .../gmx/arbitrum/gmx.es-gmx.token-fetcher.ts | 12 - .../gmx/avalanche/gmx.es-gmx.token-fetcher.ts | 12 - .../gmx/common/gmx.es-gmx.token-fetcher.ts | 35 - src/apps/gmx/gmx.module.ts | 4 - .../ethereum/goldfinch.fidu.token-fetcher.ts | 42 - src/apps/goldfinch/goldfinch.module.ts | 2 - .../gro/avalanche/gro.labs.token-fetcher.ts | 42 - .../gro/contracts/abis/gro-labs-vault.json | 767 -------- .../gro/contracts/viem.contract-factory.ts | 5 +- src/apps/gro/contracts/viem/GroLabsVault.ts | 1719 ----------------- src/apps/gro/contracts/viem/index.ts | 2 - src/apps/gro/gro.module.ts | 3 - .../hakuswap.x-haku.token-fetcher.ts | 42 - .../contracts/abis/hakuswap-x-haku.json | 320 --- .../contracts/viem.contract-factory.ts | 10 +- .../hakuswap/contracts/viem/HakuswapXHaku.ts | 758 -------- src/apps/hakuswap/contracts/viem/index.ts | 2 - src/apps/hakuswap/hakuswap.module.ts | 2 - src/apps/hedgefarm/assets/logo.png | Bin 530 -> 0 bytes .../hedgefarm.alpha-one.token-fetcher.ts | 55 - .../hedgefarm.alpha-two.token-fetcher.ts | 37 - .../hedgefarm/avalanche/hedgefarm.types.ts | 4 - .../hedgefarm/contracts/abis/alpha-one.json | 503 ----- .../hedgefarm/contracts/abis/alpha-two.json | 590 ------ src/apps/hedgefarm/contracts/index.ts | 4 - .../contracts/viem.contract-factory.ts | 20 - src/apps/hedgefarm/contracts/viem/AlphaOne.ts | 1060 ---------- src/apps/hedgefarm/contracts/viem/AlphaTwo.ts | 1298 ------------- src/apps/hedgefarm/contracts/viem/index.ts | 9 - src/apps/hedgefarm/hedgefarm.module.ts | 16 - .../ethereum/illuvium.s-ilv2.token-fetcher.ts | 36 - src/apps/illuvium/illuvium.module.ts | 2 - .../inverse.dca-vault.token-fetcher.ts | 46 - src/apps/inverse/inverse.module.ts | 2 - .../keeper.redeemable.token-fetcher.ts | 36 - src/apps/keeper/keeper.module.ts | 2 - src/apps/lido/assets/logo.png | Bin 4130 -> 0 bytes .../contracts/abis/lido-steth-eth-oracle.json | 227 --- src/apps/lido/contracts/abis/lido-steth.json | 731 ------- src/apps/lido/contracts/abis/lido-stksm.json | 579 ------ src/apps/lido/contracts/abis/lido-wsteth.json | 202 -- src/apps/lido/contracts/index.ts | 4 - .../lido/contracts/viem.contract-factory.ts | 26 - src/apps/lido/contracts/viem/LidoSteth.ts | 1296 ------------- .../lido/contracts/viem/LidoStethEthOracle.ts | 523 ----- src/apps/lido/contracts/viem/LidoStksm.ts | 1304 ------------- src/apps/lido/contracts/viem/LidoWsteth.ts | 491 ----- src/apps/lido/contracts/viem/index.ts | 13 - .../lido/ethereum/lido.steth.token-fetcher.ts | 36 - .../ethereum/lido.wsteth.token-fetcher.ts | 40 - src/apps/lido/lido.module.ts | 12 - .../metavault-trade/metavault-trade.module.ts | 2 - .../metavault-trade.es-mvx.token-fetcher.ts | 36 - .../mstable/contracts/abis/mstable-asset.json | 596 ------ .../abis/mstable-metavault-4626.json | 524 ----- .../contracts/viem.contract-factory.ts | 14 +- .../mstable/contracts/viem/MstableAsset.ts | 1451 -------------- .../contracts/viem/MstableMetavault4626.ts | 1225 ------------ src/apps/mstable/contracts/viem/index.ts | 4 - .../ethereum/mstable.imusd.token-fetcher.ts | 37 - .../mstable.meta-vault.token-fetcher.ts | 42 - src/apps/mstable/mstable.module.ts | 6 - .../polygon/mstable.imusd.token-fetcher.ts | 37 - .../arbitrum/mycelium.es-myc.token-fetcher.ts | 36 - src/apps/mycelium/mycelium.module.ts | 2 - .../contracts/abis/origin-story-woeth.json | 327 ---- .../contracts/viem.contract-factory.ts | 5 +- .../contracts/viem/OriginStoryWoeth.ts | 806 -------- src/apps/origin-story/contracts/viem/index.ts | 2 - .../origin-story.woeth.token-fetcher.ts | 41 - src/apps/origin-story/origin-story.module.ts | 7 +- src/apps/p-stake/assets/logo.png | Bin 3305 -> 0 bytes .../p-stake.stake.token-fetcher.ts | 42 - .../p-stake/contracts/abis/p-stake-pool.json | 475 ----- .../contracts/abis/p-stake-stk-token.json | 729 ------- src/apps/p-stake/contracts/index.ts | 4 - .../contracts/viem.contract-factory.ts | 20 - src/apps/p-stake/contracts/viem/PStakePool.ts | 1146 ----------- .../p-stake/contracts/viem/PStakeStkToken.ts | 743 ------- src/apps/p-stake/contracts/viem/index.ts | 9 - src/apps/p-stake/p-stake.module.ts | 11 - .../avalanche/penguin.vault.token-fetcher.ts | 56 - .../penguin/contracts/abis/penguin-vault.json | 1139 +++++++++-- src/apps/penguin/penguin.module.ts | 2 - .../ethereum/pie-dao.e-dough.token-fetcher.ts | 36 - src/apps/pie-dao/pie-dao.module.ts | 2 - .../contracts/abis/pika-protocol-es-pika.json | 278 --- .../contracts/viem.contract-factory.ts | 10 +- .../contracts/viem/PikaProtocolEsPika.ts | 630 ------ .../pika-protocol/contracts/viem/index.ts | 2 - .../pika-protocol.es-pika.token-fetcher.ts | 37 - .../pika-protocol/pika-protocol.module.ts | 2 - .../arbitrum/pirex.apxglp.token-fetcher.ts | 48 - .../arbitrum/pirex.apxgmx.token-fetcher.ts | 48 - src/apps/pirex/contracts/abis/apx-btrfly.json | 988 ---------- src/apps/pirex/contracts/abis/apx-glp.json | 592 ------ src/apps/pirex/contracts/abis/apx-gmx.json | 533 ----- .../pirex/contracts/viem.contract-factory.ts | 11 +- src/apps/pirex/contracts/viem/ApxBtrfly.ts | 1002 ---------- src/apps/pirex/contracts/viem/ApxGlp.ts | 1449 -------------- src/apps/pirex/contracts/viem/ApxGmx.ts | 1288 ------------ src/apps/pirex/contracts/viem/index.ts | 6 - .../ethereum/pirex.apxbtrfly.token-fetcher.ts | 48 - src/apps/pirex/pirex.module.ts | 6 - .../pods-yield.strategy.token-fetcher.ts | 53 - src/apps/pods-yield/pods-yield.module.ts | 8 +- src/apps/sideshift/assets/logo.png | Bin 381256 -> 0 bytes .../sideshift/contracts/abis/svxai-vault.json | 975 ---------- src/apps/sideshift/contracts/index.ts | 4 - .../contracts/viem.contract-factory.ts | 17 - .../sideshift/contracts/viem/SvxaiVault.ts | 989 ---------- src/apps/sideshift/contracts/viem/index.ts | 7 - .../ethereum/sideshift.svxai.token-fetcher.ts | 43 - src/apps/sideshift/sideshift.module.ts | 11 - .../abis/stake-dao-passive-vault.json | 305 --- .../contracts/viem.contract-factory.ts | 4 - .../contracts/viem/StakeDaoPassiveVault.ts | 567 ------ src/apps/stake-dao/contracts/viem/index.ts | 2 - .../stake-dao.passive-vault.token-fetcher.ts | 45 - src/apps/stake-dao/stake-dao.module.ts | 2 - src/apps/swell/assets/logo.png | Bin 16958 -> 0 bytes src/apps/swell/contracts/abis/sweth.json | 1062 ---------- src/apps/swell/contracts/index.ts | 4 - .../swell/contracts/viem.contract-factory.ts | 17 - src/apps/swell/contracts/viem/Sweth.ts | 1076 ----------- src/apps/swell/contracts/viem/index.ts | 7 - .../ethereum/swell.sweth.token-fetcher.ts | 50 - src/apps/swell/swell.module.ts | 11 - .../contracts/abis/tokemak-acc-toke.json | 420 ---- .../contracts/abis/tokemak-reactor.json | 313 --- .../contracts/viem.contract-factory.ts | 14 +- .../tokemak/contracts/viem/TokemakAccToke.ts | 896 --------- .../tokemak/contracts/viem/TokemakReactor.ts | 687 ------- src/apps/tokemak/contracts/viem/index.ts | 4 - .../tokemak.acc-toke.token-fetcher.ts | 37 - .../ethereum/tokemak.reactor.token-fetcher.ts | 66 - src/apps/tokemak/tokemak.module.ts | 4 - ...nstoppable.glp-compounder.token-fetcher.ts | 43 - src/apps/unstoppable/assets/logo.png | Bin 389371 -> 0 bytes .../contracts/abis/unstoppable-glp-vault.json | 1040 ---------- src/apps/unstoppable/contracts/index.ts | 4 - .../contracts/viem.contract-factory.ts | 17 - .../contracts/viem/UnstoppableGlpVault.ts | 1054 ---------- src/apps/unstoppable/contracts/viem/index.ts | 7 - src/apps/unstoppable/unstoppable.module.ts | 11 - 191 files changed, 991 insertions(+), 46505 deletions(-) delete mode 100644 src/apps/aave-safety-module/ethereum/aave-safety-module.stk-aave.token-fetcher.ts delete mode 100644 src/apps/aave-safety-module/ethereum/aave-safety-module.stk-abpt.token-fetcher.ts delete mode 100644 src/apps/airswap/airswap.module.ts delete mode 100644 src/apps/airswap/assets/logo.png delete mode 100644 src/apps/airswap/contracts/abis/staking-v-2.json delete mode 100644 src/apps/airswap/contracts/abis/staking-v-3.json delete mode 100644 src/apps/airswap/contracts/index.ts delete mode 100644 src/apps/airswap/contracts/viem.contract-factory.ts delete mode 100644 src/apps/airswap/contracts/viem/StakingV2.ts delete mode 100644 src/apps/airswap/contracts/viem/StakingV3.ts delete mode 100644 src/apps/airswap/contracts/viem/index.ts delete mode 100644 src/apps/airswap/ethereum/airswap.s-ast-v2.token-fetcher.ts delete mode 100644 src/apps/airswap/ethereum/airswap.s-ast-v3.token-fetcher.ts delete mode 100644 src/apps/camelot/arbitrum/camelot.x-grail.token-fetcher.ts delete mode 100644 src/apps/camelot/contracts/abis/camelot-x-grail.json delete mode 100644 src/apps/camelot/contracts/viem/CamelotXGrail.ts delete mode 100644 src/apps/cask-protocol/arbitrum/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/assets/logo.png delete mode 100644 src/apps/cask-protocol/avalanche/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/binance-smart-chain/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/cask-protocol.module.ts delete mode 100644 src/apps/cask-protocol/celo/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/common/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/contracts/abis/cask-vault-token.json delete mode 100644 src/apps/cask-protocol/contracts/index.ts delete mode 100644 src/apps/cask-protocol/contracts/viem.contract-factory.ts delete mode 100644 src/apps/cask-protocol/contracts/viem/CaskVaultToken.ts delete mode 100644 src/apps/cask-protocol/contracts/viem/index.ts delete mode 100644 src/apps/cask-protocol/fantom/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/gnosis/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/optimism/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/cask-protocol/polygon/cask-protocol.wallet.token-fetcher.ts delete mode 100644 src/apps/convex/ethereum/convex.stash-token-wrapped.token-fetcher.ts delete mode 100644 src/apps/gains-network/arbitrum/gains-network.g-token.token-fetcher.ts delete mode 100644 src/apps/gearbox/contracts/abis/phantom-token.json delete mode 100644 src/apps/gearbox/contracts/viem/PhantomToken.ts delete mode 100644 src/apps/gearbox/ethereum/gearbox.phantom.token-fetcher.ts delete mode 100644 src/apps/gmx/arbitrum/gmx.es-gmx.token-fetcher.ts delete mode 100644 src/apps/gmx/avalanche/gmx.es-gmx.token-fetcher.ts delete mode 100644 src/apps/gmx/common/gmx.es-gmx.token-fetcher.ts delete mode 100644 src/apps/goldfinch/ethereum/goldfinch.fidu.token-fetcher.ts delete mode 100644 src/apps/gro/avalanche/gro.labs.token-fetcher.ts delete mode 100644 src/apps/gro/contracts/abis/gro-labs-vault.json delete mode 100644 src/apps/gro/contracts/viem/GroLabsVault.ts delete mode 100644 src/apps/hakuswap/avalanche/hakuswap.x-haku.token-fetcher.ts delete mode 100644 src/apps/hakuswap/contracts/abis/hakuswap-x-haku.json delete mode 100644 src/apps/hakuswap/contracts/viem/HakuswapXHaku.ts delete mode 100644 src/apps/hedgefarm/assets/logo.png delete mode 100644 src/apps/hedgefarm/avalanche/hedgefarm.alpha-one.token-fetcher.ts delete mode 100644 src/apps/hedgefarm/avalanche/hedgefarm.alpha-two.token-fetcher.ts delete mode 100644 src/apps/hedgefarm/avalanche/hedgefarm.types.ts delete mode 100644 src/apps/hedgefarm/contracts/abis/alpha-one.json delete mode 100644 src/apps/hedgefarm/contracts/abis/alpha-two.json delete mode 100644 src/apps/hedgefarm/contracts/index.ts delete mode 100644 src/apps/hedgefarm/contracts/viem.contract-factory.ts delete mode 100644 src/apps/hedgefarm/contracts/viem/AlphaOne.ts delete mode 100644 src/apps/hedgefarm/contracts/viem/AlphaTwo.ts delete mode 100644 src/apps/hedgefarm/contracts/viem/index.ts delete mode 100644 src/apps/hedgefarm/hedgefarm.module.ts delete mode 100644 src/apps/illuvium/ethereum/illuvium.s-ilv2.token-fetcher.ts delete mode 100644 src/apps/inverse/ethereum/inverse.dca-vault.token-fetcher.ts delete mode 100644 src/apps/keeper/ethereum/keeper.redeemable.token-fetcher.ts delete mode 100644 src/apps/lido/assets/logo.png delete mode 100644 src/apps/lido/contracts/abis/lido-steth-eth-oracle.json delete mode 100644 src/apps/lido/contracts/abis/lido-steth.json delete mode 100644 src/apps/lido/contracts/abis/lido-stksm.json delete mode 100644 src/apps/lido/contracts/abis/lido-wsteth.json delete mode 100644 src/apps/lido/contracts/index.ts delete mode 100644 src/apps/lido/contracts/viem.contract-factory.ts delete mode 100644 src/apps/lido/contracts/viem/LidoSteth.ts delete mode 100644 src/apps/lido/contracts/viem/LidoStethEthOracle.ts delete mode 100644 src/apps/lido/contracts/viem/LidoStksm.ts delete mode 100644 src/apps/lido/contracts/viem/LidoWsteth.ts delete mode 100644 src/apps/lido/contracts/viem/index.ts delete mode 100644 src/apps/lido/ethereum/lido.steth.token-fetcher.ts delete mode 100644 src/apps/lido/ethereum/lido.wsteth.token-fetcher.ts delete mode 100644 src/apps/lido/lido.module.ts delete mode 100644 src/apps/metavault-trade/polygon/metavault-trade.es-mvx.token-fetcher.ts delete mode 100644 src/apps/mstable/contracts/abis/mstable-asset.json delete mode 100644 src/apps/mstable/contracts/abis/mstable-metavault-4626.json delete mode 100644 src/apps/mstable/contracts/viem/MstableAsset.ts delete mode 100644 src/apps/mstable/contracts/viem/MstableMetavault4626.ts delete mode 100644 src/apps/mstable/ethereum/mstable.imusd.token-fetcher.ts delete mode 100644 src/apps/mstable/ethereum/mstable.meta-vault.token-fetcher.ts delete mode 100644 src/apps/mstable/polygon/mstable.imusd.token-fetcher.ts delete mode 100644 src/apps/mycelium/arbitrum/mycelium.es-myc.token-fetcher.ts delete mode 100644 src/apps/origin-story/contracts/abis/origin-story-woeth.json delete mode 100644 src/apps/origin-story/contracts/viem/OriginStoryWoeth.ts delete mode 100644 src/apps/origin-story/ethereum/origin-story.woeth.token-fetcher.ts delete mode 100644 src/apps/p-stake/assets/logo.png delete mode 100644 src/apps/p-stake/binance-smart-chain/p-stake.stake.token-fetcher.ts delete mode 100644 src/apps/p-stake/contracts/abis/p-stake-pool.json delete mode 100644 src/apps/p-stake/contracts/abis/p-stake-stk-token.json delete mode 100644 src/apps/p-stake/contracts/index.ts delete mode 100644 src/apps/p-stake/contracts/viem.contract-factory.ts delete mode 100644 src/apps/p-stake/contracts/viem/PStakePool.ts delete mode 100644 src/apps/p-stake/contracts/viem/PStakeStkToken.ts delete mode 100644 src/apps/p-stake/contracts/viem/index.ts delete mode 100644 src/apps/p-stake/p-stake.module.ts delete mode 100644 src/apps/penguin/avalanche/penguin.vault.token-fetcher.ts delete mode 100644 src/apps/pie-dao/ethereum/pie-dao.e-dough.token-fetcher.ts delete mode 100644 src/apps/pika-protocol/contracts/abis/pika-protocol-es-pika.json delete mode 100644 src/apps/pika-protocol/contracts/viem/PikaProtocolEsPika.ts delete mode 100644 src/apps/pika-protocol/optimism/pika-protocol.es-pika.token-fetcher.ts delete mode 100644 src/apps/pirex/arbitrum/pirex.apxglp.token-fetcher.ts delete mode 100644 src/apps/pirex/arbitrum/pirex.apxgmx.token-fetcher.ts delete mode 100644 src/apps/pirex/contracts/abis/apx-btrfly.json delete mode 100644 src/apps/pirex/contracts/abis/apx-glp.json delete mode 100644 src/apps/pirex/contracts/abis/apx-gmx.json delete mode 100644 src/apps/pirex/contracts/viem/ApxBtrfly.ts delete mode 100644 src/apps/pirex/contracts/viem/ApxGlp.ts delete mode 100644 src/apps/pirex/contracts/viem/ApxGmx.ts delete mode 100644 src/apps/pirex/ethereum/pirex.apxbtrfly.token-fetcher.ts delete mode 100644 src/apps/pods-yield/ethereum/pods-yield.strategy.token-fetcher.ts delete mode 100644 src/apps/sideshift/assets/logo.png delete mode 100644 src/apps/sideshift/contracts/abis/svxai-vault.json delete mode 100644 src/apps/sideshift/contracts/index.ts delete mode 100644 src/apps/sideshift/contracts/viem.contract-factory.ts delete mode 100644 src/apps/sideshift/contracts/viem/SvxaiVault.ts delete mode 100644 src/apps/sideshift/contracts/viem/index.ts delete mode 100644 src/apps/sideshift/ethereum/sideshift.svxai.token-fetcher.ts delete mode 100644 src/apps/sideshift/sideshift.module.ts delete mode 100644 src/apps/stake-dao/contracts/abis/stake-dao-passive-vault.json delete mode 100644 src/apps/stake-dao/contracts/viem/StakeDaoPassiveVault.ts delete mode 100644 src/apps/stake-dao/ethereum/stake-dao.passive-vault.token-fetcher.ts delete mode 100644 src/apps/swell/assets/logo.png delete mode 100644 src/apps/swell/contracts/abis/sweth.json delete mode 100644 src/apps/swell/contracts/index.ts delete mode 100644 src/apps/swell/contracts/viem.contract-factory.ts delete mode 100644 src/apps/swell/contracts/viem/Sweth.ts delete mode 100644 src/apps/swell/contracts/viem/index.ts delete mode 100644 src/apps/swell/ethereum/swell.sweth.token-fetcher.ts delete mode 100644 src/apps/swell/swell.module.ts delete mode 100644 src/apps/tokemak/contracts/abis/tokemak-acc-toke.json delete mode 100644 src/apps/tokemak/contracts/abis/tokemak-reactor.json delete mode 100644 src/apps/tokemak/contracts/viem/TokemakAccToke.ts delete mode 100644 src/apps/tokemak/contracts/viem/TokemakReactor.ts delete mode 100644 src/apps/tokemak/ethereum/tokemak.acc-toke.token-fetcher.ts delete mode 100644 src/apps/tokemak/ethereum/tokemak.reactor.token-fetcher.ts delete mode 100644 src/apps/unstoppable/arbitrum/unstoppable.glp-compounder.token-fetcher.ts delete mode 100644 src/apps/unstoppable/assets/logo.png delete mode 100644 src/apps/unstoppable/contracts/abis/unstoppable-glp-vault.json delete mode 100644 src/apps/unstoppable/contracts/index.ts delete mode 100644 src/apps/unstoppable/contracts/viem.contract-factory.ts delete mode 100644 src/apps/unstoppable/contracts/viem/UnstoppableGlpVault.ts delete mode 100644 src/apps/unstoppable/contracts/viem/index.ts delete mode 100644 src/apps/unstoppable/unstoppable.module.ts diff --git a/src/apps/aave-safety-module/aave-safety-module.module.ts b/src/apps/aave-safety-module/aave-safety-module.module.ts index faebec118..6290dfa27 100644 --- a/src/apps/aave-safety-module/aave-safety-module.module.ts +++ b/src/apps/aave-safety-module/aave-safety-module.module.ts @@ -5,17 +5,13 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { AaveSafetyModuleViemContractFactory } from './contracts'; import { EthereumAaveSafetyModuleAbptTokenFetcher } from './ethereum/aave-safety-module.abpt.token-fetcher'; import { EthereumAaveSafetyModuleStkAaveClaimableContractPositionFetcher } from './ethereum/aave-safety-module.stk-aave-claimable.contract-position-fetcher'; -import { EthereumAaveSafetyModuleStkAaveTokenFetcher } from './ethereum/aave-safety-module.stk-aave.token-fetcher'; import { EthereumAaveSafetyModuleStkAbptClaimableContractPositionFetcher } from './ethereum/aave-safety-module.stk-abpt-claimable.contract-position-fetcher'; -import { EthereumAaveSafetyModuleStkAbptTokenFetcher } from './ethereum/aave-safety-module.stk-abpt.token-fetcher'; @Module({ providers: [ AaveSafetyModuleViemContractFactory, EthereumAaveSafetyModuleAbptTokenFetcher, - EthereumAaveSafetyModuleStkAaveTokenFetcher, EthereumAaveSafetyModuleStkAaveClaimableContractPositionFetcher, - EthereumAaveSafetyModuleStkAbptTokenFetcher, EthereumAaveSafetyModuleStkAbptClaimableContractPositionFetcher, ], }) diff --git a/src/apps/aave-safety-module/ethereum/aave-safety-module.stk-aave.token-fetcher.ts b/src/apps/aave-safety-module/ethereum/aave-safety-module.stk-aave.token-fetcher.ts deleted file mode 100644 index 2ac4ee7ac..000000000 --- a/src/apps/aave-safety-module/ethereum/aave-safety-module.stk-aave.token-fetcher.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { ZERO_ADDRESS } from '~app-toolkit/constants/address'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetDataPropsParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { AaveSafetyModuleViemContractFactory } from '../contracts'; -import { AaveStkAave } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumAaveSafetyModuleStkAaveTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'stkAAVE'; - - stkApyHelperAddress = '0xa82247b44750ae23076d6746a9b5b8dc0ecbb646'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(AaveSafetyModuleViemContractFactory) - protected readonly contractFactory: AaveSafetyModuleViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.aaveStkAave({ address, network: this.network }); - } - - async getAddresses() { - return ['0x4da27a545c0c5b758a6ba100e3a049001de870f5']; - } - - async getUnderlyingTokenDefinitions(_params: GetUnderlyingTokensParams) { - return [{ address: '0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } - - async getApy({ multicall }: GetDataPropsParams) { - const stkApyHelperContract = this.contractFactory.aaveStkApyHelper({ - address: this.stkApyHelperAddress, - network: this.network, - }); - - const stkAaveData = await multicall.wrap(stkApyHelperContract).read.getStkAaveData([ZERO_ADDRESS]); - const apy = (+stkAaveData[5] / 1e4) * 100; - return apy; - } -} diff --git a/src/apps/aave-safety-module/ethereum/aave-safety-module.stk-abpt.token-fetcher.ts b/src/apps/aave-safety-module/ethereum/aave-safety-module.stk-abpt.token-fetcher.ts deleted file mode 100644 index 425669d58..000000000 --- a/src/apps/aave-safety-module/ethereum/aave-safety-module.stk-abpt.token-fetcher.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { ZERO_ADDRESS } from '~app-toolkit/constants/address'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetDataPropsParams } from '~position/template/app-token.template.types'; - -import { AaveSafetyModuleViemContractFactory } from '../contracts'; -import { AaveStkAbpt } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumAaveSafetyModuleStkAbptTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'stkABPT'; - - stkApyHelperAddress = '0xa82247b44750ae23076d6746a9b5b8dc0ecbb646'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(AaveSafetyModuleViemContractFactory) - protected readonly contractFactory: AaveSafetyModuleViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.aaveStkAbpt({ address, network: this.network }); - } - - async getAddresses() { - return ['0xa1116930326d21fb917d5a27f1e9943a9595fb47']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x41a08648c3766f9f9d85598ff102a08f4ef84f84', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } - - async getApy({ multicall }: GetDataPropsParams) { - const stkApyHelperContract = this.contractFactory.aaveStkApyHelper({ - network: this.network, - address: this.stkApyHelperAddress, - }); - - const stkAaveData = await multicall.wrap(stkApyHelperContract).read.getStkBptData([ZERO_ADDRESS]); - - const apy = (+stkAaveData[5] / 1e4) * 100; - return apy; - } -} diff --git a/src/apps/airswap/airswap.module.ts b/src/apps/airswap/airswap.module.ts deleted file mode 100644 index a1778b07f..000000000 --- a/src/apps/airswap/airswap.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { AirswapViemContractFactory } from './contracts'; -import { EthereumAirswapSAstV2TokenFetcher } from './ethereum/airswap.s-ast-v2.token-fetcher'; -import { EthereumAirswapSAstV3TokenFetcher } from './ethereum/airswap.s-ast-v3.token-fetcher'; - -@Module({ - providers: [AirswapViemContractFactory, EthereumAirswapSAstV2TokenFetcher, EthereumAirswapSAstV3TokenFetcher], -}) -export class AirswapAppModule extends AbstractApp() {} diff --git a/src/apps/airswap/assets/logo.png b/src/apps/airswap/assets/logo.png deleted file mode 100644 index 9bab5b5268e495a09de0bbd3ddb5312bfa456df2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11271 zcmZ{KWmKEZ6K{fRgS)#HFIJ=wv_Nq!t_^NQ3&GvpiWGNiu>t{#yE_DHp=g2Pa?|&J zzuXV^EsfUBek)0CnECm4Iq)`ID(e_?B&hzqqKcDq1r6)k4vznaa@E+EQ)0$)9TOJOe|Iv)M zl)8>P+|-e^eiUvc%R`@2pE7)IieHSuS7@-F7u_0Lc>S3PS;pG2#X3F>K=kOO~!X=7NaMrS0TUx=5EoA_K7N zahHG&3N$aG^tDGtK5-KtvlWUfiWJ#Pi}I3XVyGb5&=t`rbQFxboSrHx*r5DGHlt*C zx(*tL4Z_|OFq6!Cl%X3{xBmV4hkGm1BnZQsf)_gzSp_K1ID4#FHfV>>Zbe>CxP(!S zx`Fx%;Ag49y>$tQ!DRNx;Va!1imd+yECaC8_0}RO=h9dP4Izz3o-HDCLgypTDCe{{ zO;V>E>8Pedh75gQxuCi5Gh9-vq?q@sp&3j%19XwGw zUe*H)-1Q1;-JSOpn>TU3qjJd>brN*Sl~dN!k_|Ugn7woXy1Z)KsQu{cKvRZku*idM zg0w(4>z6h*O2~Zq8bjd{kDz7}{iS@UB!;I%jl9Cu#Ufx5$b+0?sZle35afgFY57xH zq-c@u@OU)H9cmd=FuTJ+Fas-tal*7z6v! zVTR$)@4`&bQ&v#=%ZW9P>68YY2Kg0xkC!~=It=fI2@ct@WPnVr+FRj`9$V~KHW7SR zzmyUFHZ(xL-Sr~sr!stl1=#`V35pS5)Zjc${B^1i{}alYHJoyYVvR@AJuFdX;jA0@ zIacnggc@jwJz8@gv6XR0L7N!4;kk5LHyI>wTzCL{53w*eU+J*Y@=&KG?O$|A-8ki* zzADkdnxNNl7y*ua%l0wyh@p~Ltu!|zjVwIb*R}hh@wr)n0B>HB`H!L!1v2pa90{uF zQT(R2C|RWuxil%g#LWz|w`}!XB=d&3G>LgPhW{wgWR;pG%;{*cwKsyi@mi%w=D&$a zkae7uOvSMU0M902N^E^GMYc1rRoEmnkNgt{=KO zeuX(PtvzA30@+uK)%E2B&cxx8b*#T%b9(IL-VDR2VOiy&IlVM9FnbucVgvTO&wkg% zQ*qUI#6!OR*|R$uM5vUBp7#ViHhU8Pv4!GKdP6hgrBcX7bRT32c&3hl#HoQ;NMAF1 zSRNj+zz@qIJXp4hfNs>2zcVDcwxKlf`?EpfL2uOum53*jk)ANtsA3?rViK8MaLmF8 z#yfxbFW7+zc~kH8KFkz)I#{&AQHDNCSxXX^WFSS^z%udC_cfNBaJ6jp!svQ#l9ywM z)R*v8W>{bmxYmWIDar4WVCS*N%)a z?iy;W=RZO(9MA)BxZ>r$rp|^OL{^15MLrmUcfaJ(B*-M8i{m#)9kDcY$nOsvG}%M_ z)EV@=bMjybP=z(OyK!O};bgKHXns-YAy!~L^$qZ>l`>mVdRKl3d=ga5)O?k4SDH(po!)lL1P`SWtTFEHWonDNst_#BC5r|tP;T9Wv|81IeZr2%3Xv9=aIk-a=*ovHagF+iBq7luQp>=2V)$^G ze#2%3mO^bnt1QKOm8{qsh9G?C8;|H(6P{CtAYAdmA4nE&x0Nc>Y4+wb8^X3;+|U*; z7xuD@{a8KL>zM-HKE~d$v>syWw_|Z&iM4Slrvn2CV<4+X0rabkh(&?`T?s^q>PylJ z0%MMPKY85t6ANT?Um3|x} z)*zQtVe?seYFV1SsG?2xp*{c`;XJF7P;&VP^c7!YV*gsQ4R45Ef#7#=n3!V|CjNNe zomZj@zQl%(=5{dzFqqIG7Fw<>^v#XDs3BmQ=bz0e!dInhX7&0&nKqf&*mmI!SUMF0 zuOLCrl!l`@-@}}=2XFXYvS;;rc|@!cFRd#Z;%1>d*JTWEnG1e%$CvR#hE(jAw%barF7bi?Q<%q6Dy5P6 z%e|O;is^TyP~5EtX#V(rs`U7i=uSVsK@TB+UyN3&a@RX!pKu0Vgp%^lU&c_t-DJN= z%w$ALlFvudvqtyhSQ3wD&+<$Zg1XYXFdkpS^~*Nn^w?hgPir@*V(gj~eE<3GMI_R~ zZ*zCxhV1|NK4-vqZ)Nwl{E}q)mxYF_nADds-UWmv`%G7{YE#a+Y$DsXmQL8?+KSQIAY1y{KxFh9}w(75rCJm``S zI3lb@P2~-uc^wO};~|lqwVQv7A0xy0`-l*#av(4dYYYFF0JlQ~81=A&qz;0bPpY*9 z&S7t|Aa`R(;0^^B!NN&27EuX^@b=X!r2siZ`wymn?V(d~BgD1^rN;_*?|S8E>{531 zQY%XJDuV>tt0ZTQ!F44G^0yW}?^8@)qdRpP%DJ&>lxCZVW;uQP(Ls3UVU|7n#S=Rl z?N8{Eq0aU=HGicWuc20P~{KzfdPA z*HtHuJh5U+Za}gvdiMmOHV5edm*~R1SMBnbVsMl)h2Ln~N(L#Lr4BW<@>!7fJrwY$ zqX+SwhZ~#7FNGBX=ccW6&Uue@Y&NZN{Mgb_vCgU~TcmzJdwc4IUA>Bf_6+sXY&D#M zxAcpz3Mt+1MAZ_eln5~OMX;T^b>-Z6id2O1GG|@$Hu#D_rIDb9=9=NOo$*=3A}F=+ zRFU(-B$F77^I36{HY-aHyQH%qfN3|Q)zWyGd~njT$@mB_wrv!-yz1g(2>-mgYQzNx z^VCo0d|;}WM7s=PyPryjRE0`lIJ4JI@|PTD!Ly8(LpTl? zE_cp+%I3f^=HYGfa_1JMLn=ahk>4=G5my??cR%`5&iX}NVxo7kRtPA zB-N-O!t5D>f?%58Z~Vw{t;01uCgIzB^RXx#%85P?kpWMq}QIOEy+q7a}_6vN*|NQDBZrO-1s&D)^%!<6RtZQG7uX$2bmz^h=5mU4pLOdpRd9u!KG@U~A@ zSnga!w{#)@DCF;|`TDCHmokiEQTAsVEagy~RA~d+c%r=mqqhe)?b&~L*)W@>FjTTr zTtt9ISG`U4dyn(lJ-bP~ha#B*G^JFGxV&p*f5uUaU*QJ6$KBg7oePI<{iIl*MVxc1 z@6EzLC=GjfJ%04I75IM5?y!oj%AF{;(A5KF>J+TGSXl<8+8u)c+)SsZ>PQ-#?EC3<&e@Qutt?OVt;Zor{>VZ5){Y*W**OM$hrcBHZAwK~ zpV6Y0dH|tF>c+0c^^Yv)wV9_p`bZ`81uDs5ew1eSKyULrm5VYeNq=Bz) z-bXei6#1DDNHAHM(f4q9zwPlTAs;PlhdUfyhhSl;;J6Ov3bbUhDh%qj&sQDwe!XL) zcG(W|VZrCm*(qmNHa^lXDha0ZC2`gA7>epV)Xfm|1SeVd(LQWNcA+H@ht0)8YOsI7 zj#1ZGot1hPI?oJo(g)#RjNQJV#Y!9yl=USJ4*yP^7*es5Mja#L%(H)&|8mtgDEX;d zUQ$r7k2;}OpsHXk=l;k(#Jk2nRaaj?g$4Vb!aDADTTK5eDn&LOS!g4jc6jdF#M?N8 z$B#f5r?7CZ>8qiDM+5T%EAc}Sz6&A(+Du60R~PVRP(-v0OR~$f%6&)nKuY66z^%m1 z?0vH6ViLQLQK`Y{Wkj#VSgt$=qgwX}-WW9~<1^drJ$?w*;hgvqikHN1C9QEaZmMYz zKsJ{~$uu%&FTb{tCs}x4>)mNjzHXn9(bk0x{>Kjmj|27s>10^Kah%k+Tt7)tZMf#< z`w9Z>vd3zZ+1myPOe62gIoF!Ix-d_Cd)@7?CJ_uu#g3Mp{sg9B<0OHa_>xcU zQ;&RJF|LB?B>yaU_*sdjLI-T@RA5^og5-XKajv&5VEcPRft0kIdO-ltlG<4kXAYSz zP?LPf%IthR3Q7FF(wal&G~G1LugOqxjOBl$NS^FjGcd! z!Sxi>*JzwEGW5CWAoXHZiLYZy&<8${!f+Gw6ZX{>);#Sdaa@Fui8spUPoyJj5^wV_9|MSuD(}HkM_XACOAX}|M%eG95t9TILXbDs$6@FnO+L8bvEi7Onj=)Jo zrlSM3477spRXfa&b(iYjzDN*c1scEp(*u>_Zhq|XXM0heX#aOrZ>#?r&dEADSl-hJ zZj7#eVgGF?US;a5yG75umKSc;M7ZG1iJVK{@<{+>CEQ`qRYf zccaSId8S3+Kop9Bo+6t}0j!gIBT+Sb)M29652QBUEin3(`I#l}uBF0SUPTAl4gw9(LdO(OFX@bBSU9i8|9shU=7Bc7!=nWUisnL} zeQ5%k*1U(>151~GM;!|#+NCM>lBz*zO&5@X$h&-yv>VDY@m1SU%nAH5 zh)*_;CRJR?+Dhzs#Me83`^U$jkb)wW(5(i_D-1);0$cMFl$)w1_*ng1Q&Y4t`c}qd zZ%Wnf8*;8cyF#nG!Ifhm%q;niPnsQn@VC%WWMy=s4nJv5$KIeqt7Dr z%rPR-J?Eo?t#DZavsOzemdcDT*Eal}`1mO2##jzEp0x60*S;O`)xV1ezckMH&`CKa z@{`PPb}BpBeXHzU3Nja~TJzKU_S(LVd{|&79p-pJ(hrY2F@4yqp-9m)k4wlbV?%VY zD{L#g32tvYGG4f!7ovLh8~yAoXM12)(Ecj-;?3+X{oD)(%@v>Q9&Cj9;zzfMO-TNQ zIu(r%a=--=Wt(awx6C2TA&2qWy2b4QV~oz6`oeIg(g|vr_DwL2zj9VlcYE zgp6v1inhBRrg9b4-8`R>ZD~P+INw;GlgCHyANHCwr&+Xr=CExf`60Yx0^oYv&Fg)w zUACY{`O64{Kc5@i^t{E5cbI6hA|twTU+`ki4=PO}TR`$a1)sCCD!|9wYGv$D-o-DKE>4N2F}%!~@> zWKBa*H@&@g(==ETfAYP%t> ziw}>r&K-2G+E`-|str$NCuobnZ4R^-%u8|-?G8XSxmT}lbUGrj$))s34|_;uH(rXkFnaF=sMy`m3t<5vCEDIaL4mJ08Ky||>y<5fZQS#_Zm|Xvi2jz^5ckuw97^!K<%sqz6qZI<=G6YzL zd;f$6?_?(Z34B7Sb52Bu`WQDE;0HPqt55-F2VrBDC492Rs^(40VvV0#tx&lFkUt6y zIWWMxt&HAP1G~z@81JOv=5UKL1#QK#m91f2GCg#?mr$OGFb&!0(;s?Wf~+MAkFs^L zY)t5i1E36pnWaL4{=Aja6=RA8IKk-OzzMVwXIt$^jj@b|MJo^Ru;qCsU^5IUnt9E}e5S1}4 z{qcU$;%vsx!b7RlDqUy@&l{g*#n+O@ICKNU0l8FEg1^N)9j}&yP+<{WyqI_Axr-w_ z!QDnNwT`lQ;aoRme$~i|+X!^(5dIifK+at|CgIO~_N5Vb`eV*iP7pWZ+BKf(*KdO& zl?wf}I6Rn1A1-z8o#|Sg8*wddt*)0m-|y8G(BXZ&xkNWCMBPxCPMk2^kM)gi#mN*B z&Un|7==dtl?Kh)MCx6qe1smJ_5O!(wSpqGi->^v)T+}k&}ne*O@h`1)- zv?+kn4{RDvCl3{M3MPMBlQ;jibY1z>XbOR$BFkT%xOmG)y|&H%??(H?w;iJ+Gl^_W z3d~4TCK~zO*wW!y=kSa}PB+}Kyi>gTE7h`i&)ItDxp&dCqPYDO&*4txoa*q~$k*k- zR(JaYAa#5+hwF7rUSw&|gp3r11B#l9Z>UMxp)XBA&k})Qn}O5*n>2=p153KshW=ZF zIO!oYCX>5mGs%63`yB0Q7|3g=*?-i;Ah3*|;YfNo=~U;#D*r2nY_xUr3DYM^2%jNBNd_`~_vy*D2~uM1?}o6ql^-xetEOk(*&rlPI%)3O!LQcb+p z&3-iz*HX+RMyn=m+2p^Gn_9j$$MD=;qBBr*$Ui_(^GL6SAFOQ0`D*&F1P9iD+W%%X zF_TcFiE3Ov(g+COcxqd?%AYV@TJN@}4u}tbt*`-QqVAmF>CX*od6)aLz2dIUWNX*8h#jo&{?E%Mcm_;vhG<`oZlbgwL zRWge`O`bd$*+bFF6spwO&WnK4F0Ac@cM-7v+hBogyzpzPbLub%k-^X{RNw7a2KVKO z$m}DEho~kBTpn0qz2btvI!cO@AJY^1HD5yBA$oZSk4OGXX31!&P-?m(-Cda7xM7Al>8^8-zaasZ94IoBID4HaUs#WK zu@BM0*3RhJr7ru z38R`%3Bn&x)zMKLCrOUS_u@aw!0`(P4!lavSSn(3bMi%yYDHBIwL!J%SIS;ez<0IU zNv}Z^P#7Z17{jRn(%X%2Ear26 z{Wr9rg1@4h`0@Lu3KXx)O{2EUGj(i}*_U7D@FLZU7_6u#P|O7M2?_QYC-ltBtLv5$ zIQvWm3)2D`J0KE5D6DPcylD-)s2=+LVq)gFm1Y)41{V}3C7nGx+vEI_GIzBr?W$}a}a_=qTE*4v5 z?<_b?8RzQyom(eLm~)6><(_TPdCXpqk!reZS~5(}o6KEYWs%t}XHW)Rr*}80-V7^O zOh>YAgpWe_Rp0vCRPq5CNt7;v7>KCehY4Z7E_`o{R^<8p9<5AjgGTx8mW5`28Z20( z;lYvbxmBjXi+IYH)30d}!`%2If1Y!orL?@Gr*t}P5w^vZ?Wbeic5 zSF=w+`-^qLRMQGbAf#VnpO~XD-Blf583{g**_1H6wZ^FAFw^Fats``OCm|mn{DP9r z_}%e-(*{|F;?wS`y2;k1&N=ZY^w3hn(W^_UV6*!K5#=J?JpWgDNnp}quyA**p{G{m zlvOtd>R9ty0b;2cbY~H#%15?2T!I~C>vG;SLxfOX{SN9z6keGhZ|QaQ4NQ?fqdkor zaBj1D7%xndPLNE$s7w{|^c2OZPJKKoLyFvaK^8vpqh|T$`ySZ%;9O{VEmG^GyZ;`T(BUYyZ_Z zQexUF%5piJ=M@|b;jL8Fd~=I&W5ZS1sS`=cx!W^93^RsxA$8eIC)HJy@;T+o_!*@I zasck}xU1Rbut`)9QYd9ivwTKYB>L?clk{FyD9*L@-c={LO_~W0_qDlQ5gk#pc2I-D z4JV>p$UnOTep#CR?P>RvEr}E==yv)%Qu}!RMdK`+siAxUu!j9Q1kzwj`H63SP8i|9 ztB^TRWfV?s{cv%Khz8RwprB@#K7V4w>uSO@U-)?)m2~kZ?0-p#oe_rZ8 z#G?H$g3sJ)%3Tc;b0m{S;=(rji?YA`lB_OAS~Y#bdBAH0>AatLwW1<)xa-b*9$b&w z*7AIGDNU8IkGR3m07!sRr~_gWG-16+-;kvMG%c$eE2QtIua;Wz-T|c0xT;c0)J1-% z?V1Gi;xeFTU{KSM%+J6qQkRG~28eDgc0PYZt<7xrVnP&7gR1aj3bF?{zyJ8SB6m_r zgI-H0)*SVS1wP_A`|fqWt}uAzu?;j(TNRmvT@)7xBYo-tL{IJ zOptPMA8@QIHCj_VVN%GW2&mQJrCEG z)F~k1nu>R34EKZamJNPk_x z;YI6Y{6Iw5j|&-eM8OCGN1$~y)WpJs9NvhPzb1=;d_EQ2#V$lf;OFr4q1CICNHS^( zN?S^XL3&AlZ;YJ8GG}Q089fLsu}|dTIWQLlyJtlAi7brQejg62d2ZD9r_$590Szpl zLzU;)eOYk7$LZIYo?Ga43j4Er5Hf0bF*XM1O&d>B-zUmPT>D9EEf98*h&9Vyy9Z&o zP(Y4r@eG56p=|YI2^!xSyGZ|Afegca3)Hp$a)UT;D##IrtSJ8}V-}eMMb5K{GV4}! z$m5B>VBvs|9ZOl_OmIfTs>YQ6_oqSxsLJA~BR>J-Nl=Pnb~;pb#%Uvv*w*P*VO!C)v``0)X8>feKj!Wzmyd@58#&PS@F z3nSM`KB%Rh(;Rt_3`a#@(#zEOE&;`_=rI4Au@XZDEUJ^IQB^%?RF022JIQeSKn z_9%9kwSjY6t#?u^X{o%@5!Vnd!1cg;bb#Yn8B5_tJwcpJhUk>O;=+{Sp2eL>1TDC1 zg{!d*s)(sR(IkJB0+Pjn{oZ+uHbA)uzIq`YCRN`;!27rmqcH?T5nDy1NDtr{d1gyr zc2G*!TQ?vTa8J~@un|?=vWRrb(7Qny1Hmjq*H=McDj=A5qMh8n1+D z0rWdxi0%V2#0c_?;y_wce$e&E@)n>t^mwRUys&ipL; - -export class StakingV2__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: stakingV2Abi, publicClient: client }); - } -} diff --git a/src/apps/airswap/contracts/viem/StakingV3.ts b/src/apps/airswap/contracts/viem/StakingV3.ts deleted file mode 100644 index c3f23ff3d..000000000 --- a/src/apps/airswap/contracts/viem/StakingV3.ts +++ /dev/null @@ -1,537 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const stakingV3Abi = [ - { - inputs: [ - { - internalType: 'contract ERC20', - name: '_token', - type: 'address', - }, - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'uint256', - name: '_duration', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_minDelay', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [], - name: 'CancelDurationChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'uint256', - name: 'newDuration', - type: 'uint256', - }, - ], - name: 'CompleteDurationChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'delegate', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'ProposeDelegate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'uint256', - name: 'unlockTimestamp', - type: 'uint256', - }, - ], - name: 'ScheduleDurationChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'delegate', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'SetDelegate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'tokens', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'accountDelegates', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'available', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: 'total', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'cancelDurationChange', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'delegateAccounts', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'duration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'getStakes', - outputs: [ - { - components: [ - { - internalType: 'uint256', - name: 'duration', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - internalType: 'struct IStaking.Stake', - name: 'accountStake', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'delegate', - type: 'address', - }, - ], - name: 'proposeDelegate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'proposedDelegates', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'delay', - type: 'uint256', - }, - ], - name: 'scheduleDurationChange', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'setDelegate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_duration', - type: 'uint256', - }, - ], - name: 'setDuration', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - ], - name: 'setMetaData', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'stake', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'stakeFor', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'delegate', - type: 'address', - }, - ], - name: 'unsetDelegate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'unstake', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type StakingV3 = typeof stakingV3Abi; -export type StakingV3Contract = GetContractReturnType; - -export class StakingV3__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: stakingV3Abi, publicClient: client }); - } -} diff --git a/src/apps/airswap/contracts/viem/index.ts b/src/apps/airswap/contracts/viem/index.ts deleted file mode 100644 index 39d022daf..000000000 --- a/src/apps/airswap/contracts/viem/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { StakingV2 } from './StakingV2'; -export type { StakingV3 } from './StakingV3'; - -export { StakingV2__factory } from './StakingV2'; -export { StakingV3__factory } from './StakingV3'; diff --git a/src/apps/airswap/ethereum/airswap.s-ast-v2.token-fetcher.ts b/src/apps/airswap/ethereum/airswap.s-ast-v2.token-fetcher.ts deleted file mode 100644 index aa2a8253d..000000000 --- a/src/apps/airswap/ethereum/airswap.s-ast-v2.token-fetcher.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { AirswapViemContractFactory } from '../contracts'; -import { StakingV2 } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumAirswapSAstV2TokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Staking'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(AirswapViemContractFactory) private readonly contractFactory: AirswapViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.stakingV2({ network: this.network, address }); - } - - async getAddresses(): Promise { - return ['0x579120871266ccd8de6c85ef59e2ff6743e7cd15']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.token(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } - - async getLabel(): Promise { - return 'sAST v2'; - } -} diff --git a/src/apps/airswap/ethereum/airswap.s-ast-v3.token-fetcher.ts b/src/apps/airswap/ethereum/airswap.s-ast-v3.token-fetcher.ts deleted file mode 100644 index 86d8d71b5..000000000 --- a/src/apps/airswap/ethereum/airswap.s-ast-v3.token-fetcher.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { AirswapViemContractFactory } from '../contracts'; -import { StakingV2 } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumAirswapSAstV3TokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Staking'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(AirswapViemContractFactory) private readonly contractFactory: AirswapViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.stakingV2({ network: this.network, address }); - } - - async getAddresses(): Promise { - return ['0x6d88b09805b90dad911e5c5a512eedd984d6860b']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.token(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } - - async getLabel(): Promise { - return 'sAST v3'; - } -} diff --git a/src/apps/camelot/arbitrum/camelot.x-grail.token-fetcher.ts b/src/apps/camelot/arbitrum/camelot.x-grail.token-fetcher.ts deleted file mode 100644 index df670e56c..000000000 --- a/src/apps/camelot/arbitrum/camelot.x-grail.token-fetcher.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { CamelotViemContractFactory } from '../contracts'; -import { CamelotXGrail } from '../contracts/viem'; - -@PositionTemplate() -export class ArbitrumXGrailTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'xGRAIL'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(CamelotViemContractFactory) private readonly contractFactory: CamelotViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.camelotXGrail({ address, network: this.network }); - } - - async getAddresses(): Promise { - return ['0x3caae25ee616f2c8e13c74da0813402eae3f496b']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.grailToken(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/camelot/camelot.module.ts b/src/apps/camelot/camelot.module.ts index d00a34262..cd4371e88 100644 --- a/src/apps/camelot/camelot.module.ts +++ b/src/apps/camelot/camelot.module.ts @@ -7,7 +7,6 @@ import { ArbitrumCamelotDividendContractPositionFetcher } from './arbitrum/camel import { ArbitrumCamelotFarmContractPositionFetcher } from './arbitrum/camelot.farm.contract-position-fetcher'; import { ArbitrumCamelotNitroContractPositionFetcher } from './arbitrum/camelot.nitro.contract-position-fetcher'; import { ArbitrumCamelotPoolV2TokenFetcher } from './arbitrum/camelot.pool-v2.token-fetcher'; -import { ArbitrumXGrailTokenFetcher } from './arbitrum/camelot.x-grail.token-fetcher'; import { CamelotViemContractFactory } from './contracts'; @Module({ @@ -16,7 +15,6 @@ import { CamelotViemContractFactory } from './contracts'; UniswapV2ViemContractFactory, // Arbitrum ArbitrumCamelotPoolV2TokenFetcher, - ArbitrumXGrailTokenFetcher, ArbitrumCamelotDividendContractPositionFetcher, ArbitrumCamelotFarmContractPositionFetcher, ArbitrumCamelotNitroContractPositionFetcher, diff --git a/src/apps/camelot/contracts/abis/camelot-x-grail.json b/src/apps/camelot/contracts/abis/camelot-x-grail.json deleted file mode 100644 index 46994f0b9..000000000 --- a/src/apps/camelot/contracts/abis/camelot-x-grail.json +++ /dev/null @@ -1,608 +0,0 @@ -[ - { - "inputs": [{ "internalType": "contract IGrailTokenV2", "name": "grailToken_", "type": "address" }], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "usageAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Allocate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "usageAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "ApproveUsage", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "xGrailAmount", "type": "uint256" } - ], - "name": "CancelRedeem", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Convert", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "usageAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" } - ], - "name": "Deallocate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "xGrailAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "grailAmount", "type": "uint256" } - ], - "name": "FinalizeRedeem", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "xGrailAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "grailAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "duration", "type": "uint256" } - ], - "name": "Redeem", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": false, "internalType": "bool", "name": "add", "type": "bool" } - ], - "name": "SetTransferWhitelist", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "usageAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" } - ], - "name": "UpdateDeallocationFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "previousDividendsAddress", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "newDividendsAddress", "type": "address" } - ], - "name": "UpdateDividendsAddress", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "userAddress", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "redeemIndex", "type": "uint256" }, - { "indexed": false, "internalType": "address", "name": "previousDividendsAddress", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "newDividendsAddress", "type": "address" } - ], - "name": "UpdateRedeemDividendsAddress", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "uint256", "name": "minRedeemRatio", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "maxRedeemRatio", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "minRedeemDuration", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "maxRedeemDuration", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "redeemDividendsAdjustment", "type": "uint256" } - ], - "name": "UpdateRedeemSettings", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_DEALLOCATION_FEE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_FIXED_RATIO", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "usageAddress", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "bytes", "name": "usageData", "type": "bytes" } - ], - "name": "allocate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "userAddress", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "allocateFromUsage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "contract IXGrailTokenUsage", "name": "usage", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approveUsage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "redeemIndex", "type": "uint256" }], - "name": "cancelRedeem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "convert", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "address", "name": "to", "type": "address" } - ], - "name": "convertTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "usageAddress", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "bytes", "name": "usageData", "type": "bytes" } - ], - "name": "deallocate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "userAddress", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "deallocateFromUsage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "dividendsAddress", - "outputs": [{ "internalType": "contract IXGrailTokenUsage", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "redeemIndex", "type": "uint256" }], - "name": "finalizeRedeem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ], - "name": "getGrailByVestingDuration", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "userAddress", "type": "address" }, - { "internalType": "address", "name": "usageAddress", "type": "address" } - ], - "name": "getUsageAllocation", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "userAddress", "type": "address" }, - { "internalType": "address", "name": "usageAddress", "type": "address" } - ], - "name": "getUsageApproval", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "userAddress", "type": "address" }, - { "internalType": "uint256", "name": "redeemIndex", "type": "uint256" } - ], - "name": "getUserRedeem", - "outputs": [ - { "internalType": "uint256", "name": "grailAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "xGrailAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "endTime", "type": "uint256" }, - { "internalType": "address", "name": "dividendsContract", "type": "address" }, - { "internalType": "uint256", "name": "dividendsAllocation", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "userAddress", "type": "address" }], - "name": "getUserRedeemsLength", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "userAddress", "type": "address" }], - "name": "getXGrailBalance", - "outputs": [ - { "internalType": "uint256", "name": "allocatedAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "redeemingAmount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "grailToken", - "outputs": [{ "internalType": "contract IGrailTokenV2", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "isTransferWhitelisted", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxRedeemDuration", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxRedeemRatio", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minRedeemDuration", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minRedeemRatio", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "xGrailAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "duration", "type": "uint256" } - ], - "name": "redeem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "redeemDividendsAdjustment", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "index", "type": "uint256" }], - "name": "transferWhitelist", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "transferWhitelistLength", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "usageAddress", "type": "address" }, - { "internalType": "uint256", "name": "fee", "type": "uint256" } - ], - "name": "updateDeallocationFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "contract IXGrailTokenUsage", "name": "dividendsAddress_", "type": "address" }], - "name": "updateDividendsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "redeemIndex", "type": "uint256" }], - "name": "updateRedeemDividendsAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "minRedeemRatio_", "type": "uint256" }, - { "internalType": "uint256", "name": "maxRedeemRatio_", "type": "uint256" }, - { "internalType": "uint256", "name": "minRedeemDuration_", "type": "uint256" }, - { "internalType": "uint256", "name": "maxRedeemDuration_", "type": "uint256" }, - { "internalType": "uint256", "name": "redeemDividendsAdjustment_", "type": "uint256" } - ], - "name": "updateRedeemSettings", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "bool", "name": "add", "type": "bool" } - ], - "name": "updateTransferWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "name": "usageAllocations", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "name": "usageApprovals", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "usagesDeallocationFee", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "name": "userRedeems", - "outputs": [ - { "internalType": "uint256", "name": "grailAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "xGrailAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "endTime", "type": "uint256" }, - { "internalType": "contract IXGrailTokenUsage", "name": "dividendsAddress", "type": "address" }, - { "internalType": "uint256", "name": "dividendsAllocation", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "xGrailBalances", - "outputs": [ - { "internalType": "uint256", "name": "allocatedAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "redeemingAmount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/camelot/contracts/viem.contract-factory.ts b/src/apps/camelot/contracts/viem.contract-factory.ts index e4bd3ffd9..5d6172f0d 100644 --- a/src/apps/camelot/contracts/viem.contract-factory.ts +++ b/src/apps/camelot/contracts/viem.contract-factory.ts @@ -11,7 +11,6 @@ import { CamelotNitroFactory__factory, CamelotNitroPool__factory, CamelotPair__factory, - CamelotXGrail__factory, } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -41,7 +40,4 @@ export class CamelotViemContractFactory { camelotPair({ address, network }: ContractOpts) { return CamelotPair__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } - camelotXGrail({ address, network }: ContractOpts) { - return CamelotXGrail__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } } diff --git a/src/apps/camelot/contracts/viem/CamelotXGrail.ts b/src/apps/camelot/contracts/viem/CamelotXGrail.ts deleted file mode 100644 index 2b3a9de27..000000000 --- a/src/apps/camelot/contracts/viem/CamelotXGrail.ts +++ /dev/null @@ -1,1387 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const camelotXGrailAbi = [ - { - inputs: [ - { - internalType: 'contract IGrailTokenV2', - name: 'grailToken_', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Allocate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'ApproveUsage', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'xGrailAmount', - type: 'uint256', - }, - ], - name: 'CancelRedeem', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Convert', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'Deallocate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'xGrailAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'grailAmount', - type: 'uint256', - }, - ], - name: 'FinalizeRedeem', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'xGrailAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'grailAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'duration', - type: 'uint256', - }, - ], - name: 'Redeem', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'add', - type: 'bool', - }, - ], - name: 'SetTransferWhitelist', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'UpdateDeallocationFee', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'previousDividendsAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newDividendsAddress', - type: 'address', - }, - ], - name: 'UpdateDividendsAddress', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'redeemIndex', - type: 'uint256', - }, - { - indexed: false, - internalType: 'address', - name: 'previousDividendsAddress', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newDividendsAddress', - type: 'address', - }, - ], - name: 'UpdateRedeemDividendsAddress', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'minRedeemRatio', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'maxRedeemRatio', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'minRedeemDuration', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'maxRedeemDuration', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'redeemDividendsAdjustment', - type: 'uint256', - }, - ], - name: 'UpdateRedeemSettings', - type: 'event', - }, - { - inputs: [], - name: 'MAX_DEALLOCATION_FEE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_FIXED_RATIO', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'usageData', - type: 'bytes', - }, - ], - name: 'allocate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'allocateFromUsage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IXGrailTokenUsage', - name: 'usage', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approveUsage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'redeemIndex', - type: 'uint256', - }, - ], - name: 'cancelRedeem', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'convert', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'convertTo', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'usageData', - type: 'bytes', - }, - ], - name: 'deallocate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'deallocateFromUsage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'dividendsAddress', - outputs: [ - { - internalType: 'contract IXGrailTokenUsage', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'redeemIndex', - type: 'uint256', - }, - ], - name: 'finalizeRedeem', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'duration', - type: 'uint256', - }, - ], - name: 'getGrailByVestingDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - ], - name: 'getUsageAllocation', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - ], - name: 'getUsageApproval', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'redeemIndex', - type: 'uint256', - }, - ], - name: 'getUserRedeem', - outputs: [ - { - internalType: 'uint256', - name: 'grailAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'xGrailAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'endTime', - type: 'uint256', - }, - { - internalType: 'address', - name: 'dividendsContract', - type: 'address', - }, - { - internalType: 'uint256', - name: 'dividendsAllocation', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - ], - name: 'getUserRedeemsLength', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'userAddress', - type: 'address', - }, - ], - name: 'getXGrailBalance', - outputs: [ - { - internalType: 'uint256', - name: 'allocatedAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'redeemingAmount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'grailToken', - outputs: [ - { - internalType: 'contract IGrailTokenV2', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'isTransferWhitelisted', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'maxRedeemDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'maxRedeemRatio', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minRedeemDuration', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minRedeemRatio', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'xGrailAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'duration', - type: 'uint256', - }, - ], - name: 'redeem', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'redeemDividendsAdjustment', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'transferWhitelist', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'transferWhitelistLength', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'usageAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'updateDeallocationFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IXGrailTokenUsage', - name: 'dividendsAddress_', - type: 'address', - }, - ], - name: 'updateDividendsAddress', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'redeemIndex', - type: 'uint256', - }, - ], - name: 'updateRedeemDividendsAddress', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'minRedeemRatio_', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'maxRedeemRatio_', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minRedeemDuration_', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'maxRedeemDuration_', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'redeemDividendsAdjustment_', - type: 'uint256', - }, - ], - name: 'updateRedeemSettings', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'bool', - name: 'add', - type: 'bool', - }, - ], - name: 'updateTransferWhitelist', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'usageAllocations', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'usageApprovals', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'usagesDeallocationFee', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'userRedeems', - outputs: [ - { - internalType: 'uint256', - name: 'grailAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'xGrailAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'endTime', - type: 'uint256', - }, - { - internalType: 'contract IXGrailTokenUsage', - name: 'dividendsAddress', - type: 'address', - }, - { - internalType: 'uint256', - name: 'dividendsAllocation', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'xGrailBalances', - outputs: [ - { - internalType: 'uint256', - name: 'allocatedAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'redeemingAmount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type CamelotXGrail = typeof camelotXGrailAbi; -export type CamelotXGrailContract = GetContractReturnType; - -export class CamelotXGrail__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: camelotXGrailAbi, publicClient: client }); - } -} diff --git a/src/apps/camelot/contracts/viem/index.ts b/src/apps/camelot/contracts/viem/index.ts index e14f17f75..db18462ab 100644 --- a/src/apps/camelot/contracts/viem/index.ts +++ b/src/apps/camelot/contracts/viem/index.ts @@ -9,7 +9,6 @@ export type { CamelotNftPool } from './CamelotNftPool'; export type { CamelotNitroFactory } from './CamelotNitroFactory'; export type { CamelotNitroPool } from './CamelotNitroPool'; export type { CamelotPair } from './CamelotPair'; -export type { CamelotXGrail } from './CamelotXGrail'; export { CamelotDividend__factory } from './CamelotDividend'; export { CamelotFactory__factory } from './CamelotFactory'; @@ -18,4 +17,3 @@ export { CamelotNftPool__factory } from './CamelotNftPool'; export { CamelotNitroFactory__factory } from './CamelotNitroFactory'; export { CamelotNitroPool__factory } from './CamelotNitroPool'; export { CamelotPair__factory } from './CamelotPair'; -export { CamelotXGrail__factory } from './CamelotXGrail'; diff --git a/src/apps/cask-protocol/arbitrum/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/arbitrum/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index 1c8922f06..000000000 --- a/src/apps/cask-protocol/arbitrum/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class ArbitrumCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0x20151ff7fdd720b85063d02081aa5b7876adff7b'; -} diff --git a/src/apps/cask-protocol/assets/logo.png b/src/apps/cask-protocol/assets/logo.png deleted file mode 100644 index 286e4c62e4980f95710c7a6fd71bbd4db58aaddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8767 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 Dy@21$ diff --git a/src/apps/cask-protocol/avalanche/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/avalanche/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index e08f9aadd..000000000 --- a/src/apps/cask-protocol/avalanche/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class AvalancheCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0x3b2b4b547daeebf3a703288cb43650f0f287b9ff'; -} diff --git a/src/apps/cask-protocol/binance-smart-chain/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/binance-smart-chain/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index f312ab147..000000000 --- a/src/apps/cask-protocol/binance-smart-chain/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class BinanceSmartChainCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0x3b2b4b547daeebf3a703288cb43650f0f287b9ff'; -} diff --git a/src/apps/cask-protocol/cask-protocol.module.ts b/src/apps/cask-protocol/cask-protocol.module.ts deleted file mode 100644 index 26f5f831e..000000000 --- a/src/apps/cask-protocol/cask-protocol.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { ArbitrumCaskProtocolWalletTokenFetcher } from './arbitrum/cask-protocol.wallet.token-fetcher'; -import { AvalancheCaskProtocolWalletTokenFetcher } from './avalanche/cask-protocol.wallet.token-fetcher'; -import { BinanceSmartChainCaskProtocolWalletTokenFetcher } from './binance-smart-chain/cask-protocol.wallet.token-fetcher'; -import { CeloCaskProtocolWalletTokenFetcher } from './celo/cask-protocol.wallet.token-fetcher'; -import { CaskProtocolViemContractFactory } from './contracts'; -import { FantomCaskProtocolWalletTokenFetcher } from './fantom/cask-protocol.wallet.token-fetcher'; -import { GnosisCaskProtocolWalletTokenFetcher } from './gnosis/cask-protocol.wallet.token-fetcher'; -import { OptimismCaskProtocolWalletTokenFetcher } from './optimism/cask-protocol.wallet.token-fetcher'; -import { PolygonCaskProtocolWalletTokenFetcher } from './polygon/cask-protocol.wallet.token-fetcher'; - -@Module({ - providers: [ - CaskProtocolViemContractFactory, - ArbitrumCaskProtocolWalletTokenFetcher, - AvalancheCaskProtocolWalletTokenFetcher, - BinanceSmartChainCaskProtocolWalletTokenFetcher, - CeloCaskProtocolWalletTokenFetcher, - FantomCaskProtocolWalletTokenFetcher, - GnosisCaskProtocolWalletTokenFetcher, - OptimismCaskProtocolWalletTokenFetcher, - PolygonCaskProtocolWalletTokenFetcher, - ], -}) -export class CaskProtocolAppModule extends AbstractApp() {} diff --git a/src/apps/cask-protocol/celo/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/celo/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index 7abc37b18..000000000 --- a/src/apps/cask-protocol/celo/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class CeloCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0xbccdbb0806acc914f6746de592f924b374190710'; -} diff --git a/src/apps/cask-protocol/common/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/common/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index 4ce06770c..000000000 --- a/src/apps/cask-protocol/common/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetDisplayPropsParams, - GetPricePerShareParams, - GetUnderlyingTokensParams, -} from '~position/template/app-token.template.types'; - -import { CaskProtocolViemContractFactory } from '../contracts'; -import { CaskVaultToken } from '../contracts/viem'; - -export abstract class CaskProtocolWalletTokenFetcher extends AppTokenTemplatePositionFetcher { - abstract caskVaultContractAddress: string; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(CaskProtocolViemContractFactory) protected readonly contractFactory: CaskProtocolViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.caskVaultToken({ address, network: this.network }); - } - - async getAddresses() { - return [this.caskVaultContractAddress]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.getBaseAsset(), network: this.network }]; - } - - async getPricePerShare({ appToken, contract }: GetPricePerShareParams) { - const pricePerShareRaw = await contract.read.pricePerShare(); - const pricePerShare = Number(pricePerShareRaw) / 10 ** appToken.tokens[0].decimals; - return [pricePerShare]; - } - - async getLabel({ appToken }: GetDisplayPropsParams) { - return getLabelFromToken(appToken.tokens[0]); - } -} diff --git a/src/apps/cask-protocol/contracts/abis/cask-vault-token.json b/src/apps/cask-protocol/contracts/abis/cask-vault-token.json deleted file mode 100644 index a8b2266e8..000000000 --- a/src/apps/cask-protocol/contracts/abis/cask-vault-token.json +++ /dev/null @@ -1,1568 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - } - ], - "name": "AddProtocol", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "AllowedAsset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "participant", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assetAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "baseAssetAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "AssetDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "participant", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assetAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "baseAssetAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "AssetWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "asset", - "type": "address" - } - ], - "name": "DisallowedAsset", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "baseAssetAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "protocolFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "protocolFeeShares", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "network", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "networkFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "networkFeeShares", - "type": "uint256" - } - ], - "name": "Payment", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "protocol", - "type": "address" - } - ], - "name": "RemoveProtocol", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "feeDistributor", - "type": "address" - } - ], - "name": "SetFeeDistributor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "participant", - "type": "address" - }, - { - "indexed": false, - "internalType": "enum ICaskVault.FundingSource", - "name": "fundingSource", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "address", - "name": "fundingAsset", - "type": "address" - } - ], - "name": "SetFundingSource", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "maxPriceFeedAge", - "type": "uint256" - } - ], - "name": "SetMaxPriceFeedAge", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "minDeposit", - "type": "uint256" - } - ], - "name": "SetMinDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "feeDistributor", - "type": "address" - } - ], - "name": "SetTrustedForwarder", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "baseAssetAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "TransferValue", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_protocol", - "type": "address" - } - ], - "name": "addProtocol", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "address", - "name": "_priceFeed", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_depositLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_slippageBps", - "type": "uint256" - } - ], - "name": "allowAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseAsset", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_fromAsset", - "type": "address" - }, - { - "internalType": "address", - "name": "_toAsset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_fromAmount", - "type": "uint256" - } - ], - "name": "convertPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "currentValueOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_assetAmount", - "type": "uint256" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_assetAmount", - "type": "uint256" - } - ], - "name": "depositTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "disallowAsset", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeDistributor", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "fundingSource", - "outputs": [ - { - "components": [ - { - "internalType": "enum ICaskVault.FundingSource", - "name": "fundingSource", - "type": "uint8" - }, - { - "internalType": "address", - "name": "fundingAsset", - "type": "address" - } - ], - "internalType": "struct ICaskVault.FundingProfile", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAllAssets", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "getAsset", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "priceFeed", - "type": "address" - }, - { - "internalType": "uint256", - "name": "slippageBps", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositLimit", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "assetDecimals", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "priceFeedDecimals", - "type": "uint8" - }, - { - "internalType": "bool", - "name": "allowed", - "type": "bool" - } - ], - "internalType": "struct ICaskVault.Asset", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getBaseAsset", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_baseAsset", - "type": "address" - }, - { - "internalType": "address", - "name": "_baseAssetPriceFeed", - "type": "address" - }, - { - "internalType": "address", - "name": "_feeDistributor", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "forwarder", - "type": "address" - } - ], - "name": "isTrustedForwarder", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxPriceFeedAge", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pricePerShare", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "protocolCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_protocolFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_network", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_networkFee", - "type": "uint256" - } - ], - "name": "protocolPayment", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "protocolPayment", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_protocolFee", - "type": "uint256" - } - ], - "name": "protocolPayment", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "protocols", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_protocol", - "type": "address" - } - ], - "name": "removeProtocol", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "reserved1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_feeDistributor", - "type": "address" - } - ], - "name": "setFeeDistributor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum ICaskVault.FundingSource", - "name": "_fundingSource", - "type": "uint8" - }, - { - "internalType": "address", - "name": "_fundingAsset", - "type": "address" - } - ], - "name": "setFundingSource", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_maxPriceFeedAge", - "type": "uint256" - } - ], - "name": "setMaxPriceFeedAge", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_minDeposit", - "type": "uint256" - } - ], - "name": "setMinDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_forwarder", - "type": "address" - } - ], - "name": "setTrustedForwarder", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "sharesForValue", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "supportsAsset", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - } - ], - "name": "totalAssetBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalValue", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "transferValue", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_value", - "type": "uint256" - } - ], - "name": "transferValueFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "trustedForwarder", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "versionRecipient", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_shares", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_recipient", - "type": "address" - }, - { - "internalType": "address", - "name": "_asset", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_shares", - "type": "uint256" - } - ], - "name": "withdrawTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "initialLogic", - "type": "address" - }, - { - "internalType": "address", - "name": "initialAdmin", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - } -] diff --git a/src/apps/cask-protocol/contracts/index.ts b/src/apps/cask-protocol/contracts/index.ts deleted file mode 100644 index 5dcfebdf6..000000000 --- a/src/apps/cask-protocol/contracts/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * from './viem.contract-factory'; diff --git a/src/apps/cask-protocol/contracts/viem.contract-factory.ts b/src/apps/cask-protocol/contracts/viem.contract-factory.ts deleted file mode 100644 index 48fe10543..000000000 --- a/src/apps/cask-protocol/contracts/viem.contract-factory.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { Network } from '~types/network.interface'; - -import { CaskVaultToken__factory } from './viem'; - -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class CaskProtocolViemContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - - caskVaultToken({ address, network }: ContractOpts) { - return CaskVaultToken__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } -} diff --git a/src/apps/cask-protocol/contracts/viem/CaskVaultToken.ts b/src/apps/cask-protocol/contracts/viem/CaskVaultToken.ts deleted file mode 100644 index 28e39bbe1..000000000 --- a/src/apps/cask-protocol/contracts/viem/CaskVaultToken.ts +++ /dev/null @@ -1,1582 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const caskVaultTokenAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'previousAdmin', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newAdmin', - type: 'address', - }, - ], - name: 'AdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'implementation', - type: 'address', - }, - ], - name: 'Upgraded', - type: 'event', - }, - { - stateMutability: 'payable', - type: 'fallback', - }, - { - inputs: [], - name: 'admin', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newAdmin', - type: 'address', - }, - ], - name: 'changeAdmin', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'implementation', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newImplementation', - type: 'address', - }, - ], - name: 'upgradeTo', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newImplementation', - type: 'address', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'upgradeToAndCall', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - stateMutability: 'payable', - type: 'receive', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'protocol', - type: 'address', - }, - ], - name: 'AddProtocol', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'asset', - type: 'address', - }, - ], - name: 'AllowedAsset', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'participant', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'asset', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assetAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'baseAssetAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'AssetDeposited', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'participant', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'asset', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assetAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'baseAssetAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'AssetWithdrawn', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'asset', - type: 'address', - }, - ], - name: 'DisallowedAsset', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'baseAssetAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'protocolFee', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'protocolFeeShares', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'network', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'networkFee', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'networkFeeShares', - type: 'uint256', - }, - ], - name: 'Payment', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'protocol', - type: 'address', - }, - ], - name: 'RemoveProtocol', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'feeDistributor', - type: 'address', - }, - ], - name: 'SetFeeDistributor', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'participant', - type: 'address', - }, - { - indexed: false, - internalType: 'enum ICaskVault.FundingSource', - name: 'fundingSource', - type: 'uint8', - }, - { - indexed: false, - internalType: 'address', - name: 'fundingAsset', - type: 'address', - }, - ], - name: 'SetFundingSource', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'maxPriceFeedAge', - type: 'uint256', - }, - ], - name: 'SetMaxPriceFeedAge', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'minDeposit', - type: 'uint256', - }, - ], - name: 'SetMinDeposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'feeDistributor', - type: 'address', - }, - ], - name: 'SetTrustedForwarder', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'baseAssetAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'TransferValue', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - inputs: [ - { - internalType: 'address', - name: '_protocol', - type: 'address', - }, - ], - name: 'addProtocol', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'address', - name: '_priceFeed', - type: 'address', - }, - { - internalType: 'uint256', - name: '_depositLimit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_slippageBps', - type: 'uint256', - }, - ], - name: 'allowAsset', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'baseAsset', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_fromAsset', - type: 'address', - }, - { - internalType: 'address', - name: '_toAsset', - type: 'address', - }, - { - internalType: 'uint256', - name: '_fromAmount', - type: 'uint256', - }, - ], - name: 'convertPrice', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_address', - type: 'address', - }, - ], - name: 'currentValueOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'uint256', - name: '_assetAmount', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_to', - type: 'address', - }, - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'uint256', - name: '_assetAmount', - type: 'uint256', - }, - ], - name: 'depositTo', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - ], - name: 'disallowAsset', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'feeDistributor', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_address', - type: 'address', - }, - ], - name: 'fundingSource', - outputs: [ - { - components: [ - { - internalType: 'enum ICaskVault.FundingSource', - name: 'fundingSource', - type: 'uint8', - }, - { - internalType: 'address', - name: 'fundingAsset', - type: 'address', - }, - ], - internalType: 'struct ICaskVault.FundingProfile', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getAllAssets', - outputs: [ - { - internalType: 'address[]', - name: '', - type: 'address[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - ], - name: 'getAsset', - outputs: [ - { - components: [ - { - internalType: 'address', - name: 'priceFeed', - type: 'address', - }, - { - internalType: 'uint256', - name: 'slippageBps', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'depositLimit', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'assetDecimals', - type: 'uint8', - }, - { - internalType: 'uint8', - name: 'priceFeedDecimals', - type: 'uint8', - }, - { - internalType: 'bool', - name: 'allowed', - type: 'bool', - }, - ], - internalType: 'struct ICaskVault.Asset', - name: '', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getBaseAsset', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_baseAsset', - type: 'address', - }, - { - internalType: 'address', - name: '_baseAssetPriceFeed', - type: 'address', - }, - { - internalType: 'address', - name: '_feeDistributor', - type: 'address', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'forwarder', - type: 'address', - }, - ], - name: 'isTrustedForwarder', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'maxPriceFeedAge', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pricePerShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'protocolCount', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_from', - type: 'address', - }, - { - internalType: 'address', - name: '_to', - type: 'address', - }, - { - internalType: 'uint256', - name: '_value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_protocolFee', - type: 'uint256', - }, - { - internalType: 'address', - name: '_network', - type: 'address', - }, - { - internalType: 'uint256', - name: '_networkFee', - type: 'uint256', - }, - ], - name: 'protocolPayment', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_from', - type: 'address', - }, - { - internalType: 'address', - name: '_to', - type: 'address', - }, - { - internalType: 'uint256', - name: '_value', - type: 'uint256', - }, - ], - name: 'protocolPayment', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_from', - type: 'address', - }, - { - internalType: 'address', - name: '_to', - type: 'address', - }, - { - internalType: 'uint256', - name: '_value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_protocolFee', - type: 'uint256', - }, - ], - name: 'protocolPayment', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'protocols', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_protocol', - type: 'address', - }, - ], - name: 'removeProtocol', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'reserved1', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_feeDistributor', - type: 'address', - }, - ], - name: 'setFeeDistributor', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'enum ICaskVault.FundingSource', - name: '_fundingSource', - type: 'uint8', - }, - { - internalType: 'address', - name: '_fundingAsset', - type: 'address', - }, - ], - name: 'setFundingSource', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_maxPriceFeedAge', - type: 'uint256', - }, - ], - name: 'setMaxPriceFeedAge', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_minDeposit', - type: 'uint256', - }, - ], - name: 'setMinDeposit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_forwarder', - type: 'address', - }, - ], - name: 'setTrustedForwarder', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_value', - type: 'uint256', - }, - ], - name: 'sharesForValue', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - ], - name: 'supportsAsset', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - ], - name: 'totalAssetBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalValue', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: '_value', - type: 'uint256', - }, - ], - name: 'transferValue', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_sender', - type: 'address', - }, - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: '_value', - type: 'uint256', - }, - ], - name: 'transferValueFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'trustedForwarder', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'unpause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'versionRecipient', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - ], - name: 'withdrawTo', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'initialLogic', - type: 'address', - }, - { - internalType: 'address', - name: 'initialAdmin', - type: 'address', - }, - { - internalType: 'bytes', - name: '_data', - type: 'bytes', - }, - ], - stateMutability: 'payable', - type: 'constructor', - }, -] as const; - -export type CaskVaultToken = typeof caskVaultTokenAbi; -export type CaskVaultTokenContract = GetContractReturnType; - -export class CaskVaultToken__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: caskVaultTokenAbi, publicClient: client }); - } -} diff --git a/src/apps/cask-protocol/contracts/viem/index.ts b/src/apps/cask-protocol/contracts/viem/index.ts deleted file mode 100644 index aca4c4351..000000000 --- a/src/apps/cask-protocol/contracts/viem/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { CaskVaultToken } from './CaskVaultToken'; - -export { CaskVaultToken__factory } from './CaskVaultToken'; diff --git a/src/apps/cask-protocol/fantom/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/fantom/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index 55d8a7b57..000000000 --- a/src/apps/cask-protocol/fantom/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class FantomCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0xbccdbb0806acc914f6746de592f924b374190710'; -} diff --git a/src/apps/cask-protocol/gnosis/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/gnosis/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index 0d8b78b1d..000000000 --- a/src/apps/cask-protocol/gnosis/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class GnosisCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - caskVaultContractAddress = '0x3b2b4b547daeebf3a703288cb43650f0f287b9ff'; - groupLabel = 'Vaults'; -} diff --git a/src/apps/cask-protocol/optimism/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/optimism/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index 25e84fcb3..000000000 --- a/src/apps/cask-protocol/optimism/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class OptimismCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0x3b2b4b547daeebf3a703288cb43650f0f287b9ff'; -} diff --git a/src/apps/cask-protocol/polygon/cask-protocol.wallet.token-fetcher.ts b/src/apps/cask-protocol/polygon/cask-protocol.wallet.token-fetcher.ts deleted file mode 100644 index f6a9c1bae..000000000 --- a/src/apps/cask-protocol/polygon/cask-protocol.wallet.token-fetcher.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { CaskProtocolWalletTokenFetcher } from '../common/cask-protocol.wallet.token-fetcher'; - -@PositionTemplate() -export class PolygonCaskProtocolWalletTokenFetcher extends CaskProtocolWalletTokenFetcher { - groupLabel = 'Vaults'; - caskVaultContractAddress = '0x3b2b4b547daeebf3a703288cb43650f0f287b9ff'; -} diff --git a/src/apps/convex/ethereum/convex.stash-token-wrapped.token-fetcher.ts b/src/apps/convex/ethereum/convex.stash-token-wrapped.token-fetcher.ts deleted file mode 100644 index d0539210e..000000000 --- a/src/apps/convex/ethereum/convex.stash-token-wrapped.token-fetcher.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { ConvexViemContractFactory } from '../contracts'; -import { ConvexStashTokenWrapped } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumConvexStashTokenWrappedTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Stash Token Wrapped'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(ConvexViemContractFactory) protected readonly contractFactory: ConvexViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.convexStashTokenWrapped({ address, network: this.network }); - } - - async getAddresses(): Promise { - return [ - '0xf132a783d8567c11d3df3e4ef890786affc16402', - '0xe657aa15ec2eec10facbdc68d388895dd700a0d5', - '0x49b559563ab764381554feee9951e9ec899c5952', - '0xad2074172e212dcf82ec94558209c88156764a93', - '0xbb554e5e8ec27a2b8f6d5cd269fec43e9637018b', - '0xb82cfa4325568748506dc7cf267857ff1e3b8d39', - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.token(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/convex/ethereum/index.ts b/src/apps/convex/ethereum/index.ts index c5986786e..f15892b12 100644 --- a/src/apps/convex/ethereum/index.ts +++ b/src/apps/convex/ethereum/index.ts @@ -6,7 +6,6 @@ import { EthereumConvexCvxStakingContractPositionFetcher } from './convex.cvx-st import { EthereumConvexDepositTokenFetcher } from './convex.deposit.token-fetcher'; import { EthereumConvexDepositorContractPositionFetcher } from './convex.depositor.contract-position-fetcher'; import { EthereumConvexLpFarmContractPositionFetcher } from './convex.lp-farm.contract-position-fetcher'; -import { EthereumConvexStashTokenWrappedTokenFetcher } from './convex.stash-token-wrapped.token-fetcher'; import { EthereumConvexVotingEscrowContractPositionFetcher } from './convex.voting-escrow.contract-position-fetcher'; export const CONVEX_ETHEREUM_PROVIDERS = [ @@ -19,5 +18,4 @@ export const CONVEX_ETHEREUM_PROVIDERS = [ EthereumConvexLpFarmContractPositionFetcher, EthereumConvexVotingEscrowContractPositionFetcher, EthereumConvexCvxCrvStakingWrappedContractPositionFetcher, - EthereumConvexStashTokenWrappedTokenFetcher, ]; diff --git a/src/apps/gains-network/arbitrum/gains-network.g-token.token-fetcher.ts b/src/apps/gains-network/arbitrum/gains-network.g-token.token-fetcher.ts deleted file mode 100644 index 1312fab08..000000000 --- a/src/apps/gains-network/arbitrum/gains-network.g-token.token-fetcher.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { GainsNetworkGTokenTokenFetcher } from '../common/gains-network.g-token.token-fetcher'; - -@PositionTemplate() -export class ArbitrumGainsNetworkGTokenTokenFetcher extends GainsNetworkGTokenTokenFetcher { - async getAddresses() { - return ['0xd85e038593d7a098614721eae955ec2022b9b91b']; - } -} diff --git a/src/apps/gains-network/gains-network.module.ts b/src/apps/gains-network/gains-network.module.ts index 1515f1aa1..3f5e37a27 100644 --- a/src/apps/gains-network/gains-network.module.ts +++ b/src/apps/gains-network/gains-network.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; -import { ArbitrumGainsNetworkGTokenTokenFetcher } from './arbitrum/gains-network.g-token.token-fetcher'; import { ArbitrumGainsNetworkLockedContractPositionFetcher } from './arbitrum/gains-network.locked.contract-position-fetcher'; import { ArbitrumGainsNetworkStakingV2ContractPositionFetcher } from './arbitrum/gains-network.staking-v2.contract-position-fetcher'; import { ArbitrumGainsNetworkStakingContractPositionFetcher } from './arbitrum/gains-network.staking.contract-position-fetcher'; @@ -16,7 +15,6 @@ import { PolygonGainsNetworkStakingContractPositionFetcher } from './polygon/gai providers: [ GainsNetworkViemContractFactory, // Arbitrum - ArbitrumGainsNetworkGTokenTokenFetcher, ArbitrumGainsNetworkStakingContractPositionFetcher, ArbitrumGainsNetworkLockedContractPositionFetcher, ArbitrumGainsNetworkStakingV2ContractPositionFetcher, diff --git a/src/apps/gearbox/contracts/abis/phantom-token.json b/src/apps/gearbox/contracts/abis/phantom-token.json deleted file mode 100644 index 41a315bd1..000000000 --- a/src/apps/gearbox/contracts/abis/phantom-token.json +++ /dev/null @@ -1,237 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/gearbox/contracts/viem.contract-factory.ts b/src/apps/gearbox/contracts/viem.contract-factory.ts index 1057115ed..7f072eef6 100644 --- a/src/apps/gearbox/contracts/viem.contract-factory.ts +++ b/src/apps/gearbox/contracts/viem.contract-factory.ts @@ -10,7 +10,6 @@ import { CreditManagerV2__factory, DieselToken__factory, GearboxLendingTokenV3__factory, - PhantomToken__factory, PoolService__factory, } from './viem'; @@ -38,9 +37,6 @@ export class GearboxViemContractFactory { gearboxLendingTokenV3({ address, network }: ContractOpts) { return GearboxLendingTokenV3__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } - phantomToken({ address, network }: ContractOpts) { - return PhantomToken__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } poolService({ address, network }: ContractOpts) { return PoolService__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/gearbox/contracts/viem/PhantomToken.ts b/src/apps/gearbox/contracts/viem/PhantomToken.ts deleted file mode 100644 index 322d07a8d..000000000 --- a/src/apps/gearbox/contracts/viem/PhantomToken.ts +++ /dev/null @@ -1,251 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const phantomTokenAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'underlying', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type PhantomToken = typeof phantomTokenAbi; -export type PhantomTokenContract = GetContractReturnType; - -export class PhantomToken__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: phantomTokenAbi, publicClient: client }); - } -} diff --git a/src/apps/gearbox/contracts/viem/index.ts b/src/apps/gearbox/contracts/viem/index.ts index a5884f3c4..da25ff6af 100644 --- a/src/apps/gearbox/contracts/viem/index.ts +++ b/src/apps/gearbox/contracts/viem/index.ts @@ -8,7 +8,6 @@ export type { ContractsRegister } from './ContractsRegister'; export type { CreditManagerV2 } from './CreditManagerV2'; export type { DieselToken } from './DieselToken'; export type { GearboxLendingTokenV3 } from './GearboxLendingTokenV3'; -export type { PhantomToken } from './PhantomToken'; export type { PoolService } from './PoolService'; export { AccountFactory__factory } from './AccountFactory'; @@ -17,5 +16,4 @@ export { ContractsRegister__factory } from './ContractsRegister'; export { CreditManagerV2__factory } from './CreditManagerV2'; export { DieselToken__factory } from './DieselToken'; export { GearboxLendingTokenV3__factory } from './GearboxLendingTokenV3'; -export { PhantomToken__factory } from './PhantomToken'; export { PoolService__factory } from './PoolService'; diff --git a/src/apps/gearbox/ethereum/gearbox.phantom.token-fetcher.ts b/src/apps/gearbox/ethereum/gearbox.phantom.token-fetcher.ts deleted file mode 100644 index 39158ee7e..000000000 --- a/src/apps/gearbox/ethereum/gearbox.phantom.token-fetcher.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams, UnderlyingTokenDefinition } from '~position/template/app-token.template.types'; - -import { GearboxViemContractFactory } from '../contracts'; -import { PhantomToken } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumGearboxPhantomTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Phantom Tokens'; - isExcludedFromExplore = true; - isExcludedFromBalances = true; - isExcludedFromTvl = true; - - constructor( - @Inject(APP_TOOLKIT) readonly appToolkit: IAppToolkit, - @Inject(GearboxViemContractFactory) private readonly contractFactory: GearboxViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.phantomToken({ address, network: this.network }); - } - - // Gearbox requires tokens used as collateral to be ERC20 - async getAddresses(): Promise { - return [ - '0xbac7a431146aeaf3f57a16b9954f332fd292f270', // stkcvx3Crv - '0xaf314b088b53835d5cf4e4cb81beaba5934a61fe', // stkcvxFRAX3CRV - '0x34fb99abbafb4e87e256960d572664c6adc301b8', // stkcvxgusd3CRV - '0xe15b7d80a51e1fe54ac355cabe848efce5289bdb', // stkcvxsteCRV - '0x7e1992a7f28daa5f6a2d34e2cd40f962f37b172c', // stkcvxcrvPlain3andSUSD - '0x0a1d4a25d0390899b90bcd22e1ef155003ea76d7', // stkcvxLUSD3CRV - '0x276187f24d41745513cbe2bd5dfc33a4d8cdc9ed', // stkcvxcrvFRAX - ]; - } - - async getUnderlyingTokenDefinitions({ - contract, - }: GetUnderlyingTokensParams): Promise { - return [{ address: await contract.read.underlying(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/gearbox/gearbox.module.ts b/src/apps/gearbox/gearbox.module.ts index 331126264..4768068a3 100644 --- a/src/apps/gearbox/gearbox.module.ts +++ b/src/apps/gearbox/gearbox.module.ts @@ -6,7 +6,6 @@ import { GearboxViemContractFactory } from './contracts'; import { EthereumGearboxCreditAccountsContractPositionFetcher } from './ethereum/gearbox.credit-accounts.contract-position-fetcher'; import { EthereumGearboxLendingV2TokenFetcher } from './ethereum/gearbox.lending-v2.token-fetcher'; import { EthereumGearboxLendingV3TokenFetcher } from './ethereum/gearbox.lending-v3.token-fetcher'; -import { EthereumGearboxPhantomTokenFetcher } from './ethereum/gearbox.phantom.token-fetcher'; import { EthereumGearboxRewardsPositionFetcher } from './ethereum/gearbox.rewards.contract-position-fetcher'; import { EthereumGearboxRewardsMerkleCache } from './ethereum/gearbox.rewards.merkle-cache'; @@ -17,7 +16,6 @@ import { EthereumGearboxRewardsMerkleCache } from './ethereum/gearbox.rewards.me EthereumGearboxCreditAccountsContractPositionFetcher, EthereumGearboxLendingV2TokenFetcher, EthereumGearboxLendingV3TokenFetcher, - EthereumGearboxPhantomTokenFetcher, EthereumGearboxRewardsPositionFetcher, ], }) diff --git a/src/apps/gmx/arbitrum/gmx.es-gmx.token-fetcher.ts b/src/apps/gmx/arbitrum/gmx.es-gmx.token-fetcher.ts deleted file mode 100644 index f49c6cecb..000000000 --- a/src/apps/gmx/arbitrum/gmx.es-gmx.token-fetcher.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { GmxEsGmxTokenFetcher } from '../common/gmx.es-gmx.token-fetcher'; - -@PositionTemplate() -export class ArbitrumGmxEsGmxTokenFetcher extends GmxEsGmxTokenFetcher { - groupLabel = 'esGMX'; - isExcludedFromTvl = true; - - esGmxAddress = '0xf42ae1d54fd613c9bb14810b0588faaa09a426ca'; - gmxAddress = '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a'; -} diff --git a/src/apps/gmx/avalanche/gmx.es-gmx.token-fetcher.ts b/src/apps/gmx/avalanche/gmx.es-gmx.token-fetcher.ts deleted file mode 100644 index b725767ba..000000000 --- a/src/apps/gmx/avalanche/gmx.es-gmx.token-fetcher.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; - -import { GmxEsGmxTokenFetcher } from '../common/gmx.es-gmx.token-fetcher'; - -@PositionTemplate() -export class AvalancheGmxEsGmxTokenFetcher extends GmxEsGmxTokenFetcher { - groupLabel = 'esGMX'; - isExcludedFromTvl = true; - - esGmxAddress = '0xff1489227bbaac61a9209a08929e4c2a526ddd17'; - gmxAddress = '0x62edc0692bd897d2295872a9ffcac5425011c661'; -} diff --git a/src/apps/gmx/common/gmx.es-gmx.token-fetcher.ts b/src/apps/gmx/common/gmx.es-gmx.token-fetcher.ts deleted file mode 100644 index 125427831..000000000 --- a/src/apps/gmx/common/gmx.es-gmx.token-fetcher.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { Erc20 } from '~contract/contracts/viem'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { GmxViemContractFactory } from '../contracts'; - -export abstract class GmxEsGmxTokenFetcher extends AppTokenTemplatePositionFetcher { - abstract esGmxAddress: string; - abstract gmxAddress: string; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(GmxViemContractFactory) protected readonly contractFactory: GmxViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.appToolkit.globalViemContracts.erc20({ address, network: this.network }); - } - - async getAddresses() { - return [this.esGmxAddress]; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: this.gmxAddress, network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/gmx/gmx.module.ts b/src/apps/gmx/gmx.module.ts index 771b46352..1646cbf51 100644 --- a/src/apps/gmx/gmx.module.ts +++ b/src/apps/gmx/gmx.module.ts @@ -2,11 +2,9 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; -import { ArbitrumGmxEsGmxTokenFetcher } from './arbitrum/gmx.es-gmx.token-fetcher'; import { ArbitrumGmxFarmContractPositionFetcher } from './arbitrum/gmx.farm.contract-position-fetcher'; import { ArbitrumGmxGlpTokenFetcher } from './arbitrum/gmx.glp.token-fetcher'; import { ArbitrumGmxPerpContractPositionFetcher } from './arbitrum/gmx.perp.contract-position-fetcher'; -import { AvalancheGmxEsGmxTokenFetcher } from './avalanche/gmx.es-gmx.token-fetcher'; import { AvalancheGmxFarmContractPositionFetcher } from './avalanche/gmx.farm.contract-position-fetcher'; import { AvalancheGmxGlpTokenFetcher } from './avalanche/gmx.glp.token-fetcher'; import { AvalancheGmxPerpContractPositionFetcher } from './avalanche/gmx.perp.contract-position-fetcher'; @@ -16,12 +14,10 @@ import { GmxViemContractFactory } from './contracts'; providers: [ GmxViemContractFactory, // Arbitrum - ArbitrumGmxEsGmxTokenFetcher, ArbitrumGmxFarmContractPositionFetcher, ArbitrumGmxGlpTokenFetcher, ArbitrumGmxPerpContractPositionFetcher, // Avalanche - AvalancheGmxEsGmxTokenFetcher, AvalancheGmxFarmContractPositionFetcher, AvalancheGmxGlpTokenFetcher, AvalancheGmxPerpContractPositionFetcher, diff --git a/src/apps/goldfinch/ethereum/goldfinch.fidu.token-fetcher.ts b/src/apps/goldfinch/ethereum/goldfinch.fidu.token-fetcher.ts deleted file mode 100644 index 14cca55f6..000000000 --- a/src/apps/goldfinch/ethereum/goldfinch.fidu.token-fetcher.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { Erc20 } from '~contract/contracts/viem'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams } from '~position/template/app-token.template.types'; - -import { GoldfinchViemContractFactory } from '../contracts'; - -@PositionTemplate() -export class EthereumGoldfinchFiduTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'FIDU'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(GoldfinchViemContractFactory) protected readonly contractFactory: GoldfinchViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.appToolkit.globalViemContracts.erc20({ address, network: this.network }); - } - - async getAddresses() { - const FIDU = '0x6a445e9f40e0b97c92d0b8a3366cef1d67f700bf'; - return [FIDU]; - } - - async getUnderlyingTokenDefinitions() { - const USDC = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'; - return [{ address: USDC, network: this.network }]; - } - - async getPricePerShare({ multicall }: GetPricePerShareParams) { - const seniorPoolAddress = '0x8481a6ebaf5c7dabc3f7e09e44a89531fd31f822'; - const seniorPool = this.contractFactory.goldfinchSeniorPool({ address: seniorPoolAddress, network: this.network }); - const sharePriceRaw = await multicall.wrap(seniorPool).read.sharePrice(); - return [Number(sharePriceRaw) / 10 ** 18]; - } -} diff --git a/src/apps/goldfinch/goldfinch.module.ts b/src/apps/goldfinch/goldfinch.module.ts index 7a48e3470..7c0582b98 100644 --- a/src/apps/goldfinch/goldfinch.module.ts +++ b/src/apps/goldfinch/goldfinch.module.ts @@ -3,7 +3,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; import { GoldfinchViemContractFactory } from './contracts'; -import { EthereumGoldfinchFiduTokenFetcher } from './ethereum/goldfinch.fidu.token-fetcher'; import { EthereumGoldfinchSeniorPoolContractPositionFetcher } from './ethereum/goldfinch.seniorpool.contract-position-fetcher'; import { EthereumGoldfinchStakingRewardsContractPositionFetcher } from './ethereum/goldfinch.staking-rewards.contract-position-fetcher'; import { EthereumGoldfinchVaultContractPositionFetcher } from './ethereum/goldfinch.vault.contract-position-fetcher'; @@ -11,7 +10,6 @@ import { EthereumGoldfinchVaultContractPositionFetcher } from './ethereum/goldfi @Module({ providers: [ GoldfinchViemContractFactory, - EthereumGoldfinchFiduTokenFetcher, EthereumGoldfinchStakingRewardsContractPositionFetcher, EthereumGoldfinchSeniorPoolContractPositionFetcher, EthereumGoldfinchVaultContractPositionFetcher, diff --git a/src/apps/gro/avalanche/gro.labs.token-fetcher.ts b/src/apps/gro/avalanche/gro.labs.token-fetcher.ts deleted file mode 100644 index 945abaeed..000000000 --- a/src/apps/gro/avalanche/gro.labs.token-fetcher.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { GroViemContractFactory } from '../contracts'; -import { GroLabsVault } from '../contracts/viem'; - -@PositionTemplate() -export class AvalancheGroLabsTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Labs'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(GroViemContractFactory) private readonly contractFactory: GroViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.groLabsVault({ network: this.network, address }); - } - - async getAddresses() { - return [ - '0x6063597b9356b246e706fd6a48c780f897e3ef55', - '0x2eb05cffa24309b9aaf300392a4d8db745d4e592', - '0x6ef44077a1f5e10cdfccc30efb7dcdb1d5475581', - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.token(), network: this.network }]; - } - - async getPricePerShare({ contract }: GetPricePerShareParams) { - const pricePerShareRaw = await contract.read.getPricePerShare(); - return [Number(pricePerShareRaw) / 10 ** 18]; - } -} diff --git a/src/apps/gro/contracts/abis/gro-labs-vault.json b/src/apps/gro/contracts/abis/gro-labs-vault.json deleted file mode 100644 index 83237960c..000000000 --- a/src/apps/gro/contracts/abis/gro-labs-vault.json +++ /dev/null @@ -1,767 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "uint256", "name": "_baseAllowance", "type": "uint256" }, - { "internalType": "address", "name": "_bouncer", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "user", "type": "address" }], - "name": "LogAddToWhitelist", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "bool", "name": "status", "type": "bool" }], - "name": "LogAllowanceStatus", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256[]", "name": "strategyRetios", "type": "uint256[]" }], - "name": "LogDebtRatios", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "_amount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "allowance", "type": "uint256" } - ], - "name": "LogDeposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" }], - "name": "LogDepositLimit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "parent", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "child", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "LogMigrate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "LogNewAllowance", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "bouncer", "type": "address" }], - "name": "LogNewBouncer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "debtRatio", "type": "uint256" } - ], - "name": "LogNewDebtRatio", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "factor", "type": "uint256" }], - "name": "LogNewReleaseFactor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "rewards", "type": "address" }], - "name": "LogNewRewards", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "bool", "name": "loss", "type": "bool" }, - { "indexed": false, "internalType": "uint256", "name": "change", "type": "uint256" } - ], - "name": "LogNewStrategyHarvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "vaultFee", "type": "uint256" }], - "name": "LogNewVaultFee", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "user", "type": "address" }], - "name": "LogRemoveFromWhitelist", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "debtRatio", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "minDebtPerHarvest", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "maxDebtPerHarvest", "type": "uint256" } - ], - "name": "LogStrategyAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }], - "name": "LogStrategyAddedToQueue", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "newStrategy", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "oldStrategy", "type": "address" } - ], - "name": "LogStrategyMigrated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }], - "name": "LogStrategyRemovedFromQueue", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "gain", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "loss", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "debtPaid", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalGain", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalLoss", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalDebt", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "debtAdded", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "debtRatio", "type": "uint256" } - ], - "name": "LogStrategyReported", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }], - "name": "LogStrategyRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, - { "indexed": false, "internalType": "bool", "name": "status", "type": "bool" } - ], - "name": "LogStrategyStatusUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "maxDebtPerHarvest", "type": "uint256" } - ], - "name": "LogStrategyUpdateMaxDebtPerHarvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "strategy", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "minDebtPerHarvest", "type": "uint256" } - ], - "name": "LogStrategyUpdateMinDebtPerHarvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address[]", "name": "queue", "type": "address[]" }], - "name": "LogUpdateWithdrawalQueue", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalLoss", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "allowance", "type": "uint256" } - ], - "name": "LogWithdrawal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "BASE_ALLOWANCE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAXIMUM_STRATEGIES", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bool", "name": "_status", "type": "bool" }], - "name": "activateAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activation", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_strategy", "type": "address" }, - { "internalType": "uint256", "name": "_debtRatio", "type": "uint256" }, - { "internalType": "uint256", "name": "_minDebtPerHarvest", "type": "uint256" }, - { "internalType": "uint256", "name": "_maxDebtPerHarvest", "type": "uint256" } - ], - "name": "addStrategy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_strategy", "type": "address" }], - "name": "addStrategyToQueue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], - "name": "addToWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "allowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bouncer", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "claimed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "creditAvailable", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_strategy", "type": "address" }], - "name": "creditAvailable", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_strategy", "type": "address" }], - "name": "debtOutstanding", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "debtOutstanding", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "debtRatio", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositLimit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getPricePerShare", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStrategiesLength", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_index", "type": "uint256" }], - "name": "getStrategyAssets", - "outputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lastReport", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lockedProfit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_oldVersion", "type": "address" }, - { "internalType": "address", "name": "_newVersion", "type": "address" } - ], - "name": "migrateStrategy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "releaseFactor", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], - "name": "removeFromWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_strategy", "type": "address" }], - "name": "removeStrategyFromQueue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { "internalType": "uint256", "name": "_gain", "type": "uint256" }, - { "internalType": "uint256", "name": "_loss", "type": "uint256" }, - { "internalType": "uint256", "name": "_debtPayment", "type": "uint256" } - ], - "name": "report", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "revokeStrategy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "rewards", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_bouncer", "type": "address" }], - "name": "setBouncer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_strategy", "type": "address" }, - { "internalType": "uint256", "name": "_debtRatio", "type": "uint256" } - ], - "name": "setDebtRatio", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256[]", "name": "_strategyDebtRatios", "type": "uint256[]" }], - "name": "setDebtRatios", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_newLimit", "type": "uint256" }], - "name": "setDepositLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_factor", "type": "uint256" }], - "name": "setProfitRelease", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_rewards", "type": "address" }], - "name": "setRewards", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_user", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "name": "setUserAllowance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_fee", "type": "uint256" }], - "name": "setVaultFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address[]", "name": "_queue", "type": "address[]" }], - "name": "setWithdrawalQueue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "strategies", - "outputs": [ - { "internalType": "uint256", "name": "activation", "type": "uint256" }, - { "internalType": "bool", "name": "active", "type": "bool" }, - { "internalType": "uint256", "name": "debtRatio", "type": "uint256" }, - { "internalType": "uint256", "name": "minDebtPerHarvest", "type": "uint256" }, - { "internalType": "uint256", "name": "maxDebtPerHarvest", "type": "uint256" }, - { "internalType": "uint256", "name": "lastReport", "type": "uint256" }, - { "internalType": "uint256", "name": "totalDebt", "type": "uint256" }, - { "internalType": "uint256", "name": "totalGain", "type": "uint256" }, - { "internalType": "uint256", "name": "totalLoss", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "strategyDebt", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_index", "type": "uint256" }], - "name": "strategyHarvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_index", "type": "uint256" }, - { "internalType": "uint256", "name": "_callCost", "type": "uint256" } - ], - "name": "strategyHarvestTrigger", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_recipient", "type": "address" } - ], - "name": "sweep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalDebt", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalEstimatedAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_strategy", "type": "address" }, - { "internalType": "uint256", "name": "_maxDebtPerHarvest", "type": "uint256" } - ], - "name": "updateStrategyMaxDebtPerHarvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_strategy", "type": "address" }, - { "internalType": "uint256", "name": "_minDebtPerHarvest", "type": "uint256" } - ], - "name": "updateStrategyMinDebtPerHarvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "userAllowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "vaultFee", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "whitelist", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_shares", "type": "uint256" }, - { "internalType": "uint256", "name": "_maxLoss", "type": "uint256" } - ], - "name": "withdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "name": "withdrawalQueue", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/gro/contracts/viem.contract-factory.ts b/src/apps/gro/contracts/viem.contract-factory.ts index 497738543..7a26c48b6 100644 --- a/src/apps/gro/contracts/viem.contract-factory.ts +++ b/src/apps/gro/contracts/viem.contract-factory.ts @@ -3,7 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { GroLabsVault__factory, GroLpTokenStaker__factory, GroVesting__factory } from './viem'; +import { GroLpTokenStaker__factory, GroVesting__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -11,9 +11,6 @@ type ContractOpts = { address: string; network: Network }; export class GroViemContractFactory { constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - groLabsVault({ address, network }: ContractOpts) { - return GroLabsVault__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } groLpTokenStaker({ address, network }: ContractOpts) { return GroLpTokenStaker__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/gro/contracts/viem/GroLabsVault.ts b/src/apps/gro/contracts/viem/GroLabsVault.ts deleted file mode 100644 index b3596b8cc..000000000 --- a/src/apps/gro/contracts/viem/GroLabsVault.ts +++ /dev/null @@ -1,1719 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const groLabsVaultAbi = [ - { - inputs: [ - { - internalType: 'address', - name: '_token', - type: 'address', - }, - { - internalType: 'uint256', - name: '_baseAllowance', - type: 'uint256', - }, - { - internalType: 'address', - name: '_bouncer', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'LogAddToWhitelist', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'bool', - name: 'status', - type: 'bool', - }, - ], - name: 'LogAllowanceStatus', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256[]', - name: 'strategyRetios', - type: 'uint256[]', - }, - ], - name: 'LogDebtRatios', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'allowance', - type: 'uint256', - }, - ], - name: 'LogDeposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'newLimit', - type: 'uint256', - }, - ], - name: 'LogDepositLimit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'parent', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'child', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'LogMigrate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'LogNewAllowance', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'bouncer', - type: 'address', - }, - ], - name: 'LogNewBouncer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'debtRatio', - type: 'uint256', - }, - ], - name: 'LogNewDebtRatio', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'factor', - type: 'uint256', - }, - ], - name: 'LogNewReleaseFactor', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'rewards', - type: 'address', - }, - ], - name: 'LogNewRewards', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'bool', - name: 'loss', - type: 'bool', - }, - { - indexed: false, - internalType: 'uint256', - name: 'change', - type: 'uint256', - }, - ], - name: 'LogNewStrategyHarvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'vaultFee', - type: 'uint256', - }, - ], - name: 'LogNewVaultFee', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'LogRemoveFromWhitelist', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'debtRatio', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'minDebtPerHarvest', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'maxDebtPerHarvest', - type: 'uint256', - }, - ], - name: 'LogStrategyAdded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - ], - name: 'LogStrategyAddedToQueue', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'newStrategy', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'oldStrategy', - type: 'address', - }, - ], - name: 'LogStrategyMigrated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - ], - name: 'LogStrategyRemovedFromQueue', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'gain', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'loss', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'debtPaid', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalGain', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalLoss', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalDebt', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'debtAdded', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'debtRatio', - type: 'uint256', - }, - ], - name: 'LogStrategyReported', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - ], - name: 'LogStrategyRevoked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'bool', - name: 'status', - type: 'bool', - }, - ], - name: 'LogStrategyStatusUpdate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'maxDebtPerHarvest', - type: 'uint256', - }, - ], - name: 'LogStrategyUpdateMaxDebtPerHarvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'strategy', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'minDebtPerHarvest', - type: 'uint256', - }, - ], - name: 'LogStrategyUpdateMinDebtPerHarvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address[]', - name: 'queue', - type: 'address[]', - }, - ], - name: 'LogUpdateWithdrawalQueue', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalLoss', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'allowance', - type: 'uint256', - }, - ], - name: 'LogWithdrawal', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - inputs: [], - name: 'BASE_ALLOWANCE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAXIMUM_STRATEGIES', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bool', - name: '_status', - type: 'bool', - }, - ], - name: 'activateAllowance', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'activation', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - { - internalType: 'uint256', - name: '_debtRatio', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_minDebtPerHarvest', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_maxDebtPerHarvest', - type: 'uint256', - }, - ], - name: 'addStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - ], - name: 'addStrategyToQueue', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'addToWhitelist', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'allowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'bouncer', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'claimed', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'creditAvailable', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - ], - name: 'creditAvailable', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - ], - name: 'debtOutstanding', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'debtOutstanding', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'debtRatio', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'depositLimit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getPricePerShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getStrategiesLength', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_index', - type: 'uint256', - }, - ], - name: 'getStrategyAssets', - outputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'lastReport', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'lockedProfit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_oldVersion', - type: 'address', - }, - { - internalType: 'address', - name: '_newVersion', - type: 'address', - }, - ], - name: 'migrateStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'releaseFactor', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'removeFromWhitelist', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - ], - name: 'removeStrategyFromQueue', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_gain', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_loss', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_debtPayment', - type: 'uint256', - }, - ], - name: 'report', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'revokeStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'rewards', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_bouncer', - type: 'address', - }, - ], - name: 'setBouncer', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - { - internalType: 'uint256', - name: '_debtRatio', - type: 'uint256', - }, - ], - name: 'setDebtRatio', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256[]', - name: '_strategyDebtRatios', - type: 'uint256[]', - }, - ], - name: 'setDebtRatios', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_newLimit', - type: 'uint256', - }, - ], - name: 'setDepositLimit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_factor', - type: 'uint256', - }, - ], - name: 'setProfitRelease', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_rewards', - type: 'address', - }, - ], - name: 'setRewards', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_user', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'setUserAllowance', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_fee', - type: 'uint256', - }, - ], - name: 'setVaultFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address[]', - name: '_queue', - type: 'address[]', - }, - ], - name: 'setWithdrawalQueue', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'strategies', - outputs: [ - { - internalType: 'uint256', - name: 'activation', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'active', - type: 'bool', - }, - { - internalType: 'uint256', - name: 'debtRatio', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minDebtPerHarvest', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'maxDebtPerHarvest', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'lastReport', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'totalDebt', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'totalGain', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'totalLoss', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'strategyDebt', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_index', - type: 'uint256', - }, - ], - name: 'strategyHarvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_index', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_callCost', - type: 'uint256', - }, - ], - name: 'strategyHarvestTrigger', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_token', - type: 'address', - }, - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - ], - name: 'sweep', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalDebt', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalEstimatedAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - { - internalType: 'uint256', - name: '_maxDebtPerHarvest', - type: 'uint256', - }, - ], - name: 'updateStrategyMaxDebtPerHarvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - { - internalType: 'uint256', - name: '_minDebtPerHarvest', - type: 'uint256', - }, - ], - name: 'updateStrategyMinDebtPerHarvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'userAllowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'vaultFee', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'whitelist', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_maxLoss', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'withdrawalQueue', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type GroLabsVault = typeof groLabsVaultAbi; -export type GroLabsVaultContract = GetContractReturnType; - -export class GroLabsVault__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: groLabsVaultAbi, publicClient: client }); - } -} diff --git a/src/apps/gro/contracts/viem/index.ts b/src/apps/gro/contracts/viem/index.ts index 1b361fcaf..316e5cb63 100644 --- a/src/apps/gro/contracts/viem/index.ts +++ b/src/apps/gro/contracts/viem/index.ts @@ -2,10 +2,8 @@ /* tslint:disable */ /* eslint-disable */ -export type { GroLabsVault } from './GroLabsVault'; export type { GroLpTokenStaker } from './GroLpTokenStaker'; export type { GroVesting } from './GroVesting'; -export { GroLabsVault__factory } from './GroLabsVault'; export { GroLpTokenStaker__factory } from './GroLpTokenStaker'; export { GroVesting__factory } from './GroVesting'; diff --git a/src/apps/gro/gro.module.ts b/src/apps/gro/gro.module.ts index 53e1a4823..0fe3fbd82 100644 --- a/src/apps/gro/gro.module.ts +++ b/src/apps/gro/gro.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; -import { AvalancheGroLabsTokenFetcher } from './avalanche/gro.labs.token-fetcher'; import { GroViemContractFactory } from './contracts'; import { EthereumGroFarmContractPositionFetcher } from './ethereum/gro.farm.contract-position-fetcher'; import { EthereumGroVestingContractPositionFetcher } from './ethereum/gro.vesting.contract-position-fetcher'; @@ -13,8 +12,6 @@ import { EthereumGroVestingContractPositionFetcher } from './ethereum/gro.vestin // Ethereum EthereumGroFarmContractPositionFetcher, EthereumGroVestingContractPositionFetcher, - // Avalanche - AvalancheGroLabsTokenFetcher, ], }) export class GroAppModule extends AbstractApp() {} diff --git a/src/apps/hakuswap/avalanche/hakuswap.x-haku.token-fetcher.ts b/src/apps/hakuswap/avalanche/hakuswap.x-haku.token-fetcher.ts deleted file mode 100644 index cfcdde5c9..000000000 --- a/src/apps/hakuswap/avalanche/hakuswap.x-haku.token-fetcher.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { BigNumber } from 'ethers'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { HakuswapViemContractFactory } from '../contracts'; -import { HakuswapXHaku } from '../contracts/viem'; - -@PositionTemplate() -export class AvalancheHakuswapXHakuTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'xHaku'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(HakuswapViemContractFactory) protected readonly contractFactory: HakuswapViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.hakuswapXHaku({ network: this.network, address }); - } - - async getAddresses() { - return ['0xa95c238b5a72f481f6abd50f951f01891130b441']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.haku(), network: this.network }]; - } - - async getPricePerShare({ contract, appToken, multicall }: GetPricePerShareParams) { - const oneUnit = BigNumber.from(10).pow(18).toString(); - const pricePerShareRaw = await multicall.wrap(contract).read.xHAKUForHAKU([BigInt(oneUnit)]); - const decimals = appToken.tokens[0].decimals; - - return [Number(pricePerShareRaw) / 10 ** decimals]; - } -} diff --git a/src/apps/hakuswap/contracts/abis/hakuswap-x-haku.json b/src/apps/hakuswap/contracts/abis/hakuswap-x-haku.json deleted file mode 100644 index b2cc9f377..000000000 --- a/src/apps/hakuswap/contracts/abis/hakuswap-x-haku.json +++ /dev/null @@ -1,320 +0,0 @@ -[ - { - "inputs": [{ "internalType": "contract IERC20", "name": "_haku", "type": "address" }], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } - ], - "name": "DelegateChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "previousBalance", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" } - ], - "name": "DelegateVotesChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DELEGATION_TYPEHASH", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_TYPEHASH", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_account", "type": "address" }], - "name": "HAKUBalance", - "outputs": [{ "internalType": "uint256", "name": "hakuAmount_", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_hakuAmount", "type": "uint256" }], - "name": "HAKUForxHAKU", - "outputs": [{ "internalType": "uint256", "name": "xHAKUAmount_", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "_stakedTime", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "canWithdraw", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "uint32", "name": "", "type": "uint32" } - ], - "name": "checkpoints", - "outputs": [ - { "internalType": "uint32", "name": "fromBlock", "type": "uint32" }, - { "internalType": "uint256", "name": "votes", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "delayToWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "delegatee", "type": "address" }], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "delegatee", "type": "address" }, - { "internalType": "uint256", "name": "nonce", "type": "uint256" }, - { "internalType": "uint256", "name": "expiry", "type": "uint256" }, - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ], - "name": "delegateBySig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "delegator", "type": "address" }], - "name": "delegates", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "enter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "getCurrentVotes", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "uint256", "name": "blockNumber", "type": "uint256" } - ], - "name": "getPriorVotes", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "haku", - "outputs": [{ "internalType": "contract IERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_share", "type": "uint256" }], - "name": "leave", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "nonces", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "numCheckpoints", - "outputs": [{ "internalType": "uint32", "name": "", "type": "uint32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_admin", "type": "address" }], - "name": "setAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "second", "type": "uint256" }], - "name": "setDelayToWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "stakedTime", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_xHAKUAmount", "type": "uint256" }], - "name": "xHAKUForHAKU", - "outputs": [{ "internalType": "uint256", "name": "hakuAmount_", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/hakuswap/contracts/viem.contract-factory.ts b/src/apps/hakuswap/contracts/viem.contract-factory.ts index 2dab1f12b..7f0603f8a 100644 --- a/src/apps/hakuswap/contracts/viem.contract-factory.ts +++ b/src/apps/hakuswap/contracts/viem.contract-factory.ts @@ -3,12 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { - HakuswapFactory__factory, - HakuswapMasterchef__factory, - HakuswapPool__factory, - HakuswapXHaku__factory, -} from './viem'; +import { HakuswapFactory__factory, HakuswapMasterchef__factory, HakuswapPool__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -25,7 +20,4 @@ export class HakuswapViemContractFactory { hakuswapPool({ address, network }: ContractOpts) { return HakuswapPool__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } - hakuswapXHaku({ address, network }: ContractOpts) { - return HakuswapXHaku__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } } diff --git a/src/apps/hakuswap/contracts/viem/HakuswapXHaku.ts b/src/apps/hakuswap/contracts/viem/HakuswapXHaku.ts deleted file mode 100644 index f7bf2c31f..000000000 --- a/src/apps/hakuswap/contracts/viem/HakuswapXHaku.ts +++ /dev/null @@ -1,758 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const hakuswapXHakuAbi = [ - { - inputs: [ - { - internalType: 'contract IERC20', - name: '_haku', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'delegator', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'fromDelegate', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'toDelegate', - type: 'address', - }, - ], - name: 'DelegateChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'delegate', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'previousBalance', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'newBalance', - type: 'uint256', - }, - ], - name: 'DelegateVotesChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - inputs: [], - name: 'DELEGATION_TYPEHASH', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'DOMAIN_TYPEHASH', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_account', - type: 'address', - }, - ], - name: 'HAKUBalance', - outputs: [ - { - internalType: 'uint256', - name: 'hakuAmount_', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_hakuAmount', - type: 'uint256', - }, - ], - name: 'HAKUForxHAKU', - outputs: [ - { - internalType: 'uint256', - name: 'xHAKUAmount_', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: '_stakedTime', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'admin', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'canWithdraw', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint32', - name: '', - type: 'uint32', - }, - ], - name: 'checkpoints', - outputs: [ - { - internalType: 'uint32', - name: 'fromBlock', - type: 'uint32', - }, - { - internalType: 'uint256', - name: 'votes', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'delayToWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'delegatee', - type: 'address', - }, - ], - name: 'delegate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'delegatee', - type: 'address', - }, - { - internalType: 'uint256', - name: 'nonce', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'expiry', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'delegateBySig', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'delegator', - type: 'address', - }, - ], - name: 'delegates', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'enter', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'getCurrentVotes', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'blockNumber', - type: 'uint256', - }, - ], - name: 'getPriorVotes', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'haku', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_share', - type: 'uint256', - }, - ], - name: 'leave', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'numCheckpoints', - outputs: [ - { - internalType: 'uint32', - name: '', - type: 'uint32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_admin', - type: 'address', - }, - ], - name: 'setAdmin', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'second', - type: 'uint256', - }, - ], - name: 'setDelayToWithdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'stakedTime', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_xHAKUAmount', - type: 'uint256', - }, - ], - name: 'xHAKUForHAKU', - outputs: [ - { - internalType: 'uint256', - name: 'hakuAmount_', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type HakuswapXHaku = typeof hakuswapXHakuAbi; -export type HakuswapXHakuContract = GetContractReturnType; - -export class HakuswapXHaku__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: hakuswapXHakuAbi, publicClient: client }); - } -} diff --git a/src/apps/hakuswap/contracts/viem/index.ts b/src/apps/hakuswap/contracts/viem/index.ts index 84a45fd77..86fd0028f 100644 --- a/src/apps/hakuswap/contracts/viem/index.ts +++ b/src/apps/hakuswap/contracts/viem/index.ts @@ -5,9 +5,7 @@ export type { HakuswapFactory } from './HakuswapFactory'; export type { HakuswapMasterchef } from './HakuswapMasterchef'; export type { HakuswapPool } from './HakuswapPool'; -export type { HakuswapXHaku } from './HakuswapXHaku'; export { HakuswapFactory__factory } from './HakuswapFactory'; export { HakuswapMasterchef__factory } from './HakuswapMasterchef'; export { HakuswapPool__factory } from './HakuswapPool'; -export { HakuswapXHaku__factory } from './HakuswapXHaku'; diff --git a/src/apps/hakuswap/hakuswap.module.ts b/src/apps/hakuswap/hakuswap.module.ts index 783da1db7..2899d1a2a 100644 --- a/src/apps/hakuswap/hakuswap.module.ts +++ b/src/apps/hakuswap/hakuswap.module.ts @@ -4,7 +4,6 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { AvalancheHakuswapFarmContractPositionFetcher } from './avalanche/hakuswap.farm.contract-position-fetcher'; import { AvalancheHakuswapPoolTokenFetcher } from './avalanche/hakuswap.pool.token-fetcher'; -import { AvalancheHakuswapXHakuTokenFetcher } from './avalanche/hakuswap.x-haku.token-fetcher'; import { HakuswapViemContractFactory } from './contracts'; @Module({ @@ -12,7 +11,6 @@ import { HakuswapViemContractFactory } from './contracts'; HakuswapViemContractFactory, AvalancheHakuswapFarmContractPositionFetcher, AvalancheHakuswapPoolTokenFetcher, - AvalancheHakuswapXHakuTokenFetcher, ], }) export class HakuswapAppModule extends AbstractApp() {} diff --git a/src/apps/hedgefarm/assets/logo.png b/src/apps/hedgefarm/assets/logo.png deleted file mode 100644 index 11cbf324dd6494b76ce1dfb102e30ce9a9fc7600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 530 zcmZQzV30^FsVqn=%S>Ycg51nB!`#e75c^VYYDpqU35DOJxo&|D#bL0|>{8n6y#9w2pB+hyUr z_JCH~$$oR(w+o+J_hF*iRIR{mA=?sX=q6qD@!60hb>z>=`*(b&#P1H8Wig@V=ihT@ zq<%b}Ahn;T>Bm6^kMGvO`}VD$a_#bzvWZO(cmCyAv}=dL@ee;OlTKccc)lPoF<<7S zZ*c2cep8lLNjaOoB`l7)skD&!QRpE@Zj*gilI~6jluAnTm~C~6wOsAD{ObR`f_X)X zev(g0RTqS$MfrT(c2Z-%`j19YQDY0 z&*`bZ;GXZ&(vA(@DPImIUWf~1%C7gm5ErXH`%k;!C2mh;zONClXU^jg+*4d{FD(E7 DXIZBl diff --git a/src/apps/hedgefarm/avalanche/hedgefarm.alpha-one.token-fetcher.ts b/src/apps/hedgefarm/avalanche/hedgefarm.alpha-one.token-fetcher.ts deleted file mode 100644 index 65c021bef..000000000 --- a/src/apps/hedgefarm/avalanche/hedgefarm.alpha-one.token-fetcher.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Inject } from '@nestjs/common'; -import Axios from 'axios'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { Performance } from '~apps/hedgefarm/avalanche/hedgefarm.types'; -import { CacheOnInterval } from '~cache/cache-on-interval.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetDataPropsParams, GetPricePerShareParams } from '~position/template/app-token.template.types'; - -import { HedgefarmViemContractFactory } from '../contracts'; -import { AlphaOne } from '../contracts/viem'; - -@PositionTemplate() -export class AvalancheHedgefarmAlphaOneTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Alpha One'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(HedgefarmViemContractFactory) protected readonly contractFactory: HedgefarmViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.alphaOne({ address, network: this.network }); - } - - async getAddresses() { - return ['0xde4133f0cfa1a61ba94ec64b6fede4acc1fe929e']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e', network: this.network }]; - } - - async getPricePerShare({ contract }: GetPricePerShareParams) { - return [Number(await contract.read.pricePerShare()) / 10 ** 6]; - } - - async getApy(_params: GetDataPropsParams) { - const performance = await this.getPerformance(); - return performance.averageApy; - } - - @CacheOnInterval({ - key: `studio:hedgefarm:alpha-one:performance`, - timeout: 15 * 60 * 1000, - failOnMissingData: false, - }) - async getPerformance(): Promise { - const url = 'https://api.hedgefarm.workers.dev/alpha1/performance'; - return await Axios.get(url).then(v => v.data); - } -} diff --git a/src/apps/hedgefarm/avalanche/hedgefarm.alpha-two.token-fetcher.ts b/src/apps/hedgefarm/avalanche/hedgefarm.alpha-two.token-fetcher.ts deleted file mode 100644 index efc30f82a..000000000 --- a/src/apps/hedgefarm/avalanche/hedgefarm.alpha-two.token-fetcher.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams } from '~position/template/app-token.template.types'; - -import { HedgefarmViemContractFactory } from '../contracts'; -import { AlphaTwo } from '../contracts/viem'; - -@PositionTemplate() -export class AvalancheHedgefarmAlphaTwoTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Alpha Two'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(HedgefarmViemContractFactory) protected readonly contractFactory: HedgefarmViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.alphaTwo({ address, network: this.network }); - } - - async getAddresses() { - return ['0x3c390b91fc2f248e75cd271e2dabf7dcc955b1a3']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x152b9d0fdc40c096757f570a51e494bd4b943e50', network: this.network }]; - } - - async getPricePerShare({ contract }: GetPricePerShareParams) { - return [Number(await contract.read.lastUpdatedPricePerShare()) / 10 ** 8]; - } -} diff --git a/src/apps/hedgefarm/avalanche/hedgefarm.types.ts b/src/apps/hedgefarm/avalanche/hedgefarm.types.ts deleted file mode 100644 index 8cd049fb3..000000000 --- a/src/apps/hedgefarm/avalanche/hedgefarm.types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type Performance = { - poolName: string; - averageApy: number; -}; diff --git a/src/apps/hedgefarm/contracts/abis/alpha-one.json b/src/apps/hedgefarm/contracts/abis/alpha-one.json deleted file mode 100644 index 77f9288f3..000000000 --- a/src/apps/hedgefarm/contracts/abis/alpha-one.json +++ /dev/null @@ -1,503 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_signer", "type": "address" }, - { "internalType": "address", "name": "_manager", "type": "address" }, - { "internalType": "address", "name": "_feeRecipient", "type": "address" }, - { "internalType": "uint256", "name": "_cap", "type": "uint256" }, - { "internalType": "address", "name": "_stargateLpStaking", "type": "address" }, - { "internalType": "address", "name": "_stargateLpToken", "type": "address" }, - { "internalType": "uint8", "name": "_stargateRouterPoolId", "type": "uint8" }, - { "internalType": "uint8", "name": "_stargateLpStakingPoolId", "type": "uint8" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "Harvest", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" }], - "name": "Start", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" }], - "name": "Stop", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "cap", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "indexToken", "type": "address" }, - { "internalType": "bool", "name": "isLong", "type": "bool" } - ], - "name": "closePosition", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "confirmStargateAsyncRedeem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "confirmTradesClosed", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "currentOpenPositions", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_amount", "type": "uint256" }, - { "internalType": "bytes", "name": "_signature", "type": "bytes" } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeRecipient", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gmxPositionManager", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bool", "name": "autocompound", "type": "bool" }], - "name": "harvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "isEpochRunning", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isSyncWithdrawalPossible", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isTrading", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastEpochStart", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPricePerShare", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastTotalBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "managementFee", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "indexToken", "type": "address" }, - { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, - { "internalType": "bool", "name": "isLong", "type": "bool" } - ], - "name": "openPosition", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "performanceFee", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pricePerShare", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "_cap", "type": "uint256" }], - "name": "setCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_minDeposit", "type": "uint256" }, - { "internalType": "uint256", "name": "_maxDeposit", "type": "uint256" } - ], - "name": "setDepositLimits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_feeRecipient", "type": "address" }], - "name": "setFeeRecipient", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint8", "name": "_managementFee", "type": "uint8" }, - { "internalType": "uint8", "name": "_performanceFee", "type": "uint8" } - ], - "name": "setFees", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_gmxPositionManager", "type": "address" }], - "name": "setGMXPositionManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_manager", "type": "address" }], - "name": "setManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_signer", "type": "address" }], - "name": "setSigner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_swapRouter", "type": "address" }], - "name": "setSwapRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "signer", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stargateLpStaking", - "outputs": [{ "internalType": "contract IStargateLpStaking", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stargateLpStakingPoolId", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stargateLpToken", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stargateRouter", - "outputs": [{ "internalType": "contract IStargateRouter", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stargateRouterPoolId", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "start", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "stgToken", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint16", "name": "fromChainId", "type": "uint16" }], - "name": "stop", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "swapRouter", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tokenDecimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_shares", "type": "uint256" }], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } -] diff --git a/src/apps/hedgefarm/contracts/abis/alpha-two.json b/src/apps/hedgefarm/contracts/abis/alpha-two.json deleted file mode 100644 index 0e841c58e..000000000 --- a/src/apps/hedgefarm/contracts/abis/alpha-two.json +++ /dev/null @@ -1,590 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } - ], - "name": "AdminChanged", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "AllocationChange", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "beacon", "type": "address" }], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "netProfit", "type": "uint256" }], - "name": "Harvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" }], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "implementation", "type": "address" }], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "HARVEST_PROFIT", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MANAGER_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_BPS", - "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PANICOOOR_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UINT_MAX", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "contract IYieldModule", "name": "_module", "type": "address" }], - "name": "addModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "automationRules", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "balanceSnapshot", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "baseToken", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "cap", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes", "name": "checkData", "type": "bytes" }], - "name": "checkUpkeep", - "outputs": [ - { "internalType": "bool", "name": "upkeepNeeded", "type": "bool" }, - { "internalType": "bytes", "name": "performData", "type": "bytes" } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeManager", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "finishPanic", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "_shares", "type": "uint256" }], - "name": "getExecutionFee", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getImplementation", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLastUpdatedModulesBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getModulesBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "role", "type": "bytes32" }], - "name": "getRoleAdmin", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "harvest", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { "internalType": "address", "name": "_feeManager", "type": "address" }, - { "internalType": "address", "name": "_baseToken", "type": "address" }, - { "internalType": "uint256", "name": "_minHarvestThreshold", "type": "uint256" }, - { "internalType": "uint16", "name": "_performanceFee", "type": "uint16" }, - { "internalType": "uint256", "name": "_cap", "type": "uint256" }, - { "internalType": "address", "name": "_manager", "type": "address" }, - { "internalType": "address", "name": "_admin", "type": "address" }, - { "internalType": "uint256", "name": "_minAmount", "type": "uint256" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lastUpdatedPricePerShare", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minAmount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minHarvestThreshold", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "numberOfModules", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "panic", "outputs": [], "stateMutability": "payable", "type": "function" }, - { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes", "name": "performData", "type": "bytes" }], - "name": "performUpkeep", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "performanceFee", - "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pricePerShare", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_moduleId", "type": "uint256" }], - "name": "removeModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "rescueNative", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "address", "name": "token", "type": "address" }], - "name": "rescueToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newAutomationRules", "type": "address" }], - "name": "setAutomationRules", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "newCap", "type": "uint256" }], - "name": "setCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newFeeManager", "type": "address" }], - "name": "setFeeManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "newMinAmount", "type": "uint256" }], - "name": "setMinAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "newMinHarvestThreshold", "type": "uint256" }], - "name": "setMinHarvestThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256[]", "name": "_allocation", "type": "uint256[]" }], - "name": "setModuleAllocation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint16", "name": "newPerformanceFee", "type": "uint16" }], - "name": "setPerformanceFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }], - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "address", "name": "newImplementation", "type": "address" }], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "newImplementation", "type": "address" }, - { "internalType": "bytes", "name": "data", "type": "bytes" } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_shares", "type": "uint256" }], - "name": "withdraw", - "outputs": [ - { "internalType": "uint256", "name": "", "type": "uint256" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "name": "yieldOptions", - "outputs": [ - { "internalType": "contract IYieldModule", "name": "module", "type": "address" }, - { "internalType": "uint256", "name": "allocation", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] diff --git a/src/apps/hedgefarm/contracts/index.ts b/src/apps/hedgefarm/contracts/index.ts deleted file mode 100644 index 5dcfebdf6..000000000 --- a/src/apps/hedgefarm/contracts/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * from './viem.contract-factory'; diff --git a/src/apps/hedgefarm/contracts/viem.contract-factory.ts b/src/apps/hedgefarm/contracts/viem.contract-factory.ts deleted file mode 100644 index 533aa0891..000000000 --- a/src/apps/hedgefarm/contracts/viem.contract-factory.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { Network } from '~types/network.interface'; - -import { AlphaOne__factory, AlphaTwo__factory } from './viem'; - -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class HedgefarmViemContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - - alphaOne({ address, network }: ContractOpts) { - return AlphaOne__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - alphaTwo({ address, network }: ContractOpts) { - return AlphaTwo__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } -} diff --git a/src/apps/hedgefarm/contracts/viem/AlphaOne.ts b/src/apps/hedgefarm/contracts/viem/AlphaOne.ts deleted file mode 100644 index 47e510012..000000000 --- a/src/apps/hedgefarm/contracts/viem/AlphaOne.ts +++ /dev/null @@ -1,1060 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const alphaOneAbi = [ - { - inputs: [ - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'address', - name: '_token', - type: 'address', - }, - { - internalType: 'address', - name: '_signer', - type: 'address', - }, - { - internalType: 'address', - name: '_manager', - type: 'address', - }, - { - internalType: 'address', - name: '_feeRecipient', - type: 'address', - }, - { - internalType: 'uint256', - name: '_cap', - type: 'uint256', - }, - { - internalType: 'address', - name: '_stargateLpStaking', - type: 'address', - }, - { - internalType: 'address', - name: '_stargateLpToken', - type: 'address', - }, - { - internalType: 'uint8', - name: '_stargateRouterPoolId', - type: 'uint8', - }, - { - internalType: 'uint8', - name: '_stargateLpStakingPoolId', - type: 'uint8', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'Harvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'totalAmount', - type: 'uint256', - }, - ], - name: 'Start', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'totalAmount', - type: 'uint256', - }, - ], - name: 'Stop', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'cap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'indexToken', - type: 'address', - }, - { - internalType: 'bool', - name: 'isLong', - type: 'bool', - }, - ], - name: 'closePosition', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'confirmStargateAsyncRedeem', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'confirmTradesClosed', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'currentOpenPositions', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '_signature', - type: 'bytes', - }, - ], - name: 'deposit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'feeRecipient', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'gmxPositionManager', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bool', - name: 'autocompound', - type: 'bool', - }, - ], - name: 'harvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'isEpochRunning', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'isSyncWithdrawalPossible', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'isTrading', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'lastEpochStart', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'lastPricePerShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'lastTotalBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'managementFee', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'manager', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'indexToken', - type: 'address', - }, - { - internalType: 'uint256', - name: 'tokenAmount', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'isLong', - type: 'bool', - }, - ], - name: 'openPosition', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'performanceFee', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pricePerShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_cap', - type: 'uint256', - }, - ], - name: 'setCap', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_minDeposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_maxDeposit', - type: 'uint256', - }, - ], - name: 'setDepositLimits', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_feeRecipient', - type: 'address', - }, - ], - name: 'setFeeRecipient', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint8', - name: '_managementFee', - type: 'uint8', - }, - { - internalType: 'uint8', - name: '_performanceFee', - type: 'uint8', - }, - ], - name: 'setFees', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_gmxPositionManager', - type: 'address', - }, - ], - name: 'setGMXPositionManager', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_manager', - type: 'address', - }, - ], - name: 'setManager', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_signer', - type: 'address', - }, - ], - name: 'setSigner', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_swapRouter', - type: 'address', - }, - ], - name: 'setSwapRouter', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'signer', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'stargateLpStaking', - outputs: [ - { - internalType: 'contract IStargateLpStaking', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'stargateLpStakingPoolId', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'stargateLpToken', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'stargateRouter', - outputs: [ - { - internalType: 'contract IStargateRouter', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'stargateRouterPoolId', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'start', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'stgToken', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint16', - name: 'fromChainId', - type: 'uint16', - }, - ], - name: 'stop', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'swapRouter', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'tokenDecimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withdrawAll', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type AlphaOne = typeof alphaOneAbi; -export type AlphaOneContract = GetContractReturnType; - -export class AlphaOne__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: alphaOneAbi, publicClient: client }); - } -} diff --git a/src/apps/hedgefarm/contracts/viem/AlphaTwo.ts b/src/apps/hedgefarm/contracts/viem/AlphaTwo.ts deleted file mode 100644 index 284f1f408..000000000 --- a/src/apps/hedgefarm/contracts/viem/AlphaTwo.ts +++ /dev/null @@ -1,1298 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const alphaTwoAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'previousAdmin', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newAdmin', - type: 'address', - }, - ], - name: 'AdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'AllocationChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'beacon', - type: 'address', - }, - ], - name: 'BeaconUpgraded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'netProfit', - type: 'uint256', - }, - ], - name: 'Harvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint8', - name: 'version', - type: 'uint8', - }, - ], - name: 'Initialized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'previousAdminRole', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'newAdminRole', - type: 'bytes32', - }, - ], - name: 'RoleAdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleGranted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleRevoked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'implementation', - type: 'address', - }, - ], - name: 'Upgraded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - inputs: [], - name: 'DEFAULT_ADMIN_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'HARVEST_PROFIT', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MANAGER_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_BPS', - outputs: [ - { - internalType: 'uint16', - name: '', - type: 'uint16', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'PANICOOOR_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'UINT_MAX', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IYieldModule', - name: '_module', - type: 'address', - }, - ], - name: 'addModule', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'automationRules', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'balanceSnapshot', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'baseToken', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'cap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'checkData', - type: 'bytes', - }, - ], - name: 'checkUpkeep', - outputs: [ - { - internalType: 'bool', - name: 'upkeepNeeded', - type: 'bool', - }, - { - internalType: 'bytes', - name: 'performData', - type: 'bytes', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'feeManager', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'finishPanic', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - ], - name: 'getExecutionFee', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getImplementation', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getLastUpdatedModulesBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getModulesBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - ], - name: 'getRoleAdmin', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'grantRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'harvest', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'hasRole', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'address', - name: '_feeManager', - type: 'address', - }, - { - internalType: 'address', - name: '_baseToken', - type: 'address', - }, - { - internalType: 'uint256', - name: '_minHarvestThreshold', - type: 'uint256', - }, - { - internalType: 'uint16', - name: '_performanceFee', - type: 'uint16', - }, - { - internalType: 'uint256', - name: '_cap', - type: 'uint256', - }, - { - internalType: 'address', - name: '_manager', - type: 'address', - }, - { - internalType: 'address', - name: '_admin', - type: 'address', - }, - { - internalType: 'uint256', - name: '_minAmount', - type: 'uint256', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'lastUpdatedPricePerShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minAmount', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minHarvestThreshold', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'numberOfModules', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'panic', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes', - name: 'performData', - type: 'bytes', - }, - ], - name: 'performUpkeep', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'performanceFee', - outputs: [ - { - internalType: 'uint16', - name: '', - type: 'uint16', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pricePerShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'proxiableUUID', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_moduleId', - type: 'uint256', - }, - ], - name: 'removeModule', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'renounceRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'rescueNative', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - ], - name: 'rescueToken', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'revokeRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newAutomationRules', - type: 'address', - }, - ], - name: 'setAutomationRules', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'newCap', - type: 'uint256', - }, - ], - name: 'setCap', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newFeeManager', - type: 'address', - }, - ], - name: 'setFeeManager', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'newMinAmount', - type: 'uint256', - }, - ], - name: 'setMinAmount', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'newMinHarvestThreshold', - type: 'uint256', - }, - ], - name: 'setMinHarvestThreshold', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256[]', - name: '_allocation', - type: 'uint256[]', - }, - ], - name: 'setModuleAllocation', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint16', - name: 'newPerformanceFee', - type: 'uint16', - }, - ], - name: 'setPerformanceFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceId', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'unpause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newImplementation', - type: 'address', - }, - ], - name: 'upgradeTo', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newImplementation', - type: 'address', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'upgradeToAndCall', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'yieldOptions', - outputs: [ - { - internalType: 'contract IYieldModule', - name: 'module', - type: 'address', - }, - { - internalType: 'uint256', - name: 'allocation', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - stateMutability: 'payable', - type: 'receive', - }, -] as const; - -export type AlphaTwo = typeof alphaTwoAbi; -export type AlphaTwoContract = GetContractReturnType; - -export class AlphaTwo__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: alphaTwoAbi, publicClient: client }); - } -} diff --git a/src/apps/hedgefarm/contracts/viem/index.ts b/src/apps/hedgefarm/contracts/viem/index.ts deleted file mode 100644 index 8344cc4e9..000000000 --- a/src/apps/hedgefarm/contracts/viem/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { AlphaOne } from './AlphaOne'; -export type { AlphaTwo } from './AlphaTwo'; - -export { AlphaOne__factory } from './AlphaOne'; -export { AlphaTwo__factory } from './AlphaTwo'; diff --git a/src/apps/hedgefarm/hedgefarm.module.ts b/src/apps/hedgefarm/hedgefarm.module.ts deleted file mode 100644 index aac95a759..000000000 --- a/src/apps/hedgefarm/hedgefarm.module.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { AvalancheHedgefarmAlphaOneTokenFetcher } from './avalanche/hedgefarm.alpha-one.token-fetcher'; -import { AvalancheHedgefarmAlphaTwoTokenFetcher } from './avalanche/hedgefarm.alpha-two.token-fetcher'; -import { HedgefarmViemContractFactory } from './contracts'; - -@Module({ - providers: [ - AvalancheHedgefarmAlphaOneTokenFetcher, - AvalancheHedgefarmAlphaTwoTokenFetcher, - HedgefarmViemContractFactory, - ], -}) -export class HedgefarmAppModule extends AbstractApp() {} diff --git a/src/apps/illuvium/ethereum/illuvium.s-ilv2.token-fetcher.ts b/src/apps/illuvium/ethereum/illuvium.s-ilv2.token-fetcher.ts deleted file mode 100644 index fbc4c9e8c..000000000 --- a/src/apps/illuvium/ethereum/illuvium.s-ilv2.token-fetcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { IlluviumViemContractFactory } from '../contracts'; -import { IlluviumSIlv2 } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumIlluviumSIlv2TokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'sILV2'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(IlluviumViemContractFactory) protected readonly contractFactory: IlluviumViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.illuviumSIlv2({ network: this.network, address }); - } - - async getAddresses() { - return ['0x7e77dcb127f99ece88230a64db8d595f31f1b068']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x767fe9edc9e0df98e07454847909b5e959d7ca0e', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/illuvium/illuvium.module.ts b/src/apps/illuvium/illuvium.module.ts index 4b3c41f0c..5c7de4c30 100644 --- a/src/apps/illuvium/illuvium.module.ts +++ b/src/apps/illuvium/illuvium.module.ts @@ -5,14 +5,12 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { IlluviumViemContractFactory } from './contracts'; import { EthereumIlluviumFarmV2ContractPositionFetcher } from './ethereum/illuvium.farm-v2.contract-position-fetcher'; import { EthereumIlluviumFarmContractPositionFetcher } from './ethereum/illuvium.farm.contract-position-fetcher'; -import { EthereumIlluviumSIlv2TokenFetcher } from './ethereum/illuvium.s-ilv2.token-fetcher'; @Module({ providers: [ IlluviumViemContractFactory, EthereumIlluviumFarmContractPositionFetcher, EthereumIlluviumFarmV2ContractPositionFetcher, - EthereumIlluviumSIlv2TokenFetcher, ], }) export class IlluviumAppModule extends AbstractApp() {} diff --git a/src/apps/inverse/ethereum/inverse.dca-vault.token-fetcher.ts b/src/apps/inverse/ethereum/inverse.dca-vault.token-fetcher.ts deleted file mode 100644 index b4cd5c968..000000000 --- a/src/apps/inverse/ethereum/inverse.dca-vault.token-fetcher.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { InverseViemContractFactory } from '../contracts'; -import { InverseDcaVaultToken } from '../contracts/viem'; - -export type InverseDcaVaultTokenDataProps = { - targetAddress: string; -}; - -@PositionTemplate() -export class EthereumInverseDcaVaultTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'DCA Vaults'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(InverseViemContractFactory) protected readonly contractFactory: InverseViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.inverseDcaVaultToken({ address, network: this.network }); - } - - async getAddresses() { - return [ - '0x89ec5df87a5186a0f0fa8cb84edd815de6047357', // USDC to ETH vault - '0xc8f2e91dc9d198eded1b2778f6f2a7fd5bbeac34', // DAI to WBTC vault - '0x41d079ce7282d49bf4888c71b5d9e4a02c371f9b', // DAI to YFI vault - '0x2dcdca085af2e258654e47204e483127e0d8b277', // DAI to ETH vault - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.underlying(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/inverse/inverse.module.ts b/src/apps/inverse/inverse.module.ts index fab7dd824..a0be668c3 100644 --- a/src/apps/inverse/inverse.module.ts +++ b/src/apps/inverse/inverse.module.ts @@ -6,7 +6,6 @@ import { InverseViemContractFactory } from './contracts'; import { EthereumInverseBorrowContractPositionFetcher } from './ethereum/inverse.borrow.contract-position-fetcher'; import { EthereumInverseClaimableContractPositionFetcher } from './ethereum/inverse.claimable.contract-position-fetcher'; import { EthereumInverseDcaVaultDividendContractPositionFetcher } from './ethereum/inverse.dca-vault-dividend.contract-position-fetcher'; -import { EthereumInverseDcaVaultTokenFetcher } from './ethereum/inverse.dca-vault.token-fetcher'; import { EthereumInverseFarmContractPositionFetcher } from './ethereum/inverse.farm.contract-position-fetcher'; import { EthereumInverseSupplyTokenFetcher } from './ethereum/inverse.supply.token-fetcher'; @@ -15,7 +14,6 @@ import { EthereumInverseSupplyTokenFetcher } from './ethereum/inverse.supply.tok InverseViemContractFactory, EthereumInverseBorrowContractPositionFetcher, EthereumInverseClaimableContractPositionFetcher, - EthereumInverseDcaVaultTokenFetcher, EthereumInverseDcaVaultDividendContractPositionFetcher, EthereumInverseFarmContractPositionFetcher, EthereumInverseSupplyTokenFetcher, diff --git a/src/apps/keeper/ethereum/keeper.redeemable.token-fetcher.ts b/src/apps/keeper/ethereum/keeper.redeemable.token-fetcher.ts deleted file mode 100644 index 1c025b9fb..000000000 --- a/src/apps/keeper/ethereum/keeper.redeemable.token-fetcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { KeeperViemContractFactory } from '../contracts'; -import { KeeperRedeemableToken } from '../contracts/viem/KeeperRedeemableToken'; - -@PositionTemplate() -export class EthereumKeeperRedeemableTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'rKP3R'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(KeeperViemContractFactory) protected readonly contractFactory: KeeperViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.keeperRedeemableToken({ address, network: this.network }); - } - - async getAddresses() { - return ['0xedb67ee1b171c4ec66e6c10ec43edbba20fae8e9']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x1ceb5cb57c4d4e2b2433641b95dd330a33185a44', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/keeper/keeper.module.ts b/src/apps/keeper/keeper.module.ts index 1c372f33c..381998a98 100644 --- a/src/apps/keeper/keeper.module.ts +++ b/src/apps/keeper/keeper.module.ts @@ -7,7 +7,6 @@ import { KeeperViemContractFactory } from './contracts'; import { EthereumKeeperBondContractPositionFetcher } from './ethereum/keeper.bond.contract-position-fetcher'; import { EthereumKeeperJobContractPositionFetcher } from './ethereum/keeper.job.contract-position-fetcher'; import { EthereumKeeperKlpTokenFetcher } from './ethereum/keeper.klp.token-fetcher'; -import { EthereumKeeperRedeemableTokenFetcher } from './ethereum/keeper.redeemable.token-fetcher'; import { EthereumKeeperUnbondContractPositionFetcher } from './ethereum/keeper.unbond.contract-position-fetcher'; import { EthereumKeeperVestContractPositionFetcher } from './ethereum/keeper.vest.contract-position-fetcher'; @@ -19,7 +18,6 @@ import { EthereumKeeperVestContractPositionFetcher } from './ethereum/keeper.ves EthereumKeeperBondContractPositionFetcher, EthereumKeeperJobContractPositionFetcher, EthereumKeeperKlpTokenFetcher, - EthereumKeeperRedeemableTokenFetcher, EthereumKeeperVestContractPositionFetcher, ], }) diff --git a/src/apps/lido/assets/logo.png b/src/apps/lido/assets/logo.png deleted file mode 100644 index 67fe66a579eb7023ba775ccfc4507d54d211209d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4130 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 diff --git a/src/apps/lido/contracts/abis/lido-steth-eth-oracle.json b/src/apps/lido/contracts/abis/lido-steth-eth-oracle.json deleted file mode 100644 index 719b78c6c..000000000 --- a/src/apps/lido/contracts/abis/lido-steth-eth-oracle.json +++ /dev/null @@ -1,227 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_aggregator", "type": "address" }, - { "internalType": "address", "name": "_accessController", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "int256", "name": "current", "type": "int256" }, - { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "updatedAt", "type": "uint256" } - ], - "name": "AnswerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "uint256", "name": "roundId", "type": "uint256" }, - { "indexed": true, "internalType": "address", "name": "startedBy", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "startedAt", "type": "uint256" } - ], - "name": "NewRound", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" } - ], - "name": "OwnershipTransferRequested", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "accessController", - "outputs": [{ "internalType": "contract AccessControllerInterface", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aggregator", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_aggregator", "type": "address" }], - "name": "confirmAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "description", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_roundId", "type": "uint256" }], - "name": "getAnswer", - "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint80", "name": "_roundId", "type": "uint80" }], - "name": "getRoundData", - "outputs": [ - { "internalType": "uint80", "name": "roundId", "type": "uint80" }, - { "internalType": "int256", "name": "answer", "type": "int256" }, - { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, - { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, - { "internalType": "uint80", "name": "answeredInRound", "type": "uint80" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_roundId", "type": "uint256" }], - "name": "getTimestamp", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestAnswer", - "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestRound", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestRoundData", - "outputs": [ - { "internalType": "uint80", "name": "roundId", "type": "uint80" }, - { "internalType": "int256", "name": "answer", "type": "int256" }, - { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, - { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, - { "internalType": "uint80", "name": "answeredInRound", "type": "uint80" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestTimestamp", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], - "name": "phaseAggregators", - "outputs": [{ "internalType": "contract AggregatorV2V3Interface", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "phaseId", - "outputs": [{ "internalType": "uint16", "name": "", "type": "uint16" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_aggregator", "type": "address" }], - "name": "proposeAggregator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "proposedAggregator", - "outputs": [{ "internalType": "contract AggregatorV2V3Interface", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint80", "name": "_roundId", "type": "uint80" }], - "name": "proposedGetRoundData", - "outputs": [ - { "internalType": "uint80", "name": "roundId", "type": "uint80" }, - { "internalType": "int256", "name": "answer", "type": "int256" }, - { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, - { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, - { "internalType": "uint80", "name": "answeredInRound", "type": "uint80" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposedLatestRoundData", - "outputs": [ - { "internalType": "uint80", "name": "roundId", "type": "uint80" }, - { "internalType": "int256", "name": "answer", "type": "int256" }, - { "internalType": "uint256", "name": "startedAt", "type": "uint256" }, - { "internalType": "uint256", "name": "updatedAt", "type": "uint256" }, - { "internalType": "uint80", "name": "answeredInRound", "type": "uint80" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_accessController", "type": "address" }], - "name": "setController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_to", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/lido/contracts/abis/lido-steth.json b/src/apps/lido/contracts/abis/lido-steth.json deleted file mode 100644 index 0db94406c..000000000 --- a/src/apps/lido/contracts/abis/lido-steth.json +++ /dev/null @@ -1,731 +0,0 @@ -[ - { - "constant": false, - "inputs": [], - "name": "resume", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [{ "name": "", "type": "string" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "stop", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "hasInitialized", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_spender", "type": "address" }, - { "name": "_amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "depositContract", "type": "address" }, - { "name": "_oracle", "type": "address" }, - { "name": "_operators", "type": "address" }, - { "name": "_treasury", "type": "address" }, - { "name": "_insuranceFund", "type": "address" } - ], - "name": "initialize", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getInsuranceFund", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "name": "_ethAmount", "type": "uint256" }], - "name": "getSharesByPooledEth", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_sender", "type": "address" }, - { "name": "_recipient", "type": "address" }, - { "name": "_amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getOperators", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "name": "_script", "type": "bytes" }], - "name": "getEVMScriptExecutor", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [{ "name": "", "type": "uint8" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getRecoveryVault", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "DEPOSIT_ROLE", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "DEPOSIT_SIZE", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getTotalPooledEther", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PAUSE_ROLE", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_spender", "type": "address" }, - { "name": "_addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getTreasury", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "SET_ORACLE", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isStopped", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MANAGE_WITHDRAWAL_KEY", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getBufferedEther", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "SIGNATURE_LENGTH", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getWithdrawalCredentials", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "name": "_account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getFeeDistribution", - "outputs": [ - { "name": "treasuryFeeBasisPoints", "type": "uint16" }, - { "name": "insuranceFeeBasisPoints", "type": "uint16" }, - { "name": "operatorsFeeBasisPoints", "type": "uint16" } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "name": "_sharesAmount", "type": "uint256" }], - "name": "getPooledEthByShares", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_oracle", "type": "address" }], - "name": "setOracle", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "name": "token", "type": "address" }], - "name": "allowRecoverability", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "appId", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getOracle", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getInitializationBlock", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_treasuryFeeBasisPoints", "type": "uint16" }, - { "name": "_insuranceFeeBasisPoints", "type": "uint16" }, - { "name": "_operatorsFeeBasisPoints", "type": "uint16" } - ], - "name": "setFeeDistribution", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_feeBasisPoints", "type": "uint16" }], - "name": "setFee", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_maxDeposits", "type": "uint256" }], - "name": "depositBufferedEther", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [{ "name": "", "type": "string" }], - "payable": false, - "stateMutability": "pure", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MANAGE_FEE", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_token", "type": "address" }], - "name": "transferToVault", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "SET_TREASURY", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { "name": "_sender", "type": "address" }, - { "name": "_role", "type": "bytes32" }, - { "name": "_params", "type": "uint256[]" } - ], - "name": "canPerform", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_referral", "type": "address" }], - "name": "submit", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "WITHDRAWAL_CREDENTIALS_LENGTH", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_spender", "type": "address" }, - { "name": "_subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getEVMScriptRegistry", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "PUBKEY_LENGTH", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_amount", "type": "uint256" }, - { "name": "_pubkeyHash", "type": "bytes32" } - ], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_recipient", "type": "address" }, - { "name": "_amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getDepositContract", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getBeaconStat", - "outputs": [ - { "name": "depositedValidators", "type": "uint256" }, - { "name": "beaconValidators", "type": "uint256" }, - { "name": "beaconBalance", "type": "uint256" } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "BURN_ROLE", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_insuranceFund", "type": "address" }], - "name": "setInsuranceFund", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getFee", - "outputs": [{ "name": "feeBasisPoints", "type": "uint16" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "SET_INSURANCE_FUND", - "outputs": [{ "name": "", "type": "bytes32" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "kernel", - "outputs": [{ "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getTotalShares", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { "name": "_owner", "type": "address" }, - { "name": "_spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "isPetrified", - "outputs": [{ "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_withdrawalCredentials", "type": "bytes32" }], - "name": "setWithdrawalCredentials", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "depositBufferedEther", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_account", "type": "address" }, - { "name": "_sharesAmount", "type": "uint256" } - ], - "name": "burnShares", - "outputs": [{ "name": "newTotalShares", "type": "uint256" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "name": "_treasury", "type": "address" }], - "name": "setTreasury", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "name": "_beaconValidators", "type": "uint256" }, - { "name": "_beaconBalance", "type": "uint256" } - ], - "name": "pushBeacon", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "name": "_account", "type": "address" }], - "name": "sharesOf", - "outputs": [{ "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { "payable": true, "stateMutability": "payable", "type": "fallback" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "executor", "type": "address" }, - { "indexed": false, "name": "script", "type": "bytes" }, - { "indexed": false, "name": "input", "type": "bytes" }, - { "indexed": false, "name": "returnData", "type": "bytes" } - ], - "name": "ScriptResult", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "vault", "type": "address" }, - { "indexed": true, "name": "token", "type": "address" }, - { "indexed": false, "name": "amount", "type": "uint256" } - ], - "name": "RecoverToVault", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "Stopped", "type": "event" }, - { "anonymous": false, "inputs": [], "name": "Resumed", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "from", "type": "address" }, - { "indexed": true, "name": "to", "type": "address" }, - { "indexed": false, "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "owner", "type": "address" }, - { "indexed": true, "name": "spender", "type": "address" }, - { "indexed": false, "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "name": "feeBasisPoints", "type": "uint16" }], - "name": "FeeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "name": "treasuryFeeBasisPoints", "type": "uint16" }, - { "indexed": false, "name": "insuranceFeeBasisPoints", "type": "uint16" }, - { "indexed": false, "name": "operatorsFeeBasisPoints", "type": "uint16" } - ], - "name": "FeeDistributionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "name": "withdrawalCredentials", "type": "bytes32" }], - "name": "WithdrawalCredentialsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "sender", "type": "address" }, - { "indexed": false, "name": "amount", "type": "uint256" }, - { "indexed": false, "name": "referral", "type": "address" } - ], - "name": "Submitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "name": "amount", "type": "uint256" }], - "name": "Unbuffered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "name": "sender", "type": "address" }, - { "indexed": false, "name": "tokenAmount", "type": "uint256" }, - { "indexed": false, "name": "sentFromBuffer", "type": "uint256" }, - { "indexed": true, "name": "pubkeyHash", "type": "bytes32" }, - { "indexed": false, "name": "etherAmount", "type": "uint256" } - ], - "name": "Withdrawal", - "type": "event" - } -] diff --git a/src/apps/lido/contracts/abis/lido-stksm.json b/src/apps/lido/contracts/abis/lido-stksm.json deleted file mode 100644 index eb06032a6..000000000 --- a/src/apps/lido/contracts/abis/lido-stksm.json +++ /dev/null @@ -1,579 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Claimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Deposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "uint16", "name": "fee", "type": "uint16" }, - { "indexed": false, "internalType": "uint16", "name": "feeOperatorsBP", "type": "uint16" }, - { "indexed": false, "internalType": "uint16", "name": "feeTreasuryBP", "type": "uint16" }, - { "indexed": false, "internalType": "uint16", "name": "feeDevelopersBP", "type": "uint16" } - ], - "name": "FeeSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "addr", "type": "address" }, - { "indexed": false, "internalType": "bytes32", "name": "stashAccount", "type": "bytes32" }, - { "indexed": false, "internalType": "bytes32", "name": "controllerAccount", "type": "bytes32" } - ], - "name": "LedgerAdd", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "addr", "type": "address" }], - "name": "LedgerDisable", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "addr", "type": "address" }], - "name": "LedgerPaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "addr", "type": "address" }], - "name": "LedgerRemove", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "addr", "type": "address" }], - "name": "LedgerResumed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "ledger", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "losses", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" } - ], - "name": "Losses", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Redeemed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "userAddr", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "referralAddr", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Referral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "ledger", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "rewards", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "balance", "type": "uint256" } - ], - "name": "Rewards", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "AUTH_MANAGER", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LEDGER_BEACON", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_ALLOWABLE_DIFFERENCE", - "outputs": [{ "internalType": "uint128", "name": "", "type": "uint128" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ORACLE_MASTER", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "_stashAccount", "type": "bytes32" }, - { "internalType": "bytes32", "name": "_controllerAccount", "type": "bytes32" }, - { "internalType": "uint16", "name": "_index", "type": "uint16" } - ], - "name": "addLedger", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_owner", "type": "address" }, - { "internalType": "address", "name": "_spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_spender", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bufferedDeposits", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bufferedRedeems", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "claimUnbonded", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_spender", "type": "address" }, - { "internalType": "uint256", "name": "_subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_amount", "type": "uint256" }, - { "internalType": "address", "name": "_referral", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositCap", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_ledgerAddress", "type": "address" }], - "name": "disableLedger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_totalLosses", "type": "uint256" }, - { "internalType": "uint256", "name": "_ledgerBalance", "type": "uint256" } - ], - "name": "distributeLosses", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_totalRewards", "type": "uint256" }, - { "internalType": "uint256", "name": "_ledgerBalance", "type": "uint256" } - ], - "name": "distributeRewards", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_ledgerAddress", "type": "address" }], - "name": "emergencyPauseLedger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "_stashAccount", "type": "bytes32" }], - "name": "findLedger", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "flushStakes", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "fundRaisedBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLedgerAddresses", - "outputs": [{ "internalType": "address[]", "name": "", "type": "address[]" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_sharesAmount", "type": "uint256" }], - "name": "getPooledKSMByShares", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "getSharesByPooledKSM", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStashAccounts", - "outputs": [{ "internalType": "bytes32[]", "name": "", "type": "bytes32[]" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTotalPooledKSM", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTotalShares", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_holder", "type": "address" }], - "name": "getUnbonded", - "outputs": [ - { "internalType": "uint256", "name": "waiting", "type": "uint256" }, - { "internalType": "uint256", "name": "unbonded", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_spender", "type": "address" }, - { "internalType": "uint256", "name": "_addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_authManager", "type": "address" }, - { "internalType": "address", "name": "_vKSM", "type": "address" }, - { "internalType": "address", "name": "_controller", "type": "address" }, - { "internalType": "address", "name": "_developers", "type": "address" }, - { "internalType": "address", "name": "_treasury", "type": "address" }, - { "internalType": "address", "name": "_oracleMaster", "type": "address" }, - { "internalType": "address", "name": "_withdrawal", "type": "address" }, - { "internalType": "uint256", "name": "_depositCap", "type": "uint256" }, - { "internalType": "uint128", "name": "_maxAllowableDifference", "type": "uint128" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "ledgerBorrow", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "ledgerStake", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32[]", "name": "_stashAccounts", "type": "bytes32[]" }, - { "internalType": "bytes32[][]", "name": "_validators", "type": "bytes32[][]" } - ], - "name": "nominateBatch", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "redeem", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_ledgerAddress", "type": "address" }], - "name": "removeLedger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "resume", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "address", "name": "_ledgerAddress", "type": "address" }], - "name": "resumeLedger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_depositCap", "type": "uint256" }], - "name": "setDepositCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_developers", "type": "address" }], - "name": "setDevelopers", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint16", "name": "_feeOperators", "type": "uint16" }, - { "internalType": "uint16", "name": "_feeTreasury", "type": "uint16" }, - { "internalType": "uint16", "name": "_feeDevelopers", "type": "uint16" } - ], - "name": "setFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_ledgerBeacon", "type": "address" }], - "name": "setLedgerBeacon", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_ledgerFactory", "type": "address" }], - "name": "setLedgerFactory", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint128", "name": "_maxAllowableDifference", "type": "uint128" }], - "name": "setMaxAllowableDifference", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { "internalType": "uint16", "name": "maxValidatorsPerLedger", "type": "uint16" }, - { "internalType": "uint128", "name": "minNominatorBalance", "type": "uint128" }, - { "internalType": "uint128", "name": "ledgerMinimumActiveBalance", "type": "uint128" }, - { "internalType": "uint256", "name": "maxUnlockingChunks", "type": "uint256" } - ], - "internalType": "struct Types.RelaySpec", - "name": "_relaySpec", - "type": "tuple" - } - ], - "name": "setRelaySpec", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_treasury", "type": "address" }], - "name": "setTreasury", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_account", "type": "address" }], - "name": "sharesOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_recipient", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_sender", "type": "address" }, - { "internalType": "address", "name": "_recipient", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_amount", "type": "uint256" }, - { "internalType": "uint256", "name": "_excess", "type": "uint256" } - ], - "name": "transferFromLedger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "transferToLedger", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/lido/contracts/abis/lido-wsteth.json b/src/apps/lido/contracts/abis/lido-wsteth.json deleted file mode 100644 index 9e6b994ff..000000000 --- a/src/apps/lido/contracts/abis/lido-wsteth.json +++ /dev/null @@ -1,202 +0,0 @@ -[ - { - "inputs": [{ "internalType": "contract IStETH", "name": "_stETH", "type": "address" }], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_wstETHAmount", "type": "uint256" }], - "name": "getStETHByWstETH", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_stETHAmount", "type": "uint256" }], - "name": "getWstETHByStETH", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "nonces", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint256", "name": "deadline", "type": "uint256" }, - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stETH", - "outputs": [{ "internalType": "contract IStETH", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stEthPerToken", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tokensPerStEth", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_wstETHAmount", "type": "uint256" }], - "name": "unwrap", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_stETHAmount", "type": "uint256" }], - "name": "wrap", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] diff --git a/src/apps/lido/contracts/index.ts b/src/apps/lido/contracts/index.ts deleted file mode 100644 index 5dcfebdf6..000000000 --- a/src/apps/lido/contracts/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * from './viem.contract-factory'; diff --git a/src/apps/lido/contracts/viem.contract-factory.ts b/src/apps/lido/contracts/viem.contract-factory.ts deleted file mode 100644 index 88cef9cdc..000000000 --- a/src/apps/lido/contracts/viem.contract-factory.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { Network } from '~types/network.interface'; - -import { LidoSteth__factory, LidoStethEthOracle__factory, LidoStksm__factory, LidoWsteth__factory } from './viem'; - -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class LidoViemContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - - lidoSteth({ address, network }: ContractOpts) { - return LidoSteth__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - lidoStethEthOracle({ address, network }: ContractOpts) { - return LidoStethEthOracle__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - lidoStksm({ address, network }: ContractOpts) { - return LidoStksm__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - lidoWsteth({ address, network }: ContractOpts) { - return LidoWsteth__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } -} diff --git a/src/apps/lido/contracts/viem/LidoSteth.ts b/src/apps/lido/contracts/viem/LidoSteth.ts deleted file mode 100644 index f793f0b8e..000000000 --- a/src/apps/lido/contracts/viem/LidoSteth.ts +++ /dev/null @@ -1,1296 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const lidoStethAbi = [ - { - constant: false, - inputs: [], - name: 'resume', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'stop', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'hasInitialized', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address', - }, - { - name: '_amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: 'depositContract', - type: 'address', - }, - { - name: '_oracle', - type: 'address', - }, - { - name: '_operators', - type: 'address', - }, - { - name: '_treasury', - type: 'address', - }, - { - name: '_insuranceFund', - type: 'address', - }, - ], - name: 'initialize', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getInsuranceFund', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_ethAmount', - type: 'uint256', - }, - ], - name: 'getSharesByPooledEth', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_sender', - type: 'address', - }, - { - name: '_recipient', - type: 'address', - }, - { - name: '_amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getOperators', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_script', - type: 'bytes', - }, - ], - name: 'getEVMScriptExecutor', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getRecoveryVault', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'DEPOSIT_ROLE', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'DEPOSIT_SIZE', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getTotalPooledEther', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'PAUSE_ROLE', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address', - }, - { - name: '_addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getTreasury', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'SET_ORACLE', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'isStopped', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MANAGE_WITHDRAWAL_KEY', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getBufferedEther', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'SIGNATURE_LENGTH', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getWithdrawalCredentials', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getFeeDistribution', - outputs: [ - { - name: 'treasuryFeeBasisPoints', - type: 'uint16', - }, - { - name: 'insuranceFeeBasisPoints', - type: 'uint16', - }, - { - name: 'operatorsFeeBasisPoints', - type: 'uint16', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_sharesAmount', - type: 'uint256', - }, - ], - name: 'getPooledEthByShares', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_oracle', - type: 'address', - }, - ], - name: 'setOracle', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: 'token', - type: 'address', - }, - ], - name: 'allowRecoverability', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'appId', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getOracle', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getInitializationBlock', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_treasuryFeeBasisPoints', - type: 'uint16', - }, - { - name: '_insuranceFeeBasisPoints', - type: 'uint16', - }, - { - name: '_operatorsFeeBasisPoints', - type: 'uint16', - }, - ], - name: 'setFeeDistribution', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_feeBasisPoints', - type: 'uint16', - }, - ], - name: 'setFee', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_maxDeposits', - type: 'uint256', - }, - ], - name: 'depositBufferedEther', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'pure', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'MANAGE_FEE', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_token', - type: 'address', - }, - ], - name: 'transferToVault', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'SET_TREASURY', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_sender', - type: 'address', - }, - { - name: '_role', - type: 'bytes32', - }, - { - name: '_params', - type: 'uint256[]', - }, - ], - name: 'canPerform', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_referral', - type: 'address', - }, - ], - name: 'submit', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: true, - stateMutability: 'payable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'WITHDRAWAL_CREDENTIALS_LENGTH', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_spender', - type: 'address', - }, - { - name: '_subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getEVMScriptRegistry', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'PUBKEY_LENGTH', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_amount', - type: 'uint256', - }, - { - name: '_pubkeyHash', - type: 'bytes32', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_recipient', - type: 'address', - }, - { - name: '_amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getDepositContract', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getBeaconStat', - outputs: [ - { - name: 'depositedValidators', - type: 'uint256', - }, - { - name: 'beaconValidators', - type: 'uint256', - }, - { - name: 'beaconBalance', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'BURN_ROLE', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_insuranceFund', - type: 'address', - }, - ], - name: 'setInsuranceFund', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getFee', - outputs: [ - { - name: 'feeBasisPoints', - type: 'uint16', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'SET_INSURANCE_FUND', - outputs: [ - { - name: '', - type: 'bytes32', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'kernel', - outputs: [ - { - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getTotalShares', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_owner', - type: 'address', - }, - { - name: '_spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'isPetrified', - outputs: [ - { - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_withdrawalCredentials', - type: 'bytes32', - }, - ], - name: 'setWithdrawalCredentials', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'depositBufferedEther', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_account', - type: 'address', - }, - { - name: '_sharesAmount', - type: 'uint256', - }, - ], - name: 'burnShares', - outputs: [ - { - name: 'newTotalShares', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_treasury', - type: 'address', - }, - ], - name: 'setTreasury', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - name: '_beaconValidators', - type: 'uint256', - }, - { - name: '_beaconBalance', - type: 'uint256', - }, - ], - name: 'pushBeacon', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [ - { - name: '_account', - type: 'address', - }, - ], - name: 'sharesOf', - outputs: [ - { - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - payable: true, - stateMutability: 'payable', - type: 'fallback', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'executor', - type: 'address', - }, - { - indexed: false, - name: 'script', - type: 'bytes', - }, - { - indexed: false, - name: 'input', - type: 'bytes', - }, - { - indexed: false, - name: 'returnData', - type: 'bytes', - }, - ], - name: 'ScriptResult', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'vault', - type: 'address', - }, - { - indexed: true, - name: 'token', - type: 'address', - }, - { - indexed: false, - name: 'amount', - type: 'uint256', - }, - ], - name: 'RecoverToVault', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'Stopped', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'Resumed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'from', - type: 'address', - }, - { - indexed: true, - name: 'to', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'owner', - type: 'address', - }, - { - indexed: true, - name: 'spender', - type: 'address', - }, - { - indexed: false, - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'feeBasisPoints', - type: 'uint16', - }, - ], - name: 'FeeSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'treasuryFeeBasisPoints', - type: 'uint16', - }, - { - indexed: false, - name: 'insuranceFeeBasisPoints', - type: 'uint16', - }, - { - indexed: false, - name: 'operatorsFeeBasisPoints', - type: 'uint16', - }, - ], - name: 'FeeDistributionSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'withdrawalCredentials', - type: 'bytes32', - }, - ], - name: 'WithdrawalCredentialsSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'sender', - type: 'address', - }, - { - indexed: false, - name: 'amount', - type: 'uint256', - }, - { - indexed: false, - name: 'referral', - type: 'address', - }, - ], - name: 'Submitted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - name: 'amount', - type: 'uint256', - }, - ], - name: 'Unbuffered', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - name: 'sender', - type: 'address', - }, - { - indexed: false, - name: 'tokenAmount', - type: 'uint256', - }, - { - indexed: false, - name: 'sentFromBuffer', - type: 'uint256', - }, - { - indexed: true, - name: 'pubkeyHash', - type: 'bytes32', - }, - { - indexed: false, - name: 'etherAmount', - type: 'uint256', - }, - ], - name: 'Withdrawal', - type: 'event', - }, -] as const; - -export type LidoSteth = typeof lidoStethAbi; -export type LidoStethContract = GetContractReturnType; - -export class LidoSteth__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: lidoStethAbi, publicClient: client }); - } -} diff --git a/src/apps/lido/contracts/viem/LidoStethEthOracle.ts b/src/apps/lido/contracts/viem/LidoStethEthOracle.ts deleted file mode 100644 index ae3e09e04..000000000 --- a/src/apps/lido/contracts/viem/LidoStethEthOracle.ts +++ /dev/null @@ -1,523 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const lidoStethEthOracleAbi = [ - { - inputs: [ - { - internalType: 'address', - name: '_aggregator', - type: 'address', - }, - { - internalType: 'address', - name: '_accessController', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'int256', - name: 'current', - type: 'int256', - }, - { - indexed: true, - internalType: 'uint256', - name: 'roundId', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'updatedAt', - type: 'uint256', - }, - ], - name: 'AnswerUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'uint256', - name: 'roundId', - type: 'uint256', - }, - { - indexed: true, - internalType: 'address', - name: 'startedBy', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'startedAt', - type: 'uint256', - }, - ], - name: 'NewRound', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'OwnershipTransferRequested', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - inputs: [], - name: 'acceptOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'accessController', - outputs: [ - { - internalType: 'contract AccessControllerInterface', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'aggregator', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_aggregator', - type: 'address', - }, - ], - name: 'confirmAggregator', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'description', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_roundId', - type: 'uint256', - }, - ], - name: 'getAnswer', - outputs: [ - { - internalType: 'int256', - name: '', - type: 'int256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint80', - name: '_roundId', - type: 'uint80', - }, - ], - name: 'getRoundData', - outputs: [ - { - internalType: 'uint80', - name: 'roundId', - type: 'uint80', - }, - { - internalType: 'int256', - name: 'answer', - type: 'int256', - }, - { - internalType: 'uint256', - name: 'startedAt', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'updatedAt', - type: 'uint256', - }, - { - internalType: 'uint80', - name: 'answeredInRound', - type: 'uint80', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_roundId', - type: 'uint256', - }, - ], - name: 'getTimestamp', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'latestAnswer', - outputs: [ - { - internalType: 'int256', - name: '', - type: 'int256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'latestRound', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'latestRoundData', - outputs: [ - { - internalType: 'uint80', - name: 'roundId', - type: 'uint80', - }, - { - internalType: 'int256', - name: 'answer', - type: 'int256', - }, - { - internalType: 'uint256', - name: 'startedAt', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'updatedAt', - type: 'uint256', - }, - { - internalType: 'uint80', - name: 'answeredInRound', - type: 'uint80', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'latestTimestamp', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint16', - name: '', - type: 'uint16', - }, - ], - name: 'phaseAggregators', - outputs: [ - { - internalType: 'contract AggregatorV2V3Interface', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'phaseId', - outputs: [ - { - internalType: 'uint16', - name: '', - type: 'uint16', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_aggregator', - type: 'address', - }, - ], - name: 'proposeAggregator', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'proposedAggregator', - outputs: [ - { - internalType: 'contract AggregatorV2V3Interface', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint80', - name: '_roundId', - type: 'uint80', - }, - ], - name: 'proposedGetRoundData', - outputs: [ - { - internalType: 'uint80', - name: 'roundId', - type: 'uint80', - }, - { - internalType: 'int256', - name: 'answer', - type: 'int256', - }, - { - internalType: 'uint256', - name: 'startedAt', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'updatedAt', - type: 'uint256', - }, - { - internalType: 'uint80', - name: 'answeredInRound', - type: 'uint80', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'proposedLatestRoundData', - outputs: [ - { - internalType: 'uint80', - name: 'roundId', - type: 'uint80', - }, - { - internalType: 'int256', - name: 'answer', - type: 'int256', - }, - { - internalType: 'uint256', - name: 'startedAt', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'updatedAt', - type: 'uint256', - }, - { - internalType: 'uint80', - name: 'answeredInRound', - type: 'uint80', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_accessController', - type: 'address', - }, - ], - name: 'setController', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_to', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'version', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type LidoStethEthOracle = typeof lidoStethEthOracleAbi; -export type LidoStethEthOracleContract = GetContractReturnType; - -export class LidoStethEthOracle__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: lidoStethEthOracleAbi, publicClient: client }); - } -} diff --git a/src/apps/lido/contracts/viem/LidoStksm.ts b/src/apps/lido/contracts/viem/LidoStksm.ts deleted file mode 100644 index 690c231c5..000000000 --- a/src/apps/lido/contracts/viem/LidoStksm.ts +++ /dev/null @@ -1,1304 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const lidoStksmAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Claimed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Deposited', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint16', - name: 'fee', - type: 'uint16', - }, - { - indexed: false, - internalType: 'uint16', - name: 'feeOperatorsBP', - type: 'uint16', - }, - { - indexed: false, - internalType: 'uint16', - name: 'feeTreasuryBP', - type: 'uint16', - }, - { - indexed: false, - internalType: 'uint16', - name: 'feeDevelopersBP', - type: 'uint16', - }, - ], - name: 'FeeSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'addr', - type: 'address', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'stashAccount', - type: 'bytes32', - }, - { - indexed: false, - internalType: 'bytes32', - name: 'controllerAccount', - type: 'bytes32', - }, - ], - name: 'LedgerAdd', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'LedgerDisable', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'LedgerPaused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'LedgerRemove', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'addr', - type: 'address', - }, - ], - name: 'LedgerResumed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'ledger', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'losses', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - name: 'Losses', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Redeemed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'userAddr', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'referralAddr', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Referral', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'ledger', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'rewards', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - name: 'Rewards', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - inputs: [], - name: 'AUTH_MANAGER', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'LEDGER_BEACON', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_ALLOWABLE_DIFFERENCE', - outputs: [ - { - internalType: 'uint128', - name: '', - type: 'uint128', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'ORACLE_MASTER', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '_stashAccount', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: '_controllerAccount', - type: 'bytes32', - }, - { - internalType: 'uint16', - name: '_index', - type: 'uint16', - }, - ], - name: 'addLedger', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_owner', - type: 'address', - }, - { - internalType: 'address', - name: '_spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_spender', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'bufferedDeposits', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'bufferedRedeems', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'claimUnbonded', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_spender', - type: 'address', - }, - { - internalType: 'uint256', - name: '_subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'address', - name: '_referral', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'depositCap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_ledgerAddress', - type: 'address', - }, - ], - name: 'disableLedger', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_totalLosses', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_ledgerBalance', - type: 'uint256', - }, - ], - name: 'distributeLosses', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_totalRewards', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_ledgerBalance', - type: 'uint256', - }, - ], - name: 'distributeRewards', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_ledgerAddress', - type: 'address', - }, - ], - name: 'emergencyPauseLedger', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: '_stashAccount', - type: 'bytes32', - }, - ], - name: 'findLedger', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'flushStakes', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'fundRaisedBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getLedgerAddresses', - outputs: [ - { - internalType: 'address[]', - name: '', - type: 'address[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_sharesAmount', - type: 'uint256', - }, - ], - name: 'getPooledKSMByShares', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'getSharesByPooledKSM', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getStashAccounts', - outputs: [ - { - internalType: 'bytes32[]', - name: '', - type: 'bytes32[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getTotalPooledKSM', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getTotalShares', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_holder', - type: 'address', - }, - ], - name: 'getUnbonded', - outputs: [ - { - internalType: 'uint256', - name: 'waiting', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'unbonded', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_spender', - type: 'address', - }, - { - internalType: 'uint256', - name: '_addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_authManager', - type: 'address', - }, - { - internalType: 'address', - name: '_vKSM', - type: 'address', - }, - { - internalType: 'address', - name: '_controller', - type: 'address', - }, - { - internalType: 'address', - name: '_developers', - type: 'address', - }, - { - internalType: 'address', - name: '_treasury', - type: 'address', - }, - { - internalType: 'address', - name: '_oracleMaster', - type: 'address', - }, - { - internalType: 'address', - name: '_withdrawal', - type: 'address', - }, - { - internalType: 'uint256', - name: '_depositCap', - type: 'uint256', - }, - { - internalType: 'uint128', - name: '_maxAllowableDifference', - type: 'uint128', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'ledgerBorrow', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'ledgerStake', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32[]', - name: '_stashAccounts', - type: 'bytes32[]', - }, - { - internalType: 'bytes32[][]', - name: '_validators', - type: 'bytes32[][]', - }, - ], - name: 'nominateBatch', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'redeem', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_ledgerAddress', - type: 'address', - }, - ], - name: 'removeLedger', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'resume', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_ledgerAddress', - type: 'address', - }, - ], - name: 'resumeLedger', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_depositCap', - type: 'uint256', - }, - ], - name: 'setDepositCap', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_developers', - type: 'address', - }, - ], - name: 'setDevelopers', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint16', - name: '_feeOperators', - type: 'uint16', - }, - { - internalType: 'uint16', - name: '_feeTreasury', - type: 'uint16', - }, - { - internalType: 'uint16', - name: '_feeDevelopers', - type: 'uint16', - }, - ], - name: 'setFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_ledgerBeacon', - type: 'address', - }, - ], - name: 'setLedgerBeacon', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_ledgerFactory', - type: 'address', - }, - ], - name: 'setLedgerFactory', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint128', - name: '_maxAllowableDifference', - type: 'uint128', - }, - ], - name: 'setMaxAllowableDifference', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - components: [ - { - internalType: 'uint16', - name: 'maxValidatorsPerLedger', - type: 'uint16', - }, - { - internalType: 'uint128', - name: 'minNominatorBalance', - type: 'uint128', - }, - { - internalType: 'uint128', - name: 'ledgerMinimumActiveBalance', - type: 'uint128', - }, - { - internalType: 'uint256', - name: 'maxUnlockingChunks', - type: 'uint256', - }, - ], - internalType: 'struct Types.RelaySpec', - name: '_relaySpec', - type: 'tuple', - }, - ], - name: 'setRelaySpec', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_treasury', - type: 'address', - }, - ], - name: 'setTreasury', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_account', - type: 'address', - }, - ], - name: 'sharesOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_sender', - type: 'address', - }, - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_excess', - type: 'uint256', - }, - ], - name: 'transferFromLedger', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'transferToLedger', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type LidoStksm = typeof lidoStksmAbi; -export type LidoStksmContract = GetContractReturnType; - -export class LidoStksm__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: lidoStksmAbi, publicClient: client }); - } -} diff --git a/src/apps/lido/contracts/viem/LidoWsteth.ts b/src/apps/lido/contracts/viem/LidoWsteth.ts deleted file mode 100644 index 8ee3f21df..000000000 --- a/src/apps/lido/contracts/viem/LidoWsteth.ts +++ /dev/null @@ -1,491 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const lidoWstethAbi = [ - { - inputs: [ - { - internalType: 'contract IStETH', - name: '_stETH', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_wstETHAmount', - type: 'uint256', - }, - ], - name: 'getStETHByWstETH', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_stETHAmount', - type: 'uint256', - }, - ], - name: 'getWstETHByStETH', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'stETH', - outputs: [ - { - internalType: 'contract IStETH', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'stEthPerToken', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'tokensPerStEth', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_wstETHAmount', - type: 'uint256', - }, - ], - name: 'unwrap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_stETHAmount', - type: 'uint256', - }, - ], - name: 'wrap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - stateMutability: 'payable', - type: 'receive', - }, -] as const; - -export type LidoWsteth = typeof lidoWstethAbi; -export type LidoWstethContract = GetContractReturnType; - -export class LidoWsteth__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: lidoWstethAbi, publicClient: client }); - } -} diff --git a/src/apps/lido/contracts/viem/index.ts b/src/apps/lido/contracts/viem/index.ts deleted file mode 100644 index 7089ebc20..000000000 --- a/src/apps/lido/contracts/viem/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { LidoStethEthOracle } from './LidoStethEthOracle'; -export type { LidoSteth } from './LidoSteth'; -export type { LidoStksm } from './LidoStksm'; -export type { LidoWsteth } from './LidoWsteth'; - -export { LidoStethEthOracle__factory } from './LidoStethEthOracle'; -export { LidoSteth__factory } from './LidoSteth'; -export { LidoStksm__factory } from './LidoStksm'; -export { LidoWsteth__factory } from './LidoWsteth'; diff --git a/src/apps/lido/ethereum/lido.steth.token-fetcher.ts b/src/apps/lido/ethereum/lido.steth.token-fetcher.ts deleted file mode 100644 index 4f83e0cf8..000000000 --- a/src/apps/lido/ethereum/lido.steth.token-fetcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { LidoViemContractFactory } from '../contracts'; -import { LidoSteth } from '../contracts/viem/LidoSteth'; - -@PositionTemplate() -export class EthereumLidoStethTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'stETH'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(LidoViemContractFactory) protected readonly contractFactory: LidoViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.lidoSteth({ network: this.network, address }); - } - - async getAddresses() { - return ['0xae7ab96520de3a18e5e111b5eaab095312d7fe84']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x0000000000000000000000000000000000000000', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/lido/ethereum/lido.wsteth.token-fetcher.ts b/src/apps/lido/ethereum/lido.wsteth.token-fetcher.ts deleted file mode 100644 index 653ab3d8d..000000000 --- a/src/apps/lido/ethereum/lido.wsteth.token-fetcher.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { LidoViemContractFactory } from '../contracts'; -import { LidoWsteth } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumLidoWstethTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'wstETH'; - - isExcludedFromTvl = true; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(LidoViemContractFactory) protected readonly contractFactory: LidoViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.lidoWsteth({ network: this.network, address }); - } - - async getAddresses() { - return ['0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.stETH(), network: this.network }]; - } - - async getPricePerShare({ appToken, contract }: GetPricePerShareParams) { - const pricePerShareRaw = await contract.read.stEthPerToken(); - return [Number(pricePerShareRaw) / 10 ** appToken.decimals]; - } -} diff --git a/src/apps/lido/lido.module.ts b/src/apps/lido/lido.module.ts deleted file mode 100644 index 3e9aaf097..000000000 --- a/src/apps/lido/lido.module.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { LidoViemContractFactory } from './contracts'; -import { EthereumLidoStethTokenFetcher } from './ethereum/lido.steth.token-fetcher'; -import { EthereumLidoWstethTokenFetcher } from './ethereum/lido.wsteth.token-fetcher'; - -@Module({ - providers: [LidoViemContractFactory, EthereumLidoStethTokenFetcher, EthereumLidoWstethTokenFetcher], -}) -export class LidoAppModule extends AbstractApp() {} diff --git a/src/apps/metavault-trade/metavault-trade.module.ts b/src/apps/metavault-trade/metavault-trade.module.ts index 8affc29c8..4943544b9 100644 --- a/src/apps/metavault-trade/metavault-trade.module.ts +++ b/src/apps/metavault-trade/metavault-trade.module.ts @@ -3,7 +3,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; import { MetavaultTradeViemContractFactory } from './contracts'; -import { PolygonMetavaultTradeEsMvxTokenFetcher } from './polygon/metavault-trade.es-mvx.token-fetcher'; import { PolygonMetavaultTradeFarmContractPositionFetcher } from './polygon/metavault-trade.farm.contract-position-fetcher'; import { PolygonMetavaultTradeMvlpTokenFetcher } from './polygon/metavault-trade.mvlp.token-fetcher'; import { PolygonPerpContractPositionFetcher } from './polygon/metavault-trade.perp.contract-position-fetcher'; @@ -12,7 +11,6 @@ import { PolygonPerpContractPositionFetcher } from './polygon/metavault-trade.pe providers: [ MetavaultTradeViemContractFactory, //Polygon - PolygonMetavaultTradeEsMvxTokenFetcher, PolygonMetavaultTradeFarmContractPositionFetcher, PolygonMetavaultTradeMvlpTokenFetcher, PolygonPerpContractPositionFetcher, diff --git a/src/apps/metavault-trade/polygon/metavault-trade.es-mvx.token-fetcher.ts b/src/apps/metavault-trade/polygon/metavault-trade.es-mvx.token-fetcher.ts deleted file mode 100644 index c57cdac43..000000000 --- a/src/apps/metavault-trade/polygon/metavault-trade.es-mvx.token-fetcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { Erc20 } from '~contract/contracts/viem'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { MetavaultTradeViemContractFactory } from '../contracts'; - -@PositionTemplate() -export class PolygonMetavaultTradeEsMvxTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'esMVX'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(MetavaultTradeViemContractFactory) protected readonly contractFactory: MetavaultTradeViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.appToolkit.globalViemContracts.erc20({ network: this.network, address }); - } - - async getAddresses() { - return ['0xd1b2f8dff8437be57430ee98767d512f252ead61']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x2760e46d9bb43dafcbecaad1f64b93207f9f0ed7', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/mstable/contracts/abis/mstable-asset.json b/src/apps/mstable/contracts/abis/mstable-asset.json deleted file mode 100644 index 8d500f34a..000000000 --- a/src/apps/mstable/contracts/abis/mstable-asset.json +++ /dev/null @@ -1,596 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_nexus", "type": "address" }, - { "internalType": "address", "name": "_underlying", "type": "address" }, - { "internalType": "address", "name": "_unwrapper", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "bool", "name": "automationEnabled", "type": "bool" }], - "name": "AutomaticInterestCollectionSwitched", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "connector", "type": "address" }], - "name": "ConnectorUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "redeemer", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "creditsRedeemed", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "savingsCredited", "type": "uint256" } - ], - "name": "CreditsRedeemed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "EmergencyUpdate", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "uint256", "name": "newExchangeRate", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "interestCollected", "type": "uint256" } - ], - "name": "ExchangeRateUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "fraction", "type": "uint256" }], - "name": "FractionUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "uint256", "name": "oldBalance", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "newBalance", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "interestDetected", "type": "uint256" } - ], - "name": "Poked", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "PokedRaw", "type": "event" }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "poker", "type": "address" }], - "name": "PokerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "referrer", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Referral", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "saver", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "savingsDeposited", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "creditsIssued", "type": "uint256" } - ], - "name": "SavingsDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [{ "internalType": "address", "name": "assetTokenAddress", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bool", "name": "_enabled", "type": "bool" }], - "name": "automateInterestCollectionFlag", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_user", "type": "address" }], - "name": "balanceOfUnderlying", - "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "connector", - "outputs": [{ "internalType": "contract IConnector", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "convertToAssets", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "convertToShares", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_user", "type": "address" }], - "name": "creditBalances", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_credits", "type": "uint256" }], - "name": "creditsToUnderlying", - "outputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "referrer", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "depositInterest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_underlying", "type": "uint256" }, - { "internalType": "address", "name": "_beneficiary", "type": "address" }, - { "internalType": "address", "name": "_referrer", "type": "address" } - ], - "name": "depositSavings", - "outputs": [{ "internalType": "uint256", "name": "creditsIssued", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_underlying", "type": "uint256" }, - { "internalType": "address", "name": "_beneficiary", "type": "address" } - ], - "name": "depositSavings", - "outputs": [{ "internalType": "uint256", "name": "creditsIssued", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_underlying", "type": "uint256" }], - "name": "depositSavings", - "outputs": [{ "internalType": "uint256", "name": "creditsIssued", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_withdrawAmount", "type": "uint256" }], - "name": "emergencyWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "exchangeRate", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "fraction", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_poker", "type": "address" }, - { "internalType": "string", "name": "_nameArg", "type": "string" }, - { "internalType": "string", "name": "_symbolArg", "type": "string" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lastBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "lastPoke", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "maxAssets", "type": "uint256" }], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxMint", - "outputs": [{ "internalType": "uint256", "name": "maxShares", "type": "uint256" }], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxRedeem", - "outputs": [{ "internalType": "uint256", "name": "maxShares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxWithdraw", - "outputs": [{ "internalType": "uint256", "name": "maxAssets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "mint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "referrer", "type": "address" } - ], - "name": "mint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nexus", - "outputs": [{ "internalType": "contract INexus", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "poke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "poker", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_underlying", "type": "uint256" }, - { "internalType": "address", "name": "_beneficiary", "type": "address" } - ], - "name": "preDeposit", - "outputs": [{ "internalType": "uint256", "name": "creditsIssued", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewDeposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewMint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewRedeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewWithdraw", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_credits", "type": "uint256" }], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "massetReturned", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_amount", "type": "uint256" }, - { "internalType": "bool", "name": "_isCreditAmt", "type": "bool" }, - { "internalType": "uint256", "name": "_minAmountOut", "type": "uint256" }, - { "internalType": "address", "name": "_output", "type": "address" }, - { "internalType": "address", "name": "_beneficiary", "type": "address" }, - { "internalType": "address", "name": "_router", "type": "address" }, - { "internalType": "bool", "name": "_isBassetOut", "type": "bool" } - ], - "name": "redeemAndUnwrap", - "outputs": [ - { "internalType": "uint256", "name": "creditsBurned", "type": "uint256" }, - { "internalType": "uint256", "name": "massetReturned", "type": "uint256" }, - { "internalType": "uint256", "name": "outputQuantity", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_credits", "type": "uint256" }], - "name": "redeemCredits", - "outputs": [{ "internalType": "uint256", "name": "massetReturned", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_underlying", "type": "uint256" }], - "name": "redeemUnderlying", - "outputs": [{ "internalType": "uint256", "name": "creditsBurned", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_newConnector", "type": "address" }], - "name": "setConnector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_fraction", "type": "uint256" }], - "name": "setFraction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_newPoker", "type": "address" }], - "name": "setPoker", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [{ "internalType": "uint256", "name": "totalManagedAssets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlying", - "outputs": [{ "internalType": "contract IERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_underlying", "type": "uint256" }], - "name": "underlyingToCredits", - "outputs": [{ "internalType": "uint256", "name": "credits", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unwrapper", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "withdraw", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/mstable/contracts/abis/mstable-metavault-4626.json b/src/apps/mstable/contracts/abis/mstable-metavault-4626.json deleted file mode 100644 index 2d2010702..000000000 --- a/src/apps/mstable/contracts/abis/mstable-metavault-4626.json +++ /dev/null @@ -1,524 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_nexus", "type": "address" }, - { "internalType": "address", "name": "_asset", "type": "address" }, - { "internalType": "address", "name": "_metaVault", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "slippage", "type": "uint256" } - ], - "name": "DepositSlippageChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" }], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "slippage", "type": "uint256" } - ], - "name": "MintSlippageChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "slippage", "type": "uint256" } - ], - "name": "RedeemSlippageChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "_vaultManager", "type": "address" }], - "name": "SetVaultManager", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "slippage", "type": "uint256" } - ], - "name": "WithdrawSlippageChange", - "type": "event" - }, - { - "inputs": [], - "name": "BASIS_SCALE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [{ "internalType": "address", "name": "assetTokenAddress", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "assetFromUsdScale", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "assetPoolIndex", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "assetScale", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "convertToAssets", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "convertToShares", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "decimals_", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "uint256", "name": "slippage", "type": "uint256" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "depositSlippage", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { "internalType": "address", "name": "_vaultManager", "type": "address" }, - { - "components": [ - { "internalType": "uint256", "name": "redeem", "type": "uint256" }, - { "internalType": "uint256", "name": "deposit", "type": "uint256" }, - { "internalType": "uint256", "name": "withdraw", "type": "uint256" }, - { "internalType": "uint256", "name": "mint", "type": "uint256" } - ], - "internalType": "struct AbstractSlippage.SlippageData", - "name": "_slippageData", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "isVaultManager", - "outputs": [{ "internalType": "bool", "name": "result", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "minAssets", "type": "uint256" }], - "name": "liquidateVault", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "caller", "type": "address" }], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "maxAssets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "caller", "type": "address" }], - "name": "maxMint", - "outputs": [{ "internalType": "uint256", "name": "maxShares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxRedeem", - "outputs": [{ "internalType": "uint256", "name": "maxShares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxWithdraw", - "outputs": [{ "internalType": "uint256", "name": "maxAssets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "metaVault", - "outputs": [{ "internalType": "contract IERC4626Vault", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "mint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "mintSlippage", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "name_", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "nexus", - "outputs": [{ "internalType": "contract INexus", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewDeposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewMint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewRedeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewWithdraw", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "uint256", "name": "customRedeemSlippage", "type": "uint256" } - ], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "redeemSlippage", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "resetAllowances", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "_slippage", "type": "uint256" }], - "name": "setDepositSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_slippage", "type": "uint256" }], - "name": "setMintSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_slippage", "type": "uint256" }], - "name": "setRedeemSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_vaultManager", "type": "address" }], - "name": "setVaultManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_slippage", "type": "uint256" }], - "name": "setWithdrawSlippage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "symbol_", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "threeCrvTokenScale", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [{ "internalType": "uint256", "name": "totalManagedAssets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "vaultManager", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "withdraw", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawSlippage", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/mstable/contracts/viem.contract-factory.ts b/src/apps/mstable/contracts/viem.contract-factory.ts index 355d0f359..08d10f8e8 100644 --- a/src/apps/mstable/contracts/viem.contract-factory.ts +++ b/src/apps/mstable/contracts/viem.contract-factory.ts @@ -3,13 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { - MstableAsset__factory, - MstableMetavault4626__factory, - MstableStaking__factory, - MstableStakingV2__factory, - MstableVmta__factory, -} from './viem'; +import { MstableStaking__factory, MstableStakingV2__factory, MstableVmta__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -17,12 +11,6 @@ type ContractOpts = { address: string; network: Network }; export class MstableViemContractFactory { constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - mstableAsset({ address, network }: ContractOpts) { - return MstableAsset__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - mstableMetavault4626({ address, network }: ContractOpts) { - return MstableMetavault4626__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } mstableStaking({ address, network }: ContractOpts) { return MstableStaking__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/mstable/contracts/viem/MstableAsset.ts b/src/apps/mstable/contracts/viem/MstableAsset.ts deleted file mode 100644 index c137113c7..000000000 --- a/src/apps/mstable/contracts/viem/MstableAsset.ts +++ /dev/null @@ -1,1451 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const mstableAssetAbi = [ - { - inputs: [ - { - internalType: 'address', - name: '_nexus', - type: 'address', - }, - { - internalType: 'address', - name: '_underlying', - type: 'address', - }, - { - internalType: 'address', - name: '_unwrapper', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'bool', - name: 'automationEnabled', - type: 'bool', - }, - ], - name: 'AutomaticInterestCollectionSwitched', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'connector', - type: 'address', - }, - ], - name: 'ConnectorUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'redeemer', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'creditsRedeemed', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'savingsCredited', - type: 'uint256', - }, - ], - name: 'CreditsRedeemed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'EmergencyUpdate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'newExchangeRate', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'interestCollected', - type: 'uint256', - }, - ], - name: 'ExchangeRateUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'fraction', - type: 'uint256', - }, - ], - name: 'FractionUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'oldBalance', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'newBalance', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'interestDetected', - type: 'uint256', - }, - ], - name: 'Poked', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'PokedRaw', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'poker', - type: 'address', - }, - ], - name: 'PokerUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'referrer', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'beneficiary', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Referral', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'saver', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'savingsDeposited', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'creditsIssued', - type: 'uint256', - }, - ], - name: 'SavingsDeposited', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'address', - name: 'assetTokenAddress', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bool', - name: '_enabled', - type: 'bool', - }, - ], - name: 'automateInterestCollectionFlag', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_user', - type: 'address', - }, - ], - name: 'balanceOfUnderlying', - outputs: [ - { - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'connector', - outputs: [ - { - internalType: 'contract IConnector', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_user', - type: 'address', - }, - ], - name: 'creditBalances', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_credits', - type: 'uint256', - }, - ], - name: 'creditsToUnderlying', - outputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'referrer', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'depositInterest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_underlying', - type: 'uint256', - }, - { - internalType: 'address', - name: '_beneficiary', - type: 'address', - }, - { - internalType: 'address', - name: '_referrer', - type: 'address', - }, - ], - name: 'depositSavings', - outputs: [ - { - internalType: 'uint256', - name: 'creditsIssued', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_underlying', - type: 'uint256', - }, - { - internalType: 'address', - name: '_beneficiary', - type: 'address', - }, - ], - name: 'depositSavings', - outputs: [ - { - internalType: 'uint256', - name: 'creditsIssued', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_underlying', - type: 'uint256', - }, - ], - name: 'depositSavings', - outputs: [ - { - internalType: 'uint256', - name: 'creditsIssued', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_withdrawAmount', - type: 'uint256', - }, - ], - name: 'emergencyWithdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'exchangeRate', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'fraction', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_poker', - type: 'address', - }, - { - internalType: 'string', - name: '_nameArg', - type: 'string', - }, - { - internalType: 'string', - name: '_symbolArg', - type: 'string', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'lastBalance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'lastPoke', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: 'maxAssets', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: 'maxShares', - type: 'uint256', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: 'maxShares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: 'maxAssets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'referrer', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'nexus', - outputs: [ - { - internalType: 'contract INexus', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'poke', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'poker', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_underlying', - type: 'uint256', - }, - { - internalType: 'address', - name: '_beneficiary', - type: 'address', - }, - ], - name: 'preDeposit', - outputs: [ - { - internalType: 'uint256', - name: 'creditsIssued', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_credits', - type: 'uint256', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'massetReturned', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'bool', - name: '_isCreditAmt', - type: 'bool', - }, - { - internalType: 'uint256', - name: '_minAmountOut', - type: 'uint256', - }, - { - internalType: 'address', - name: '_output', - type: 'address', - }, - { - internalType: 'address', - name: '_beneficiary', - type: 'address', - }, - { - internalType: 'address', - name: '_router', - type: 'address', - }, - { - internalType: 'bool', - name: '_isBassetOut', - type: 'bool', - }, - ], - name: 'redeemAndUnwrap', - outputs: [ - { - internalType: 'uint256', - name: 'creditsBurned', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'massetReturned', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'outputQuantity', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_credits', - type: 'uint256', - }, - ], - name: 'redeemCredits', - outputs: [ - { - internalType: 'uint256', - name: 'massetReturned', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_underlying', - type: 'uint256', - }, - ], - name: 'redeemUnderlying', - outputs: [ - { - internalType: 'uint256', - name: 'creditsBurned', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newConnector', - type: 'address', - }, - ], - name: 'setConnector', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_fraction', - type: 'uint256', - }, - ], - name: 'setFraction', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newPoker', - type: 'address', - }, - ], - name: 'setPoker', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: 'totalManagedAssets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'underlying', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_underlying', - type: 'uint256', - }, - ], - name: 'underlyingToCredits', - outputs: [ - { - internalType: 'uint256', - name: 'credits', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'unwrapper', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type MstableAsset = typeof mstableAssetAbi; -export type MstableAssetContract = GetContractReturnType; - -export class MstableAsset__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: mstableAssetAbi, publicClient: client }); - } -} diff --git a/src/apps/mstable/contracts/viem/MstableMetavault4626.ts b/src/apps/mstable/contracts/viem/MstableMetavault4626.ts deleted file mode 100644 index 6a1f7bebe..000000000 --- a/src/apps/mstable/contracts/viem/MstableMetavault4626.ts +++ /dev/null @@ -1,1225 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const mstableMetavault4626Abi = [ - { - inputs: [ - { - internalType: 'address', - name: '_nexus', - type: 'address', - }, - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'address', - name: '_metaVault', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'slippage', - type: 'uint256', - }, - ], - name: 'DepositSlippageChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint8', - name: 'version', - type: 'uint8', - }, - ], - name: 'Initialized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'slippage', - type: 'uint256', - }, - ], - name: 'MintSlippageChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'slippage', - type: 'uint256', - }, - ], - name: 'RedeemSlippageChange', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: '_vaultManager', - type: 'address', - }, - ], - name: 'SetVaultManager', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'slippage', - type: 'uint256', - }, - ], - name: 'WithdrawSlippageChange', - type: 'event', - }, - { - inputs: [], - name: 'BASIS_SCALE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'address', - name: 'assetTokenAddress', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'assetFromUsdScale', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'assetPoolIndex', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'assetScale', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: 'decimals_', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'uint256', - name: 'slippage', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'depositSlippage', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'address', - name: '_vaultManager', - type: 'address', - }, - { - components: [ - { - internalType: 'uint256', - name: 'redeem', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'withdraw', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'mint', - type: 'uint256', - }, - ], - internalType: 'struct AbstractSlippage.SlippageData', - name: '_slippageData', - type: 'tuple', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'isVaultManager', - outputs: [ - { - internalType: 'bool', - name: 'result', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'minAssets', - type: 'uint256', - }, - ], - name: 'liquidateVault', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'caller', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: 'maxAssets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'caller', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: 'maxShares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: 'maxShares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: 'maxAssets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'metaVault', - outputs: [ - { - internalType: 'contract IERC4626Vault', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'mintSlippage', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: 'name_', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'nexus', - outputs: [ - { - internalType: 'contract INexus', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'uint256', - name: 'customRedeemSlippage', - type: 'uint256', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'redeemSlippage', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'resetAllowances', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_slippage', - type: 'uint256', - }, - ], - name: 'setDepositSlippage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_slippage', - type: 'uint256', - }, - ], - name: 'setMintSlippage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_slippage', - type: 'uint256', - }, - ], - name: 'setRedeemSlippage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_vaultManager', - type: 'address', - }, - ], - name: 'setVaultManager', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_slippage', - type: 'uint256', - }, - ], - name: 'setWithdrawSlippage', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: 'symbol_', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'threeCrvTokenScale', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: 'totalManagedAssets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'unpause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'vaultManager', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withdrawSlippage', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type MstableMetavault4626 = typeof mstableMetavault4626Abi; -export type MstableMetavault4626Contract = GetContractReturnType; - -export class MstableMetavault4626__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: mstableMetavault4626Abi, publicClient: client }); - } -} diff --git a/src/apps/mstable/contracts/viem/index.ts b/src/apps/mstable/contracts/viem/index.ts index cccd89a4b..dcba3a1da 100644 --- a/src/apps/mstable/contracts/viem/index.ts +++ b/src/apps/mstable/contracts/viem/index.ts @@ -2,14 +2,10 @@ /* tslint:disable */ /* eslint-disable */ -export type { MstableAsset } from './MstableAsset'; -export type { MstableMetavault4626 } from './MstableMetavault4626'; export type { MstableStakingV2 } from './MstableStakingV2'; export type { MstableStaking } from './MstableStaking'; export type { MstableVmta } from './MstableVmta'; -export { MstableAsset__factory } from './MstableAsset'; -export { MstableMetavault4626__factory } from './MstableMetavault4626'; export { MstableStakingV2__factory } from './MstableStakingV2'; export { MstableStaking__factory } from './MstableStaking'; export { MstableVmta__factory } from './MstableVmta'; diff --git a/src/apps/mstable/ethereum/mstable.imusd.token-fetcher.ts b/src/apps/mstable/ethereum/mstable.imusd.token-fetcher.ts deleted file mode 100644 index 557a8d4bf..000000000 --- a/src/apps/mstable/ethereum/mstable.imusd.token-fetcher.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { MstableViemContractFactory } from '../contracts'; -import { MstableAsset } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumMstableImusdTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'imUSD'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(MstableViemContractFactory) protected readonly contractFactory: MstableViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.mstableAsset({ address, network: this.network }); - } - - async getAddresses() { - return ['0x30647a72dc82d7fbb1123ea74716ab8a317eac19']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.asset(), network: this.network }]; - } - - async getPricePerShare({ appToken, contract }: GetPricePerShareParams) { - return [await contract.read.exchangeRate().then(v => Number(v) / 10 ** appToken.tokens[0].decimals)]; - } -} diff --git a/src/apps/mstable/ethereum/mstable.meta-vault.token-fetcher.ts b/src/apps/mstable/ethereum/mstable.meta-vault.token-fetcher.ts deleted file mode 100644 index 3951ed25d..000000000 --- a/src/apps/mstable/ethereum/mstable.meta-vault.token-fetcher.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { MstableViemContractFactory } from '../contracts'; -import { MstableMetavault4626 } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumMstableMetaVaultTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Meta Vaults'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(MstableViemContractFactory) protected readonly contractFactory: MstableViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.mstableMetavault4626({ address, network: this.network }); - } - - async getAddresses() { - return [ - '0x455fb969dc06c4aa77e7db3f0686cc05164436d2', // Convex 3Pool Meta Vault - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.asset(), network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalAssets(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - const pricePerShare = reserve / appToken.supply; - return [pricePerShare]; - } -} diff --git a/src/apps/mstable/mstable.module.ts b/src/apps/mstable/mstable.module.ts index 9ae791d96..75c8b35ae 100644 --- a/src/apps/mstable/mstable.module.ts +++ b/src/apps/mstable/mstable.module.ts @@ -4,24 +4,18 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { MstableViemContractFactory } from './contracts'; import { EthereumMstableEarnContractPositionFetcher } from './ethereum/mstable.earn.contract-position-fetcher'; -import { EthereumMstableImusdTokenFetcher } from './ethereum/mstable.imusd.token-fetcher'; -import { EthereumMstableMetaVaultTokenFetcher } from './ethereum/mstable.meta-vault.token-fetcher'; import { EthereumMstableMtaV1FarmContractPositionFetcher } from './ethereum/mstable.mta-v1-farm.contract-position-fetcher'; import { EthereumMstableMtaV2FarmContractPositionFetcher } from './ethereum/mstable.mta-v2-farm.contract-position-fetcher'; import { EthereumMstableSavingsVaultContractPositionFetcher } from './ethereum/mstable.savings-vault.contract-position-fetcher'; -import { PolygonMstableImusdTokenFetcher } from './polygon/mstable.imusd.token-fetcher'; import { PolygonMstableSavingsVaultContractPositionFetcher } from './polygon/mstable.savings-vault-farm.contract-position-fetcher'; @Module({ providers: [ MstableViemContractFactory, EthereumMstableEarnContractPositionFetcher, - EthereumMstableImusdTokenFetcher, EthereumMstableMtaV1FarmContractPositionFetcher, EthereumMstableMtaV2FarmContractPositionFetcher, - EthereumMstableMetaVaultTokenFetcher, EthereumMstableSavingsVaultContractPositionFetcher, - PolygonMstableImusdTokenFetcher, PolygonMstableSavingsVaultContractPositionFetcher, ], }) diff --git a/src/apps/mstable/polygon/mstable.imusd.token-fetcher.ts b/src/apps/mstable/polygon/mstable.imusd.token-fetcher.ts deleted file mode 100644 index df38d850d..000000000 --- a/src/apps/mstable/polygon/mstable.imusd.token-fetcher.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { MstableViemContractFactory } from '../contracts'; -import { MstableAsset } from '../contracts/viem'; - -@PositionTemplate() -export class PolygonMstableImusdTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'imUSD'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(MstableViemContractFactory) protected readonly contractFactory: MstableViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.mstableAsset({ address, network: this.network }); - } - - async getAddresses() { - return ['0x5290ad3d83476ca6a2b178cd9727ee1ef72432af']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.asset(), network: this.network }]; - } - - async getPricePerShare({ appToken, contract }: GetPricePerShareParams) { - return [await contract.read.exchangeRate().then(v => Number(v) / 10 ** appToken.tokens[0].decimals)]; - } -} diff --git a/src/apps/mycelium/arbitrum/mycelium.es-myc.token-fetcher.ts b/src/apps/mycelium/arbitrum/mycelium.es-myc.token-fetcher.ts deleted file mode 100644 index 2bf51e2aa..000000000 --- a/src/apps/mycelium/arbitrum/mycelium.es-myc.token-fetcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { Erc20 } from '~contract/contracts/viem'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { MyceliumViemContractFactory } from '../contracts'; - -@PositionTemplate() -export class ArbitrumMyceliumEsMycTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'esMYC'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(MyceliumViemContractFactory) protected readonly contractFactory: MyceliumViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.appToolkit.globalViemContracts.erc20({ network: this.network, address }); - } - - async getAddresses() { - return ['0x7cec785fba5ee648b48fbffc378d74c8671bb3cb']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0xc74fe4c715510ec2f8c61d70d397b32043f55abe', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/mycelium/mycelium.module.ts b/src/apps/mycelium/mycelium.module.ts index 9a434d34c..a98b89bbe 100644 --- a/src/apps/mycelium/mycelium.module.ts +++ b/src/apps/mycelium/mycelium.module.ts @@ -2,7 +2,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; -import { ArbitrumMyceliumEsMycTokenFetcher } from './arbitrum/mycelium.es-myc.token-fetcher'; import { ArbitrumMyceliumMlpTokenFetcher } from './arbitrum/mycelium.mlp.token-fetcher'; import { ArbitrumMycellilumPerpContractPositionFetcher } from './arbitrum/mycelium.perp.contract-position-fetcher'; import { MyceliumViemContractFactory } from './contracts'; @@ -11,7 +10,6 @@ import { MyceliumViemContractFactory } from './contracts'; providers: [ MyceliumViemContractFactory, // Arbitrum - ArbitrumMyceliumEsMycTokenFetcher, ArbitrumMyceliumMlpTokenFetcher, ArbitrumMycellilumPerpContractPositionFetcher, ], diff --git a/src/apps/origin-story/contracts/abis/origin-story-woeth.json b/src/apps/origin-story/contracts/abis/origin-story-woeth.json deleted file mode 100644 index 592e927dd..000000000 --- a/src/apps/origin-story/contracts/abis/origin-story-woeth.json +++ /dev/null @@ -1,327 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "contract ERC20", "name": "underlying_", "type": "address" }, - { "internalType": "string", "name": "name_", "type": "string" }, - { "internalType": "string", "name": "symbol_", "type": "string" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "previousGovernor", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newGovernor", "type": "address" } - ], - "name": "GovernorshipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "previousGovernor", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newGovernor", "type": "address" } - ], - "name": "PendingGovernorshipTransfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "claimGovernance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "convertToAssets", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "convertToShares", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "governor", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isGovernor", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxMint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxRedeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "mint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewMint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewRedeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_newGovernor", "type": "address" }], - "name": "transferGovernance", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "asset_", "type": "address" }, - { "internalType": "uint256", "name": "amount_", "type": "uint256" } - ], - "name": "transferToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "withdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/origin-story/contracts/viem.contract-factory.ts b/src/apps/origin-story/contracts/viem.contract-factory.ts index bc32f43b0..772931b00 100644 --- a/src/apps/origin-story/contracts/viem.contract-factory.ts +++ b/src/apps/origin-story/contracts/viem.contract-factory.ts @@ -3,7 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { OriginStoryWoeth__factory, Series__factory } from './viem'; +import { Series__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -11,9 +11,6 @@ type ContractOpts = { address: string; network: Network }; export class OriginStoryViemContractFactory { constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - originStoryWoeth({ address, network }: ContractOpts) { - return OriginStoryWoeth__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } series({ address, network }: ContractOpts) { return Series__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/origin-story/contracts/viem/OriginStoryWoeth.ts b/src/apps/origin-story/contracts/viem/OriginStoryWoeth.ts deleted file mode 100644 index 3f29e4af9..000000000 --- a/src/apps/origin-story/contracts/viem/OriginStoryWoeth.ts +++ /dev/null @@ -1,806 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const originStoryWoethAbi = [ - { - inputs: [ - { - internalType: 'contract ERC20', - name: 'underlying_', - type: 'address', - }, - { - internalType: 'string', - name: 'name_', - type: 'string', - }, - { - internalType: 'string', - name: 'symbol_', - type: 'string', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousGovernor', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newGovernor', - type: 'address', - }, - ], - name: 'GovernorshipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousGovernor', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newGovernor', - type: 'address', - }, - ], - name: 'PendingGovernorshipTransfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'claimGovernance', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'governor', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'isGovernor', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newGovernor', - type: 'address', - }, - ], - name: 'transferGovernance', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'asset_', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount_', - type: 'uint256', - }, - ], - name: 'transferToken', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type OriginStoryWoeth = typeof originStoryWoethAbi; -export type OriginStoryWoethContract = GetContractReturnType; - -export class OriginStoryWoeth__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: originStoryWoethAbi, publicClient: client }); - } -} diff --git a/src/apps/origin-story/contracts/viem/index.ts b/src/apps/origin-story/contracts/viem/index.ts index fd0261cc9..5bc0644e0 100644 --- a/src/apps/origin-story/contracts/viem/index.ts +++ b/src/apps/origin-story/contracts/viem/index.ts @@ -2,8 +2,6 @@ /* tslint:disable */ /* eslint-disable */ -export type { OriginStoryWoeth } from './OriginStoryWoeth'; export type { Series } from './Series'; -export { OriginStoryWoeth__factory } from './OriginStoryWoeth'; export { Series__factory } from './Series'; diff --git a/src/apps/origin-story/ethereum/origin-story.woeth.token-fetcher.ts b/src/apps/origin-story/ethereum/origin-story.woeth.token-fetcher.ts deleted file mode 100644 index b00436f3c..000000000 --- a/src/apps/origin-story/ethereum/origin-story.woeth.token-fetcher.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Inject } from '@nestjs/common'; -import { BigNumber } from 'ethers'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { OriginStoryViemContractFactory } from '../contracts'; -import { OriginStoryWoeth } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumOriginStoryWoethTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'wOETH'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(OriginStoryViemContractFactory) protected readonly contractFactory: OriginStoryViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.originStoryWoeth({ network: this.network, address }); - } - - async getAddresses() { - return ['0xdcee70654261af21c44c093c300ed3bb97b78192']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.asset(), network: this.network }]; - } - - async getPricePerShare({ contract }: GetPricePerShareParams) { - const oneUnit = BigNumber.from(10).pow(18).toString(); - const pricePerShareRaw = await contract.read.convertToAssets([BigInt(oneUnit)]); - const pricePerShare = Number(pricePerShareRaw) / 10 ** 18; - return [pricePerShare]; - } -} diff --git a/src/apps/origin-story/origin-story.module.ts b/src/apps/origin-story/origin-story.module.ts index 55f49d8df..dcf9db4fe 100644 --- a/src/apps/origin-story/origin-story.module.ts +++ b/src/apps/origin-story/origin-story.module.ts @@ -4,13 +4,8 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { OriginStoryViemContractFactory } from './contracts'; import { EthereumOriginStorySeriesContractPositionFetcher } from './ethereum/origin-story.series.contract-position-fetcher'; -import { EthereumOriginStoryWoethTokenFetcher } from './ethereum/origin-story.woeth.token-fetcher'; @Module({ - providers: [ - OriginStoryViemContractFactory, - EthereumOriginStorySeriesContractPositionFetcher, - EthereumOriginStoryWoethTokenFetcher, - ], + providers: [OriginStoryViemContractFactory, EthereumOriginStorySeriesContractPositionFetcher], }) export class OriginStoryAppModule extends AbstractApp() {} diff --git a/src/apps/p-stake/assets/logo.png b/src/apps/p-stake/assets/logo.png deleted file mode 100644 index 9ce17a9c0fcffad479df8b70eea91eb16d2c17db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3305 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 diff --git a/src/apps/p-stake/binance-smart-chain/p-stake.stake.token-fetcher.ts b/src/apps/p-stake/binance-smart-chain/p-stake.stake.token-fetcher.ts deleted file mode 100644 index 089be30c4..000000000 --- a/src/apps/p-stake/binance-smart-chain/p-stake.stake.token-fetcher.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { ZERO_ADDRESS } from '~app-toolkit/constants/address'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams } from '~position/template/app-token.template.types'; - -import { PStakeViemContractFactory } from '../contracts'; -import { PStakeStkToken } from '../contracts/viem/PStakeStkToken'; - -@PositionTemplate() -export class BinanceSmartChainPStakeStakeTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Stake'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(PStakeViemContractFactory) protected readonly contractFactory: PStakeViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.pStakeStkToken({ address, network: this.network }); - } - - async getAddresses() { - return ['0xc2e9d07f66a89c44062459a47a0d2dc038e4fb16']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: ZERO_ADDRESS, network: this.network }]; - } - - async getPricePerShare({ multicall }: GetPricePerShareParams) { - const stakePoolAddress = '0xc228cefdf841defdbd5b3a18dfd414cc0dbfa0d8'; - const stakePool = this.contractFactory.pStakePool({ address: stakePoolAddress, network: this.network }); - const exchangeRateRaw = await multicall.wrap(stakePool).read.exchangeRate(); - const exchangeRate = Number(exchangeRateRaw[0]) / Number(exchangeRateRaw[1]); - return [exchangeRate]; - } -} diff --git a/src/apps/p-stake/contracts/abis/p-stake-pool.json b/src/apps/p-stake/contracts/abis/p-stake-pool.json deleted file mode 100644 index 930681225..000000000 --- a/src/apps/p-stake/contracts/abis/p-stake-pool.json +++ /dev/null @@ -1,475 +0,0 @@ -[ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { "inputs": [], "name": "BNBTransferToUserFailed", "type": "error" }, - { "inputs": [], "name": "CantBeMoreThan1e18", "type": "error" }, - { "inputs": [], "name": "CantClaimBeforeDeadline", "type": "error" }, - { "inputs": [], "name": "CantSetMoreThan30PercentFee", "type": "error" }, - { "inputs": [], "name": "CooldownPeriodCantBeMoreThan30Days", "type": "error" }, - { - "inputs": [{ "internalType": "uint256", "name": "dust", "type": "uint256" }], - "name": "DustNotAllowed", - "type": "error" - }, - { - "inputs": [{ "internalType": "uint256", "name": "index", "type": "uint256" }], - "name": "IndexOutOfBounds", - "type": "error" - }, - { "inputs": [], "name": "InsufficientClaimReserve", "type": "error" }, - { "inputs": [], "name": "InsufficientFundsToSatisfyClaim", "type": "error" }, - { - "inputs": [ - { "internalType": "string", "name": "tag", "type": "string" }, - { "internalType": "uint256", "name": "expected", "type": "uint256" }, - { "internalType": "uint256", "name": "got", "type": "uint256" } - ], - "name": "LessThanMinimum", - "type": "error" - }, - { "inputs": [], "name": "MustBeGreaterThanZero", "type": "error" }, - { "inputs": [], "name": "NumeratorMoreThanBasis", "type": "error" }, - { "inputs": [], "name": "PausableNotPaused", "type": "error" }, - { "inputs": [], "name": "PausablePaused", "type": "error" }, - { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, - { - "inputs": [ - { "internalType": "uint256", "name": "from", "type": "uint256" }, - { "internalType": "uint256", "name": "to", "type": "uint256" } - ], - "name": "ToIndexMustBeGreaterThanFromIndex", - "type": "error" - }, - { "inputs": [], "name": "TokenMintingToSelfNotAllowed", "type": "error" }, - { "inputs": [], "name": "TokenTransferToSelfNotAllowed", "type": "error" }, - { "inputs": [], "name": "TransferOutFailed", "type": "error" }, - { - "inputs": [{ "internalType": "address", "name": "to", "type": "address" }], - "name": "UnexpectedlyReceivedTokensForSomeoneElse", - "type": "error" - }, - { "inputs": [], "name": "UnknownSender", "type": "error" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { - "components": [ - { "internalType": "uint256", "name": "weiToReturn", "type": "uint256" }, - { "internalType": "uint256", "name": "createdAt", "type": "uint256" } - ], - "indexed": false, - "internalType": "struct StakePool.ClaimRequest", - "name": "req", - "type": "tuple" - }, - { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } - ], - "name": "Claim", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "ConfigUpdated", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "bnbAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "poolTokenAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "uint256", "name": "bnbRewards", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "feeTokens", "type": "uint256" } - ], - "name": "EpochUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" }], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "shortCircuitAmount", "type": "uint256" }], - "name": "InitiateDelegation_ShortCircuit", - "type": "event" - }, - { "anonymous": false, "inputs": [], "name": "InitiateDelegation_Success", "type": "event" }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "transferOutAmount", "type": "uint256" }], - "name": "InitiateDelegation_TransferOut", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "unbondedAmount", "type": "uint256" }], - "name": "UnbondingFinished", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "bnbUnbonding", "type": "uint256" }], - "name": "UnbondingInitiated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "poolTokenAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "bnbAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "BOT_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "addressStore", - "outputs": [{ "internalType": "contract IAddressStore", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bnbToUnbond", - "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bnbUnbonding", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "index", "type": "uint256" }], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "claimAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "uint256", "name": "", "type": "uint256" } - ], - "name": "claimReqs", - "outputs": [ - { "internalType": "uint256", "name": "weiToReturn", "type": "uint256" }, - { "internalType": "uint256", "name": "createdAt", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "claimReserve", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "config", - "outputs": [ - { "internalType": "address", "name": "bcStakingWallet", "type": "address" }, - { "internalType": "uint256", "name": "minCrossChainTransfer", "type": "uint256" }, - { "internalType": "uint256", "name": "transferOutTimeout", "type": "uint256" }, - { "internalType": "uint256", "name": "minBNBDeposit", "type": "uint256" }, - { "internalType": "uint256", "name": "minTokenWithdrawal", "type": "uint256" }, - { "internalType": "uint256", "name": "cooldownPeriod", "type": "uint256" }, - { - "components": [ - { "internalType": "uint256", "name": "reward", "type": "uint256" }, - { "internalType": "uint256", "name": "deposit", "type": "uint256" }, - { "internalType": "uint256", "name": "withdraw", "type": "uint256" } - ], - "internalType": "struct FeeDistribution.Data", - "name": "fee", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "deposit", "outputs": [], "stateMutability": "payable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "bnbRewards", "type": "uint256" }], - "name": "epochUpdate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "exchangeRate", - "outputs": [ - { "internalType": "uint256", "name": "totalWei", "type": "uint256" }, - { "internalType": "uint256", "name": "poolTokenSupply", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], - "name": "getClaimRequestCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "user", "type": "address" }, - { "internalType": "uint256", "name": "from", "type": "uint256" }, - { "internalType": "uint256", "name": "to", "type": "uint256" } - ], - "name": "getPaginatedClaimRequests", - "outputs": [ - { - "components": [ - { "internalType": "uint256", "name": "weiToReturn", "type": "uint256" }, - { "internalType": "uint256", "name": "createdAt", "type": "uint256" } - ], - "internalType": "struct StakePool.ClaimRequest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "role", "type": "bytes32" }], - "name": "getRoleAdmin", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "name": "getRoleMember", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "role", "type": "bytes32" }], - "name": "getRoleMemberCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "contract IAddressStore", "name": "addressStore_", "type": "address" }, - { - "components": [ - { "internalType": "address", "name": "bcStakingWallet", "type": "address" }, - { "internalType": "uint256", "name": "minCrossChainTransfer", "type": "uint256" }, - { "internalType": "uint256", "name": "transferOutTimeout", "type": "uint256" }, - { "internalType": "uint256", "name": "minBNBDeposit", "type": "uint256" }, - { "internalType": "uint256", "name": "minTokenWithdrawal", "type": "uint256" }, - { "internalType": "uint256", "name": "cooldownPeriod", "type": "uint256" }, - { - "components": [ - { "internalType": "uint256", "name": "reward", "type": "uint256" }, - { "internalType": "uint256", "name": "deposit", "type": "uint256" }, - { "internalType": "uint256", "name": "withdraw", "type": "uint256" } - ], - "internalType": "struct FeeDistribution.Data", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct Config.Data", - "name": "config_", - "type": "tuple" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "initiateDelegation", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }], - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "bytes", "name": "", "type": "bytes" }, - { "internalType": "bytes", "name": "", "type": "bytes" } - ], - "name": "tokensReceived", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "unbondingFinished", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "bnbUnbonding_", "type": "uint256" }], - "name": "unbondingInitiated", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "components": [ - { "internalType": "address", "name": "bcStakingWallet", "type": "address" }, - { "internalType": "uint256", "name": "minCrossChainTransfer", "type": "uint256" }, - { "internalType": "uint256", "name": "transferOutTimeout", "type": "uint256" }, - { "internalType": "uint256", "name": "minBNBDeposit", "type": "uint256" }, - { "internalType": "uint256", "name": "minTokenWithdrawal", "type": "uint256" }, - { "internalType": "uint256", "name": "cooldownPeriod", "type": "uint256" }, - { - "components": [ - { "internalType": "uint256", "name": "reward", "type": "uint256" }, - { "internalType": "uint256", "name": "deposit", "type": "uint256" }, - { "internalType": "uint256", "name": "withdraw", "type": "uint256" } - ], - "internalType": "struct FeeDistribution.Data", - "name": "fee", - "type": "tuple" - } - ], - "internalType": "struct Config.Data", - "name": "config_", - "type": "tuple" - } - ], - "name": "updateConfig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] diff --git a/src/apps/p-stake/contracts/abis/p-stake-stk-token.json b/src/apps/p-stake/contracts/abis/p-stake-stk-token.json deleted file mode 100644 index 8d47c0710..000000000 --- a/src/apps/p-stake/contracts/abis/p-stake-stk-token.json +++ /dev/null @@ -1,729 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract IAddressStore", - "name": "addressStore_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "CallerIsNotTheOwner", - "type": "error" - }, - { - "inputs": [], - "name": "NewOwnerIsTheZeroAddress", - "type": "error" - }, - { - "inputs": [], - "name": "UnauthorizedSender", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "AuthorizedOperator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "Burned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "Minted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "RevokedOperator", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "Sent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "addressStore", - "outputs": [ - { - "internalType": "contract IAddressStore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "authorizeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "defaultOperators", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "granularity", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "address", - "name": "tokenHolder", - "type": "address" - } - ], - "name": "isOperatorFor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "userData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "operatorBurn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "operatorData", - "type": "bytes" - } - ], - "name": "operatorSend", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "revokeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "selfDestruct", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "send", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "holder", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/p-stake/contracts/index.ts b/src/apps/p-stake/contracts/index.ts deleted file mode 100644 index 5dcfebdf6..000000000 --- a/src/apps/p-stake/contracts/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * from './viem.contract-factory'; diff --git a/src/apps/p-stake/contracts/viem.contract-factory.ts b/src/apps/p-stake/contracts/viem.contract-factory.ts deleted file mode 100644 index c5eebef87..000000000 --- a/src/apps/p-stake/contracts/viem.contract-factory.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { Network } from '~types/network.interface'; - -import { PStakePool__factory, PStakeStkToken__factory } from './viem'; - -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class PStakeViemContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - - pStakePool({ address, network }: ContractOpts) { - return PStakePool__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - pStakeStkToken({ address, network }: ContractOpts) { - return PStakeStkToken__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } -} diff --git a/src/apps/p-stake/contracts/viem/PStakePool.ts b/src/apps/p-stake/contracts/viem/PStakePool.ts deleted file mode 100644 index 02821e0e8..000000000 --- a/src/apps/p-stake/contracts/viem/PStakePool.ts +++ /dev/null @@ -1,1146 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const pStakePoolAbi = [ - { - inputs: [], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'BNBTransferToUserFailed', - type: 'error', - }, - { - inputs: [], - name: 'CantBeMoreThan1e18', - type: 'error', - }, - { - inputs: [], - name: 'CantClaimBeforeDeadline', - type: 'error', - }, - { - inputs: [], - name: 'CantSetMoreThan30PercentFee', - type: 'error', - }, - { - inputs: [], - name: 'CooldownPeriodCantBeMoreThan30Days', - type: 'error', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'dust', - type: 'uint256', - }, - ], - name: 'DustNotAllowed', - type: 'error', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'IndexOutOfBounds', - type: 'error', - }, - { - inputs: [], - name: 'InsufficientClaimReserve', - type: 'error', - }, - { - inputs: [], - name: 'InsufficientFundsToSatisfyClaim', - type: 'error', - }, - { - inputs: [ - { - internalType: 'string', - name: 'tag', - type: 'string', - }, - { - internalType: 'uint256', - name: 'expected', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'got', - type: 'uint256', - }, - ], - name: 'LessThanMinimum', - type: 'error', - }, - { - inputs: [], - name: 'MustBeGreaterThanZero', - type: 'error', - }, - { - inputs: [], - name: 'NumeratorMoreThanBasis', - type: 'error', - }, - { - inputs: [], - name: 'PausableNotPaused', - type: 'error', - }, - { - inputs: [], - name: 'PausablePaused', - type: 'error', - }, - { - inputs: [], - name: 'ReentrancyGuardReentrantCall', - type: 'error', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'from', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'to', - type: 'uint256', - }, - ], - name: 'ToIndexMustBeGreaterThanFromIndex', - type: 'error', - }, - { - inputs: [], - name: 'TokenMintingToSelfNotAllowed', - type: 'error', - }, - { - inputs: [], - name: 'TokenTransferToSelfNotAllowed', - type: 'error', - }, - { - inputs: [], - name: 'TransferOutFailed', - type: 'error', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - ], - name: 'UnexpectedlyReceivedTokensForSomeoneElse', - type: 'error', - }, - { - inputs: [], - name: 'UnknownSender', - type: 'error', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - components: [ - { - internalType: 'uint256', - name: 'weiToReturn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'createdAt', - type: 'uint256', - }, - ], - indexed: false, - internalType: 'struct StakePool.ClaimRequest', - name: 'req', - type: 'tuple', - }, - { - indexed: false, - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - name: 'Claim', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'ConfigUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'bnbAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'poolTokenAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'bnbRewards', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'feeTokens', - type: 'uint256', - }, - ], - name: 'EpochUpdate', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint8', - name: 'version', - type: 'uint8', - }, - ], - name: 'Initialized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'shortCircuitAmount', - type: 'uint256', - }, - ], - name: 'InitiateDelegation_ShortCircuit', - type: 'event', - }, - { - anonymous: false, - inputs: [], - name: 'InitiateDelegation_Success', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'transferOutAmount', - type: 'uint256', - }, - ], - name: 'InitiateDelegation_TransferOut', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'previousAdminRole', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'newAdminRole', - type: 'bytes32', - }, - ], - name: 'RoleAdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleGranted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleRevoked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'unbondedAmount', - type: 'uint256', - }, - ], - name: 'UnbondingFinished', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'bnbUnbonding', - type: 'uint256', - }, - ], - name: 'UnbondingInitiated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'poolTokenAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'bnbAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'timestamp', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - inputs: [], - name: 'BOT_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'DEFAULT_ADMIN_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'addressStore', - outputs: [ - { - internalType: 'contract IAddressStore', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'bnbToUnbond', - outputs: [ - { - internalType: 'int256', - name: '', - type: 'int256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'bnbUnbonding', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'claim', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'claimAll', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - name: 'claimReqs', - outputs: [ - { - internalType: 'uint256', - name: 'weiToReturn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'createdAt', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'claimReserve', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'config', - outputs: [ - { - internalType: 'address', - name: 'bcStakingWallet', - type: 'address', - }, - { - internalType: 'uint256', - name: 'minCrossChainTransfer', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'transferOutTimeout', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minBNBDeposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minTokenWithdrawal', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'cooldownPeriod', - type: 'uint256', - }, - { - components: [ - { - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'withdraw', - type: 'uint256', - }, - ], - internalType: 'struct FeeDistribution.Data', - name: 'fee', - type: 'tuple', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'deposit', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'bnbRewards', - type: 'uint256', - }, - ], - name: 'epochUpdate', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'exchangeRate', - outputs: [ - { - internalType: 'uint256', - name: 'totalWei', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'poolTokenSupply', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'getClaimRequestCount', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'user', - type: 'address', - }, - { - internalType: 'uint256', - name: 'from', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'to', - type: 'uint256', - }, - ], - name: 'getPaginatedClaimRequests', - outputs: [ - { - components: [ - { - internalType: 'uint256', - name: 'weiToReturn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'createdAt', - type: 'uint256', - }, - ], - internalType: 'struct StakePool.ClaimRequest[]', - name: '', - type: 'tuple[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - ], - name: 'getRoleAdmin', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'uint256', - name: 'index', - type: 'uint256', - }, - ], - name: 'getRoleMember', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - ], - name: 'getRoleMemberCount', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'grantRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'hasRole', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IAddressStore', - name: 'addressStore_', - type: 'address', - }, - { - components: [ - { - internalType: 'address', - name: 'bcStakingWallet', - type: 'address', - }, - { - internalType: 'uint256', - name: 'minCrossChainTransfer', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'transferOutTimeout', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minBNBDeposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minTokenWithdrawal', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'cooldownPeriod', - type: 'uint256', - }, - { - components: [ - { - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'withdraw', - type: 'uint256', - }, - ], - internalType: 'struct FeeDistribution.Data', - name: 'fee', - type: 'tuple', - }, - ], - internalType: 'struct Config.Data', - name: 'config_', - type: 'tuple', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'initiateDelegation', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'renounceRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'revokeRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceId', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - { - internalType: 'bytes', - name: '', - type: 'bytes', - }, - ], - name: 'tokensReceived', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'unbondingFinished', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'bnbUnbonding_', - type: 'uint256', - }, - ], - name: 'unbondingInitiated', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'unpause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - components: [ - { - internalType: 'address', - name: 'bcStakingWallet', - type: 'address', - }, - { - internalType: 'uint256', - name: 'minCrossChainTransfer', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'transferOutTimeout', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minBNBDeposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minTokenWithdrawal', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'cooldownPeriod', - type: 'uint256', - }, - { - components: [ - { - internalType: 'uint256', - name: 'reward', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deposit', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'withdraw', - type: 'uint256', - }, - ], - internalType: 'struct FeeDistribution.Data', - name: 'fee', - type: 'tuple', - }, - ], - internalType: 'struct Config.Data', - name: 'config_', - type: 'tuple', - }, - ], - name: 'updateConfig', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - stateMutability: 'payable', - type: 'receive', - }, -] as const; - -export type PStakePool = typeof pStakePoolAbi; -export type PStakePoolContract = GetContractReturnType; - -export class PStakePool__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: pStakePoolAbi, publicClient: client }); - } -} diff --git a/src/apps/p-stake/contracts/viem/PStakeStkToken.ts b/src/apps/p-stake/contracts/viem/PStakeStkToken.ts deleted file mode 100644 index 4542d5ee8..000000000 --- a/src/apps/p-stake/contracts/viem/PStakeStkToken.ts +++ /dev/null @@ -1,743 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const pStakeStkTokenAbi = [ - { - inputs: [ - { - internalType: 'contract IAddressStore', - name: 'addressStore_', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'CallerIsNotTheOwner', - type: 'error', - }, - { - inputs: [], - name: 'NewOwnerIsTheZeroAddress', - type: 'error', - }, - { - inputs: [], - name: 'UnauthorizedSender', - type: 'error', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'tokenHolder', - type: 'address', - }, - ], - name: 'AuthorizedOperator', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - { - indexed: false, - internalType: 'bytes', - name: 'operatorData', - type: 'bytes', - }, - ], - name: 'Burned', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - { - indexed: false, - internalType: 'bytes', - name: 'operatorData', - type: 'bytes', - }, - ], - name: 'Minted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'tokenHolder', - type: 'address', - }, - ], - name: 'RevokedOperator', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - { - indexed: false, - internalType: 'bytes', - name: 'operatorData', - type: 'bytes', - }, - ], - name: 'Sent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - inputs: [], - name: 'addressStore', - outputs: [ - { - internalType: 'contract IAddressStore', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'holder', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - ], - name: 'authorizeOperator', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'tokenHolder', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'burn', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'defaultOperators', - outputs: [ - { - internalType: 'address[]', - name: '', - type: 'address[]', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getOwner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'granularity', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - { - internalType: 'address', - name: 'tokenHolder', - type: 'address', - }, - ], - name: 'isOperatorFor', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'userData', - type: 'bytes', - }, - { - internalType: 'bytes', - name: 'operatorData', - type: 'bytes', - }, - ], - name: 'mint', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - { - internalType: 'bytes', - name: 'operatorData', - type: 'bytes', - }, - ], - name: 'operatorBurn', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - { - internalType: 'bytes', - name: 'operatorData', - type: 'bytes', - }, - ], - name: 'operatorSend', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'operator', - type: 'address', - }, - ], - name: 'revokeOperator', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'selfDestruct', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'bytes', - name: 'data', - type: 'bytes', - }, - ], - name: 'send', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'holder', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'unpause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type PStakeStkToken = typeof pStakeStkTokenAbi; -export type PStakeStkTokenContract = GetContractReturnType; - -export class PStakeStkToken__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: pStakeStkTokenAbi, publicClient: client }); - } -} diff --git a/src/apps/p-stake/contracts/viem/index.ts b/src/apps/p-stake/contracts/viem/index.ts deleted file mode 100644 index 41d522268..000000000 --- a/src/apps/p-stake/contracts/viem/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { PStakePool } from './PStakePool'; -export type { PStakeStkToken } from './PStakeStkToken'; - -export { PStakePool__factory } from './PStakePool'; -export { PStakeStkToken__factory } from './PStakeStkToken'; diff --git a/src/apps/p-stake/p-stake.module.ts b/src/apps/p-stake/p-stake.module.ts deleted file mode 100644 index 7b7b713cd..000000000 --- a/src/apps/p-stake/p-stake.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { BinanceSmartChainPStakeStakeTokenFetcher } from './binance-smart-chain/p-stake.stake.token-fetcher'; -import { PStakeViemContractFactory } from './contracts'; - -@Module({ - providers: [BinanceSmartChainPStakeStakeTokenFetcher, PStakeViemContractFactory], -}) -export class PStakeAppModule extends AbstractApp() {} diff --git a/src/apps/penguin/avalanche/penguin.vault.token-fetcher.ts b/src/apps/penguin/avalanche/penguin.vault.token-fetcher.ts deleted file mode 100644 index 96de590ae..000000000 --- a/src/apps/penguin/avalanche/penguin.vault.token-fetcher.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { PenguinViemContractFactory } from '../contracts'; -import { PenguinVault } from '../contracts/viem'; - -@PositionTemplate() -export class AvalanchePenguinVaultTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Compounder Vaults'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(PenguinViemContractFactory) protected readonly contractFactory: PenguinViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.penguinVault({ network: this.network, address }); - } - - async getAddresses() { - return [ - '0xab6eed788beed09d1279b21b6c91f9750242e0f5', - '0xbbd9dd1f15c729745edffd8e46253463d40a7d84', - '0x323c5cc630c0ce1f2823d1a3d48260f770b5669b', - '0xb6cd0569563549033c129769dbc58d1843ed98cb', - '0x9acbca2315a517a3dab8e857f5921a8b3435891a', - '0xdf5fb3fa0161a8508599a6dfc9d6c004cb58652b', - '0x1ad8ff956247f87de904f31b0322843f32f19a5c', - '0xbe42a57f4a08636c26457475e94409516fa39b3b', - '0xfc8deac2f93e5b4739ece2802e5c5e05106fd872', - '0xc90b9a965c800a0318ec4282a86e387beeef0ffe', - '0xb4558486cd8fd2dd5e3b078e7822c1bb66c782d0', - '0x85fc4ec9dee0df5060f321b743838f7068499177', - '0xd6da9d000ffa1ea6d3939fcd80f4d473f2027567', - '0x4ec41d1e25925c57876885c34fe0b323d7cc3846', - '0x7dd48db5372539d01ed4b6cc525403d98bc61bdd', - '0x21d2aaed1d2f5e36ff02b008b091054d065c9824', - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.depositToken(), network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalDeposits(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - return [reserve / appToken.supply]; - } -} diff --git a/src/apps/penguin/contracts/abis/penguin-vault.json b/src/apps/penguin/contracts/abis/penguin-vault.json index 437879b69..7da2ee4bb 100644 --- a/src/apps/penguin/contracts/abis/penguin-vault.json +++ b/src/apps/penguin/contracts/abis/penguin-vault.json @@ -3,24 +3,75 @@ "type": "constructor", "stateMutability": "nonpayable", "inputs": [ - { "type": "string", "name": "_name", "internalType": "string" }, - { "type": "address[8]", "name": "_initAddressArray", "internalType": "address[8]" }, - { "type": "uint256", "name": "_pid", "internalType": "uint256" }, - { "type": "uint256", "name": "_minTokensToReinvest", "internalType": "uint256" }, - { "type": "uint256[4]", "name": "_initFeeStructure", "internalType": "uint256[4]" }, - { "type": "address[]", "name": "_pathRewardToToken0", "internalType": "address[]" }, - { "type": "address[]", "name": "_pathRewardToToken1", "internalType": "address[]" }, - { "type": "address", "name": "_pefiGlobalVariables", "internalType": "address" }, - { "type": "bool", "name": "_USE_GLOBAL_PEFI_VARIABLES", "internalType": "bool" } + { + "type": "string", + "name": "_name", + "internalType": "string" + }, + { + "type": "address[8]", + "name": "_initAddressArray", + "internalType": "address[8]" + }, + { + "type": "uint256", + "name": "_pid", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "_minTokensToReinvest", + "internalType": "uint256" + }, + { + "type": "uint256[4]", + "name": "_initFeeStructure", + "internalType": "uint256[4]" + }, + { + "type": "address[]", + "name": "_pathRewardToToken0", + "internalType": "address[]" + }, + { + "type": "address[]", + "name": "_pathRewardToToken1", + "internalType": "address[]" + }, + { + "type": "address", + "name": "_pefiGlobalVariables", + "internalType": "address" + }, + { + "type": "bool", + "name": "_USE_GLOBAL_PEFI_VARIABLES", + "internalType": "bool" + } ] }, { "type": "event", "name": "Approval", "inputs": [ - { "type": "address", "name": "owner", "internalType": "address", "indexed": true }, - { "type": "address", "name": "spender", "internalType": "address", "indexed": true }, - { "type": "uint256", "name": "value", "internalType": "uint256", "indexed": false } + { + "type": "address", + "name": "owner", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "spender", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "value", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -28,8 +79,18 @@ "type": "event", "name": "ClaimedxPEFI", "inputs": [ - { "type": "address", "name": "account", "internalType": "address", "indexed": true }, - { "type": "uint256", "name": "amount", "internalType": "uint256", "indexed": false } + { + "type": "address", + "name": "account", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -37,25 +98,62 @@ "type": "event", "name": "Deposit", "inputs": [ - { "type": "address", "name": "account", "internalType": "address", "indexed": true }, - { "type": "uint256", "name": "amount", "internalType": "uint256", "indexed": false } + { + "type": "address", + "name": "account", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, { "type": "event", "name": "DepositsEnabled", - "inputs": [{ "type": "bool", "name": "newValue", "internalType": "bool", "indexed": false }], + "inputs": [ + { + "type": "bool", + "name": "newValue", + "internalType": "bool", + "indexed": false + } + ], "anonymous": false }, { "type": "event", "name": "FeeStructureUpdated", "inputs": [ - { "type": "uint256", "name": "newPOOL_CREATOR_FEE_BIPS", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newNEST_FEE_BIPS", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newDEV_FEE_BIPS", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newALTERNATE_FEE_BIPS", "internalType": "uint256", "indexed": false } + { + "type": "uint256", + "name": "newPOOL_CREATOR_FEE_BIPS", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newNEST_FEE_BIPS", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newDEV_FEE_BIPS", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newALTERNATE_FEE_BIPS", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -63,8 +161,18 @@ "type": "event", "name": "NestStakingBipsChanged", "inputs": [ - { "type": "uint256", "name": "oldNEST_STAKING_BIPS", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newNEST_STAKING_BIPS", "internalType": "uint256", "indexed": false } + { + "type": "uint256", + "name": "oldNEST_STAKING_BIPS", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newNEST_STAKING_BIPS", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -72,8 +180,18 @@ "type": "event", "name": "OwnershipTransferred", "inputs": [ - { "type": "address", "name": "previousOwner", "internalType": "address", "indexed": true }, - { "type": "address", "name": "newOwner", "internalType": "address", "indexed": true } + { + "type": "address", + "name": "previousOwner", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "newOwner", + "internalType": "address", + "indexed": true + } ], "anonymous": false }, @@ -81,8 +199,18 @@ "type": "event", "name": "Recovered", "inputs": [ - { "type": "address", "name": "token", "internalType": "address", "indexed": false }, - { "type": "uint256", "name": "amount", "internalType": "uint256", "indexed": false } + { + "type": "address", + "name": "token", + "internalType": "address", + "indexed": false + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -90,24 +218,56 @@ "type": "event", "name": "Reinvest", "inputs": [ - { "type": "uint256", "name": "newTotalDeposits", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newTotalSupply", "internalType": "uint256", "indexed": false } + { + "type": "uint256", + "name": "newTotalDeposits", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newTotalSupply", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, { "type": "event", "name": "StakedPEFI", - "inputs": [{ "type": "uint256", "name": "amountPefiSentToNest", "internalType": "uint256", "indexed": false }], + "inputs": [ + { + "type": "uint256", + "name": "amountPefiSentToNest", + "internalType": "uint256", + "indexed": false + } + ], "anonymous": false }, { "type": "event", "name": "Transfer", "inputs": [ - { "type": "address", "name": "from", "internalType": "address", "indexed": true }, - { "type": "address", "name": "to", "internalType": "address", "indexed": true }, - { "type": "uint256", "name": "value", "internalType": "uint256", "indexed": false } + { + "type": "address", + "name": "from", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "to", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "value", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -115,8 +275,18 @@ "type": "event", "name": "UpdateAlternateAddress", "inputs": [ - { "type": "address", "name": "oldValue", "internalType": "address", "indexed": false }, - { "type": "address", "name": "newValue", "internalType": "address", "indexed": false } + { + "type": "address", + "name": "oldValue", + "internalType": "address", + "indexed": false + }, + { + "type": "address", + "name": "newValue", + "internalType": "address", + "indexed": false + } ], "anonymous": false }, @@ -124,8 +294,18 @@ "type": "event", "name": "UpdateDevAddress", "inputs": [ - { "type": "address", "name": "oldValue", "internalType": "address", "indexed": false }, - { "type": "address", "name": "newValue", "internalType": "address", "indexed": false } + { + "type": "address", + "name": "oldValue", + "internalType": "address", + "indexed": false + }, + { + "type": "address", + "name": "newValue", + "internalType": "address", + "indexed": false + } ], "anonymous": false }, @@ -133,8 +313,18 @@ "type": "event", "name": "UpdateMaxTokensToDepositWithoutReinvest", "inputs": [ - { "type": "uint256", "name": "oldValue", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newValue", "internalType": "uint256", "indexed": false } + { + "type": "uint256", + "name": "oldValue", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newValue", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -142,8 +332,18 @@ "type": "event", "name": "UpdateMinTokensToReinvest", "inputs": [ - { "type": "uint256", "name": "oldValue", "internalType": "uint256", "indexed": false }, - { "type": "uint256", "name": "newValue", "internalType": "uint256", "indexed": false } + { + "type": "uint256", + "name": "oldValue", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "newValue", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, @@ -151,8 +351,18 @@ "type": "event", "name": "UpdateNestAddress", "inputs": [ - { "type": "address", "name": "oldValue", "internalType": "address", "indexed": false }, - { "type": "address", "name": "newValue", "internalType": "address", "indexed": false } + { + "type": "address", + "name": "oldValue", + "internalType": "address", + "indexed": false + }, + { + "type": "address", + "name": "newValue", + "internalType": "address", + "indexed": false + } ], "anonymous": false }, @@ -160,205 +370,410 @@ "type": "event", "name": "UpdatePoolCreatorAddress", "inputs": [ - { "type": "address", "name": "oldValue", "internalType": "address", "indexed": false }, - { "type": "address", "name": "newValue", "internalType": "address", "indexed": false } + { + "type": "address", + "name": "oldValue", + "internalType": "address", + "indexed": false + }, + { + "type": "address", + "name": "newValue", + "internalType": "address", + "indexed": false + } ], "anonymous": false }, { "type": "event", "name": "UseGlobalVariablesUpdated", - "inputs": [{ "type": "bool", "name": "newValue", "internalType": "bool", "indexed": false }], + "inputs": [ + { + "type": "bool", + "name": "newValue", + "internalType": "bool", + "indexed": false + } + ], "anonymous": false }, { "type": "event", "name": "Withdraw", "inputs": [ - { "type": "address", "name": "account", "internalType": "address", "indexed": true }, - { "type": "uint256", "name": "amount", "internalType": "uint256", "indexed": false } + { + "type": "address", + "name": "account", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } ], "anonymous": false }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "ALTERNATE_FEE_BIPS", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "ALTERNATE_FEE_BIPS_LOCAL", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "bool", "name": "", "internalType": "bool" }], + "outputs": [ + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], "name": "DEPOSITS_ENABLED", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "DEV_FEE_BIPS", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "DEV_FEE_BIPS_LOCAL", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "bytes32", "name": "", "internalType": "bytes32" }], + "outputs": [ + { + "type": "bytes32", + "name": "", + "internalType": "bytes32" + } + ], "name": "DOMAIN_TYPEHASH", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "MAX_TOKENS_TO_DEPOSIT_WITHOUT_REINVEST", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "MAX_TOTAL_FEE", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "MIN_TOKENS_TO_REINVEST", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "NEST_FEE_BIPS", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "NEST_FEE_BIPS_LOCAL", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "NEST_STAKING_BIPS", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "bytes32", "name": "", "internalType": "bytes32" }], + "outputs": [ + { + "type": "bytes32", + "name": "", + "internalType": "bytes32" + } + ], "name": "PERMIT_TYPEHASH", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "PID", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "POOL_CREATOR_FEE_BIPS", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "POOL_CREATOR_FEE_BIPS_LOCAL", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "bool", "name": "", "internalType": "bool" }], + "outputs": [ + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], "name": "USE_GLOBAL_PEFI_VARIABLES", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "bytes32", "name": "", "internalType": "bytes32" }], + "outputs": [ + { + "type": "bytes32", + "name": "", + "internalType": "bytes32" + } + ], "name": "VERSION_HASH", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "allowance", "inputs": [ - { "type": "address", "name": "account", "internalType": "address" }, - { "type": "address", "name": "spender", "internalType": "address" } + { + "type": "address", + "name": "account", + "internalType": "address" + }, + { + "type": "address", + "name": "spender", + "internalType": "address" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "alternateAddress", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "alternateAddressLocal", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", - "outputs": [{ "type": "bool", "name": "", "internalType": "bool" }], + "outputs": [ + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], "name": "approve", "inputs": [ - { "type": "address", "name": "spender", "internalType": "address" }, - { "type": "uint256", "name": "amount", "internalType": "uint256" } + { + "type": "address", + "name": "spender", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "balanceOf", - "inputs": [{ "type": "address", "name": "account", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "account", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "checkReward", "inputs": [] }, - { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "claimXPEFI", "inputs": [] }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "claimXPEFI", + "inputs": [] + }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint8", "name": "", "internalType": "uint8" }], + "outputs": [ + { + "type": "uint8", + "name": "", + "internalType": "uint8" + } + ], "name": "decimals", "inputs": [] }, @@ -367,7 +782,13 @@ "stateMutability": "nonpayable", "outputs": [], "name": "deposit", - "inputs": [{ "type": "uint256", "name": "amount", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } + ] }, { "type": "function", @@ -375,14 +796,28 @@ "outputs": [], "name": "depositFor", "inputs": [ - { "type": "address", "name": "account", "internalType": "address" }, - { "type": "uint256", "name": "amount", "internalType": "uint256" } + { + "type": "address", + "name": "account", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "contract IERC20" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "contract IERC20" + } + ], "name": "depositToken", "inputs": [] }, @@ -392,61 +827,135 @@ "outputs": [], "name": "depositWithPermit", "inputs": [ - { "type": "uint256", "name": "amount", "internalType": "uint256" }, - { "type": "uint256", "name": "deadline", "internalType": "uint256" }, - { "type": "uint8", "name": "v", "internalType": "uint8" }, - { "type": "bytes32", "name": "r", "internalType": "bytes32" }, - { "type": "bytes32", "name": "s", "internalType": "bytes32" } + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "deadline", + "internalType": "uint256" + }, + { + "type": "uint8", + "name": "v", + "internalType": "uint8" + }, + { + "type": "bytes32", + "name": "r", + "internalType": "bytes32" + }, + { + "type": "bytes32", + "name": "s", + "internalType": "bytes32" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "devAddress", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "devAddressLocal", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "estimateDeployedBalance", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "estimateReinvestReward", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "getDepositTokensForShares", - "inputs": [{ "type": "uint256", "name": "amount", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } + ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "bytes32", "name": "", "internalType": "bytes32" }], + "outputs": [ + { + "type": "bytes32", + "name": "", + "internalType": "bytes32" + } + ], "name": "getDomainSeparator", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "getSharesForDepositTokens", - "inputs": [{ "type": "uint256", "name": "amount", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } + ] }, { "type": "function", @@ -454,58 +963,120 @@ "outputs": [], "name": "impromptuTokenAggregation", "inputs": [ - { "type": "uint256", "name": "minReturnAmountAccepted", "internalType": "uint256" }, - { "type": "bool", "name": "disableDeposits", "internalType": "bool" } + { + "type": "uint256", + "name": "minReturnAmountAccepted", + "internalType": "uint256" + }, + { + "type": "bool", + "name": "disableDeposits", + "internalType": "bool" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "string", "name": "", "internalType": "string" }], + "outputs": [ + { + "type": "string", + "name": "", + "internalType": "string" + } + ], "name": "name", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "nestAddress", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "nestAddressLocal", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "nonces", - "inputs": [{ "type": "address", "name": "", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "owner", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "contract PenguinStrategyGlobalVariables" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "contract PenguinStrategyGlobalVariables" + } + ], "name": "pefiGlobalVariableContract", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "pendingXPefi", - "inputs": [{ "type": "address", "name": "user", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] }, { "type": "function", @@ -513,19 +1084,53 @@ "outputs": [], "name": "permit", "inputs": [ - { "type": "address", "name": "owner", "internalType": "address" }, - { "type": "address", "name": "spender", "internalType": "address" }, - { "type": "uint256", "name": "value", "internalType": "uint256" }, - { "type": "uint256", "name": "deadline", "internalType": "uint256" }, - { "type": "uint8", "name": "v", "internalType": "uint8" }, - { "type": "bytes32", "name": "r", "internalType": "bytes32" }, - { "type": "bytes32", "name": "s", "internalType": "bytes32" } + { + "type": "address", + "name": "owner", + "internalType": "address" + }, + { + "type": "address", + "name": "spender", + "internalType": "address" + }, + { + "type": "uint256", + "name": "value", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "deadline", + "internalType": "uint256" + }, + { + "type": "uint8", + "name": "v", + "internalType": "uint8" + }, + { + "type": "bytes32", + "name": "r", + "internalType": "bytes32" + }, + { + "type": "bytes32", + "name": "s", + "internalType": "bytes32" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "poolCreatorAddress", "inputs": [] }, @@ -534,7 +1139,13 @@ "stateMutability": "nonpayable", "outputs": [], "name": "recoverAVAX", - "inputs": [{ "type": "uint256", "name": "amount", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } + ] }, { "type": "function", @@ -542,98 +1153,212 @@ "outputs": [], "name": "recoverERC20", "inputs": [ - { "type": "address", "name": "tokenAddress", "internalType": "address" }, - { "type": "uint256", "name": "tokenAmount", "internalType": "uint256" } + { + "type": "address", + "name": "tokenAddress", + "internalType": "address" + }, + { + "type": "uint256", + "name": "tokenAmount", + "internalType": "uint256" + } ] }, - { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "reinvest", "inputs": [] }, - { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "renounceOwnership", "inputs": [] }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "reinvest", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "renounceOwnership", + "inputs": [] + }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "revokeAllowance", "inputs": [ - { "type": "address", "name": "token", "internalType": "address" }, - { "type": "address", "name": "spender", "internalType": "address" } + { + "type": "address", + "name": "token", + "internalType": "address" + }, + { + "type": "address", + "name": "spender", + "internalType": "address" + } ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "contract IERC20" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "contract IERC20" + } + ], "name": "rewardToken", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "contract IRouter" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "contract IRouter" + } + ], "name": "router", "inputs": [] }, - { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "setAllowances", "inputs": [] }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setAllowances", + "inputs": [] + }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "stakingContract", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "string", "name": "", "internalType": "string" }], + "outputs": [ + { + "type": "string", + "name": "", + "internalType": "string" + } + ], "name": "symbol", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "token0", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "address", "name": "", "internalType": "address" }], + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], "name": "token1", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "totalDeposits", "inputs": [] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "totalSupply", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", - "outputs": [{ "type": "bool", "name": "", "internalType": "bool" }], + "outputs": [ + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], "name": "transfer", "inputs": [ - { "type": "address", "name": "dst", "internalType": "address" }, - { "type": "uint256", "name": "amount", "internalType": "uint256" } + { + "type": "address", + "name": "dst", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } ] }, { "type": "function", "stateMutability": "nonpayable", - "outputs": [{ "type": "bool", "name": "", "internalType": "bool" }], + "outputs": [ + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], "name": "transferFrom", "inputs": [ - { "type": "address", "name": "src", "internalType": "address" }, - { "type": "address", "name": "dst", "internalType": "address" }, - { "type": "uint256", "name": "amount", "internalType": "uint256" } + { + "type": "address", + "name": "src", + "internalType": "address" + }, + { + "type": "address", + "name": "dst", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } ] }, { @@ -641,28 +1366,52 @@ "stateMutability": "nonpayable", "outputs": [], "name": "transferOwnership", - "inputs": [{ "type": "address", "name": "newOwner", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "newOwner", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateAlternateAddress", - "inputs": [{ "type": "address", "name": "newValue", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "newValue", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateDepositsEnabled", - "inputs": [{ "type": "bool", "name": "newValue", "internalType": "bool" }] + "inputs": [ + { + "type": "bool", + "name": "newValue", + "internalType": "bool" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateDevAddress", - "inputs": [{ "type": "address", "name": "newValue", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "newValue", + "internalType": "address" + } + ] }, { "type": "function", @@ -670,10 +1419,26 @@ "outputs": [], "name": "updateFeeStructure", "inputs": [ - { "type": "uint256", "name": "newPOOL_CREATOR_FEE_BIPS", "internalType": "uint256" }, - { "type": "uint256", "name": "newNEST_FEE_BIPS", "internalType": "uint256" }, - { "type": "uint256", "name": "newDEV_FEE_BIPS", "internalType": "uint256" }, - { "type": "uint256", "name": "newALTERNATE_FEE_BIPS", "internalType": "uint256" } + { + "type": "uint256", + "name": "newPOOL_CREATOR_FEE_BIPS", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "newNEST_FEE_BIPS", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "newDEV_FEE_BIPS", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "newALTERNATE_FEE_BIPS", + "internalType": "uint256" + } ] }, { @@ -681,61 +1446,121 @@ "stateMutability": "nonpayable", "outputs": [], "name": "updateMaxTokensToDepositWithoutReinvest", - "inputs": [{ "type": "uint256", "name": "newValue", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "newValue", + "internalType": "uint256" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateMinTokensToReinvest", - "inputs": [{ "type": "uint256", "name": "newValue", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "newValue", + "internalType": "uint256" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateNestAddress", - "inputs": [{ "type": "address", "name": "newValue", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "newValue", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateNestStakingBips", - "inputs": [{ "type": "uint256", "name": "newNEST_STAKING_BIPS", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "newNEST_STAKING_BIPS", + "internalType": "uint256" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updatePoolCreatorAddress", - "inputs": [{ "type": "address", "name": "newValue", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "newValue", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "updateUseGlobalVariables", - "inputs": [{ "type": "bool", "name": "newValue", "internalType": "bool" }] + "inputs": [ + { + "type": "bool", + "name": "newValue", + "internalType": "bool" + } + ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "withdraw", - "inputs": [{ "type": "uint256", "name": "amount", "internalType": "uint256" }] + "inputs": [ + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + } + ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "xPefiDebt", - "inputs": [{ "type": "address", "name": "", "internalType": "address" }] + "inputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ] }, { "type": "function", "stateMutability": "view", - "outputs": [{ "type": "uint256", "name": "", "internalType": "uint256" }], + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], "name": "xPefiPerShare", "inputs": [] } diff --git a/src/apps/penguin/penguin.module.ts b/src/apps/penguin/penguin.module.ts index 45da17e46..13dcab096 100644 --- a/src/apps/penguin/penguin.module.ts +++ b/src/apps/penguin/penguin.module.ts @@ -6,7 +6,6 @@ import { AvalanchePenguinChefV1FarmContractPositionFetcher } from './avalanche/p import { AvalanchePenguinChefV2FarmContractPositionFetcher } from './avalanche/penguin.chef-v2-farm.contract-position-fetcher'; import { AvalanchePenguinIPefiTokenFetcher } from './avalanche/penguin.i-pefi.token-fetcher'; import { AvalanchePenguinVaultClaimableContractPositionFetcher } from './avalanche/penguin.vault-claimable.contract-position-fetcher'; -import { AvalanchePenguinVaultTokenFetcher } from './avalanche/penguin.vault.token-fetcher'; import { AvalanchePenguinXPefiTokenFetcher } from './avalanche/penguin.x-pefi.token-fetcher'; import { PenguinViemContractFactory } from './contracts'; @@ -17,7 +16,6 @@ import { PenguinViemContractFactory } from './contracts'; AvalanchePenguinChefV2FarmContractPositionFetcher, AvalanchePenguinIPefiTokenFetcher, AvalanchePenguinXPefiTokenFetcher, - AvalanchePenguinVaultTokenFetcher, AvalanchePenguinVaultClaimableContractPositionFetcher, ], }) diff --git a/src/apps/pie-dao/ethereum/pie-dao.e-dough.token-fetcher.ts b/src/apps/pie-dao/ethereum/pie-dao.e-dough.token-fetcher.ts deleted file mode 100644 index 0425d2cd0..000000000 --- a/src/apps/pie-dao/ethereum/pie-dao.e-dough.token-fetcher.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { Erc20 } from '~contract/contracts/viem'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; - -import { PieDaoViemContractFactory } from '../contracts'; - -@PositionTemplate() -export class EthereumPieDaoEDoughTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'eDOUGH'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(PieDaoViemContractFactory) protected readonly contractFactory: PieDaoViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.appToolkit.globalViemContracts.erc20({ address, network: this.network }); - } - - getAddresses() { - return ['0x63cbd1858bd79de1a06c3c26462db360b834912d']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0xad32a8e6220741182940c5abf610bde99e737b2d', network: this.network }]; // DOUGH - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/pie-dao/pie-dao.module.ts b/src/apps/pie-dao/pie-dao.module.ts index cab959ce9..53e2a8b3e 100644 --- a/src/apps/pie-dao/pie-dao.module.ts +++ b/src/apps/pie-dao/pie-dao.module.ts @@ -3,7 +3,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; import { PieDaoViemContractFactory } from './contracts'; -import { EthereumPieDaoEDoughTokenFetcher } from './ethereum/pie-dao.e-dough.token-fetcher'; import { EthereumPieDaoFarmMasterChefContractPositionFetcher } from './ethereum/pie-dao.farm-master-chef.contract-position-fetcher'; import { EthereumPieDaoFarmSingleStakingContractPositionFetcher } from './ethereum/pie-dao.farm-single-staking.contract-position-fetcher'; import { EthereumPieDaoVotingEscrowContractPositionFether } from './ethereum/pie-dao.voting-escrow.contract-position-fetcher'; @@ -12,7 +11,6 @@ import { EthereumPieDaoVotingEscrowContractPositionFether } from './ethereum/pie providers: [ PieDaoViemContractFactory, // Ethereum - EthereumPieDaoEDoughTokenFetcher, EthereumPieDaoFarmSingleStakingContractPositionFetcher, EthereumPieDaoFarmMasterChefContractPositionFetcher, EthereumPieDaoVotingEscrowContractPositionFether, diff --git a/src/apps/pika-protocol/contracts/abis/pika-protocol-es-pika.json b/src/apps/pika-protocol/contracts/abis/pika-protocol-es-pika.json deleted file mode 100644 index 498d6b5c4..000000000 --- a/src/apps/pika-protocol/contracts/abis/pika-protocol-es-pika.json +++ /dev/null @@ -1,278 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "string", "name": "name", "type": "string" }, - { "internalType": "string", "name": "symbol", "type": "string" }, - { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, - { "internalType": "address", "name": "beneficiary", "type": "address" }, - { "internalType": "address", "name": "gov", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "bool", "name": "transfersAllowed", "type": "bool" }], - "name": "TransfersAllowed", - "type": "event" - }, - { - "inputs": [], - "name": "ADMIN_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINTER_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TRANSFER_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "role", "type": "bytes32" }], - "name": "getRoleAdmin", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_recipient", "type": "address" }, - { "internalType": "uint256", "name": "_amount", "type": "uint256" } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bool", "name": "_transfersAllowed", "type": "bool" }], - "name": "setTransfersAllowed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }], - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "transfersAllowed", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/pika-protocol/contracts/viem.contract-factory.ts b/src/apps/pika-protocol/contracts/viem.contract-factory.ts index 27396b31f..f7ee6cd87 100644 --- a/src/apps/pika-protocol/contracts/viem.contract-factory.ts +++ b/src/apps/pika-protocol/contracts/viem.contract-factory.ts @@ -3,12 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { - PikaProtocolEsPika__factory, - PikaProtocolVault__factory, - PikaProtocolVaultReward__factory, - PikaProtocolVester__factory, -} from './viem'; +import { PikaProtocolVault__factory, PikaProtocolVaultReward__factory, PikaProtocolVester__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -16,9 +11,6 @@ type ContractOpts = { address: string; network: Network }; export class PikaProtocolViemContractFactory { constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - pikaProtocolEsPika({ address, network }: ContractOpts) { - return PikaProtocolEsPika__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } pikaProtocolVault({ address, network }: ContractOpts) { return PikaProtocolVault__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/pika-protocol/contracts/viem/PikaProtocolEsPika.ts b/src/apps/pika-protocol/contracts/viem/PikaProtocolEsPika.ts deleted file mode 100644 index 77ffb7c1f..000000000 --- a/src/apps/pika-protocol/contracts/viem/PikaProtocolEsPika.ts +++ /dev/null @@ -1,630 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const pikaProtocolEsPikaAbi = [ - { - inputs: [ - { - internalType: 'string', - name: 'name', - type: 'string', - }, - { - internalType: 'string', - name: 'symbol', - type: 'string', - }, - { - internalType: 'uint256', - name: 'totalSupply', - type: 'uint256', - }, - { - internalType: 'address', - name: 'beneficiary', - type: 'address', - }, - { - internalType: 'address', - name: 'gov', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'previousAdminRole', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'newAdminRole', - type: 'bytes32', - }, - ], - name: 'RoleAdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleGranted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleRevoked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'bool', - name: 'transfersAllowed', - type: 'bool', - }, - ], - name: 'TransfersAllowed', - type: 'event', - }, - { - inputs: [], - name: 'ADMIN_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'DEFAULT_ADMIN_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MINTER_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'TRANSFER_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'burn', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - ], - name: 'getRoleAdmin', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'grantRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'hasRole', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'mint', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'renounceRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'revokeRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bool', - name: '_transfersAllowed', - type: 'bool', - }, - ], - name: 'setTransfersAllowed', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceId', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'transfersAllowed', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type PikaProtocolEsPika = typeof pikaProtocolEsPikaAbi; -export type PikaProtocolEsPikaContract = GetContractReturnType; - -export class PikaProtocolEsPika__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: pikaProtocolEsPikaAbi, publicClient: client }); - } -} diff --git a/src/apps/pika-protocol/contracts/viem/index.ts b/src/apps/pika-protocol/contracts/viem/index.ts index cda32e591..632a1caa1 100644 --- a/src/apps/pika-protocol/contracts/viem/index.ts +++ b/src/apps/pika-protocol/contracts/viem/index.ts @@ -2,12 +2,10 @@ /* tslint:disable */ /* eslint-disable */ -export type { PikaProtocolEsPika } from './PikaProtocolEsPika'; export type { PikaProtocolVaultReward } from './PikaProtocolVaultReward'; export type { PikaProtocolVault } from './PikaProtocolVault'; export type { PikaProtocolVester } from './PikaProtocolVester'; -export { PikaProtocolEsPika__factory } from './PikaProtocolEsPika'; export { PikaProtocolVaultReward__factory } from './PikaProtocolVaultReward'; export { PikaProtocolVault__factory } from './PikaProtocolVault'; export { PikaProtocolVester__factory } from './PikaProtocolVester'; diff --git a/src/apps/pika-protocol/optimism/pika-protocol.es-pika.token-fetcher.ts b/src/apps/pika-protocol/optimism/pika-protocol.es-pika.token-fetcher.ts deleted file mode 100644 index 8f1316075..000000000 --- a/src/apps/pika-protocol/optimism/pika-protocol.es-pika.token-fetcher.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { PikaProtocolViemContractFactory } from '../contracts'; -import { PikaProtocolEsPika } from '../contracts/viem'; - -@PositionTemplate() -export class OptimismPikaProtocolEsPikaTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'EsPika'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(PikaProtocolViemContractFactory) protected readonly contractFactory: PikaProtocolViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.pikaProtocolEsPika({ address, network: this.network }); - } - - async getAddresses() { - return ['0x1508fbb7928aedc86bee68c91bc4afcf493b0e78']; - } - - async getUnderlyingTokenDefinitions(_params: GetUnderlyingTokensParams) { - return [{ address: '0x9a601c5bb360811d96a23689066af316a30c3027', network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/pika-protocol/pika-protocol.module.ts b/src/apps/pika-protocol/pika-protocol.module.ts index fd912e5dc..474c95b53 100644 --- a/src/apps/pika-protocol/pika-protocol.module.ts +++ b/src/apps/pika-protocol/pika-protocol.module.ts @@ -3,7 +3,6 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; import { PikaProtocolViemContractFactory } from './contracts'; -import { OptimismPikaProtocolEsPikaTokenFetcher } from './optimism/pika-protocol.es-pika.token-fetcher'; import { OptimismPikaProtocolEscrowContractPositionFetcher } from './optimism/pika-protocol.escrowed.contract-position-fetcher'; import { OptimismPikaProtocolVaultContractPositionFetcher } from './optimism/pika-protocol.vault.contract-position-fetcher'; @@ -11,7 +10,6 @@ import { OptimismPikaProtocolVaultContractPositionFetcher } from './optimism/pik providers: [ PikaProtocolViemContractFactory, OptimismPikaProtocolVaultContractPositionFetcher, - OptimismPikaProtocolEsPikaTokenFetcher, OptimismPikaProtocolEscrowContractPositionFetcher, ], }) diff --git a/src/apps/pirex/arbitrum/pirex.apxglp.token-fetcher.ts b/src/apps/pirex/arbitrum/pirex.apxglp.token-fetcher.ts deleted file mode 100644 index e33c974ce..000000000 --- a/src/apps/pirex/arbitrum/pirex.apxglp.token-fetcher.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetAddressesParams, - DefaultAppTokenDefinition, - GetUnderlyingTokensParams, - UnderlyingTokenDefinition, - GetPricePerShareParams, -} from '~position/template/app-token.template.types'; - -import { PirexViemContractFactory } from '../contracts'; -import { ApxGlp } from '../contracts/viem'; - -@PositionTemplate() -export class ArbitrumPirexApxglpTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Pirex GMX'; - - constructor( - @Inject(APP_TOOLKIT) readonly appToolkit: IAppToolkit, - @Inject(PirexViemContractFactory) private readonly pirexContractFactory: PirexViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.pirexContractFactory.apxGlp({ address, network: this.network }); - } - - async getAddresses(_params: GetAddressesParams): Promise { - return ['0x6cec1903eae091bdc532cfde68fff0723fd3ee14']; - } - - async getUnderlyingTokenDefinitions( - _params: GetUnderlyingTokensParams, - ): Promise { - return [{ address: '0x4277f8f2c384827b5273592ff7cebd9f2c1ac258', network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalAssets(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - const pricePerShare = reserve / appToken.supply; - return [pricePerShare]; - } -} diff --git a/src/apps/pirex/arbitrum/pirex.apxgmx.token-fetcher.ts b/src/apps/pirex/arbitrum/pirex.apxgmx.token-fetcher.ts deleted file mode 100644 index e70516837..000000000 --- a/src/apps/pirex/arbitrum/pirex.apxgmx.token-fetcher.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetAddressesParams, - DefaultAppTokenDefinition, - GetUnderlyingTokensParams, - UnderlyingTokenDefinition, - GetPricePerShareParams, -} from '~position/template/app-token.template.types'; - -import { PirexViemContractFactory } from '../contracts'; -import { ApxGmx } from '../contracts/viem'; - -@PositionTemplate() -export class ArbitrumPirexApxgmxTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Pirex GMX'; - - constructor( - @Inject(APP_TOOLKIT) readonly appToolkit: IAppToolkit, - @Inject(PirexViemContractFactory) private readonly pirexContractFactory: PirexViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.pirexContractFactory.apxGmx({ address, network: this.network }); - } - - async getAddresses(_params: GetAddressesParams): Promise { - return ['0x61dbc0d6d7a6bde37f93d2014044a7c6b6de34d2']; - } - - async getUnderlyingTokenDefinitions( - _params: GetUnderlyingTokensParams, - ): Promise { - return [{ address: '0xfc5a1a6eb076a2c7ad06ed22c90d7e710e35ad0a', network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalAssets(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - const pricePerShare = reserve / appToken.supply; - return [pricePerShare]; - } -} diff --git a/src/apps/pirex/contracts/abis/apx-btrfly.json b/src/apps/pirex/contracts/abis/apx-btrfly.json deleted file mode 100644 index 1aa6fbeea..000000000 --- a/src/apps/pirex/contracts/abis/apx-btrfly.json +++ /dev/null @@ -1,988 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "pxBtrfly", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "AlreadySet", - "type": "error" - }, - { - "inputs": [], - "name": "ExceedsMax", - "type": "error" - }, - { - "inputs": [], - "name": "ZeroAddress", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Harvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "PlatformFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "_platform", - "type": "address" - } - ], - "name": "PlatformUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "_strategy", - "type": "address" - } - ], - "name": "StrategySet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "penalty", - "type": "uint256" - } - ], - "name": "WithdrawalPenaltyUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FEE_DENOMINATOR", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_PLATFORM_FEE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_WITHDRAWAL_PENALTY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "convertToAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "convertToShares", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "harvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "platform", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "platformFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_platform", - "type": "address" - } - ], - "name": "setPlatform", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "setPlatformFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_strategy", - "type": "address" - } - ], - "name": "setStrategy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "penalty", - "type": "uint256" - } - ], - "name": "setWithdrawalPenalty", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "strategy", - "outputs": [ - { - "internalType": "contract UnionPirexStaking", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawalPenalty", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/pirex/contracts/abis/apx-glp.json b/src/apps/pirex/contracts/abis/apx-glp.json deleted file mode 100644 index 9f0eb182f..000000000 --- a/src/apps/pirex/contracts/abis/apx-glp.json +++ /dev/null @@ -1,592 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_gmxBaseReward", "type": "address" }, - { "internalType": "address", "name": "_asset", "type": "address" }, - { "internalType": "address", "name": "_pxGmx", "type": "address" }, - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { "internalType": "address", "name": "_platform", "type": "address" }, - { "internalType": "address", "name": "_rewardsModule", "type": "address" }, - { "internalType": "address", "name": "_pirexFees", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "name": "ExceedsMax", "type": "error" }, - { "inputs": [], "name": "InvalidAssetParam", "type": "error" }, - { "inputs": [], "name": "InvalidParam", "type": "error" }, - { "inputs": [], "name": "ZeroAddress", "type": "error" }, - { "inputs": [], "name": "ZeroAmount", "type": "error" }, - { "inputs": [], "name": "ZeroShares", "type": "error" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "rewardsDelta", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "rewardsIndex", "type": "uint256" } - ], - "name": "AccrueRewards", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "accruedRewards", "type": "uint256" }], - "name": "AccrueStrategy", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "incentive", "type": "uint256" }], - "name": "CompoundIncentiveUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "minGlp", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "gmxBaseRewardAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "pxGmxAmountOut", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "pxGlpAmountOut", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalPxGlpFee", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalPxGmxFee", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "pxGlpIncentive", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "pxGmxIncentive", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "strategyIndex", "type": "uint256" } - ], - "name": "Compounded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" }], - "name": "PlatformFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "_platform", "type": "address" }], - "name": "PlatformUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "PxGmxClaimed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "penalty", "type": "uint256" }], - "name": "WithdrawalPenaltyUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FEE_DENOMINATOR", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_COMPOUND_INCENTIVE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_PLATFORM_FEE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_WITHDRAWAL_PENALTY", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ONE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [{ "internalType": "contract ERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "minUsdg", "type": "uint256" }, - { "internalType": "uint256", "name": "minGlp", "type": "uint256" }, - { "internalType": "bool", "name": "optOutIncentive", "type": "bool" } - ], - "name": "compound", - "outputs": [ - { "internalType": "uint256", "name": "gmxBaseRewardAmountIn", "type": "uint256" }, - { "internalType": "uint256", "name": "pxGmxAmountOut", "type": "uint256" }, - { "internalType": "uint256", "name": "pxGlpAmountOut", "type": "uint256" }, - { "internalType": "uint256", "name": "totalPxGlpFee", "type": "uint256" }, - { "internalType": "uint256", "name": "totalPxGmxFee", "type": "uint256" }, - { "internalType": "uint256", "name": "pxGlpIncentive", "type": "uint256" }, - { "internalType": "uint256", "name": "pxGmxIncentive", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "compoundIncentive", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "convertToAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "convertToShares", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "depositFsGlp", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "token", "type": "address" }, - { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "minUsdg", "type": "uint256" }, - { "internalType": "uint256", "name": "minGlp", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "depositGlp", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "minUsdg", "type": "uint256" }, - { "internalType": "uint256", "name": "minGlp", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "depositGlpETH", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], - "name": "getUserIndex", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], - "name": "getUserRewardsAccrued", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gmxBaseReward", - "outputs": [{ "internalType": "contract ERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxMint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxRedeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "maxWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "mint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "nonces", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint256", "name": "deadline", "type": "uint256" }, - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pirexFees", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "platform", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "platformFee", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewMint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewRedeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pxGmx", - "outputs": [{ "internalType": "contract ERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsModule", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "incentive", "type": "uint256" }], - "name": "setCompoundIncentive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_platform", "type": "address" }], - "name": "setPlatform", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "fee", "type": "uint256" }], - "name": "setPlatformFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "penalty", "type": "uint256" }], - "name": "setWithdrawalPenalty", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "strategyIndex", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "vaultTotalAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "vaultTotalExtraRewards", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "owner", "type": "address" } - ], - "name": "withdraw", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawalPenalty", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/pirex/contracts/abis/apx-gmx.json b/src/apps/pirex/contracts/abis/apx-gmx.json deleted file mode 100644 index 400ddc846..000000000 --- a/src/apps/pirex/contracts/abis/apx-gmx.json +++ /dev/null @@ -1,533 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_gmxBaseReward", "type": "address" }, - { "internalType": "address", "name": "_gmx", "type": "address" }, - { "internalType": "address", "name": "_asset", "type": "address" }, - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" }, - { "internalType": "address", "name": "_platform", "type": "address" }, - { "internalType": "address", "name": "_rewardsModule", "type": "address" }, - { "internalType": "address", "name": "_pirexFees", "type": "address" } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "name": "AlreadySet", "type": "error" }, - { "inputs": [], "name": "ExceedsMax", "type": "error" }, - { "inputs": [], "name": "InvalidAssetParam", "type": "error" }, - { "inputs": [], "name": "InvalidParam", "type": "error" }, - { "inputs": [], "name": "ZeroAddress", "type": "error" }, - { "inputs": [], "name": "ZeroAmount", "type": "error" }, - { "inputs": [], "name": "ZeroShares", "type": "error" }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "incentive", "type": "uint256" }], - "name": "CompoundIncentiveUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": false, "internalType": "uint24", "name": "fee", "type": "uint24" }, - { "indexed": false, "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" }, - { "indexed": false, "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, - { "indexed": false, "internalType": "uint256", "name": "gmxBaseRewardAmountIn", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "gmxAmountOut", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "pxGmxMintAmount", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "totalFee", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "incentive", "type": "uint256" } - ], - "name": "Compounded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" }], - "name": "PlatformFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "_platform", "type": "address" }], - "name": "PlatformUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint24", "name": "_poolFee", "type": "uint24" }], - "name": "PoolFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "caller", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "penalty", "type": "uint256" }], - "name": "WithdrawalPenaltyUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FEE_DENOMINATOR", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_COMPOUND_INCENTIVE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_PLATFORM_FEE", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_WITHDRAWAL_PENALTY", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SWAP_ROUTER", - "outputs": [{ "internalType": "contract IV3SwapRouter", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "address", "name": "", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [{ "internalType": "contract ERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amountOutMinimum", "type": "uint256" }, - { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, - { "internalType": "bool", "name": "optOutIncentive", "type": "bool" } - ], - "name": "compound", - "outputs": [ - { "internalType": "uint256", "name": "gmxBaseRewardAmountIn", "type": "uint256" }, - { "internalType": "uint256", "name": "gmxAmountOut", "type": "uint256" }, - { "internalType": "uint256", "name": "pxGmxMintAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "totalFee", "type": "uint256" }, - { "internalType": "uint256", "name": "incentive", "type": "uint256" } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "compoundIncentive", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "convertToAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "convertToShares", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "deposit", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "amount", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "depositGmx", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "gmx", - "outputs": [{ "internalType": "contract ERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gmxBaseReward", - "outputs": [{ "internalType": "contract ERC20", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "maxMint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "owner", "type": "address" }], - "name": "maxRedeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "maxWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" } - ], - "name": "mint", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "nonces", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "uint256", "name": "deadline", "type": "uint256" }, - { "internalType": "uint8", "name": "v", "type": "uint8" }, - { "internalType": "bytes32", "name": "r", "type": "bytes32" }, - { "internalType": "bytes32", "name": "s", "type": "bytes32" } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pirexFees", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "platform", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "platformFee", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "poolFee", - "outputs": [{ "internalType": "uint24", "name": "", "type": "uint24" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewDeposit", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewMint", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "name": "previewRedeem", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "name": "previewWithdraw", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "shares", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "redeem", - "outputs": [{ "internalType": "uint256", "name": "assets", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsModule", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "incentive", "type": "uint256" }], - "name": "setCompoundIncentive", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "_platform", "type": "address" }], - "name": "setPlatform", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "fee", "type": "uint256" }], - "name": "setPlatformFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint24", "name": "_poolFee", "type": "uint24" }], - "name": "setPoolFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "penalty", "type": "uint256" }], - "name": "setWithdrawalPenalty", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "from", "type": "address" }, - { "internalType": "address", "name": "to", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "vaultTotalAssets", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "assets", "type": "uint256" }, - { "internalType": "address", "name": "receiver", "type": "address" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "withdraw", - "outputs": [{ "internalType": "uint256", "name": "shares", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withdrawalPenalty", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/pirex/contracts/viem.contract-factory.ts b/src/apps/pirex/contracts/viem.contract-factory.ts index da694747f..a042e1c08 100644 --- a/src/apps/pirex/contracts/viem.contract-factory.ts +++ b/src/apps/pirex/contracts/viem.contract-factory.ts @@ -3,7 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { ApxBtrfly__factory, ApxGlp__factory, ApxGmx__factory, PirexPxCvx__factory } from './viem'; +import { PirexPxCvx__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -11,15 +11,6 @@ type ContractOpts = { address: string; network: Network }; export class PirexViemContractFactory { constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - apxBtrfly({ address, network }: ContractOpts) { - return ApxBtrfly__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - apxGlp({ address, network }: ContractOpts) { - return ApxGlp__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - apxGmx({ address, network }: ContractOpts) { - return ApxGmx__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } pirexPxCvx({ address, network }: ContractOpts) { return PirexPxCvx__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/pirex/contracts/viem/ApxBtrfly.ts b/src/apps/pirex/contracts/viem/ApxBtrfly.ts deleted file mode 100644 index b239e978d..000000000 --- a/src/apps/pirex/contracts/viem/ApxBtrfly.ts +++ /dev/null @@ -1,1002 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const apxBtrflyAbi = [ - { - inputs: [ - { - internalType: 'address', - name: 'pxBtrfly', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'AlreadySet', - type: 'error', - }, - { - inputs: [], - name: 'ExceedsMax', - type: 'error', - }, - { - inputs: [], - name: 'ZeroAddress', - type: 'error', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Harvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'PlatformFeeUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: '_platform', - type: 'address', - }, - ], - name: 'PlatformUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: '_strategy', - type: 'address', - }, - ], - name: 'StrategySet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'penalty', - type: 'uint256', - }, - ], - name: 'WithdrawalPenaltyUpdated', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'FEE_DENOMINATOR', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_PLATFORM_FEE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_WITHDRAWAL_PENALTY', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'harvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'platform', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'platformFee', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_platform', - type: 'address', - }, - ], - name: 'setPlatform', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'setPlatformFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_strategy', - type: 'address', - }, - ], - name: 'setStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'penalty', - type: 'uint256', - }, - ], - name: 'setWithdrawalPenalty', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'strategy', - outputs: [ - { - internalType: 'contract UnionPirexStaking', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withdrawalPenalty', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type ApxBtrfly = typeof apxBtrflyAbi; -export type ApxBtrflyContract = GetContractReturnType; - -export class ApxBtrfly__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: apxBtrflyAbi, publicClient: client }); - } -} diff --git a/src/apps/pirex/contracts/viem/ApxGlp.ts b/src/apps/pirex/contracts/viem/ApxGlp.ts deleted file mode 100644 index 27c9e14bc..000000000 --- a/src/apps/pirex/contracts/viem/ApxGlp.ts +++ /dev/null @@ -1,1449 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const apxGlpAbi = [ - { - inputs: [ - { - internalType: 'address', - name: '_gmxBaseReward', - type: 'address', - }, - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'address', - name: '_pxGmx', - type: 'address', - }, - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'address', - name: '_platform', - type: 'address', - }, - { - internalType: 'address', - name: '_rewardsModule', - type: 'address', - }, - { - internalType: 'address', - name: '_pirexFees', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'ExceedsMax', - type: 'error', - }, - { - inputs: [], - name: 'InvalidAssetParam', - type: 'error', - }, - { - inputs: [], - name: 'InvalidParam', - type: 'error', - }, - { - inputs: [], - name: 'ZeroAddress', - type: 'error', - }, - { - inputs: [], - name: 'ZeroAmount', - type: 'error', - }, - { - inputs: [], - name: 'ZeroShares', - type: 'error', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'rewardsDelta', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'rewardsIndex', - type: 'uint256', - }, - ], - name: 'AccrueRewards', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'accruedRewards', - type: 'uint256', - }, - ], - name: 'AccrueStrategy', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'incentive', - type: 'uint256', - }, - ], - name: 'CompoundIncentiveUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'minGlp', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'gmxBaseRewardAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'pxGmxAmountOut', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'pxGlpAmountOut', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalPxGlpFee', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalPxGmxFee', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'pxGlpIncentive', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'pxGmxIncentive', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'strategyIndex', - type: 'uint256', - }, - ], - name: 'Compounded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'PlatformFeeUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: '_platform', - type: 'address', - }, - ], - name: 'PlatformUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'PxGmxClaimed', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'penalty', - type: 'uint256', - }, - ], - name: 'WithdrawalPenaltyUpdated', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'FEE_DENOMINATOR', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_COMPOUND_INCENTIVE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_PLATFORM_FEE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_WITHDRAWAL_PENALTY', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'ONE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'minUsdg', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minGlp', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'optOutIncentive', - type: 'bool', - }, - ], - name: 'compound', - outputs: [ - { - internalType: 'uint256', - name: 'gmxBaseRewardAmountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'pxGmxAmountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'pxGlpAmountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'totalPxGlpFee', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'totalPxGmxFee', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'pxGlpIncentive', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'pxGmxIncentive', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'compoundIncentive', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'depositFsGlp', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'token', - type: 'address', - }, - { - internalType: 'uint256', - name: 'tokenAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minUsdg', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minGlp', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'depositGlp', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'minUsdg', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'minGlp', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'depositGlpETH', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'getUserIndex', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'getUserRewardsAccrued', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'gmxBaseReward', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'pirexFees', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'platform', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'platformFee', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pxGmx', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'rewardsModule', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'incentive', - type: 'uint256', - }, - ], - name: 'setCompoundIncentive', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_platform', - type: 'address', - }, - ], - name: 'setPlatform', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'setPlatformFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'penalty', - type: 'uint256', - }, - ], - name: 'setWithdrawalPenalty', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'strategyIndex', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'vaultTotalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'vaultTotalExtraRewards', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withdrawalPenalty', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type ApxGlp = typeof apxGlpAbi; -export type ApxGlpContract = GetContractReturnType; - -export class ApxGlp__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: apxGlpAbi, publicClient: client }); - } -} diff --git a/src/apps/pirex/contracts/viem/ApxGmx.ts b/src/apps/pirex/contracts/viem/ApxGmx.ts deleted file mode 100644 index 1aba1d56c..000000000 --- a/src/apps/pirex/contracts/viem/ApxGmx.ts +++ /dev/null @@ -1,1288 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const apxGmxAbi = [ - { - inputs: [ - { - internalType: 'address', - name: '_gmxBaseReward', - type: 'address', - }, - { - internalType: 'address', - name: '_gmx', - type: 'address', - }, - { - internalType: 'address', - name: '_asset', - type: 'address', - }, - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'address', - name: '_platform', - type: 'address', - }, - { - internalType: 'address', - name: '_rewardsModule', - type: 'address', - }, - { - internalType: 'address', - name: '_pirexFees', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - inputs: [], - name: 'AlreadySet', - type: 'error', - }, - { - inputs: [], - name: 'ExceedsMax', - type: 'error', - }, - { - inputs: [], - name: 'InvalidAssetParam', - type: 'error', - }, - { - inputs: [], - name: 'InvalidParam', - type: 'error', - }, - { - inputs: [], - name: 'ZeroAddress', - type: 'error', - }, - { - inputs: [], - name: 'ZeroAmount', - type: 'error', - }, - { - inputs: [], - name: 'ZeroShares', - type: 'error', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'incentive', - type: 'uint256', - }, - ], - name: 'CompoundIncentiveUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: false, - internalType: 'uint24', - name: 'fee', - type: 'uint24', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amountOutMinimum', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - { - indexed: false, - internalType: 'uint256', - name: 'gmxBaseRewardAmountIn', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'gmxAmountOut', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'pxGmxMintAmount', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'totalFee', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'incentive', - type: 'uint256', - }, - ], - name: 'Compounded', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'PlatformFeeUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: '_platform', - type: 'address', - }, - ], - name: 'PlatformUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint24', - name: '_poolFee', - type: 'uint24', - }, - ], - name: 'PoolFeeUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'penalty', - type: 'uint256', - }, - ], - name: 'WithdrawalPenaltyUpdated', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'FEE_DENOMINATOR', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_COMPOUND_INCENTIVE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_PLATFORM_FEE', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'MAX_WITHDRAWAL_PENALTY', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'SWAP_ROUTER', - outputs: [ - { - internalType: 'contract IV3SwapRouter', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amountOutMinimum', - type: 'uint256', - }, - { - internalType: 'uint160', - name: 'sqrtPriceLimitX96', - type: 'uint160', - }, - { - internalType: 'bool', - name: 'optOutIncentive', - type: 'bool', - }, - ], - name: 'compound', - outputs: [ - { - internalType: 'uint256', - name: 'gmxBaseRewardAmountIn', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'gmxAmountOut', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'pxGmxMintAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'totalFee', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'incentive', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'compoundIncentive', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'depositGmx', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'gmx', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'gmxBaseReward', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'pirexFees', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'platform', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'platformFee', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'poolFee', - outputs: [ - { - internalType: 'uint24', - name: '', - type: 'uint24', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'rewardsModule', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'incentive', - type: 'uint256', - }, - ], - name: 'setCompoundIncentive', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_platform', - type: 'address', - }, - ], - name: 'setPlatform', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'fee', - type: 'uint256', - }, - ], - name: 'setPlatformFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint24', - name: '_poolFee', - type: 'uint24', - }, - ], - name: 'setPoolFee', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'penalty', - type: 'uint256', - }, - ], - name: 'setWithdrawalPenalty', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'vaultTotalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withdrawalPenalty', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type ApxGmx = typeof apxGmxAbi; -export type ApxGmxContract = GetContractReturnType; - -export class ApxGmx__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: apxGmxAbi, publicClient: client }); - } -} diff --git a/src/apps/pirex/contracts/viem/index.ts b/src/apps/pirex/contracts/viem/index.ts index df94f40dd..32368f855 100644 --- a/src/apps/pirex/contracts/viem/index.ts +++ b/src/apps/pirex/contracts/viem/index.ts @@ -2,12 +2,6 @@ /* tslint:disable */ /* eslint-disable */ -export type { ApxBtrfly } from './ApxBtrfly'; -export type { ApxGlp } from './ApxGlp'; -export type { ApxGmx } from './ApxGmx'; export type { PirexPxCvx } from './PirexPxCvx'; -export { ApxBtrfly__factory } from './ApxBtrfly'; -export { ApxGlp__factory } from './ApxGlp'; -export { ApxGmx__factory } from './ApxGmx'; export { PirexPxCvx__factory } from './PirexPxCvx'; diff --git a/src/apps/pirex/ethereum/pirex.apxbtrfly.token-fetcher.ts b/src/apps/pirex/ethereum/pirex.apxbtrfly.token-fetcher.ts deleted file mode 100644 index 4efee3648..000000000 --- a/src/apps/pirex/ethereum/pirex.apxbtrfly.token-fetcher.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetAddressesParams, - DefaultAppTokenDefinition, - GetUnderlyingTokensParams, - UnderlyingTokenDefinition, - GetPricePerShareParams, -} from '~position/template/app-token.template.types'; - -import { PirexViemContractFactory } from '../contracts'; -import { ApxBtrfly } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumPirexApxBtrflyTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Pirex BTRFLY'; - - constructor( - @Inject(APP_TOOLKIT) readonly appToolkit: IAppToolkit, - @Inject(PirexViemContractFactory) private readonly pirexContractFactory: PirexViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.pirexContractFactory.apxBtrfly({ address, network: this.network }); - } - - async getAddresses(_params: GetAddressesParams): Promise { - return ['0xfa35d1f603384e8fcfcbff3e610935d02922544e']; - } - - async getUnderlyingTokenDefinitions( - _params: GetUnderlyingTokensParams, - ): Promise { - return [{ address: '0xc55126051b22ebb829d00368f4b12bde432de5da', network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalAssets(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - const pricePerShare = reserve / appToken.supply; - return [pricePerShare]; - } -} diff --git a/src/apps/pirex/pirex.module.ts b/src/apps/pirex/pirex.module.ts index 56e188921..fd9cbf63e 100644 --- a/src/apps/pirex/pirex.module.ts +++ b/src/apps/pirex/pirex.module.ts @@ -2,22 +2,16 @@ import { Module } from '@nestjs/common'; import { AbstractApp } from '~app/app.dynamic-module'; -import { ArbitrumPirexApxglpTokenFetcher } from './arbitrum/pirex.apxglp.token-fetcher'; -import { ArbitrumPirexApxgmxTokenFetcher } from './arbitrum/pirex.apxgmx.token-fetcher'; import { ArbitrumPirexPxGlpTokenFetcher } from './arbitrum/pirex.pxglp.token-fetcher'; import { ArbitrumPirexPxGmxTokenFetcher } from './arbitrum/pirex.pxgmx.token-fetcher'; import { PirexViemContractFactory } from './contracts'; -import { EthereumPirexApxBtrflyTokenFetcher } from './ethereum/pirex.apxbtrfly.token-fetcher'; import { EthereumPirexPxBtrflyTokenFetcher } from './ethereum/pirex.pxbtrfly.token-fetcher'; import { EthereumPirexPxCvxTokenFetcher } from './ethereum/pirex.pxcvx.token-fetcher'; @Module({ providers: [ - ArbitrumPirexApxgmxTokenFetcher, - ArbitrumPirexApxglpTokenFetcher, ArbitrumPirexPxGlpTokenFetcher, ArbitrumPirexPxGmxTokenFetcher, - EthereumPirexApxBtrflyTokenFetcher, EthereumPirexPxCvxTokenFetcher, EthereumPirexPxBtrflyTokenFetcher, PirexViemContractFactory, diff --git a/src/apps/pods-yield/ethereum/pods-yield.strategy.token-fetcher.ts b/src/apps/pods-yield/ethereum/pods-yield.strategy.token-fetcher.ts deleted file mode 100644 index f019d5fb6..000000000 --- a/src/apps/pods-yield/ethereum/pods-yield.strategy.token-fetcher.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetDisplayPropsParams, - GetPricePerShareParams, - GetUnderlyingTokensParams, -} from '~position/template/app-token.template.types'; - -import { PodsYieldViemContractFactory } from '../contracts'; -import { PodsYieldVault } from '../contracts/viem'; - -import { strategyAddresses, strategyDetails } from './config'; - -@PositionTemplate() -export class EthereumPodsYieldStrategyTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Strategies'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(PodsYieldViemContractFactory) protected readonly contractFactory: PodsYieldViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.podsYieldVault({ address, network: this.network }); - } - - async getAddresses() { - return strategyAddresses; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.asset(), network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const [assetsRaw, supplyRaw] = await Promise.all([contract.read.totalAssets(), contract.read.totalSupply()]); - const supply = Number(supplyRaw) / 10 ** appToken.decimals; - const assets = Number(assetsRaw) / 10 ** appToken.tokens[0].decimals; - - const pricePerShare = assets / supply; - return [pricePerShare]; - } - - async getLabel({ appToken }: GetDisplayPropsParams) { - const details = strategyDetails[appToken.address] || strategyDetails.standard; - return details.title; - } -} diff --git a/src/apps/pods-yield/pods-yield.module.ts b/src/apps/pods-yield/pods-yield.module.ts index b03828a5c..8977dd396 100644 --- a/src/apps/pods-yield/pods-yield.module.ts +++ b/src/apps/pods-yield/pods-yield.module.ts @@ -4,14 +4,8 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { PodsYieldViemContractFactory } from './contracts'; import { EthereumPodsYieldQueueContractPositionFetcher } from './ethereum/pods-yield.queue.contract-position-fetcher'; -import { EthereumPodsYieldStrategyTokenFetcher } from './ethereum/pods-yield.strategy.token-fetcher'; @Module({ - providers: [ - EthereumPodsYieldQueueContractPositionFetcher, - EthereumPodsYieldStrategyTokenFetcher, - - PodsYieldViemContractFactory, - ], + providers: [PodsYieldViemContractFactory, EthereumPodsYieldQueueContractPositionFetcher], }) export class PodsYieldAppModule extends AbstractApp() {} diff --git a/src/apps/sideshift/assets/logo.png b/src/apps/sideshift/assets/logo.png deleted file mode 100644 index 88b448fdebb6c7c53bc1c94822ea782e5d4bbeb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381256 zcmYgXWmH_-(wxDa1a}Ao4-nifxD(t45AN;^8YDmn5Zn{o-Q67qcXxN^Bf0P0_w`z5 z&6)YNr%&zb>gs($73C#RkqD3g0063#q^J@A0KNO?LV$byMJ{`C^YsJ9R9H?J04R?_ zel&o6{f=lSsp$v+aDx6^Kzy+H>kR1c>jYp~c{xXN zJW#!D9f`mrfrMS^*J$T(pPiu3V>nG17UI~_d#JnyPF9xn@V=9}bW%rGS-HRQ1h*g2 z>VpKhJ*dt?7DtHha*Gte7w2EKumaeaz0^7^7ZgVg&VGG zuGem#=N-HLm>5OIOVoMfT)X|rBlIc4Z(&7mXcg+w(@oCD*7a+?`kBwIsZP zUPN6$AIdk^?-sMvD+_iW$##Svg!TagCov9-y*tjUNB;9I8-^XdcYQX#<&fo#OTHJz z3Hz_%?R zYrthF{DTz6{VP-S+llzJ^?uXRb^lVRYphfCH8=1agtu;iYTV=}n6+qi4hjkRb}4Uv z;UKWp2~p+Z;7eKZ+nZD8(<~+)z7q{>>DsP9%w zH66+;qzgat#X&%=&}LXhm3(W%tBmscF^u!}@DF4bZZOfVq!CN?i( zTUs2wh7XQRAs-$D#3T|17BFhWD;vBgOmSe$B7mhJzK)IB!u)_V$Q8kkKGfN zu~BxG93O8LsJwAZP7O4<0kbdA7r1s0w1@o)XN9A>uM3?4-2BDYe>R|=B3aA$1ZpYZ z8f&{0cq?Kp#}HX93}rh}A%)r$}dI zXrcKQ+5+y+BhB^}@ohfrn%gs~kw=$F#vjyuUP}5)0bDXj30JG4wWj6XHX&fZwFg0Z z>fs$vBG-u508yKQAFthuG5F#C<9<}#n##IO-M+oBPB*>tkah@c2{pot5Dxg@r??qf z{B{-^(5R8AW=mxq(k2h+zVa1(=IA&uv*wnA$mk@Q?(@nyf_hSb1DXu}PejSv@I+U) zNmvUwavL_jKG^rCDYYfd7Z^``fS02LruZlJg8USZ;-g2ugts7z#gVGj4UV(>MF14q z+&SQxP+zcFdF$ylbEUqQ{bq~*e?vS)w%=CfmQj~NJrkfP7`Q#>y%o%0vIT4S*&pOI zP*de}h%|vAToF+aC&Ok_Yu@k4@cyv6>^tulB8BW;G7uy76Ih=W4H}AbHZ$!rTURs( zhs&)V%Ii%PQ~kK}?>Py)lFoMoY0528Y1C)6_)G&duoGzrFNWS73#K$2$xS2Fj&J5CU92 z)q$2(0S~+%tEW>+o;~3j7*o!o%3QBdKhAmCZ??+p&~dZ5IYh8K3WOgN=AS6h4DRC_B!?TVMG7%|3S!v-t&SLPs2CUQU09Ws0m%6TZ%C=-{IhOGrIV#-|{;I|kiS3~J zEkR$7(zoVHPkQhcf_Uyd1t5L3aD^ zl9z<0uf$Q|#A3vRT14;%$Kn7B7(y}#TLu;-&Lc?h;!7Tnscw8?&}meQmhjiNrtasA zLZ0odzX)9oMru+Y3gJI$unuGIezj{`dFI_4AygdcMaT-+fRQX^K7G9Bish|p<6*P< zk)IwqnmRG_5FGJ)&mDGiV)py8ukV}!@CBjH3#M0g?*Ae4seOuYG!4ova&U{iPO!B* zi9ra9g~khJfmf+qe+Zj)k$e3cS!}3OV`=UlFCzyOzq>>Kq|wvdb*NXU5d}2!dv51n zVH@(6Ode-7(L#*pq4V-8=De=_#j;L&>6C8Gi5`QYe4Evl0`d-nr4>-R$YTA?c4mU{ zgK9HYJ7Xjzo?%AFW+`~6<_ujvL8=b^u7Lpoa3dQ8&j_aqtJm4%6@QZYpPb%z0MB3L z$HR>6nu9y`sqNZ6`c2)(FFD;*Hsp8G&}QLlM$Td0<;fykeg@*~BjX^d^G*@F=@RQm zJeD1sc;76;a+Yp%o})!Cp?y|>*lQE+Ad|3Bye&rKB!ZgEgbp>A>X_3ArA=y~(#?S8Q2 zv8pCG&(OSKgLGpiVPnekn-|OP6Vnu(S<>)WQRp<_`*vrSVCuk)qt&D=4r@6gGhNB5u{H~Wls zl;}YMVV0In(6-tbb*==*0|{l~yl9t~*W{{X;$pG9ZKNCfV5BZrX)kAzrq<)`Fg5<= z0CQ_Zjvn#W(IKpH=XMFZ2bgU^0@T07;y)T`1(nSA%3j*W7RpUpxn{p8&9I?~#~Zhy z(GK+nLk2EWZsg}iBBPF9{3pwYj}vH*3)PmqyiP0aZ{%_*#+VX!&u=vs{p6Hf!Z0^>vP%!bJ)kXHAo!nhM9pt({_e>!)sGvKG3^nNRt za)zoEk5PiH*<~*jpDhG)lU1%?6Z=Gs8o`a>KL#|NT~;mj*$nSGSH4RG*@bJdx|7^r zBXFX-4YiV9HseD$m}aQ~+=@&(yVfS4(J#J5cOi2+cDy|USi2_?`fBRrr;5KZph)5^ z-;K~iJBs}{{f_iz#vie`i3PzaL{!0_u4F5f? zJ}Ho=5^3OaewJZn)NgX#rd8nBaX6XpEF$sBE%X;F?zl(ju63c2NKPqlm}O(=0Ybe` z^P_Il@y#=m2x#0mEZUV@Ngx?`&O^%*TB7}hjNkjJZO1rp**LOP{aQLN;RzNTW#@fP z@d(8V`lC1rzyg1Injp?J{;!}`Se@k|_st%)5tMsH^44=4FM~J11lBo#S)@sRr9`m; zT=RVOU~5=?ZgcB?)#aETBG**!Nqy?J6ZZ8mLg3j2!faBzyxDi-m@+C9KDiAB<@o>+ zPRrl+#=E^d_5lE!H@|#fsgrHGQiZ{d9DMuJCv~d$eeGJSk(=`+TbQ2E0i)TE4oPNpPhQ5K%jaQ4_#jaldJgnU*3Qw85PNA=J` z+S}%psFIYZ8QWA~cxv3DB)>*s-LN6nau^rM4x+zE*=rM&df2<2(2jSsF|eUzZM#3* z49SDx!g}zRnm+JteusEy%B`b!Jtqr*pw0u7W*{AB^_EeA_oGQMX`pLP>bs)3T4W_i zNHR(H=d{He8AmGM-Z~6$iLv5YC)ecXPyH(N_#@0&pO;RbFy!UVQby7ZYEm?8pFe%( zKg5fR7Tb#0S^Fw*?Y!#uligWKqAB)b!spaByi(UL4Fi}m%oF{U7L|cpNHiaWbU5qO zZDw|5hwt)aWHpucIZPbA~V~WGj(~D7vlzG?K@2Wt4BYvC_ zF^$A058xtkifCjlZz-ts(M8u}(z`g0;NB)DBt|}JGrIW+xwVjE~Zb{s(c81y~{|mG$ZrCl~VA~CUP9UEG z!3-*$-FA7oAHl{YfXL1eDRK7@%UO+hUWF~03DG+wqMXa8?4`EU5qg7;FbRwsR$L?JjA1N$#a+ zTbN?kM!Dtc)5!uf!uz%vZXN2jWQO^3&-@i+vPy^_y(C54VowAR*5+c|JsVL$d7mnr zFTg^9jEP- z&BW$grBKO6-TJZ{>UtJlx&>j;8G|qHbCc)~Zb}8BmYjG?3lD}zGeviumBO-fhR2^y zrX&oLZ#_e`9`Vy=d+X3N{zm~<4@$QDo^3C6as$Mp3Sf8x0Gk*DWlZ`w)dQ_=9b)tGb9O+W_Qx7hpzkXHsp+Gn{g6hCfoxo zt^;i(Z(t$^y<>FXu# z*V2L4XR_1(qvEHBnH*YQe_LwBmWeJGMaYod6`?bJGox4bTn7O?t(5690FB`5F48Lg ztZIk-t@696>k(HJ!=!xjb>l}jICKQ&a{jIcZ#YaMPjQ zY}l8^IAB|paTa+Q)KR6JuJbSGIXk+gcCUg=2)Wn+tMcM6x>xHoJ;7EqRj6=8 zWjG`o3j&qCcmef)`ksG!@789IjX6i1N9%-UxL$Sn$6)nZr?<2?zHADk7jSndu=NQc z-79g?I$Wk?lx6vxvHK21&;B;HpfLprm8Km{eW;(+fP}GEZs}pA_WOUnG%VSCAy3T{?O>zwt zOxk|t?RB~)TKmWM_(#&;%Yhx55HD;68%kGp8y~vpWUbu01q(_c?PlS(~ zE&*e4_r`3b_Io*^?pEZJhB;+CfLfV9j+yVP&je8|G3@F9$AYvU=#n3OtUKGq75w@h zcaxPR#a$4FBInuWpXZUqmI)OCCM0Qd96m(7dG<0KzL$PcB%mv_)a0iRn|_%#mR@v* z0p1{2ZA2pfj3nR;zWH14Ho%isxf-1l--dy2L$e z@%yQdVJv}o-s+KWll6q)j>pTJOAu|15gKoVe5_eYp?A_nOs7k2vb)k0{ZSzDq1{+N zRywcNhnDa4j1oNzT^ zmnl;MGP!PYzGhxc3bSEz(iS=4Qg}>=;lxyz)=?h$BR}y2f6~6;T=m>t^R<^*hofE`2fdo(dMVYT50P9(wC4F{Y~i)#ZyuLK0WVxbyeR2b(xN?i%{~ zK=@P3Au8HvD-TtwrAF-qu13AWMxCsZTK-SAnJ25B@gp)eMR~D)kD4_X-u1J?qxx4K zfD7q${1w68Vs~iz@vz3+_UBlDZrdRRz=)Cak9-3BDF*xE2EGpA;*OqV*4w}YcYI|o zWeD?GI?GS#7u}tiDyPpYx}0)tbVEQkRUAr-P^U|_IeJVj2Xj}bL8>;+#ui+7YwEhT z2BSNYHMa?;C}3jExEkchhd5TqGd9zFgDCRL$5cT0i2O0RqUUD^4;w#WdtSTF4NoxD zunnew68j>y}?K#65g5#c+^BDb1eBw8&!@B8g&xw7Bbh*L*bLLt2m+pefMEq0U zXV-mv3Y){qUY)jZQkc z7ZOow=#M`UNI4R|v-X>Nv~WsJ_r`fDkmz=ZGD%4wIVk@Y&zqtO!#3}hVe>8VBPl)h zokFaf&nOS)Z^04d%t+!7N95Ei4K|2o?FY#=f2Q6kT+VcGX8J(zwp4<2e9eHsb}xx` z4`t=$bjf|?R0MFckuLDK=4J3dPRg2obwoNJiScx^QHypWTK9l-1f6*#v6!}mSlQTl zN6W8*JA-GlRb&dfP|7TmsqpfnvbhX47k9;H-7E%W`gh4Yh}jL`0u&S!vTyS#DN{+0 zrZZw2yMr1Q*8%)h-}r zY@AZ1>30dC!V#nQ5g<w$0|3ZgkkGX7`^`Hrn=_yYAdhu)xR}GFYvGL{CLkX z)B@ex>3vbs(SW4^>Wrjix}@u-ATNWdO?ULC zH;j}C6@cuE<*UN`3TwqnTK-9)YV4TV>*(9#ekcf&8g z^iqth{qpTBKBIEw#Mg3`Xp{fDH|;Gq6x6lmGDYc#ReP{y0ZWB;pL^%H=z)0qVE~ z7FkkYo@c|~WhZcMBdcyesDk16_)y*evn_PRy|F}$l-yYQF}k{zui}>b>mit>Sw&oy z+Ie)BJnnoC@v~)aQo{~VFH}NT(NXQ!C%7_}1AB}WV5+znPp5fX+GB|v(|4_2y!|)* zywFdZ(>7a8)Q)XaSUl{FqS5KEe8KF}Ih({oEc(_s z`Bis{omITM*Bl*se69i)JgV}Cf&OU~PQ06+tKlE-^aSJw4bUS5+)>+Hc&HnzvcI*c zsTkni&-$zfBI!;Vlki1HUY?-nG%T7)>X{fXxxx=HP8&yJ>dTCrXPDR8ZJTVkL+vq0 zvfuN4RwvqBv|FSdlD185$KZBg>L@3pTAa^7d*Z=Nx7Sm5r%OT8<}GBn9Q7i;nNplS z!`GP+J9i(>Ir+Aca=8|SEfhhB&xx~p_$Jzm-;$ivF0Qdl9OLzQX6ij#A(mCJy-OTB zA`X&vJs}L*Q^5Sv+QX3bWgmfpztA{i7Ayi$p^tHBcnKF2<`!V*F2z4cti50^xrKjp ztJ?q94)O7|NdBoe@5UyXomW(B>}@hFls!z0LwE`+*W&79%T{PuRqHV5GU9-PHbu7M zjGG9_IJEmsFTv_9!Msq=R^j8o9uzpq%?d6TA56;|(k*4u-_@wazx>3r%PgZ0Pg8vd zsAp6lGe|4pSS>88!apr6vuTn=<0xhtsFt6p4c&7zQ4BO0rgAx2jx_#I8CJt>DV!^VLJDl^Q27yjlZ6Cu3eIZNa428;P- z7T}rqK$<#|njUB%_iGfv;&2tV$;E zC^V~1sxO`#T0;$>O(>QU{5M*crl|c$^$c}IoL#8D^`j+a<0Ig*_((>AaozTdGdCVQAgh@qL zJ?`o=K4Calu__;qTuU6I0EiXaQG9hgUl{{+lQY6O6AqN9DNn16l=RTN(JC+W<>~e< zZ!ec8_{Ysoh3#;Me*tdWxa@Ha*3(&mJLS;V(@fyV-?OdNbeiYlbU8K&y-x&4&5m8f zHt~3#0N`C6izS-xy|Y^Y#;T+vpC#wO4B}thZ<|%iHIt=s?^66gX5IaL1@CabZzpac z@Tn>Xh)CwT_Fd=^wJ1O}?31k!f8Q|~_Y=gG8+GG{rOn1Me}m(_H>UPtdk@+xg(FFV4-y!uPmFFZSM zGz=Pv-XgR0E0yi~1cF?4`k#uXIGWE*X#L4MU2nzG(4ivUe#-qK*jq;13#aXdmtwx{ z&YqCnGcoc$)Hc%}KTZOU7b9erdtveZ-6jvy>a#bV58LIRnd3iQ&&%|EkKPl*jmATvz~=aCDOP3$wrjwvTZ>&4 zop4Q-cLF>I(9Db#KI>TwyL%HCyKzUri>*0Bl(B<)hhpckDq$MF&tk>pf8Ll|ck)%h z%Zqiw)I8SOz|cgZ!Fs4mtAuM6FX}dGVmuK^fu6MHX!z)9X<%y|JS!Jjxlj6iNne9d zTo;FrA9ooSG#J6Q!#!spY#B9*ti5~p#6Mft`Z_cCr$_RrpEoLg;e z$$*Dx)ht|v;lT&at__TsOU6W0c_*+|{y75h0{frTh;tX3U3de^FygjK{B)r>r?vHH zi)(fqZCyO04odu@R+xM4-TdMTNxbARPnH_!0X2ieTf})8nozSr>A=``b#E%u*+R8@ zj;+BWTdBw{lIB>7m06OkIN)gZ1J{h8!(uzVcH|}Q)*P7(&C#GRe%5y}x7EkK0;Zf~ z-iUHd@)wMW1Qv--Ca8!SB5Yq(luIsh7v@NKT)m=u84a;VZ7HJpP#mg^n}DH!JKfSKT-Lqx$hD>j5uDPX8-+F8V%@_{LUoOqLyH&5Un5{i>N! zYH7cJ@%?Nvgq=_x`fMjE&*VvRTJ~@?Xtj-97Ol@Hn|5iUolw+CvNv+dm!CRW6AyQC7*^<71gI(q24ft(>l&UQjj`P;8AGM=+Z0xDb9G3y_ zMv$R`KwA)~1o|flh}R=HFMBa^{?q0kj5Z9=*?5JKE(Tr{F zdr0R;VB<_rGxb0n#H$wbO0wB^|1xswZk9F6L4Bu2oyOAVSZOVI;!*s2`)%r@(^JTV zF0lT)j$&{_{s-r;Z0S|xscyhkid7z-fAza>NZaFf-!VMfhQH3Yt7^%`En}!DaUFA! zvQK*aAsI@^D;saNGvLu7`|Jp|RJnZpVJd4M#{-qhakF^}Gp$p%b?}Pt105UHyKT^A zujPf}rCKKvOh??~=1I1qm`dmTQfe)KnGG}enbS~-iGW&WZPf4#^9EFsX*!5}L3eQE zuwd|aO(Xf-p~cw`48=0mw{Shbu~!VPva#EPtMIo zPz=W}44=U}Q|0Xl;|XEuGEyuPPbbb#I5?4W`Bp*4&kALN#q9LMHAjo@JI7eKOM_j1 z3rkGII;C8b999DV-3cviR}roE+HK2zbIORt1vyxUn_a-AwbBpVJ}ddj;E?R|0*?>7 zG9jtOHjHzt`C!v(5H^7$cB`uF7J(4z=HoS%@)V%^`jIJDe%?%=vC`9ioa1dw95~eg z^+$J7pZuDdVP2McTZ@%ijvjWEow1HJ#;uGL;W;u};&k}R997SNsI1)BMS7~!-8PDc zmMzOpLqde#4;(Y^4^>n0kg-^7`L@AMn)I2@`Ea5Bw<-sp*ialfw}jR!2FOQ;0g0P$ zX3h}5GgZ%kvO`b^MgwuPJjI11p8MGkb#?Bcd#M_?aHr+#sF~CNe3As%jt6gzQHw^^ zw*&Ie%ub;7?imGc^}&CvroT=TlhA*(e+z15?b_?P98MC>8E2(=CCnS*hfvfrq#r-Y zes8!LW~1^d{Op?=5^KV=6!O0NDax%zsGC_GG~p!)&e$=vI?0~D9h}>G#?-7IN7Tgd%8?!$YhX|Oh0+4yFQy0sm|Df8eb1ZpwMI= z9DApEj4wmogg#Ck5R`q2J6XDJA9uY`NSh-kO7FR8CDsr+Cq4+b{4(6dX3{{vQ@;MK zw2?JSFE2sJJ!^FMyUYFvOHz+JQzH9$B?|tktso&jH0YS?$Eh%ZQ7!{R=&2 zUBh-~{i5M27b?HjH>-oMUi`n9#Cm6cjIO(_G;s?3+ZXNB8mbVSe!nPkSAK66Y(5~i z*t01>Vs-E>8+mD~4H(y=xZ#XAl5w($S*%Kxn5d=!sto2q_Tv9n+%3OEr!AGyp)L;qwZ0mi2#y^iIZg=$-58 z^LNM2&k;XrhEXNGZ)*4ubSLV4HXAHPesT zkEJ`2(9`>2tTjoM#~qOF`MHjfnim?AFe~!YRRWm!5cUI`pqQ+oc6yyQ;{j9yI)!7y z3aclODtDf^$RJ^UPS_uqKGt4WbC<)SKH3!8B6|d2mrjpIl%*}LNniEI^GQzvUjwpf-%-~ombU0rUs76?j zPmXc3A3r1Lk4}# zl)ko&X}_ryu$w30x`3K-)yQ=}_)LWW%IfR~cf6Eu)NXi8Z=}aclaEIPTC7-^r#2>T z*22M|Q>s0>JgiwxG%=MyrbH77Z$hypTZ_KE!%lwQ54YS4!m5sa_I^-HYM_i@7|OtU zET17eevoN*eJRk5PN`Ja4Q@lKwng9aeQ>1eYD&pKv%SPkYqD7t8=5Pl?5e!Rhdi7V zXJQ(o8X>0N%)kLlh=Da!{}6mj)Szck6KBe-_RYpU0$#?S>F*!+a{mS`VTEe@2i>C8 ze%!QXE|&WSTCrJ{0Q6;hUpv(o(8zQlh~$@9@j)+dF)g4Wh{+;RhN>V zQ3%cbkP43bRS<`;@UlQvSPOk?45Q6-<4>tnCaMdeK`(GDG8w1kn0d@a!@8xJ*h0Z) zFN;|`64u({0JiB?myLM02c%KPCpo92P|v)i+Dx8uWRReOsgdIVy3<8B)_B$Qocc}c z*n}yl9Jzomteuz#&@X?yy#+2BS18Ra^a@O5DIf zjP*l5BYDmU~l~_-s@@(sedIvMnq+&*Sd$SW1Jr@JTq8b=+l|&-QmVs!ZhDI@~)+> zvA~^B=rH+4r9W=Q%+b6a0RP*K+~4HeHl53-CCJ2;lkQ6at1@J*Lt+q#6)gD(o*tZ$7q!b#)+0`JzlGkw276 z4Rg8tzZG?i%O;W zqUSap7_>3Ry?eXZr-#)`o~i^2qlu8L#ejPFF+s=pD%r;>^W;Ada2p6I5=4Tk-<7;W z;X(XV;aX7jPR2|z$%@i{_+3u#nR^pRxpPA8U1HJR0YakrF{&8{4kAN??$G3X(_1H7 zRaP>BVIGf}=k6n4&(s_Jjr)JMO)b)pE%$btI_5lcnv>@6?_!<{6S!=!B=0-^1fQ~O z9X|h&P#V8FAtsQRqqz=^j|7*SE3N_%y)6%KwX8Ajucf1{9LscV%R)TbYmcPzRLPI_54~9Q zS=JB`nf5tAESBNB1yL%YBfBGfah{ zW_Ju?1o3rBXOGD*zgQ=A{y#=t`#Y8_5d_aE_r0fhiy0g+Y?Y$2D_RhuqYl@o+Q=vj z$>04Te1Jl+#YMX#$@%5|OcD!aGxdAsxzGu39XgtD!&NKJ2s*8^hw53uD3(bU#Hu0- zCE}no5cNTrOHuZK#Wve#`#n)rJ?Lmt`3N*3u@BtM^$b*5Aehy5aX~7GXYZnbRxOGJ zMrg}^w|2IWIgEsQJ|t9PL+lHU>E0!QH9CPu#oYp$m5r~WzKoGERIHt zhWc2#uG%IJlW22nmlphU{An4KDo){MTZRhNlwth(cgC?#$Bo&oTYa@9pSLV5bdyX} zwTv9-()aKet~PhV9X!4o0@-g`r!z{sDD4@V1pg;IT8R?`&tA){Rs;ny*+kd@<1x=f zO2)71o)EGrt`3@K{A0oq&vXj*vXlR9@Sh0U76m-vO-8pwl@A8uVjLA{H$gIUD5TvJ6()+5MKP@9PLDRa z3z&`NoZ*$oN^l$jK6$i>YhA`eodVMq%Z*=PTG&O%QDaf(E1U#d1-eug%rLZR58lj8 z8#^~@&}TD74Yjq&>pS2Jr)g_{~NC`5!=Om@#;m`CV>cx4WfMdbGB zPQy?TLMCD2?udn@v`G1+a%YS>E0D~(C^GCtnY=l8S{wxPnmWqln;oBXM|FwE2zPAu z_DMBqJ}Eg?u{JiFa5?aYx`Yv70>iD!Tm-T1K}(zaCv-eKKO_@==Dz`(Kx%Kb>ZOEs zl9Je*BZ_`0Ts7tvQ7b}3iuNc3BhI~52%KMyFcP1$Lf^Kpq&_^!k^i;B8eR=htk%m{ zP+0?g#=*p2IyS8tIRk1XW4o2jnHIyZ+|NIw(GOMCX{AX6Ku?+ZXOm|a0in} zjgLh<8FU=KzF%{6Ld*p`reZF%%o5^Rwh_urd9cO~svXVd1I`bTfg z$Gd%S728!MMLLY+oXA5%F|gsbdEsC=8%8Wp3#ckLeF^$x7n50l-)T9h?&CF$5jK43+tzW_L|HX5 ze?9LH@;cqPF@;x{jdlAf1j%2`_Iinxjj;wo}TfvtYRyEOGShH;K|(ODnS>IWK|T>U7S2e0(G zod}%`)VBQu5Jg-x)|ohY9m}~?ot+>rHFQ~O9ov;?LdYV;zRf>rNcAZG{GAdDPwM}R zQ0)eL0*ffDT_4-6a=ICs2BjiV3FHX*Y&iB!6JcO=P<>S=F_ht?#yQ~o5*qKSWW(_} zpYqSO+#2WVo94 z_-tpjj_#pud(#V})lz~BofD_r@AaYezBOFS{f-H)c9bzuevf&wh4E%bP?ZfLONpAX z=y|FkToBHc{U+IodA>;v$tt4bVqNe%m6f4|4sI6b^=02O5V;@Lw#d;aXsA~$8vL%* zXVmY6fPbvV|NK7NxRKtet>NMW`kPG_l%AohJc6V}gPvSt zpm@h$0Pb$YkJy??T0J`kiAfbi8StYLMc*)Prl~aZYT|kuTZ>AM9(#-?_h7T~2juWP zg0HyOxOx1C=apEMWmlX#bM8p?lbXIf-MQ}x|7ashKqrt6pt`TtQAgEyfVti*9?w0>r31id>}580Wd3ec5B|UsZ2c89-c}+s$dY&QgE#eSrEwdz+?e80s&W7&9el$# z^BhD>RGw5_e)HJNhiuep9gYJ$ww!RLEv#t;r+psoTpV?@A>F)dR!!O ze8xlAq(A;hT+2+6HusM$-_y#;8kX9)xbI=RKx}cA635^1GOgu$$yNE1R3A={R!X{v3t-4PZQT zR~HQn3GK95z=<7WaVJ;#ExV~P@y5JkCr2#;z1@Xp7N5HWHCQmRC-4n9dRil#s>>Lm ze(~-=&Q-fGWTlrb(^pVTTLAl|*2#H{1Zvna$GpW1>-{}nGrn>bzKT0c{oXw1jW6qW z6Y$FNOFuO<`F62^Qo=y~*Ax+LZmyZ_fI@aV=EN1#T2qrI3C4BS8845ckkQZjJy^$G z!TINKOcB_IV_dM@E)nf+F9C*oyU(Qu$V${Cl=uZlncj*Sts-bc@_upVX&_+IwnAaqAXMt%KL2_SmFy)eg%qi&#y*t7nDMo$C77-~A=y$zzGGE~HvD#tf@sQZk(QFkh{mkrW$<3lYg8mO6f< zSwm&8S`%Y2yz_Md2BLo>W>*%*S0G_a3={O9LTD~##$2H^9SJ(%zkhvS@$Y0uFVEw^ z68*M&32>Y_Mu%L}UXNHyCavYu3*RV@NZH*!g>_2Q$MTvH%SG31fUB=T+2VDqm*uZR8;crD?pc zoF*ez5Zc-^2NA^NZU@x@Ne@&ZmjhT;?9{DlvmmD>c;78lgl)KU@H*Br!pt;Mq5(07 z+^vJ6P@5fVk`8-vzGLpSYlpEA=ocq}oSU&VhtKcxtLf5o3mJP0F$(T;ja7C|T^CqH1CjZ`fs3kl#woFJFQ0XFI0UsQM~s$S|G9teVF-Lo9hh6+Mug z(fA_A{U(yK0UHLM3Dha8L{F1rSb*thcwD+4@~fv= zZD$JiJ%C5XDa;CX{c(boLJ?`=B;LnX{(j7g!GD?3f*EiyaoX*1Px5>{U(7zW>Y11) zhHLY@rMOJ!{py1LH9<$Uy*C7#kRB#(R-cn*MVV)V?0#PTp4Nog!O^5C&G?30cd zMM>i-bPGMk4ntVc(iNh6IRp*Mj(1K*=O6?L#?G*A%HJ?n4X_ zkz{IuI*PzK_R}Sv(Y*Pf&(ZC}Fw#ToV(jF6Q*>ewa$7bZSoi_SW-`_?Nx&I!FY&|w z9w2i-MhJs+{QUV6&>xGgOs(#XUwNb^c)Gf{J8t=I~it%rw&p`-2(tRAg+- zvh<=m^9zr|wK()?rqMDQAqIb}GypZWzXfW_ex0P$))7@^nhgk=9w^OOle`XIsBwF#6o03bbt3MEa`_4&^-Ok zAGRktAB2sY~~2Fey*)PBU5(6pDlbSvmVOe z^s%fQ$q$X=$5fF960kCFiH^$gvUqfolk$0w+;YpN-LQ_n8>uZNhoT?1uplU%(SZCC zb@n{T*?O$6TfOaI}NLM6&$7(s|JJ^zJX=0b?CllkM{a8eMQW{AVxU__IC3(rP87}hty@ZRJs9lH8etP zVmDFRoI26wd-s4FSU7GRErNl_fgha1Y-#F}wV_tptEN44I$Gqxxw*C5A=|DXI#a$P zyfMj0fOJMwXh|k~5N&K?=~9;va?$+&kz6I=6 zI)<{3f_Bf(@SH^LsI!bVF>_d##HLL4FRsz%pSBer6;w8Ic8y>#i?oxsX5Zc2eQ{qN zU1=2YO#ct9Hx|saUV~e22VGZh<&(~*tgi-&wE#JNV{-biP`mb5&`+`(>nSG!Chrq`()d8owx73_xJt_``ORhYkjoBzmr1RRDo#3ZoZ{YU_8Rh z5}TS(c^|KkiO8nE<-2v5w?J#2_+keZxWiVynjwzebq%G_@av#0lCT(wR6)m%7-#q! zeI9lpz;`auyVID=Y(sPY3~?@D7mCTSZIw;Rj+p-T>B`w7)15xa8H|h=`dw7W48?P; z=X=uc66-mv#1<8agp&h>!`pDm`ee#kjLc$*Q>!BwK`O3na)Ik>kBl(U=O@%M^s^7t z`X9kt&qukh?S^f9*nGS;##FWKnl*0dJ>J-pv`o`pASZR1h~-tY!p~2`C#-zCA~x9bZnY2{tK=SNKZ|8@X7dm6A(G1V zvAHFJCvYo`&Sjp0S&kb%Hy>EC*3H1*^l>>IzT_rCCSm0LawLReJk&RzPTg1{2Vjar zFy$qX*3EWWa){I3|IE>PaB1*F$EgbMN(kHS2@G!ILL9&;Noh#mE)ZU*iDE5rpe&r7 z!sST`ZPNZb&}D2U^J75mE$?V20Xhg;`fodBvbDWKZvHAb^}&dv=|fHPPs`Oa@4a)P zaJ4Hd2*EIU6Iwt0qmi|qy~)z7NX-CQdGe6KvWtqt_U9M5K`(5cn>#q&V3wsIE+|*X zds>U*`I7|~ac1K>sH(4-SlzDP7o5W%m>Ogt3j;gk6k=YLOAmP=RK%4b7V`eK@2K3a z`EoVen4~gFIU^j}!uJe&aTlI4NJti`sF=vt11Ug;03&__B+F-3YY4Lz1er!s zi0EJIAVsfX$MJ9dOW!V+@vVE#-vW{pCexU~9?AMy8_G&IQ3G#U0_3qu0}a_8sI~Pm zKh%UD(rr(*oxQopYHaZ(dga3^`cD_JA>+4`>|ywbMu={Ppky)!L+?>ou3r_% zL`V3u6;)#TsXmqsH?&{cc)b%+Z+~2A_mgD9np(I&R(r7{!4NZ0xX?2Y(1>wjOqMW$_+P{)uZ1#%|IqtETkll zKx$o=Ah@XkxVG9HJc^V z`jAzqZW42fm*v+XqO@fXwW#yB1mTZTrZ|VyuR|pF@G|?(EXz!)FlB_hO>1~5S4Ss? z=g4Kghz+82xaRDODy}L~50(M&sXvS~?K@E?R0U11m&;LOZ1)I4CF#TxrrE319YYiP z>A#CXhkTe--V}Yq-z9ZvJkHya*T**r&(&vfVpHydauzwgxhtT(?dnb+0%Fy_2}U}C z2?QzgZVv6X7WK-e2ikWc)qJld1a}C&fEJ5;z_Y;P^MLy9;|w9_*I~l*qTg98MO7H7 zbj*giL5JML7MD${9hRJtQzlEv5#}YF1NIAbQQyS7I>4hN3l9ONwztuQf|nRm<>W2m z-F6Q>(Lr;nuQRy5OBc=5=?_l-zy90cWcKDWpVLl^Qu!rRBsMJk9DTE$$*vrSg65YT z6}Md+vz~=L1gPZ4^7Pq!zuXaXHfRm<}tq)rl9sWlYo?M|sIk?>Fx(%j>b7&-sM5P@7epsR`DwA!iV2 zAS$jxoj@_1&}iiFuS?k3XzgsrAy|JsMOv9UMMb+n6X1%i0t%FonN9y?{HdhUjVL&5 zavt7X2ZPK2AdTjv&cU9NgH%rTLdoX#yT+uL*%!-a?hh4@CMcA{#)Lz0+LgCr46^+x zy#Eex;EQchC*x3tm$0lr&QqDlTpX);I|5_92qXC`Vqqsx;FqoDYob6sPi961Ci5$C4UK{@k8grJ!U*5cg!)1QvzS9;#EUB8J_zk@VEDPTg>gqdXbcz zh&24z?Rc~Kl1J+$F7gSY<|b2HLAOApurx2V%81obi-7C|&)`E%CGhvI!tv zKQM^RCSv~!*^?Skd|r$}qE6hg!9mFEepVKcHDx<6dSLI|FkQ8hob|UqsU89hXM(#{ z8QbrN^U2%o7v&cTFa7Wr(ASu^^PUzU7-#aU{erDNBn7kae38)$u;U=GnKC^rN*jXT zU%mn?Aw_V>5;kG8{W-&6o{91PzKRV=zMi(P&w%?@BRo^NbMHYB)F*vSvlTxHQjuwi z_D^NV+o5=cI`x!hz~iyiL>!WsePbOm4f8eMYU6}f*+Gv9iF!3^aH5cb)@C;%HaO^F zPRRVX(Qs3B@Oz{2zbd}?eLCKZ(cps_wTo|*EksR0840mqUE$YdE(0u*1QTSn`Q#Oq z#xvia-1XWj(9!T@-@g1zD)y3D=o28+CH9Ym|VLN-;~mlOWN$D zl4rkWD4QDDu+AM&+`{KIDx&g%<8H!={iI zB&V-gOyXuD4u|0qKXwYFedmg#<3Xtdb_FU*sN~{FIrS221S+C;C{YhRgIw~AsQDv* zUa-tBwsXNxB<9c`IZ*%O%p*@SYdcW~I~@6LJ5**uN?$?dH(eRMqkxDE&!O=s@6zCL z`QMsPtg3oB5}5sJ8Jt-$3W{v0DkaueikPHdFm0%1Xa{kBeronyf4tkK{F0P;UWV^F z(6old(f#F;tN6<1mVh+uNy>n+3p;^xb^m9rSU1c*pR${QGr!T-Gs^|nA1r9h)iotP zpMaOkbhB8C_^}J@Kbr(L@PQ4;JrI>v?!T0_;1A|WUrE$3!yhkC4t`3vx^Vk&I%+`hs({W`W5;3*Ym6vKK6yhS@LTpx>71XM&SUgY54&N!|Lm zQD;A#Qg`Vk|IGz|?5y7fyKkY>_$P%3BU^IHQwK~QhJwX{x`4jUVa9!{UBpk0V2cPuk<7-f;H<+2!U>&ds3;ywC@LC)C1ZaF)@cty zDZ)BUs+b*IM-d)jK*Y?75?rv`RT5X-fVd8-l1Apmn8Z*XsY3JUl>CppMaz#Ir4;hC zXxd6tT4wZ#R#nVls+|ID);94SD$B6h+r&(y!*R;9kc2(uf?&9g@^DGmW5O`zcqFEB zO47!_ITsQ3HDlI+5S5+?I0}Wf>5NffO{x9KujHeBPfQ6=2@w9*0flVvsyBljAYl^` zZP!gr`W*HsAp+iWo5y9T)+C%kjPZ{b;_EJVxc$|*_ULKZBSa;D^vFe-a&JVZSK)AT zBU`HF-;x)wc*j}W88gbk?r@YhWxr^|Im2TqJ4n@)V24}4bCBK=kc_5PRahB&X;|1x zkkMrH#Yqd6njJHAmzYj3&1tB04-|eog`{0!8<0y@7^k^yr$O#9RNJB86IG&X%d|I; z&4hl503i5$G#D+IpaHeW+mSq+|Q3M9`Tf>A-|K^z+3(xr>yU?fjvq@Xjnq z3eu8-&C0K<*R15|-^7gfspD!3g)3PwLBYtuR8_cq;tXxC zvkJos_%40XZjS!}Fqg*EXTe0EUbh4_nK~CY{+!HYVQ*i&x{$84!bw8JmAnr^ZQ0dK z#ifAMY>%>{QBXwY_bw$J3<#Us6Zu)2>`9j-&56%xf3}F4&^U2QXhH6@z)u+XYE}dT zgiA?55gM4!->qZRVgqc8y~=q=dQSDRzU~}vzlX6H?!aZ`Nk{p(VE=CE5$OU0c1?q0 z#EJ=nc5zp1kQSniA9w-702Zz$+u?W>DY~MsA8H2xmX6mt!ttxOuwyRWnuYv;15xmH zcPQid8)Lz`GB7Zzr>8ozGVyhw%YC`}p0J`;!qi0xKM>MC+v-2KO)&l+OyrHIxBC}| z0e6_TL+?jM1kpFQi|fBP=2xD;@kpEEbkU^{Mz_5+xCoZy*4%BW_Luijn>lR&dtuel zuSC7yX|`gDbjob6P)DQla0*KC*aBje8%=D(A+Bo@wTz`VX$AH8AV(oD;@jm3mc4I0 zN6og@nQk(Y{irJaK{Y5z-<&uZh?7V)gdms5}%!3!LZHM9S#i+Ot77*P?*<6Z43C<*fE zUi;`B2UGbtC?&0Bu?mv?vG?KnjW`bTQRauiD1QaK@Bxltr9|AL$A>ZtD~85l{?g0sh5wE2(dAE(A)XZ-D!rg@>8%VK@PL*FZk6g=e4%l$ zU&Mozo^$oUMpKT3H8RzBAKygH{dmPlF(AoMM+gs6?w6?GuTVW;Rp!XJ+D8Tp))Cd( zn}#%NKO{H3!O5>9VdWT_k=c>~O+~g(xSK5}h~FoFCRa8lhXS@fdStVtRV!@`-?gDn zH5@+Ik#rAW=RbNN@s!h=99A2M6?Qn#8*so{uPx0jCi(f}Q~vEAXYWu5^uu z6Td?cC&}loB%*c9#l;e<;#_5pme35NI0R$y3fDs zm4D1+k=IM5{K>&kY%)u|JwMOU$4e|WpDoc!Rl)NvbBQH2jyApv9#eQ7p=WB8+Col;FmdJkCK>S&|gxxX?(FZDX(FOlyG8i|AGBc1&4Pr); zU^qU0?e#1BSbI<&S&MTabE#-AU^n0*%MH2SdA;pN%8AY0Q*!e=WFXHu@Z_F%7(W+< zuoyrMb}l-qx5b@$^OPP;?P9Q=z0)l(6JYWgbOcW@S;1IDNqpsQBM|=)>WY9n@({xO zmnvIWb#~z8F1D)Rtl1*tLlySX7aqH4|8F|kHWm!rF{*bGa}XZ4AB8Hzp}*qbKN$WI z#Z@%%HG_(ojG%2<3wF6^(XyGKy8wC;6JT>Ue*)mo1o9u}uwpktA9~Oq*_r4;Bste#0I`HqmSE z*pHslZaPM8PwQm3uJg^IDy@t{eX=IjyvvtO^R`hD(2A7C=*;4)|FE?!phqEbi<&X? zuC)r*k0I{pX@!!wsb1i2@i>LQ%i65EE9%)lPsx^M2(mXU-~_J-WO78h9(~Ox<9vd= ze02FFhjN#}9;I8&Nzt#E!x%ZPHU_l>U%cCY!-{Mcm^TOcg!j&j62Lk8Uv12d`(I|K zzn33;>;+pe=}cns*oFPyKNnOxRowq$@0>bW02lT?~pq-(iRU!VA zaLI@$(ws%bxY=l?u#Y^%#LPdk6^FH$KEl_diQV)+gCYp*lk4fp?|RRN<1=oEnDR+T zbiSw2+hn|Kt8-1gFjWQ#jD!eK_D6?wjP2{{bXw<8 zSwaf(xICg(dQ1Tt866|vCSzDG-spkm+E$O@`(LN3%KbiP-;`LBAXuO&5G?i ztdnalR%>pGy9vE)lO^@@Q|f`Ac{ap5<+_25XmU8}5|UIUSso!Te?KPve3eIC{lRuC z7lvhCukpwXZDRa&e>d>ICAUTelLU7h0^FA&HbsOrEEad2UBXn`LuEeq+_}G z9@$4@*I@sNW1NP&`kWwTuz2Th>@U*ow;q3SxHBaYm2}msr<`-}&)>Pp;Y0D~Q_Osi zcpGd+kx@{BaDs?Hb9Pvbo*xKoAoZizYss8)+^h`%{$#U%07ch`j zJu8h{^KmO#MRWtZH< zE~AS{#2;Jgr9*KlZI8P7E$?)kY>x|Z!S+?s+_gERtv$r`GUb&cKXJbf$9WE!KiU;)8>jXc69c?lg#<$bRJiR z`3D5_)%>$;_uFIspFH--D!T`eiTNk3_uDz@IG7P8-k2u+(%SfAh;WGIjk{TXHEsi6G7>KZ(5X3?-Z41Ie38HkEoJ+a;gd zrGM8)!!cUEX8hbtezqJEDDk2-cVMZ%@SILQ4>FdiAe<}C^_3+65ffUR2b?VET9t_z zYOqdJ7K!DX%qQg!d}dL5O=>su&7n4&U=AFANZ1*GlkTSS!;Bzj&^Uk8^Jo1Yv6mz+pz^zVAwfhj^>lMh_w@I{80-5PKr)ifm3d>ethZDp97DL-&4k!IM8hu ztT6uMvb)+^Zn1;B?Bv~XXG?ccPN&XzWc7%huD3V2s;%`8p~NaAPLJO&7}PvQqGH>a z8m_f9P#4`kL^IjHgObegFe`A)<5_;b=Ei}HZG>uPU@I817QbM1P+tVxzQfu&YO8R? z|8h{wiaZU>W<^(V(jgSJI%KKwz>AsnWRdSs zb5Y_?^*NFg+-rKdRaF@tm9`J`OkSCrqyZ3Xps!$}W*N8P9bUZf`^sruQ11`~kBl^W zfV-mRZJbj@nkI*qtKhgR98d?Uxhpg|X2jRs{^HIIRj-46W+7u#I>PQs2tdr;jWVmM zDpv-Ej|}fmx!r;U1OFl%J#YULkn=sA1_Z5uv}Jte`HUw^WAGZ**mmTa&>hemlfJIl zxhCH?Hcsjv33a{dEZJr)=3OzL6I962vF}MFmyEh$7ELr}6y!N+s9Ss~GJ`*+3};5w z48V;ORf?^56f8ZWC1{eidl3HnGf1<~P^;s_rmzs!Mu@;IJ&&G|V+XaAeFT>w^;5kX zOW{{4&4?je9yCW*pKZhdz6+}xWB}&`mMdg5(6Z9_RFX$ug$0r#f12mU;N{)I4lR4- zS8J6i0<$_jM88g^I+RetgeuCijZjvvMajaA75Ng(8n~+cz>~lF ztcE$fK`Z3gE^n79@Y-kvm*Z*4plQ#H$UP?H2E&84p%wuD38keuDAN)PpE1A*%B+6kasgsfK{p{$R^=Gq+r&618;5ixZ?VJCkSpaf z4^@J08?05v<`l|wZ&M2#&0VSrFfMjKkCXxG;%3>1pV%wAafdahmuR>l4yAba(mlQW zzm41Ro4ZaNiKJGYgNxN$^IH!@buz<;UwUlZweF&akI?47?&WO-0!#ou4OW0NA2}L2(Ba-ZuW!DJOa0Ho~VxLcBkK7?rJiXY;71oRdiJRun3q3?NSN6c>IPZ`fjjDw)EgP7FHz z8Pm&1q~uSKJ7@)hJNb6GG6nDu;cotPJcM`)Ez7Qg%VIBNO2{t2;-P$49kisgd_PME zF1H@E%)EMmrpY%3;8jmkpkHRrR;1F5XMclNS7qmX76)W>(CWX0>xSZL79~O`CC0~olnNd1* ziZtA3VK)DTLQ3H->&jP0OSO8US%lORGV7=W5EN1&>v4?^h{ErE7P-4`QTixok}b)T zV8s+2NAb&ooioF|A2iXHBhDx`QC6bvj-z;=TTzJ?HiU+Dd1}31isGTY^6;N8(Mc6l z0{RA@1Pt`8kep`*C!-f>t>4Z85Lf2i2zadO7vLSZz@~gYA;Gsd2eTQyNx^SjKzXL9 z*laC4xFy3NL&)M6L7;DsDe}E5iYWnJM!*oM<)N`%b+3;N-Jys*G>H)TSw%<|>_J1G!F(QdqF1qAapX ztXl{ZFYMp1?as-ndvc(OriY(lDzT{mf-kjq(psQW*eK@yGU8OXv8%X)GR-hE{vZwX z*(4gNU4_i*#mlI)ny{&u!6YHt25yO|; zKR<+A{1ny_^cOBRxq1ph?6>dcO;XJ8@$*u2lOenFx$CdLvYgiHlc5p>xkc1(2gL+Z zQmEGN9li@}Av+m*)kU8v6JfvpXi_h6p0A_V?FltY$Us!TQhy=Z75UR_x|q5;Ol$$oz>wm!pC@C}Zk+-aq_yPj3>`B^`$nMIN1n8hIU4_- zBY(ur8^WmhC|;Wr!oC_&y9lGV6Z?Eig#MJThz6t8Q2 zg4QI|=ZrdS=~+E4wy@b+hshyeh{rK6&T)821AdybsQ(v4Jg=Sr6$8lQvQ zg@zl&E`;{Xw}%GYK)F6M3`R-#dcMVzHswx2(pK0G?wVesJh-t{$7#OCUWNZezH{qb zRA^6WY3~`5IAY82P28#M(aRt=8t5JzANIb*i zR8=1czl-UN5Rp3&A6mSA`m@c;)@sXzCnQb>WGiyJ+Ow*z4aT_ZHdFHaOX#X|N=%$z=l55-8Q zg*pzd|6$-C44Fr?T#8Q1V}~kryBaxZkE)Ek4#MW=0OH6#=P{x*gkUIWk&u0%ve(A* zl_qr;qUs-U=#3kzw_2k%6s_%gn`@R^Vb$be_Y!9h;~j~baFMzuQOvZ^u?+mVqywN8 zI-!au+^x6Nb`%ZwBSSbPsGYPKOCJ0qBuC&{{SJg5$G5DL*4Ao_N&gC=%b>=(5?ymg zgB8PfQCKz0b58w->%;gO9TxJFWvxv@Kb=e8=yL_-6Ook4X{}kIk|2q!27(Ru{QaPY zIq;F}{>&CL?jitt3EqLH?N(R8$y$%F2nVyLaJb{TmC1-&Yu9k@Qw@ky%5>x*lryGt z+dX~#ptu|CHQ5_Yl+vZ-{kMBPAbeDD{oi@C`k0`$6MA#4;p~{{@6_Tpm8PuKXDCgtb6Gg2t(*-rXrAnoQ3{4@q z2_+8PGIJX;b$SJ*epOXAZCA=JH~)rznzv3to;8f?9r0?B8!#=WBqF_% zat1%%?i77ZHGkZ(fB`;5lq)4lYeb;t7vh;w?@3mW7~2c&$u@#lq&aE^o%<4#szl1R zfa*gJFn8G$;iPoA1!A8FdMF}nOOah@o|AY) z@Pv^j*H8x0!}kPy=`o?^vM^8)GkRD(UU1E<*^jBzPbNHkR~#o3G`2w~lY1Ec6F^!N zT9*~nli-VYM3VsmkOfCH4~<7+*9P63PUA*7`}2Cr5MO}ROa`X~a2_tYaN6Fl>0fuL za>poL{}r3**9M$H23!e($yaky$5A>42F|(XQhP?0Q9bnA$`$fI_z^;}F>hSBXT8%=z=(I^dc%%EolT%=`7 z*JJqFn}4gkCVWASL@0{M_|~n9={F`Hqqehpz@kzV8ZJ-2iEc`{eXiV(){<+aHaE_0^o|XX6F|RO zO$}w>Ka>eW_1MP}#9=o<>Dc|zBbC}?kxg$1%t6r2#4ap&TR%0$gx_$mI0uWMP&?!7 zmA1u7CXo^?V}V~;3rc?Oc8TNK8&Y5V%gEW^#egqqFD1dA9#(?KABp5+NN2Wt(I+ha z)OfpPN^dl4j3E-r2%oJ=+uT(IH~CoURSsXhL8eK=;>84#w3p}BAKA2$nct``5l47> z9t0UIV;om)vXoXA7iK%sBog7`?`BzeyVI;aVqXt>)1lt!q!nl1{+1IU%(1w-72O!r zWX!-bx~6w(-7_uQgJ7-fu}4Xed?V=nS&FwKa6@QtcwJ=;XT&%~6cE3z{`(HUaz=sUcBZ($VWF{yMvN z()~?$ghNxeqdltd@dB$EHfoIO!vvB|zEWq~N%J3X&xLgJP}ClYRt86S4s&hFf`vd9 z-#VX(XKhzZ62J{;%Adhf9fmfr{VWKP)?nO3(z-q_Oyum>7LO?A`@--30H+pke z#*%#$H-orsA(srv$+?SH`fZOL|J7~Y@qUjoSSk;WAeSq>4};yUY5q%f>e#N$@DYsn zjiItgeZVqK-N{LzZ0^5Dt^RL$NWEAkn}gA-W3{5KS)c@Xa}CN`3jmx4Xb<%4g_2(w z0BKXE-O_Ii{mR$?PxyT{4lZn+LVRSq=;``$;xvxz!Xj~bSI#3P(q>{EX0S*Jn-4d0 zJdfmhReLzYF-;T@5$2Y;Hw)93;Y+2F|D`v%#vU6si}Mx3ELNr0{>W1*2%cG#P|bzG zYR|~!BxqJU=xYDIs-3Y*TH{7x0lSs6%<|9AC>`=C;}DgLff{|5AUMP+pNzKUE?)ij z_tYoj<3>@zo;qXA)zoPuO^@_NYL&5%M6Ni-ZMv=-{2`lsHY+mO!ORz3LyuekgD$1K z>h8!ScVE``Qtwi;F{$)wu4uB-k<#IU?)9YhR~B{e<~-@Ph|J? zK4?NpOXy_BGhH>l^h3pKDcyAAQ-)69*4nSTxF?J>U0y>6dn&!%!6aaZi^)*8f3&_N zBK#6%Z{(Y`NC5S;Vwuduau&4^WugHtkOESoT9*wib*R#1U1_i#WWrCw^c$yrZ`~tGAOe0*l2Z8yj- z&Q{QQ?}AD2BgPHY!rhcn{%y;J|?qNee8j4D0E2Mf$WqH_*aA0 zhfyhz=?}(3j|wZ$?y^?*6|L?1`mviAc>9l_&fxYR?4|v^*3oy5)X{?Z7eYW+2hsQO zZ%ucJ5vMM9{bMQ`8fdMnqaM{)Hbl-itf8^LLV3KZ!Lj|OBxLTzxjB_3h=guGXizST ze6AtuAZ;K;1vq#FZz#s~0K-aUfpQo6gJk6~?(0J3>t1pM}1oA@wz@b?4SQk-rzsX|?Q?V`rt!6Co+QPZV^A}vz5 z;Q+Qqb=mHF=s6qfEzYXJlTy|2-H3Sw4j8YjuK9ya7E|BRNM3h7I=26<4)NPM{!o&| zeDB_n%b;b~kwjsKqwk&~tvtVC0X+;k7CX7x6M3whi7SXkF^f`>)hsJyag4}yjIv!b zTvtT_8qHY-4vMp*Qx_!eNvMCR;G#?40@&f03 zH{NTiam5C1+q{)mp&9x*+>61eV&HL8&Iz zi%n1OUYr3*yud%KR+O@X-x*}jk7PKj8B`{wE1ODvn$Rx7Yb~z8p#VgG0)Q>1KQ%^1j(zDSTj{);4jy2=tkJ zwG6Z)jYHYf`N*rhT}hN$VS!3%X3GzT#PgjKnLjVBmk2$#tw%iSJqAL=mTx zVHfI(87`pf0{*VehgP_RrYPot&Tx3cM{hvn@y-Coa`(dlzbb&42v+{76S+2y?{}q- z{Ul&=lv*Tsom=gxVjFjhwh#AZB%%%#2SJS;exw-<-O2A%hzlR&k9SWFOC=6e1cMW8D{WEruM|S zJf+7(z4g$56l$4z=31)59Kr}Q<}d-%1m_rr=H!5Z+YLcs`8KzP6=M5*$hLQvz3kT` zRU=A{k+KsbH?RZd#ToH2P$x^gCvvR7C)TPBNm!$c?bMHDFv4P<^D{BHn&@lf~x-Pelf48o&Uq&|KN%JUNeha$hPP^t&+n-M*xT=t2ZE$Aa;>*8va>fcb639_$-3j} zWE~e{y4uZ0phf%3+{-CnPKZ~*uX&#DAnl$HAvCy_pT6!WZ<8JwzM+t5Ep(uc`Nn#zeN$2f|HcllbMl-_qoJoccx4r- zPe)a`9f`&HxTj|0ew>9$_@2dS)qa#n4-{em$;H^aG;n)KRl)YC(=zkS$Seq`YQYh8 z`?RLlV(7v;5c3$+8t8CbP&emU>@uyTEd;D=9+!rnEi-qeD?A7S8rqk_C$w}Rc}FL1 z@(@~XPo1(w?S8mVX6TyDr9k4tyhY%0$)>ssPV?(@y1x(=Qm}>M|GoPqrB^dQN6ajo zi}a3I%sr@LsoinaxbH7*x0_*&#z4IrcAX)A{bwB#e=_n$?i%;0ic8?2L${I{CJA+5 ztc-T{33I}`*kM?wpWz@FNi%)LmPm=)BnK?!A({`HwyJhLjx-wBFI*fMWY@whA2 zKOKM7zPro_^R`2B3_ULgr#o~6HRI?^(s9dv3d?!!7pqSO$1!yQ)}$on!~9)*&0sd{ zqjj(zga7&>Lpok5NE+bjSpVgGRz87g%Sxo1V~cMF)@Io=kz*^K((DaWk2m1JqVuuQ z^G%k#keTRXx<--Sd@vNm@(&fZ98Zt6AIH-4>tRP>78h-0tq*$ksl=6V-=L?B%Etda zXcKiFkcXQUITrft_Y7`);Lu7n8+2QYg->TYgJXtH&eXkjHdDs@G#`wl`+HV097WC2RpwHtSi3h%!?@n?Er2D#@P`sh4vB{-VQOT}j_NS|U=L=W7NMjWhRfZSFx zUE}rFXWL5meo8DXfU)M9E}XQ1EXF%nn6Tcgf!(q1BI5kqVSTMHQkr}T>B20~KUC{R z;O2w|dc{@yb^R5ZAQMjFhRZ6XGTMIHl!cx?6pvWiIr^pcvY|xq8|R&AA|%AN;5KYP zc)%NDfPdtM3sIndjmsO4{)P|O?sduF6$T?VfE~WKh-%-m>xGp68EqH)j}w7LDJ^XkW%4MN)}e%5pD5O3U4kYe`kIMls3YNe zcln<^Jeya?-@CHhXXwdl155r&98RokuY& z=(ftP()`0&q+|Z@b{1&dLfsjY+s)QIcR>bpBP6$~!doy6mwxWYbQqEnVo!g^T|sz` zPNKKq7!@-)hWNq3a35f|5Uv`bS0!GGH=s5sG2I#JuMy%>%6VP=rwEs2Cf9&F@bT;W zt^u*$b32-lAgJBHy5{0_0_SnT!B=S80e`0yDZ^TFslTT!jT(AUn!Nufhsx(Cvp50Q zL6#-Bf%2zjI|r1(poDD!KjLX557X0*#80nnwG&It&%3!}>U&QkNR#L7+ zF=5}-X8%1|K4JYDda|s;g=75i@RXG&!twJ;S7?YEc+%Xj1dNSs%|=ZPY=+it*@6)% zMAQq{2|NcnZa?fDHa3~;VofsPtNCAJ*I%j2;QipSbmqZpN~6Pay)6hxZrD& zk`52=c5`N!U>XcR)V`UxB&C@r&=lGoV>sH@+C?R-K7QzlR3#6<+#1s7(aQlVbTF7FoItpQk09QT;ZEKc*UmMWS48!3NNka^Z(oqQ!g zW4TJIabNoV%%y<)%Yn?v(P}%zq8Wr*Iyy;XREJS&Rsl}ngy8(_8OUcKl+VUhAp@7d zs>%Wp5Nq0-(koebi)~5vnJ@Kt zGy-(T3QRXnqvL=LSuCyhboL&2(9o8qa_>7E^ejSo3}qKsttl7gfZoujh?;=YmK&SR zMrlv+FVI);cZJK|J~iLsogpYJ8KX>+ifmNb9P!%)@4+8+L}{As&Msk)2eb; zoYPz41={&0_OS|3S1#FuJ&9Yb=FhLsUsE547KgU0{*Qv^?w=(=4pByNJJSn4B z*k`38+~MsC3Xy1MN_y5o+iAYD10pnI5N=o)2ZorDN#_1P0QDIx)8VJu6Lq)&N00ga zUcMGXedhz8GX9t~T*)w}<{;ZJaH)B`R^A~l@c)qFlx!GoV83(AzSiJ|J!pT(H*$D~ z$l`vB9;+Bn$ErfNcciH{6{HHG3c8d0l*@P@Z*fEy(`t#DYvqTBf0HKo{!8qrWZ1-7 zaV=A7y1Cqt=D;da50vcgzaZVj02qNxw<}LG7dZsc zX!?5%qAWF@B$y{#cX<4rgn9S^M`oxZoNUA27M8bv8WY5@jRd|SZ0_ytSV(aw*FgAl z6WD_}?KgP#oep>)-gFP1ZQ8q^uWcX%36K7;OUTIKX0)VbM}$3o73z>m-wLHeSLUup zrn1Py;g{nQpTn~)+_nzZ>2Q9jQd0>Ll*{gGiuTtaGMkfadDlI=WtLk%*Tz~yeo_x) zY1TG9oJkU8rZFrpml~S|4b#cBdC0Oh48Pf0!jvQQqU1S9rFBObr=HkMyC_ z0=lXukjcQe(3@>gM<6)ZW)6#oLsf;ysF8)L^Lxh_S+4b{lQq}TbqU$u-ElOP_ZM`< zdM5#@4#;o_oZ&5DmHlSKq~TzEw$X8EuY5e&R?|ni6Qau*p1JtAk`Z<5Ye-JptU+M>3s;qd*ahKJVq2czIlv!j#fd%U5p+&BJW%i0Mr*7c5UlH#*_ZF@BMJky6#UTh( zcQ(~qO*4$;dfnFo%0~o$7FG6&QYqu!SpUBC^x2olKh#yhj~xs?a^qw;P|6Y)Fk5ec zgSqK{qUjs)(#df*gI`8p8N2WNUNgaa0Rpf$|2}~N{dd_LPf)EJkBCqgMVYiCQ(B4( z$}Y55)0*e7RNHL7*V@$7(}?iw5N`7-5tUdazTvsk*0@%! zuxX*(Cfl47pWv9*wXwB{g=mYp?O&Wm3ItWC-Uq4}ySu}M@WK8W@940AUUm?gwxPkn zbzpaK&B6O~H{2(w$L?_&!>PLpCN&I3%IXh28#Sn23JcZ1+IsZ@=HFT_M2tBi_%-ko zN_*sRaO!1;LAVzFKc>FHuMYQpKi68dwA|9NZ5t=swz;gWmRs&*oou(jn^k(Pc>|Uw8$guKefr@nYGa*JVIAgI3zr8+6PcJMgy#Y;AZ5 zmp~bYCk8E0`pbG*jU#vFePOlrP@6N46~-JE3Oa%_vmk|%2NS2~5~}n7D@Rf9gG|{f z?GR->u{vC4@J?P2dCt#nqct=h;YH}9L%v07ghLYa$9%vT>tOEqjcq_6 z%kMQbb!kM4kHxiX~|+H>!O6-CKoW%l@{@kQErd0a3{?3YL=}`cjiZe z{s0<(FJ9CABLM?HCN&1=YiTC4avqwl7HCj00yE8wt=&)q>BH#L3g}yg0wOb@QaJ`T z2k;eF;PS4=P5?(q#P-)lhOmig9-E25y!c*G9~`$k_1(cPS5R4O*4;A@lc@d7q|#Pz zp&={Q!+>K+hb0b;SFjMED({M~?@kKe{XdRQd6 zhsivE7j|?`F_5qM{dio(fIb_IE1a&)IJk-(SaafmJ<3B?iiOmJw!X_2G&dF*D~B>eemmbXMO8TSj zFwC(r`KV+W!ZqCUM}syj+J2)E%>37A(x|Jh^Q*kbqan?}f*Y!k@YtxG4{W{HhPK*f zMmzegr-xHXj_J{=>q;#0*kxE+y_<|xz`O9-1jks-a%f1Z9+K>&w0v;WT5xaNsE;y} zZsZ`O)=q|HAjI{32k~(evKSbEeDI&d9C`ZN=w01GLUDEeY}%?+m=7>#8{%Bu*Kz^? zn5I@jK@KZ^#nxX9{@%&(PO#S5YmJ$vg;}`i8OV*9=1X3zKH+dd*_ADo# zeFE3zE_fa4A(4bAx*dv%rd|GwAYhV*JCL*W04TzkIN|%BIu6?-CGGH@TxtUucFhTW zm8YWU^RtwETynD3`udg%?J4W`ifVN@D(NzKHG&GLR!_Yuuuq#7iICUN0&_OoH{8H4 zl&y?6a}5fQ8hG8+br7;bp(NhQyHUXnx!RDnPohpW?gOH8XCF;P|B#>4JU?=wP(pDI z_&ndB&=(QT3R>ZM_hXlW!?0tTTV)lf9DY*^XU17T#M3gGF7H8LX7c4WMiZmNmjjER z9vZ>b=1u4qUw2&C*?U70?|IXrH#ZxteQbg>-;dA3(iv^>qm+^I8Ooejy@g9X(%Sq_F@C`DGr#i=`pEBZgAHdF2g$3W z;jk}3*te7zI^9g5|EB2Yrnj<4@}$uOYA(lUPB5-6>yS3|Zxbp~EW~y=QC|gYpV$b$ z3}DRe{UBjF!Ge=9_qvhDg#38<-~@#z=l7#HCTgXc#R3>GEuJPC_N^rpP`&Ws3Rynn z@nykwV$JDwh$WxDzz?F^qi}Mw(S-SnG+<*t{ zr-SDW{*Ee7y@i<45|Kq#PbR3UQqhu(Z%*zGxR7(lw=`Zr;VjqZMK>;!d&urRQ@5h> zcF}S!+#dOzco5}>s=0bptoALxuYbfNQkZJK7yw=`Qwe_B=yN3x^p8de|gO&do>2i*qH(s1}C*O9cTlzOkV<*Xdj;_A2IP4XM zw0im5e65YhB_LAD<2f7Y=Quq6QxNoF#@~auI*OwW?r8t?lWyvArned5<9gsG3p{D@ zVaNcTP2i;DHW=Z4at1ehW!|9w9oP;k{{05u*Q9%E8cPIJ*zW2PdOxxTTiFq6c>9hL zRcP)RXf^~I3Im)OmiN*KeTbT?lBCCrMMX^Fz z*reF~mGEcXD=4lww7eR*Mdz%unZnMYgT@c5oSfd#P_gYVZvgvo>m9qAnOr`Is{eQu#E6hGl7RBeq_vRH*pAD3vzX93 zGNEkET#&14^Z)v>w$2-VqbZEgk*qW^U3&eT)SQZxhjz z#PZVu8ZXO4)1UInZj9(yr5OP;x21|rlkpa644X03cx6jl0*nT&AvQqRQ+0WsU(_6C z`uiVe3mp=+MMF#J;pLHLNr5~ZSS?VqP0YCBAuAJ!f!}Dwxi|A{R{dQkx=)@ea3Wy+ zaR<`pyDO&+3FmL0%EO?oSy~^aU1wXh--}A5gip3l!JL#BJD9v0x=}Pml2B|gTh%+~ zU~EfaKXi@|!GTuxt(f21fodUWx?`RKQ7>R|i=M z1ys(<j$&d;{Aw?6um)P4d} znl?zl0OPwNjav&8kv+{d9m25nv3}m}_m*kX;@qsM!$w}^^_ck^H}B`kn#xE(gC3RD z?5H4VehXU;+PK6A&h&e?!bzg=rI;`Kb3}YmL@bVD8Q?fp$}L+zGl-HQNab$f=B=yp z4GJNMw)M{hIO9H$?y0*Sva3;Uhe{l?33WUsUh7_FL&$X!+`i*47X3?fl)n(AkaMl& zcUOkj+7D~4blciXjT3f||D^A0mb}0>f@aR)QS?F0ZOB?QOS6biP8%@@t?Y8 z^Dj`d1w25USS3y=tY4%5z z&S&km<2rWlYpinM@Yoo2#NhVa%bZEf45O$Q7npLQ7P25XrDoOpG_r#y>0JyVUDytpA$8NmN zd5yQ^P3^+Zd!9Z!sw0IGeX;X}{GQgna@k)=StqMBWYHNC$eGZN>PIUoX>#p~|G_GPs_|#>7cJKHp_BNmIFbB0CMb)8Og&R~ z5$tGlzV%_?x+u!7%Nnh9&4vs3(XI+ab!6bR{&7;#Kr!`{p%6JCi`1jrCu{D&xX4j4 z$?6%RNGBfmGf;G2JlDO5cI>{buTz*rYw?uJ_e=^nzzju6Pi)Te(UYu?MSqNAB2E|1A+{qf5{K3`ooZSJU6YQ{}m)WXDQs@ta#0QbFg z8Ug*JO)Ia}wRc-MFgsP>4bM{E-i&U4rIWi?F=^#LAjSAy)=F8dg_dYxW-Hl3)cgqq)k3a*{eNq{5544${SzmFV_S6!fA4N zp=uraBy@z@5=W&1=JdZlb4a_x(rCO^+kb?`gsDIt=Jl7p2waG}w;Gw25+wA`{3u5& z!JcSq5LsJG9h^BO^M^32O1y=#i?%hl^=?&+kU@-px~L(aMI)=+$!o zKa`hvw-wf1a0F|CTT-w&yl~sX!Yj|8c{{iBG2(m7h5c552GP&3TFX~`Z>ZO^takFM zY^zyeBLTa6SAkulI>YdVfGXIjNslTeH~)uGVUeAjQpcjH^)rp94$K~$0sg`w zxmnS*;m;P=Af9f~5ek>uX|cupdWEb*Qz=E~tjFb`F)@>i$x1JBeHanj9M}+Z)V=k^ z#lgq+!<*k71IL0M2NjH89s;9Ic46kASwDNH^tMz&{4heBDwsW(zPpea3bOx1Xjp~t zWA&odF@qHK`6&JzdW+XlmoTsav+X*#9wZ7imLU?UarqzPlmP?D`#r9y$z-|1gL268 zG33l=5D61wk58X}tTq-ybA{QJCW?`gZxp`q-lG!n1-@Q(jeIdQ%$~fF0#)1zjvTo8 z`=ZExjgtxrfIM){q4NIH6^^yCyLzG!cSmF$w$z;~{5gHIE*U80&KqaD2BYP1x;Ud? zO{|jrT25P)JYA?zpi_GDPI<}3`2V{*Ff#;+`LTA4g88c-Lo?rHT&eUnA3-ed)@ApF10}+ zGONETvNLZ$+GG44{?UADp8{%qWs8Sg!w;mWp%vRF`B9*}TdR0YxA1^QR)iZ#e{qMA zKqluVIIm$EBmbvlJw0rzrFgBiwcG@s#yU1@Vnwhi5y!Yi{6X|_Qw%3QE%cH?qgaPw z=M9&Z-BtEdn)1pegY8>gQ_8`}IYN6ok|)5e1A$i`@pwEjpoivJH@Y^4Q}cpXcA~gP zpDi`3+tHMTM1idMgpH~i@e3gm>d^dLC>~M0IG)G8CbHQ>*EJ@_Odi_3@Aopx5<%+n z@^CS@cK7mItd%$1YSFtY&6iC=7@+K{PZ;Qza0}Q-Xm(jO%-;BW1l1a+cg67ffj?LN z$LXn4^V}H)or%W5Cl{*2|MeVNMggc>r)6FYSW*^5nuiPC!F4ER&Tf*3okciwUi0DQ zuhE9Tha+uqroLAMpBIOo-`4YlAuVMHx%|@NJVf~$^Oi{PBKNIKv=#Q1?tJ+30LOl~ z^N;}`2PdWl#&CAe_9qCZKZP5cqE)m`qm`sQ(RKz4m}Zwiop zGPA+(y_f&%Att4icvgzq8sRt1Vj+dBX9?j_{~xxuG^&635Sw4KaUUR!^#{NM_Phs( zT4?O~yRzeYRv?iQo@~+Yi2n$y^z^=d6*`^`p`J6k1wi=#0h0}``1#QC)C;(UV-+33 zH+1+u)x$#hDB|gbf<_a}>z{nycuA&XBLjZKK#Qd1EO3S&%uH~cV>Zrn$u`|kaZP~v z^Eo9JI{0QE6`WYHf?f^#Nm;+e1SrVpymCwInNG?t-i-lGFnnj9ZFwFrZI*IP7ByP=>YtrFX5oNHm_v_0jY;>)pVfBe>vQ&p%vWe29ap zGCl`b1uTPe2IM6x0OL1C#cS5Y6b?hOn25N?+L(eVo1jZb`E^G`mdW#ALZ0VKPx`;G z&G&qLSK95p6^>osr-s5RhlYL>NhbBN7yXvC@>}cDhgdWyGX$Q}I*agTRmAZR_(}&N zS^2s1)}(^3ks1{1WAmEHE_spVD7JqRzX;Pb_|~qcqo1-LDj2gLt2c<7pdeYD!S*w7 z^I6dih!R||b@UEOsWC!%^iYy0z%H-2qu2H96UYlajJ=Qxtf0+&osg$_p3|FLUU^F$ z&=yyttCl2ceJM0W2Xu?F`?DG1B`i#PoH_0w9G0&j<%K~5dN zuzhpjC<|OrMeq*o^xqxg;*ba1Bc^Dv_=d?kh?`k|%>j4lu`bX?PylHaa!j^k&}2nO z3I4<2oM8+H_t1`rw8fvHesVtVPn=p6%IwAV;<{`>SxegEfio=)%hTzj&o>UKgh;); zhYauFWJ`~4Mq-g3AHUc(+~sC&Qa1-&w0pv?#~-t5r@>mezEdy$;a@0ynAi=sPlB7` zaIpJn7F{b7E=la9&ti4rUhNnSqS9W3hG-9YI)_?yI$B`nVv5_ePtRFK2OQ&(iU@pS8J+t8OJJNfxs__-W*iIo1WRaQe7Ls4r>(5{ZlW$Bt|RvCBZi zE*MPwbFGqchiA+0)iYqoiP`d>?8?as4q7OAel6n(LOVfxdArbR)i~C#IEzR1K<;(q zfZx45`ONByJ|zWf>>f#lRu1_^e3#Ja50wNT(z-jWcf!m=X~PgI^!S;+k)Lg3oIX+N zXu1uyW+RUG?cyIVPc%-|#xRkY>eHi2lo9>?Nw=8`BB3NXD&^%&(5(xFISC?eiW@)l zuS{%O9SEyk!ufjQuL#&4WOTDD43HKSK%aFxl3Lw8G8AqA1ZX7ikGbwCk*B(rqm}NY)K-H+h7Y%eJ;6_#M3&IREfDyIcyALp z+fk9d#`A63{&$4A%hcy&bDSG4i+)m~wna`Cy8$<(1r1Cn!#92UYY&CAN5hT}a5Z7L z=Dzt_ZYr@;^Q9PeE%_ zO)j=Mer{HsZVJ_39sPPeu2|lRJufOH4@CgKtTMg$0ZVE8rGfoRq9|fTjNR|~;M0&~ z0=g>4e$dg%d^aIfKkueZU9gHa7C-L!Nm2}Nn^o5i^r*Q`jz5lpEo5DjSHiRS2G=AS zyUj#mlMz3y)yP@V<7Y?U7fIE5w;r%J=V_U{vbD5mH?aE-T#f9*W~k~I`Hq$iU84zX z<8V6`?R%|P2FRI0xJiq<0q-=c;wH2jKK!{hMUfe3$C3-wg|O7P1jZOE_sD3WPXRfq zpC0|4d!YPu>F*Q{hmZZUcnn^L-XaM4in%NtHz0G?TwTDZKW^ic^XSJL2xO(J#?l^% zaf&(8VP){PZsW7NJgBHSivoZ2I+eJ(*{a5!%@Ty~q+CpTiJI@0XWjnK@amqR(YiW&2p(XP| z)vl;k1n43idHr;j1uN5IwK>4m@WuuB@;8F&DNwL?3{*naSS%ia%><6lO!pfic2gl4 zoZTuC>=wV)%6=P(AO?&389G(VSUHp;9z@tg`Xi_W-5>MfI}JymON78)LT1h)@WLf* zRsh#!9bDIi`fNx#Ty@}M(9M6M%jX>X+R0+!$~1@ayhJ>29qk5ceZZYA z^DW49xY6v?M9Q;n&TCtju<=5WTVAWz*_4Fy>S?+#@Z-)x%HzK9QcdUAARt%3sh9v} zv*kY|-2%SP?RM_w>*v;zwlsAxB&Wr#k};zR`V8B>8tZShYF|HV>WyR!YatGN3hg!w zl1}7H8W1(}#qP$R$s&{=_`LvC9K(6?eC@$_^U%iRU9&QsAW1{h%fU#r_N;fSvn0FV z(brSnWduK!Yo)m);wUEs97R3VGL1ddrBB)%w;>uA?*p$xabq7ysR;)DoOZbF{~gik zS1tPD(*7Z{I_8Q9PZR_lA4B#-Na@pNqC&y`W%G*rg|6b0^kKa*fW4kMBP+W^RIGPf+d+EU*^#ba zxF0sZGwE*KP>k?uJ(6o&prRv-Lgw6FT#qoIJrng7Pq@%y`|jcOAh_mX(%_+|YN_gJ z*BU{d=>Rq5%PPA^-%{Y+OE+rnTgM6zr)rpWKT$8YKN`85_y-HpScgJR)DT&x4Bzs$ z10drs_Q`ygF~UL3oUM-|%x(3!YO~@goa?iYb>;m1Uqa~ukYYtj7aaZe^s1RkFL!I#dZmv;dvDx)`{!>?Dq7I{ z(Gxzl4evL}dJsgb9YxZ_-oy|Bih4#bF4lg+q&ME(GN+?cYl~i|(6J_SVmG`E!QTY}iFb3zHLG~5s>FKlw3IOa{XQdMrmPOqCYpo!o z*~)4FLofCB+ zd}j*⋘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

g+IR69c8-x{ACrIAEGBF`+e-gBfqEf? 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

#c)6pN9r17cNWczZ=QeB&Qx8_c-XCU@b+;} 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%0DY^wk5 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

?`qAGAV%_Ai6F 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 Y7a1|MGc{oQ3>e=g#-S^xk5 diff --git a/src/apps/unstoppable/contracts/abis/unstoppable-glp-vault.json b/src/apps/unstoppable/contracts/abis/unstoppable-glp-vault.json deleted file mode 100644 index 764b06a33..000000000 --- a/src/apps/unstoppable/contracts/abis/unstoppable-glp-vault.json +++ /dev/null @@ -1,1040 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "address", - "name": "_yieldStrategy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newRewardRouter", - "type": "address" - } - ], - "name": "GlpRewardRouterUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Harvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newRewardTracker", - "type": "address" - } - ], - "name": "RewardTrackerUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newMinimum", - "type": "uint256" - } - ], - "name": "SensibleMinimumWethToHarvest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "updater", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newYieldStrategy", - "type": "address" - } - ], - "name": "YieldStrategyUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "GLP", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SGLP", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "WETH", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "convertToAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "convertToShares", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "glpRewardRouterV2", - "outputs": [ - { - "internalType": "contract IRewardRouterV2", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "harvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "harvestTransferAndCompound", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "lastHarvestTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_tokenAddress", - "type": "address" - } - ], - "name": "recover", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_to", - "type": "address" - } - ], - "name": "recoverETH", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rewardTracker", - "outputs": [ - { - "internalType": "contract IRewardTracker", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "sensibleMinimumWethToHarvest", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAddress", - "type": "address" - } - ], - "name": "setGlpRewardRouter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newAddress", - "type": "address" - } - ], - "name": "setGlpRewardTracker", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_newValue", - "type": "uint256" - } - ], - "name": "setSensibleMinimumWethToHarvest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newStrategy", - "type": "address" - } - ], - "name": "setYieldStrategy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalHarvested", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "transferHarvestedFundsToStrategy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "yieldStrategy", - "outputs": [ - { - "internalType": "contract IStrategy", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/unstoppable/contracts/index.ts b/src/apps/unstoppable/contracts/index.ts deleted file mode 100644 index 5dcfebdf6..000000000 --- a/src/apps/unstoppable/contracts/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * from './viem.contract-factory'; diff --git a/src/apps/unstoppable/contracts/viem.contract-factory.ts b/src/apps/unstoppable/contracts/viem.contract-factory.ts deleted file mode 100644 index e320fbc50..000000000 --- a/src/apps/unstoppable/contracts/viem.contract-factory.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { Network } from '~types/network.interface'; - -import { UnstoppableGlpVault__factory } from './viem'; - -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class UnstoppableViemContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - - unstoppableGlpVault({ address, network }: ContractOpts) { - return UnstoppableGlpVault__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } -} diff --git a/src/apps/unstoppable/contracts/viem/UnstoppableGlpVault.ts b/src/apps/unstoppable/contracts/viem/UnstoppableGlpVault.ts deleted file mode 100644 index 8d588e29b..000000000 --- a/src/apps/unstoppable/contracts/viem/UnstoppableGlpVault.ts +++ /dev/null @@ -1,1054 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const unstoppableGlpVaultAbi = [ - { - inputs: [ - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - { - internalType: 'address', - name: '_yieldStrategy', - type: 'address', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'updater', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newRewardRouter', - type: 'address', - }, - ], - name: 'GlpRewardRouterUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Harvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'updater', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newRewardTracker', - type: 'address', - }, - ], - name: 'RewardTrackerUpdated', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'updater', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'newMinimum', - type: 'uint256', - }, - ], - name: 'SensibleMinimumWethToHarvest', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'updater', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'newYieldStrategy', - type: 'address', - }, - ], - name: 'YieldStrategyUpdated', - type: 'event', - }, - { - inputs: [], - name: 'GLP', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'SGLP', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'WETH', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'glpRewardRouterV2', - outputs: [ - { - internalType: 'contract IRewardRouterV2', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'harvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'harvestTransferAndCompound', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'lastHarvestTimestamp', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_tokenAddress', - type: 'address', - }, - ], - name: 'recover', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address payable', - name: '_to', - type: 'address', - }, - ], - name: 'recoverETH', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'rewardTracker', - outputs: [ - { - internalType: 'contract IRewardTracker', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'sensibleMinimumWethToHarvest', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newAddress', - type: 'address', - }, - ], - name: 'setGlpRewardRouter', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newAddress', - type: 'address', - }, - ], - name: 'setGlpRewardTracker', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_newValue', - type: 'uint256', - }, - ], - name: 'setSensibleMinimumWethToHarvest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_newStrategy', - type: 'address', - }, - ], - name: 'setYieldStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalHarvested', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'transferHarvestedFundsToStrategy', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'yieldStrategy', - outputs: [ - { - internalType: 'contract IStrategy', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type UnstoppableGlpVault = typeof unstoppableGlpVaultAbi; -export type UnstoppableGlpVaultContract = GetContractReturnType; - -export class UnstoppableGlpVault__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: unstoppableGlpVaultAbi, publicClient: client }); - } -} diff --git a/src/apps/unstoppable/contracts/viem/index.ts b/src/apps/unstoppable/contracts/viem/index.ts deleted file mode 100644 index b8ffa4a53..000000000 --- a/src/apps/unstoppable/contracts/viem/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { UnstoppableGlpVault } from './UnstoppableGlpVault'; - -export { UnstoppableGlpVault__factory } from './UnstoppableGlpVault'; diff --git a/src/apps/unstoppable/unstoppable.module.ts b/src/apps/unstoppable/unstoppable.module.ts deleted file mode 100644 index d3d6c7fc7..000000000 --- a/src/apps/unstoppable/unstoppable.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { ArbitrumUnstoppableGlpCompounderTokenFetcher } from './arbitrum/unstoppable.glp-compounder.token-fetcher'; -import { UnstoppableViemContractFactory } from './contracts'; - -@Module({ - providers: [ArbitrumUnstoppableGlpCompounderTokenFetcher, UnstoppableViemContractFactory], -}) -export class UnstoppableAppModule extends AbstractApp() {}

@wNEwLG{LaeMKRu2nIGAlP*Od|ZH`8w;m8OT<} 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%0AR7zT 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 diff --git a/src/apps/sideshift/contracts/abis/svxai-vault.json b/src/apps/sideshift/contracts/abis/svxai-vault.json deleted file mode 100644 index dc926f855..000000000 --- a/src/apps/sideshift/contracts/abis/svxai-vault.json +++ /dev/null @@ -1,975 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "contract ERC20", - "name": "_UNDERLYING", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "_merkleRoot", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "ContractInitialization", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "MerkleClaim", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "user", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "MerkleSharesMinted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "inputs": [], - "name": "DOMAIN_SEPARATOR", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UNDERLYING", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "asset", - "outputs": [ - { - "internalType": "contract ERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - } - ], - "name": "checkMerkle", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - } - ], - "name": "claimShares", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "contractInitialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "convertToAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "convertToShares", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "deposit", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "emergencyMerkleTransfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "maxDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "maxMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "maxWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "merkleClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "merkleMinted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "merkleRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "merkleUnclaimed", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewDeposit", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewMint", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "name": "previewRedeem", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "name": "previewWithdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "redeem", - "outputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAssets", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_shares", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "vaultInitialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "assets", - "type": "uint256" - }, - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "withdraw", - "outputs": [ - { - "internalType": "uint256", - "name": "shares", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/sideshift/contracts/index.ts b/src/apps/sideshift/contracts/index.ts deleted file mode 100644 index 5dcfebdf6..000000000 --- a/src/apps/sideshift/contracts/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -export * from './viem.contract-factory'; diff --git a/src/apps/sideshift/contracts/viem.contract-factory.ts b/src/apps/sideshift/contracts/viem.contract-factory.ts deleted file mode 100644 index 13183f95c..000000000 --- a/src/apps/sideshift/contracts/viem.contract-factory.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Injectable, Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { Network } from '~types/network.interface'; - -import { SvxaiVault__factory } from './viem'; - -type ContractOpts = { address: string; network: Network }; - -@Injectable() -export class SideshiftViemContractFactory { - constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - - svxaiVault({ address, network }: ContractOpts) { - return SvxaiVault__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } -} diff --git a/src/apps/sideshift/contracts/viem/SvxaiVault.ts b/src/apps/sideshift/contracts/viem/SvxaiVault.ts deleted file mode 100644 index 7ca1f81cd..000000000 --- a/src/apps/sideshift/contracts/viem/SvxaiVault.ts +++ /dev/null @@ -1,989 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const svxaiVaultAbi = [ - { - inputs: [ - { - internalType: 'contract ERC20', - name: '_UNDERLYING', - type: 'address', - }, - { - internalType: 'bytes32', - name: '_merkleRoot', - type: 'bytes32', - }, - ], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - ], - name: 'ContractInitialization', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Deposit', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'MerkleClaim', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'user', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'MerkleSharesMinted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'caller', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'Withdraw', - type: 'event', - }, - { - inputs: [], - name: 'DOMAIN_SEPARATOR', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'UNDERLYING', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'asset', - outputs: [ - { - internalType: 'contract ERC20', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_sender', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'bytes32[]', - name: 'merkleProof', - type: 'bytes32[]', - }, - ], - name: 'checkMerkle', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_sender', - type: 'address', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - { - internalType: 'bytes32[]', - name: 'merkleProof', - type: 'bytes32[]', - }, - ], - name: 'claimShares', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'contractInitialized', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'convertToAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'convertToShares', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'deposit', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'emergencyMerkleTransfer', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_address', - type: 'address', - }, - ], - name: 'maxDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_address', - type: 'address', - }, - ], - name: 'maxMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'maxWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'merkleClaimed', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'merkleMinted', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'merkleRoot', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'merkleUnclaimed', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - ], - name: 'mint', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'nonces', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'deadline', - type: 'uint256', - }, - { - internalType: 'uint8', - name: 'v', - type: 'uint8', - }, - { - internalType: 'bytes32', - name: 'r', - type: 'bytes32', - }, - { - internalType: 'bytes32', - name: 's', - type: 'bytes32', - }, - ], - name: 'permit', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewDeposit', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewMint', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - name: 'previewRedeem', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - name: 'previewWithdraw', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'redeem', - outputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalAssets', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'from', - type: 'address', - }, - { - internalType: 'address', - name: 'to', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'vaultInitialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'assets', - type: 'uint256', - }, - { - internalType: 'address', - name: 'receiver', - type: 'address', - }, - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - ], - name: 'withdraw', - outputs: [ - { - internalType: 'uint256', - name: 'shares', - type: 'uint256', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type SvxaiVault = typeof svxaiVaultAbi; -export type SvxaiVaultContract = GetContractReturnType; - -export class SvxaiVault__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: svxaiVaultAbi, publicClient: client }); - } -} diff --git a/src/apps/sideshift/contracts/viem/index.ts b/src/apps/sideshift/contracts/viem/index.ts deleted file mode 100644 index 5cd915574..000000000 --- a/src/apps/sideshift/contracts/viem/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { SvxaiVault } from './SvxaiVault'; - -export { SvxaiVault__factory } from './SvxaiVault'; diff --git a/src/apps/sideshift/ethereum/sideshift.svxai.token-fetcher.ts b/src/apps/sideshift/ethereum/sideshift.svxai.token-fetcher.ts deleted file mode 100644 index 404ec719a..000000000 --- a/src/apps/sideshift/ethereum/sideshift.svxai.token-fetcher.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; -import { Network } from '~types/network.interface'; - -import { SideshiftViemContractFactory } from '../contracts'; -import { SvxaiVault } from '../contracts/viem'; - -const network = Network.ETHEREUM_MAINNET; - -@PositionTemplate() -export class EthereumSideshiftSvxaiTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'xvXAI'; - - constructor( - @Inject(APP_TOOLKIT) readonly appToolkit: IAppToolkit, - @Inject(SideshiftViemContractFactory) private readonly contractFactory: SideshiftViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.svxaiVault({ address, network }); - } - - async getAddresses() { - return ['0x3808708e761b988d23ae011ed0e12674fb66bd62']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.asset(), network: this.network }]; - } - - async getPricePerShare({ contract, appToken }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalAssets(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - const pricePerShare = reserve / appToken.supply; - return [pricePerShare]; - } -} diff --git a/src/apps/sideshift/sideshift.module.ts b/src/apps/sideshift/sideshift.module.ts deleted file mode 100644 index adcbeba0c..000000000 --- a/src/apps/sideshift/sideshift.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { SideshiftViemContractFactory } from './contracts'; -import { EthereumSideshiftSvxaiTokenFetcher } from './ethereum/sideshift.svxai.token-fetcher'; - -@Module({ - providers: [EthereumSideshiftSvxaiTokenFetcher, SideshiftViemContractFactory], -}) -export class SideshiftAppModule extends AbstractApp() {} diff --git a/src/apps/stake-dao/contracts/abis/stake-dao-passive-vault.json b/src/apps/stake-dao/contracts/abis/stake-dao-passive-vault.json deleted file mode 100644 index 7ce4f3c41..000000000 --- a/src/apps/stake-dao/contracts/abis/stake-dao-passive-vault.json +++ /dev/null @@ -1,305 +0,0 @@ -[ - { - "inputs": [ - { "internalType": "address", "name": "_token", "type": "address" }, - { "internalType": "address", "name": "_controller", "type": "address" } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": true, - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "available", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "balance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "controller", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "uint256", "name": "_amount", "type": "uint256" }], - "name": "deposit", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "depositAll", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "earn", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "getPricePerFullShare", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "governance", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "reserve", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "harvest", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "max", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "min", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "_controller", "type": "address" }], - "name": "setController", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "address", "name": "_governance", "type": "address" }], - "name": "setGovernance", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "uint256", "name": "_min", "type": "uint256" }], - "name": "setMin", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "token", - "outputs": [{ "internalType": "contract IERC20", "name": "", "type": "address" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [{ "internalType": "uint256", "name": "_shares", "type": "uint256" }], - "name": "withdraw", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "withdrawAll", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } -] diff --git a/src/apps/stake-dao/contracts/viem.contract-factory.ts b/src/apps/stake-dao/contracts/viem.contract-factory.ts index 9e047288a..df660f51c 100644 --- a/src/apps/stake-dao/contracts/viem.contract-factory.ts +++ b/src/apps/stake-dao/contracts/viem.contract-factory.ts @@ -8,7 +8,6 @@ import { StakeDaoFarm__factory, StakeDaoGauge__factory, StakeDaoMultiGauge__factory, - StakeDaoPassiveVault__factory, StakeDaoVault__factory, StakeDaoVotingEscrow__factory, } from './viem'; @@ -31,9 +30,6 @@ export class StakeDaoViemContractFactory { stakeDaoMultiGauge({ address, network }: ContractOpts) { return StakeDaoMultiGauge__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } - stakeDaoPassiveVault({ address, network }: ContractOpts) { - return StakeDaoPassiveVault__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } stakeDaoVault({ address, network }: ContractOpts) { return StakeDaoVault__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/stake-dao/contracts/viem/StakeDaoPassiveVault.ts b/src/apps/stake-dao/contracts/viem/StakeDaoPassiveVault.ts deleted file mode 100644 index 27cf0bf93..000000000 --- a/src/apps/stake-dao/contracts/viem/StakeDaoPassiveVault.ts +++ /dev/null @@ -1,567 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const stakeDaoPassiveVaultAbi = [ - { - inputs: [ - { - internalType: 'address', - name: '_token', - type: 'address', - }, - { - internalType: 'address', - name: '_controller', - type: 'address', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'available', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'balance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'controller', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: '_amount', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'depositAll', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'earn', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'getPricePerFullShare', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'governance', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'reserve', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'harvest', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'max', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'min', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: '_controller', - type: 'address', - }, - ], - name: 'setController', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: '_governance', - type: 'address', - }, - ], - name: 'setGovernance', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: '_min', - type: 'uint256', - }, - ], - name: 'setMin', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'token', - outputs: [ - { - internalType: 'contract IERC20', - name: '', - type: 'address', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - payable: false, - stateMutability: 'view', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [ - { - internalType: 'uint256', - name: '_shares', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, - { - constant: false, - inputs: [], - name: 'withdrawAll', - outputs: [], - payable: false, - stateMutability: 'nonpayable', - type: 'function', - }, -] as const; - -export type StakeDaoPassiveVault = typeof stakeDaoPassiveVaultAbi; -export type StakeDaoPassiveVaultContract = GetContractReturnType; - -export class StakeDaoPassiveVault__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: stakeDaoPassiveVaultAbi, publicClient: client }); - } -} diff --git a/src/apps/stake-dao/contracts/viem/index.ts b/src/apps/stake-dao/contracts/viem/index.ts index 8d2716eac..968c27be3 100644 --- a/src/apps/stake-dao/contracts/viem/index.ts +++ b/src/apps/stake-dao/contracts/viem/index.ts @@ -6,7 +6,6 @@ export type { StakeDaoCurvePool } from './StakeDaoCurvePool'; export type { StakeDaoFarm } from './StakeDaoFarm'; export type { StakeDaoGauge } from './StakeDaoGauge'; export type { StakeDaoMultiGauge } from './StakeDaoMultiGauge'; -export type { StakeDaoPassiveVault } from './StakeDaoPassiveVault'; export type { StakeDaoVault } from './StakeDaoVault'; export type { StakeDaoVotingEscrow } from './StakeDaoVotingEscrow'; @@ -14,6 +13,5 @@ export { StakeDaoCurvePool__factory } from './StakeDaoCurvePool'; export { StakeDaoFarm__factory } from './StakeDaoFarm'; export { StakeDaoGauge__factory } from './StakeDaoGauge'; export { StakeDaoMultiGauge__factory } from './StakeDaoMultiGauge'; -export { StakeDaoPassiveVault__factory } from './StakeDaoPassiveVault'; export { StakeDaoVault__factory } from './StakeDaoVault'; export { StakeDaoVotingEscrow__factory } from './StakeDaoVotingEscrow'; diff --git a/src/apps/stake-dao/ethereum/stake-dao.passive-vault.token-fetcher.ts b/src/apps/stake-dao/ethereum/stake-dao.passive-vault.token-fetcher.ts deleted file mode 100644 index 90d81ecbb..000000000 --- a/src/apps/stake-dao/ethereum/stake-dao.passive-vault.token-fetcher.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetPricePerShareParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { StakeDaoViemContractFactory } from '../contracts'; -import { StakeDaoPassiveVault } from '../contracts/viem/StakeDaoPassiveVault'; - -@PositionTemplate() -export class EthereumStakeDaoPassiveVaultTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Vaults'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(StakeDaoViemContractFactory) protected readonly contractFactory: StakeDaoViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.stakeDaoPassiveVault({ address, network: this.network }); - } - - getAddresses() { - return [ - '0x5af15da84a4a6edf2d9fa6720de921e1026e37b7', // Passive FRAX - '0xcd6997334867728ba14d7922f72c893fcee70e84', // Passive sEUR - '0xbc10c4f7b9fe0b305e8639b04c536633a3db7065', // Passive stETH - '0xa2761b0539374eb7af2155f76eb09864af075250', // Passive sETH - '0xb17640796e4c27a39af51887aff3f8dc0daf9567', // Passive 3CRV - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.token(), network: this.network }]; - } - - async getPricePerShare({ appToken, contract }: GetPricePerShareParams) { - const pricePerShareRaw = await contract.read.getPricePerFullShare(); - - return [Number(pricePerShareRaw) / 10 ** appToken.decimals]; - } -} diff --git a/src/apps/stake-dao/stake-dao.module.ts b/src/apps/stake-dao/stake-dao.module.ts index 5ad9b810f..92d677a1c 100644 --- a/src/apps/stake-dao/stake-dao.module.ts +++ b/src/apps/stake-dao/stake-dao.module.ts @@ -7,7 +7,6 @@ import { EthereumStakeDaoFarmContractPositionFetcher } from './ethereum/stake-da import { EthereumStakeDaoGaugeContractPositionFetcher } from './ethereum/stake-dao.gauge.contract-position-fetcher'; import { EthereumStakeDaoLockerTokenFetcher } from './ethereum/stake-dao.locker.token-fetcher'; import { EthereumStakeDaoMultiGaugeContractPositionFetcher } from './ethereum/stake-dao.multi-gauge.contract-position-fetcher'; -import { EthereumStakeDaoPassiveVaultTokenFetcher } from './ethereum/stake-dao.passive-vault.token-fetcher'; import { EthereumStakeDaoVaultTokenFetcher } from './ethereum/stake-dao.vault.token-fetcher'; import { EthereumStakeDaoEscrowedQiContractPositionFetcher } from './ethereum/stake-dao.voting-escrow.contract-position-fetcher'; @@ -19,7 +18,6 @@ import { EthereumStakeDaoEscrowedQiContractPositionFetcher } from './ethereum/st EthereumStakeDaoFarmContractPositionFetcher, EthereumStakeDaoEscrowedQiContractPositionFetcher, EthereumStakeDaoVaultTokenFetcher, - EthereumStakeDaoPassiveVaultTokenFetcher, EthereumStakeDaoMultiGaugeContractPositionFetcher, ], }) diff --git a/src/apps/swell/assets/logo.png b/src/apps/swell/assets/logo.png deleted file mode 100644 index e596614415957389db6cdffcffe2ff00486a373d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 - -export class Sweth__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: swethAbi, publicClient: client }); - } -} diff --git a/src/apps/swell/contracts/viem/index.ts b/src/apps/swell/contracts/viem/index.ts deleted file mode 100644 index 1316a3caf..000000000 --- a/src/apps/swell/contracts/viem/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ - -export type { Sweth } from './Sweth'; - -export { Sweth__factory } from './Sweth'; diff --git a/src/apps/swell/ethereum/swell.sweth.token-fetcher.ts b/src/apps/swell/ethereum/swell.sweth.token-fetcher.ts deleted file mode 100644 index 1bd0a2ab3..000000000 --- a/src/apps/swell/ethereum/swell.sweth.token-fetcher.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetAddressesParams, - DefaultAppTokenDefinition, - GetUnderlyingTokensParams, - UnderlyingTokenDefinition, - GetPricePerShareParams, - DefaultAppTokenDataProps, -} from '~position/template/app-token.template.types'; - -import { SwellViemContractFactory } from '../contracts'; -import { Sweth } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumSwellSwethTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'swETH'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(SwellViemContractFactory) protected readonly contractFactory: SwellViemContractFactory, - ) { - super(appToolkit); - } - - getContract(_address: string) { - return this.contractFactory.sweth({ network: this.network, address: _address }); - } - - async getAddresses(_params: GetAddressesParams): Promise { - return ['0xf951e335afb289353dc249e82926178eac7ded78']; - } - - async getUnderlyingTokenDefinitions( - _params: GetUnderlyingTokensParams, - ): Promise { - return [{ address: '0x0000000000000000000000000000000000000000', network: this.network }]; - } - - async getPricePerShare({ - contract, - appToken, - }: GetPricePerShareParams): Promise { - const pricePerShareRaw = await contract.read.getRate(); - return [Number(pricePerShareRaw) / 10 ** appToken.decimals]; - } -} diff --git a/src/apps/swell/swell.module.ts b/src/apps/swell/swell.module.ts deleted file mode 100644 index 9359aa8e5..000000000 --- a/src/apps/swell/swell.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Module } from '@nestjs/common'; - -import { AbstractApp } from '~app/app.dynamic-module'; - -import { SwellViemContractFactory } from './contracts'; -import { EthereumSwellSwethTokenFetcher } from './ethereum/swell.sweth.token-fetcher'; - -@Module({ - providers: [EthereumSwellSwethTokenFetcher, SwellViemContractFactory], -}) -export class SwellAppModule extends AbstractApp() {} diff --git a/src/apps/tokemak/contracts/abis/tokemak-acc-toke.json b/src/apps/tokemak/contracts/abis/tokemak-acc-toke.json deleted file mode 100644 index b44f69077..000000000 --- a/src/apps/tokemak/contracts/abis/tokemak-acc-toke.json +++ /dev/null @@ -1,420 +0,0 @@ -[ - { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "fxStateSender", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "destinationOnL2", "type": "address" } - ], - "name": "DestinationsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "bool", "name": "eventSendSet", "type": "bool" }], - "name": "EventSendSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" }], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "maxCap", "type": "uint256" }], - "name": "MaxCapSetEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "maxLockCycles", "type": "uint256" }], - "name": "MaxLockCyclesSetEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "uint256", "name": "minLockCycles", "type": "uint256" }], - "name": "MinLockCyclesSetEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, - { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "tokeSource", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "numCycles", "type": "uint256" }, - { "indexed": true, "internalType": "uint256", "name": "currentCycle", "type": "uint256" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "TokeLockedEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "WithdrawalEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": true, "internalType": "address", "name": "account", "type": "address" }], - "name": "WithdrawalRequestCancelledEvent", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "WithdrawalRequestedEvent", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "LOCK_FOR_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "_eventSend", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "balance", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "cancelWithdrawalRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "destinations", - "outputs": [ - { "internalType": "contract IFxStateSender", "name": "fxStateSender", "type": "address" }, - { "internalType": "address", "name": "destinationOnL2", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getCurrentCycleID", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "getDepositInfo", - "outputs": [ - { "internalType": "uint256", "name": "lockCycle", "type": "uint256" }, - { "internalType": "uint256", "name": "lockDuration", "type": "uint256" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes32", "name": "role", "type": "bytes32" }], - "name": "getRoleAdmin", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "getWithdrawalInfo", - "outputs": [ - { "internalType": "uint256", "name": "minCycle", "type": "uint256" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_manager", "type": "address" }, - { "internalType": "uint256", "name": "_minLockCycles", "type": "uint256" }, - { "internalType": "uint256", "name": "_maxLockCycles", "type": "uint256" }, - { "internalType": "contract IERC20Upgradeable", "name": "_toke", "type": "address" }, - { "internalType": "uint256", "name": "_maxCap", "type": "uint256" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "tokeAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "numOfCycles", "type": "uint256" } - ], - "name": "lockToke", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "tokeAmount", "type": "uint256" }, - { "internalType": "uint256", "name": "numOfCycles", "type": "uint256" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "lockTokeFor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [{ "internalType": "contract IManager", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxCap", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maxLockCycles", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "minLockCycles", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "requestWithdrawal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "requestedWithdrawals", - "outputs": [ - { "internalType": "uint256", "name": "minCycle", "type": "uint256" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_fxStateSender", "type": "address" }, - { "internalType": "address", "name": "_destinationOnL2", "type": "address" } - ], - "name": "setDestinations", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bool", "name": "_eventSendSet", "type": "bool" }], - "name": "setEventSend", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_maxCap", "type": "uint256" }], - "name": "setMaxCap", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_maxLockCycles", "type": "uint256" }], - "name": "setMaxLockCycles", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "_minLockCycles", "type": "uint256" }], - "name": "setMinLockCycles", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" }], - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "toke", - "outputs": [{ "internalType": "contract IERC20Upgradeable", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withheldLiquidity", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } -] diff --git a/src/apps/tokemak/contracts/abis/tokemak-reactor.json b/src/apps/tokemak/contracts/abis/tokemak-reactor.json deleted file mode 100644 index 6e7e3976c..000000000 --- a/src/apps/tokemak/contracts/abis/tokemak-reactor.json +++ /dev/null @@ -1,313 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "destinationOnL1", "type": "address" }, - { "indexed": false, "internalType": "address", "name": "destinationOnL2", "type": "address" } - ], - "name": "DestinationsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "bool", "name": "eventSendSet", "type": "bool" }], - "name": "EventSendSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, - { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [{ "indexed": false, "internalType": "address", "name": "account", "type": "address" }], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { "indexed": false, "internalType": "address", "name": "requestor", "type": "address" }, - { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "WithdrawalRequested", - "type": "event" - }, - { - "inputs": [], - "name": "_eventSend", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "owner", "type": "address" }, - { "internalType": "address", "name": "spender", "type": "address" } - ], - "name": "allowance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "approve", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "approveManager", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], - "name": "balanceOf", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } - ], - "name": "decreaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "account", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "depositFor", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "destinations", - "outputs": [ - { "internalType": "contract IFxStateSender", "name": "fxStateSender", "type": "address" }, - { "internalType": "address", "name": "destinationOnL2", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "spender", "type": "address" }, - { "internalType": "uint256", "name": "addedValue", "type": "uint256" } - ], - "name": "increaseAllowance", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "contract IWETH", "name": "_weth", "type": "address" }, - { "internalType": "contract IManager", "name": "_manager", "type": "address" }, - { "internalType": "string", "name": "_name", "type": "string" }, - { "internalType": "string", "name": "_symbol", "type": "string" } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "manager", - "outputs": [{ "internalType": "contract IManager", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "paused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }], - "name": "requestWithdrawal", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "", "type": "address" }], - "name": "requestedWithdrawals", - "outputs": [ - { "internalType": "uint256", "name": "minCycle", "type": "uint256" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_fxStateSender", "type": "address" }, - { "internalType": "address", "name": "_destinationOnL2", "type": "address" } - ], - "name": "setDestinations", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "bool", "name": "_eventSendSet", "type": "bool" }], - "name": "setEventSend", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [{ "internalType": "string", "name": "", "type": "string" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transfer", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sender", "type": "address" }, - { "internalType": "address", "name": "recipient", "type": "address" }, - { "internalType": "uint256", "name": "amount", "type": "uint256" } - ], - "name": "transferFrom", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [{ "internalType": "address", "name": "newOwner", "type": "address" }], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "underlyer", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "weth", - "outputs": [{ "internalType": "contract IWETH", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "requestedAmount", "type": "uint256" }, - { "internalType": "bool", "name": "asEth", "type": "bool" } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "withheldLiquidity", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] diff --git a/src/apps/tokemak/contracts/viem.contract-factory.ts b/src/apps/tokemak/contracts/viem.contract-factory.ts index 77b0580b5..9290ccfec 100644 --- a/src/apps/tokemak/contracts/viem.contract-factory.ts +++ b/src/apps/tokemak/contracts/viem.contract-factory.ts @@ -3,13 +3,7 @@ import { Injectable, Inject } from '@nestjs/common'; import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; import { Network } from '~types/network.interface'; -import { - TokemakAccToke__factory, - TokemakReactor__factory, - TokemakRewards__factory, - TokemakRewardsHash__factory, - TokemakTokeStaking__factory, -} from './viem'; +import { TokemakRewards__factory, TokemakRewardsHash__factory, TokemakTokeStaking__factory } from './viem'; type ContractOpts = { address: string; network: Network }; @@ -17,12 +11,6 @@ type ContractOpts = { address: string; network: Network }; export class TokemakViemContractFactory { constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) {} - tokemakAccToke({ address, network }: ContractOpts) { - return TokemakAccToke__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } - tokemakReactor({ address, network }: ContractOpts) { - return TokemakReactor__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); - } tokemakRewards({ address, network }: ContractOpts) { return TokemakRewards__factory.connect(address, this.appToolkit.getViemNetworkProvider(network)); } diff --git a/src/apps/tokemak/contracts/viem/TokemakAccToke.ts b/src/apps/tokemak/contracts/viem/TokemakAccToke.ts deleted file mode 100644 index 56a43ecb9..000000000 --- a/src/apps/tokemak/contracts/viem/TokemakAccToke.ts +++ /dev/null @@ -1,896 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const tokemakAccTokeAbi = [ - { - inputs: [], - stateMutability: 'nonpayable', - type: 'constructor', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'fxStateSender', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'destinationOnL2', - type: 'address', - }, - ], - name: 'DestinationsSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'bool', - name: 'eventSendSet', - type: 'bool', - }, - ], - name: 'EventSendSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint8', - name: 'version', - type: 'uint8', - }, - ], - name: 'Initialized', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'maxCap', - type: 'uint256', - }, - ], - name: 'MaxCapSetEvent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'maxLockCycles', - type: 'uint256', - }, - ], - name: 'MaxLockCyclesSetEvent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'uint256', - name: 'minLockCycles', - type: 'uint256', - }, - ], - name: 'MinLockCyclesSetEvent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'previousAdminRole', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'bytes32', - name: 'newAdminRole', - type: 'bytes32', - }, - ], - name: 'RoleAdminChanged', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleGranted', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'sender', - type: 'address', - }, - ], - name: 'RoleRevoked', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'tokeSource', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'numCycles', - type: 'uint256', - }, - { - indexed: true, - internalType: 'uint256', - name: 'currentCycle', - type: 'uint256', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'TokeLockedEvent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'WithdrawalEvent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'WithdrawalRequestCancelledEvent', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'account', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'WithdrawalRequestedEvent', - type: 'event', - }, - { - inputs: [], - name: 'DEFAULT_ADMIN_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'LOCK_FOR_ROLE', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: '_eventSend', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: 'balance', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'cancelWithdrawalRequest', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'destinations', - outputs: [ - { - internalType: 'contract IFxStateSender', - name: 'fxStateSender', - type: 'address', - }, - { - internalType: 'address', - name: 'destinationOnL2', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'getCurrentCycleID', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'getDepositInfo', - outputs: [ - { - internalType: 'uint256', - name: 'lockCycle', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'lockDuration', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - ], - name: 'getRoleAdmin', - outputs: [ - { - internalType: 'bytes32', - name: '', - type: 'bytes32', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'getWithdrawalInfo', - outputs: [ - { - internalType: 'uint256', - name: 'minCycle', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'grantRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'hasRole', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_manager', - type: 'address', - }, - { - internalType: 'uint256', - name: '_minLockCycles', - type: 'uint256', - }, - { - internalType: 'uint256', - name: '_maxLockCycles', - type: 'uint256', - }, - { - internalType: 'contract IERC20Upgradeable', - name: '_toke', - type: 'address', - }, - { - internalType: 'uint256', - name: '_maxCap', - type: 'uint256', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'tokeAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'numOfCycles', - type: 'uint256', - }, - ], - name: 'lockToke', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'tokeAmount', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'numOfCycles', - type: 'uint256', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'lockTokeFor', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'manager', - outputs: [ - { - internalType: 'contract IManager', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'maxCap', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'maxLockCycles', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'minLockCycles', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'renounceRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'requestWithdrawal', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'requestedWithdrawals', - outputs: [ - { - internalType: 'uint256', - name: 'minCycle', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes32', - name: 'role', - type: 'bytes32', - }, - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'revokeRole', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_fxStateSender', - type: 'address', - }, - { - internalType: 'address', - name: '_destinationOnL2', - type: 'address', - }, - ], - name: 'setDestinations', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bool', - name: '_eventSendSet', - type: 'bool', - }, - ], - name: 'setEventSend', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_maxCap', - type: 'uint256', - }, - ], - name: 'setMaxCap', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_maxLockCycles', - type: 'uint256', - }, - ], - name: 'setMaxLockCycles', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: '_minLockCycles', - type: 'uint256', - }, - ], - name: 'setMinLockCycles', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bytes4', - name: 'interfaceId', - type: 'bytes4', - }, - ], - name: 'supportsInterface', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'pure', - type: 'function', - }, - { - inputs: [], - name: 'toke', - outputs: [ - { - internalType: 'contract IERC20Upgradeable', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'withdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withheldLiquidity', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, -] as const; - -export type TokemakAccToke = typeof tokemakAccTokeAbi; -export type TokemakAccTokeContract = GetContractReturnType; - -export class TokemakAccToke__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: tokemakAccTokeAbi, publicClient: client }); - } -} diff --git a/src/apps/tokemak/contracts/viem/TokemakReactor.ts b/src/apps/tokemak/contracts/viem/TokemakReactor.ts deleted file mode 100644 index 28009f94b..000000000 --- a/src/apps/tokemak/contracts/viem/TokemakReactor.ts +++ /dev/null @@ -1,687 +0,0 @@ -/* Autogenerated file. Do not edit manually. */ -/* tslint:disable */ -/* eslint-disable */ -import { getContract, GetContractReturnType, PublicClient } from 'viem'; - -export const tokemakReactorAbi = [ - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Approval', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'destinationOnL1', - type: 'address', - }, - { - indexed: false, - internalType: 'address', - name: 'destinationOnL2', - type: 'address', - }, - ], - name: 'DestinationsSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'bool', - name: 'eventSendSet', - type: 'bool', - }, - ], - name: 'EventSendSet', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'previousOwner', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'OwnershipTransferred', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Paused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: true, - internalType: 'address', - name: 'from', - type: 'address', - }, - { - indexed: true, - internalType: 'address', - name: 'to', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'value', - type: 'uint256', - }, - ], - name: 'Transfer', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'Unpaused', - type: 'event', - }, - { - anonymous: false, - inputs: [ - { - indexed: false, - internalType: 'address', - name: 'requestor', - type: 'address', - }, - { - indexed: false, - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'WithdrawalRequested', - type: 'event', - }, - { - inputs: [], - name: '_eventSend', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'owner', - type: 'address', - }, - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - ], - name: 'allowance', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approve', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'approveManager', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - ], - name: 'balanceOf', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'decimals', - outputs: [ - { - internalType: 'uint8', - name: '', - type: 'uint8', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'subtractedValue', - type: 'uint256', - }, - ], - name: 'decreaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'deposit', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'account', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'depositFor', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'destinations', - outputs: [ - { - internalType: 'contract IFxStateSender', - name: 'fxStateSender', - type: 'address', - }, - { - internalType: 'address', - name: 'destinationOnL2', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'spender', - type: 'address', - }, - { - internalType: 'uint256', - name: 'addedValue', - type: 'uint256', - }, - ], - name: 'increaseAllowance', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'contract IWETH', - name: '_weth', - type: 'address', - }, - { - internalType: 'contract IManager', - name: '_manager', - type: 'address', - }, - { - internalType: 'string', - name: '_name', - type: 'string', - }, - { - internalType: 'string', - name: '_symbol', - type: 'string', - }, - ], - name: 'initialize', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'manager', - outputs: [ - { - internalType: 'contract IManager', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'name', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'owner', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'pause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'paused', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'renounceOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'requestWithdrawal', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - name: 'requestedWithdrawals', - outputs: [ - { - internalType: 'uint256', - name: 'minCycle', - type: 'uint256', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: '_fxStateSender', - type: 'address', - }, - { - internalType: 'address', - name: '_destinationOnL2', - type: 'address', - }, - ], - name: 'setDestinations', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'bool', - name: '_eventSendSet', - type: 'bool', - }, - ], - name: 'setEventSend', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'symbol', - outputs: [ - { - internalType: 'string', - name: '', - type: 'string', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'totalSupply', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transfer', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'sender', - type: 'address', - }, - { - internalType: 'address', - name: 'recipient', - type: 'address', - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256', - }, - ], - name: 'transferFrom', - outputs: [ - { - internalType: 'bool', - name: '', - type: 'bool', - }, - ], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [ - { - internalType: 'address', - name: 'newOwner', - type: 'address', - }, - ], - name: 'transferOwnership', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'underlyer', - outputs: [ - { - internalType: 'address', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'unpause', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'weth', - outputs: [ - { - internalType: 'contract IWETH', - name: '', - type: 'address', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [ - { - internalType: 'uint256', - name: 'requestedAmount', - type: 'uint256', - }, - { - internalType: 'bool', - name: 'asEth', - type: 'bool', - }, - ], - name: 'withdraw', - outputs: [], - stateMutability: 'nonpayable', - type: 'function', - }, - { - inputs: [], - name: 'withheldLiquidity', - outputs: [ - { - internalType: 'uint256', - name: '', - type: 'uint256', - }, - ], - stateMutability: 'view', - type: 'function', - }, - { - stateMutability: 'payable', - type: 'receive', - }, -] as const; - -export type TokemakReactor = typeof tokemakReactorAbi; -export type TokemakReactorContract = GetContractReturnType; - -export class TokemakReactor__factory { - static connect(address: string, client: PublicClient) { - return getContract({ address, abi: tokemakReactorAbi, publicClient: client }); - } -} diff --git a/src/apps/tokemak/contracts/viem/index.ts b/src/apps/tokemak/contracts/viem/index.ts index 2333d8468..5ec7acef5 100644 --- a/src/apps/tokemak/contracts/viem/index.ts +++ b/src/apps/tokemak/contracts/viem/index.ts @@ -2,14 +2,10 @@ /* tslint:disable */ /* eslint-disable */ -export type { TokemakAccToke } from './TokemakAccToke'; -export type { TokemakReactor } from './TokemakReactor'; export type { TokemakRewardsHash } from './TokemakRewardsHash'; export type { TokemakRewards } from './TokemakRewards'; export type { TokemakTokeStaking } from './TokemakTokeStaking'; -export { TokemakAccToke__factory } from './TokemakAccToke'; -export { TokemakReactor__factory } from './TokemakReactor'; export { TokemakRewardsHash__factory } from './TokemakRewardsHash'; export { TokemakRewards__factory } from './TokemakRewards'; export { TokemakTokeStaking__factory } from './TokemakTokeStaking'; diff --git a/src/apps/tokemak/ethereum/tokemak.acc-toke.token-fetcher.ts b/src/apps/tokemak/ethereum/tokemak.acc-toke.token-fetcher.ts deleted file mode 100644 index 2f978b9d8..000000000 --- a/src/apps/tokemak/ethereum/tokemak.acc-toke.token-fetcher.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { TokemakViemContractFactory } from '../contracts'; -import { TokemakAccToke } from '../contracts/viem/TokemakAccToke'; - -@PositionTemplate() -export class EthereumTokemakAccTokeTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'accTOKE'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(TokemakViemContractFactory) private readonly contractFactory: TokemakViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.tokemakAccToke({ network: this.network, address }); - } - - async getAddresses(): Promise { - return ['0xa374a62ddbd21e3d5716cb04821cb710897c0972']; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.toke(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } -} diff --git a/src/apps/tokemak/ethereum/tokemak.reactor.token-fetcher.ts b/src/apps/tokemak/ethereum/tokemak.reactor.token-fetcher.ts deleted file mode 100644 index c01defa51..000000000 --- a/src/apps/tokemak/ethereum/tokemak.reactor.token-fetcher.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { GetDisplayPropsParams, GetUnderlyingTokensParams } from '~position/template/app-token.template.types'; - -import { TokemakViemContractFactory } from '../contracts'; -import { TokemakReactor } from '../contracts/viem'; - -@PositionTemplate() -export class EthereumTokemakReactorTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'Reactors'; - - constructor( - @Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit, - @Inject(TokemakViemContractFactory) private readonly contractFactory: TokemakViemContractFactory, - ) { - super(appToolkit); - } - - getContract(address: string) { - return this.contractFactory.tokemakReactor({ network: this.network, address }); - } - - async getAddresses(): Promise { - return [ - '0xd3d13a578a53685b4ac36a1bab31912d2b2a2f36', // tWETH - '0x04bda0cf6ad025948af830e75228ed420b0e860d', // tUSDC - '0xa760e26aa76747020171fcf8bda108dfde8eb930', // tTOKE (Legacy) - '0x1b429e75369ea5cd84421c1cc182cee5f3192fd3', // tUNI-TOKE/ETH - '0x8858a739ea1dd3d80fe577ef4e0d03e88561faa3', // tSLP-TOKE/ETH - '0xe7a7d17e2177f66d035d9d50a7f48d8d8e31532d', // tOHM - '0xd3b5d9a561c293fb42b446fe7e237daa9bf9aa84', // tALCX - '0x15a629f0665a3eb97d7ae9a7ce7abf73aeb79415', // tTCR - '0xadf15ec41689fc5b6dca0db7c53c9bfe7981e655', // tFXS - '0xf49764c9c5d644ece6ae2d18ffd9f1e902629777', // tSUSHI - '0x808d3e6b23516967ceae4f17a5f9038383ed5311', // tFOX - '0xdc0b02849bb8e0f126a216a2840275da829709b0', // tAPW - '0x41f6a95bacf9bc43704c4a4902ba5473a8b00263', // tgOHM - '0x0ce34f4c26ba69158bc2eb8bf513221e44fdfb75', // tDAI - '0xeff721eae19885e17f5b80187d6527aad3ffc8de', // tSNX - '0x2fc6e9c1b2c07e18632efe51879415a580ad22e1', // tGAMMA - '0x03dcccd17cc36ee61f9004bcfd7a85f58b2d360d', // tFEI - '0x2e9f9becf5229379825d0d3c1299759943bd4fed', // tMIM - '0x482258099de8de2d0bda84215864800ea7e6b03d', // tWORMUST - '0x9eee9ee0cbd35014e12e1283d9388a40f69797a3', // tLUSD - '0x94671a3cee8c7a12ea72602978d1bb84e920efb2', // tFRAX - '0x7211508d283353e77b9a7ed2f22334c219ad4b4c', // tALUSD - '0x061aee9ab655e73719577ea1df116d7139b2a7e7', // tMYC - ]; - } - - async getUnderlyingTokenDefinitions({ contract }: GetUnderlyingTokensParams) { - return [{ address: await contract.read.underlyer(), network: this.network }]; - } - - async getPricePerShare() { - return [1]; - } - - async getLabel({ appToken }: GetDisplayPropsParams) { - return `${getLabelFromToken(appToken.tokens[0])} Reactor`; - } -} diff --git a/src/apps/tokemak/tokemak.module.ts b/src/apps/tokemak/tokemak.module.ts index 3dbaf7e8b..deec8b9eb 100644 --- a/src/apps/tokemak/tokemak.module.ts +++ b/src/apps/tokemak/tokemak.module.ts @@ -4,19 +4,15 @@ import { AbstractApp } from '~app/app.dynamic-module'; import { TokemakClaimableResolver } from './common/tokemak.claimable.resolver'; import { TokemakViemContractFactory } from './contracts'; -import { EthereumTokemakAccTokeTokenFetcher } from './ethereum/tokemak.acc-toke.token-fetcher'; import { EthereumTokemakClaimableContractPositionFetcher } from './ethereum/tokemak.claimable.contract-position-fetcher'; import { EthereumTokemakFarmContractPositionFetcher } from './ethereum/tokemak.farm.contract-position-fetcher'; -import { EthereumTokemakReactorTokenFetcher } from './ethereum/tokemak.reactor.token-fetcher'; @Module({ providers: [ TokemakViemContractFactory, TokemakClaimableResolver, - EthereumTokemakReactorTokenFetcher, EthereumTokemakFarmContractPositionFetcher, EthereumTokemakClaimableContractPositionFetcher, - EthereumTokemakAccTokeTokenFetcher, ], }) export class TokemakAppModule extends AbstractApp() {} diff --git a/src/apps/unstoppable/arbitrum/unstoppable.glp-compounder.token-fetcher.ts b/src/apps/unstoppable/arbitrum/unstoppable.glp-compounder.token-fetcher.ts deleted file mode 100644 index 5e3eaf0df..000000000 --- a/src/apps/unstoppable/arbitrum/unstoppable.glp-compounder.token-fetcher.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Inject } from '@nestjs/common'; - -import { APP_TOOLKIT, IAppToolkit } from '~app-toolkit/app-toolkit.interface'; -import { PositionTemplate } from '~app-toolkit/decorators/position-template.decorator'; -import { AppTokenTemplatePositionFetcher } from '~position/template/app-token.template.position-fetcher'; -import { - GetAddressesParams, - DefaultAppTokenDefinition, - GetPricePerShareParams, -} from '~position/template/app-token.template.types'; - -import { UnstoppableViemContractFactory } from '../contracts'; -import { UnstoppableGlpVault } from '../contracts/viem'; - -@PositionTemplate() -export class ArbitrumUnstoppableGlpCompounderTokenFetcher extends AppTokenTemplatePositionFetcher { - groupLabel = 'GLP Compounder'; - - constructor( - @Inject(APP_TOOLKIT) readonly appToolkit: IAppToolkit, - @Inject(UnstoppableViemContractFactory) private readonly unstoppableContractFactory: UnstoppableViemContractFactory, - ) { - super(appToolkit); - } - - getContract(_address: string) { - return this.unstoppableContractFactory.unstoppableGlpVault({ address: _address, network: this.network }); - } - - async getAddresses(_params: GetAddressesParams): Promise { - return ['0xff6b69b78df465bf7e55d242fd11456158d1600a']; - } - - async getUnderlyingTokenDefinitions() { - return [{ address: '0x4277f8f2c384827b5273592ff7cebd9f2c1ac258', network: this.network }]; - } - - async getPricePerShare({ appToken, contract }: GetPricePerShareParams) { - const reserveRaw = await contract.read.totalAssets(); - const reserve = Number(reserveRaw) / 10 ** appToken.tokens[0].decimals; - return [reserve / appToken.supply]; - } -} diff --git a/src/apps/unstoppable/assets/logo.png b/src/apps/unstoppable/assets/logo.png deleted file mode 100644 index f8eaf428d979daa7eeb6675edacbbdb1e338f0a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389371 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á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