From 2a7af81d16e02406a5452cc98dde8e555eda58ec Mon Sep 17 00:00:00 2001 From: Jaco Date: Mon, 28 Mar 2022 20:34:08 +0200 Subject: [PATCH] Staking pools (#7089) * Staking pools * Fly-by comment fix * Some infrastructure * multi * Create value * Retrieve singular params instance * defaultValue for multi query * Retrieve list of pool ids * Drive-by param formatting * Pool list retrieval * Retrieve pool info * Adjust trigger placement * Dump info * Join modal * Fix build * Allow creation & joining * caveman typing * Adjust disabled state * Adjust * cowboy types * Some basic stats * Created/Destoyed events * Adjust for latest * Set metadata on creation * Basic pools --- packages/page-staking/src/Pools/Create.tsx | 119 ++++++++++++++++++ packages/page-staking/src/Pools/Join.tsx | 94 ++++++++++++++ packages/page-staking/src/Pools/Pool.tsx | 55 ++++++++ packages/page-staking/src/Pools/Pools.tsx | 47 +++++++ packages/page-staking/src/Pools/Summary.tsx | 45 +++++++ packages/page-staking/src/Pools/index.tsx | 47 +++++++ packages/page-staking/src/Pools/types.ts | 38 ++++++ packages/page-staking/src/Pools/useParams.ts | 40 ++++++ packages/page-staking/src/Pools/usePoolIds.ts | 42 +++++++ .../page-staking/src/Pools/usePoolInfo.ts | 29 +++++ packages/page-staking/src/Slashes/Summary.tsx | 4 +- packages/page-staking/src/index.tsx | 17 ++- 12 files changed, 573 insertions(+), 4 deletions(-) create mode 100644 packages/page-staking/src/Pools/Create.tsx create mode 100644 packages/page-staking/src/Pools/Join.tsx create mode 100644 packages/page-staking/src/Pools/Pool.tsx create mode 100644 packages/page-staking/src/Pools/Pools.tsx create mode 100644 packages/page-staking/src/Pools/Summary.tsx create mode 100644 packages/page-staking/src/Pools/index.tsx create mode 100644 packages/page-staking/src/Pools/types.ts create mode 100644 packages/page-staking/src/Pools/useParams.ts create mode 100644 packages/page-staking/src/Pools/usePoolIds.ts create mode 100644 packages/page-staking/src/Pools/usePoolInfo.ts diff --git a/packages/page-staking/src/Pools/Create.tsx b/packages/page-staking/src/Pools/Create.tsx new file mode 100644 index 0000000000..46fc37b65a --- /dev/null +++ b/packages/page-staking/src/Pools/Create.tsx @@ -0,0 +1,119 @@ +// Copyright 2017-2022 @polkadot/app-staking authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import type { BN } from '@polkadot/util'; +import type { Params } from './types'; + +import React, { useMemo, useState } from 'react'; + +import { Button, Input, InputAddress, InputBalance, InputNumber, Modal, TxButton } from '@polkadot/react-components'; +import { useApi, useCall, useToggle } from '@polkadot/react-hooks'; +import { BN_ONE, bnMax } from '@polkadot/util'; + +import { useTranslation } from '../translate'; + +interface Props { + className?: string; + isDisabled?: boolean; + params: Params; +} + +function Create ({ className, isDisabled, params: { minCreateBond, minNominatorBond } }: Props): React.ReactElement { + const { t } = useTranslation(); + const { api } = useApi(); + const lastPoolId = useCall(api.query.nominationPools.lastPoolId); + const [isOpen, toggleOpen] = useToggle(); + const [accountId, setAccount] = useState(null); + const [amount, setAmount] = useState(); + const [metadata, setMetadata] = useState(''); + + const minValue = useMemo( + () => minCreateBond && minNominatorBond && bnMax(minCreateBond, minNominatorBond), + [minCreateBond, minNominatorBond] + ); + + const nextPoolId = useMemo( + () => lastPoolId && lastPoolId.add(BN_ONE), + [lastPoolId] + ); + + const isAmountError = useMemo( + () => !amount || !minValue || amount.lt(minValue), + [amount, minValue] + ); + + const extrinsic = useMemo( + () => accountId && !isAmountError + ? api.tx.utility.batch([ + api.tx.nominationPools.create(amount, accountId, accountId, accountId), + api.tx.nominationPools.setMetadata(nextPoolId, metadata) + ]) + : null, + [api, accountId, amount, isAmountError, metadata, nextPoolId] + ); + + return ( + <> +