@q-dev/q-js-sdk
Version:
Typescript Library to interact with Q System Contracts
155 lines (154 loc) • 4.96 kB
TypeScript
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;
}