Skip to content

Commit

Permalink
NNS1-3134: Add maturity fields to TableNeuron (#5081)
Browse files Browse the repository at this point in the history
# Motivation

We want to show maturity in the neurons table.
In this PR we just add fields to the `TableNeuron` type and don't
display anything yet.

# Changes

1. Add `availableMaturity` and `stakedMaturity` fields to the
`TableNeuron` type.
2. Populate the fields in `tableNeuronsFromNeuronInfos` and
`tableNeuronsFromSnsNeurons`.

# Tests

1. Unit tests added.
2. Mock updated.
3. Fixed a few cases where we weren't using the default test values but
we hadn't noticed yet because the value we used didn't differ in
relevant way (but now it does).

# Todos

- [ ] Add entry to changelog (if necessary).
not yet
  • Loading branch information
dskloetd authored Jun 20, 2024
1 parent bbcc0f6 commit 54d038e
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 6 deletions.
2 changes: 2 additions & 0 deletions frontend/src/lib/types/neurons-table.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ export type TableNeuron = {
domKey: string;
neuronId: string;
stake: TokenAmountV2;
availableMaturity: bigint;
stakedMaturity: bigint;
dissolveDelaySeconds: bigint;
state: NeuronState;
tags: string[];
Expand Down
12 changes: 11 additions & 1 deletion frontend/src/lib/utils/neurons-table.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ import {
import type { Identity } from "@dfinity/agent";
import type { NeuronInfo } from "@dfinity/nns";
import type { SnsNeuron } from "@dfinity/sns";
import { ICPToken, TokenAmountV2, type Token } from "@dfinity/utils";
import {
ICPToken,
TokenAmountV2,
fromNullable,
type Token,
} from "@dfinity/utils";

export const tableNeuronsFromNeuronInfos = ({
neuronInfos,
Expand Down Expand Up @@ -52,6 +57,8 @@ export const tableNeuronsFromNeuronInfos = ({
amount: neuronStake(neuronInfo),
token: ICPToken,
}),
availableMaturity: neuronInfo.fullNeuron?.maturityE8sEquivalent ?? 0n,
stakedMaturity: neuronInfo.fullNeuron?.stakedMaturityE8sEquivalent ?? 0n,
dissolveDelaySeconds,
state: neuronInfo.state,
tags: getNeuronTags({
Expand Down Expand Up @@ -92,6 +99,9 @@ export const tableNeuronsFromSnsNeurons = ({
amount: getSnsNeuronStake(snsNeuron),
token,
}),
availableMaturity: snsNeuron.maturity_e8s_equivalent ?? 0n,
stakedMaturity:
fromNullable(snsNeuron.staked_maturity_e8s_equivalent) ?? 0n,
dissolveDelaySeconds,
state: getSnsNeuronState(snsNeuron),
tags: getSnsNeuronTags({
Expand Down
61 changes: 56 additions & 5 deletions frontend/src/tests/lib/utils/neurons-table.utils.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,14 @@ describe("neurons-table.utils", () => {
const defaultDissolveDelaySeconds = 15778800n;
const defaultStake = 500_000_000n;

const defaultNeuronInfo = {
const defaultNeuronInfo: NeuronInfo = {
...mockNeuron,
neuronId: 42n,
fullNeuron: {
...mockNeuron.fullNeuron,
cachedNeuronStake: defaultStake,
maturityE8sEquivalent: 0n,
stakedMaturityE8sEquivalent: 0n,
},
dissolveDelaySeconds: defaultDissolveDelaySeconds,
state: NeuronState.Locked,
Expand All @@ -51,6 +53,8 @@ describe("neurons-table.utils", () => {
domKey: "42",
neuronId: "42",
stake: makeStake(defaultStake),
availableMaturity: 0n,
stakedMaturity: 0n,
dissolveDelaySeconds: defaultDissolveDelaySeconds,
state: NeuronState.Locked,
tags: [],
Expand Down Expand Up @@ -78,15 +82,15 @@ describe("neurons-table.utils", () => {
...defaultNeuronInfo,
neuronId: neuronId1,
fullNeuron: {
...mockNeuron.fullNeuron,
...defaultNeuronInfo.fullNeuron,
cachedNeuronStake: stake1,
},
};
const neuronInfo2 = {
...defaultNeuronInfo,
neuronId: neuronId2,
fullNeuron: {
...mockNeuron.fullNeuron,
...defaultNeuronInfo.fullNeuron,
cachedNeuronStake: stake2,
},
};
Expand Down Expand Up @@ -116,7 +120,7 @@ describe("neurons-table.utils", () => {
{
...defaultNeuronInfo,
fullNeuron: {
...mockNeuron.fullNeuron,
...defaultNeuronInfo.fullNeuron,
cachedNeuronStake: stake,
},
},
Expand Down Expand Up @@ -145,12 +149,34 @@ describe("neurons-table.utils", () => {
]);
});

it("should convert neuronInfo maturity", () => {
const availableMaturity = 50_000_000n;
const stakedMaturity = 60_000_000n;
const tableNeurons = convert([
{
...defaultNeuronInfo,
fullNeuron: {
...defaultNeuronInfo.fullNeuron,
maturityE8sEquivalent: availableMaturity,
stakedMaturityE8sEquivalent: stakedMaturity,
},
},
]);
expect(tableNeurons).toEqual([
{
...defaultExpectedTableNeuron,
availableMaturity,
stakedMaturity,
},
]);
});

it("should convert neuronInfo for spawning neuron without href", () => {
const spawningNeuronInfo = {
...defaultNeuronInfo,
state: NeuronState.Spawning,
fullNeuron: {
...mockNeuron.fullNeuron,
...defaultNeuronInfo.fullNeuron,
cachedNeuronStake: 0n,
spawnAtTimesSeconds: 12_312_313n,
},
Expand Down Expand Up @@ -219,6 +245,8 @@ describe("neurons-table.utils", () => {
const defaultCreateMockSnsNeuronParams = {
id: neuronId,
stake,
maturity: 0n,
stakedMaturity: 0n,
dissolveDelaySeconds,
state: NeuronState.Locked,
};
Expand All @@ -236,6 +264,8 @@ describe("neurons-table.utils", () => {
domKey: neuronIdString,
neuronId: neuronIdString,
stake: makeSnsStake(stake),
availableMaturity: 0n,
stakedMaturity: 0n,
dissolveDelaySeconds,
state: NeuronState.Locked,
tags: [],
Expand Down Expand Up @@ -292,10 +322,31 @@ describe("neurons-table.utils", () => {
]);
});

it("should convert SnsNeuron maturity", () => {
const availableMaturity = 70_000_000n;
const stakedMaturity = 80_000_000n;
const snsNeurons = [
createMockSnsNeuron({
...defaultCreateMockSnsNeuronParams,
maturity: availableMaturity,
stakedMaturity,
}),
];
const tableNeurons = convert(snsNeurons);
expect(tableNeurons).toEqual([
{
...expectedTableNeuron,
availableMaturity,
stakedMaturity,
},
]);
});

it("should convert multiple neurons", () => {
const neuronIdString2 = "fafafafafafafafa";
const neuronId2 = hexStringToBytes(neuronIdString2);
const snsNeuron2 = createMockSnsNeuron({
...defaultCreateMockSnsNeuronParams,
id: neuronId2,
stake,
dissolveDelaySeconds,
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/tests/mocks/neurons.mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ export const mockTableNeuron: TableNeuron = {
amount: 1n,
token: ICPToken,
}),
availableMaturity: 0n,
stakedMaturity: 0n,
dissolveDelaySeconds: 1n,
state: NeuronState.Locked,
tags: [],
Expand Down

0 comments on commit 54d038e

Please sign in to comment.