Skip to content

Commit

Permalink
updated broker pallets calls to be more general, added the estimated …
Browse files Browse the repository at this point in the history
…bulk price value for overtime ui tab (#10923)
  • Loading branch information
piggydoughnut committed Sep 17, 2024
1 parent a983d21 commit 12d9b3a
Show file tree
Hide file tree
Showing 9 changed files with 142 additions and 79 deletions.
9 changes: 2 additions & 7 deletions packages/page-broker/src/Overview/Summary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import React from 'react';

import { CardSummary, styled, SummaryBox, UsageBar } from '@polkadot/react-components';
import { defaultHighlight } from '@polkadot/react-components/styles';
import { useApi, useBrokerStatus, useCurrentPrice, useRenewalBump } from '@polkadot/react-hooks';
import { useApi, useBrokerStatus } from '@polkadot/react-hooks';

import { useTranslation } from '../translate.js';
import { getStats } from '../utils.js';
Expand Down Expand Up @@ -41,8 +41,6 @@ interface Props {
function Summary ({ workloadInfos }: Props): React.ReactElement {
const { t } = useTranslation();
const { api, apiEndpoint } = useApi();
const renewalBump = useRenewalBump();
const currentPrice = useCurrentPrice();
const totalCores = useBrokerStatus('coreCount');
const uiHighlight = apiEndpoint?.ui.color || defaultHighlight;
const { idles, pools, tasks }: statsType = React.useMemo(() => getStats(totalCores, workloadInfos), [totalCores, workloadInfos]);
Expand All @@ -66,10 +64,7 @@ function Summary ({ workloadInfos }: Props): React.ReactElement {
<RegionLength />
</CardSummary>
<CardSummary label={t('estimated bulk price')}>
<RenewalPrice
currentPrice={currentPrice}
renewalBump={renewalBump}
/>
<RenewalPrice />
</CardSummary>
</StyledDiv>
</>
Expand Down
12 changes: 4 additions & 8 deletions packages/page-broker/src/Overview/Summary/RenewalPrice.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import React from 'react';

import { useBrokerSalesInfo } from '@polkadot/react-hooks';
import { formatBalance } from '@polkadot/util';

interface Props {
Expand All @@ -12,18 +13,13 @@ interface Props {
currentPrice?: string;
}

function RenewalPrice ({ currentPrice, renewalBump }: Props): React.ReactElement<Props> | null {
const percentage = renewalBump ? Number.parseInt(renewalBump) / 1000000000 : 0;

const price = currentPrice ? Number.parseInt(currentPrice) : 0;

const renewalPrice = price * percentage + price;
function RenewalPrice (): React.ReactElement<Props> | null {
const salesInfo = useBrokerSalesInfo();

return (
<div className='ui--balance-value'>
{formatBalance(renewalPrice) || '-'}
{formatBalance(salesInfo?.endPrice) || '-'}
</div>

);
}

Expand Down
4 changes: 2 additions & 2 deletions packages/react-hooks/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,17 @@ export { useBlockEvents } from './useBlockEvents.js';
export { useBlockInterval } from './useBlockInterval.js';
export { useBlocksPerDays } from './useBlocksPerDays.js';
export { useBlockTime } from './useBlockTime.js';
export { useBrokerConfig } from './useBrokerConfig.js';
export { useBrokerLeases } from './useBrokerLeases.js';
export { useBrokerReservations } from './useBrokerReservations.js';
export { useBrokerSalesInfo } from './useBrokerSalesInfo.js';
export { useBrokerStatus } from './useBrokerStatus.js';
export { useCacheKey } from './useCacheKey.js';
export { useCall } from './useCall.js';
export { useCallMulti } from './useCallMulti.js';
export { useCollectiveInstance } from './useCollectiveInstance.js';
export { useCollectiveMembers } from './useCollectiveMembers.js';
export { useCoreDescriptor } from './useCoreDescriptor.js';
export { useCurrentPrice } from './useCurrentPrice.js';
export { useDebounce } from './useDebounce.js';
export { useDelegations } from './useDelegations.js';
export { useDeriveAccountFlags } from './useDeriveAccountFlags.js';
Expand Down Expand Up @@ -74,7 +75,6 @@ export { useQueue } from './useQueue.js';
export { useQueueStatus } from './useQueueStatus.js';
export { useRegions } from './useRegions.js';
export { useRegistrars } from './useRegistrars.js';
export { useRenewalBump } from './useRenewalBump.js';
export { useSavedFlags } from './useSavedFlags.js';
export { useScroll } from './useScroll.js';
export { useStakingInfo } from './useStakingInfo.js';
Expand Down
24 changes: 24 additions & 0 deletions packages/react-hooks/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,27 @@ export interface LegacyLease {
until: number,
task: string
}

export interface PalletBrokerSaleInfoRecord {
saleStart: number;
leadinLength: number;
endPrice: BN;
regionBegin: number;
regionEnd: number;
idealCoresSold: number;
coresOffered: number;
firstCore: number;
selloutPrice: BN;
coresSold: number;
}

export interface PalletBrokerConfigRecord {
advanceNotice: number;
interludeLength: number;
leadinLength: number;
regionLength: number;
idealBulkProportion: BN;
limitCoresOffered: number;
renewalBump: BN;
contributionTimeout: number;
}
45 changes: 45 additions & 0 deletions packages/react-hooks/src/useBrokerConfig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Copyright 2017-2024 @polkadot/react-hooks authors & contributors
// SPDX-License-Identifier: Apache-2.0

import type { PalletBrokerConfigRecord } from '@polkadot/types/lookup';
import type { PalletBrokerConfigRecord as SimplifiedPalletBrokerConfigRecord } from './types.js';

import { useEffect, useState } from 'react';

import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks';

import { stringToBN } from './utils/dataProcessing.js';

function parseConfig (config: PalletBrokerConfigRecord): SimplifiedPalletBrokerConfigRecord {
const c = config.toJSON();

return {
advanceNotice: c.advanceNotice as number,
contributionTimeout: c.contributionTimeout as number,
idealBulkProportion: stringToBN(c.idealBulkProportion?.toString()),
interludeLength: c.interludeLength as number,
leadinLength: c.leadinLength as number,
limitCoresOffered: c.limitCoresOffered as number,
regionLength: c.regionLength as number,
renewalBump: stringToBN(c.renewalBump?.toString())
};
}

function useBrokerConfigImpl () {
const { api, isApiReady } = useApi();

const config = useCall<PalletBrokerConfigRecord>(isApiReady && api.query.broker.configuration);

const [state, setState] = useState<SimplifiedPalletBrokerConfigRecord>();

useEffect((): void => {
config &&
setState(
parseConfig(config)
);
}, [config]);

return state;
}

export const useBrokerConfig = createNamedHook('useBrokerConfig', useBrokerConfigImpl);
49 changes: 49 additions & 0 deletions packages/react-hooks/src/useBrokerSalesInfo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright 2017-2024 @polkadot/react-hooks authors & contributors
// SPDX-License-Identifier: Apache-2.0

import type { PalletBrokerSaleInfoRecord } from '@polkadot/types/lookup';
import type { PalletBrokerSaleInfoRecord as SimplifiedPalletBrokerSaleInfoRecord } from './types.js';

import { useEffect, useState } from 'react';

import { createNamedHook, useApi, useCall } from '@polkadot/react-hooks';

import { stringToBN } from './utils/dataProcessing.js';

function parsePalletBrokerSaleInfoRecord (
record: PalletBrokerSaleInfoRecord
): SimplifiedPalletBrokerSaleInfoRecord {
const rec = record.toJSON();

return {
coresOffered: rec.coresOffered as number,
coresSold: rec.coresSold as number,
endPrice: stringToBN(rec.endPrice?.toString()),
firstCore: rec.firstCore as number,
idealCoresSold: rec.idealCoresSold as number,
leadinLength: rec.leadinLength as number,
regionBegin: rec.regionBegin as number,
regionEnd: rec.regionEnd as number,
saleStart: rec.saleStart as number,
selloutPrice: stringToBN(rec.selloutPrice?.toString())
};
}

function useBrokerSalesInfoImpl () {
const { api, isApiReady } = useApi();

const saleInfo = useCall<PalletBrokerSaleInfoRecord>(isApiReady && api.query.broker.saleInfo);

const [state, setState] = useState<SimplifiedPalletBrokerSaleInfoRecord | undefined>();

useEffect((): void => {
saleInfo &&
setState(
parsePalletBrokerSaleInfoRecord(saleInfo)
);
}, [saleInfo]);

return state;
}

export const useBrokerSalesInfo = createNamedHook('useBrokerSalesInfo', useBrokerSalesInfoImpl);
31 changes: 0 additions & 31 deletions packages/react-hooks/src/useCurrentPrice.tsx

This file was deleted.

31 changes: 0 additions & 31 deletions packages/react-hooks/src/useRenewalBump.ts

This file was deleted.

16 changes: 16 additions & 0 deletions packages/react-hooks/src/utils/dataProcessing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@

import type { PalletBrokerScheduleItem } from '@polkadot/types/lookup';

import { BN } from '@polkadot/util';

export function hexToBin (hex: string): string {
return parseInt(hex, 16).toString(2);
}
Expand All @@ -23,3 +25,17 @@ export function processHexMask (mask: PalletBrokerScheduleItem['mask'] | undefin

return buffArr;
}

export function stringToBN (value: string | undefined): BN {
if (!value) {
return new BN(0);
}

const sanitized = value.trim().replace(/,/g, '');

if (!/^\d+$/.test(sanitized)) {
throw new Error(`Invalid input for BN conversion: "${sanitized}"`);
}

return new BN(sanitized);
}

0 comments on commit 12d9b3a

Please sign in to comment.