Skip to content

Commit

Permalink
🔧 Update multiplier info
Browse files Browse the repository at this point in the history
  • Loading branch information
DonFungible committed Feb 12, 2025
1 parent 7714bc2 commit cb6fccf
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
'use client'

import { ExternalLinkIcon } from '@radix-ui/react-icons'
import {
ColumnFiltersState,
SortingState,
Expand All @@ -15,19 +14,18 @@ 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'
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<SortingState>([])
Expand Down Expand Up @@ -200,15 +198,17 @@ export default function DelegationsTable(props: { delegatorEvmAddr: Address }) {
</TableCell>
<TableCell className="break-words text-center">
{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'}
</TableCell>
<TableCell className="hidden break-words text-center md:table-cell">
{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'}
</TableCell>
Expand Down
11 changes: 1 addition & 10 deletions src/components/WagmiProviderWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
34 changes: 15 additions & 19 deletions src/components/forms/StakeForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,15 @@ 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'
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,
Expand Down Expand Up @@ -74,7 +68,7 @@ export function StakeForm(props: { validator?: Validator; isFlexible?: boolean }
const { data: minStakeAmount } = useReadIpTokenStakeMinStakeAmount()
console.log({ minStakeAmount })
const [stakeTxHash, setStakeTxHash] = useState<Hex | undefined>(undefined)
const { address } = useAccount()
const { address, chainId } = useAccount()
const { data: balance, refetch: refetchBalance } = useBalance({
address: address,
})
Expand Down Expand Up @@ -219,16 +213,18 @@ export function StakeForm(props: { validator?: Validator; isFlexible?: boolean }
</div>
</SelectItem>
) : (
STAKING_PERIODS.map((period) => (
<SelectItem key={period.value} value={period.value} className="text-white">
<div className="flex flex-row items-center gap-2">
<span className="font-medium">
{period.label} ({period.multiplier} rewards)
</span>
<span className="text-sm text-gray-400">- {period.description}</span>
</div>
</SelectItem>
))
STAKING_PERIODS[process.env.NEXT_PUBLIC_CHAIN_ID].map(
(period: StakingPeriodMultiplierInfo) => (
<SelectItem key={period.value} value={period.value} className="text-white">
<div className="flex flex-row items-center gap-2">
<span className="font-medium">
{period.label} ({period.multiplier} rewards)
</span>
<span className="text-sm text-gray-400">- {period.description}</span>
</div>
</SelectItem>
)
)
)}
</SelectContent>
</Select>
Expand Down
9 changes: 4 additions & 5 deletions src/components/forms/UnstakeForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down Expand Up @@ -191,8 +190,8 @@ export function UnstakeForm({ validator }: { validator: Validator }) {
<tbody>
{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')
)

Expand Down
16 changes: 16 additions & 0 deletions src/lib/constants.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { parseEther } from 'viem'
import { StakingPeriodMultiplierInfo } from './types'

export const links = {
docsValidator: 'https://docs.story.foundation/docs/validator-operations',
Expand All @@ -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<string, StakingPeriodMultiplierInfo[]> = {
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,
}
2 changes: 2 additions & 0 deletions src/lib/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,3 +113,5 @@ export type PeriodDelegation = {
shares: string
period_type?: number
}

export type StakingPeriodMultiplierInfo = { value: string; label: string; multiplier: string; description: string }

0 comments on commit cb6fccf

Please sign in to comment.