From 5b8e5c64511b46799d2cfa3c7429fc6124eee510 Mon Sep 17 00:00:00 2001 From: Kirill Kuvshinov Date: Tue, 8 Oct 2024 13:00:49 +0300 Subject: [PATCH] fixup! feat: add SolvBTC market --- vips/vip-400/bscmainnet.ts | 42 ++++++++++++++++++++++++++++++++++++++ vips/vip-400/bsctestnet.ts | 42 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/vips/vip-400/bscmainnet.ts b/vips/vip-400/bscmainnet.ts index f88024a1d..0fa797de4 100644 --- a/vips/vip-400/bscmainnet.ts +++ b/vips/vip-400/bscmainnet.ts @@ -1,3 +1,4 @@ +import { BigNumberish } from "ethers"; import { parseUnits } from "ethers/lib/utils"; import { ethers } from "hardhat"; import { NETWORK_ADDRESSES } from "src/networkAddresses"; @@ -14,6 +15,45 @@ export const SOLVBTC_REDSTONE_FEED = "0xF5F641fF3c7E39876A76e77E84041C300DFa4550 const SOLVBTC_MAX_STALE_PERIOD = 7 * 3600; // 7 hours const REDUCE_RESERVES_BLOCK_DELTA = "28800"; +const configureConverters = (fromAssets: string[], incentive: BigNumberish = 1e14) => { + const USDT = "0x55d398326f99059fF775485246999027B3197955"; + const USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"; + const BTCB = "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"; + const XVS = "0xcF6BB5389c92Bdda8a3747Ddb454cB7a64626C63"; + const ETH = "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"; + const RISK_FUND_CONVERTER = "0xA5622D276CcbB8d9BBE3D1ffd1BB11a0032E53F0"; + const USDT_PRIME_CONVERTER = "0xD9f101AA67F3D72662609a2703387242452078C3"; + const USDC_PRIME_CONVERTER = "0xa758c9C215B6c4198F0a0e3FA46395Fa15Db691b"; + const BTCB_PRIME_CONVERTER = "0xE8CeAa79f082768f99266dFd208d665d2Dd18f53"; + const ETH_PRIME_CONVERTER = "0xca430B8A97Ea918fF634162acb0b731445B8195E"; + const XVS_VAULT_CONVERTER = "0xd5b9AE835F4C59272032B3B954417179573331E0"; + + const converterBaseAssets = { + [RISK_FUND_CONVERTER]: USDT, + [USDT_PRIME_CONVERTER]: USDT, + [USDC_PRIME_CONVERTER]: USDC, + [BTCB_PRIME_CONVERTER]: BTCB, + [ETH_PRIME_CONVERTER]: ETH, + [XVS_VAULT_CONVERTER]: XVS, + }; + + enum ConversionAccessibility { + NONE = 0, + ALL = 1, + ONLY_FOR_CONVERTERS = 2, + ONLY_FOR_USERS = 3, + } + + return Object.entries(converterBaseAssets).map(([converter, baseAsset]: [string, string]) => { + const conversionConfigs = fromAssets.map(() => [incentive, ConversionAccessibility.ALL]); + return { + target: converter, + signature: "setConversionConfigs(address,address[],(uint256,uint8)[])", + params: [baseAsset, fromAssets, conversionConfigs], + }; + }); +}; + export const marketSpec = { vToken: { address: SOLVBTC_VTOKEN, @@ -147,6 +187,8 @@ export const vip400 = () => { signature: "approve(address,uint256)", params: [marketSpec.vToken.address, 0], }, + + ...configureConverters([marketSpec.vToken.underlying.address]), ], meta, ProposalType.REGULAR, diff --git a/vips/vip-400/bsctestnet.ts b/vips/vip-400/bsctestnet.ts index a32e18db0..84cce8439 100644 --- a/vips/vip-400/bsctestnet.ts +++ b/vips/vip-400/bsctestnet.ts @@ -1,3 +1,4 @@ +import { BigNumberish } from "ethers"; import { parseUnits } from "ethers/lib/utils"; import { ethers } from "hardhat"; import { NETWORK_ADDRESSES } from "src/networkAddresses"; @@ -46,6 +47,45 @@ export const marketSpec = { }, }; +const configureConverters = (fromAssets: string[], incentive: BigNumberish = 1e14) => { + const ETH = "0x98f7A83361F7Ac8765CcEBAB1425da6b341958a7"; + const USDT = "0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c"; + const USDC = "0x16227D60f7a0e586C66B005219dfc887D13C9531"; + const BTCB = "0xA808e341e8e723DC6BA0Bb5204Bafc2330d7B8e4"; + const XVS = "0xB9e0E753630434d7863528cc73CB7AC638a7c8ff"; + const RISK_FUND_CONVERTER = "0x32Fbf7bBbd79355B86741E3181ef8c1D9bD309Bb"; + const USDT_PRIME_CONVERTER = "0xf1FA230D25fC5D6CAfe87C5A6F9e1B17Bc6F194E"; + const USDC_PRIME_CONVERTER = "0x2ecEdE6989d8646c992344fF6C97c72a3f811A13"; + const BTCB_PRIME_CONVERTER = "0x989A1993C023a45DA141928921C0dE8fD123b7d1"; + const ETH_PRIME_CONVERTER = "0xf358650A007aa12ecC8dac08CF8929Be7f72A4D9"; + const XVS_VAULT_CONVERTER = "0x258f49254C758a0E37DAb148ADDAEA851F4b02a2"; + + const converterBaseAssets = { + [RISK_FUND_CONVERTER]: USDT, + [USDT_PRIME_CONVERTER]: USDT, + [USDC_PRIME_CONVERTER]: USDC, + [BTCB_PRIME_CONVERTER]: BTCB, + [ETH_PRIME_CONVERTER]: ETH, + [XVS_VAULT_CONVERTER]: XVS, + }; + + enum ConversionAccessibility { + NONE = 0, + ALL = 1, + ONLY_FOR_CONVERTERS = 2, + ONLY_FOR_USERS = 3, + } + + return Object.entries(converterBaseAssets).map(([converter, baseAsset]: [string, string]) => { + const conversionConfigs = fromAssets.map(() => [incentive, ConversionAccessibility.ALL]); + return { + target: converter, + signature: "setConversionConfigs(address,address[],(uint256,uint8)[])", + params: [baseAsset, fromAssets, conversionConfigs], + }; + }); +}; + export const vip400 = () => { const meta = { version: "v2", @@ -145,6 +185,8 @@ export const vip400 = () => { signature: "approve(address,uint256)", params: [marketSpec.vToken.address, 0], }, + + ...configureConverters([marketSpec.vToken.underlying.address]), ], meta, ProposalType.REGULAR,