UNPKG

@q-dev/q-js-sdk

Version:

Typescript Library to interact with Q System Contracts

155 lines (154 loc) 4.96 kB
import { AddressWithBalance, ValidatorPoolInfo } from '..'; import { ContractRegistryInstance } from '../contracts/ContractRegistryInstance'; import { ValidationRewardPoolsInstance } from '../contracts/tokeneconomics/ValidationRewardPoolsInstance'; import { ValidatorsInstance } from '../contracts/governance/validators/ValidatorsInstance'; import { EPQFIParametersInstance } from '../contracts/governance/experts/EPQFIParametersInstance'; import { AddressStorageStakes } from '../ethers-contracts'; /** * Helps calculate delegation efficiency and saturation */ export declare class ValidatorMetrics { private validatorsInfo; private poolsInfo; private validators; private stakeDelegationFactor; /** * @internal * Takes snapshot using given data. * Used by unit tests. * @param validatorsInfo ValidatorInfo struct array * @param poolsInfo ValidatorPoolInfo struct array * @param stakeDelegationFactor current stake delegation factor */ setSnapShot(validatorsInfo: StakeInfo[], poolsInfo: ValidatorPoolInfo[], stakeDelegationFactor: string): void; /** * Takes snapshot using registry * @param registry Contract registry instance */ takeSnapshotFromNetwork(registry: ContractRegistryInstance): Promise<void>; /** * @internal * Takes snapshot using Validators, ValidationRewardPools and EPQFIParameters instances. * Used by takeSnapshotFromNetwork method * @param validatorsInstance ValidatorsInstance * @param poolsInstance ValidationRewardPoolsInstance * @param parameters EPQFIParametersInstance */ takeSnapshot(validatorsInstance: ValidatorsInstance, poolsInstance: ValidationRewardPoolsInstance, parameters: EPQFIParametersInstance): Promise<void>; /** * Returns stored snapshot * @returns ValidatorSnapshot struct array */ getSnapshot(): ValidatorSnapshot[]; /** * Calculates delegation efficiency using snapshot * @returns Delegation efficiency */ getDelegationEfficiency(): DelegationEfficiency[]; /** * Calculates delegation saturation using snapshot * @returns DelegationSaturation */ getDelegationSaturation(): string[]; /** * Return short validator list using snapshot * @returns AddressWithBalance[] */ getValidatorsShortList(): AddressWithBalance[]; /** * Calculates stake information using snapshot * @returns StakeInfo */ getStakeInfo(validatorsInstance: ValidatorsInstance, stakesInstance: AddressStorageStakes, address: string): Promise<StakeInfo>; } /** * Stake info */ export interface StakeInfo { /** * @field Validator address */ address: string; /** * @field Validator self stake from {@link StakeInfo.selfStake} */ selfStake: string; /** * @field Validator delegation stake from {@link StakeInfo.delegatedStake} */ delegatedStake: string; /** * @field Validator self stake from {@link StakeInfo.totalStake} */ totalStake: string; /** * @field Validator account stake from {@link StakeInfo.accountableStake} */ accountableStake: string; /** * @field Validator delegation factor */ currentDelegationFactor: number; } /** * Delegation efficiency info */ export interface DelegationEfficiency { /** * @field Validator address */ address: string; /** * @field Validator {@link ValidatorInfo.accountableStake | accountable stake} / (sum of all accountable stakes) */ globalStakeShare: string; /** * @field Validator delegation share from {@link ValidatorPoolInfo.delegatorsShare} */ delegatorShare: string; /** * @field {@link DelegationEfficiency.globalStakeShare | globalStakeShare} * delegatorsShare */ payoutToDelegators: string; /** * @field {@link DelegationEfficiency.payoutToDelegators | payoutToDelegator} / delegatedStake */ payoutPerDelegatedQ: string; /** * @field Validator delegation efficiency */ delegationEfficiency: string; } /** * Validator snapshot info */ export interface ValidatorSnapshot { /** * @field Validator address */ address: string; /** * @field Validator accountable stake from {@link StakeInfo.accountableStake} */ accountableStake: string; /** * @field Validator delegation stake from {@link StakeInfo.delegatedStake} */ delegatedStake: string; /** * @field Validator delegation share from {@link ValidatorPoolInfo.delegatorsShare} */ delegatorsShare: string; /** * @field Validator self stake from {@link StakeInfo.selfStake} */ selfStake: string; /** * @field Validator self stake from {@link StakeInfo.totalStake} */ totalStake: string; /** * @field System stake delegation factor */ stakeDelegationFactor: string; }