From 98891fe0da5290a83de0b202bf61912430139ee4 Mon Sep 17 00:00:00 2001 From: Jaco Date: Tue, 8 Jun 2021 15:23:05 +0300 Subject: [PATCH] Calculate auction range correctly (no BN_THREE) (#5502) * Calculate auction range correctly (no BN_THREE) * Unneeded subtract --- packages/page-calendar/src/useScheduled.ts | 20 ++++++++++--------- .../page-parachains/src/Auctions/Auction.tsx | 7 ++++--- packages/page-parachains/src/Auctions/Bid.tsx | 4 ++-- .../page-parachains/src/Crowdloan/FundAdd.tsx | 4 ++-- .../src/{useRanges.ts => useLeaseRanges.ts} | 12 ++++++++++- .../page-parachains/src/useWinningData.ts | 4 ++-- 6 files changed, 32 insertions(+), 19 deletions(-) rename packages/page-parachains/src/{useRanges.ts => useLeaseRanges.ts} (79%) diff --git a/packages/page-calendar/src/useScheduled.ts b/packages/page-calendar/src/useScheduled.ts index 950e5adefe..215305ae09 100644 --- a/packages/page-calendar/src/useScheduled.ts +++ b/packages/page-calendar/src/useScheduled.ts @@ -10,8 +10,9 @@ import type { EntryInfo, EntryInfoTyped, EntryType } from './types'; import { useEffect, useState } from 'react'; +import { useLeaseRangeMax } from '@polkadot/app-parachains/useLeaseRanges'; import { useApi, useBestNumber, useBlockTime, useCall } from '@polkadot/react-hooks'; -import { BN_ONE, BN_THREE } from '@polkadot/util'; +import { BN_ONE, BN_ZERO } from '@polkadot/util'; interface DateExt { date: Date; @@ -28,8 +29,8 @@ function newDate (blocks: BN, blockTime: number): DateExt { return { date, dateTime: date.getTime() }; } -function createConstDurations (bestNumber: BlockNumber, blockTime: number, items: [EntryType, BlockNumber?][]): [EntryType, EntryInfo[]][] { - return items.map(([type, duration]): [EntryType, EntryInfo[]] => { +function createConstDurations (bestNumber: BlockNumber, blockTime: number, items: [EntryType, BlockNumber?, BN?][]): [EntryType, EntryInfo[]][] { + return items.map(([type, duration, additional = BN_ZERO]): [EntryType, EntryInfo[]] => { if (!duration) { return [type, []]; } @@ -40,7 +41,7 @@ function createConstDurations (bestNumber: BlockNumber, blockTime: number, items ...newDate(blocks, blockTime), blockNumber: bestNumber.add(blocks), blocks, - info: bestNumber.div(duration) + info: bestNumber.div(duration).iadd(additional) }]]; }); } @@ -169,7 +170,7 @@ function createScheduled (bestNumber: BlockNumber, blockTime: number, scheduled: }, [])]]; } -function createAuctionInfo (bestNumber: BlockNumber, blockTime: number, [leasePeriod, endBlock]: [LeasePeriodOf, BlockNumber]): [EntryType, EntryInfo[]][] { +function createAuctionInfo (bestNumber: BlockNumber, blockTime: number, rangeMax: BN, [leasePeriod, endBlock]: [LeasePeriodOf, BlockNumber]): [EntryType, EntryInfo[]][] { const blocks = endBlock.sub(bestNumber); return [ @@ -177,7 +178,7 @@ function createAuctionInfo (bestNumber: BlockNumber, blockTime: number, [leasePe ...newDate(blocks, blockTime), blockNumber: endBlock, blocks, - info: `${leasePeriod.toString()} - ${leasePeriod.add(BN_THREE).toString()}` + info: `${leasePeriod.toString()} - ${leasePeriod.add(rangeMax).toString()}` }]] ]; } @@ -199,6 +200,7 @@ export default function useScheduled (): EntryInfo[] { const { api } = useApi(); const [blockTime] = useBlockTime(); const bestNumber = useBestNumber(); + const leaseRangeMax = useLeaseRangeMax(); const auctionInfo = useCall>>(api.query.auctions?.auctionInfo); const councilMotions = useCall(api.derive.council?.proposals); const dispatches = useCall(api.derive.democracy?.dispatchQueue); @@ -240,16 +242,16 @@ export default function useScheduled (): EntryInfo[] { useEffect((): void => { bestNumber && auctionInfo?.isSome && setState((state) => - addFiltered(state, createAuctionInfo(bestNumber, blockTime, auctionInfo.unwrap())) + addFiltered(state, createAuctionInfo(bestNumber, blockTime, leaseRangeMax, auctionInfo.unwrap())) ); - }, [auctionInfo, bestNumber, blockTime]); + }, [auctionInfo, bestNumber, blockTime, leaseRangeMax]); useEffect((): void => { bestNumber && setState((state) => addFiltered(state, createConstDurations(bestNumber, blockTime, [ ['councilElection', (api.consts.elections || api.consts.phragmenElection || api.consts.electionsPhragmen)?.termDuration], ['democracyLaunch', api.consts.democracy?.launchPeriod], - ['parachainLease', api.consts.slots?.leasePeriod as BlockNumber], + ['parachainLease', api.consts.slots?.leasePeriod as BlockNumber, BN_ONE], ['societyChallenge', api.consts.society?.challengePeriod], ['societyRotate', api.consts.society?.rotationPeriod], ['treasurySpend', api.consts.treasury?.spendPeriod] diff --git a/packages/page-parachains/src/Auctions/Auction.tsx b/packages/page-parachains/src/Auctions/Auction.tsx index 5ca8013395..eba0fbcd92 100644 --- a/packages/page-parachains/src/Auctions/Auction.tsx +++ b/packages/page-parachains/src/Auctions/Auction.tsx @@ -8,9 +8,9 @@ import React, { useCallback, useRef } from 'react'; import { Table } from '@polkadot/react-components'; import { useApi, useCall } from '@polkadot/react-hooks'; -import { BN_THREE } from '@polkadot/util'; import { useTranslation } from '../translate'; +import { useLeaseRangeMax } from '../useLeaseRanges'; import WinRange from './WinRange'; interface Props { @@ -23,6 +23,7 @@ interface Props { function Auction ({ auctionInfo, campaigns, className, winningData }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); + const rangeMax = useLeaseRangeMax(); const newRaise = useCall(api.query.crowdloan.newRaise); const headerRef = useRef([ @@ -40,7 +41,7 @@ function Auction ({ auctionInfo, campaigns, className, winningData }: Props): Re } const leasePeriod = auctionInfo.leasePeriod; - const leasePeriodEnd = leasePeriod.add(BN_THREE); + const leasePeriodEnd = leasePeriod.add(rangeMax); const sorted = (campaigns.funds || []) .filter(({ firstSlot, lastSlot, paraId }) => newRaise.some((n) => n.eq(paraId)) && @@ -75,7 +76,7 @@ function Auction ({ auctionInfo, campaigns, className, winningData }: Props): Re : a.firstSlot.cmp(b.firstSlot) ); }, - [auctionInfo, campaigns, newRaise] + [auctionInfo, campaigns, newRaise, rangeMax] ); return ( diff --git a/packages/page-parachains/src/Auctions/Bid.tsx b/packages/page-parachains/src/Auctions/Bid.tsx index 0ad636e9f2..fc0ec8ab5b 100644 --- a/packages/page-parachains/src/Auctions/Bid.tsx +++ b/packages/page-parachains/src/Auctions/Bid.tsx @@ -13,7 +13,7 @@ import { BN_ZERO, formatNumber } from '@polkadot/util'; import InputOwner from '../InputOwner'; import { useTranslation } from '../translate'; -import useRanges from '../useRanges'; +import { useLeaseRanges } from '../useLeaseRanges'; interface Props { auctionInfo?: AuctionInfo; @@ -36,7 +36,7 @@ function Bid ({ auctionInfo, className, lastWinners, ownedIds }: Props): React.R const { api } = useApi(); const { hasAccounts } = useAccounts(); const bestNumber = useBestNumber(); - const ranges = useRanges(); + const ranges = useLeaseRanges(); const [{ accountId, paraId }, setOwnerInfo] = useState(EMPTY_OWNER); const [amount, setAmount] = useState(BN_ZERO); const [range, setRange] = useState(0); diff --git a/packages/page-parachains/src/Crowdloan/FundAdd.tsx b/packages/page-parachains/src/Crowdloan/FundAdd.tsx index bcd2d94e3f..db350aac58 100644 --- a/packages/page-parachains/src/Crowdloan/FundAdd.tsx +++ b/packages/page-parachains/src/Crowdloan/FundAdd.tsx @@ -12,7 +12,7 @@ import { BN_ONE, BN_ZERO } from '@polkadot/util'; import InputOwner from '../InputOwner'; import { useTranslation } from '../translate'; -import useRanges from '../useRanges'; +import { useLeaseRanges } from '../useLeaseRanges'; interface Props { auctionInfo?: AuctionInfo; @@ -27,7 +27,7 @@ const EMPTY_OWNER: OwnerInfo = { accountId: null, paraId: 0 }; function FundAdd ({ auctionInfo, bestNumber, className, leasePeriod, ownedIds }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); - const ranges = useRanges(); + const ranges = useLeaseRanges(); const [{ accountId, paraId }, setOwnerInfo] = useState(EMPTY_OWNER); const [cap, setCap] = useState(); const [endBlock, setEndBlock] = useState(); diff --git a/packages/page-parachains/src/useRanges.ts b/packages/page-parachains/src/useLeaseRanges.ts similarity index 79% rename from packages/page-parachains/src/useRanges.ts rename to packages/page-parachains/src/useLeaseRanges.ts index 74c905bda1..fad42b4a7d 100644 --- a/packages/page-parachains/src/useRanges.ts +++ b/packages/page-parachains/src/useLeaseRanges.ts @@ -3,6 +3,7 @@ import type { u32 } from '@polkadot/types'; +import BN from 'bn.js'; import { useMemo } from 'react'; import { useApi } from '@polkadot/react-hooks'; @@ -18,7 +19,7 @@ function isU32 (leasePeriodsPerSlot: unknown): leasePeriodsPerSlot is u32 { return !!leasePeriodsPerSlot; } -export default function useRanges (): [number, number][] { +export function useLeaseRanges (): [number, number][] { const { api } = useApi(); return useMemo( @@ -40,3 +41,12 @@ export default function useRanges (): [number, number][] { [api] ); } + +export function useLeaseRangeMax (): BN { + const ranges = useLeaseRanges(); + + return useMemo( + () => new BN(ranges[ranges.length - 1][1]), + [ranges] + ); +} diff --git a/packages/page-parachains/src/useWinningData.ts b/packages/page-parachains/src/useWinningData.ts index 3cd773d80d..b88da54952 100644 --- a/packages/page-parachains/src/useWinningData.ts +++ b/packages/page-parachains/src/useWinningData.ts @@ -12,7 +12,7 @@ import { useApi, useBestNumber, useCall, useEventTrigger } from '@polkadot/react import { BN_ONE, BN_ZERO, u8aEq } from '@polkadot/util'; import { CROWD_PREFIX } from './constants'; -import useRanges from './useRanges'; +import { useLeaseRanges } from './useLeaseRanges'; const FIRST_PARAM = [0]; @@ -123,7 +123,7 @@ function mergeFirst (ranges: [number, number][], auctionInfo: AuctionInfo, prev: export default function useWinningData (auctionInfo?: AuctionInfo): Winning[] | undefined { const { api } = useApi(); - const ranges = useRanges(); + const ranges = useLeaseRanges(); const [result, setResult] = useState(); const bestNumber = useBestNumber(); const trigger = useEventTrigger([api.events.auctions?.BidAccepted]);