diff --git a/packages/apps-routing/src/staking.ts b/packages/apps-routing/src/staking.ts index a99ea76a78..c0d9037662 100644 --- a/packages/apps-routing/src/staking.ts +++ b/packages/apps-routing/src/staking.ts @@ -21,13 +21,22 @@ function needsApiCheck (api: ApiPromise): boolean { ); assert(total.eq(BN_ONE) && own.eq(BN_ONE) && who.eq(TEST_ADDR) && value.eq(BN_ONE), 'Needs a known Exposure type'); - - return true; - } catch (error) { - console.warn('Unable to create PalletStakingIndividualExposure type, disabling staking route'); + } catch { + console.warn('Unable to create known-shape Exposure type, disabling staking route'); return false; } + + try { + // we need to be able to bond + api.tx.staking.bond(TEST_ADDR, BN_ONE, { Account: TEST_ADDR }); + } catch { + console.warn('Unable to create staking bond transaction, disabling staking route'); + + return false; + } + + return true; } export default function create (t: TFunction): Route { @@ -35,7 +44,8 @@ export default function create (t: TFunction): Route { Component, display: { needsApi: [ - ['tx.staking.bond'] + 'query.staking.erasStakers', + 'tx.staking.bond' ], needsApiCheck }, diff --git a/packages/apps/src/endpoint.ts b/packages/apps/src/endpoint.ts index 7de7b1658b..f68626ec9e 100644 --- a/packages/apps/src/endpoint.ts +++ b/packages/apps/src/endpoint.ts @@ -18,17 +18,21 @@ function hasEndpoint (api: ApiPromise, endpoint: string, needsApiInstances: bool } export function findMissingApis (api: ApiPromise, needsApi?: (string | string[])[], needsApiInstances = false, needsApiCheck?: (api: ApiPromise) => boolean): (string | string[])[] { - if (needsApiCheck && !needsApiCheck(api)) { - return ['needsApiCheck']; - } else if (!needsApi) { + if (!needsApi) { return []; } - return needsApi.filter((endpoint: string | string[]): boolean => { + const missing = needsApi.filter((endpoint: string | string[]): boolean => { const hasApi = Array.isArray(endpoint) ? endpoint.reduce((hasApi, endpoint) => hasApi || hasEndpoint(api, endpoint, needsApiInstances), false) : hasEndpoint(api, endpoint, needsApiInstances); return !hasApi; }); + + if (!missing.length && needsApiCheck && !needsApiCheck(api)) { + return ['needsApiCheck']; + } + + return missing; } diff --git a/packages/page-democracy/src/Overview/Seconding.tsx b/packages/page-democracy/src/Overview/Seconding.tsx index 14e9bbd956..ea39ca2a2b 100644 --- a/packages/page-democracy/src/Overview/Seconding.tsx +++ b/packages/page-democracy/src/Overview/Seconding.tsx @@ -57,9 +57,9 @@ function Seconding ({ deposit, depositors, image, proposalId }: Props): React.Re ('The deposit will be locked for the lifetime of the proposal.')}> ('deposit required')} - value={deposit || api.consts.democracy.minimumDeposit} />