import { TransactionArgument, Transaction } from "@mysten/sui/transactions";
import { AftermathApi } from "../../../general/providers/aftermathApi";
import { StakeEvent, StakingPosition, ApiStakeStakedSuiBody, ApiUnstakeBody, ApiStakeBody, ApiUpdateValidatorFeeBody, UnstakeEvent } from "../stakingTypes";
import { AnyObjectType, Balance, CoinType, ObjectId, StakingAddresses, SuiAddress } from "../../../types";
import { MoveErrors, MoveErrorsInterface } from "../../../general/types/moveErrorsInterface";
export declare class StakingApi implements MoveErrorsInterface {
    private readonly Provider;
    private static readonly constants;
    readonly addresses: StakingAddresses;
    readonly eventTypes: {
        staked: AnyObjectType;
        unstakeRequested: AnyObjectType;
        unstaked: AnyObjectType;
        epochWasChanged: AnyObjectType;
    };
    readonly coinTypes: {
        afSui: CoinType;
    };
    readonly objectTypes: {
        unverifiedValidatorOperationCap: AnyObjectType;
    };
    readonly moveErrors: MoveErrors;
    constructor(Provider: AftermathApi);
    /**
     * Adds move call to tx for liquid staking of SUI for afSUI.
     *
     * @returns `Coin<AFSUI>` if `withTransfer` is `undefined` or `false`
     */
    stakeTx: (inputs: {
        tx: Transaction;
        suiCoin: ObjectId | TransactionArgument;
        validatorAddress: SuiAddress;
        withTransfer?: boolean;
    }) => import("@mysten/sui/transactions").TransactionResult;
    /**
     * Adds move call to tx for liquid unstaking of afSUI for SUI that will be
     * processed at start of next epoch (end of current epoch).
     *
     * @returns ()
     */
    unstakeTx: (inputs: {
        tx: Transaction;
        afSuiCoin: ObjectId | TransactionArgument;
    }) => import("@mysten/sui/transactions").TransactionResult;
    /**
     * Adds move call to tx for liquid unstaking of afSUI for SUI that will be
     * processed immedietly.
     *
     * @returns `Coin<SUI>` if `withTransfer` is `undefined` or `false`
     */
    atomicUnstakeTx: (inputs: {
        tx: Transaction;
        afSuiCoin: ObjectId | TransactionArgument;
        withTransfer?: boolean;
    }) => import("@mysten/sui/transactions").TransactionResult;
    /**
     * Adds move call to tx for liquid staking of currently staked (non-liquid)
     * SUI objects for afSUI.
     *
     * @returns `Coin<AFSUI>` if `withTransfer` is `undefined` or `false`
     */
    requestStakeStakedSuiVecTx: (inputs: {
        tx: Transaction;
        stakedSuiIds: ObjectId[];
        validatorAddress: SuiAddress;
        withTransfer?: boolean;
    }) => import("@mysten/sui/transactions").TransactionResult;
    epochWasChangedTx: (inputs: {
        tx: Transaction;
    }) => import("@mysten/sui/transactions").TransactionResult;
    afSuiToSuiExchangeRateTx: (inputs: {
        tx: Transaction;
    }) => import("@mysten/sui/transactions").TransactionResult;
    suiToAfSuiExchangeRateTx: (inputs: {
        tx: Transaction;
    }) => import("@mysten/sui/transactions").TransactionResult;
    totalSuiAmountTx: (inputs: {
        tx: Transaction;
    }) => import("@mysten/sui/transactions").TransactionResult;
    afSuiToSuiTx: (inputs: {
        tx: Transaction;
        afSuiAmount: Balance;
    }) => import("@mysten/sui/transactions").TransactionResult;
    suiToAfSuiTx: (inputs: {
        tx: Transaction;
        suiAmount: Balance;
    }) => import("@mysten/sui/transactions").TransactionResult;
    updateValidatorFeeTx: (inputs: {
        tx: Transaction;
        validatorOperationCapId: ObjectId;
        newFee: bigint;
    }) => import("@mysten/sui/transactions").TransactionResult;
    /**
     * Builds complete PTB for liquid staking of SUI for afSUI.
     *
     * @returns Transaction Block ready for execution
     */
    fetchBuildStakeTx: (inputs: ApiStakeBody) => Promise<Transaction>;
    /**
     * Builds complete PTB for liquid unstaking of afSUI for SUI.
     *
     * @returns Transaction Block ready for execution
     */
    fetchBuildUnstakeTx: (inputs: ApiUnstakeBody) => Promise<Transaction>;
    /**
     * Builds complete PTB for liquid staking of currently staked (non-liquid)
     * SUI objects for afSUI.
     *
     * @returns Transaction Block ready for execution
     */
    fetchBuildStakeStakedSuiTx: (inputs: ApiStakeStakedSuiBody) => Promise<Transaction>;
    buildUpdateValidatorFeeTx: (inputs: ApiUpdateValidatorFeeBody) => Promise<Transaction>;
    buildEpochWasChangedTx: (inputs: {
        walletAddress: SuiAddress;
    } & Omit<{
        tx: Transaction;
    }, "tx">) => Transaction;
    private stakedEventType;
    private unstakeRequestedEventType;
    private unstakedEventType;
    private epochWasChangedEventType;
    static updateStakingPositionsFromEvent: (inputs: {
        stakingPositions: StakingPosition[];
        event: StakeEvent | UnstakeEvent;
    }) => StakingPosition[];
    private static assertValidExternalFee;
    private static updateUnstakePositionsFromEvent;
}
//# sourceMappingURL=stakingApi.d.ts.map