diff --git a/package.json b/package.json index 51235f6eb..20be57dd7 100644 --- a/package.json +++ b/package.json @@ -125,4 +125,4 @@ "engines": { "node": "16.x" } -} +} \ No newline at end of file diff --git a/src/apps/agave/agave.definition.ts b/src/apps/agave/agave.definition.ts new file mode 100644 index 000000000..2df55d55a --- /dev/null +++ b/src/apps/agave/agave.definition.ts @@ -0,0 +1,57 @@ +import { Register } from '~app-toolkit/decorators'; +import { appDefinition, AppDefinition } from '~app/app.definition'; +import { AppAction, AppTag, GroupType } from '~app/app.interface'; +import { Network } from '~types/network.interface'; + +export const AGAVE_DEFINITION = appDefinition({ + id: 'agave', + name: 'agave', + description: + 'Agave rewards depositors with passive income and lets them use their deposits as collateral to borrow and lend digital assets.', + url: 'https://agave.finance/', + + groups: { + deposit: { + id: 'deposit', + type: GroupType.TOKEN, + label: 'Deposit', + }, + + stableBorrow: { + id: 'stable-borrow', + type: GroupType.TOKEN, + label: 'Borrow', + }, + + variableBorrow: { + id: 'variable-borrow', + type: GroupType.TOKEN, + label: 'Borrow', + }, + + claimable: { + id: 'claimable', + type: GroupType.POSITION, + label: 'Reward', + }, + }, + + tags: [AppTag.LENDING], + keywords: [], + links: {}, + + supportedNetworks: { + [Network.GNOSIS_MAINNET]: [AppAction.VIEW], + }, + + primaryColor: '#fff', +}); + +@Register.AppDefinition(AGAVE_DEFINITION.id) +export class AgaveAppDefinition extends AppDefinition { + constructor() { + super(AGAVE_DEFINITION); + } +} + +export default AGAVE_DEFINITION; diff --git a/src/apps/agave/agave.module.ts b/src/apps/agave/agave.module.ts new file mode 100644 index 000000000..22ea1494c --- /dev/null +++ b/src/apps/agave/agave.module.ts @@ -0,0 +1,28 @@ +import { Register } from '~app-toolkit/decorators'; +import { AbstractApp } from '~app/app.dynamic-module'; +import { AaveV2AppModule } from '~apps/aave-v2'; + +import { AgaveAppDefinition, AGAVE_DEFINITION } from './agave.definition'; +import { AgaveContractFactory } from './contracts'; +import { GnosisAgaveBalanceFetcher } from './gnosis/agave.balance-fetcher'; +import { GnosisAgaveClaimableContractPositionFetcher } from './gnosis/agave.claimable.contract-position-fetcher'; +import { GnosisAgaveDepositTokenFetcher } from './gnosis/agave.deposit.token-fetcher'; +import { GnosisAgaveStableBorrowTokenFetcher } from './gnosis/agave.stable-borrow.token-fetcher'; +import { GnosisAgaveTvlFetcher } from './gnosis/agave.tvl-fetcher'; +import { GnosisAgaveVariableBorrowTokenFetcher } from './gnosis/agave.variable-borrow.token-fetcher'; + +@Register.AppModule({ + appId: AGAVE_DEFINITION.id, + imports: [AaveV2AppModule], + providers: [ + AgaveAppDefinition, + AgaveContractFactory, + GnosisAgaveBalanceFetcher, + GnosisAgaveClaimableContractPositionFetcher, + GnosisAgaveDepositTokenFetcher, + GnosisAgaveStableBorrowTokenFetcher, + GnosisAgaveTvlFetcher, + GnosisAgaveVariableBorrowTokenFetcher, + ], +}) +export class AgaveAppModule extends AbstractApp() {} diff --git a/src/apps/agave/contracts/abis/agave-base-incentives-controller.json b/src/apps/agave/contracts/abis/agave-base-incentives-controller.json new file mode 100644 index 000000000..ba48d9ae7 --- /dev/null +++ b/src/apps/agave/contracts/abis/agave-base-incentives-controller.json @@ -0,0 +1,715 @@ +[ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "type": "address", + "name": "rewardToken", + "internalType": "contract IERC20" + }, + { + "type": "address", + "name": "emissionManager", + "internalType": "address" + } + ] + }, + { + "type": "event", + "name": "AssetConfigUpdated", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address", + "indexed": true + }, + { + "type": "uint8", + "name": "decimals", + "internalType": "uint8", + "indexed": false + }, + { + "type": "uint256", + "name": "emission", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "AssetIndexUpdated", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "index", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "BulkClaimerUpdated", + "inputs": [ + { + "type": "address", + "name": "newBulkClaimer", + "internalType": "address", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ClaimerSet", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "claimer", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DistributionEndUpdated", + "inputs": [ + { + "type": "uint256", + "name": "newDistributionEnd", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardTokenUpdated", + "inputs": [ + { + "type": "address", + "name": "token", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardsAccrued", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardsClaimed", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "to", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "claimer", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardsVaultUpdated", + "inputs": [ + { + "type": "address", + "name": "vault", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UserIndexUpdated", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "asset", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "index", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "BULK_CLAIMER", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "DISTRIBUTION_END", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "EMISSION_MANAGER", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint8", + "name": "", + "internalType": "uint8" + } + ], + "name": "PRECISION", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "REVISION", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "REWARD_TOKEN", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint104", + "name": "emissionPerSecond", + "internalType": "uint104" + }, + { + "type": "uint104", + "name": "index", + "internalType": "uint104" + }, + { + "type": "uint40", + "name": "lastUpdateTimestamp", + "internalType": "uint40" + }, + { + "type": "uint8", + "name": "decimals", + "internalType": "uint8" + }, + { + "type": "bool", + "name": "disabled", + "internalType": "bool" + } + ], + "name": "assets", + "inputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "bulkClaimRewardsOnBehalf", + "inputs": [ + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "address", + "name": "user", + "internalType": "address" + }, + { + "type": "address", + "name": "to", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "claimRewards", + "inputs": [ + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "address", + "name": "to", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "claimRewardsOnBehalf", + "inputs": [ + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "address", + "name": "user", + "internalType": "address" + }, + { + "type": "address", + "name": "to", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "configureAssets", + "inputs": [ + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + }, + { + "type": "uint256[]", + "name": "emissionsPerSecond", + "internalType": "uint256[]" + }, + { + "type": "uint256[]", + "name": "assetDecimals", + "internalType": "uint256[]" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "disableAssets", + "inputs": [ + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "", + "internalType": "uint256" + }, + { + "type": "uint8", + "name": "", + "internalType": "uint8" + }, + { + "type": "uint256", + "name": "", + "internalType": "uint256" + }, + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], + "name": "getAssetData", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "getClaimer", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "getDistributionEnd", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "getRewardsBalance", + "inputs": [ + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + }, + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "address" + } + ], + "name": "getRewardsVault", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "getUserAssetData", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + }, + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "getUserUnclaimedRewards", + "inputs": [ + { + "type": "address", + "name": "_user", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "handleAction", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + }, + { + "type": "uint256", + "name": "totalSupply", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "userBalance", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "initialize", + "inputs": [ + { + "type": "address", + "name": "rewardsVault", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setBulkClaimer", + "inputs": [ + { + "type": "address", + "name": "bulkClaimer", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setClaimer", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + }, + { + "type": "address", + "name": "caller", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setDistributionEnd", + "inputs": [ + { + "type": "uint256", + "name": "distributionEnd", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setRewardToken", + "inputs": [ + { + "type": "address", + "name": "rewardToken", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setRewardsVault", + "inputs": [ + { + "type": "address", + "name": "rewardsVault", + "internalType": "address" + } + ] + } +] diff --git a/src/apps/agave/contracts/abis/agave-lending-pool-provider.json b/src/apps/agave/contracts/abis/agave-lending-pool-provider.json new file mode 100644 index 000000000..ce2d7583e --- /dev/null +++ b/src/apps/agave/contracts/abis/agave-lending-pool-provider.json @@ -0,0 +1,1079 @@ +[ + { + "type": "event", + "name": "Borrow", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": false + }, + { + "type": "address", + "name": "onBehalfOf", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "borrowRateMode", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "borrowRate", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint16", + "name": "referral", + "internalType": "uint16", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Deposit", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": false + }, + { + "type": "address", + "name": "onBehalfOf", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint16", + "name": "referral", + "internalType": "uint16", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FlashLoan", + "inputs": [ + { + "type": "address", + "name": "target", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "initiator", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "asset", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "premium", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint16", + "name": "referralCode", + "internalType": "uint16", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LiquidationCall", + "inputs": [ + { + "type": "address", + "name": "collateralAsset", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "debtAsset", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "debtToCover", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "liquidatedCollateralAmount", + "internalType": "uint256", + "indexed": false + }, + { + "type": "address", + "name": "liquidator", + "internalType": "address", + "indexed": false + }, + { + "type": "bool", + "name": "receiveAToken", + "internalType": "bool", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "RebalanceStableBorrowRate", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Repay", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "repayer", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReserveDataUpdated", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "liquidityRate", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "stableBorrowRate", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "variableBorrowRate", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "liquidityIndex", + "internalType": "uint256", + "indexed": false + }, + { + "type": "uint256", + "name": "variableBorrowIndex", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReserveUsedAsCollateralDisabled", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReserveUsedAsCollateralEnabled", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Swap", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "rateMode", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Unpaused", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "Withdraw", + "inputs": [ + { + "type": "address", + "name": "reserve", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "user", + "internalType": "address", + "indexed": true + }, + { + "type": "address", + "name": "to", + "internalType": "address", + "indexed": true + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256", + "indexed": false + } + ], + "anonymous": false + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "FLASHLOAN_PREMIUM_TOTAL", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "LENDINGPOOL_REVISION", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "MAX_NUMBER_RESERVES", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "MAX_STABLE_RATE_BORROW_SIZE_PERCENT", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "borrow", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "interestRateMode", + "internalType": "uint256" + }, + { + "type": "uint16", + "name": "referralCode", + "internalType": "uint16" + }, + { + "type": "address", + "name": "onBehalfOf", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "deposit", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "address", + "name": "onBehalfOf", + "internalType": "address" + }, + { + "type": "uint16", + "name": "referralCode", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "finalizeTransfer", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "address", + "name": "from", + "internalType": "address" + }, + { + "type": "address", + "name": "to", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "balanceFromBefore", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "balanceToBefore", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "flashLoan", + "inputs": [ + { + "type": "address", + "name": "receiverAddress", + "internalType": "address" + }, + { + "type": "address[]", + "name": "assets", + "internalType": "address[]" + }, + { + "type": "uint256[]", + "name": "amounts", + "internalType": "uint256[]" + }, + { + "type": "uint256[]", + "name": "modes", + "internalType": "uint256[]" + }, + { + "type": "address", + "name": "onBehalfOf", + "internalType": "address" + }, + { + "type": "bytes", + "name": "params", + "internalType": "bytes" + }, + { + "type": "uint16", + "name": "referralCode", + "internalType": "uint16" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "contract ILendingPoolAddressesProvider" + } + ], + "name": "getAddressesProvider", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "tuple", + "name": "", + "internalType": "struct DataTypes.ReserveConfigurationMap", + "components": [ + { + "type": "uint256", + "name": "data", + "internalType": "uint256" + } + ] + } + ], + "name": "getConfiguration", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "tuple", + "name": "", + "internalType": "struct DataTypes.ReserveData", + "components": [ + { + "type": "tuple", + "name": "configuration", + "internalType": "struct DataTypes.ReserveConfigurationMap", + "components": [ + { + "type": "uint256", + "name": "data", + "internalType": "uint256" + } + ] + }, + { + "type": "uint128", + "name": "liquidityIndex", + "internalType": "uint128" + }, + { + "type": "uint128", + "name": "variableBorrowIndex", + "internalType": "uint128" + }, + { + "type": "uint128", + "name": "currentLiquidityRate", + "internalType": "uint128" + }, + { + "type": "uint128", + "name": "currentVariableBorrowRate", + "internalType": "uint128" + }, + { + "type": "uint128", + "name": "currentStableBorrowRate", + "internalType": "uint128" + }, + { + "type": "uint40", + "name": "lastUpdateTimestamp", + "internalType": "uint40" + }, + { + "type": "address", + "name": "aTokenAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "stableDebtTokenAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "variableDebtTokenAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "interestRateStrategyAddress", + "internalType": "address" + }, + { + "type": "uint8", + "name": "id", + "internalType": "uint8" + } + ] + } + ], + "name": "getReserveData", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "getReserveNormalizedIncome", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "getReserveNormalizedVariableDebt", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address[]", + "name": "", + "internalType": "address[]" + } + ], + "name": "getReservesList", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "totalCollateralETH", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "totalDebtETH", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "availableBorrowsETH", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "currentLiquidationThreshold", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "ltv", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "healthFactor", + "internalType": "uint256" + } + ], + "name": "getUserAccountData", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "tuple", + "name": "", + "internalType": "struct DataTypes.UserConfigurationMap", + "components": [ + { + "type": "uint256", + "name": "data", + "internalType": "uint256" + } + ] + } + ], + "name": "getUserConfiguration", + "inputs": [ + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "initReserve", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "address", + "name": "aTokenAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "stableDebtAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "variableDebtAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "interestRateStrategyAddress", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "initialize", + "inputs": [ + { + "type": "address", + "name": "provider", + "internalType": "contract ILendingPoolAddressesProvider" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "liquidationCall", + "inputs": [ + { + "type": "address", + "name": "collateralAsset", + "internalType": "address" + }, + { + "type": "address", + "name": "debtAsset", + "internalType": "address" + }, + { + "type": "address", + "name": "user", + "internalType": "address" + }, + { + "type": "uint256", + "name": "debtToCover", + "internalType": "uint256" + }, + { + "type": "bool", + "name": "receiveAToken", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "bool", + "name": "", + "internalType": "bool" + } + ], + "name": "paused", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "rebalanceStableBorrowRate", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "repay", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "rateMode", + "internalType": "uint256" + }, + { + "type": "address", + "name": "onBehalfOf", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setConfiguration", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "uint256", + "name": "configuration", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setPause", + "inputs": [ + { + "type": "bool", + "name": "val", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setReserveInterestRateStrategyAddress", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "address", + "name": "rateStrategyAddress", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "setUserUseReserveAsCollateral", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "bool", + "name": "useAsCollateral", + "internalType": "bool" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [], + "name": "swapBorrowRateMode", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "uint256", + "name": "rateMode", + "internalType": "uint256" + } + ] + }, + { + "type": "function", + "stateMutability": "nonpayable", + "outputs": [ + { + "type": "uint256", + "name": "", + "internalType": "uint256" + } + ], + "name": "withdraw", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "uint256", + "name": "amount", + "internalType": "uint256" + }, + { + "type": "address", + "name": "to", + "internalType": "address" + } + ] + } +] diff --git a/src/apps/agave/contracts/abis/agave-protocol-data-provider.json b/src/apps/agave/contracts/abis/agave-protocol-data-provider.json new file mode 100644 index 000000000..2820a753c --- /dev/null +++ b/src/apps/agave/contracts/abis/agave-protocol-data-provider.json @@ -0,0 +1,297 @@ +[ + { + "type": "constructor", + "stateMutability": "nonpayable", + "inputs": [ + { + "type": "address", + "name": "addressesProvider", + "internalType": "contract ILendingPoolAddressesProvider" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "", + "internalType": "contract ILendingPoolAddressesProvider" + } + ], + "name": "ADDRESSES_PROVIDER", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "tuple[]", + "name": "", + "internalType": "struct AaveProtocolDataProvider.TokenData[]", + "components": [ + { + "type": "string", + "name": "symbol", + "internalType": "string" + }, + { + "type": "address", + "name": "tokenAddress", + "internalType": "address" + } + ] + } + ], + "name": "getAllATokens", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "tuple[]", + "name": "", + "internalType": "struct AaveProtocolDataProvider.TokenData[]", + "components": [ + { + "type": "string", + "name": "symbol", + "internalType": "string" + }, + { + "type": "address", + "name": "tokenAddress", + "internalType": "address" + } + ] + } + ], + "name": "getAllReservesTokens", + "inputs": [] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "decimals", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "ltv", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "liquidationThreshold", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "liquidationBonus", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "reserveFactor", + "internalType": "uint256" + }, + { + "type": "bool", + "name": "usageAsCollateralEnabled", + "internalType": "bool" + }, + { + "type": "bool", + "name": "borrowingEnabled", + "internalType": "bool" + }, + { + "type": "bool", + "name": "stableBorrowRateEnabled", + "internalType": "bool" + }, + { + "type": "bool", + "name": "isActive", + "internalType": "bool" + }, + { + "type": "bool", + "name": "isFrozen", + "internalType": "bool" + } + ], + "name": "getReserveConfigurationData", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "availableLiquidity", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "totalStableDebt", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "totalVariableDebt", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "liquidityRate", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "variableBorrowRate", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "stableBorrowRate", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "averageStableBorrowRate", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "liquidityIndex", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "variableBorrowIndex", + "internalType": "uint256" + }, + { + "type": "uint40", + "name": "lastUpdateTimestamp", + "internalType": "uint40" + } + ], + "name": "getReserveData", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "address", + "name": "aTokenAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "stableDebtTokenAddress", + "internalType": "address" + }, + { + "type": "address", + "name": "variableDebtTokenAddress", + "internalType": "address" + } + ], + "name": "getReserveTokensAddresses", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + } + ] + }, + { + "type": "function", + "stateMutability": "view", + "outputs": [ + { + "type": "uint256", + "name": "currentATokenBalance", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "currentStableDebt", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "currentVariableDebt", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "principalStableDebt", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "scaledVariableDebt", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "stableBorrowRate", + "internalType": "uint256" + }, + { + "type": "uint256", + "name": "liquidityRate", + "internalType": "uint256" + }, + { + "type": "uint40", + "name": "stableRateLastUpdated", + "internalType": "uint40" + }, + { + "type": "bool", + "name": "usageAsCollateralEnabled", + "internalType": "bool" + } + ], + "name": "getUserReserveData", + "inputs": [ + { + "type": "address", + "name": "asset", + "internalType": "address" + }, + { + "type": "address", + "name": "user", + "internalType": "address" + } + ] + } +] diff --git a/src/apps/agave/contracts/ethers/AgaveBaseIncentivesController.ts b/src/apps/agave/contracts/ethers/AgaveBaseIncentivesController.ts new file mode 100644 index 000000000..56cd71b86 --- /dev/null +++ b/src/apps/agave/contracts/ethers/AgaveBaseIncentivesController.ts @@ -0,0 +1,918 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common'; + +export interface AgaveBaseIncentivesControllerInterface extends utils.Interface { + functions: { + 'BULK_CLAIMER()': FunctionFragment; + 'DISTRIBUTION_END()': FunctionFragment; + 'EMISSION_MANAGER()': FunctionFragment; + 'PRECISION()': FunctionFragment; + 'REVISION()': FunctionFragment; + 'REWARD_TOKEN()': FunctionFragment; + 'assets(address)': FunctionFragment; + 'bulkClaimRewardsOnBehalf(address[],uint256,address,address)': FunctionFragment; + 'claimRewards(address[],uint256,address)': FunctionFragment; + 'claimRewardsOnBehalf(address[],uint256,address,address)': FunctionFragment; + 'configureAssets(address[],uint256[],uint256[])': FunctionFragment; + 'disableAssets(address[])': FunctionFragment; + 'getAssetData(address)': FunctionFragment; + 'getClaimer(address)': FunctionFragment; + 'getDistributionEnd()': FunctionFragment; + 'getRewardsBalance(address[],address)': FunctionFragment; + 'getRewardsVault()': FunctionFragment; + 'getUserAssetData(address,address)': FunctionFragment; + 'getUserUnclaimedRewards(address)': FunctionFragment; + 'handleAction(address,uint256,uint256)': FunctionFragment; + 'initialize(address)': FunctionFragment; + 'setBulkClaimer(address)': FunctionFragment; + 'setClaimer(address,address)': FunctionFragment; + 'setDistributionEnd(uint256)': FunctionFragment; + 'setRewardToken(address)': FunctionFragment; + 'setRewardsVault(address)': FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | 'BULK_CLAIMER' + | 'DISTRIBUTION_END' + | 'EMISSION_MANAGER' + | 'PRECISION' + | 'REVISION' + | 'REWARD_TOKEN' + | 'assets' + | 'bulkClaimRewardsOnBehalf' + | 'claimRewards' + | 'claimRewardsOnBehalf' + | 'configureAssets' + | 'disableAssets' + | 'getAssetData' + | 'getClaimer' + | 'getDistributionEnd' + | 'getRewardsBalance' + | 'getRewardsVault' + | 'getUserAssetData' + | 'getUserUnclaimedRewards' + | 'handleAction' + | 'initialize' + | 'setBulkClaimer' + | 'setClaimer' + | 'setDistributionEnd' + | 'setRewardToken' + | 'setRewardsVault', + ): FunctionFragment; + + encodeFunctionData(functionFragment: 'BULK_CLAIMER', values?: undefined): string; + encodeFunctionData(functionFragment: 'DISTRIBUTION_END', values?: undefined): string; + encodeFunctionData(functionFragment: 'EMISSION_MANAGER', values?: undefined): string; + encodeFunctionData(functionFragment: 'PRECISION', values?: undefined): string; + encodeFunctionData(functionFragment: 'REVISION', values?: undefined): string; + encodeFunctionData(functionFragment: 'REWARD_TOKEN', values?: undefined): string; + encodeFunctionData(functionFragment: 'assets', values: [PromiseOrValue]): string; + encodeFunctionData( + functionFragment: 'bulkClaimRewardsOnBehalf', + values: [PromiseOrValue[], PromiseOrValue, PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'claimRewards', + values: [PromiseOrValue[], PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'claimRewardsOnBehalf', + values: [PromiseOrValue[], PromiseOrValue, PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'configureAssets', + values: [PromiseOrValue[], PromiseOrValue[], PromiseOrValue[]], + ): string; + encodeFunctionData(functionFragment: 'disableAssets', values: [PromiseOrValue[]]): string; + encodeFunctionData(functionFragment: 'getAssetData', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getClaimer', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getDistributionEnd', values?: undefined): string; + encodeFunctionData( + functionFragment: 'getRewardsBalance', + values: [PromiseOrValue[], PromiseOrValue], + ): string; + encodeFunctionData(functionFragment: 'getRewardsVault', values?: undefined): string; + encodeFunctionData( + functionFragment: 'getUserAssetData', + values: [PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData(functionFragment: 'getUserUnclaimedRewards', values: [PromiseOrValue]): string; + encodeFunctionData( + functionFragment: 'handleAction', + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'setBulkClaimer', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'setClaimer', values: [PromiseOrValue, PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'setDistributionEnd', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'setRewardToken', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'setRewardsVault', values: [PromiseOrValue]): string; + + decodeFunctionResult(functionFragment: 'BULK_CLAIMER', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'DISTRIBUTION_END', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'EMISSION_MANAGER', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'PRECISION', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'REVISION', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'REWARD_TOKEN', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'assets', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'bulkClaimRewardsOnBehalf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'claimRewards', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'claimRewardsOnBehalf', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'configureAssets', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'disableAssets', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAssetData', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getClaimer', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getDistributionEnd', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getRewardsBalance', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getRewardsVault', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getUserAssetData', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getUserUnclaimedRewards', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'handleAction', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setBulkClaimer', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setClaimer', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setDistributionEnd', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setRewardToken', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setRewardsVault', data: BytesLike): Result; + + events: { + 'AssetConfigUpdated(address,uint8,uint256)': EventFragment; + 'AssetIndexUpdated(address,uint256)': EventFragment; + 'BulkClaimerUpdated(address)': EventFragment; + 'ClaimerSet(address,address)': EventFragment; + 'DistributionEndUpdated(uint256)': EventFragment; + 'RewardTokenUpdated(address)': EventFragment; + 'RewardsAccrued(address,uint256)': EventFragment; + 'RewardsClaimed(address,address,address,uint256)': EventFragment; + 'RewardsVaultUpdated(address)': EventFragment; + 'UserIndexUpdated(address,address,uint256)': EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: 'AssetConfigUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'AssetIndexUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'BulkClaimerUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'ClaimerSet'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'DistributionEndUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RewardTokenUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RewardsAccrued'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RewardsClaimed'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RewardsVaultUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'UserIndexUpdated'): EventFragment; +} + +export interface AssetConfigUpdatedEventObject { + asset: string; + decimals: number; + emission: BigNumber; +} +export type AssetConfigUpdatedEvent = TypedEvent<[string, number, BigNumber], AssetConfigUpdatedEventObject>; + +export type AssetConfigUpdatedEventFilter = TypedEventFilter; + +export interface AssetIndexUpdatedEventObject { + asset: string; + index: BigNumber; +} +export type AssetIndexUpdatedEvent = TypedEvent<[string, BigNumber], AssetIndexUpdatedEventObject>; + +export type AssetIndexUpdatedEventFilter = TypedEventFilter; + +export interface BulkClaimerUpdatedEventObject { + newBulkClaimer: string; +} +export type BulkClaimerUpdatedEvent = TypedEvent<[string], BulkClaimerUpdatedEventObject>; + +export type BulkClaimerUpdatedEventFilter = TypedEventFilter; + +export interface ClaimerSetEventObject { + user: string; + claimer: string; +} +export type ClaimerSetEvent = TypedEvent<[string, string], ClaimerSetEventObject>; + +export type ClaimerSetEventFilter = TypedEventFilter; + +export interface DistributionEndUpdatedEventObject { + newDistributionEnd: BigNumber; +} +export type DistributionEndUpdatedEvent = TypedEvent<[BigNumber], DistributionEndUpdatedEventObject>; + +export type DistributionEndUpdatedEventFilter = TypedEventFilter; + +export interface RewardTokenUpdatedEventObject { + token: string; +} +export type RewardTokenUpdatedEvent = TypedEvent<[string], RewardTokenUpdatedEventObject>; + +export type RewardTokenUpdatedEventFilter = TypedEventFilter; + +export interface RewardsAccruedEventObject { + user: string; + amount: BigNumber; +} +export type RewardsAccruedEvent = TypedEvent<[string, BigNumber], RewardsAccruedEventObject>; + +export type RewardsAccruedEventFilter = TypedEventFilter; + +export interface RewardsClaimedEventObject { + user: string; + to: string; + claimer: string; + amount: BigNumber; +} +export type RewardsClaimedEvent = TypedEvent<[string, string, string, BigNumber], RewardsClaimedEventObject>; + +export type RewardsClaimedEventFilter = TypedEventFilter; + +export interface RewardsVaultUpdatedEventObject { + vault: string; +} +export type RewardsVaultUpdatedEvent = TypedEvent<[string], RewardsVaultUpdatedEventObject>; + +export type RewardsVaultUpdatedEventFilter = TypedEventFilter; + +export interface UserIndexUpdatedEventObject { + user: string; + asset: string; + index: BigNumber; +} +export type UserIndexUpdatedEvent = TypedEvent<[string, string, BigNumber], UserIndexUpdatedEventObject>; + +export type UserIndexUpdatedEventFilter = TypedEventFilter; + +export interface AgaveBaseIncentivesController extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AgaveBaseIncentivesControllerInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined, + ): Promise>; + + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + BULK_CLAIMER(overrides?: CallOverrides): Promise<[string]>; + + DISTRIBUTION_END(overrides?: CallOverrides): Promise<[BigNumber]>; + + EMISSION_MANAGER(overrides?: CallOverrides): Promise<[string]>; + + PRECISION(overrides?: CallOverrides): Promise<[number]>; + + REVISION(overrides?: CallOverrides): Promise<[BigNumber]>; + + REWARD_TOKEN(overrides?: CallOverrides): Promise<[string]>; + + assets( + arg0: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, number, number, boolean] & { + emissionPerSecond: BigNumber; + index: BigNumber; + lastUpdateTimestamp: number; + decimals: number; + disabled: boolean; + } + >; + + bulkClaimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewards( + assets: PromiseOrValue[], + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + configureAssets( + assets: PromiseOrValue[], + emissionsPerSecond: PromiseOrValue[], + assetDecimals: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + disableAssets( + assets: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAssetData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[BigNumber, BigNumber, number, BigNumber, boolean]>; + + getClaimer(user: PromiseOrValue, overrides?: CallOverrides): Promise<[string]>; + + getDistributionEnd(overrides?: CallOverrides): Promise<[BigNumber]>; + + getRewardsBalance( + assets: PromiseOrValue[], + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[BigNumber]>; + + getRewardsVault(overrides?: CallOverrides): Promise<[string]>; + + getUserAssetData( + user: PromiseOrValue, + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[BigNumber]>; + + getUserUnclaimedRewards(_user: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber]>; + + handleAction( + user: PromiseOrValue, + totalSupply: PromiseOrValue, + userBalance: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setBulkClaimer( + bulkClaimer: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setClaimer( + user: PromiseOrValue, + caller: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setDistributionEnd( + distributionEnd: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardToken( + rewardToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardsVault( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + }; + + BULK_CLAIMER(overrides?: CallOverrides): Promise; + + DISTRIBUTION_END(overrides?: CallOverrides): Promise; + + EMISSION_MANAGER(overrides?: CallOverrides): Promise; + + PRECISION(overrides?: CallOverrides): Promise; + + REVISION(overrides?: CallOverrides): Promise; + + REWARD_TOKEN(overrides?: CallOverrides): Promise; + + assets( + arg0: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, number, number, boolean] & { + emissionPerSecond: BigNumber; + index: BigNumber; + lastUpdateTimestamp: number; + decimals: number; + disabled: boolean; + } + >; + + bulkClaimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewards( + assets: PromiseOrValue[], + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + configureAssets( + assets: PromiseOrValue[], + emissionsPerSecond: PromiseOrValue[], + assetDecimals: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + disableAssets( + assets: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAssetData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[BigNumber, BigNumber, number, BigNumber, boolean]>; + + getClaimer(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + getDistributionEnd(overrides?: CallOverrides): Promise; + + getRewardsBalance( + assets: PromiseOrValue[], + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getRewardsVault(overrides?: CallOverrides): Promise; + + getUserAssetData( + user: PromiseOrValue, + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getUserUnclaimedRewards(_user: PromiseOrValue, overrides?: CallOverrides): Promise; + + handleAction( + user: PromiseOrValue, + totalSupply: PromiseOrValue, + userBalance: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setBulkClaimer( + bulkClaimer: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setClaimer( + user: PromiseOrValue, + caller: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setDistributionEnd( + distributionEnd: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardToken( + rewardToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardsVault( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + callStatic: { + BULK_CLAIMER(overrides?: CallOverrides): Promise; + + DISTRIBUTION_END(overrides?: CallOverrides): Promise; + + EMISSION_MANAGER(overrides?: CallOverrides): Promise; + + PRECISION(overrides?: CallOverrides): Promise; + + REVISION(overrides?: CallOverrides): Promise; + + REWARD_TOKEN(overrides?: CallOverrides): Promise; + + assets( + arg0: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, number, number, boolean] & { + emissionPerSecond: BigNumber; + index: BigNumber; + lastUpdateTimestamp: number; + decimals: number; + disabled: boolean; + } + >; + + bulkClaimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + claimRewards( + assets: PromiseOrValue[], + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + claimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + configureAssets( + assets: PromiseOrValue[], + emissionsPerSecond: PromiseOrValue[], + assetDecimals: PromiseOrValue[], + overrides?: CallOverrides, + ): Promise; + + disableAssets(assets: PromiseOrValue[], overrides?: CallOverrides): Promise; + + getAssetData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[BigNumber, BigNumber, number, BigNumber, boolean]>; + + getClaimer(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + getDistributionEnd(overrides?: CallOverrides): Promise; + + getRewardsBalance( + assets: PromiseOrValue[], + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getRewardsVault(overrides?: CallOverrides): Promise; + + getUserAssetData( + user: PromiseOrValue, + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getUserUnclaimedRewards(_user: PromiseOrValue, overrides?: CallOverrides): Promise; + + handleAction( + user: PromiseOrValue, + totalSupply: PromiseOrValue, + userBalance: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + initialize(rewardsVault: PromiseOrValue, overrides?: CallOverrides): Promise; + + setBulkClaimer(bulkClaimer: PromiseOrValue, overrides?: CallOverrides): Promise; + + setClaimer(user: PromiseOrValue, caller: PromiseOrValue, overrides?: CallOverrides): Promise; + + setDistributionEnd(distributionEnd: PromiseOrValue, overrides?: CallOverrides): Promise; + + setRewardToken(rewardToken: PromiseOrValue, overrides?: CallOverrides): Promise; + + setRewardsVault(rewardsVault: PromiseOrValue, overrides?: CallOverrides): Promise; + }; + + filters: { + 'AssetConfigUpdated(address,uint8,uint256)'( + asset?: PromiseOrValue | null, + decimals?: null, + emission?: null, + ): AssetConfigUpdatedEventFilter; + AssetConfigUpdated( + asset?: PromiseOrValue | null, + decimals?: null, + emission?: null, + ): AssetConfigUpdatedEventFilter; + + 'AssetIndexUpdated(address,uint256)'( + asset?: PromiseOrValue | null, + index?: null, + ): AssetIndexUpdatedEventFilter; + AssetIndexUpdated(asset?: PromiseOrValue | null, index?: null): AssetIndexUpdatedEventFilter; + + 'BulkClaimerUpdated(address)'(newBulkClaimer?: null): BulkClaimerUpdatedEventFilter; + BulkClaimerUpdated(newBulkClaimer?: null): BulkClaimerUpdatedEventFilter; + + 'ClaimerSet(address,address)'( + user?: PromiseOrValue | null, + claimer?: PromiseOrValue | null, + ): ClaimerSetEventFilter; + ClaimerSet(user?: PromiseOrValue | null, claimer?: PromiseOrValue | null): ClaimerSetEventFilter; + + 'DistributionEndUpdated(uint256)'(newDistributionEnd?: null): DistributionEndUpdatedEventFilter; + DistributionEndUpdated(newDistributionEnd?: null): DistributionEndUpdatedEventFilter; + + 'RewardTokenUpdated(address)'(token?: PromiseOrValue | null): RewardTokenUpdatedEventFilter; + RewardTokenUpdated(token?: PromiseOrValue | null): RewardTokenUpdatedEventFilter; + + 'RewardsAccrued(address,uint256)'(user?: PromiseOrValue | null, amount?: null): RewardsAccruedEventFilter; + RewardsAccrued(user?: PromiseOrValue | null, amount?: null): RewardsAccruedEventFilter; + + 'RewardsClaimed(address,address,address,uint256)'( + user?: PromiseOrValue | null, + to?: PromiseOrValue | null, + claimer?: PromiseOrValue | null, + amount?: null, + ): RewardsClaimedEventFilter; + RewardsClaimed( + user?: PromiseOrValue | null, + to?: PromiseOrValue | null, + claimer?: PromiseOrValue | null, + amount?: null, + ): RewardsClaimedEventFilter; + + 'RewardsVaultUpdated(address)'(vault?: PromiseOrValue | null): RewardsVaultUpdatedEventFilter; + RewardsVaultUpdated(vault?: PromiseOrValue | null): RewardsVaultUpdatedEventFilter; + + 'UserIndexUpdated(address,address,uint256)'( + user?: PromiseOrValue | null, + asset?: PromiseOrValue | null, + index?: null, + ): UserIndexUpdatedEventFilter; + UserIndexUpdated( + user?: PromiseOrValue | null, + asset?: PromiseOrValue | null, + index?: null, + ): UserIndexUpdatedEventFilter; + }; + + estimateGas: { + BULK_CLAIMER(overrides?: CallOverrides): Promise; + + DISTRIBUTION_END(overrides?: CallOverrides): Promise; + + EMISSION_MANAGER(overrides?: CallOverrides): Promise; + + PRECISION(overrides?: CallOverrides): Promise; + + REVISION(overrides?: CallOverrides): Promise; + + REWARD_TOKEN(overrides?: CallOverrides): Promise; + + assets(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + + bulkClaimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewards( + assets: PromiseOrValue[], + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + configureAssets( + assets: PromiseOrValue[], + emissionsPerSecond: PromiseOrValue[], + assetDecimals: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + disableAssets( + assets: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAssetData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getClaimer(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + getDistributionEnd(overrides?: CallOverrides): Promise; + + getRewardsBalance( + assets: PromiseOrValue[], + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getRewardsVault(overrides?: CallOverrides): Promise; + + getUserAssetData( + user: PromiseOrValue, + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getUserUnclaimedRewards(_user: PromiseOrValue, overrides?: CallOverrides): Promise; + + handleAction( + user: PromiseOrValue, + totalSupply: PromiseOrValue, + userBalance: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setBulkClaimer( + bulkClaimer: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setClaimer( + user: PromiseOrValue, + caller: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setDistributionEnd( + distributionEnd: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardToken( + rewardToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardsVault( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + }; + + populateTransaction: { + BULK_CLAIMER(overrides?: CallOverrides): Promise; + + DISTRIBUTION_END(overrides?: CallOverrides): Promise; + + EMISSION_MANAGER(overrides?: CallOverrides): Promise; + + PRECISION(overrides?: CallOverrides): Promise; + + REVISION(overrides?: CallOverrides): Promise; + + REWARD_TOKEN(overrides?: CallOverrides): Promise; + + assets(arg0: PromiseOrValue, overrides?: CallOverrides): Promise; + + bulkClaimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewards( + assets: PromiseOrValue[], + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + claimRewardsOnBehalf( + assets: PromiseOrValue[], + amount: PromiseOrValue, + user: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + configureAssets( + assets: PromiseOrValue[], + emissionsPerSecond: PromiseOrValue[], + assetDecimals: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + disableAssets( + assets: PromiseOrValue[], + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAssetData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getClaimer(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + getDistributionEnd(overrides?: CallOverrides): Promise; + + getRewardsBalance( + assets: PromiseOrValue[], + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getRewardsVault(overrides?: CallOverrides): Promise; + + getUserAssetData( + user: PromiseOrValue, + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getUserUnclaimedRewards(_user: PromiseOrValue, overrides?: CallOverrides): Promise; + + handleAction( + user: PromiseOrValue, + totalSupply: PromiseOrValue, + userBalance: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setBulkClaimer( + bulkClaimer: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setClaimer( + user: PromiseOrValue, + caller: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setDistributionEnd( + distributionEnd: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardToken( + rewardToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setRewardsVault( + rewardsVault: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + }; +} diff --git a/src/apps/agave/contracts/ethers/AgaveLendingPoolProvider.ts b/src/apps/agave/contracts/ethers/AgaveLendingPoolProvider.ts new file mode 100644 index 000000000..82e0f0d45 --- /dev/null +++ b/src/apps/agave/contracts/ethers/AgaveLendingPoolProvider.ts @@ -0,0 +1,1385 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BigNumberish, + BytesLike, + CallOverrides, + ContractTransaction, + Overrides, + PopulatedTransaction, + Signer, + utils, +} from 'ethers'; +import type { FunctionFragment, Result, EventFragment } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common'; + +export declare namespace DataTypes { + export type ReserveConfigurationMapStruct = { + data: PromiseOrValue; + }; + + export type ReserveConfigurationMapStructOutput = [BigNumber] & { + data: BigNumber; + }; + + export type ReserveDataStruct = { + configuration: DataTypes.ReserveConfigurationMapStruct; + liquidityIndex: PromiseOrValue; + variableBorrowIndex: PromiseOrValue; + currentLiquidityRate: PromiseOrValue; + currentVariableBorrowRate: PromiseOrValue; + currentStableBorrowRate: PromiseOrValue; + lastUpdateTimestamp: PromiseOrValue; + aTokenAddress: PromiseOrValue; + stableDebtTokenAddress: PromiseOrValue; + variableDebtTokenAddress: PromiseOrValue; + interestRateStrategyAddress: PromiseOrValue; + id: PromiseOrValue; + }; + + export type ReserveDataStructOutput = [ + DataTypes.ReserveConfigurationMapStructOutput, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + BigNumber, + number, + string, + string, + string, + string, + number, + ] & { + configuration: DataTypes.ReserveConfigurationMapStructOutput; + liquidityIndex: BigNumber; + variableBorrowIndex: BigNumber; + currentLiquidityRate: BigNumber; + currentVariableBorrowRate: BigNumber; + currentStableBorrowRate: BigNumber; + lastUpdateTimestamp: number; + aTokenAddress: string; + stableDebtTokenAddress: string; + variableDebtTokenAddress: string; + interestRateStrategyAddress: string; + id: number; + }; + + export type UserConfigurationMapStruct = { + data: PromiseOrValue; + }; + + export type UserConfigurationMapStructOutput = [BigNumber] & { + data: BigNumber; + }; +} + +export interface AgaveLendingPoolProviderInterface extends utils.Interface { + functions: { + 'FLASHLOAN_PREMIUM_TOTAL()': FunctionFragment; + 'LENDINGPOOL_REVISION()': FunctionFragment; + 'MAX_NUMBER_RESERVES()': FunctionFragment; + 'MAX_STABLE_RATE_BORROW_SIZE_PERCENT()': FunctionFragment; + 'borrow(address,uint256,uint256,uint16,address)': FunctionFragment; + 'deposit(address,uint256,address,uint16)': FunctionFragment; + 'finalizeTransfer(address,address,address,uint256,uint256,uint256)': FunctionFragment; + 'flashLoan(address,address[],uint256[],uint256[],address,bytes,uint16)': FunctionFragment; + 'getAddressesProvider()': FunctionFragment; + 'getConfiguration(address)': FunctionFragment; + 'getReserveData(address)': FunctionFragment; + 'getReserveNormalizedIncome(address)': FunctionFragment; + 'getReserveNormalizedVariableDebt(address)': FunctionFragment; + 'getReservesList()': FunctionFragment; + 'getUserAccountData(address)': FunctionFragment; + 'getUserConfiguration(address)': FunctionFragment; + 'initReserve(address,address,address,address,address)': FunctionFragment; + 'initialize(address)': FunctionFragment; + 'liquidationCall(address,address,address,uint256,bool)': FunctionFragment; + 'paused()': FunctionFragment; + 'rebalanceStableBorrowRate(address,address)': FunctionFragment; + 'repay(address,uint256,uint256,address)': FunctionFragment; + 'setConfiguration(address,uint256)': FunctionFragment; + 'setPause(bool)': FunctionFragment; + 'setReserveInterestRateStrategyAddress(address,address)': FunctionFragment; + 'setUserUseReserveAsCollateral(address,bool)': FunctionFragment; + 'swapBorrowRateMode(address,uint256)': FunctionFragment; + 'withdraw(address,uint256,address)': FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | 'FLASHLOAN_PREMIUM_TOTAL' + | 'LENDINGPOOL_REVISION' + | 'MAX_NUMBER_RESERVES' + | 'MAX_STABLE_RATE_BORROW_SIZE_PERCENT' + | 'borrow' + | 'deposit' + | 'finalizeTransfer' + | 'flashLoan' + | 'getAddressesProvider' + | 'getConfiguration' + | 'getReserveData' + | 'getReserveNormalizedIncome' + | 'getReserveNormalizedVariableDebt' + | 'getReservesList' + | 'getUserAccountData' + | 'getUserConfiguration' + | 'initReserve' + | 'initialize' + | 'liquidationCall' + | 'paused' + | 'rebalanceStableBorrowRate' + | 'repay' + | 'setConfiguration' + | 'setPause' + | 'setReserveInterestRateStrategyAddress' + | 'setUserUseReserveAsCollateral' + | 'swapBorrowRateMode' + | 'withdraw', + ): FunctionFragment; + + encodeFunctionData(functionFragment: 'FLASHLOAN_PREMIUM_TOTAL', values?: undefined): string; + encodeFunctionData(functionFragment: 'LENDINGPOOL_REVISION', values?: undefined): string; + encodeFunctionData(functionFragment: 'MAX_NUMBER_RESERVES', values?: undefined): string; + encodeFunctionData(functionFragment: 'MAX_STABLE_RATE_BORROW_SIZE_PERCENT', values?: undefined): string; + encodeFunctionData( + functionFragment: 'borrow', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData( + functionFragment: 'deposit', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData( + functionFragment: 'finalizeTransfer', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData( + functionFragment: 'flashLoan', + values: [ + PromiseOrValue, + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue[], + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData(functionFragment: 'getAddressesProvider', values?: undefined): string; + encodeFunctionData(functionFragment: 'getConfiguration', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getReserveData', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getReserveNormalizedIncome', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getReserveNormalizedVariableDebt', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getReservesList', values?: undefined): string; + encodeFunctionData(functionFragment: 'getUserAccountData', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getUserConfiguration', values: [PromiseOrValue]): string; + encodeFunctionData( + functionFragment: 'initReserve', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData(functionFragment: 'initialize', values: [PromiseOrValue]): string; + encodeFunctionData( + functionFragment: 'liquidationCall', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData(functionFragment: 'paused', values?: undefined): string; + encodeFunctionData( + functionFragment: 'rebalanceStableBorrowRate', + values: [PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'repay', + values: [ + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + PromiseOrValue, + ], + ): string; + encodeFunctionData( + functionFragment: 'setConfiguration', + values: [PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData(functionFragment: 'setPause', values: [PromiseOrValue]): string; + encodeFunctionData( + functionFragment: 'setReserveInterestRateStrategyAddress', + values: [PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'setUserUseReserveAsCollateral', + values: [PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'swapBorrowRateMode', + values: [PromiseOrValue, PromiseOrValue], + ): string; + encodeFunctionData( + functionFragment: 'withdraw', + values: [PromiseOrValue, PromiseOrValue, PromiseOrValue], + ): string; + + decodeFunctionResult(functionFragment: 'FLASHLOAN_PREMIUM_TOTAL', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'LENDINGPOOL_REVISION', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'MAX_NUMBER_RESERVES', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'MAX_STABLE_RATE_BORROW_SIZE_PERCENT', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'borrow', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'deposit', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'finalizeTransfer', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'flashLoan', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAddressesProvider', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getConfiguration', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReserveData', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReserveNormalizedIncome', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReserveNormalizedVariableDebt', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReservesList', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getUserAccountData', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getUserConfiguration', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initReserve', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'initialize', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'liquidationCall', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'paused', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'rebalanceStableBorrowRate', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'repay', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setConfiguration', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setPause', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setReserveInterestRateStrategyAddress', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'setUserUseReserveAsCollateral', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'swapBorrowRateMode', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'withdraw', data: BytesLike): Result; + + events: { + 'Borrow(address,address,address,uint256,uint256,uint256,uint16)': EventFragment; + 'Deposit(address,address,address,uint256,uint16)': EventFragment; + 'FlashLoan(address,address,address,uint256,uint256,uint16)': EventFragment; + 'LiquidationCall(address,address,address,uint256,uint256,address,bool)': EventFragment; + 'Paused()': EventFragment; + 'RebalanceStableBorrowRate(address,address)': EventFragment; + 'Repay(address,address,address,uint256)': EventFragment; + 'ReserveDataUpdated(address,uint256,uint256,uint256,uint256,uint256)': EventFragment; + 'ReserveUsedAsCollateralDisabled(address,address)': EventFragment; + 'ReserveUsedAsCollateralEnabled(address,address)': EventFragment; + 'Swap(address,address,uint256)': EventFragment; + 'Unpaused()': EventFragment; + 'Withdraw(address,address,address,uint256)': EventFragment; + }; + + getEvent(nameOrSignatureOrTopic: 'Borrow'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Deposit'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'FlashLoan'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'LiquidationCall'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Paused'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'RebalanceStableBorrowRate'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Repay'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'ReserveDataUpdated'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'ReserveUsedAsCollateralDisabled'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'ReserveUsedAsCollateralEnabled'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Swap'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Unpaused'): EventFragment; + getEvent(nameOrSignatureOrTopic: 'Withdraw'): EventFragment; +} + +export interface BorrowEventObject { + reserve: string; + user: string; + onBehalfOf: string; + amount: BigNumber; + borrowRateMode: BigNumber; + borrowRate: BigNumber; + referral: number; +} +export type BorrowEvent = TypedEvent< + [string, string, string, BigNumber, BigNumber, BigNumber, number], + BorrowEventObject +>; + +export type BorrowEventFilter = TypedEventFilter; + +export interface DepositEventObject { + reserve: string; + user: string; + onBehalfOf: string; + amount: BigNumber; + referral: number; +} +export type DepositEvent = TypedEvent<[string, string, string, BigNumber, number], DepositEventObject>; + +export type DepositEventFilter = TypedEventFilter; + +export interface FlashLoanEventObject { + target: string; + initiator: string; + asset: string; + amount: BigNumber; + premium: BigNumber; + referralCode: number; +} +export type FlashLoanEvent = TypedEvent<[string, string, string, BigNumber, BigNumber, number], FlashLoanEventObject>; + +export type FlashLoanEventFilter = TypedEventFilter; + +export interface LiquidationCallEventObject { + collateralAsset: string; + debtAsset: string; + user: string; + debtToCover: BigNumber; + liquidatedCollateralAmount: BigNumber; + liquidator: string; + receiveAToken: boolean; +} +export type LiquidationCallEvent = TypedEvent< + [string, string, string, BigNumber, BigNumber, string, boolean], + LiquidationCallEventObject +>; + +export type LiquidationCallEventFilter = TypedEventFilter; + +export interface PausedEventObject {} +export type PausedEvent = TypedEvent<[], PausedEventObject>; + +export type PausedEventFilter = TypedEventFilter; + +export interface RebalanceStableBorrowRateEventObject { + reserve: string; + user: string; +} +export type RebalanceStableBorrowRateEvent = TypedEvent<[string, string], RebalanceStableBorrowRateEventObject>; + +export type RebalanceStableBorrowRateEventFilter = TypedEventFilter; + +export interface RepayEventObject { + reserve: string; + user: string; + repayer: string; + amount: BigNumber; +} +export type RepayEvent = TypedEvent<[string, string, string, BigNumber], RepayEventObject>; + +export type RepayEventFilter = TypedEventFilter; + +export interface ReserveDataUpdatedEventObject { + reserve: string; + liquidityRate: BigNumber; + stableBorrowRate: BigNumber; + variableBorrowRate: BigNumber; + liquidityIndex: BigNumber; + variableBorrowIndex: BigNumber; +} +export type ReserveDataUpdatedEvent = TypedEvent< + [string, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber], + ReserveDataUpdatedEventObject +>; + +export type ReserveDataUpdatedEventFilter = TypedEventFilter; + +export interface ReserveUsedAsCollateralDisabledEventObject { + reserve: string; + user: string; +} +export type ReserveUsedAsCollateralDisabledEvent = TypedEvent< + [string, string], + ReserveUsedAsCollateralDisabledEventObject +>; + +export type ReserveUsedAsCollateralDisabledEventFilter = TypedEventFilter; + +export interface ReserveUsedAsCollateralEnabledEventObject { + reserve: string; + user: string; +} +export type ReserveUsedAsCollateralEnabledEvent = TypedEvent< + [string, string], + ReserveUsedAsCollateralEnabledEventObject +>; + +export type ReserveUsedAsCollateralEnabledEventFilter = TypedEventFilter; + +export interface SwapEventObject { + reserve: string; + user: string; + rateMode: BigNumber; +} +export type SwapEvent = TypedEvent<[string, string, BigNumber], SwapEventObject>; + +export type SwapEventFilter = TypedEventFilter; + +export interface UnpausedEventObject {} +export type UnpausedEvent = TypedEvent<[], UnpausedEventObject>; + +export type UnpausedEventFilter = TypedEventFilter; + +export interface WithdrawEventObject { + reserve: string; + user: string; + to: string; + amount: BigNumber; +} +export type WithdrawEvent = TypedEvent<[string, string, string, BigNumber], WithdrawEventObject>; + +export type WithdrawEventFilter = TypedEventFilter; + +export interface AgaveLendingPoolProvider extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AgaveLendingPoolProviderInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined, + ): Promise>; + + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + FLASHLOAN_PREMIUM_TOTAL(overrides?: CallOverrides): Promise<[BigNumber]>; + + LENDINGPOOL_REVISION(overrides?: CallOverrides): Promise<[BigNumber]>; + + MAX_NUMBER_RESERVES(overrides?: CallOverrides): Promise<[BigNumber]>; + + MAX_STABLE_RATE_BORROW_SIZE_PERCENT(overrides?: CallOverrides): Promise<[BigNumber]>; + + borrow( + asset: PromiseOrValue, + amount: PromiseOrValue, + interestRateMode: PromiseOrValue, + referralCode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + deposit( + asset: PromiseOrValue, + amount: PromiseOrValue, + onBehalfOf: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + finalizeTransfer( + asset: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + balanceFromBefore: PromiseOrValue, + balanceToBefore: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + flashLoan( + receiverAddress: PromiseOrValue, + assets: PromiseOrValue[], + amounts: PromiseOrValue[], + modes: PromiseOrValue[], + onBehalfOf: PromiseOrValue, + params: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAddressesProvider(overrides?: CallOverrides): Promise<[string]>; + + getConfiguration( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[DataTypes.ReserveConfigurationMapStructOutput]>; + + getReserveData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[DataTypes.ReserveDataStructOutput]>; + + getReserveNormalizedIncome(asset: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber]>; + + getReserveNormalizedVariableDebt(asset: PromiseOrValue, overrides?: CallOverrides): Promise<[BigNumber]>; + + getReservesList(overrides?: CallOverrides): Promise<[string[]]>; + + getUserAccountData( + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { + totalCollateralETH: BigNumber; + totalDebtETH: BigNumber; + availableBorrowsETH: BigNumber; + currentLiquidationThreshold: BigNumber; + ltv: BigNumber; + healthFactor: BigNumber; + } + >; + + getUserConfiguration( + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise<[DataTypes.UserConfigurationMapStructOutput]>; + + initReserve( + asset: PromiseOrValue, + aTokenAddress: PromiseOrValue, + stableDebtAddress: PromiseOrValue, + variableDebtAddress: PromiseOrValue, + interestRateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + provider: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + liquidationCall( + collateralAsset: PromiseOrValue, + debtAsset: PromiseOrValue, + user: PromiseOrValue, + debtToCover: PromiseOrValue, + receiveAToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + paused(overrides?: CallOverrides): Promise<[boolean]>; + + rebalanceStableBorrowRate( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + repay( + asset: PromiseOrValue, + amount: PromiseOrValue, + rateMode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setConfiguration( + asset: PromiseOrValue, + configuration: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setPause( + val: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setReserveInterestRateStrategyAddress( + asset: PromiseOrValue, + rateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setUserUseReserveAsCollateral( + asset: PromiseOrValue, + useAsCollateral: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + swapBorrowRateMode( + asset: PromiseOrValue, + rateMode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + withdraw( + asset: PromiseOrValue, + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + }; + + FLASHLOAN_PREMIUM_TOTAL(overrides?: CallOverrides): Promise; + + LENDINGPOOL_REVISION(overrides?: CallOverrides): Promise; + + MAX_NUMBER_RESERVES(overrides?: CallOverrides): Promise; + + MAX_STABLE_RATE_BORROW_SIZE_PERCENT(overrides?: CallOverrides): Promise; + + borrow( + asset: PromiseOrValue, + amount: PromiseOrValue, + interestRateMode: PromiseOrValue, + referralCode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + deposit( + asset: PromiseOrValue, + amount: PromiseOrValue, + onBehalfOf: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + finalizeTransfer( + asset: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + balanceFromBefore: PromiseOrValue, + balanceToBefore: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + flashLoan( + receiverAddress: PromiseOrValue, + assets: PromiseOrValue[], + amounts: PromiseOrValue[], + modes: PromiseOrValue[], + onBehalfOf: PromiseOrValue, + params: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAddressesProvider(overrides?: CallOverrides): Promise; + + getConfiguration( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getReserveData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedIncome(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedVariableDebt(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReservesList(overrides?: CallOverrides): Promise; + + getUserAccountData( + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { + totalCollateralETH: BigNumber; + totalDebtETH: BigNumber; + availableBorrowsETH: BigNumber; + currentLiquidationThreshold: BigNumber; + ltv: BigNumber; + healthFactor: BigNumber; + } + >; + + getUserConfiguration( + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + initReserve( + asset: PromiseOrValue, + aTokenAddress: PromiseOrValue, + stableDebtAddress: PromiseOrValue, + variableDebtAddress: PromiseOrValue, + interestRateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + provider: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + liquidationCall( + collateralAsset: PromiseOrValue, + debtAsset: PromiseOrValue, + user: PromiseOrValue, + debtToCover: PromiseOrValue, + receiveAToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + paused(overrides?: CallOverrides): Promise; + + rebalanceStableBorrowRate( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + repay( + asset: PromiseOrValue, + amount: PromiseOrValue, + rateMode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setConfiguration( + asset: PromiseOrValue, + configuration: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setPause( + val: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setReserveInterestRateStrategyAddress( + asset: PromiseOrValue, + rateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setUserUseReserveAsCollateral( + asset: PromiseOrValue, + useAsCollateral: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + swapBorrowRateMode( + asset: PromiseOrValue, + rateMode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + withdraw( + asset: PromiseOrValue, + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + callStatic: { + FLASHLOAN_PREMIUM_TOTAL(overrides?: CallOverrides): Promise; + + LENDINGPOOL_REVISION(overrides?: CallOverrides): Promise; + + MAX_NUMBER_RESERVES(overrides?: CallOverrides): Promise; + + MAX_STABLE_RATE_BORROW_SIZE_PERCENT(overrides?: CallOverrides): Promise; + + borrow( + asset: PromiseOrValue, + amount: PromiseOrValue, + interestRateMode: PromiseOrValue, + referralCode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + deposit( + asset: PromiseOrValue, + amount: PromiseOrValue, + onBehalfOf: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + finalizeTransfer( + asset: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + balanceFromBefore: PromiseOrValue, + balanceToBefore: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + flashLoan( + receiverAddress: PromiseOrValue, + assets: PromiseOrValue[], + amounts: PromiseOrValue[], + modes: PromiseOrValue[], + onBehalfOf: PromiseOrValue, + params: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getAddressesProvider(overrides?: CallOverrides): Promise; + + getConfiguration( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getReserveData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getReserveNormalizedIncome(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedVariableDebt(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReservesList(overrides?: CallOverrides): Promise; + + getUserAccountData( + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber] & { + totalCollateralETH: BigNumber; + totalDebtETH: BigNumber; + availableBorrowsETH: BigNumber; + currentLiquidationThreshold: BigNumber; + ltv: BigNumber; + healthFactor: BigNumber; + } + >; + + getUserConfiguration( + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + initReserve( + asset: PromiseOrValue, + aTokenAddress: PromiseOrValue, + stableDebtAddress: PromiseOrValue, + variableDebtAddress: PromiseOrValue, + interestRateStrategyAddress: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + initialize(provider: PromiseOrValue, overrides?: CallOverrides): Promise; + + liquidationCall( + collateralAsset: PromiseOrValue, + debtAsset: PromiseOrValue, + user: PromiseOrValue, + debtToCover: PromiseOrValue, + receiveAToken: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + paused(overrides?: CallOverrides): Promise; + + rebalanceStableBorrowRate( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + repay( + asset: PromiseOrValue, + amount: PromiseOrValue, + rateMode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + setConfiguration( + asset: PromiseOrValue, + configuration: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + setPause(val: PromiseOrValue, overrides?: CallOverrides): Promise; + + setReserveInterestRateStrategyAddress( + asset: PromiseOrValue, + rateStrategyAddress: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + setUserUseReserveAsCollateral( + asset: PromiseOrValue, + useAsCollateral: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + swapBorrowRateMode( + asset: PromiseOrValue, + rateMode: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + withdraw( + asset: PromiseOrValue, + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + }; + + filters: { + 'Borrow(address,address,address,uint256,uint256,uint256,uint16)'( + reserve?: PromiseOrValue | null, + user?: null, + onBehalfOf?: PromiseOrValue | null, + amount?: null, + borrowRateMode?: null, + borrowRate?: null, + referral?: PromiseOrValue | null, + ): BorrowEventFilter; + Borrow( + reserve?: PromiseOrValue | null, + user?: null, + onBehalfOf?: PromiseOrValue | null, + amount?: null, + borrowRateMode?: null, + borrowRate?: null, + referral?: PromiseOrValue | null, + ): BorrowEventFilter; + + 'Deposit(address,address,address,uint256,uint16)'( + reserve?: PromiseOrValue | null, + user?: null, + onBehalfOf?: PromiseOrValue | null, + amount?: null, + referral?: PromiseOrValue | null, + ): DepositEventFilter; + Deposit( + reserve?: PromiseOrValue | null, + user?: null, + onBehalfOf?: PromiseOrValue | null, + amount?: null, + referral?: PromiseOrValue | null, + ): DepositEventFilter; + + 'FlashLoan(address,address,address,uint256,uint256,uint16)'( + target?: PromiseOrValue | null, + initiator?: PromiseOrValue | null, + asset?: PromiseOrValue | null, + amount?: null, + premium?: null, + referralCode?: null, + ): FlashLoanEventFilter; + FlashLoan( + target?: PromiseOrValue | null, + initiator?: PromiseOrValue | null, + asset?: PromiseOrValue | null, + amount?: null, + premium?: null, + referralCode?: null, + ): FlashLoanEventFilter; + + 'LiquidationCall(address,address,address,uint256,uint256,address,bool)'( + collateralAsset?: PromiseOrValue | null, + debtAsset?: PromiseOrValue | null, + user?: PromiseOrValue | null, + debtToCover?: null, + liquidatedCollateralAmount?: null, + liquidator?: null, + receiveAToken?: null, + ): LiquidationCallEventFilter; + LiquidationCall( + collateralAsset?: PromiseOrValue | null, + debtAsset?: PromiseOrValue | null, + user?: PromiseOrValue | null, + debtToCover?: null, + liquidatedCollateralAmount?: null, + liquidator?: null, + receiveAToken?: null, + ): LiquidationCallEventFilter; + + 'Paused()'(): PausedEventFilter; + Paused(): PausedEventFilter; + + 'RebalanceStableBorrowRate(address,address)'( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + ): RebalanceStableBorrowRateEventFilter; + RebalanceStableBorrowRate( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + ): RebalanceStableBorrowRateEventFilter; + + 'Repay(address,address,address,uint256)'( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + repayer?: PromiseOrValue | null, + amount?: null, + ): RepayEventFilter; + Repay( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + repayer?: PromiseOrValue | null, + amount?: null, + ): RepayEventFilter; + + 'ReserveDataUpdated(address,uint256,uint256,uint256,uint256,uint256)'( + reserve?: PromiseOrValue | null, + liquidityRate?: null, + stableBorrowRate?: null, + variableBorrowRate?: null, + liquidityIndex?: null, + variableBorrowIndex?: null, + ): ReserveDataUpdatedEventFilter; + ReserveDataUpdated( + reserve?: PromiseOrValue | null, + liquidityRate?: null, + stableBorrowRate?: null, + variableBorrowRate?: null, + liquidityIndex?: null, + variableBorrowIndex?: null, + ): ReserveDataUpdatedEventFilter; + + 'ReserveUsedAsCollateralDisabled(address,address)'( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + ): ReserveUsedAsCollateralDisabledEventFilter; + ReserveUsedAsCollateralDisabled( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + ): ReserveUsedAsCollateralDisabledEventFilter; + + 'ReserveUsedAsCollateralEnabled(address,address)'( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + ): ReserveUsedAsCollateralEnabledEventFilter; + ReserveUsedAsCollateralEnabled( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + ): ReserveUsedAsCollateralEnabledEventFilter; + + 'Swap(address,address,uint256)'( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + rateMode?: null, + ): SwapEventFilter; + Swap( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + rateMode?: null, + ): SwapEventFilter; + + 'Unpaused()'(): UnpausedEventFilter; + Unpaused(): UnpausedEventFilter; + + 'Withdraw(address,address,address,uint256)'( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null, + ): WithdrawEventFilter; + Withdraw( + reserve?: PromiseOrValue | null, + user?: PromiseOrValue | null, + to?: PromiseOrValue | null, + amount?: null, + ): WithdrawEventFilter; + }; + + estimateGas: { + FLASHLOAN_PREMIUM_TOTAL(overrides?: CallOverrides): Promise; + + LENDINGPOOL_REVISION(overrides?: CallOverrides): Promise; + + MAX_NUMBER_RESERVES(overrides?: CallOverrides): Promise; + + MAX_STABLE_RATE_BORROW_SIZE_PERCENT(overrides?: CallOverrides): Promise; + + borrow( + asset: PromiseOrValue, + amount: PromiseOrValue, + interestRateMode: PromiseOrValue, + referralCode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + deposit( + asset: PromiseOrValue, + amount: PromiseOrValue, + onBehalfOf: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + finalizeTransfer( + asset: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + balanceFromBefore: PromiseOrValue, + balanceToBefore: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + flashLoan( + receiverAddress: PromiseOrValue, + assets: PromiseOrValue[], + amounts: PromiseOrValue[], + modes: PromiseOrValue[], + onBehalfOf: PromiseOrValue, + params: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAddressesProvider(overrides?: CallOverrides): Promise; + + getConfiguration(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedIncome(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedVariableDebt(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReservesList(overrides?: CallOverrides): Promise; + + getUserAccountData(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + getUserConfiguration(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + initReserve( + asset: PromiseOrValue, + aTokenAddress: PromiseOrValue, + stableDebtAddress: PromiseOrValue, + variableDebtAddress: PromiseOrValue, + interestRateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + provider: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + liquidationCall( + collateralAsset: PromiseOrValue, + debtAsset: PromiseOrValue, + user: PromiseOrValue, + debtToCover: PromiseOrValue, + receiveAToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + paused(overrides?: CallOverrides): Promise; + + rebalanceStableBorrowRate( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + repay( + asset: PromiseOrValue, + amount: PromiseOrValue, + rateMode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setConfiguration( + asset: PromiseOrValue, + configuration: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setPause( + val: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setReserveInterestRateStrategyAddress( + asset: PromiseOrValue, + rateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setUserUseReserveAsCollateral( + asset: PromiseOrValue, + useAsCollateral: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + swapBorrowRateMode( + asset: PromiseOrValue, + rateMode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + withdraw( + asset: PromiseOrValue, + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + }; + + populateTransaction: { + FLASHLOAN_PREMIUM_TOTAL(overrides?: CallOverrides): Promise; + + LENDINGPOOL_REVISION(overrides?: CallOverrides): Promise; + + MAX_NUMBER_RESERVES(overrides?: CallOverrides): Promise; + + MAX_STABLE_RATE_BORROW_SIZE_PERCENT(overrides?: CallOverrides): Promise; + + borrow( + asset: PromiseOrValue, + amount: PromiseOrValue, + interestRateMode: PromiseOrValue, + referralCode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + deposit( + asset: PromiseOrValue, + amount: PromiseOrValue, + onBehalfOf: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + finalizeTransfer( + asset: PromiseOrValue, + from: PromiseOrValue, + to: PromiseOrValue, + amount: PromiseOrValue, + balanceFromBefore: PromiseOrValue, + balanceToBefore: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + flashLoan( + receiverAddress: PromiseOrValue, + assets: PromiseOrValue[], + amounts: PromiseOrValue[], + modes: PromiseOrValue[], + onBehalfOf: PromiseOrValue, + params: PromiseOrValue, + referralCode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + getAddressesProvider(overrides?: CallOverrides): Promise; + + getConfiguration(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedIncome(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveNormalizedVariableDebt( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getReservesList(overrides?: CallOverrides): Promise; + + getUserAccountData(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + getUserConfiguration(user: PromiseOrValue, overrides?: CallOverrides): Promise; + + initReserve( + asset: PromiseOrValue, + aTokenAddress: PromiseOrValue, + stableDebtAddress: PromiseOrValue, + variableDebtAddress: PromiseOrValue, + interestRateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + initialize( + provider: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + liquidationCall( + collateralAsset: PromiseOrValue, + debtAsset: PromiseOrValue, + user: PromiseOrValue, + debtToCover: PromiseOrValue, + receiveAToken: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + paused(overrides?: CallOverrides): Promise; + + rebalanceStableBorrowRate( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + repay( + asset: PromiseOrValue, + amount: PromiseOrValue, + rateMode: PromiseOrValue, + onBehalfOf: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setConfiguration( + asset: PromiseOrValue, + configuration: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setPause( + val: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setReserveInterestRateStrategyAddress( + asset: PromiseOrValue, + rateStrategyAddress: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + setUserUseReserveAsCollateral( + asset: PromiseOrValue, + useAsCollateral: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + swapBorrowRateMode( + asset: PromiseOrValue, + rateMode: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + + withdraw( + asset: PromiseOrValue, + amount: PromiseOrValue, + to: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue }, + ): Promise; + }; +} diff --git a/src/apps/agave/contracts/ethers/AgaveProtocolDataProvider.ts b/src/apps/agave/contracts/ethers/AgaveProtocolDataProvider.ts new file mode 100644 index 000000000..817721c1c --- /dev/null +++ b/src/apps/agave/contracts/ethers/AgaveProtocolDataProvider.ts @@ -0,0 +1,348 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { BaseContract, BigNumber, BytesLike, CallOverrides, PopulatedTransaction, Signer, utils } from 'ethers'; +import type { FunctionFragment, Result } from '@ethersproject/abi'; +import type { Listener, Provider } from '@ethersproject/providers'; +import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from './common'; + +export declare namespace AaveProtocolDataProvider { + export type TokenDataStruct = { + symbol: PromiseOrValue; + tokenAddress: PromiseOrValue; + }; + + export type TokenDataStructOutput = [string, string] & { + symbol: string; + tokenAddress: string; + }; +} + +export interface AgaveProtocolDataProviderInterface extends utils.Interface { + functions: { + 'ADDRESSES_PROVIDER()': FunctionFragment; + 'getAllATokens()': FunctionFragment; + 'getAllReservesTokens()': FunctionFragment; + 'getReserveConfigurationData(address)': FunctionFragment; + 'getReserveData(address)': FunctionFragment; + 'getReserveTokensAddresses(address)': FunctionFragment; + 'getUserReserveData(address,address)': FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | 'ADDRESSES_PROVIDER' + | 'getAllATokens' + | 'getAllReservesTokens' + | 'getReserveConfigurationData' + | 'getReserveData' + | 'getReserveTokensAddresses' + | 'getUserReserveData', + ): FunctionFragment; + + encodeFunctionData(functionFragment: 'ADDRESSES_PROVIDER', values?: undefined): string; + encodeFunctionData(functionFragment: 'getAllATokens', values?: undefined): string; + encodeFunctionData(functionFragment: 'getAllReservesTokens', values?: undefined): string; + encodeFunctionData(functionFragment: 'getReserveConfigurationData', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getReserveData', values: [PromiseOrValue]): string; + encodeFunctionData(functionFragment: 'getReserveTokensAddresses', values: [PromiseOrValue]): string; + encodeFunctionData( + functionFragment: 'getUserReserveData', + values: [PromiseOrValue, PromiseOrValue], + ): string; + + decodeFunctionResult(functionFragment: 'ADDRESSES_PROVIDER', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAllATokens', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getAllReservesTokens', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReserveConfigurationData', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReserveData', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getReserveTokensAddresses', data: BytesLike): Result; + decodeFunctionResult(functionFragment: 'getUserReserveData', data: BytesLike): Result; + + events: {}; +} + +export interface AgaveProtocolDataProvider extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: AgaveProtocolDataProviderInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined, + ): Promise>; + + listeners(eventFilter?: TypedEventFilter): Array>; + listeners(eventName?: string): Array; + removeAllListeners(eventFilter: TypedEventFilter): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + ADDRESSES_PROVIDER(overrides?: CallOverrides): Promise<[string]>; + + getAllATokens(overrides?: CallOverrides): Promise<[AaveProtocolDataProvider.TokenDataStructOutput[]]>; + + getAllReservesTokens(overrides?: CallOverrides): Promise<[AaveProtocolDataProvider.TokenDataStructOutput[]]>; + + getReserveConfigurationData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, boolean, boolean, boolean, boolean, boolean] & { + decimals: BigNumber; + ltv: BigNumber; + liquidationThreshold: BigNumber; + liquidationBonus: BigNumber; + reserveFactor: BigNumber; + usageAsCollateralEnabled: boolean; + borrowingEnabled: boolean; + stableBorrowRateEnabled: boolean; + isActive: boolean; + isFrozen: boolean; + } + >; + + getReserveData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, number] & { + availableLiquidity: BigNumber; + totalStableDebt: BigNumber; + totalVariableDebt: BigNumber; + liquidityRate: BigNumber; + variableBorrowRate: BigNumber; + stableBorrowRate: BigNumber; + averageStableBorrowRate: BigNumber; + liquidityIndex: BigNumber; + variableBorrowIndex: BigNumber; + lastUpdateTimestamp: number; + } + >; + + getReserveTokensAddresses( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [string, string, string] & { + aTokenAddress: string; + stableDebtTokenAddress: string; + variableDebtTokenAddress: string; + } + >; + + getUserReserveData( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, number, boolean] & { + currentATokenBalance: BigNumber; + currentStableDebt: BigNumber; + currentVariableDebt: BigNumber; + principalStableDebt: BigNumber; + scaledVariableDebt: BigNumber; + stableBorrowRate: BigNumber; + liquidityRate: BigNumber; + stableRateLastUpdated: number; + usageAsCollateralEnabled: boolean; + } + >; + }; + + ADDRESSES_PROVIDER(overrides?: CallOverrides): Promise; + + getAllATokens(overrides?: CallOverrides): Promise; + + getAllReservesTokens(overrides?: CallOverrides): Promise; + + getReserveConfigurationData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, boolean, boolean, boolean, boolean, boolean] & { + decimals: BigNumber; + ltv: BigNumber; + liquidationThreshold: BigNumber; + liquidationBonus: BigNumber; + reserveFactor: BigNumber; + usageAsCollateralEnabled: boolean; + borrowingEnabled: boolean; + stableBorrowRateEnabled: boolean; + isActive: boolean; + isFrozen: boolean; + } + >; + + getReserveData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, number] & { + availableLiquidity: BigNumber; + totalStableDebt: BigNumber; + totalVariableDebt: BigNumber; + liquidityRate: BigNumber; + variableBorrowRate: BigNumber; + stableBorrowRate: BigNumber; + averageStableBorrowRate: BigNumber; + liquidityIndex: BigNumber; + variableBorrowIndex: BigNumber; + lastUpdateTimestamp: number; + } + >; + + getReserveTokensAddresses( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [string, string, string] & { + aTokenAddress: string; + stableDebtTokenAddress: string; + variableDebtTokenAddress: string; + } + >; + + getUserReserveData( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, number, boolean] & { + currentATokenBalance: BigNumber; + currentStableDebt: BigNumber; + currentVariableDebt: BigNumber; + principalStableDebt: BigNumber; + scaledVariableDebt: BigNumber; + stableBorrowRate: BigNumber; + liquidityRate: BigNumber; + stableRateLastUpdated: number; + usageAsCollateralEnabled: boolean; + } + >; + + callStatic: { + ADDRESSES_PROVIDER(overrides?: CallOverrides): Promise; + + getAllATokens(overrides?: CallOverrides): Promise; + + getAllReservesTokens(overrides?: CallOverrides): Promise; + + getReserveConfigurationData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, boolean, boolean, boolean, boolean, boolean] & { + decimals: BigNumber; + ltv: BigNumber; + liquidationThreshold: BigNumber; + liquidationBonus: BigNumber; + reserveFactor: BigNumber; + usageAsCollateralEnabled: boolean; + borrowingEnabled: boolean; + stableBorrowRateEnabled: boolean; + isActive: boolean; + isFrozen: boolean; + } + >; + + getReserveData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, number] & { + availableLiquidity: BigNumber; + totalStableDebt: BigNumber; + totalVariableDebt: BigNumber; + liquidityRate: BigNumber; + variableBorrowRate: BigNumber; + stableBorrowRate: BigNumber; + averageStableBorrowRate: BigNumber; + liquidityIndex: BigNumber; + variableBorrowIndex: BigNumber; + lastUpdateTimestamp: number; + } + >; + + getReserveTokensAddresses( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [string, string, string] & { + aTokenAddress: string; + stableDebtTokenAddress: string; + variableDebtTokenAddress: string; + } + >; + + getUserReserveData( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise< + [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, number, boolean] & { + currentATokenBalance: BigNumber; + currentStableDebt: BigNumber; + currentVariableDebt: BigNumber; + principalStableDebt: BigNumber; + scaledVariableDebt: BigNumber; + stableBorrowRate: BigNumber; + liquidityRate: BigNumber; + stableRateLastUpdated: number; + usageAsCollateralEnabled: boolean; + } + >; + }; + + filters: {}; + + estimateGas: { + ADDRESSES_PROVIDER(overrides?: CallOverrides): Promise; + + getAllATokens(overrides?: CallOverrides): Promise; + + getAllReservesTokens(overrides?: CallOverrides): Promise; + + getReserveConfigurationData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveTokensAddresses(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getUserReserveData( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + }; + + populateTransaction: { + ADDRESSES_PROVIDER(overrides?: CallOverrides): Promise; + + getAllATokens(overrides?: CallOverrides): Promise; + + getAllReservesTokens(overrides?: CallOverrides): Promise; + + getReserveConfigurationData( + asset: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + + getReserveData(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getReserveTokensAddresses(asset: PromiseOrValue, overrides?: CallOverrides): Promise; + + getUserReserveData( + asset: PromiseOrValue, + user: PromiseOrValue, + overrides?: CallOverrides, + ): Promise; + }; +} diff --git a/src/apps/agave/contracts/ethers/common.ts b/src/apps/agave/contracts/ethers/common.ts new file mode 100644 index 000000000..35f31be99 --- /dev/null +++ b/src/apps/agave/contracts/ethers/common.ts @@ -0,0 +1,32 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { Listener } from '@ethersproject/providers'; +import type { Event, EventFilter } from 'ethers'; + +export interface TypedEvent = any, TArgsObject = any> extends Event { + args: TArgsArray & TArgsObject; +} + +export interface TypedEventFilter<_TEvent extends TypedEvent> extends EventFilter {} + +export interface TypedListener { + (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +} + +type __TypechainArgsArray = T extends TypedEvent ? U : never; + +export interface OnEvent { + (eventFilter: TypedEventFilter, listener: TypedListener): TRes; + (eventName: string, listener: Listener): TRes; +} + +export type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; + +export type GetContractTypeFromFactory = F extends MinEthersFactory ? C : never; + +export type GetARGsTypeFromFactory = F extends MinEthersFactory ? Parameters : never; + +export type PromiseOrValue = T | Promise; diff --git a/src/apps/agave/contracts/ethers/factories/AgaveBaseIncentivesController__factory.ts b/src/apps/agave/contracts/ethers/factories/AgaveBaseIncentivesController__factory.ts new file mode 100644 index 000000000..a9ce2b370 --- /dev/null +++ b/src/apps/agave/contracts/ethers/factories/AgaveBaseIncentivesController__factory.ts @@ -0,0 +1,736 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from 'ethers'; +import type { Provider } from '@ethersproject/providers'; +import type { + AgaveBaseIncentivesController, + AgaveBaseIncentivesControllerInterface, +} from '../AgaveBaseIncentivesController'; + +const _abi = [ + { + type: 'constructor', + stateMutability: 'nonpayable', + inputs: [ + { + type: 'address', + name: 'rewardToken', + internalType: 'contract IERC20', + }, + { + type: 'address', + name: 'emissionManager', + internalType: 'address', + }, + ], + }, + { + type: 'event', + name: 'AssetConfigUpdated', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + indexed: true, + }, + { + type: 'uint8', + name: 'decimals', + internalType: 'uint8', + indexed: false, + }, + { + type: 'uint256', + name: 'emission', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'AssetIndexUpdated', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'index', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'BulkClaimerUpdated', + inputs: [ + { + type: 'address', + name: 'newBulkClaimer', + internalType: 'address', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'ClaimerSet', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'claimer', + internalType: 'address', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'DistributionEndUpdated', + inputs: [ + { + type: 'uint256', + name: 'newDistributionEnd', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'RewardTokenUpdated', + inputs: [ + { + type: 'address', + name: 'token', + internalType: 'address', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'RewardsAccrued', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'RewardsClaimed', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'to', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'claimer', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'RewardsVaultUpdated', + inputs: [ + { + type: 'address', + name: 'vault', + internalType: 'address', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'UserIndexUpdated', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'asset', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'index', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'address', + }, + ], + name: 'BULK_CLAIMER', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'DISTRIBUTION_END', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'address', + }, + ], + name: 'EMISSION_MANAGER', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint8', + name: '', + internalType: 'uint8', + }, + ], + name: 'PRECISION', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'REVISION', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'address', + }, + ], + name: 'REWARD_TOKEN', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint104', + name: 'emissionPerSecond', + internalType: 'uint104', + }, + { + type: 'uint104', + name: 'index', + internalType: 'uint104', + }, + { + type: 'uint40', + name: 'lastUpdateTimestamp', + internalType: 'uint40', + }, + { + type: 'uint8', + name: 'decimals', + internalType: 'uint8', + }, + { + type: 'bool', + name: 'disabled', + internalType: 'bool', + }, + ], + name: 'assets', + inputs: [ + { + type: 'address', + name: '', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'bulkClaimRewardsOnBehalf', + inputs: [ + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'address', + name: 'user', + internalType: 'address', + }, + { + type: 'address', + name: 'to', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'claimRewards', + inputs: [ + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'address', + name: 'to', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'claimRewardsOnBehalf', + inputs: [ + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'address', + name: 'user', + internalType: 'address', + }, + { + type: 'address', + name: 'to', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'configureAssets', + inputs: [ + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + { + type: 'uint256[]', + name: 'emissionsPerSecond', + internalType: 'uint256[]', + }, + { + type: 'uint256[]', + name: 'assetDecimals', + internalType: 'uint256[]', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'disableAssets', + inputs: [ + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + { + type: 'uint8', + name: '', + internalType: 'uint8', + }, + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + { + type: 'bool', + name: '', + internalType: 'bool', + }, + ], + name: 'getAssetData', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'address', + }, + ], + name: 'getClaimer', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'getDistributionEnd', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'getRewardsBalance', + inputs: [ + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + { + type: 'address', + name: 'user', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'address', + }, + ], + name: 'getRewardsVault', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'getUserAssetData', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + }, + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'getUserUnclaimedRewards', + inputs: [ + { + type: 'address', + name: '_user', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'handleAction', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + }, + { + type: 'uint256', + name: 'totalSupply', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'userBalance', + internalType: 'uint256', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'initialize', + inputs: [ + { + type: 'address', + name: 'rewardsVault', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setBulkClaimer', + inputs: [ + { + type: 'address', + name: 'bulkClaimer', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setClaimer', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + }, + { + type: 'address', + name: 'caller', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setDistributionEnd', + inputs: [ + { + type: 'uint256', + name: 'distributionEnd', + internalType: 'uint256', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setRewardToken', + inputs: [ + { + type: 'address', + name: 'rewardToken', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setRewardsVault', + inputs: [ + { + type: 'address', + name: 'rewardsVault', + internalType: 'address', + }, + ], + }, +]; + +export class AgaveBaseIncentivesController__factory { + static readonly abi = _abi; + static createInterface(): AgaveBaseIncentivesControllerInterface { + return new utils.Interface(_abi) as AgaveBaseIncentivesControllerInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): AgaveBaseIncentivesController { + return new Contract(address, _abi, signerOrProvider) as AgaveBaseIncentivesController; + } +} diff --git a/src/apps/agave/contracts/ethers/factories/AgaveLendingPoolProvider__factory.ts b/src/apps/agave/contracts/ethers/factories/AgaveLendingPoolProvider__factory.ts new file mode 100644 index 000000000..733a9d1f3 --- /dev/null +++ b/src/apps/agave/contracts/ethers/factories/AgaveLendingPoolProvider__factory.ts @@ -0,0 +1,1097 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from 'ethers'; +import type { Provider } from '@ethersproject/providers'; +import type { AgaveLendingPoolProvider, AgaveLendingPoolProviderInterface } from '../AgaveLendingPoolProvider'; + +const _abi = [ + { + type: 'event', + name: 'Borrow', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: false, + }, + { + type: 'address', + name: 'onBehalfOf', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'borrowRateMode', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'borrowRate', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint16', + name: 'referral', + internalType: 'uint16', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'Deposit', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: false, + }, + { + type: 'address', + name: 'onBehalfOf', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint16', + name: 'referral', + internalType: 'uint16', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'FlashLoan', + inputs: [ + { + type: 'address', + name: 'target', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'initiator', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'asset', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'premium', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint16', + name: 'referralCode', + internalType: 'uint16', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'LiquidationCall', + inputs: [ + { + type: 'address', + name: 'collateralAsset', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'debtAsset', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'debtToCover', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'liquidatedCollateralAmount', + internalType: 'uint256', + indexed: false, + }, + { + type: 'address', + name: 'liquidator', + internalType: 'address', + indexed: false, + }, + { + type: 'bool', + name: 'receiveAToken', + internalType: 'bool', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'Paused', + inputs: [], + anonymous: false, + }, + { + type: 'event', + name: 'RebalanceStableBorrowRate', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'Repay', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'repayer', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'ReserveDataUpdated', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'liquidityRate', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'stableBorrowRate', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'variableBorrowRate', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'liquidityIndex', + internalType: 'uint256', + indexed: false, + }, + { + type: 'uint256', + name: 'variableBorrowIndex', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'ReserveUsedAsCollateralDisabled', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'ReserveUsedAsCollateralEnabled', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'Swap', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'rateMode', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'event', + name: 'Unpaused', + inputs: [], + anonymous: false, + }, + { + type: 'event', + name: 'Withdraw', + inputs: [ + { + type: 'address', + name: 'reserve', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'user', + internalType: 'address', + indexed: true, + }, + { + type: 'address', + name: 'to', + internalType: 'address', + indexed: true, + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + indexed: false, + }, + ], + anonymous: false, + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'FLASHLOAN_PREMIUM_TOTAL', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'LENDINGPOOL_REVISION', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'MAX_NUMBER_RESERVES', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'MAX_STABLE_RATE_BORROW_SIZE_PERCENT', + inputs: [], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'borrow', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'interestRateMode', + internalType: 'uint256', + }, + { + type: 'uint16', + name: 'referralCode', + internalType: 'uint16', + }, + { + type: 'address', + name: 'onBehalfOf', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'deposit', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'address', + name: 'onBehalfOf', + internalType: 'address', + }, + { + type: 'uint16', + name: 'referralCode', + internalType: 'uint16', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'finalizeTransfer', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'address', + name: 'from', + internalType: 'address', + }, + { + type: 'address', + name: 'to', + internalType: 'address', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'balanceFromBefore', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'balanceToBefore', + internalType: 'uint256', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'flashLoan', + inputs: [ + { + type: 'address', + name: 'receiverAddress', + internalType: 'address', + }, + { + type: 'address[]', + name: 'assets', + internalType: 'address[]', + }, + { + type: 'uint256[]', + name: 'amounts', + internalType: 'uint256[]', + }, + { + type: 'uint256[]', + name: 'modes', + internalType: 'uint256[]', + }, + { + type: 'address', + name: 'onBehalfOf', + internalType: 'address', + }, + { + type: 'bytes', + name: 'params', + internalType: 'bytes', + }, + { + type: 'uint16', + name: 'referralCode', + internalType: 'uint16', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'contract ILendingPoolAddressesProvider', + }, + ], + name: 'getAddressesProvider', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'tuple', + name: '', + internalType: 'struct DataTypes.ReserveConfigurationMap', + components: [ + { + type: 'uint256', + name: 'data', + internalType: 'uint256', + }, + ], + }, + ], + name: 'getConfiguration', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'tuple', + name: '', + internalType: 'struct DataTypes.ReserveData', + components: [ + { + type: 'tuple', + name: 'configuration', + internalType: 'struct DataTypes.ReserveConfigurationMap', + components: [ + { + type: 'uint256', + name: 'data', + internalType: 'uint256', + }, + ], + }, + { + type: 'uint128', + name: 'liquidityIndex', + internalType: 'uint128', + }, + { + type: 'uint128', + name: 'variableBorrowIndex', + internalType: 'uint128', + }, + { + type: 'uint128', + name: 'currentLiquidityRate', + internalType: 'uint128', + }, + { + type: 'uint128', + name: 'currentVariableBorrowRate', + internalType: 'uint128', + }, + { + type: 'uint128', + name: 'currentStableBorrowRate', + internalType: 'uint128', + }, + { + type: 'uint40', + name: 'lastUpdateTimestamp', + internalType: 'uint40', + }, + { + type: 'address', + name: 'aTokenAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'stableDebtTokenAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'variableDebtTokenAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'interestRateStrategyAddress', + internalType: 'address', + }, + { + type: 'uint8', + name: 'id', + internalType: 'uint8', + }, + ], + }, + ], + name: 'getReserveData', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'getReserveNormalizedIncome', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'getReserveNormalizedVariableDebt', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address[]', + name: '', + internalType: 'address[]', + }, + ], + name: 'getReservesList', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: 'totalCollateralETH', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'totalDebtETH', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'availableBorrowsETH', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'currentLiquidationThreshold', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'ltv', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'healthFactor', + internalType: 'uint256', + }, + ], + name: 'getUserAccountData', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'tuple', + name: '', + internalType: 'struct DataTypes.UserConfigurationMap', + components: [ + { + type: 'uint256', + name: 'data', + internalType: 'uint256', + }, + ], + }, + ], + name: 'getUserConfiguration', + inputs: [ + { + type: 'address', + name: 'user', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'initReserve', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'address', + name: 'aTokenAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'stableDebtAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'variableDebtAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'interestRateStrategyAddress', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'initialize', + inputs: [ + { + type: 'address', + name: 'provider', + internalType: 'contract ILendingPoolAddressesProvider', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'liquidationCall', + inputs: [ + { + type: 'address', + name: 'collateralAsset', + internalType: 'address', + }, + { + type: 'address', + name: 'debtAsset', + internalType: 'address', + }, + { + type: 'address', + name: 'user', + internalType: 'address', + }, + { + type: 'uint256', + name: 'debtToCover', + internalType: 'uint256', + }, + { + type: 'bool', + name: 'receiveAToken', + internalType: 'bool', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'bool', + name: '', + internalType: 'bool', + }, + ], + name: 'paused', + inputs: [], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'rebalanceStableBorrowRate', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'address', + name: 'user', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'repay', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'rateMode', + internalType: 'uint256', + }, + { + type: 'address', + name: 'onBehalfOf', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setConfiguration', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'uint256', + name: 'configuration', + internalType: 'uint256', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setPause', + inputs: [ + { + type: 'bool', + name: 'val', + internalType: 'bool', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setReserveInterestRateStrategyAddress', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'address', + name: 'rateStrategyAddress', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'setUserUseReserveAsCollateral', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'bool', + name: 'useAsCollateral', + internalType: 'bool', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [], + name: 'swapBorrowRateMode', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'uint256', + name: 'rateMode', + internalType: 'uint256', + }, + ], + }, + { + type: 'function', + stateMutability: 'nonpayable', + outputs: [ + { + type: 'uint256', + name: '', + internalType: 'uint256', + }, + ], + name: 'withdraw', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'uint256', + name: 'amount', + internalType: 'uint256', + }, + { + type: 'address', + name: 'to', + internalType: 'address', + }, + ], + }, +]; + +export class AgaveLendingPoolProvider__factory { + static readonly abi = _abi; + static createInterface(): AgaveLendingPoolProviderInterface { + return new utils.Interface(_abi) as AgaveLendingPoolProviderInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): AgaveLendingPoolProvider { + return new Contract(address, _abi, signerOrProvider) as AgaveLendingPoolProvider; + } +} diff --git a/src/apps/agave/contracts/ethers/factories/AgaveProtocolDataProvider__factory.ts b/src/apps/agave/contracts/ethers/factories/AgaveProtocolDataProvider__factory.ts new file mode 100644 index 000000000..27e2a1445 --- /dev/null +++ b/src/apps/agave/contracts/ethers/factories/AgaveProtocolDataProvider__factory.ts @@ -0,0 +1,315 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { Contract, Signer, utils } from 'ethers'; +import type { Provider } from '@ethersproject/providers'; +import type { AgaveProtocolDataProvider, AgaveProtocolDataProviderInterface } from '../AgaveProtocolDataProvider'; + +const _abi = [ + { + type: 'constructor', + stateMutability: 'nonpayable', + inputs: [ + { + type: 'address', + name: 'addressesProvider', + internalType: 'contract ILendingPoolAddressesProvider', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: '', + internalType: 'contract ILendingPoolAddressesProvider', + }, + ], + name: 'ADDRESSES_PROVIDER', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'tuple[]', + name: '', + internalType: 'struct AaveProtocolDataProvider.TokenData[]', + components: [ + { + type: 'string', + name: 'symbol', + internalType: 'string', + }, + { + type: 'address', + name: 'tokenAddress', + internalType: 'address', + }, + ], + }, + ], + name: 'getAllATokens', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'tuple[]', + name: '', + internalType: 'struct AaveProtocolDataProvider.TokenData[]', + components: [ + { + type: 'string', + name: 'symbol', + internalType: 'string', + }, + { + type: 'address', + name: 'tokenAddress', + internalType: 'address', + }, + ], + }, + ], + name: 'getAllReservesTokens', + inputs: [], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: 'decimals', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'ltv', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'liquidationThreshold', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'liquidationBonus', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'reserveFactor', + internalType: 'uint256', + }, + { + type: 'bool', + name: 'usageAsCollateralEnabled', + internalType: 'bool', + }, + { + type: 'bool', + name: 'borrowingEnabled', + internalType: 'bool', + }, + { + type: 'bool', + name: 'stableBorrowRateEnabled', + internalType: 'bool', + }, + { + type: 'bool', + name: 'isActive', + internalType: 'bool', + }, + { + type: 'bool', + name: 'isFrozen', + internalType: 'bool', + }, + ], + name: 'getReserveConfigurationData', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: 'availableLiquidity', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'totalStableDebt', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'totalVariableDebt', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'liquidityRate', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'variableBorrowRate', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'stableBorrowRate', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'averageStableBorrowRate', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'liquidityIndex', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'variableBorrowIndex', + internalType: 'uint256', + }, + { + type: 'uint40', + name: 'lastUpdateTimestamp', + internalType: 'uint40', + }, + ], + name: 'getReserveData', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'address', + name: 'aTokenAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'stableDebtTokenAddress', + internalType: 'address', + }, + { + type: 'address', + name: 'variableDebtTokenAddress', + internalType: 'address', + }, + ], + name: 'getReserveTokensAddresses', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + ], + }, + { + type: 'function', + stateMutability: 'view', + outputs: [ + { + type: 'uint256', + name: 'currentATokenBalance', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'currentStableDebt', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'currentVariableDebt', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'principalStableDebt', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'scaledVariableDebt', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'stableBorrowRate', + internalType: 'uint256', + }, + { + type: 'uint256', + name: 'liquidityRate', + internalType: 'uint256', + }, + { + type: 'uint40', + name: 'stableRateLastUpdated', + internalType: 'uint40', + }, + { + type: 'bool', + name: 'usageAsCollateralEnabled', + internalType: 'bool', + }, + ], + name: 'getUserReserveData', + inputs: [ + { + type: 'address', + name: 'asset', + internalType: 'address', + }, + { + type: 'address', + name: 'user', + internalType: 'address', + }, + ], + }, +]; + +export class AgaveProtocolDataProvider__factory { + static readonly abi = _abi; + static createInterface(): AgaveProtocolDataProviderInterface { + return new utils.Interface(_abi) as AgaveProtocolDataProviderInterface; + } + static connect(address: string, signerOrProvider: Signer | Provider): AgaveProtocolDataProvider { + return new Contract(address, _abi, signerOrProvider) as AgaveProtocolDataProvider; + } +} diff --git a/src/apps/agave/contracts/ethers/factories/index.ts b/src/apps/agave/contracts/ethers/factories/index.ts new file mode 100644 index 000000000..7501ad246 --- /dev/null +++ b/src/apps/agave/contracts/ethers/factories/index.ts @@ -0,0 +1,6 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { AgaveBaseIncentivesController__factory } from './AgaveBaseIncentivesController__factory'; +export { AgaveLendingPoolProvider__factory } from './AgaveLendingPoolProvider__factory'; +export { AgaveProtocolDataProvider__factory } from './AgaveProtocolDataProvider__factory'; diff --git a/src/apps/agave/contracts/ethers/index.ts b/src/apps/agave/contracts/ethers/index.ts new file mode 100644 index 000000000..86b04b2ee --- /dev/null +++ b/src/apps/agave/contracts/ethers/index.ts @@ -0,0 +1,10 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { AgaveBaseIncentivesController } from './AgaveBaseIncentivesController'; +export type { AgaveLendingPoolProvider } from './AgaveLendingPoolProvider'; +export type { AgaveProtocolDataProvider } from './AgaveProtocolDataProvider'; +export * as factories from './factories'; +export { AgaveBaseIncentivesController__factory } from './factories/AgaveBaseIncentivesController__factory'; +export { AgaveLendingPoolProvider__factory } from './factories/AgaveLendingPoolProvider__factory'; +export { AgaveProtocolDataProvider__factory } from './factories/AgaveProtocolDataProvider__factory'; diff --git a/src/apps/agave/contracts/index.ts b/src/apps/agave/contracts/index.ts new file mode 100644 index 000000000..6a8b95d04 --- /dev/null +++ b/src/apps/agave/contracts/index.ts @@ -0,0 +1,33 @@ +import { Injectable, Inject } from '@nestjs/common'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { ContractFactory } from '~contract/contracts'; +import { Network } from '~types/network.interface'; + +import { AgaveBaseIncentivesController__factory } from './ethers'; +import { AgaveLendingPoolProvider__factory } from './ethers'; +import { AgaveProtocolDataProvider__factory } from './ethers'; + +// eslint-disable-next-line +type ContractOpts = { address: string; network: Network }; + +@Injectable() +export class AgaveContractFactory extends ContractFactory { + constructor(@Inject(APP_TOOLKIT) protected readonly appToolkit: IAppToolkit) { + super((network: Network) => appToolkit.getNetworkProvider(network)); + } + + agaveBaseIncentivesController({ address, network }: ContractOpts) { + return AgaveBaseIncentivesController__factory.connect(address, this.appToolkit.getNetworkProvider(network)); + } + agaveLendingPoolProvider({ address, network }: ContractOpts) { + return AgaveLendingPoolProvider__factory.connect(address, this.appToolkit.getNetworkProvider(network)); + } + agaveProtocolDataProvider({ address, network }: ContractOpts) { + return AgaveProtocolDataProvider__factory.connect(address, this.appToolkit.getNetworkProvider(network)); + } +} + +export type { AgaveBaseIncentivesController } from './ethers'; +export type { AgaveLendingPoolProvider } from './ethers'; +export type { AgaveProtocolDataProvider } from './ethers'; diff --git a/src/apps/agave/gnosis/agave.balance-fetcher.ts b/src/apps/agave/gnosis/agave.balance-fetcher.ts new file mode 100644 index 000000000..7738a7713 --- /dev/null +++ b/src/apps/agave/gnosis/agave.balance-fetcher.ts @@ -0,0 +1,84 @@ +import { Inject } from '@nestjs/common'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { Register } from '~app-toolkit/decorators'; +import { presentBalanceFetcherResponse } from '~app-toolkit/helpers/presentation/balance-fetcher-response.present'; +import { AaveV2LendingBalanceHelper, AaveV2ClaimableBalanceHelper, AaveV2HealthFactorMetaHelper } from '~apps/aave-v2'; +import { BalanceFetcher } from '~balance/balance-fetcher.interface'; +import { Network } from '~types/network.interface'; + +import { AGAVE_DEFINITION } from '../agave.definition'; + +const network = Network.GNOSIS_MAINNET; + +@Register.BalanceFetcher(AGAVE_DEFINITION.id, network) +export class GnosisAgaveBalanceFetcher implements BalanceFetcher { + constructor( + @Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit, + @Inject(AaveV2LendingBalanceHelper) private readonly aaveV2LendingBalanceHelper: AaveV2LendingBalanceHelper, + @Inject(AaveV2ClaimableBalanceHelper) private readonly aaveV2ClaimableBalanceHelper: AaveV2ClaimableBalanceHelper, + @Inject(AaveV2HealthFactorMetaHelper) private readonly healthFactorHelper: AaveV2HealthFactorMetaHelper, + ) {} + + async getLendingBalances(address: string) { + return Promise.all([ + this.aaveV2LendingBalanceHelper.getLendingContractPositionBalances({ + address, + appId: AGAVE_DEFINITION.id, + groupId: AGAVE_DEFINITION.groups.deposit.id, + network, + }), + this.aaveV2LendingBalanceHelper.getLendingContractPositionBalances({ + address, + appId: AGAVE_DEFINITION.id, + groupId: AGAVE_DEFINITION.groups.stableBorrow.id, + network, + isDebt: true, + }), + this.aaveV2LendingBalanceHelper.getLendingContractPositionBalances({ + address, + appId: AGAVE_DEFINITION.id, + groupId: AGAVE_DEFINITION.groups.variableBorrow.id, + network, + isDebt: true, + }), + ]).then(v => v.flat()); + } + + private async getClaimableBalances(address: string) { + return this.aaveV2ClaimableBalanceHelper.getClaimableBalances({ + address, + appId: AGAVE_DEFINITION.id, + groupId: AGAVE_DEFINITION.groups.claimable.id, + network, + }); + } + + private async getHealthFactorMeta(address: string) { + return this.healthFactorHelper.getHealthFactor({ + address, + network, + lendingPoolAddress: '0x5e15d5e33d318dced84bfe3f4eace07909be6d9c', + }); + } + + async getBalances(address: string) { + const [lendingBalances, claimable, healthFactorMeta] = await Promise.all([ + this.getLendingBalances(address), + this.getClaimableBalances(address), + this.getHealthFactorMeta(address), + ]); + + return presentBalanceFetcherResponse([ + { + label: 'Lending', + assets: lendingBalances, + meta: lendingBalances.find(v => v.balanceUSD < 0) ? [healthFactorMeta] : [], + }, + { + label: 'Reward', + assets: claimable, + }, + ]); + } +} diff --git a/src/apps/agave/gnosis/agave.claimable.contract-position-fetcher.ts b/src/apps/agave/gnosis/agave.claimable.contract-position-fetcher.ts new file mode 100644 index 000000000..a99abf543 --- /dev/null +++ b/src/apps/agave/gnosis/agave.claimable.contract-position-fetcher.ts @@ -0,0 +1,36 @@ +import { Inject } from '@nestjs/common'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { Register } from '~app-toolkit/decorators'; +import { AaveV2ClaimableContractPositionHelper } from '~apps/aave-v2/helpers/aave-v2.claimable.contract-position-helper'; +import { PositionFetcher } from '~position/position-fetcher.interface'; +import { ContractPosition } from '~position/position.interface'; +import { Network } from '~types/network.interface'; + +import { AGAVE_DEFINITION } from '../agave.definition'; +import { AgaveContractFactory } from '../contracts'; + +const appId = AGAVE_DEFINITION.id; +const groupId = AGAVE_DEFINITION.groups.claimable.id; +const network = Network.GNOSIS_MAINNET; + +@Register.ContractPositionFetcher({ appId, groupId, network }) +export class GnosisAgaveClaimableContractPositionFetcher implements PositionFetcher { + constructor( + @Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit, + @Inject(AgaveContractFactory) private readonly agaveContractFactory: AgaveContractFactory, + @Inject(AaveV2ClaimableContractPositionHelper) + private readonly aaveV2ClaimableContractPositionHelper: AaveV2ClaimableContractPositionHelper, + ) {} + + async getPositions() { + return this.aaveV2ClaimableContractPositionHelper.getTokens({ + appId, + groupId, + network, + incentivesControllerAddress: '0xfa255f5104f129b78f477e9a6d050a02f31a5d86', + protocolDataProviderAddress: '0x24dcbd376db23e4771375092344f5cbea3541fc0', + rewardTokenAddress: '0x3a97704a1b25f08aa230ae53b352e2e72ef52843', + }); + } +} diff --git a/src/apps/agave/gnosis/agave.deposit.token-fetcher.ts b/src/apps/agave/gnosis/agave.deposit.token-fetcher.ts new file mode 100644 index 000000000..b3dc9cfb0 --- /dev/null +++ b/src/apps/agave/gnosis/agave.deposit.token-fetcher.ts @@ -0,0 +1,39 @@ +import { Inject } from '@nestjs/common'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { Register } from '~app-toolkit/decorators'; +import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present'; +import { AaveV2LendingTokenHelper } from '~apps/aave-v2/helpers/aave-v2.lending.token-helper'; +import { PositionFetcher } from '~position/position-fetcher.interface'; +import { AppTokenPosition } from '~position/position.interface'; +import { Network } from '~types/network.interface'; + +import { AGAVE_DEFINITION } from '../agave.definition'; +import { AgaveContractFactory } from '../contracts'; + +const appId = AGAVE_DEFINITION.id; +const groupId = AGAVE_DEFINITION.groups.deposit.id; +const network = Network.GNOSIS_MAINNET; + +@Register.TokenPositionFetcher({ appId, groupId, network }) +export class GnosisAgaveDepositTokenFetcher implements PositionFetcher { + constructor( + @Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit, + @Inject(AgaveContractFactory) private readonly agaveContractFactory: AgaveContractFactory, + @Inject(AaveV2LendingTokenHelper) private readonly aaveV2LendingTokenHelper: AaveV2LendingTokenHelper, + ) {} + + async getPositions() { + return this.aaveV2LendingTokenHelper.getTokens({ + appId, + groupId, + network, + protocolDataProviderAddress: '0x24dcbd376db23e4771375092344f5cbea3541fc0', + resolveTokenAddress: ({ reserveTokenAddressesData }) => reserveTokenAddressesData.aTokenAddress, + resolveLendingRate: ({ reserveData }) => reserveData.liquidityRate, + resolveLabel: ({ reserveToken }) => getLabelFromToken(reserveToken), + resolveApyLabel: ({ apy }) => `${(apy * 100).toFixed(3)}% APY`, + exchangeable: true, + }); + } +} diff --git a/src/apps/agave/gnosis/agave.stable-borrow.token-fetcher.ts b/src/apps/agave/gnosis/agave.stable-borrow.token-fetcher.ts new file mode 100644 index 000000000..60e579054 --- /dev/null +++ b/src/apps/agave/gnosis/agave.stable-borrow.token-fetcher.ts @@ -0,0 +1,38 @@ +import { Inject } from '@nestjs/common'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { Register } from '~app-toolkit/decorators'; +import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present'; +import { AaveV2LendingTokenHelper } from '~apps/aave-v2/helpers/aave-v2.lending.token-helper'; +import { PositionFetcher } from '~position/position-fetcher.interface'; +import { AppTokenPosition } from '~position/position.interface'; +import { Network } from '~types/network.interface'; + +import { AGAVE_DEFINITION } from '../agave.definition'; +import { AgaveContractFactory } from '../contracts'; + +const appId = AGAVE_DEFINITION.id; +const groupId = AGAVE_DEFINITION.groups.stableBorrow.id; +const network = Network.GNOSIS_MAINNET; + +@Register.TokenPositionFetcher({ appId, groupId, network }) +export class GnosisAgaveStableBorrowTokenFetcher implements PositionFetcher { + constructor( + @Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit, + @Inject(AgaveContractFactory) private readonly agaveContractFactory: AgaveContractFactory, + @Inject(AaveV2LendingTokenHelper) private readonly aaveV2LendingTokenHelper: AaveV2LendingTokenHelper, + ) {} + + async getPositions() { + return this.aaveV2LendingTokenHelper.getTokens({ + appId, + groupId, + network, + protocolDataProviderAddress: '0x24dcbd376db23e4771375092344f5cbea3541fc0', + resolveTokenAddress: ({ reserveTokenAddressesData }) => reserveTokenAddressesData.stableDebtTokenAddress, + resolveLendingRate: ({ reserveData }) => reserveData.stableBorrowRate, + resolveLabel: ({ reserveToken }) => `Borrowed ${getLabelFromToken(reserveToken)}`, + resolveApyLabel: ({ apy }) => `${(apy * 100).toFixed(3)}% APR (stable)`, + }); + } +} diff --git a/src/apps/agave/gnosis/agave.tvl-fetcher.ts b/src/apps/agave/gnosis/agave.tvl-fetcher.ts new file mode 100644 index 000000000..2500e0909 --- /dev/null +++ b/src/apps/agave/gnosis/agave.tvl-fetcher.ts @@ -0,0 +1,26 @@ +import { Inject } from '@nestjs/common'; +import { sumBy } from 'lodash'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { Register } from '~app-toolkit/decorators'; +import { TvlFetcher } from '~stats/tvl/tvl-fetcher.interface'; +import { Network } from '~types/network.interface'; + +import { AGAVE_DEFINITION } from '../agave.definition'; + +const appId = AGAVE_DEFINITION.id; +const network = Network.GNOSIS_MAINNET; + +@Register.TvlFetcher({ appId, network }) +export class GnosisAgaveTvlFetcher implements TvlFetcher { + constructor(@Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit) {} + + async getTvl() { + const agaveDepositTokens = await this.appToolkit.getAppTokenPositions({ + appId: AGAVE_DEFINITION.id, + groupIds: [AGAVE_DEFINITION.groups.deposit.id], + network: Network.GNOSIS_MAINNET, + }); + return sumBy(agaveDepositTokens, v => v.supply * v.price); + } +} diff --git a/src/apps/agave/gnosis/agave.variable-borrow.token-fetcher.ts b/src/apps/agave/gnosis/agave.variable-borrow.token-fetcher.ts new file mode 100644 index 000000000..76f9094a2 --- /dev/null +++ b/src/apps/agave/gnosis/agave.variable-borrow.token-fetcher.ts @@ -0,0 +1,39 @@ +import { Inject } from '@nestjs/common'; + +import { IAppToolkit, APP_TOOLKIT } from '~app-toolkit/app-toolkit.interface'; +import { Register } from '~app-toolkit/decorators'; +import { getLabelFromToken } from '~app-toolkit/helpers/presentation/image.present'; +import { AaveV2LendingTokenHelper } from '~apps/aave-v2/helpers/aave-v2.lending.token-helper'; +import { PositionFetcher } from '~position/position-fetcher.interface'; +import { AppTokenPosition } from '~position/position.interface'; +import { Network } from '~types/network.interface'; + +import { AGAVE_DEFINITION } from '../agave.definition'; +import { AgaveContractFactory } from '../contracts'; + +const appId = AGAVE_DEFINITION.id; +const groupId = AGAVE_DEFINITION.groups.variableBorrow.id; +const network = Network.GNOSIS_MAINNET; + +@Register.TokenPositionFetcher({ appId, groupId, network }) +export class GnosisAgaveVariableBorrowTokenFetcher implements PositionFetcher { + constructor( + @Inject(APP_TOOLKIT) private readonly appToolkit: IAppToolkit, + @Inject(AgaveContractFactory) private readonly agaveContractFactory: AgaveContractFactory, + @Inject(AaveV2LendingTokenHelper) + private readonly aaveV2LendingTokenHelper: AaveV2LendingTokenHelper, + ) {} + + async getPositions() { + return this.aaveV2LendingTokenHelper.getTokens({ + appId, + groupId, + network, + protocolDataProviderAddress: '0x24dcbd376db23e4771375092344f5cbea3541fc0', + resolveTokenAddress: ({ reserveTokenAddressesData }) => reserveTokenAddressesData.variableDebtTokenAddress, + resolveLendingRate: ({ reserveData }) => reserveData.variableBorrowRate, + resolveLabel: ({ reserveToken }) => `Borrowed ${getLabelFromToken(reserveToken)}`, + resolveApyLabel: ({ apy }) => `${(apy * 100).toFixed(3)}% APR (variable)`, + }); + } +} diff --git a/src/apps/agave/index.ts b/src/apps/agave/index.ts new file mode 100644 index 000000000..c43af4e61 --- /dev/null +++ b/src/apps/agave/index.ts @@ -0,0 +1,3 @@ +export { AGAVE_DEFINITION, AgaveAppDefinition } from './agave.definition'; +export { AgaveAppModule } from './agave.module'; +export { AgaveContractFactory } from './contracts';