chore: migrate nodes queries (#1923)
* chore: migrate nodes queries * chore: fix tests * chore: migrate nodes list over to new typings
This commit is contained in:
parent
e4baf5caee
commit
c338ce0046
@ -1,19 +1,35 @@
|
||||
fragment NodesFragment on Node {
|
||||
avatarUrl
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
stakedTotal
|
||||
stakedTotalFormatted @client
|
||||
pendingStake
|
||||
pendingStakeFormatted @client
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
status
|
||||
}
|
||||
}
|
||||
|
||||
query Nodes {
|
||||
nodes {
|
||||
avatarUrl
|
||||
epoch {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
stakedTotal
|
||||
stakedTotalFormatted @client
|
||||
pendingStake
|
||||
pendingStakeFormatted @client
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
status
|
||||
timestamps {
|
||||
start
|
||||
end
|
||||
expiry
|
||||
}
|
||||
}
|
||||
nodesConnection {
|
||||
edges {
|
||||
node {
|
||||
...NodesFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
nodeData {
|
||||
|
@ -1,123 +0,0 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
// @generated
|
||||
// This file was automatically generated and should not be edited.
|
||||
|
||||
import { ValidatorStatus } from "@vegaprotocol/types";
|
||||
|
||||
// ====================================================
|
||||
// GraphQL query operation: Nodes
|
||||
// ====================================================
|
||||
|
||||
export interface Nodes_epoch_timestamps {
|
||||
__typename: "EpochTimestamps";
|
||||
/**
|
||||
* RFC3339 timestamp - Vega time of epoch start, null if not started
|
||||
*/
|
||||
start: string | null;
|
||||
/**
|
||||
* RFC3339 timestamp - Vega time of epoch end, null if not ended
|
||||
*/
|
||||
end: string | null;
|
||||
/**
|
||||
* RFC3339 timestamp - Vega time of epoch expiry
|
||||
*/
|
||||
expiry: string | null;
|
||||
}
|
||||
|
||||
export interface Nodes_epoch {
|
||||
__typename: "Epoch";
|
||||
/**
|
||||
* Numeric sequence number used to identify the epoch
|
||||
*/
|
||||
id: string;
|
||||
/**
|
||||
* Timestamps for start and end of epochs
|
||||
*/
|
||||
timestamps: Nodes_epoch_timestamps;
|
||||
}
|
||||
|
||||
export interface Nodes_nodes_rankingScore {
|
||||
__typename: "RankingScore";
|
||||
/**
|
||||
* The ranking score of the validator
|
||||
*/
|
||||
rankingScore: string;
|
||||
/**
|
||||
* The stake based score of the validator (no anti-whaling)
|
||||
*/
|
||||
stakeScore: string;
|
||||
/**
|
||||
* The performance score of the validator
|
||||
*/
|
||||
performanceScore: string;
|
||||
/**
|
||||
* The Tendermint voting power of the validator (uint32)
|
||||
*/
|
||||
votingPower: string;
|
||||
/**
|
||||
* The current validation status of the validator
|
||||
*/
|
||||
status: ValidatorStatus;
|
||||
}
|
||||
|
||||
export interface Nodes_nodes {
|
||||
__typename: "Node";
|
||||
avatarUrl: string | null;
|
||||
/**
|
||||
* The node URL eg n01.vega.xyz
|
||||
*/
|
||||
id: string;
|
||||
name: string;
|
||||
/**
|
||||
* Public key of the node operator
|
||||
*/
|
||||
pubkey: string;
|
||||
/**
|
||||
* Total amount staked on node
|
||||
*/
|
||||
stakedTotal: string;
|
||||
/**
|
||||
* The total staked field formatted by the client
|
||||
*/
|
||||
stakedTotalFormatted: string;
|
||||
/**
|
||||
* Amount of stake on the next epoch
|
||||
*/
|
||||
pendingStake: string;
|
||||
/**
|
||||
* The pending staked field formatted by the client
|
||||
*/
|
||||
pendingStakeFormatted: string;
|
||||
/**
|
||||
* Ranking scores and status for the validator for the current epoch
|
||||
*/
|
||||
rankingScore: Nodes_nodes_rankingScore;
|
||||
}
|
||||
|
||||
export interface Nodes_nodeData {
|
||||
__typename: "NodeData";
|
||||
/**
|
||||
* Total staked amount across all nodes
|
||||
*/
|
||||
stakedTotal: string;
|
||||
/**
|
||||
* The total staked field formatted by the client
|
||||
*/
|
||||
stakedTotalFormatted: string;
|
||||
}
|
||||
|
||||
export interface Nodes {
|
||||
/**
|
||||
* Get data for a specific epoch, if ID omitted it gets the current epoch. If the string is 'next', fetch the next epoch
|
||||
*/
|
||||
epoch: Nodes_epoch;
|
||||
/**
|
||||
* All known network nodes
|
||||
*/
|
||||
nodes: Nodes_nodes[] | null;
|
||||
/**
|
||||
* Returns information about nodes
|
||||
*/
|
||||
nodeData: Nodes_nodeData | null;
|
||||
}
|
@ -3,29 +3,47 @@ import { Schema as Types } from '@vegaprotocol/types';
|
||||
import { gql } from '@apollo/client';
|
||||
import * as Apollo from '@apollo/client';
|
||||
const defaultOptions = {} as const;
|
||||
export type NodesFragmentFragment = { __typename?: 'Node', avatarUrl?: string | null, id: string, name: string, pubkey: string, stakedTotal: string, stakedTotalFormatted: string, pendingStake: string, pendingStakeFormatted: string, rankingScore: { __typename?: 'RankingScore', rankingScore: string, stakeScore: string, performanceScore: string, votingPower: string, status: Types.ValidatorStatus } };
|
||||
|
||||
export type NodesQueryVariables = Types.Exact<{ [key: string]: never; }>;
|
||||
|
||||
|
||||
export type NodesQuery = { __typename?: 'Query', nodes?: Array<{ __typename?: 'Node', avatarUrl?: string | null, id: string, name: string, pubkey: string, stakedTotal: string, stakedTotalFormatted: string, pendingStake: string, pendingStakeFormatted: string, rankingScore: { __typename?: 'RankingScore', rankingScore: string, stakeScore: string, performanceScore: string, votingPower: string, status: Types.ValidatorStatus } }> | null, nodeData?: { __typename?: 'NodeData', stakedTotal: string, stakedTotalFormatted: string } | null };
|
||||
|
||||
export type NodesQuery = { __typename?: 'Query', epoch: { __typename?: 'Epoch', id: string, timestamps: { __typename?: 'EpochTimestamps', start?: string | null, end?: string | null, expiry?: string | null } }, nodesConnection: { __typename?: 'NodesConnection', edges?: Array<{ __typename?: 'NodeEdge', node: { __typename?: 'Node', avatarUrl?: string | null, id: string, name: string, pubkey: string, stakedTotal: string, stakedTotalFormatted: string, pendingStake: string, pendingStakeFormatted: string, rankingScore: { __typename?: 'RankingScore', rankingScore: string, stakeScore: string, performanceScore: string, votingPower: string, status: Types.ValidatorStatus } } } | null> | null }, nodeData?: { __typename?: 'NodeData', stakedTotal: string, stakedTotalFormatted: string } | null };
|
||||
|
||||
export const NodesFragmentFragmentDoc = gql`
|
||||
fragment NodesFragment on Node {
|
||||
avatarUrl
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
stakedTotal
|
||||
stakedTotalFormatted @client
|
||||
pendingStake
|
||||
pendingStakeFormatted @client
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
status
|
||||
}
|
||||
}
|
||||
`;
|
||||
export const NodesDocument = gql`
|
||||
query Nodes {
|
||||
nodes {
|
||||
avatarUrl
|
||||
epoch {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
stakedTotal
|
||||
stakedTotalFormatted @client
|
||||
pendingStake
|
||||
pendingStakeFormatted @client
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
status
|
||||
timestamps {
|
||||
start
|
||||
end
|
||||
expiry
|
||||
}
|
||||
}
|
||||
nodesConnection {
|
||||
edges {
|
||||
node {
|
||||
...NodesFragment
|
||||
}
|
||||
}
|
||||
}
|
||||
nodeData {
|
||||
@ -33,7 +51,7 @@ export const NodesDocument = gql`
|
||||
stakedTotalFormatted @client
|
||||
}
|
||||
}
|
||||
`;
|
||||
${NodesFragmentFragmentDoc}`;
|
||||
|
||||
/**
|
||||
* __useNodesQuery__
|
||||
|
@ -1,33 +1,28 @@
|
||||
import { act, fireEvent, render, screen } from '@testing-library/react';
|
||||
import merge from 'lodash/merge';
|
||||
import { NodeList, NODES_QUERY } from './node-list';
|
||||
import { NodeList } from './node-list';
|
||||
import { MockedProvider } from '@apollo/client/testing';
|
||||
import { MemoryRouter } from 'react-router-dom';
|
||||
import { addDecimal } from '@vegaprotocol/react-helpers';
|
||||
import type { Nodes_nodes } from './__generated__/Nodes';
|
||||
import type { PartialDeep } from 'type-fest';
|
||||
import { ValidatorStatus } from '@vegaprotocol/types';
|
||||
import type { NodesFragmentFragment } from './__generated___/Nodes';
|
||||
import { NodesDocument } from './__generated___/Nodes';
|
||||
import { Schema } from '@vegaprotocol/types';
|
||||
|
||||
jest.mock('../../../components/epoch-countdown', () => ({
|
||||
EpochCountdown: () => <div data-testid="epoch-info"></div>,
|
||||
}));
|
||||
|
||||
const nodeFactory = (overrides?: PartialDeep<Nodes_nodes>) => {
|
||||
const nodeFactory = (overrides?: PartialDeep<NodesFragmentFragment>) => {
|
||||
const defaultNode = {
|
||||
id: 'ccc022b7e63a4d0a6d3a193c3940c88574060e58a184964c994998d86835a1b4',
|
||||
name: 'high',
|
||||
avatarUrl: 'https://upload.wikimedia.org/wikipedia/en/2/25/Marvin-TV-3.jpg',
|
||||
pubkey: '6abc23391a9f888ab240415bf63d6844b03fc360be822f4a1d2cd832d87b2917',
|
||||
infoUrl: 'https://en.wikipedia.org/wiki/Skynet_(Terminator)',
|
||||
location: '',
|
||||
stakedByOperator: '3000000000000000000000',
|
||||
stakedByDelegates: '11182454495731682635157',
|
||||
stakedTotal: '14182454495731682635157',
|
||||
stakedTotalFormatted: addDecimal('14182454495731682635157', 18),
|
||||
pendingStake: '0',
|
||||
pendingStakeFormatted: addDecimal('0', 18),
|
||||
epochData: null,
|
||||
status: 'Validator',
|
||||
rankingScore: {
|
||||
rankingScore: '0.67845061012234727427532760837568',
|
||||
stakeScore: '0.3392701644525644',
|
||||
@ -38,46 +33,50 @@ const nodeFactory = (overrides?: PartialDeep<Nodes_nodes>) => {
|
||||
},
|
||||
__typename: 'Node',
|
||||
};
|
||||
return merge(defaultNode, overrides);
|
||||
return {
|
||||
node: merge(defaultNode, overrides),
|
||||
};
|
||||
};
|
||||
|
||||
const MOCK_NODES = {
|
||||
nodes: [
|
||||
nodeFactory(),
|
||||
nodeFactory({
|
||||
id: '966438c6bffac737cfb08173ffcb3f393c4692b099ad80cb45a82e2dc0a8cf99',
|
||||
name: 'medium',
|
||||
pubkey:
|
||||
'ccc3b8362c25b09d20df8ea407b0a476d6b24a0e72bc063d0033c8841652ddd4',
|
||||
stakedTotal: '9618711883996159534058',
|
||||
stakedTotalFormatted: addDecimal('9618711883996159534058', 18),
|
||||
rankingScore: {
|
||||
rankingScore: '0.4601942440481428',
|
||||
stakeScore: '0.2300971220240714',
|
||||
performanceScore: '1',
|
||||
votingPower: '2408',
|
||||
status: ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT,
|
||||
__typename: 'RankingScore',
|
||||
},
|
||||
}),
|
||||
nodeFactory({
|
||||
id: '12c81b738e8051152e1afe44376ec37bca9216466e6d44cdd772194bad0ada81',
|
||||
name: 'low',
|
||||
pubkey:
|
||||
'0931a8fd8cc935458f470e435a05414387cea6f329d648be894fcd44bd517a2b',
|
||||
stakedTotal: '4041343338923442976709',
|
||||
stakedTotalFormatted: addDecimal('4041343338923442976709', 18),
|
||||
pendingStake: '0',
|
||||
rankingScore: {
|
||||
rankingScore: '0.1932810100133910357676209647912',
|
||||
stakeScore: '0.0966762995515676',
|
||||
performanceScore: '0.999629748500531',
|
||||
votingPower: '1163',
|
||||
status: ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT,
|
||||
__typename: 'RankingScore',
|
||||
},
|
||||
}),
|
||||
],
|
||||
nodesConnection: {
|
||||
edges: [
|
||||
nodeFactory(),
|
||||
nodeFactory({
|
||||
id: '966438c6bffac737cfb08173ffcb3f393c4692b099ad80cb45a82e2dc0a8cf99',
|
||||
name: 'medium',
|
||||
pubkey:
|
||||
'ccc3b8362c25b09d20df8ea407b0a476d6b24a0e72bc063d0033c8841652ddd4',
|
||||
stakedTotal: '9618711883996159534058',
|
||||
stakedTotalFormatted: addDecimal('9618711883996159534058', 18),
|
||||
rankingScore: {
|
||||
rankingScore: '0.4601942440481428',
|
||||
stakeScore: '0.2300971220240714',
|
||||
performanceScore: '1',
|
||||
votingPower: '2408',
|
||||
status: Schema.ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT,
|
||||
__typename: 'RankingScore',
|
||||
},
|
||||
}),
|
||||
nodeFactory({
|
||||
id: '12c81b738e8051152e1afe44376ec37bca9216466e6d44cdd772194bad0ada81',
|
||||
name: 'low',
|
||||
pubkey:
|
||||
'0931a8fd8cc935458f470e435a05414387cea6f329d648be894fcd44bd517a2b',
|
||||
stakedTotal: '4041343338923442976709',
|
||||
stakedTotalFormatted: addDecimal('4041343338923442976709', 18),
|
||||
pendingStake: '0',
|
||||
rankingScore: {
|
||||
rankingScore: '0.1932810100133910357676209647912',
|
||||
stakeScore: '0.0966762995515676',
|
||||
performanceScore: '0.999629748500531',
|
||||
votingPower: '1163',
|
||||
status: Schema.ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT,
|
||||
__typename: 'RankingScore',
|
||||
},
|
||||
}),
|
||||
],
|
||||
},
|
||||
nodeData: {
|
||||
stakedTotal: '27842509718651285145924',
|
||||
stakedTotalFormatted: addDecimal('27842509718651285145924', 18),
|
||||
@ -105,7 +104,7 @@ const renderNodeList = (data = MOCK_NODES) => {
|
||||
<MockedProvider
|
||||
mocks={[
|
||||
{
|
||||
request: { query: NODES_QUERY },
|
||||
request: { query: NodesDocument },
|
||||
result: { data },
|
||||
},
|
||||
]}
|
||||
@ -156,26 +155,28 @@ describe('Nodes list', () => {
|
||||
|
||||
it('should display the correctly formatted fields in the correct columns', async () => {
|
||||
const MOCK_NODE = {
|
||||
nodes: [
|
||||
nodeFactory({
|
||||
id: '966438c6bffac737cfb08173ffcb3f393c4692b099ad80cb45a82e2dc0a8cf99',
|
||||
name: 'T-800 Terminator',
|
||||
avatarUrl:
|
||||
'https://upload.wikimedia.org/wikipedia/en/9/94/T-800_%28Model_101%29.png',
|
||||
pubkey:
|
||||
'ccc3b8362c25b09d20df8ea407b0a476d6b24a0e72bc063d0033c8841652ddd4',
|
||||
stakedTotal: '9618711883996159534058',
|
||||
stakedTotalFormatted: addDecimal('9618711883996159534058', 18),
|
||||
rankingScore: {
|
||||
rankingScore: '0.4601942440481428',
|
||||
stakeScore: '0.2300971220240714',
|
||||
performanceScore: '1',
|
||||
votingPower: '2408',
|
||||
status: ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT,
|
||||
__typename: 'RankingScore',
|
||||
},
|
||||
}),
|
||||
],
|
||||
nodesConnection: {
|
||||
edges: [
|
||||
nodeFactory({
|
||||
id: '966438c6bffac737cfb08173ffcb3f393c4692b099ad80cb45a82e2dc0a8cf99',
|
||||
name: 'T-800 Terminator',
|
||||
avatarUrl:
|
||||
'https://upload.wikimedia.org/wikipedia/en/9/94/T-800_%28Model_101%29.png',
|
||||
pubkey:
|
||||
'ccc3b8362c25b09d20df8ea407b0a476d6b24a0e72bc063d0033c8841652ddd4',
|
||||
stakedTotal: '9618711883996159534058',
|
||||
stakedTotalFormatted: addDecimal('9618711883996159534058', 18),
|
||||
rankingScore: {
|
||||
rankingScore: '0.4601942440481428',
|
||||
stakeScore: '0.2300971220240714',
|
||||
performanceScore: '1',
|
||||
votingPower: '2408',
|
||||
status: Schema.ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT,
|
||||
__typename: 'RankingScore',
|
||||
},
|
||||
}),
|
||||
],
|
||||
},
|
||||
nodeData: {
|
||||
stakedTotal: '9618711883996159534058',
|
||||
stakedTotalFormatted: addDecimal('9618711883996159534058', 18),
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { gql, useQuery } from '@apollo/client';
|
||||
import { forwardRef, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import {
|
||||
AgGridDynamic as AgGrid,
|
||||
@ -11,9 +10,10 @@ import { useTranslation } from 'react-i18next';
|
||||
import { EpochCountdown } from '../../../components/epoch-countdown';
|
||||
import { BigNumber } from '../../../lib/bignumber';
|
||||
import { formatNumber } from '@vegaprotocol/react-helpers';
|
||||
import { ValidatorStatus } from '@vegaprotocol/types';
|
||||
import type { Nodes } from './__generated__/Nodes';
|
||||
import { Schema } from '@vegaprotocol/types';
|
||||
import type { ColDef } from 'ag-grid-community';
|
||||
import compact from 'lodash/compact';
|
||||
import { useNodesQuery } from './__generated___/Nodes';
|
||||
|
||||
const VALIDATOR = 'validator';
|
||||
const STATUS = 'status';
|
||||
@ -26,40 +26,6 @@ const STAKE_SCORE = 'stakeScore';
|
||||
const PERFORMANCE_SCORE = 'performanceScore';
|
||||
const VOTING_POWER = 'votingPower';
|
||||
|
||||
export const NODES_QUERY = gql`
|
||||
query Nodes {
|
||||
epoch {
|
||||
id
|
||||
timestamps {
|
||||
start
|
||||
end
|
||||
expiry
|
||||
}
|
||||
}
|
||||
nodes {
|
||||
avatarUrl
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
stakedTotal
|
||||
stakedTotalFormatted @client
|
||||
pendingStake
|
||||
pendingStakeFormatted @client
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
status
|
||||
}
|
||||
}
|
||||
nodeData {
|
||||
stakedTotal
|
||||
stakedTotalFormatted @client
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
interface ValidatorRendererProps {
|
||||
data: { validator: { avatarUrl: string; name: string } };
|
||||
}
|
||||
@ -67,7 +33,7 @@ interface ValidatorRendererProps {
|
||||
interface CanonisedNodeProps {
|
||||
id: string;
|
||||
[VALIDATOR]: {
|
||||
avatarUrl: string | null;
|
||||
avatarUrl: string | null | undefined;
|
||||
name: string;
|
||||
};
|
||||
[STATUS]: string;
|
||||
@ -109,9 +75,7 @@ const nodeListGridStyles = `
|
||||
export const NodeList = () => {
|
||||
const { t } = useTranslation();
|
||||
// errorPolicy due to vegaprotocol/vega issue 5898
|
||||
const { data, error, loading, refetch } = useQuery<Nodes>(NODES_QUERY, {
|
||||
errorPolicy: 'ignore',
|
||||
});
|
||||
const { data, error, loading, refetch } = useNodesQuery();
|
||||
const navigate = useNavigate();
|
||||
const [hideTopThird, setHideTopThird] = useState(true);
|
||||
|
||||
@ -133,22 +97,24 @@ export const NodeList = () => {
|
||||
}, [data?.epoch.timestamps.expiry, refetch]);
|
||||
|
||||
const nodes = useMemo(() => {
|
||||
if (!data?.nodes) return [];
|
||||
if (!data?.nodesConnection.edges) return [];
|
||||
|
||||
const canonisedNodes = data.nodes.map(
|
||||
const canonisedNodes = compact(data.nodesConnection.edges).map(
|
||||
({
|
||||
id,
|
||||
name,
|
||||
avatarUrl,
|
||||
stakedTotalFormatted,
|
||||
rankingScore: {
|
||||
rankingScore,
|
||||
stakeScore,
|
||||
status,
|
||||
performanceScore,
|
||||
votingPower,
|
||||
node: {
|
||||
id,
|
||||
name,
|
||||
avatarUrl,
|
||||
stakedTotalFormatted,
|
||||
rankingScore: {
|
||||
rankingScore,
|
||||
stakeScore,
|
||||
status,
|
||||
performanceScore,
|
||||
votingPower,
|
||||
},
|
||||
pendingStakeFormatted,
|
||||
},
|
||||
pendingStakeFormatted,
|
||||
}) => {
|
||||
const stakedTotal = new BigNumber(
|
||||
data?.nodeData?.stakedTotalFormatted || 0
|
||||
@ -161,11 +127,12 @@ export const NodeList = () => {
|
||||
'%';
|
||||
const statusTranslated = t(
|
||||
`${
|
||||
(status === ValidatorStatus.VALIDATOR_NODE_STATUS_ERSATZ &&
|
||||
(status === Schema.ValidatorStatus.VALIDATOR_NODE_STATUS_ERSATZ &&
|
||||
'Ersatz') ||
|
||||
(status === ValidatorStatus.VALIDATOR_NODE_STATUS_PENDING &&
|
||||
(status === Schema.ValidatorStatus.VALIDATOR_NODE_STATUS_PENDING &&
|
||||
'Pending') ||
|
||||
(status === ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT &&
|
||||
(status ===
|
||||
Schema.ValidatorStatus.VALIDATOR_NODE_STATUS_TENDERMINT &&
|
||||
'Consensus')
|
||||
}`
|
||||
);
|
||||
|
@ -21,33 +21,37 @@ query Staking($partyId: ID!) {
|
||||
expiry
|
||||
}
|
||||
}
|
||||
nodes {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
infoUrl
|
||||
location
|
||||
ethereumAddress
|
||||
stakedByOperator
|
||||
stakedByDelegates
|
||||
stakedTotal
|
||||
pendingStake
|
||||
stakedByOperatorFormatted @client
|
||||
stakedByDelegatesFormatted @client
|
||||
stakedTotalFormatted @client
|
||||
pendingStakeFormatted @client
|
||||
epochData {
|
||||
total
|
||||
offline
|
||||
online
|
||||
}
|
||||
status
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
stakeScore
|
||||
nodesConnection {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
infoUrl
|
||||
location
|
||||
ethereumAddress
|
||||
stakedByOperator
|
||||
stakedByDelegates
|
||||
stakedTotal
|
||||
pendingStake
|
||||
stakedByOperatorFormatted @client
|
||||
stakedByDelegatesFormatted @client
|
||||
stakedTotalFormatted @client
|
||||
pendingStakeFormatted @client
|
||||
epochData {
|
||||
total
|
||||
offline
|
||||
online
|
||||
}
|
||||
status
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
stakeScore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
nodeData {
|
||||
|
@ -86,7 +86,7 @@ export interface Staking_epoch {
|
||||
timestamps: Staking_epoch_timestamps;
|
||||
}
|
||||
|
||||
export interface Staking_nodes_epochData {
|
||||
export interface Staking_nodesConnection_edges_node_epochData {
|
||||
__typename: "EpochData";
|
||||
/**
|
||||
* Total number of epochs since node was created
|
||||
@ -102,7 +102,7 @@ export interface Staking_nodes_epochData {
|
||||
online: number;
|
||||
}
|
||||
|
||||
export interface Staking_nodes_rankingScore {
|
||||
export interface Staking_nodesConnection_edges_node_rankingScore {
|
||||
__typename: "RankingScore";
|
||||
/**
|
||||
* The ranking score of the validator
|
||||
@ -122,7 +122,7 @@ export interface Staking_nodes_rankingScore {
|
||||
votingPower: string;
|
||||
}
|
||||
|
||||
export interface Staking_nodes {
|
||||
export interface Staking_nodesConnection_edges_node {
|
||||
__typename: "Node";
|
||||
/**
|
||||
* The node URL eg n01.vega.xyz
|
||||
@ -180,7 +180,7 @@ export interface Staking_nodes {
|
||||
/**
|
||||
* Summary of epoch data across all nodes
|
||||
*/
|
||||
epochData: Staking_nodes_epochData | null;
|
||||
epochData: Staking_nodesConnection_edges_node_epochData | null;
|
||||
/**
|
||||
* Validator status of the node
|
||||
*/
|
||||
@ -188,7 +188,23 @@ export interface Staking_nodes {
|
||||
/**
|
||||
* Ranking scores and status for the validator for the current epoch
|
||||
*/
|
||||
rankingScore: Staking_nodes_rankingScore;
|
||||
rankingScore: Staking_nodesConnection_edges_node_rankingScore;
|
||||
}
|
||||
|
||||
export interface Staking_nodesConnection_edges {
|
||||
__typename: "NodeEdge";
|
||||
/**
|
||||
* The node
|
||||
*/
|
||||
node: Staking_nodesConnection_edges_node;
|
||||
}
|
||||
|
||||
export interface Staking_nodesConnection {
|
||||
__typename: "NodesConnection";
|
||||
/**
|
||||
* List of nodes available for the connection
|
||||
*/
|
||||
edges: (Staking_nodesConnection_edges | null)[] | null;
|
||||
}
|
||||
|
||||
export interface Staking_nodeData {
|
||||
@ -231,7 +247,7 @@ export interface Staking {
|
||||
/**
|
||||
* All known network nodes
|
||||
*/
|
||||
nodes: Staking_nodes[] | null;
|
||||
nodesConnection: Staking_nodesConnection;
|
||||
/**
|
||||
* Returns information about nodes
|
||||
*/
|
||||
|
@ -8,7 +8,7 @@ export type StakingQueryVariables = Types.Exact<{
|
||||
}>;
|
||||
|
||||
|
||||
export type StakingQuery = { __typename?: 'Query', party?: { __typename?: 'Party', id: string, stakingSummary: { __typename?: 'StakingSummary', currentStakeAvailable: string }, delegations?: Array<{ __typename?: 'Delegation', amount: string, amountFormatted: string, epoch: number, node: { __typename?: 'Node', id: string } }> | null } | null, epoch: { __typename?: 'Epoch', id: string, timestamps: { __typename?: 'EpochTimestamps', start?: string | null, end?: string | null, expiry?: string | null } }, nodes?: Array<{ __typename?: 'Node', id: string, name: string, pubkey: string, infoUrl: string, location: string, ethereumAddress: string, stakedByOperator: string, stakedByDelegates: string, stakedTotal: string, pendingStake: string, stakedByOperatorFormatted: string, stakedByDelegatesFormatted: string, stakedTotalFormatted: string, pendingStakeFormatted: string, status: Types.NodeStatus, epochData?: { __typename?: 'EpochData', total: number, offline: number, online: number } | null, rankingScore: { __typename?: 'RankingScore', rankingScore: string, stakeScore: string, performanceScore: string, votingPower: string } }> | null, nodeData?: { __typename?: 'NodeData', stakedTotal: string, stakedTotalFormatted: string, totalNodes: number, inactiveNodes: number, validatingNodes: number, uptime: number } | null };
|
||||
export type StakingQuery = { __typename?: 'Query', party?: { __typename?: 'Party', id: string, stakingSummary: { __typename?: 'StakingSummary', currentStakeAvailable: string }, delegations?: Array<{ __typename?: 'Delegation', amount: string, amountFormatted: string, epoch: number, node: { __typename?: 'Node', id: string } }> | null } | null, epoch: { __typename?: 'Epoch', id: string, timestamps: { __typename?: 'EpochTimestamps', start?: string | null, end?: string | null, expiry?: string | null } }, nodesConnection: { __typename?: 'NodesConnection', edges?: Array<{ __typename?: 'NodeEdge', node: { __typename?: 'Node', id: string, name: string, pubkey: string, infoUrl: string, location: string, ethereumAddress: string, stakedByOperator: string, stakedByDelegates: string, stakedTotal: string, pendingStake: string, stakedByOperatorFormatted: string, stakedByDelegatesFormatted: string, stakedTotalFormatted: string, pendingStakeFormatted: string, status: Types.NodeStatus, epochData?: { __typename?: 'EpochData', total: number, offline: number, online: number } | null, rankingScore: { __typename?: 'RankingScore', rankingScore: string, stakeScore: string, performanceScore: string, votingPower: string } } } | null> | null }, nodeData?: { __typename?: 'NodeData', stakedTotal: string, stakedTotalFormatted: string, totalNodes: number, inactiveNodes: number, validatingNodes: number, uptime: number } | null };
|
||||
|
||||
|
||||
export const StakingDocument = gql`
|
||||
@ -35,33 +35,37 @@ export const StakingDocument = gql`
|
||||
expiry
|
||||
}
|
||||
}
|
||||
nodes {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
infoUrl
|
||||
location
|
||||
ethereumAddress
|
||||
stakedByOperator
|
||||
stakedByDelegates
|
||||
stakedTotal
|
||||
pendingStake
|
||||
stakedByOperatorFormatted @client
|
||||
stakedByDelegatesFormatted @client
|
||||
stakedTotalFormatted @client
|
||||
pendingStakeFormatted @client
|
||||
epochData {
|
||||
total
|
||||
offline
|
||||
online
|
||||
}
|
||||
status
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
stakeScore
|
||||
nodesConnection {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
infoUrl
|
||||
location
|
||||
ethereumAddress
|
||||
stakedByOperator
|
||||
stakedByDelegates
|
||||
stakedTotal
|
||||
pendingStake
|
||||
stakedByOperatorFormatted @client
|
||||
stakedByDelegatesFormatted @client
|
||||
stakedTotalFormatted @client
|
||||
pendingStakeFormatted @client
|
||||
epochData {
|
||||
total
|
||||
offline
|
||||
online
|
||||
}
|
||||
status
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
stakeScore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
nodeData {
|
||||
|
@ -13,6 +13,7 @@ import NodeContainer from './nodes-container';
|
||||
import { useVegaWallet } from '@vegaprotocol/wallet';
|
||||
import { useAppState } from '../../../contexts/app-state/app-state-context';
|
||||
import { toBigNum } from '@vegaprotocol/react-helpers';
|
||||
import compact from 'lodash/compact';
|
||||
|
||||
interface StakingNodeProps {
|
||||
data?: StakingQueryResult;
|
||||
@ -26,7 +27,9 @@ export const StakingNode = ({ data }: StakingNodeProps) => {
|
||||
const { node } = useParams<{ node: string }>();
|
||||
const { t } = useTranslation();
|
||||
const nodeInfo = React.useMemo(() => {
|
||||
return data?.nodes?.find(({ id }) => id === node);
|
||||
return compact(data?.nodesConnection?.edges).find(
|
||||
({ node: { id } }) => id === node
|
||||
)?.node;
|
||||
}, [node, data]);
|
||||
|
||||
const currentEpoch = React.useMemo(() => {
|
||||
|
@ -32,33 +32,37 @@ export const STAKING_QUERY = gql`
|
||||
expiry
|
||||
}
|
||||
}
|
||||
nodes {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
infoUrl
|
||||
location
|
||||
ethereumAddress
|
||||
stakedByOperator
|
||||
stakedByDelegates
|
||||
stakedTotal
|
||||
pendingStake
|
||||
stakedByOperatorFormatted @client
|
||||
stakedByDelegatesFormatted @client
|
||||
stakedTotalFormatted @client
|
||||
pendingStakeFormatted @client
|
||||
epochData {
|
||||
total
|
||||
offline
|
||||
online
|
||||
}
|
||||
status
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
stakeScore
|
||||
nodesConnection {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
name
|
||||
pubkey
|
||||
infoUrl
|
||||
location
|
||||
ethereumAddress
|
||||
stakedByOperator
|
||||
stakedByDelegates
|
||||
stakedTotal
|
||||
pendingStake
|
||||
stakedByOperatorFormatted @client
|
||||
stakedByDelegatesFormatted @client
|
||||
stakedTotalFormatted @client
|
||||
pendingStakeFormatted @client
|
||||
epochData {
|
||||
total
|
||||
offline
|
||||
online
|
||||
}
|
||||
status
|
||||
rankingScore {
|
||||
rankingScore
|
||||
stakeScore
|
||||
performanceScore
|
||||
votingPower
|
||||
stakeScore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
nodeData {
|
||||
|
@ -6,7 +6,7 @@ import { useEnvironment } from '@vegaprotocol/environment';
|
||||
import { KeyValueTable, KeyValueTableRow } from '@vegaprotocol/ui-toolkit';
|
||||
import { BigNumber } from '../../../lib/bignumber';
|
||||
import { formatNumber } from '../../../lib/format-number';
|
||||
import type { Staking_nodes } from './__generated__/Staking';
|
||||
import type { Staking_nodesConnection_edges_node } from './__generated__/Staking';
|
||||
|
||||
const ValidatorTableCell = ({
|
||||
children,
|
||||
@ -21,7 +21,7 @@ const ValidatorTableCell = ({
|
||||
);
|
||||
|
||||
export interface ValidatorTableProps {
|
||||
node: Staking_nodes;
|
||||
node: Staking_nodesConnection_edges_node;
|
||||
stakedTotal: string;
|
||||
stakeThisEpoch: BigNumber;
|
||||
}
|
||||
|
6
libs/types/src/__generated__/globalTypes.ts
generated
6
libs/types/src/__generated__/globalTypes.ts
generated
@ -181,12 +181,6 @@ export enum StakeLinkingStatus {
|
||||
STATUS_REJECTED = "STATUS_REJECTED",
|
||||
}
|
||||
|
||||
export enum ValidatorStatus {
|
||||
VALIDATOR_NODE_STATUS_ERSATZ = "VALIDATOR_NODE_STATUS_ERSATZ",
|
||||
VALIDATOR_NODE_STATUS_PENDING = "VALIDATOR_NODE_STATUS_PENDING",
|
||||
VALIDATOR_NODE_STATUS_TENDERMINT = "VALIDATOR_NODE_STATUS_TENDERMINT",
|
||||
}
|
||||
|
||||
export enum VoteValue {
|
||||
VALUE_NO = "VALUE_NO",
|
||||
VALUE_YES = "VALUE_YES",
|
||||
|
Loading…
Reference in New Issue
Block a user