diff --git a/src/app/delegations/[delegatorEvmAddr]/_components/DelegationsTable.tsx b/src/app/delegations/[delegatorEvmAddr]/_components/DelegationsTable.tsx index bbb37af..8527271 100644 --- a/src/app/delegations/[delegatorEvmAddr]/_components/DelegationsTable.tsx +++ b/src/app/delegations/[delegatorEvmAddr]/_components/DelegationsTable.tsx @@ -1,6 +1,5 @@ 'use client' -import { ExternalLinkIcon } from '@radix-ui/react-icons' import { ColumnFiltersState, SortingState, @@ -15,12 +14,9 @@ import { useEffect, useMemo, useState } from 'react' import { Address, formatEther, isAddressEqual, zeroAddress } from 'viem' import { useAccount } from 'wagmi' -import { DataTablePagination } from '@/components/DataTablePagination' import TooltipWrapper from '@/components/TooltipWrapper' import { RedelegateDialog } from '@/components/dialogs/RedelegateDialog' -import { StakeDialog } from '@/components/dialogs/StakeDialog' import { UnstakeDialog } from '@/components/dialogs/UnstakeDialog' -import { STAKING_PERIODS } from '@/components/forms/StakeForm' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table' import { getValidator } from '@/lib/services/api/validatorApi' import { useDelegatorPeriodDelegations } from '@/lib/services/hooks/useDelegatorPeriodDelegations' @@ -28,6 +24,8 @@ import { useIsSmallDevice } from '@/lib/services/hooks/useIsSmallDevice' import { formatLargeMetricsNumber, truncateAddress } from '@/lib/utils' import StyledCard from '@/components/cards/StyledCard' import { useSingularity } from '@/lib/services/hooks/useSingularity' +import { StakingPeriodMultiplierInfo } from '@/lib/types' +import { STAKING_PERIODS } from '@/lib/constants' export default function DelegationsTable(props: { delegatorEvmAddr: Address }) { const [sorting, setSorting] = useState([]) @@ -200,15 +198,17 @@ export default function DelegationsTable(props: { delegatorEvmAddr: Address }) { {periodDelegation.period_delegation.period_type !== undefined - ? STAKING_PERIODS.find( - (period) => period.value === periodDelegation.period_delegation.period_type.toString() + ? STAKING_PERIODS[process.env.NEXT_PUBLIC_CHAIN_ID].find( + (period: StakingPeriodMultiplierInfo) => + period.value === periodDelegation.period_delegation.period_type.toString() )?.label + '' : 'Flexible'} {periodDelegation.period_delegation.period_type !== undefined - ? STAKING_PERIODS.find( - (period) => period.value === periodDelegation.period_delegation.period_type.toString() + ? STAKING_PERIODS[process.env.NEXT_PUBLIC_CHAIN_ID].find( + (period: StakingPeriodMultiplierInfo) => + period.value === periodDelegation.period_delegation.period_type.toString() )?.multiplier : '1.0x'} diff --git a/src/components/WagmiProviderWrapper.tsx b/src/components/WagmiProviderWrapper.tsx index 010a6ce..a521369 100644 --- a/src/components/WagmiProviderWrapper.tsx +++ b/src/components/WagmiProviderWrapper.tsx @@ -93,16 +93,7 @@ const testnetConfig = createConfig({ const mainnetConfig = createConfig({ chains: [storyMainnet], transports: { - [1514]: fallback([ - http('https://internal-full.storyrpc.io', { - fetchOptions: { - headers: { - 'x-origin': 'staking.story.foundation', - }, - }, - }), - http('https://mainnet.storyrpc.io'), - ]), + [1514]: fallback([http('https://mainnet.storyrpc.io')]), }, connectors, ssr: true, diff --git a/src/components/forms/StakeForm.tsx b/src/components/forms/StakeForm.tsx index 6558119..0366bcb 100644 --- a/src/components/forms/StakeForm.tsx +++ b/src/components/forms/StakeForm.tsx @@ -16,7 +16,7 @@ import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { useReadIpTokenStakeMinStakeAmount, useWriteIpTokenStakeStake } from '@/lib/contracts' import { useValidatorDelegatorDelegations } from '@/lib/services/hooks/useValidatorDelegatorDelegations' -import { Validator } from '@/lib/types' +import { StakingPeriodMultiplierInfo, Validator } from '@/lib/types' import { base64ToHex, cn, formatLargeMetricsNumber, truncateAddress } from '@/lib/utils' import ViewTransaction from '../buttons/ViewTransaction' @@ -24,13 +24,7 @@ import { DialogClose } from '../ui/dialog' import { useAllValidators } from '@/lib/services/hooks/useAllValidators' import { useIsSmallDevice } from '@/lib/services/hooks/useIsSmallDevice' import { getValidator } from '@/lib/services/api/validatorApi' - -export const STAKING_PERIODS = [ - { value: '0', label: 'Flexible', multiplier: '1.0x', description: 'Unstake anytime' }, - { value: '1', label: '90 Days', multiplier: '1.051x', description: 'Lock for 90 days' }, - { value: '2', label: '360 Days', multiplier: '1.16x', description: 'Lock for 360 days' }, - { value: '3', label: '540 Days', multiplier: '1.34x', description: 'Lock for 540 days' }, -] as const +import { STAKING_PERIODS } from '@/lib/constants' const createFormSchema = ({ minStakeAmount, @@ -74,7 +68,7 @@ export function StakeForm(props: { validator?: Validator; isFlexible?: boolean } const { data: minStakeAmount } = useReadIpTokenStakeMinStakeAmount() console.log({ minStakeAmount }) const [stakeTxHash, setStakeTxHash] = useState(undefined) - const { address } = useAccount() + const { address, chainId } = useAccount() const { data: balance, refetch: refetchBalance } = useBalance({ address: address, }) @@ -219,16 +213,18 @@ export function StakeForm(props: { validator?: Validator; isFlexible?: boolean } ) : ( - STAKING_PERIODS.map((period) => ( - -
- - {period.label} ({period.multiplier} rewards) - - - {period.description} -
-
- )) + STAKING_PERIODS[process.env.NEXT_PUBLIC_CHAIN_ID].map( + (period: StakingPeriodMultiplierInfo) => ( + +
+ + {period.label} ({period.multiplier} rewards) + + - {period.description} +
+
+ ) + ) )} diff --git a/src/components/forms/UnstakeForm.tsx b/src/components/forms/UnstakeForm.tsx index 43d1186..0a79f18 100644 --- a/src/components/forms/UnstakeForm.tsx +++ b/src/components/forms/UnstakeForm.tsx @@ -12,15 +12,14 @@ import { z } from 'zod' import { Button } from '@/components/ui/button' import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form' import { Input } from '@/components/ui/input' -import { feeEther, feeWei } from '@/lib/constants' +import { feeEther, feeWei, STAKING_PERIODS } from '@/lib/constants' import { useWriteIpTokenStakeUnstake } from '@/lib/contracts' import { useDelegatorPeriodDelegationsOnValidator } from '@/lib/services/hooks/useDelegatorPeriodDelegationsOnValidator' import { useValidatorDelegatorDelegations } from '@/lib/services/hooks/useValidatorDelegatorDelegations' -import { PeriodDelegation, Validator } from '@/lib/types' +import { StakingPeriodMultiplierInfo, Validator } from '@/lib/types' import { base64ToHex, cn, formatLargeMetricsNumber } from '@/lib/utils' import ViewTransaction from '../buttons/ViewTransaction' -import { STAKING_PERIODS } from './StakeForm' const createFormSchema = ({ totalStaked }: { totalStaked?: string }) => z.object({ @@ -191,8 +190,8 @@ export function UnstakeForm({ validator }: { validator: Validator }) { {periodDelegations?.period_delegation_responses.map((delegation: any, index: any) => { const isUnlocked = new Date(delegation.period_delegation.end_time) <= new Date() - const stakingPeriod = STAKING_PERIODS.find( - (period) => + const stakingPeriod = STAKING_PERIODS[process.env.NEXT_PUBLIC_CHAIN_ID].find( + (period: StakingPeriodMultiplierInfo) => period.value === (delegation.period_delegation.period_type?.toString() ?? '0') ) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 750e783..f9ff13c 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -1,4 +1,5 @@ import { parseEther } from 'viem' +import { StakingPeriodMultiplierInfo } from './types' export const links = { docsValidator: 'https://docs.story.foundation/docs/validator-operations', @@ -11,3 +12,18 @@ export const links = { export const totalToken = 1e9 export const feeEther = '1' export const feeWei = parseEther(feeEther) + +export const STAKING_PERIODS: Record = { + 1315: [ + { value: '0', label: 'Flexible', multiplier: '1.0x', description: 'Unstake anytime' }, + { value: '1', label: '90 Days', multiplier: '1.051x', description: 'Lock for 90 days' }, + { value: '2', label: '360 Days', multiplier: '1.16x', description: 'Lock for 360 days' }, + { value: '3', label: '540 Days', multiplier: '1.34x', description: 'Lock for 540 days' }, + ] as const, + 1514: [ + { value: '0', label: 'Flexible', multiplier: '1.0x', description: 'Unstake anytime' }, + { value: '1', label: '90 Days', multiplier: '1.1x', description: 'Lock for 90 days' }, + { value: '2', label: '360 Days', multiplier: '1.5x', description: 'Lock for 360 days' }, + { value: '3', label: '540 Days', multiplier: '2.0x', description: 'Lock for 540 days' }, + ] as const, +} diff --git a/src/lib/types/index.ts b/src/lib/types/index.ts index e01c87a..8ad48a5 100644 --- a/src/lib/types/index.ts +++ b/src/lib/types/index.ts @@ -113,3 +113,5 @@ export type PeriodDelegation = { shares: string period_type?: number } + +export type StakingPeriodMultiplierInfo = { value: string; label: string; multiplier: string; description: string }