import { MessageType } from "@protobuf-ts/runtime";
export interface SystemState {
    version?: bigint;
    epoch?: bigint;
    protocolVersion?: bigint;
    validators?: ValidatorSet;
    storageFund?: StorageFund;
    parameters?: SystemParameters;
    referenceGasPrice?: bigint;
    validatorReportRecords: ValidatorReportRecord[];
    stakeSubsidy?: StakeSubsidy;
    safeMode?: boolean;
    safeModeStorageRewards?: bigint;
    safeModeComputationRewards?: bigint;
    safeModeStorageRebates?: bigint;
    safeModeNonRefundableStorageFee?: bigint;
    epochStartTimestampMs?: bigint;
    extraFields?: MoveTable;
}
export interface ValidatorReportRecord {
    reported?: string;
    reporters: string[];
}
export interface SystemParameters {
    epochDurationMs?: bigint;
    stakeSubsidyStartEpoch?: bigint;
    minValidatorCount?: bigint;
    maxValidatorCount?: bigint;
    minValidatorJoiningStake?: bigint;
    validatorLowStakeThreshold?: bigint;
    validatorVeryLowStakeThreshold?: bigint;
    validatorLowStakeGracePeriod?: bigint;
    extraFields?: MoveTable;
}
export interface MoveTable {
    id?: string;
    size?: bigint;
}
export interface StakeSubsidy {
    balance?: bigint;
    distributionCounter?: bigint;
    currentDistributionAmount?: bigint;
    stakeSubsidyPeriodLength?: bigint;
    stakeSubsidyDecreaseRate?: number;
    extraFields?: MoveTable;
}
export interface StorageFund {
    totalObjectStorageRebates?: bigint;
    nonRefundableBalance?: bigint;
}
export interface ValidatorSet {
    totalStake?: bigint;
    activeValidators: Validator[];
    pendingActiveValidators?: MoveTable;
    pendingRemovals: bigint[];
    stakingPoolMappings?: MoveTable;
    inactiveValidators?: MoveTable;
    validatorCandidates?: MoveTable;
    atRiskValidators: {
        [key: string]: bigint;
    };
    extraFields?: MoveTable;
}
export interface Validator {
    name?: string;
    address?: string;
    description?: string;
    imageUrl?: string;
    projectUrl?: string;
    protocolPublicKey?: Uint8Array;
    proofOfPossession?: Uint8Array;
    networkPublicKey?: Uint8Array;
    workerPublicKey?: Uint8Array;
    networkAddress?: string;
    p2PAddress?: string;
    primaryAddress?: string;
    workerAddress?: string;
    nextEpochProtocolPublicKey?: Uint8Array;
    nextEpochProofOfPossession?: Uint8Array;
    nextEpochNetworkPublicKey?: Uint8Array;
    nextEpochWorkerPublicKey?: Uint8Array;
    nextEpochNetworkAddress?: string;
    nextEpochP2PAddress?: string;
    nextEpochPrimaryAddress?: string;
    nextEpochWorkerAddress?: string;
    metadataExtraFields?: MoveTable;
    votingPower?: bigint;
    operationCapId?: string;
    gasPrice?: bigint;
    stakingPool?: StakingPool;
    commissionRate?: bigint;
    nextEpochStake?: bigint;
    nextEpochGasPrice?: bigint;
    nextEpochCommissionRate?: bigint;
    extraFields?: MoveTable;
}
export interface StakingPool {
    id?: string;
    activationEpoch?: bigint;
    deactivationEpoch?: bigint;
    wowBalance?: bigint;
    rewardsPool?: bigint;
    poolTokenBalance?: bigint;
    exchangeRates?: MoveTable;
    pendingStake?: bigint;
    pendingTotalWowWithdraw?: bigint;
    pendingPoolTokenWithdraw?: bigint;
    extraFields?: MoveTable;
}
declare class SystemState$Type extends MessageType<SystemState> {
    constructor();
}
export declare const SystemState: SystemState$Type;
declare class ValidatorReportRecord$Type extends MessageType<ValidatorReportRecord> {
    constructor();
}
export declare const ValidatorReportRecord: ValidatorReportRecord$Type;
declare class SystemParameters$Type extends MessageType<SystemParameters> {
    constructor();
}
export declare const SystemParameters: SystemParameters$Type;
declare class MoveTable$Type extends MessageType<MoveTable> {
    constructor();
}
export declare const MoveTable: MoveTable$Type;
declare class StakeSubsidy$Type extends MessageType<StakeSubsidy> {
    constructor();
}
export declare const StakeSubsidy: StakeSubsidy$Type;
declare class StorageFund$Type extends MessageType<StorageFund> {
    constructor();
}
export declare const StorageFund: StorageFund$Type;
declare class ValidatorSet$Type extends MessageType<ValidatorSet> {
    constructor();
}
export declare const ValidatorSet: ValidatorSet$Type;
declare class Validator$Type extends MessageType<Validator> {
    constructor();
}
export declare const Validator: Validator$Type;
declare class StakingPool$Type extends MessageType<StakingPool> {
    constructor();
}
export declare const StakingPool: StakingPool$Type;
export {};
