diff --git a/src/js/tasks/liquidityProvider.js b/src/js/tasks/liquidityProvider.js new file mode 100644 index 0000000..8bae8b4 --- /dev/null +++ b/src/js/tasks/liquidityProvider.js @@ -0,0 +1,66 @@ +const { parseUnits } = require("ethers"); + +const { getSigner } = require("../utils/signers"); +const { parseDeployedAddress } = require("../utils/addressParser"); +const { logTxDetails } = require("../utils/txLogger"); + +const log = require("../utils/logger")("task:lpCap"); + +async function lpDeposit({ amount }) { + const signer = await getSigner(); + + const amountBn = parseUnits(amount.toString()); + + const lidArmAddress = await parseDeployedAddress("LIDO_ARM"); + const lidoARM = await ethers.getContractAt("LidoARM", lidArmAddress); + + log(`About to deposit ${amount} WETH to the Lido ARM`); + const tx = await lidoARM.connect(signer).deposit(amountBn); + await logTxDetails(tx, "deposit"); +} + +async function setLiquidityProviderCaps({ accounts, cap }) { + const signer = await getSigner(); + + const capBn = parseUnits(cap.toString()); + + const liquidityProviders = accounts.split(","); + + const lpcAddress = await parseDeployedAddress("LIDO_ARM_LPC"); + const liquidityProviderController = await ethers.getContractAt( + "LiquidityProviderController", + lpcAddress + ); + + log( + `About to set deposit cap of ${cap} WETH for liquidity providers ${liquidityProviders}` + ); + const tx = await liquidityProviderController + .connect(signer) + .setLiquidityProviderCaps(liquidityProviders, capBn); + await logTxDetails(tx, "setLiquidityProviderCaps"); +} + +async function setTotalAssetsCap({ cap }) { + const signer = await getSigner(); + + const capBn = parseUnits(cap.toString()); + + const lpcAddress = await parseDeployedAddress("LIDO_ARM_LPC"); + const liquidityProviderController = await ethers.getContractAt( + "LiquidityProviderController", + lpcAddress + ); + + log(`About to set total asset cap of ${cap} WETH`); + const tx = await liquidityProviderController + .connect(signer) + .setTotalAssetsCap(capBn); + await logTxDetails(tx, "setTotalAssetsCap"); +} + +module.exports = { + lpDeposit, + setLiquidityProviderCaps, + setTotalAssetsCap, +}; diff --git a/src/js/tasks/tasks.js b/src/js/tasks/tasks.js index 2304e34..46138a4 100644 --- a/src/js/tasks/tasks.js +++ b/src/js/tasks/tasks.js @@ -15,6 +15,11 @@ const { logLiquidity, withdrawRequestStatus, } = require("./liquidity"); +const { + lpDeposit, + setLiquidityProviderCaps, + setTotalAssetsCap, +} = require("./liquidityProvider"); const { swap } = require("./swap"); const { tokenAllowance, @@ -422,6 +427,50 @@ task("redeemAll").setAction(async (_, __, runSuper) => { return runSuper(); }); +// ARM Liquidity Provider Functions + +subtask("lpDeposit", "Set total assets cap") + .addParam( + "amount", + "Amount of WETH not scaled to 18 decimals", + undefined, + types.float + ) + .setAction(lpDeposit); +task("lpDeposit").setAction(async (_, __, runSuper) => { + return runSuper(); +}); + +subtask("setLiquidityProviderCaps", "Set deposit cap for liquidity providers") + .addParam( + "cap", + "Amount of WETH not scaled to 18 decimals", + undefined, + types.float + ) + .addParam( + "accounts", + "Comma separated list of addresses", + undefined, + types.string + ) + .setAction(setLiquidityProviderCaps); +task("setLiquidityProviderCaps").setAction(async (_, __, runSuper) => { + return runSuper(); +}); + +subtask("setTotalAssetsCap", "Set total assets cap") + .addParam( + "cap", + "Amount of WETH not scaled to 18 decimals", + undefined, + types.float + ) + .setAction(setTotalAssetsCap); +task("setTotalAssetsCap").setAction(async (_, __, runSuper) => { + return runSuper(); +}); + // Proxies subtask("upgradeProxy", "Upgrade a proxy contract to a new implementation")