Skip to content

Commit

Permalink
Update nodejs InfoResponse (#1108)
Browse files Browse the repository at this point in the history
* Update InfoResponse

* Comment

* Update imports

* Fix types

* Update bindings/nodejs/lib/types/models/info/node-info-metrics.ts

Co-authored-by: /alex/ <[email protected]>

---------

Co-authored-by: /alex/ <[email protected]>
  • Loading branch information
Thoralf-M and Alex6323 authored Sep 1, 2023
1 parent 0c74896 commit b14d7eb
Show file tree
Hide file tree
Showing 11 changed files with 268 additions and 39 deletions.
4 changes: 2 additions & 2 deletions bindings/nodejs/lib/client/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ import { HexEncodedString } from '../utils';
import {
IBlockMetadata,
INodeInfo,
INodeInfoProtocol,
IPeer,
UTXOInput,
Response,
OutputId,
ProtocolParameters,
} from '../types';
import { OutputResponse, IOutputsResponse } from '../types/models/api';

Expand Down Expand Up @@ -328,7 +328,7 @@ export class Client {
/**
* Get the protocol parameters.
*/
async getProtocolParameters(): Promise<INodeInfoProtocol> {
async getProtocolParameters(): Promise<ProtocolParameters> {
const response = await this.methodHandler.callMethod({
name: 'getProtocolParameters',
});
Expand Down
4 changes: 2 additions & 2 deletions bindings/nodejs/lib/types/client/network.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright 2021-2023 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

import { INodeInfoProtocol } from '../models/info';
import { ProtocolParameters } from '../models/info';

/**
* Network types.
Expand Down Expand Up @@ -56,5 +56,5 @@ export interface INode {
*/
export interface INetworkInfo {
/** Protocol parameters */
protocolParameters: INodeInfoProtocol;
protocolParameters: ProtocolParameters;
}
2 changes: 1 addition & 1 deletion bindings/nodejs/lib/types/models/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ export * from './gossip-metrics';
export * from './gossip-heartbeat';
export * from './native-token';
export * from './peer';
export * from './rent';
export * from './rent-structure';
export * from './ledger-inclusion-state';
8 changes: 4 additions & 4 deletions bindings/nodejs/lib/types/models/info/node-info-base-token.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ export interface INodeInfoBaseToken {
* The base token unit.
*/
unit: string;
/**
* The base token sub-unit.
*/
subunit?: string;
/**
* The base token decimals.
*/
decimals: number;
/**
* The base token sub-unit.
*/
subunit?: string;
/**
* The use metric prefix flag.
*/
Expand Down
12 changes: 6 additions & 6 deletions bindings/nodejs/lib/types/models/info/node-info-metrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
*/
export interface INodeInfoMetrics {
/**
* Blocks per second.
* The current rate of new blocks per second.
*/
blocksPerSecond: number;
blocksPerSecond: string;
/**
* Referenced blocks per second.
* The current rate of confirmed blocks per second.
*/
referencedBlocksPerSecond: number;
confirmedBlocksPerSecond: string;
/**
* The rate at which rates are being referenced.
* The ratio of confirmed blocks to new blocks of the last confirmed slot.
*/
referencedRate: number;
confirmationRate: string;
}
209 changes: 201 additions & 8 deletions bindings/nodejs/lib/types/models/info/node-info-protocol.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,222 @@
// Copyright 2023 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

import type { IRent } from '../rent';
import type { RentStructure } from '../rent-structure';

/**
* The Protocol Info.
*/
export interface INodeInfoProtocol {
export interface ProtocolInfo {
/**
* The start epoch of the set of protocol parameters.
*/
startEpoch: string;
/**
* The protocol parameters.
*/
parameters: ProtocolParameters[];
}

/**
* The Protocol Parameters.
*/
export interface ProtocolParameters {
/**
* Protocol version used by the network.
*/
version: number;
/**
* The human friendly name of the network on which the node operates on.
*/
networkName: string;
/**
* The human readable part of bech32 addresses.
* Tells whether the node supports mainnet or testnet addresses. Value `iota` indicates that the node supports mainnet addresses. Value `atoi` indicates that the node supports testnet addresses.
*/
bech32Hrp: string;
/**
* The token supply.
* The rent structure according to TIP-19.
*/
rentStructure: RentStructure;
/**
* Work structure lists the Work Score of each type, it is used to denote the computation costs of processing an object.
*/
workScoreStructure: WorkScoreStructure;
/**
* Current supply of base token. Plain string encoded number.
*/
tokenSupply: string;
/**
* The protocol version.
* The genesis timestamp at which the slots start to count.
*/
version: number;
genesisUnixTimestamp: string;
/**
* The duration of a slot, in seconds.
*/
slotDurationInSeconds: number;
/**
* The number of slots in an epoch expressed as an exponent of 2.
*/
slotsPerEpochExponent: number;
/**
* The amount of potential Mana generated by 1 IOTA in 1 slot.
*/
manaGenerationRate: number;
/**
* The scaling of ManaGenerationRate expressed as an exponent of 2.
*/
manaGenerationRateExponent: number;
/**
* A lookup table of epoch index diff to mana decay factor (slice index 0 = 1 epoch).
*/
manaDecayFactors: number[];
/**
* The scaling of ManaDecayFactors expressed as an exponent of 2.
*/
manaDecayFactorsExponent: number;
/**
* An integer approximation of the sum of decay over epochs.
*/
manaDecayFactorEpochsSum: number;
/**
* The scaling of ManaDecayFactorEpochsSum expressed as an exponent of 2.
*/
manaDecayFactorEpochsSumExponent: number;
/**
* The unbonding period in epochs before an account can stop staking.
*/
stakingUnbondingPeriod: string;
/**
* Determine if a block is eligible by evaluating issuingTime and commitments in its pastcone to ATT and lastCommittedSlot respectively.
*/
livenessThreshold: string;
/**
* MinCommittableAge is the minimum age relative to the accepted tangle time slot index that a slot can be committed.
*/
minCommittableAge: string;
/**
* MaxCommittableAge is the maximum age for a slot commitment to be included in a block relative to the slot index of the block issuing time.
*/
maxCommittableAge: string;
/**
* Determine the slot that should trigger a new committee selection for the next and upcoming epoch.
*/
epochNearingThreshold: string;
/**
* Congestion Control Parameters defines the parameters used to calculate the Reference Mana Cost (RMC).
*/
congestionControlParameters: CongestionControlParameters;
/**
* The version signaling parameters.
*/
versionSignaling: VersionSignalingParameters;
}

/**
* Work structure lists the Work Score of each type, it is used to denote the computation costs of processing an object.
*/
export interface WorkScoreStructure {
/**
* DataKilobyte accounts for the network traffic per kilobyte.
*/
dataKilobyte: number;
/**
* Block accounts for work done to process a block in the node software.
*/
block: number;
/**
* MissingParent is used for slashing if there are not enough strong tips.
*/
missingParent: number;
/**
* Input accounts for loading the UTXO from the database and performing the mana calculations.
*/
input: number;
/**
* ContextInput accounts for loading and checking the context input.
*/
contextInput: number;
/**
* Output accounts for storing the UTXO in the database.
*/
output: number;
/**
* NativeToken accounts for calculations done with native tokens.
*/
nativeToken: number;
/**
* Staking accounts for the existence of a staking feature in the output.
*/
staking: number;
/**
* BlockIssuer accounts for the existence of a block issuer feature in the output.
*/
blockIssuer: number;
/**
* Allotment accounts for accessing the account based ledger to transform the mana to block issuance credits.
*/
allotment: number;
/**
* SignatureEd25519 accounts for an Ed25519 signature check.
*/
signatureEd25519: number;
/**
* MinStrongParentsThreshold is the minimum amount of strong parents in a basic block, otherwise the issuer gets slashed.
*/
minStrongParentsThreshold: number;
}

/**
* Congestion Control Parameters defines the parameters used to calculate the Reference Mana Cost (RMC).
*/
export interface CongestionControlParameters {
/**
* RMCMin is the minimum value of the reference Mana cost.
*/
rmcMin: string;
/**
* Increase is the increase step size of the reference Mana cost.
*/
increase: string;
/**
* Decrease is the decrease step size of the reference Mana cost.
*/
decrease: string;
/**
* IncreaseThreshold is the threshold for increasing the reference Mana cost.
*/
increaseThreshold: number;
/**
* DecreaseThreshold is the threshold for decreasing the reference Mana cost.
*/
decreaseThreshold: number;
/**
* SchedulerRate is the rate at which the scheduler runs in workscore units per second.
*/
schedulerRate: number;
/**
* MinMana is the minimum amount of Mana that an account must have to have a block scheduled.
*/
minMana: string;
/**
* MaxBufferSize is the maximum size of the buffer.
*/
maxBufferSize: number;
}

/**
* The version signaling parameters.
*/
export interface VersionSignalingParameters {
/**
* The size of the window in epochs to find which version of protocol parameters was most signaled, from currentEpoch - windowSize to currentEpoch.
*/
windowSize: number;
/**
* The target number of supporters for a version to win in a windowSize.
*/
windowTargetRatio: number;
/**
* The rent structure used by given node/network.
* The offset in epochs to activate the new version of protocol parameters.
*/
rentStructure: IRent;
activationOffset: number;
}
38 changes: 35 additions & 3 deletions bindings/nodejs/lib/types/models/info/node-info-status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,43 @@
*/
export interface INodeInfoStatus {
/**
* Is the node healthy.
* Tells whether the node is healthy or not.
*/
isHealthy: boolean;
/**
* The pruning index.
* A notion of time that is anchored to the latest accepted block.
*/
pruningIndex: number;
acceptedTangleTime?: string;
/**
* The Accepted Tangle Time after it has advanced with the system clock.
*/
relativeAcceptedTangleTime?: string;
/**
* A notion of time that is anchored to the latest confirmed block.
*/
confirmedTangleTime?: string;
/**
* The Confirmed Tangle Time after it has advanced with the system clock.
*/
relativeConfirmedTangleTime?: string;
/**
* The latest slot that the node has committed to.
*/
latestCommitmentId: string;
/**
* The index of latest finalized slot.
*/
latestFinalizedSlot: string;
/**
* The slot index of the latest accepted block.
*/
latestAcceptedBlockSlot?: string;
/**
* The slot index of the latest confirmed block.
*/
latestConfirmedBlockSlot?: string;
/**
* The index of the slot before which the tangle history is pruned.
*/
pruningSlot: string;
}
12 changes: 4 additions & 8 deletions bindings/nodejs/lib/types/models/info/node-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import type { INodeInfoBaseToken } from './node-info-base-token';
import type { INodeInfoMetrics } from './node-info-metrics';
import type { INodeInfoProtocol } from './node-info-protocol';
import type { ProtocolInfo } from './node-info-protocol';
import type { INodeInfoStatus } from './node-info-status';
/**
* Response from the /info endpoint.
Expand All @@ -14,7 +14,7 @@ export interface INodeInfo {
*/
name: string;
/**
* The version of node.
* The semantic version of the node.
*/
version: string;
/**
Expand All @@ -26,13 +26,9 @@ export interface INodeInfo {
*/
metrics: INodeInfoMetrics;
/**
* The supported protocol versions.
* The protocol parameters.
*/
supportedProtocolVersions: number[];
/**
* The protocol info of the node.
*/
protocol: INodeInfoProtocol;
protocolParameters: ProtocolInfo[];
/**
* The base token info of the node.
*/
Expand Down
Loading

0 comments on commit b14d7eb

Please sign in to comment.