diff --git a/src/adaptors/monolith-market/index.js b/src/adaptors/monolith-market/index.js new file mode 100644 index 0000000000..81bfd6f2e2 --- /dev/null +++ b/src/adaptors/monolith-market/index.js @@ -0,0 +1,167 @@ +const sdk = require('@defillama/sdk'); +const utils = require('../utils'); +const lensAbi = require('./lensAbi'); +const lenderAbi = require('./lenderAbi'); +const vaultAbi = require('./vaultAbi'); + +const PROJECT = 'monolith-market'; + +const FACTORIES = { + ethereum: { chainId: 1, blocksPerYear: 2609750, factory: '0x6D961c9DCF1AD73566822BA4B087892e3839B849', lens: '0x0f3a7cd1828698D2B6daEf081d5c319c0734fA1c', fromBlock: 24949282 }, +} + +const simpleCalls = (arr, params) => { + return arr.map(a => ({ target: a, params, permitFailure: true })) +} + +async function getChainPools(chain) { + const latestBlock = await sdk.api.util.getLatestBlock(chain); + + const toBlock = latestBlock.number; + + const { factory, chainId, lens, blocksPerYear, fromBlock } = FACTORIES[chain]; + + const logs = await sdk.getEventLogs({ + target: factory, + fromBlock, + toBlock, + chain, + eventAbi: 'event Deployed(address indexed lender, address indexed coin, address indexed vault)', + }); + + const lenders = logs.map(l => l.args.lender); + const coins = logs.map(l => l.args.coin); + const vaults = logs.map(l => l.args.vault); + + const [ + rates, + vaultSymbols, + coinSymbols, + vaultAssets, + totalPaidDebts, + totalFreeDebts, + collateralFactors, + collaterals, + collateralsPriceData, + ] = (await Promise.all([ + sdk.api.abi.multiCall({ + chain, abi: lensAbi.find(a => a.name === 'getRates'), calls: lenders.map(lender => { + return { + target: lens, + params: [lender], + permitFailure: true, + } + }) + }), + sdk.api.abi.multiCall({ chain, abi: 'erc20:symbol', calls: simpleCalls(vaults) }), + sdk.api.abi.multiCall({ chain, abi: 'erc20:symbol', calls: simpleCalls(coins) }), + sdk.api.abi.multiCall({ chain, abi: vaultAbi.find(a => a.name === 'totalAssets'), calls: simpleCalls(vaults) }), + sdk.api.abi.multiCall({ chain, abi: lenderAbi.find(a => a.name === 'totalPaidDebt'), calls: simpleCalls(lenders) }), + sdk.api.abi.multiCall({ chain, abi: lenderAbi.find(a => a.name === 'totalFreeDebt'), calls: simpleCalls(lenders) }), + sdk.api.abi.multiCall({ chain, abi: lenderAbi.find(a => a.name === 'collateralFactor'), calls: simpleCalls(lenders) }), + sdk.api.abi.multiCall({ chain, abi: lenderAbi.find(a => a.name === 'collateral'), calls: simpleCalls(lenders) }), + sdk.api.abi.multiCall({ chain, abi: lenderAbi.find(a => a.name === 'getCollateralPrice'), calls: simpleCalls(lenders) }), + ])).map(r => r.output.map(o => o.output)); + + const [ + collateralSymbols, + collateralDecimals, + collateralDeposits, + pricesData, + ] = (await Promise.all([ + sdk.api.abi.multiCall({ chain, abi: 'erc20:symbol', calls: simpleCalls(collaterals) }), + sdk.api.abi.multiCall({ chain, abi: 'erc20:decimals', calls: simpleCalls(collaterals) }), + sdk.api.abi.multiCall({ + chain, abi: 'erc20:balanceOf', calls: collaterals.map((col,i) => { + return { + target: col, + params: [lenders[i]], + permitFailure: true, + } + }) + }), + utils.getPrices(coins.concat(collaterals), chain), + ])).map(r => r.output ? r.output.map(o => o.output) : r); + + const { pricesByAddress } = pricesData; + + // CDP markets, where coins are minted against collaterals + const cdpMarkets = lenders.map((m, marketIndex) => { + const collateral = collaterals[marketIndex]; + const collateralSymbol = collateralSymbols[marketIndex]; + const collateralDecimal = collateralDecimals[marketIndex]; + const mintedCoin = coinSymbols[marketIndex]; + + const coin = coins[marketIndex]; + const coinPriceUsd = pricesByAddress[coin.toLowerCase()] || 0; + + const { price: oraclePrice } = collateralsPriceData[marketIndex]; + const oraclePriceUsd = (Number(oraclePrice) / (10 ** (36 - collateralDecimal))) || 0; + // use defillama if available otherwise fallback to oracle price + const collateralPriceUsd = pricesByAddress[collateral.toLowerCase()] || oraclePriceUsd; + const totalSupplyUsd = collateralPriceUsd * Number(collateralDeposits[marketIndex]) / (10 ** collateralDecimal) + const totalBorrowUsd = coinPriceUsd * (Number(totalPaidDebts[marketIndex]) / 1e18 + Number(totalFreeDebts[marketIndex]) / 1e18); + const borrowApr = Math.min(Number(rates[marketIndex][0]) / 1e16, 999_999_999); + const borrowApy = borrowApr < 999_999_999 ? Math.min(999_999_999, utils.aprToApy(borrowApr, blocksPerYear)) : 999_999_999; + + return { + pool: `monolith-market-lending-${m}`, + chain: 'Ethereum', + project: PROJECT, + symbol: collateralSymbol, + mintedCoin, + borrowToken: coin, + apyBase: 0, + // cdp => tvlUsd = totalSupplyUsd + tvlUsd: totalSupplyUsd, + underlyingTokens: [collateral], + url: 'https://app.monolith.market/1/coin/' + marketIndex, + totalSupplyUsd, + totalBorrowUsd, + apyBaseBorrow: borrowApy, + borrowable: true, + ltv: Number(collateralFactors[marketIndex]) / 1e4, + }; + }); + + // savings vaults (ERC4626), a vault's asset is the coin minted by the cdp markets + const savingsVaults = lenders.map((m, marketIndex) => { + const underlying = coins[marketIndex]; + const vaultSymbol = vaultSymbols[marketIndex]; + const coinPriceUsd = pricesByAddress[underlying.toLowerCase()] || 0; + const totalSupplyUsd = coinPriceUsd * Number(vaultAssets[marketIndex]) / 1e18 + const stakingApr = Number(rates[marketIndex][1]) / 1e16; + const apy = utils.aprToApy(stakingApr, blocksPerYear); + + return { + pool: `monolith-market-savings-${vaults[marketIndex]}`, + chain: 'Ethereum', + project: PROJECT, + symbol: vaultSymbol, + tvlUsd: totalSupplyUsd, + apyBase: apy, + underlyingTokens: [underlying], + url: 'https://app.monolith.market/1/coin/' + marketIndex, + totalSupplyUsd, + borrowable: false, + }; + }); + + return cdpMarkets.concat(savingsVaults).filter((p) => utils.keepFinite(p)); +} + +async function apy() { + const factoriesChains = Object.keys(FACTORIES); + + const chainPools = await Promise.all( + factoriesChains.map(factoryChain => getChainPools(factoryChain)) + ) + + return chainPools.flat(); +} + +module.exports = { + timetravel: false, + apy, + url: 'https://app.monolith.market', +}; \ No newline at end of file diff --git a/src/adaptors/monolith-market/lenderAbi.ts b/src/adaptors/monolith-market/lenderAbi.ts new file mode 100644 index 0000000000..9c2fc2053d --- /dev/null +++ b/src/adaptors/monolith-market/lenderAbi.ts @@ -0,0 +1 @@ +module.exports = [{"type":"constructor","inputs":[{"name":"params","type":"tuple","internalType":"struct Lender.LenderParams","components":[{"name":"collateral","type":"address","internalType":"contract ERC20"},{"name":"psmAsset","type":"address","internalType":"contract ERC20"},{"name":"psmVault","type":"address","internalType":"contract ERC4626"},{"name":"feed","type":"address","internalType":"contract IChainlinkFeed"},{"name":"coin","type":"address","internalType":"contract Coin"},{"name":"vault","type":"address","internalType":"contract Vault"},{"name":"interestModel","type":"address","internalType":"contract InterestModel"},{"name":"factory","type":"address","internalType":"contract IFactory"},{"name":"operator","type":"address","internalType":"address"},{"name":"manager","type":"address","internalType":"address"},{"name":"collateralFactor","type":"uint256","internalType":"uint256"},{"name":"minDebt","type":"uint256","internalType":"uint256"},{"name":"timeUntilImmutability","type":"uint256","internalType":"uint256"},{"name":"halfLife","type":"uint64","internalType":"uint64"},{"name":"targetFreeDebtRatioStartBps","type":"uint16","internalType":"uint16"},{"name":"targetFreeDebtRatioEndBps","type":"uint16","internalType":"uint16"},{"name":"redeemFeeBps","type":"uint16","internalType":"uint16"},{"name":"stalenessThreshold","type":"uint32","internalType":"uint32"},{"name":"maxBorrowDeltaBps","type":"uint16","internalType":"uint16"},{"name":"psmVaultMinTotalSupply","type":"uint128","internalType":"uint128"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_DECIMALS","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"MIN_LIQUIDATION_DEBT","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"STALENESS_UNWIND_DURATION","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"acceptOperator","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"accrueInterest","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"accruedGlobalReserves","inputs":[],"outputs":[{"name":"","type":"uint120","internalType":"uint120"}],"stateMutability":"view"},{"type":"function","name":"accruedLocalReserves","inputs":[],"outputs":[{"name":"","type":"uint120","internalType":"uint120"}],"stateMutability":"view"},{"type":"function","name":"adjust","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"collateralDelta","type":"int256","internalType":"int256"},{"name":"debtDelta","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"adjust","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"collateralDelta","type":"int256","internalType":"int256"},{"name":"debtDelta","type":"int256","internalType":"int256"},{"name":"chooseRedeemable","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"buy","inputs":[{"name":"assetIn","type":"uint256","internalType":"uint256"},{"name":"minCoinOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"coinOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"cachedGlobalFeeBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"coin","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Coin"}],"stateMutability":"view"},{"type":"function","name":"collateral","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ERC20"}],"stateMutability":"view"},{"type":"function","name":"collateralBalances","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"collateralDecimals","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"collateralFactor","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"delegate","inputs":[{"name":"delegatee","type":"address","internalType":"address"},{"name":"isDelegatee","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"delegations","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"deployTimestamp","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"enableImmutabilityNow","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expRate","inputs":[],"outputs":[{"name":"","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IFactory"}],"stateMutability":"view"},{"type":"function","name":"feeBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"feed","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IChainlinkFeed"}],"stateMutability":"view"},{"type":"function","name":"freeDebtShares","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"freePsmAssets","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBuyAmountOut","inputs":[{"name":"assetIn","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"coinOut","type":"uint256","internalType":"uint256"},{"name":"coinFee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBuyFeeBps","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCollateralPrice","inputs":[],"outputs":[{"name":"price","type":"uint256","internalType":"uint256"},{"name":"reduceOnly","type":"bool","internalType":"bool"},{"name":"allowLiquidations","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getDebtOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getFeedPrice","inputs":[],"outputs":[{"name":"price","type":"uint256","internalType":"uint256"},{"name":"updatedAt","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getFreeDebtRatio","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPendingInterest","inputs":[],"outputs":[{"name":"pendingVaultInterest","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getSellAmountOut","inputs":[{"name":"coinIn","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"assetOut","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"immutabilityDeadline","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"interestModel","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract InterestModel"}],"stateMutability":"view"},{"type":"function","name":"isRedeemable","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastAccrue","inputs":[],"outputs":[{"name":"","type":"uint40","internalType":"uint40"}],"stateMutability":"view"},{"type":"function","name":"lastBorrowRateMantissa","inputs":[],"outputs":[{"name":"","type":"uint88","internalType":"uint88"}],"stateMutability":"view"},{"type":"function","name":"liquidate","inputs":[{"name":"borrower","type":"address","internalType":"address"},{"name":"repayAmount","type":"uint256","internalType":"uint256"},{"name":"minCollateralOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"manager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"maxBorrowDeltaBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"minDebt","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"operator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"paidDebtShares","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pendingOperator","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"psmAsset","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ERC20"}],"stateMutability":"view"},{"type":"function","name":"psmAssetDecimals","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"psmVault","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ERC4626"}],"stateMutability":"view"},{"type":"function","name":"psmVaultMinTotalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"pullGlobalReserves","inputs":[{"name":"_to","type":"address","internalType":"address"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"pullLocalReserves","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reapprovePsmVault","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"redeem","inputs":[{"name":"borrower","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"},{"name":"minAmountOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"redeemFeeBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"sell","inputs":[{"name":"coinIn","type":"uint256","internalType":"uint256"},{"name":"minAssetOut","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"assetOut","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"setHalfLife","inputs":[{"name":"halfLife","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setLocalReserveFeeBps","inputs":[{"name":"_feeBps","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setManager","inputs":[{"name":"_manager","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMaxBorrowDeltaBps","inputs":[{"name":"_maxBorrowDeltaBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPendingOperator","inputs":[{"name":"_pendingOperator","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRedeemFeeBps","inputs":[{"name":"_redeemFeeBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRedemptionStatus","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"chooseRedeemable","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTargetFreeDebtRatio","inputs":[{"name":"startBps","type":"uint16","internalType":"uint16"},{"name":"endBps","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stalenessThreshold","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"targetFreeDebtRatioEndBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"targetFreeDebtRatioStartBps","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"totalFreeDebt","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalFreeDebtShares","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalPaidDebt","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalPaidDebtShares","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"vault","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Vault"}],"stateMutability":"view"},{"type":"function","name":"writeOff","inputs":[{"name":"borrower","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"}],"outputs":[{"name":"writtenOff","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"AccruedGlobalReserves","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AccruedLocalReserves","inputs":[{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Bought","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"assetIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"coinOut","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DelegationUpdated","inputs":[{"name":"delegator","type":"address","indexed":true,"internalType":"address"},{"name":"delegatee","type":"address","indexed":true,"internalType":"address"},{"name":"isDelegatee","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"HalfLifeUpdated","inputs":[{"name":"halfLife","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"ImmutabilityEnabled","inputs":[{"name":"timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"InterestAccrued","inputs":[{"name":"interestAccrued","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newBorrowRateMantissa","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Liquidated","inputs":[{"name":"borrower","type":"address","indexed":true,"internalType":"address"},{"name":"liquidator","type":"address","indexed":true,"internalType":"address"},{"name":"repayAmount","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"collateralOut","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LocalReserveFeeUpdated","inputs":[{"name":"feeBps","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"ManagerUpdated","inputs":[{"name":"manager","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"MaxBorrowDeltaBpsUpdated","inputs":[{"name":"maxBorrowDeltaBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"OperatorAccepted","inputs":[{"name":"operator","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PendingOperatorUpdated","inputs":[{"name":"pendingOperator","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PositionAdjusted","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"collateralDelta","type":"int256","indexed":false,"internalType":"int256"},{"name":"debtDelta","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"RedeemFeeBpsUpdated","inputs":[{"name":"redeemFeeBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"Redeemed","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"borrower","type":"address","indexed":true,"internalType":"address"},{"name":"amountIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountOut","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RedemptionStatusUpdated","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"isRedeemable","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"Sold","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"coinIn","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"assetOut","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TargetFreeDebtRatioUpdated","inputs":[{"name":"startBps","type":"uint16","indexed":false,"internalType":"uint16"},{"name":"endBps","type":"uint16","indexed":false,"internalType":"uint16"}],"anonymous":false},{"type":"event","name":"WrittenOff","inputs":[{"name":"borrower","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"debt","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"collateral","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}]; \ No newline at end of file diff --git a/src/adaptors/monolith-market/lensAbi.ts b/src/adaptors/monolith-market/lensAbi.ts new file mode 100644 index 0000000000..452aa83d92 --- /dev/null +++ b/src/adaptors/monolith-market/lensAbi.ts @@ -0,0 +1 @@ +module.exports = [{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"}],"name":"_getRealTimeBorrowRateAndInterest","outputs":[{"internalType":"uint256","name":"borrowRate","type":"uint256"},{"internalType":"uint256","name":"pendingInterests","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"},{"internalType":"address","name":"borrower","type":"address"}],"name":"getDebtOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"}],"name":"getRates","outputs":[{"internalType":"uint256","name":"borrowRate","type":"uint256"},{"internalType":"uint256","name":"savingsRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"}],"name":"getRatesAndInterests","outputs":[{"internalType":"uint256","name":"borrowRate","type":"uint256"},{"internalType":"uint256","name":"savingsRate","type":"uint256"},{"internalType":"uint256","name":"interests","type":"uint256"},{"internalType":"uint256","name":"interestsToStakers","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"}],"name":"getRealTimeBorrowRate","outputs":[{"internalType":"uint256","name":"borrowRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"}],"name":"getRealTimeSavingsRate","outputs":[{"internalType":"uint256","name":"savingsRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"}],"name":"getSyncedTotalDebts","outputs":[{"internalType":"uint256","name":"syncedTotalDebt","type":"uint256"},{"internalType":"uint256","name":"syncedTotalPaidDebt","type":"uint256"},{"internalType":"uint256","name":"syncedTotalFreeDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Lender","name":"_lender","type":"address"},{"internalType":"address","name":"borrower","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"coinIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"view","type":"function"}] \ No newline at end of file diff --git a/src/adaptors/monolith-market/vaultAbi.ts b/src/adaptors/monolith-market/vaultAbi.ts new file mode 100644 index 0000000000..b80d401642 --- /dev/null +++ b/src/adaptors/monolith-market/vaultAbi.ts @@ -0,0 +1 @@ +module.exports = [{"type":"constructor","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"},{"name":"_lender","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"asset","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ERC20"}],"stateMutability":"view"},{"type":"function","name":"balanceOf","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"convertToAssets","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"convertToShares","inputs":[{"name":"assets","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"deposit","inputs":[{"name":"assets","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"lender","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ILender"}],"stateMutability":"view"},{"type":"function","name":"maxDeposit","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxMint","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxRedeem","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"maxWithdraw","inputs":[{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"assets","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nonces","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"permit","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"previewDeposit","inputs":[{"name":"assets","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"previewMint","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"assets","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"previewRedeem","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"previewWithdraw","inputs":[{"name":"assets","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"redeem","inputs":[{"name":"shares","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"assets","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"totalAssets","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"assets","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"},{"name":"owner","type":"address","internalType":"address"}],"outputs":[{"name":"shares","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"assets","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Withdraw","inputs":[{"name":"caller","type":"address","indexed":true,"internalType":"address"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"assets","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"shares","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}]; \ No newline at end of file