Calculate auction range correctly (no BN_THREE) (#5502)

* Calculate auction range correctly (no BN_THREE)

* Unneeded subtract
This commit is contained in:
Jaco 2021-06-08 15:23:05 +03:00 committed by GitHub
parent a920aed4c2
commit 98891fe0da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 32 additions and 19 deletions

View File

@ -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<Option<ITuple<[LeasePeriodOf, BlockNumber]>>>(api.query.auctions?.auctionInfo);
const councilMotions = useCall<DeriveCollectiveProposal[]>(api.derive.council?.proposals);
const dispatches = useCall<DeriveDispatch[]>(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]

View File

@ -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<Props> {
const { t } = useTranslation();
const { api } = useApi();
const rangeMax = useLeaseRangeMax();
const newRaise = useCall<ParaId[]>(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 (

View File

@ -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<OwnerInfo>(EMPTY_OWNER);
const [amount, setAmount] = useState<BN | undefined>(BN_ZERO);
const [range, setRange] = useState(0);

View File

@ -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<Props> {
const { t } = useTranslation();
const { api } = useApi();
const ranges = useRanges();
const ranges = useLeaseRanges();
const [{ accountId, paraId }, setOwnerInfo] = useState<OwnerInfo>(EMPTY_OWNER);
const [cap, setCap] = useState<BN | undefined>();
const [endBlock, setEndBlock] = useState<BN | undefined>();

View File

@ -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]
);
}

View File

@ -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<Winning[] | undefined>();
const bestNumber = useBestNumber();
const trigger = useEventTrigger([api.events.auctions?.BidAccepted]);