Skip to content

scrvUSD mainnet 182day deployment script #1216

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
2 changes: 2 additions & 0 deletions hardhat.config.mainnet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
MAINNET_MORPHO_BLUE_WSTETH_USDA_182DAY,
MAINNET_RETH_182DAY,
MAINNET_RETH_COORDINATOR,
MAINNET_SCRVUSD_182DAY,
MAINNET_SGYD_182DAY,
MAINNET_STUSD_182DAY,
MAINNET_SUSDE_182DAY,
Expand Down Expand Up @@ -49,6 +50,7 @@ const config: HardhatUserConfig = {
MAINNET_MORPHO_BLUE_WSTETH_USDA_182DAY,
MAINNET_MORPHO_BLUE_WBTC_USDC_182DAY,
MAINNET_MORPHO_BLUE_CBBTC_USDC_182DAY,
MAINNET_SCRVUSD_182DAY,
MAINNET_STUSD_182DAY,
MAINNET_SUSDE_182DAY,
MAINNET_SGYD_182DAY,
Expand Down
1 change: 1 addition & 0 deletions tasks/deploy/config/mainnet/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export * from "./morpho-blue-wsteth-usda-182day";
export * from "./morpho-blue-wsteth-usdc-182day";
export * from "./reth-182day";
export * from "./reth-coordinator";
export * from "./scrvusd-182day";
export * from "./sgyd-182day";
export * from "./staking-usds-coordinator";
export * from "./staking-usds-sky-182day";
Expand Down
91 changes: 91 additions & 0 deletions tasks/deploy/config/mainnet/scrvusd-182day.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import { Address, keccak256, parseEther, toBytes } from "viem";
import {
HyperdriveInstanceConfig,
getLinkerDetails,
normalizeFee,
parseDuration,
toBytes32,
} from "../../lib";
import {
CRVUSD_ADDRESS_MAINNET,
SCRVUSD_ADDRESS_MAINNET,
SIX_MONTHS,
} from "../../lib/constants";
import { MAINNET_ERC4626_COORDINATOR_NAME } from "./erc4626-coordinator";
import { MAINNET_FACTORY_NAME } from "./factory";

// The name of the pool.
export const MAINNET_SCRVUSD_182DAY_NAME =
"ElementDAO 182 Day scrvUSD Hyperdrive";

// The initial contribution of the pool.
const CONTRIBUTION = parseEther("100");

export const MAINNET_SCRVUSD_182DAY: HyperdriveInstanceConfig = {
name: MAINNET_SCRVUSD_182DAY_NAME,
prefix: "ERC4626",
coordinatorAddress: async (hre) =>
hre.hyperdriveDeploy.deployments.byName(
MAINNET_ERC4626_COORDINATOR_NAME,
).address,
deploymentId: keccak256(toBytes(MAINNET_SCRVUSD_182DAY_NAME)),
salt: toBytes32("0x69420"),
extraData: "0x",
contribution: CONTRIBUTION,
// NOTE: Link to underlying scrvUSD market
// https://crvusd.curve.fi/#/ethereum/scrvUSD
fixedAPR: parseEther("0.10"),
timestretchAPR: parseEther("0.15"),
options: async (hre) => ({
extraData: "0x",
asBase: true,
destination: (await hre.getNamedAccounts())["deployer"] as Address,
}),
// Prepare to deploy the contract by setting approvals.
prepare: async (hre) => {
let baseToken = await hre.viem.getContractAt(
"contracts/src/interfaces/IERC20.sol:IERC20",
CRVUSD_ADDRESS_MAINNET,
);
let tx = await baseToken.write.approve([
hre.hyperdriveDeploy.deployments.byName(
MAINNET_ERC4626_COORDINATOR_NAME,
).address,
CONTRIBUTION,
]);
let pc = await hre.viem.getPublicClient();
await pc.waitForTransactionReceipt({ hash: tx });
},
poolDeployConfig: async (hre) => {
let factoryContract = await hre.viem.getContractAt(
"HyperdriveFactory",
hre.hyperdriveDeploy.deployments.byName(MAINNET_FACTORY_NAME)
.address,
);
return {
baseToken: CRVUSD_ADDRESS_MAINNET,
vaultSharesToken: SCRVUSD_ADDRESS_MAINNET,
circuitBreakerDelta: parseEther("0.05"),
minimumShareReserves: parseEther("0.001"),
minimumTransactionAmount: parseEther("0.001"),
positionDuration: parseDuration(SIX_MONTHS),
checkpointDuration: parseDuration("1 day"),
timeStretch: 0n,
governance: await factoryContract.read.hyperdriveGovernance(),
feeCollector: await factoryContract.read.feeCollector(),
sweepCollector: await factoryContract.read.sweepCollector(),
checkpointRewarder: await factoryContract.read.checkpointRewarder(),
...(await getLinkerDetails(
hre,
hre.hyperdriveDeploy.deployments.byName(MAINNET_FACTORY_NAME)
.address,
)),
fees: {
curve: parseEther("0.01"),
flat: normalizeFee(parseEther("0.0005"), SIX_MONTHS),
governanceLP: parseEther("0.15"),
governanceZombie: parseEther("0.03"),
},
};
},
};
6 changes: 6 additions & 0 deletions tasks/deploy/lib/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,12 @@ export const WSTETH_ADDRESS_MAINNET =
export const WBTC_ADDRESS_MAINNET =
"0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599" as Address;

export const SCRVUSD_ADDRESS_MAINNET =
"0x0655977FEb2f289A4aB78af67BAB0d17aAb84367" as Address;

export const CRVUSD_ADDRESS_MAINNET =
"0xf939E0A03FB07F59A73314E73794Be0E57ac1b4E" as Address;

// ╭─────────────────────────────────────────────────────────╮
// │ Mainnet Whales │
// ╰─────────────────────────────────────────────────────────╯
Expand Down
Loading