From f6f74a263c808a154fa6aa52ed15dee63adddd21 Mon Sep 17 00:00:00 2001 From: Spacebean Date: Thu, 19 Sep 2024 13:43:01 -0600 Subject: [PATCH] feat: misc updates --- projects/examples/src/setup.ts | 2 +- projects/sdk/src/classes/Pool/BasinWell.ts | 100 +++--------------- projects/sdk/src/constants/addresses.ts | 30 +++--- projects/sdk/src/lib/contracts.ts | 29 ++--- projects/sdk/src/lib/pools.ts | 10 +- projects/sdk/src/lib/silo/Convert.ts | 74 ++++++++----- projects/sdk/src/lib/silo/ConvertEncoder.ts | 61 +++++++++-- .../sdk/src/lib/silo/GenConvertOperation.ts | 40 +++++++ projects/sdk/src/lib/silo/utils.ts | 17 +++ .../src/utils/TestUtils/BlockchainUtils.ts | 18 ++-- .../hooks/beanstalk/useDataFeedTokenPrices.ts | 15 +-- 11 files changed, 216 insertions(+), 180 deletions(-) create mode 100644 projects/sdk/src/lib/silo/GenConvertOperation.ts diff --git a/projects/examples/src/setup.ts b/projects/examples/src/setup.ts index 3152dba95c..c45c9de870 100644 --- a/projects/examples/src/setup.ts +++ b/projects/examples/src/setup.ts @@ -7,7 +7,7 @@ const RPC_URL = "http://127.0.0.1:8545"; const network = { name: "local", chainId: ChainId.LOCALHOST, - _defaultProvider: () => new ethers.providers.JsonRpcProvider(RPC_URL, network) + _defaultProvider: () => new ethers.providers.JsonRpcProvider(RPC_URL) }; export const provider = new ethers.providers.StaticJsonRpcProvider(RPC_URL, network); diff --git a/projects/sdk/src/classes/Pool/BasinWell.ts b/projects/sdk/src/classes/Pool/BasinWell.ts index 6aa2c4059a..d1dc6d4e1c 100644 --- a/projects/sdk/src/classes/Pool/BasinWell.ts +++ b/projects/sdk/src/classes/Pool/BasinWell.ts @@ -2,29 +2,10 @@ import { BasinWell__factory, BasinWell as BasinWellContract } from "src/constant import { TokenValue } from "src/TokenValue"; import Pool, { Reserves } from "./Pool"; import { ERC20Token } from "../Token"; -import { BeanstalkSDK } from "src/lib/BeanstalkSDK"; export class BasinWell extends Pool { - public readonly contract: BasinWellContract; - - constructor( - sdk: BeanstalkSDK, - address: string, - lpToken: ERC20Token, - tokens: ERC20Token[], - metadata: { - name: string; - symbol: string; - logo: string; - color: string; - } - ) { - super(sdk, address, lpToken, tokens, metadata); - this.contract = BasinWell__factory.connect(address, sdk.providerOrSigner); - } - public getContract() { - return this.contract; + return BasinWell__factory.connect(this.address, Pool.sdk.providerOrSigner); } public getReserves() { @@ -43,80 +24,29 @@ export class BasinWell extends Pool { ); } - async getAddLiquidityOut(amounts: TokenValue[]) { - return this.contract + async getAddLiquidityOut(amounts: TokenValue[]): Promise { + return this.getContract() .getAddLiquidityOut(amounts.map((a) => a.toBigNumber())) .then((result) => this.lpToken.fromBlockchain(result)); } - async getRemoveLiquidityOutEqual(amount: TokenValue) { - return this.contract + async getRemoveLiquidityOutEqual(amount: TokenValue): Promise { + return this.getContract() .getRemoveLiquidityOut(amount.toBigNumber()) .then((result) => this.tokens.map((token, i) => token.fromBlockchain(result[i]))); } - async getRemoveLiquidityOutOneToken(lpAmountIn: TokenValue, tokenOut: ERC20Token) { - return this.contract + async getRemoveLiquidityOutOneToken( + lpAmountIn: TokenValue, + tokenOut: ERC20Token + ): Promise { + const tokenIndex = this.tokens.findIndex((token) => token.equals(tokenOut)); + if (tokenIndex < 0) { + throw new Error(`Token ${tokenOut.symbol} does not underly ${this.name}`); + } + + return this.getContract() .getRemoveLiquidityOneTokenOut(lpAmountIn.toBigNumber(), tokenOut.address) .then((result) => tokenOut.fromBlockchain(result)); } - - /** - * Get the @wagmi/core multicall params for removing liquidity - * @param lpAmountIn The amount of LP tokens to remove - * @returns @wagmi/core multicall calls for - * - removing equal amounts of liquidity - * - removing single sided liquidity as well.tokens[0] - * - removing single sided liquidity as well.tokens[1] - */ - static getRemoveLiquidityOutMulticallParams(well: BasinWell, lpAmountIn: TokenValue) { - const contract = { - address: well.address as `0x${string}`, - abi: removeLiquidityPartialABI - }; - - const removeEqual = { - ...contract, - method: "getRemoveLiquidityOut", - args: [lpAmountIn.toBigNumber()] - }; - - const removeSingleSided0 = { - ...contract, - method: "getRemoveLiquidityOneTokenOut", - args: [lpAmountIn.toBigNumber(), well.tokens[0].address as `0x${string}`] - }; - - const removeSingleSided1 = { - ...contract, - method: "getRemoveLiquidityOneTokenOut", - args: [lpAmountIn.toBigNumber(), well.tokens[1].address as `0x${string}`] - }; - - return { - equal: removeEqual, - side0: removeSingleSided0, - side1: removeSingleSided1 - }; - } } - -const removeLiquidityPartialABI = [ - { - inputs: [ - { internalType: "uint256", name: "lpAmountIn", type: "uint256" }, - { internalType: "contract IERC20", name: "tokenOut", type: "address" } - ], - name: "getRemoveLiquidityOneTokenOut", - outputs: [{ internalType: "uint256", name: "tokenAmountOut", type: "uint256" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [{ internalType: "uint256", name: "lpAmountIn", type: "uint256" }], - name: "getRemoveLiquidityOut", - outputs: [{ internalType: "uint256[]", name: "tokenAmountsOut", type: "uint256[]" }], - stateMutability: "view", - type: "function" - } -] as const; diff --git a/projects/sdk/src/constants/addresses.ts b/projects/sdk/src/constants/addresses.ts index 5dc21f7912..cbaa6724b0 100644 --- a/projects/sdk/src/constants/addresses.ts +++ b/projects/sdk/src/constants/addresses.ts @@ -182,6 +182,20 @@ export const addresses = { [ChainId.ARBITRUM_MAINNET]: "0x6985884C4392D348587B19cb9eAAf157F13271cd" }), + // ---------------------------------------- + // Uniswap V3 + // ---------------------------------------- + UNISWAP_V3_ROUTER: Address.make({ + [ChainId.ETH_MAINNET]: "0xE592427A0AEce92De3Edee1F18E0157C05861564", + [ChainId.ARBITRUM_MAINNET]: "0xE592427A0AEce92De3Edee1F18E0157C05861564" + }), + + UNISWAP_V3_QUOTER_V2: Address.make({ + [ChainId.ETH_MAINNET]: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e", + [ChainId.ARBITRUM_MAINNET]: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e" + }), + // ---------------------------------------- + // ---------------------------------------- // Curve Pools: Other // ---------------------------------------- @@ -255,22 +269,6 @@ export const addresses = { [ChainId.ETH_MAINNET]: "0xA79828DF1850E8a3A3064576f380D90aECDD3359" }), - /** - * @deprecated - * Uniswap V3 Router - */ - UNISWAP_V3_ROUTER: Address.make({ - [ChainId.ETH_MAINNET]: "0xE592427A0AEce92De3Edee1F18E0157C05861564" - }), - - /** - * @deprecated - * Uniswap V3 Quoter V2 - */ - UNISWAP_V3_QUOTER_V2: Address.make({ - [ChainId.ETH_MAINNET]: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e" - }), - /** * @deprecated */ diff --git a/projects/sdk/src/lib/contracts.ts b/projects/sdk/src/lib/contracts.ts index 49e9ebefa7..7034543d02 100644 --- a/projects/sdk/src/lib/contracts.ts +++ b/projects/sdk/src/lib/contracts.ts @@ -73,16 +73,7 @@ export class Contracts { */ public readonly root: Root | null = null; - /** - * @deprecated as of Beanstalk 3.0 L2 migration - * @description mainnet only - */ public readonly uniswapV3Router: UniswapV3Router; - - /** - * @deprecated as of Beanstalk 3.0 L2 migration - * @description mainnet only - */ public readonly uniswapV3QuoterV2: UniswapV3QuoterV2; constructor(sdk: BeanstalkSDK) { @@ -150,18 +141,14 @@ export class Contracts { }; // Uniswap - if (uniswapV3RouterAddress) { - this.uniswapV3Router = UniswapV3Router__factory.connect( - uniswapV3RouterAddress, - sdk.providerOrSigner - ); - } + this.uniswapV3Router = UniswapV3Router__factory.connect( + uniswapV3RouterAddress, + sdk.providerOrSigner + ); - if (uniswapV3QuoterV2Address) { - this.uniswapV3QuoterV2 = UniswapV3QuoterV2__factory.connect( - uniswapV3QuoterV2Address, - sdk.providerOrSigner - ); - } + this.uniswapV3QuoterV2 = UniswapV3QuoterV2__factory.connect( + uniswapV3QuoterV2Address, + sdk.providerOrSigner + ); } } diff --git a/projects/sdk/src/lib/pools.ts b/projects/sdk/src/lib/pools.ts index 3eb974d5f5..7d40b43505 100644 --- a/projects/sdk/src/lib/pools.ts +++ b/projects/sdk/src/lib/pools.ts @@ -2,8 +2,7 @@ import Pool from "src/classes/Pool/Pool"; import { BasinWell } from "src/classes/Pool/BasinWell"; import { Token } from "src/classes/Token"; import { BeanstalkSDK } from "src/lib/BeanstalkSDK"; -import { Address, ChainId, ChainResolver } from "@beanstalk/sdk-core"; -import { pool } from "src/constants/generated/projects/sdk/src/constants/abi/Curve"; +import { ChainResolver } from "@beanstalk/sdk-core"; export class Pools { static sdk: BeanstalkSDK; @@ -142,6 +141,13 @@ export class Pools { return this.lpAddressMap.get(token.address); } + getWellByLPToken(token: Token | string): BasinWell | undefined { + if (typeof token === "string") { + return this.wellAddressMap.get(token.toLowerCase()); + } + return this.wellAddressMap.get(token.address); + } + getWells(): readonly BasinWell[] { return Array.from(this.wellAddressMap.values()) as ReadonlyArray; } diff --git a/projects/sdk/src/lib/silo/Convert.ts b/projects/sdk/src/lib/silo/Convert.ts index 17d090fab9..0f8e3b08f6 100644 --- a/projects/sdk/src/lib/silo/Convert.ts +++ b/projects/sdk/src/lib/silo/Convert.ts @@ -4,7 +4,7 @@ import { ERC20Token, Token } from "src/classes/Token"; import { BeanstalkSDK } from "../BeanstalkSDK"; import { ConvertEncoder } from "./ConvertEncoder"; import { Deposit } from "./types"; -import { pickCrates, sortCratesByBDVRatio, sortCratesByStem } from "./utils"; +import { normaliseERC20, pickCrates, sortCratesByBDVRatio, sortCratesByStem } from "./utils"; export type ConvertDetails = { amount: TokenValue; @@ -17,35 +17,48 @@ export type ConvertDetails = { export class Convert { static sdk: BeanstalkSDK; - Bean: Token; - BeanCrv3: Token; - BeanEth: Token; - beanWstETH: Token; - urBean: Token; - urBeanWstETH: Token; - paths: Map; + readonly paths: Map; constructor(sdk: BeanstalkSDK) { Convert.sdk = sdk; - this.Bean = Convert.sdk.tokens.BEAN; - this.BeanCrv3 = Convert.sdk.tokens.BEAN_CRV3_LP; - this.BeanEth = Convert.sdk.tokens.BEAN_ETH_WELL_LP; - this.beanWstETH = Convert.sdk.tokens.BEAN_WSTETH_WELL_LP; - this.urBean = Convert.sdk.tokens.UNRIPE_BEAN; - this.urBeanWstETH = Convert.sdk.tokens.UNRIPE_BEAN_WSTETH; - - // TODO: Update me for lambda to lambda converts + this.paths = new Map(); // BEAN<>LP this.paths.set(Convert.sdk.tokens.BEAN, [ - // Convert.sdk.tokens.BEAN_CRV3_LP, // Deprecated. + Convert.sdk.tokens.BEAN, Convert.sdk.tokens.BEAN_WSTETH_WELL_LP, + Convert.sdk.tokens.BEAN_ETH_WELL_LP, + Convert.sdk.tokens.BEAN_WBTC_WELL_LP, + Convert.sdk.tokens.BEAN_WEETH_WELL_LP, + Convert.sdk.tokens.BEAN_USDC_WELL_LP, + Convert.sdk.tokens.BEAN_USDT_WELL_LP + ]); + + this.paths.set(Convert.sdk.tokens.BEAN_ETH_WELL_LP, [ + Convert.sdk.tokens.BEAN, Convert.sdk.tokens.BEAN_ETH_WELL_LP ]); - this.paths.set(Convert.sdk.tokens.BEAN_CRV3_LP, [Convert.sdk.tokens.BEAN]); - this.paths.set(Convert.sdk.tokens.BEAN_ETH_WELL_LP, [Convert.sdk.tokens.BEAN]); - this.paths.set(Convert.sdk.tokens.BEAN_WSTETH_WELL_LP, [Convert.sdk.tokens.BEAN]); + this.paths.set(Convert.sdk.tokens.BEAN_WSTETH_WELL_LP, [ + Convert.sdk.tokens.BEAN, + Convert.sdk.tokens.BEAN_WSTETH_WELL_LP + ]); + this.paths.set(Convert.sdk.tokens.BEAN_WBTC_WELL_LP, [ + Convert.sdk.tokens.BEAN, + Convert.sdk.tokens.BEAN_WBTC_WELL_LP + ]); + this.paths.set(Convert.sdk.tokens.BEAN_WEETH_WELL_LP, [ + Convert.sdk.tokens.BEAN, + Convert.sdk.tokens.BEAN_WEETH_WELL_LP + ]); + this.paths.set(Convert.sdk.tokens.BEAN_USDC_WELL_LP, [ + Convert.sdk.tokens.BEAN, + Convert.sdk.tokens.BEAN_USDC_WELL_LP + ]); + this.paths.set(Convert.sdk.tokens.BEAN_USDT_WELL_LP, [ + Convert.sdk.tokens.BEAN, + Convert.sdk.tokens.BEAN_USDT_WELL_LP + ]); // URBEAN<>(URBEAN_WSTETH_LP & RIPE BEAN) this.paths.set(Convert.sdk.tokens.UNRIPE_BEAN, [ @@ -166,6 +179,8 @@ export class Convert { const tks = Convert.sdk.tokens; + const deprecatedLPs = new Set([Convert.sdk.tokens.BEAN_CRV3_LP]); + const whitelistedWellLPs = new Set([ Convert.sdk.tokens.BEAN_ETH_WELL_LP.address.toLowerCase(), Convert.sdk.tokens.BEAN_WSTETH_WELL_LP.address.toLowerCase() @@ -173,6 +188,15 @@ export class Convert { const isFromWlLP = Boolean(whitelistedWellLPs.has(fromToken.address.toLowerCase())); const isToWlLP = Boolean(whitelistedWellLPs.has(toToken.address.toLowerCase())); + if (deprecatedLPs.has(fromToken as ERC20Token) || deprecatedLPs.has(toToken as ERC20Token)) { + throw new Error("SDK: Deprecated conversion pathway"); + } + + // BS3TODO: is this encoding correct ? + if (fromToken.equals(toToken)) { + return ConvertEncoder.lambdaLambda(amountIn.toBlockchain(), fromToken.address); + } + if ( fromToken.address === tks.UNRIPE_BEAN.address && toToken.address === tks.UNRIPE_BEAN_WSTETH.address @@ -242,7 +266,10 @@ export class Convert { return encoding; } - async validateTokens(fromToken: Token, toToken: Token) { + async validateTokens(_fromToken: Token, _toToken: Token) { + const fromToken = normaliseERC20(_fromToken, Convert.sdk); + const toToken = normaliseERC20(_toToken, Convert.sdk); + if (!Convert.sdk.tokens.isWhitelisted(fromToken)) { throw new Error("fromToken is not whitelisted"); } @@ -251,10 +278,6 @@ export class Convert { throw new Error("toToken is not whitelisted"); } - if (fromToken.equals(toToken)) { - throw new Error("Cannot convert between the same token"); - } - const path = this.getConversionPaths(fromToken as ERC20Token); const found = path.find((tk) => tk.address.toLowerCase() === toToken.address.toLowerCase()); @@ -267,5 +290,4 @@ export class Convert { const token = Convert.sdk.tokens.findByAddress(fromToken.address); return token ? this.paths.get(token) || [] : []; } - } diff --git a/projects/sdk/src/lib/silo/ConvertEncoder.ts b/projects/sdk/src/lib/silo/ConvertEncoder.ts index d2bde6db66..a7e0d2fda0 100644 --- a/projects/sdk/src/lib/silo/ConvertEncoder.ts +++ b/projects/sdk/src/lib/silo/ConvertEncoder.ts @@ -1,34 +1,75 @@ import { defaultAbiCoder } from "ethers/lib/utils"; export enum ConvertKind { - BEANS_TO_CURVE_LP = 0, - CURVE_LP_TO_BEANS = 1, + BEANS_TO_CURVE_LP = 0, // deprecated + CURVE_LP_TO_BEANS = 1, // deprecated UNRIPE_BEANS_TO_LP = 2, UNRIPE_LP_TO_BEANS = 3, + LAMBDA_LAMBDA = 4, BEANS_TO_WELL_LP = 5, WELL_LP_TO_BEANS = 6, - UNRIPE_TO_RIPE = 7 + UNRIPE_TO_RIPE = 7, + ANTI_LAMBDA_LAMBDA = 8 } export class ConvertEncoder { + /** + * @deprecated + */ static curveLPToBeans = (amountLP: string, minBeans: string, pool: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256", "address"], [ConvertKind.CURVE_LP_TO_BEANS, amountLP, minBeans, pool]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256", "address"], + [ConvertKind.CURVE_LP_TO_BEANS, amountLP, minBeans, pool] + ); + /** + * @deprecated + */ static beansToCurveLP = (amountBeans: string, minLP: string, pool: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256", "address"], [ConvertKind.BEANS_TO_CURVE_LP, amountBeans, minLP, pool]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256", "address"], + [ConvertKind.BEANS_TO_CURVE_LP, amountBeans, minLP, pool] + ); static unripeLPToBeans = (amountLP: string, minBeans: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256"], [ConvertKind.UNRIPE_LP_TO_BEANS, amountLP, minBeans]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256"], + [ConvertKind.UNRIPE_LP_TO_BEANS, amountLP, minBeans] + ); static unripeBeansToLP = (amountBeans: string, minLP: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256"], [ConvertKind.UNRIPE_BEANS_TO_LP, amountBeans, minLP]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256"], + [ConvertKind.UNRIPE_BEANS_TO_LP, amountBeans, minLP] + ); static beansToWellLP = (amountBeans: string, minLP: string, pool: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256", "address"], [ConvertKind.BEANS_TO_WELL_LP, amountBeans, minLP, pool]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256", "address"], + [ConvertKind.BEANS_TO_WELL_LP, amountBeans, minLP, pool] + ); static wellLPToBeans = (amountLP: string, minBeans: string, pool: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256", "address"], [ConvertKind.WELL_LP_TO_BEANS, amountLP, minBeans, pool]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256", "address"], + [ConvertKind.WELL_LP_TO_BEANS, amountLP, minBeans, pool] + ); static unripeToRipe = (unripeAmount: string, unripeToken: string) => - defaultAbiCoder.encode(["uint256", "uint256", "uint256"], [ConvertKind.UNRIPE_TO_RIPE, unripeAmount, unripeToken]); + defaultAbiCoder.encode( + ["uint256", "uint256", "uint256"], + [ConvertKind.UNRIPE_TO_RIPE, unripeAmount, unripeToken] + ); + + static lambdaLambda = (amount: string, token: string) => + defaultAbiCoder.encode( + ["uint256", "uint256", "address"], + [ConvertKind.LAMBDA_LAMBDA, amount, token] + ); + + static antiLambda = (amount: string, token: string, account: string) => + defaultAbiCoder.encode( + ["uint256", "uint256", "address", "address", "bool"], + [ConvertKind.ANTI_LAMBDA_LAMBDA, amount, token, account, true] + ); } diff --git a/projects/sdk/src/lib/silo/GenConvertOperation.ts b/projects/sdk/src/lib/silo/GenConvertOperation.ts new file mode 100644 index 0000000000..0db132ce20 --- /dev/null +++ b/projects/sdk/src/lib/silo/GenConvertOperation.ts @@ -0,0 +1,40 @@ +import { BasinWell } from "src/classes/Pool"; +import { BeanstalkSDK } from "../BeanstalkSDK"; +import { ERC20Token } from "src/classes/Token"; +import { AdvancedPipePreparedResult } from "../depot/pipe"; + +export class PipelineConvertOperation { + static sdk: BeanstalkSDK; + + /** + * The whitelisted token to convert from. + */ + readonly inputToken: ERC20Token; + + /** + * The whitelisted token to convert to. + */ + target: ERC20Token; + + advancedPipeCalls: Required[] = []; + + constructor(sdk: BeanstalkSDK, inputToken: ERC20Token) { + PipelineConvertOperation.sdk = sdk; + + this.validateIsWhitelisted(inputToken); + this.inputToken = inputToken; + } + + setTarget(token: ERC20Token) { + this.validateIsWhitelisted(token); + this.target = token; + } + + initialize(token: ERC20Token) {} + + private validateIsWhitelisted(token: ERC20Token) { + if (!PipelineConvertOperation.sdk.tokens.isWhitelisted(token)) { + throw new Error(`GenConvertOperation: Token ${token.symbol} is not whitelisted in the Silo.`); + } + } +} diff --git a/projects/sdk/src/lib/silo/utils.ts b/projects/sdk/src/lib/silo/utils.ts index 6e1804d6bc..3ba6ed31d9 100644 --- a/projects/sdk/src/lib/silo/utils.ts +++ b/projects/sdk/src/lib/silo/utils.ts @@ -323,3 +323,20 @@ export function sumDeposits(token: ERC20Token, crates: Deposit[]) { } ); } + +export function validateIsERC20Token(token: Token) { + if (!(token instanceof ERC20Token)) { + throw new Error(`Expected token ${token.address} to be an ERC20Token`); + } + return token; +} + +export function normaliseERC20(token: Token, sdk: BeanstalkSDK) { + const normalised = sdk.tokens.findByAddress(token.address); + + if (!normalised) { + throw new Error(`Could not find instance of ERC20Token ${token.address} in SDK`); + } + + return validateIsERC20Token(normalised); +} diff --git a/projects/sdk/src/utils/TestUtils/BlockchainUtils.ts b/projects/sdk/src/utils/TestUtils/BlockchainUtils.ts index b1e78ed4b4..d5ad291f0c 100644 --- a/projects/sdk/src/utils/TestUtils/BlockchainUtils.ts +++ b/projects/sdk/src/utils/TestUtils/BlockchainUtils.ts @@ -199,12 +199,18 @@ export class BlockchainUtils { private getBalanceConfig(tokenAddress: string) { const slotConfig = new Map(); slotConfig.set(this.sdk.tokens.BEAN.address, [0, false]); - slotConfig.set(this.sdk.tokens.WETH.address, [0, false]); - slotConfig.set(this.sdk.tokens.WSTETH.address, [0, false]); - slotConfig.set(this.sdk.tokens.WEETH.address, [0, false]); - slotConfig.set(this.sdk.tokens.WBTC.address, [0, false]); - slotConfig.set(this.sdk.tokens.USDC.address, [0, false]); - slotConfig.set(this.sdk.tokens.USDT.address, [0, false]); + slotConfig.set(this.sdk.tokens.WETH.address, [51, false]); // OnChain + // slotConfig.set(this.sdk.tokens.WETH.address, [0, false]); // MockToken + slotConfig.set(this.sdk.tokens.WSTETH.address, [1, false]); // OnChain + // slotConfig.set(this.sdk.tokens.WSTETH.address, [0, false]); // MockToken + slotConfig.set(this.sdk.tokens.WEETH.address, [51, false]); // OnChain + // slotConfig.set(this.sdk.tokens.WEETH.address, [0, false]); // MockToken + slotConfig.set(this.sdk.tokens.WBTC.address, [51, false]); // OnChain + // slotConfig.set(this.sdk.tokens.WBTC.address, [0, false]); // MockToken + slotConfig.set(this.sdk.tokens.USDC.address, [9, false]); // OnChain + // slotConfig.set(this.sdk.tokens.USDC.address, [0, false]); // MockToken + slotConfig.set(this.sdk.tokens.USDT.address, [51, false]); // OnChain + // slotConfig.set(this.sdk.tokens.USDT.address, [0, false]); // MockToken slotConfig.set(this.sdk.tokens.DAI.address, [2, false]); slotConfig.set(this.sdk.tokens.UNRIPE_BEAN.address, [0, false]); slotConfig.set(this.sdk.tokens.UNRIPE_BEAN_WSTETH.address, [0, false]); diff --git a/projects/ui/src/hooks/beanstalk/useDataFeedTokenPrices.ts b/projects/ui/src/hooks/beanstalk/useDataFeedTokenPrices.ts index 9acc1f1779..e7fa9be558 100644 --- a/projects/ui/src/hooks/beanstalk/useDataFeedTokenPrices.ts +++ b/projects/ui/src/hooks/beanstalk/useDataFeedTokenPrices.ts @@ -84,22 +84,11 @@ export default function useDataFeedTokenPrices() { const token = underlyingTokens[index]; if (!token) return; - // BS3TODO: REMOVE ME - const decimals = ['wstETH', 'weETH'].includes(token.symbol) ? 40 : 6; - // BS3TODO: REMOVE ME - const divBy = ['wstETH', 'weETH'].includes(token.symbol) ? 20000 : 1; - if (price) { - priceDataCache[getTokenIndex(token)] = getBNResult( - price.toString(), - decimals - ).div(divBy); + priceDataCache[getTokenIndex(token)] = getBNResult(price.toString(), 6); } if (twap) { - priceDataCache[`${token.symbol}-TWA`] = getBNResult( - twap.toString(), - decimals - ).div(divBy); + priceDataCache[`${token.symbol}-TWA`] = getBNResult(twap.toString(), 6); } // add it for ETH as well