From 4e5b23f05d0b880537572d020faaa2b42a2c3d96 Mon Sep 17 00:00:00 2001 From: Silo Chad Date: Sat, 8 Jul 2023 14:42:15 -0500 Subject: [PATCH] wip: fix plant and do x, related build errors --- .../ui/src/components/Silo/Actions/Withdraw.tsx | 3 +++ .../ui/src/hooks/beanstalk/useStemTipForToken.ts | 14 ++++++++++++++ .../farmer/useFarmerDepositCrateFromPlant.ts | 15 ++++++++++++--- projects/ui/src/lib/Txn/Interface/PlantAndDoX.ts | 14 ++++++++------ projects/ui/src/state/beanstalk/silo/updater.ts | 7 +------ 5 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 projects/ui/src/hooks/beanstalk/useStemTipForToken.ts diff --git a/projects/ui/src/components/Silo/Actions/Withdraw.tsx b/projects/ui/src/components/Silo/Actions/Withdraw.tsx index 7a721b5d84..a60539b1ab 100644 --- a/projects/ui/src/components/Silo/Actions/Withdraw.tsx +++ b/projects/ui/src/components/Silo/Actions/Withdraw.tsx @@ -70,6 +70,9 @@ type WithdrawFormValues = FormStateNew & tokenOut: ERC20Token | undefined; }; +// Type 'Element | undefined' is not assignable to type 'ReactElement | null'. +// Type 'undefined' is not assignable to type 'ReactElement | null'. +// @ts-ignore const WithdrawForm: FC< FormikProps & { token: Token; diff --git a/projects/ui/src/hooks/beanstalk/useStemTipForToken.ts b/projects/ui/src/hooks/beanstalk/useStemTipForToken.ts new file mode 100644 index 0000000000..e00a8b2f91 --- /dev/null +++ b/projects/ui/src/hooks/beanstalk/useStemTipForToken.ts @@ -0,0 +1,14 @@ +import { Token } from '@beanstalk/sdk'; +import { ethers } from 'ethers'; +import { useMemo } from 'react'; +import useSilo from '~/hooks/beanstalk/useSilo'; + +export default function useStemTipForToken( + token: Token +): ethers.BigNumber | null { + const silo = useSilo(); + return useMemo( + () => silo.balances[token.address].stemTip ?? null, + [silo, token.address] + ); +} diff --git a/projects/ui/src/hooks/farmer/useFarmerDepositCrateFromPlant.ts b/projects/ui/src/hooks/farmer/useFarmerDepositCrateFromPlant.ts index ec1bdbc372..a3e3314dd6 100644 --- a/projects/ui/src/hooks/farmer/useFarmerDepositCrateFromPlant.ts +++ b/projects/ui/src/hooks/farmer/useFarmerDepositCrateFromPlant.ts @@ -5,6 +5,8 @@ import useSeason from '../beanstalk/useSeason'; import useFarmerSilo from './useFarmerSilo'; import { LegacyDepositCrate } from '~/state/farmer/silo'; import { tokenValueToBN } from '~/util'; +import { ZERO_BN } from '~/constants'; +import useStemTipForToken from '~/hooks/beanstalk/useStemTipForToken'; /// Returns the deposit crate which will be created via calling 'plant' export default function useFarmerDepositCrateFromPlant() { @@ -13,6 +15,7 @@ export default function useFarmerDepositCrateFromPlant() { /// Beanstalk const season = useSeason(); + const stemTip = useStemTipForToken(sdk.tokens.BEAN); /// Farmer const farmerSilo = useFarmerSilo(); @@ -27,12 +30,18 @@ export default function useFarmerDepositCrateFromPlant() { // no stalk is grown yet as it is a new deposit from the current season const grownStalk = STALK.amount(0); + if (!stemTip) throw new Error('No stem tip loaded for BEAN'); + // asBN => as DepositCrate from UI; const asBN: LegacyDepositCrate = { - season, + stem: stemTip, amount: earned, bdv: earned, - stalk: tokenValueToBN(stalk), + stalk: { + total: tokenValueToBN(stalk), + base: tokenValueToBN(stalk), + grown: ZERO_BN, + }, seeds: tokenValueToBN(seeds), }; @@ -51,7 +60,7 @@ export default function useFarmerDepositCrateFromPlant() { asBN, asTV, }; - }, [farmerSilo.beans.earned, sdk.tokens, season]); + }, [farmerSilo.beans.earned, sdk.tokens, season, stemTip]); return { crate, diff --git a/projects/ui/src/lib/Txn/Interface/PlantAndDoX.ts b/projects/ui/src/lib/Txn/Interface/PlantAndDoX.ts index c87d288f38..05d718b6c1 100644 --- a/projects/ui/src/lib/Txn/Interface/PlantAndDoX.ts +++ b/projects/ui/src/lib/Txn/Interface/PlantAndDoX.ts @@ -16,7 +16,7 @@ export default class PlantAndDoX { private _season: number ) { this._earnedBeans = _earnedBeans; - this._season = _season; + this._season = 0; // FIXME } /// Returns whether 'plant' can be called @@ -66,7 +66,7 @@ export default class PlantAndDoX { // asTV => as DepositCrate from SDK; const crate: TokenSiloBalance['deposits'][number] = { - season: ethers.BigNumber.from(season), + stem: ethers.BigNumber.from(season), // FIXME amount: earnedBeans, bdv: earnedBeans, stalk: { @@ -74,8 +74,6 @@ export default class PlantAndDoX { base: stalk, grown: grownStalk, }, - baseStalk: stalk, - grownStalk, seeds, }; @@ -95,10 +93,14 @@ export default class PlantAndDoX { const seeds = BEAN.getSeeds(earnedTV); const crate: LegacyDepositCrate = { - season, + stem: ethers.BigNumber.from(season), // FIXME amount: earnedBeans, bdv: earnedBeans, - stalk: tokenValueToBN(stalk), + stalk: { + total: tokenValueToBN(stalk), + base: tokenValueToBN(stalk), + grown: new BigNumber(0), + }, seeds: tokenValueToBN(seeds), }; diff --git a/projects/ui/src/state/beanstalk/silo/updater.ts b/projects/ui/src/state/beanstalk/silo/updater.ts index 6bcfca406a..6d022caa9b 100644 --- a/projects/ui/src/state/beanstalk/silo/updater.ts +++ b/projects/ui/src/state/beanstalk/silo/updater.ts @@ -34,8 +34,6 @@ export const useFetchBeanstalkSilo = () => { earnedBeansTotal, // 4 whitelistedAssetTotals, - // 5 - stemTips, ] = await Promise.all([ // 0 sdk.contracts.beanstalk.totalStalk().then(tokenResult(STALK)), // Does NOT include Grown Stalk @@ -83,9 +81,6 @@ export const useFetchBeanstalkSilo = () => { })) ) ), - - // 5 - sdk.silo.getStemTips([...sdk.tokens.siloWhitelist]), ] as const); console.debug('[beanstalk/silo/useBeanstalkSilo] RESULT', [ @@ -106,7 +101,7 @@ export const useFetchBeanstalkSilo = () => { const token = sdk.tokens.findByAddress(curr.address); if (!token) throw new Error(`Token not found in SDK: ${curr.address}`); - const stemTip = stemTips.get(token); + const stemTip = curr.stemTip; if (!stemTip) throw new Error(`Stem Tip not found in SDK: ${curr.address}`);