From 2371d6a29caa229ba46ebbb37f85f8669486b48d Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 3 Nov 2019 23:47:55 +0100 Subject: [PATCH] Remove double-up-drr (memo vs rpc) (#1541) * Remove inner memo (no double-up on stringify) * Validators-specific query --- .../api-derive/src/accounts/idAndIndex.ts | 4 ++-- packages/api-derive/src/accounts/idToIndex.ts | 4 ++-- packages/api-derive/src/accounts/indexToId.ts | 4 ++-- packages/api-derive/src/accounts/indexes.ts | 4 ++-- packages/api-derive/src/accounts/info.ts | 4 ++-- packages/api-derive/src/balances/all.ts | 4 ++-- packages/api-derive/src/balances/fees.ts | 4 ++-- .../api-derive/src/balances/votingBalances.ts | 4 ++-- .../balances/votingBalancesNominatorsFor.ts | 4 ++-- packages/api-derive/src/chain/bestNumber.ts | 4 ++-- .../src/chain/bestNumberFinalized.ts | 4 ++-- .../api-derive/src/chain/bestNumberLag.ts | 4 ++-- packages/api-derive/src/chain/getHeader.ts | 4 ++-- .../api-derive/src/chain/subscribeNewHeads.ts | 4 ++-- packages/api-derive/src/contracts/fees.ts | 4 ++-- .../src/democracy/referendumInfo.ts | 15 +++++++------- .../src/democracy/referendumInfos.ts | 4 ++-- .../src/democracy/referendumVotesFor.ts | 4 ++-- .../api-derive/src/democracy/referendums.ts | 4 ++-- packages/api-derive/src/democracy/votes.ts | 4 ++-- .../api-derive/src/elections/approvalsOf.ts | 4 ++-- .../api-derive/src/elections/approvalsOfAt.ts | 4 ++-- packages/api-derive/src/elections/info.ts | 4 ++-- .../src/elections/voterPositions.ts | 4 ++-- packages/api-derive/src/elections/voters.ts | 4 ++-- .../src/imOnline/receivedHeartbeats.ts | 4 ++-- packages/api-derive/src/session/eraLength.ts | 4 ++-- .../api-derive/src/session/eraProgress.ts | 4 ++-- packages/api-derive/src/session/indexes.ts | 4 ++-- packages/api-derive/src/session/info.ts | 4 ++-- .../api-derive/src/session/sessionProgress.ts | 4 ++-- .../api-derive/src/staking/controllers.ts | 4 ++-- packages/api-derive/src/staking/info.ts | 4 ++-- packages/api-derive/src/staking/infoStash.ts | 4 ++-- packages/api-derive/src/staking/overview.ts | 17 ++++++++-------- .../api-derive/src/staking/recentlyOffline.ts | 4 ++-- packages/api-derive/src/staking/validators.ts | 20 +++++++++++-------- packages/api-derive/src/types.ts | 5 +++++ 38 files changed, 100 insertions(+), 93 deletions(-) diff --git a/packages/api-derive/src/accounts/idAndIndex.ts b/packages/api-derive/src/accounts/idAndIndex.ts index 2415251b74..037f4d7000 100644 --- a/packages/api-derive/src/accounts/idAndIndex.ts +++ b/packages/api-derive/src/accounts/idAndIndex.ts @@ -66,6 +66,6 @@ export const idAndIndex = memo((api: ApiInterfaceRx): (address?: Address | Accou indexToIdCall: indexToId(api) }; - return memo((address?: Address | AccountId | AccountIndex | string | null): Observable => - retrieve(address, calls).pipe(drr())); + return (address?: Address | AccountId | AccountIndex | string | null): Observable => + retrieve(address, calls).pipe(drr()); }, true); diff --git a/packages/api-derive/src/accounts/idToIndex.ts b/packages/api-derive/src/accounts/idToIndex.ts index 5a4f225dd6..6a442ed3d7 100644 --- a/packages/api-derive/src/accounts/idToIndex.ts +++ b/packages/api-derive/src/accounts/idToIndex.ts @@ -28,12 +28,12 @@ import { drr, memo } from '../util'; export const idToIndex = memo((api: ApiInterfaceRx): (accountId: AccountId | string) => Observable => { const indexesCall = indexes(api); - return memo((accountId: AccountId | string): Observable => + return (accountId: AccountId | string): Observable => indexesCall().pipe( startWith({}), map((indexes: AccountIndexes): AccountIndex | undefined => (indexes || {})[accountId.toString()] ), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/accounts/indexToId.ts b/packages/api-derive/src/accounts/indexToId.ts index 0b682ae5a2..3b28c68c94 100644 --- a/packages/api-derive/src/accounts/indexToId.ts +++ b/packages/api-derive/src/accounts/indexToId.ts @@ -28,7 +28,7 @@ import { drr, memo } from '../util'; export const indexToId = memo((api: ApiInterfaceRx): (accountIndex: AccountIndex | string) => Observable => { const querySection = api.query.indices || api.query.balances; - return memo((_accountIndex: AccountIndex | string): Observable => { + return (_accountIndex: AccountIndex | string): Observable => { const accountIndex = _accountIndex instanceof ClassOf('AccountIndex') ? _accountIndex : createType('AccountIndex', _accountIndex); @@ -40,5 +40,5 @@ export const indexToId = memo((api: ApiInterfaceRx): (accountIndex: AccountIndex ), drr() ); - }); + }; }, true); diff --git a/packages/api-derive/src/accounts/indexes.ts b/packages/api-derive/src/accounts/indexes.ts index cba58355da..b9092dc785 100644 --- a/packages/api-derive/src/accounts/indexes.ts +++ b/packages/api-derive/src/accounts/indexes.ts @@ -32,7 +32,7 @@ const enumsetSize = ENUMSET_SIZE.toNumber(); * ``` */ export const indexes = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => + return (): Observable => api.query.indices.nextEnumSet().pipe( // use the nextEnumSet (which is a counter of the number of sets) to construct // a range of values to query [0, 1, 2, ...]. Retrieve the full enum set for the @@ -54,5 +54,5 @@ export const indexes = memo((api: ApiInterfaceRx): () => Observable => + return (address?: AccountIndex | AccountId | Address | string | null): Observable => idAndIndexCall(address).pipe( switchMap(([accountId, accountIndex]): Observable<[DeriveAccountInfo, Option<[Bytes, Balance] & Codec>?]> => combineLatest([ @@ -46,5 +46,5 @@ export const info = memo((api: ApiInterfaceRx): (address?: AccountIndex | Accoun : undefined })), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/balances/all.ts b/packages/api-derive/src/balances/all.ts index b77e0df5a5..08e40d6433 100644 --- a/packages/api-derive/src/balances/all.ts +++ b/packages/api-derive/src/balances/all.ts @@ -81,7 +81,7 @@ export const all = memo((api: ApiInterfaceRx): (address: AccountIndex | AccountI const bestNumberCall = bestNumber(api); const infoCall = info(api); - return memo((address: AccountIndex | AccountId | Address | string): Observable => + return (address: AccountIndex | AccountId | Address | string): Observable => infoCall(address).pipe( switchMap(({ accountId }): Observable => (accountId @@ -101,5 +101,5 @@ export const all = memo((api: ApiInterfaceRx): (address: AccountIndex | AccountI ), map(calcBalances), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/balances/fees.ts b/packages/api-derive/src/balances/fees.ts index 397ab784b7..ae7cae1ff9 100644 --- a/packages/api-derive/src/balances/fees.ts +++ b/packages/api-derive/src/balances/fees.ts @@ -56,7 +56,7 @@ export const fees = memo((api: ApiInterfaceRx): () => Observable => ? queryV2 : queryV1; - return memo((): Observable => + return (): Observable => query(api).pipe( map(([creationFee, existentialDeposit, transferFee, transactionBaseFee, transactionByteFee]): DerivedFees => ({ creationFee, @@ -66,5 +66,5 @@ export const fees = memo((api: ApiInterfaceRx): () => Observable => transferFee })), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/balances/votingBalances.ts b/packages/api-derive/src/balances/votingBalances.ts index 6a59e1ec25..6ed47182f0 100644 --- a/packages/api-derive/src/balances/votingBalances.ts +++ b/packages/api-derive/src/balances/votingBalances.ts @@ -12,12 +12,12 @@ import { drr, memo } from '../util'; import { all } from './all'; export const votingBalances = memo((api: ApiInterfaceRx): (addresses?: (AccountId | AccountIndex | Address | string)[]) => Observable => { - return memo((addresses?: (AccountId | AccountIndex | Address | string)[]): Observable => + return (addresses?: (AccountId | AccountIndex | Address | string)[]): Observable => ( !addresses || !addresses.length ? of([] as DerivedBalances[]) : combineLatest(addresses.map(all(api))) ).pipe( drr() - )); + ); }, true); diff --git a/packages/api-derive/src/balances/votingBalancesNominatorsFor.ts b/packages/api-derive/src/balances/votingBalancesNominatorsFor.ts index d656cc7c5b..7fce8cfadb 100644 --- a/packages/api-derive/src/balances/votingBalancesNominatorsFor.ts +++ b/packages/api-derive/src/balances/votingBalancesNominatorsFor.ts @@ -17,7 +17,7 @@ import { votingBalances } from './votingBalances'; export const votingBalancesNominatorsFor = memo((api: ApiInterfaceRx): (address: AccountId | AccountIndex | Address | string) => Observable => { const infoCall = info(api); - return memo((address: AccountId | AccountIndex | Address | string): Observable => + return (address: AccountId | AccountIndex | Address | string): Observable => infoCall(address).pipe( switchMap(({ accountId }): Observable => accountId @@ -26,5 +26,5 @@ export const votingBalancesNominatorsFor = memo((api: ApiInterfaceRx): (address: ), switchMap(votingBalances(api)), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/chain/bestNumber.ts b/packages/api-derive/src/chain/bestNumber.ts index bfff383851..e7e5ae6f57 100644 --- a/packages/api-derive/src/chain/bestNumber.ts +++ b/packages/api-derive/src/chain/bestNumber.ts @@ -23,9 +23,9 @@ import { drr, memo } from '../util'; * ``` */ export const bestNumber = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => + return (): Observable => api.rpc.chain.subscribeNewHeads().pipe( map((header): BlockNumber => header.number.unwrap()), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/chain/bestNumberFinalized.ts b/packages/api-derive/src/chain/bestNumberFinalized.ts index fded122325..886ac52f9e 100644 --- a/packages/api-derive/src/chain/bestNumberFinalized.ts +++ b/packages/api-derive/src/chain/bestNumberFinalized.ts @@ -24,9 +24,9 @@ import { drr, memo } from '../util'; * ``` */ export const bestNumberFinalized = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => + return (): Observable => api.rpc.chain.subscribeFinalizedHeads().pipe( map((header): BlockNumber => header.number.unwrap()), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/chain/bestNumberLag.ts b/packages/api-derive/src/chain/bestNumberLag.ts index 696273d321..1751c7c346 100644 --- a/packages/api-derive/src/chain/bestNumberLag.ts +++ b/packages/api-derive/src/chain/bestNumberLag.ts @@ -30,7 +30,7 @@ export const bestNumberLag = memo((api: ApiInterfaceRx): () => Observable => + return (): Observable => combineLatest([ bestNumberCall(), bestNumberFinalizedCall() @@ -39,5 +39,5 @@ export const bestNumberLag = memo((api: ApiInterfaceRx): () => Observable Observable => { - return memo((hash: Uint8Array | string): Observable => + return (hash: Uint8Array | string): Observable => combineLatest([ api.rpc.chain.getHeader(hash), api.query.session.validators.at(hash) as Observable> @@ -43,5 +43,5 @@ export const getHeader = memo((api: ApiInterfaceRx): (hash: Uint8Array | string) of() ), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/chain/subscribeNewHeads.ts b/packages/api-derive/src/chain/subscribeNewHeads.ts index e0eb723569..c20fde10de 100644 --- a/packages/api-derive/src/chain/subscribeNewHeads.ts +++ b/packages/api-derive/src/chain/subscribeNewHeads.ts @@ -26,7 +26,7 @@ import { drr, memo } from '../util'; * ``` */ export const subscribeNewHeads = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => + return (): Observable => combineLatest([ api.rpc.chain.subscribeNewHeads(), api.query.session.validators>() @@ -35,5 +35,5 @@ export const subscribeNewHeads = memo((api: ApiInterfaceRx): () => Observable { * ``` */ export const fees = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => { + return (): Observable => { if (api.query.contract && !api.query.contract.rentByteFee) { return queryV1(api); } @@ -122,5 +122,5 @@ export const fees = memo((api: ApiInterfaceRx): () => Observable Observable> => { - return memo((index: BN | number): Observable> => - (api.query.democracy.referendumInfoOf>(index)) - .pipe( - map((optionInfo): Option => - constructInfo(index, optionInfo) - ), - drr() - )); + return (index: BN | number): Observable> => + api.query.democracy.referendumInfoOf>(index).pipe( + map((optionInfo): Option => + constructInfo(index, optionInfo) + ), + drr() + ); }, true); diff --git a/packages/api-derive/src/democracy/referendumInfos.ts b/packages/api-derive/src/democracy/referendumInfos.ts index a79020f3f4..bb9d1a3976 100644 --- a/packages/api-derive/src/democracy/referendumInfos.ts +++ b/packages/api-derive/src/democracy/referendumInfos.ts @@ -15,7 +15,7 @@ import { drr, memo } from '../util'; import { constructInfo } from './referendumInfo'; export const referendumInfos = memo((api: ApiInterfaceRx): (ids?: (BN | number)[]) => Observable[]> => { - return memo((ids: (BN | number)[] = []): Observable[]> => + return (ids: (BN | number)[] = []): Observable[]> => ( !ids || !ids.length ? of([] as Option[]) @@ -27,5 +27,5 @@ export const referendumInfos = memo((api: ApiInterfaceRx): (ids?: (BN | number)[ ) ), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/democracy/referendumVotesFor.ts b/packages/api-derive/src/democracy/referendumVotesFor.ts index fdead2e214..4367a6abcb 100644 --- a/packages/api-derive/src/democracy/referendumVotesFor.ts +++ b/packages/api-derive/src/democracy/referendumVotesFor.ts @@ -19,7 +19,7 @@ export const referendumVotesFor = memo((api: ApiInterfaceRx): (referendumId: BN const votesCall = votes(api); const votingBalancesCall = votingBalances(api); - return memo((referendumId: BN | number): Observable => + return (referendumId: BN | number): Observable => api.query.democracy.votersFor>(referendumId).pipe( switchMap((votersFor): Observable<[Vec, Vote[], DerivedBalances[]]> => combineLatest([ @@ -36,5 +36,5 @@ export const referendumVotesFor = memo((api: ApiInterfaceRx): (referendumId: BN } as unknown as DerivedReferendumVote)) ), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/democracy/referendums.ts b/packages/api-derive/src/democracy/referendums.ts index 327b9ef991..6a85802e9f 100644 --- a/packages/api-derive/src/democracy/referendums.ts +++ b/packages/api-derive/src/democracy/referendums.ts @@ -17,7 +17,7 @@ import { referendumInfos } from './referendumInfos'; export const referendums = memo((api: ApiInterfaceRx): () => Observable[]> => { const referendumInfosCall = referendumInfos(api); - return memo((): Observable[]> => + return (): Observable[]> => api.queryMulti<[ReferendumIndex, ReferendumIndex]>([ api.query.democracy.nextTally, api.query.democracy.referendumCount @@ -32,5 +32,5 @@ export const referendums = memo((api: ApiInterfaceRx): () => Observable Observable => { - return memo((referendumId: BN, accountIds: AccountId[] = []): Observable => + return (referendumId: BN, accountIds: AccountId[] = []): Observable => ( !accountIds || !accountIds.length ? of([] as Vote[]) @@ -20,5 +20,5 @@ export const votes = memo((api: ApiInterfaceRx): (referendumId: BN, accountIds?: [referendumId, accountId] ) ) - ).pipe(drr())); + ).pipe(drr()); }, true); diff --git a/packages/api-derive/src/elections/approvalsOf.ts b/packages/api-derive/src/elections/approvalsOf.ts index 5519f23ccc..4dab06ba0c 100644 --- a/packages/api-derive/src/elections/approvalsOf.ts +++ b/packages/api-derive/src/elections/approvalsOf.ts @@ -24,7 +24,7 @@ import { drr, memo } from '../util'; * ``` */ export const approvalsOf = memo((api: ApiInterfaceRx): (who: AccountId) => Observable => { - return memo((who: AccountId | string): Observable => + return (who: AccountId | string): Observable => api.query.elections.nextVoterSet().pipe( switchMap((nextVoterSet: SetIndex): Observable[]> => api.query.elections.approvalsOf.multi( @@ -39,5 +39,5 @@ export const approvalsOf = memo((api: ApiInterfaceRx): (who: AccountId) => Obser ) ), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/elections/approvalsOfAt.ts b/packages/api-derive/src/elections/approvalsOfAt.ts index c7c0bb9571..7c2de0ed37 100644 --- a/packages/api-derive/src/elections/approvalsOfAt.ts +++ b/packages/api-derive/src/elections/approvalsOfAt.ts @@ -26,9 +26,9 @@ import { drr, memo } from '../util'; * ``` */ export const approvalsOfAt = memo((api: ApiInterfaceRx): (who: AccountId, at: SetIndex) => Observable => { - return memo((who: AccountId | string, at: SetIndex | BN | number): Observable => + return (who: AccountId | string, at: SetIndex | BN | number): Observable => api.query.elections.approvalsOf>([who.toString(), at]).pipe( map((flags: Vec): boolean[] => approvalFlagsToBools(flags)), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/elections/info.ts b/packages/api-derive/src/elections/info.ts index 1142f8f5e2..22c83dfab9 100644 --- a/packages/api-derive/src/elections/info.ts +++ b/packages/api-derive/src/elections/info.ts @@ -93,6 +93,6 @@ export const info = memo((api: ApiInterfaceRx): () => Observable => - query(api).pipe(drr())); + return (): Observable => + query(api).pipe(drr()); }, true); diff --git a/packages/api-derive/src/elections/voterPositions.ts b/packages/api-derive/src/elections/voterPositions.ts index 902c8d09fa..c68b2f3750 100644 --- a/packages/api-derive/src/elections/voterPositions.ts +++ b/packages/api-derive/src/elections/voterPositions.ts @@ -27,7 +27,7 @@ import { drr, memo } from '../util'; * ``` */ export const voterPositions = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => + return (): Observable => api.query.elections.nextVoterSet().pipe( switchMap((nextVoterSet: SetIndex): Observable<[BN, Vec>[]]> => combineLatest( of(api.consts.elections.voterSetSize) as any as Observable, @@ -54,5 +54,5 @@ export const voterPositions = memo((api: ApiInterfaceRx): () => Observable Observable> => { const voterPositionsCall = voterPositions(api); - return memo((): Observable> => + return (): Observable> => voterPositionsCall().pipe( map((voterPositions: DerivedVoterPositions): Vec => createType( @@ -39,5 +39,5 @@ export const voters = memo((api: ApiInterfaceRx): () => Observable Observable => { const stakingOverviewvCall = stakingOverview(api); - return memo((): Observable => + return (): Observable => api.query.imOnline && api.query.imOnline.receivedHeartbeats && api.query.imOnline.authoredBlocks ? stakingOverviewvCall().pipe( switchMap(({ currentIndex, validators }): Observable<[AccountId[], Option[], u32[]]> => @@ -41,5 +41,5 @@ export const receivedHeartbeats = memo((api: ApiInterfaceRx): () => Observable Observable => { const infoCall = info(api); - return memo((): Observable => + return (): Observable => infoCall().pipe( map(({ eraLength }): BlockNumber => eraLength), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/session/eraProgress.ts b/packages/api-derive/src/session/eraProgress.ts index fed6a651b5..e50640c620 100644 --- a/packages/api-derive/src/session/eraProgress.ts +++ b/packages/api-derive/src/session/eraProgress.ts @@ -14,9 +14,9 @@ import { info } from './info'; export const eraProgress = memo((api: ApiInterfaceRx): () => Observable => { const infoCall = info(api); - return memo((): Observable => + return (): Observable => infoCall().pipe( map(({ eraProgress }): BlockNumber => eraProgress), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/session/indexes.ts b/packages/api-derive/src/session/indexes.ts index 9d22c58110..f5f1aad862 100644 --- a/packages/api-derive/src/session/indexes.ts +++ b/packages/api-derive/src/session/indexes.ts @@ -13,7 +13,7 @@ import { u32 } from '@polkadot/types'; import { drr, memo } from '../util'; export const indexes = memo((api: ApiInterfaceRx): () => Observable => { - return memo((): Observable => + return (): Observable => api.queryMulti<[SessionIndex, EraIndex, u32]>([ api.query.session.currentIndex, api.query.staking.currentEra, @@ -23,5 +23,5 @@ export const indexes = memo((api: ApiInterfaceRx): () => Observable Observable => - query(api, calls).pipe(drr())); + return (): Observable => + query(api, calls).pipe(drr()); }, true); diff --git a/packages/api-derive/src/session/sessionProgress.ts b/packages/api-derive/src/session/sessionProgress.ts index 861011537d..d961aa29cd 100644 --- a/packages/api-derive/src/session/sessionProgress.ts +++ b/packages/api-derive/src/session/sessionProgress.ts @@ -14,9 +14,9 @@ import { info } from './info'; export const sessionProgress = memo((api: ApiInterfaceRx): () => Observable => { const infoCall = info(api); - return memo((): Observable => + return (): Observable => infoCall().pipe( map(({ sessionProgress }): BlockNumber => sessionProgress), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/staking/controllers.ts b/packages/api-derive/src/staking/controllers.ts index c4c1174b14..2f966e255b 100644 --- a/packages/api-derive/src/staking/controllers.ts +++ b/packages/api-derive/src/staking/controllers.ts @@ -16,7 +16,7 @@ import { drr, memo } from '../util'; * @description From the list of stash accounts, retrieve the list of controllers */ export const controllers = memo((api: ApiInterfaceRx): () => Observable<[AccountId[], Option[]]> => { - return memo((): Observable<[AccountId[], Option[]]> => + return (): Observable<[AccountId[], Option[]]> => api.query.staking.validators<[AccountId[]] & Codec>().pipe( switchMap(([stashIds]): Observable<[AccountId[], Option[]]> => combineLatest([ @@ -28,5 +28,5 @@ export const controllers = memo((api: ApiInterfaceRx): () => Observable<[Account ]) ), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/staking/info.ts b/packages/api-derive/src/staking/info.ts index 23561d5aee..36056889b5 100644 --- a/packages/api-derive/src/staking/info.ts +++ b/packages/api-derive/src/staking/info.ts @@ -232,6 +232,6 @@ export const info = memo((api: ApiInterfaceRx): (_accountId: Uint8Array | string ? retrieveV2 : retrieveV1; - return memo((accountId: Uint8Array | string): Observable => - query(api, calls, createType('AccountId', accountId)).pipe(drr())); + return (accountId: Uint8Array | string): Observable => + query(api, calls, createType('AccountId', accountId)).pipe(drr()); }, true); diff --git a/packages/api-derive/src/staking/infoStash.ts b/packages/api-derive/src/staking/infoStash.ts index c74288e34c..a16876cd08 100644 --- a/packages/api-derive/src/staking/infoStash.ts +++ b/packages/api-derive/src/staking/infoStash.ts @@ -57,9 +57,9 @@ export const infoStash = memo((api: ApiInterfaceRx): (stashId: AccountId) => Obs ? retrieveV2 : retrieveV1; - return memo((stashId: AccountId): Observable => + return (stashId: AccountId): Observable => query(api, stashId).pipe( map((result): DerivedStakingStash => parse(stashId, result)), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/staking/overview.ts b/packages/api-derive/src/staking/overview.ts index c59603cf47..9ff8eef61a 100644 --- a/packages/api-derive/src/staking/overview.ts +++ b/packages/api-derive/src/staking/overview.ts @@ -2,32 +2,31 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { AccountId, EraPoints } from '@polkadot/types/interfaces'; +import { EraPoints } from '@polkadot/types/interfaces'; import { ApiInterfaceRx } from '@polkadot/api/types'; import { DerivedStakingOverview } from '../types'; import { Observable, combineLatest, of } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; -import { createType, Vec } from '@polkadot/types'; +import { createType } from '@polkadot/types'; import { drr, memo } from '../util'; import { indexes as sessionIndexes } from '../session'; +import { validators } from './validators'; /** * @description Retrieve the staking overview, including elected and points earned */ export const overview = memo((api: ApiInterfaceRx): () => Observable => { const sessionIndexesCall = sessionIndexes(api); + const validatorsCall = validators(api); - return memo((): Observable => + return (): Observable => combineLatest([ sessionIndexesCall(), - api.queryMulti<[Vec, Vec]>([ - api.query.session.validators, - api.query.staking.currentElected - ]) + validatorsCall() ]).pipe( - switchMap(([{ currentEra, currentIndex, validatorCount }, [validators, currentElected]]) => + switchMap(([{ currentEra, currentIndex, validatorCount }, { currentElected, validators }]) => combineLatest([ of({ currentElected, currentEra, currentIndex, validators, validatorCount }), // this will change on a per block basis, keep it innermost (and it needs eraIndex) @@ -40,5 +39,5 @@ export const overview = memo((api: ApiInterfaceRx): () => Observable Observable => { - return memo((): Observable => + return (): Observable => ( // TODO recentlyOffline has been dropped for 2.x and replaced, figure out the // replacement as actually use and implement it @@ -46,5 +46,5 @@ export const recentlyOffline = memo((api: ApiInterfaceRx): () => Observable Observable => { - const overviewCall = overview(api); - - return memo((): Observable => - overviewCall().pipe( - map(({ validators }): AccountId[] => validators), +export const validators = memo((api: ApiInterfaceRx): () => Observable => { + return (): Observable => + api.queryMulti<[Vec, Vec]>([ + api.query.session.validators, + api.query.staking.currentElected + ]).pipe( + map(([validators, currentElected]): DeriveStakingValidators => ({ + currentElected, validators + })), drr() - )); + ); }, true); diff --git a/packages/api-derive/src/types.ts b/packages/api-derive/src/types.ts index 976718c105..232b7e4d9c 100644 --- a/packages/api-derive/src/types.ts +++ b/packages/api-derive/src/types.ts @@ -115,6 +115,11 @@ export interface DerivedStakingOnlineStatus { }[]; } +export interface DeriveStakingValidators { + currentElected: AccountId[]; + validators: AccountId[]; +} + export interface DerivedStakingStash { controllerId?: AccountId; nominators?: AccountId[];