diff --git a/packages/api-derive/src/elections/info.ts b/packages/api-derive/src/elections/info.ts index 1c03c59dbc..e726435539 100644 --- a/packages/api-derive/src/elections/info.ts +++ b/packages/api-derive/src/elections/info.ts @@ -2,7 +2,7 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { AccountId, BlockNumber, SetIndex, VoteIndex } from '@polkadot/types/interfaces'; +import { AccountId, Balance, BlockNumber, SetIndex, VoteIndex } from '@polkadot/types/interfaces'; import { Codec } from '@polkadot/types/types'; import { Observable, combineLatest } from 'rxjs'; @@ -16,16 +16,13 @@ import { drr } from '../util/drr'; type ResultElectionsInner = [u32, u32, Vec<[AccountId, BlockNumber] & Codec>, SetIndex, BlockNumber, VoteIndex, SetIndex]; type ResultElections = [Vec, ResultElectionsInner]; -type ResultPhragmenInner = [u32, Vec, BlockNumber]; -type ResultPhragmen = [Vec, ResultPhragmenInner]; - function deriveElections ([candidates, [candidateCount, desiredSeats, members, nextVoterSet, termDuration, voteCount, voterCount]]: ResultElections): DerivedElectionsInfo { return { candidates, candidateCount, desiredSeats, nextVoterSet, - members: members.map(([accountId]): AccountId => accountId), + members: members.map(([accountId]): [AccountId, Balance] => [accountId, createType('Balance')]), termDuration, voteCount, voterCount @@ -48,13 +45,15 @@ function queryElections (api: ApiInterfaceRx): Observable ]).pipe(map(deriveElections), drr()); } -function derivePhragmen ([candidates, [desiredMembers, members, termDuration]]: ResultPhragmen): DerivedElectionsInfo { +function derivePhragmen (candidates: Vec, members: Vec<[AccountId, Balance] & Codec>, candidacyBond: Balance, desiredSeats: u32, termDuration: BlockNumber, votingBond: Balance): DerivedElectionsInfo { return { candidates, candidateCount: createType('u32', candidates.length), - desiredSeats: desiredMembers, + candidacyBond, + desiredSeats, members, - termDuration + termDuration, + votingBond }; } @@ -62,12 +61,18 @@ function queryPhragmen (api: ApiInterfaceRx): Observable { // NOTE We have an issue where candidates can return `null` for an empty array return combineLatest([ api.query.electionsPhragmen.candidates>(), - api.queryMulti([ - api.query.electionsPhragmen.desiredMembers, - api.query.electionsPhragmen.members, - api.query.electionsPhragmen.termDuration - ]) - ]).pipe(map(derivePhragmen), drr()); + api.query.electionsPhragmen.members>() + ]).pipe( + map(([candidates, members]): DerivedElectionsInfo => derivePhragmen( + candidates, + members, + api.consts.electionsPhragmen.candidacyBond as Balance, + api.consts.electionsPhragmen.desiredMembers as u32, + api.consts.electionsPhragmen.termDuration as BlockNumber, + api.consts.electionsPhragmen.votingBond as Balance + )), + drr() + ); } /** diff --git a/packages/api-derive/src/types.ts b/packages/api-derive/src/types.ts index 70defb5365..dceddf6c07 100644 --- a/packages/api-derive/src/types.ts +++ b/packages/api-derive/src/types.ts @@ -40,12 +40,14 @@ export interface DerivedContractFees { export interface DerivedElectionsInfo { candidates: AccountId[]; candidateCount: u32; + candidacyBond?: Balance; desiredSeats: u32; - members: AccountId[]; + members: [AccountId, Balance][]; nextVoterSet?: SetIndex; termDuration: BlockNumber; voteCount?: VoteIndex; voterCount?: SetIndex; + votingBond?: Balance; } export interface DerivedFees {