/// import { MethodContext, ImmutableMethodContext, NextValidatorsSetter } from '../../state_machine/types'; import { JSONObject } from '../../types'; export type TokenID = Buffer; export interface ModuleConfig { factorSelfStakes: number; maxLengthName: number; maxNumberSentStakes: number; maxNumberPendingUnlocks: number; failSafeMissedBlocks: number; failSafeInactiveWindow: number; punishmentWindowStaking: number; punishmentWindowSelfStaking: number; roundLength: number; minWeightStandby: bigint; numberActiveValidators: number; numberStandbyValidators: number; posTokenID: TokenID; validatorRegistrationFee: bigint; maxBFTWeightCap: number; commissionIncreasePeriod: number; maxCommissionIncreaseRate: number; useInvalidBLSKey: boolean; baseStakeAmount: bigint; lockingPeriodStaking: number; lockingPeriodSelfStaking: number; reportMisbehaviorReward: bigint; reportMisbehaviorLimitBanned: number; weightScaleFactor: bigint; } export type ModuleConfigJSON = JSONObject; export type GetConstantsResponse = JSONObject; export interface PunishmentLockingPeriods { punishmentWindowStaking: number; punishmentWindowSelfStaking: number; lockingPeriodStaking: number; lockingPeriodSelfStaking: number; } export interface RandomMethod { getRandomBytes(methodContext: ImmutableMethodContext, height: number, numberOfSeeds: number): Promise; } export interface ValidatorsMethod { setValidatorGeneratorKey(methodContext: MethodContext, validatorAddress: Buffer, generatorKey: Buffer): Promise; registerValidatorKeys(methodContext: MethodContext, validatorAddress: Buffer, blsKey: Buffer, generatorKey: Buffer, proofOfPossession: Buffer): Promise; registerValidatorWithoutBLSKey(methodContext: MethodContext, validatorAddress: Buffer, generatorKey: Buffer): Promise; getValidatorKeys(methodContext: ImmutableMethodContext, address: Buffer): Promise; getGeneratorsBetweenTimestamps(methodContext: ImmutableMethodContext, startTimestamp: number, endTimestamp: number): Promise>; setValidatorsParams(methodContext: MethodContext, validatorSetter: NextValidatorsSetter, preCommitThreshold: bigint, certificateThreshold: bigint, validators: { address: Buffer; bftWeight: bigint; }[]): Promise; } export interface TokenMethod { lock(methodContext: MethodContext, address: Buffer, module: string, tokenID: TokenID, amount: bigint): Promise; getAvailableBalance(methodContext: ImmutableMethodContext, address: Buffer, tokenID: TokenID): Promise; burn(methodContext: MethodContext, address: Buffer, tokenID: Buffer, amount: bigint): Promise; transfer(methodContext: MethodContext, senderAddress: Buffer, recipientAddress: Buffer, tokenID: TokenID, amount: bigint): Promise; unlock(methodContext: MethodContext, address: Buffer, module: string, tokenID: TokenID, amount: bigint): Promise; getLockedAmount(methodContext: ImmutableMethodContext, address: Buffer, tokenID: TokenID, module: string): Promise; } export interface FeeMethod { payFee(methodContext: MethodContext, amount: bigint): void; } export interface UnlockingObject { readonly validatorAddress: Buffer; readonly amount: bigint; readonly unstakeHeight: number; } export interface UpdateGeneratorKeyParams { generatorKey: Buffer; } export interface ValidatorRegistrationParams { name: string; blsKey: Buffer; proofOfPossession: Buffer; generatorKey: Buffer; } export interface StakeSharingCoefficient { tokenID: Buffer; coefficient: Buffer; } export interface ValidatorAccount { name: string; totalStake: bigint; selfStake: bigint; lastGeneratedHeight: number; isBanned: boolean; reportMisbehaviorHeights: number[]; consecutiveMissedBlocks: number; commission: number; lastCommissionIncreaseHeight: number; sharingCoefficients: StakeSharingCoefficient[]; } export type StakerDataJSON = JSONObject; export interface StakeObject { validatorAddress: Buffer; amount: bigint; sharingCoefficients: StakeSharingCoefficient[]; } export interface StakerData { stakes: StakeObject[]; pendingUnlocks: UnlockingObject[]; } export interface NameStoreData { validatorAddress: Buffer; } export interface StakeTransactionParams { stakes: StakeObject[]; } export interface BlockHeaderAssetForPOS { seedReveal: Buffer; maxHeightPreviouslyForged: number; maxHeightPrestaked: number; } export interface PomTransactionParams { header1: Buffer; header2: Buffer; } export interface PomCommandDependencies { tokenMethod: TokenMethod; validatorsMethod: ValidatorsMethod; } export interface ChangeCommissionParams { newCommission: number; } export interface ValidatorKeys { generatorKey: Buffer; blsKey: Buffer; } export interface UnlockCommandDependencies { tokenMethod: TokenMethod; } export interface PreviousTimestampData { timestamp: number; } export interface GenesisData { height: number; initRounds: number; initValidators: Buffer[]; } export interface GenesisStore { validators: { address: Buffer; name: string; blsKey: Buffer; proofOfPossession: Buffer; generatorKey: Buffer; lastGeneratedHeight: number; isBanned: boolean; reportMisbehaviorHeights: number[]; consecutiveMissedBlocks: number; commission: number; lastCommissionIncreaseHeight: number; sharingCoefficients: StakeSharingCoefficient[]; }[]; stakers: { address: Buffer; stakes: { validatorAddress: Buffer; amount: bigint; sharingCoefficients: StakeSharingCoefficient[]; }[]; pendingUnlocks: { validatorAddress: Buffer; amount: bigint; unstakeHeight: number; }[]; }[]; genesisData: { initRounds: number; initValidators: Buffer[]; }; } export interface GetUnlockHeightResponse { pendingUnlocks: { validatorAddress: string; amount: string; unstakeHeight: number; expectedUnlockableHeight: number; unlockable: boolean; }[]; } export interface GetPoSTokenIDResponse { tokenID: string; } export interface GetValidatorsByStakeRequest { limit: number | undefined; } export interface GetLockedRewardRequest { address: string; tokenID: string; } export interface GetLockedRewardResponse { reward: string; } export interface GetClaimableRewardsRequest { address: string; } export interface ClaimableReward { tokenID: string; reward: string; } export interface GetExpectedSharedRewardsRequest { validatorAddress: string; validatorReward: string; stake: string; }