import { HttpTransport, FallbackTransport, Abi, PublicClient } from 'viem';
import BigNumber from 'bignumber.js';

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */
/**
 * `WalletSDKError` is a custom error class that extends the built-in `Error` class.
 * It provides additional properties for error handling within the Wallet SDK.
 *
 * @remarks
 * This class is needed to provide additional context for errors, such as a code
 * and the original error, if any.
 *
 * @public
 *
 * @param message - The error message.
 * @param code - A string representing the error code.
 * @param originalError - The original error that caused this error, if any.
 */
declare class WalletSDKError extends Error {
    code: string;
    originalError?: Error | undefined;
    constructor(message: string, code: string, originalError?: Error | undefined);
}
/**
 * `Blockchain` is an abstract class that provides a structure for blockchain-specific classes.
 * It includes methods for error handling and throwing errors.
 *
 * @remarks
 * This class should be extended by classes that implement blockchain-specific functionality.
 * The extending classes should provide their own `ERROR_MESSAGES` and `ORIGINAL_ERROR_MESSAGES`.
 *
 * @property ERROR_MESSAGES - An object that maps error codes to error messages.
 * @property ORIGINAL_ERROR_MESSAGES - An object that maps original error messages to user-friendly error messages.
 *
 *
 * **/
declare abstract class Blockchain {
    protected abstract ERROR_MESSAGES: {
        [key: string]: string;
    };
    protected abstract ORIGINAL_ERROR_MESSAGES: {
        [key: string]: string;
    };
    /**
     * Handles errors that occur within the Ethereum class.
     *
     * @param {keyof typeof ERROR_MESSAGES} code - The error code associated with the error.
     * @param {Error | WalletSDKError | unknown} originalError - The original error that was thrown.
     *
     * If the original error is an instance of WalletSDKError, it is thrown as is.
     * If the original error is an instance of the built-in Error class, a new WalletSDKError is thrown with the original error as the cause.
     * If the original error is not an instance of WalletSDKError or Error, a new WalletSDKError is thrown with a generic message and code.
     */
    handleError(code: keyof typeof this.ERROR_MESSAGES, originalError: Error | WalletSDKError | unknown): never;
    /**
     * Throws a WalletSDKError with a specified error code and message.
     *
     * @param {keyof typeof ERROR_MESSAGES} code - The error code associated with the error.
     * @param {...string[]} values - The values to be inserted into the error message.
     *
     * The method retrieves the error message template associated with the provided code from the ERROR_MESSAGES object.
     * It then replaces placeholders in the message template with provided values and throws a WalletSDKError with the final message and the provided code.
     */
    throwError(code: keyof typeof this.ERROR_MESSAGES, ...values: string[]): never;
    /**
     * Check if the URL is valid
     *
     * @param {string} url - URL
     * @returns a bool type result.
     *
     */
    isValidURL(url: string): boolean;
}

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

type HexString$2 = `0x${string}`;

type Network = 'testnet' | 'mainnet';
type Transaction = {
    from: HexString$2;
    to: HexString$2;
    value: BigNumber;
    gasLimit: number;
    data: HexString$2;
};
type BoostedQueue = {
    lastBlock: number;
    balance: string;
};

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

/**
 * The `Berrachain` class extends the `Blockchain` class and provides methods for interacting with the Berrachain network.
 *
 * It allows you to select a network, initialize it, and retrieve the balance of the contract.
 *
 * @property {string} validator - The address of the validator.
 * @property {PublicClient} client - The PublicClient instance used for interacting with the Ethereum network.
 * @property {Contract} btg - The BTG contract instance.
 * @property ERROR_MESSAGES - The error messages for the Berrachain class.
 * @property ORIGINAL_ERROR_MESSAGES - The original error messages for the Berrachain class.
 *
 */
declare class Berrachain extends Blockchain {
    private validator;
    private client;
    private btg;
    private readonly network;
    protected ERROR_MESSAGES: {
        NETWORK_ERR: string;
        ADDRESS_FORMAT_ERROR: string;
        BALANCE_ERROR: string;
        BOOSTED_ERROR: string;
        BOOSTS_ERROR: string;
        BOOST_QUEUE_ERROR: string;
        NOT_AVAILABLE_NETWORK: string;
        ACTIVATE_BOOST_ERROR: string;
        CANCEL_BOOST_ERROR: string;
        DROP_BOOST_ERROR: string;
        BOOST_ERROR: string;
        QUEUE_DROP_BOOST_ERROR: string;
        CANCEL_DROP_BOOST_ERROR: string;
    };
    protected ORIGINAL_ERROR_MESSAGES: {};
    constructor(network: Network | undefined, rpcOrTransport: string | HttpTransport | FallbackTransport);
    /**
     * Retrieves the balance of the user by address
     *
     * @param address - The staker address
     * @returns A Promise that resolves to the balance.
     *
     * @throws Will throw an error if the contract call fails.
     */
    balanceOf(address: HexString$2): Promise<string>;
    /**
     * Retrieves the boosted stake of the user by address
     *
     * @param address - The staker address
     * @returns A Promise that resolves to the boosted stake.
     *
     * @throws Will throw an error if the contract call fails.
     */
    getStake(address: HexString$2): Promise<string>;
    /**
     * Retrieves all uses boosts by address
     *
     * @param address - The staker address
     * @returns A Promise that resolves to the ball user's boosts.
     *
     * @throws Will throw an error if the contract call fails.
     */
    getStakes(address: HexString$2): Promise<number>;
    /**
     * Retrieves info about user's boost queue by address
     *
     * @param address - The staker address
     * @returns A Promise that resolves to the balance in queue.
     *
     * @throws Will throw an error if the contract call fails.
     */
    getStakeInQueue(address: HexString$2): Promise<BoostedQueue>;
    getUnstakeInQueue(address: HexString$2): Promise<BoostedQueue>;
    getActivateBoostDelay(): Promise<number>;
    getBlockNumber(): Promise<bigint>;
    /**
     * Creates a transaction data for boost activation
     *
     * @param address - The staker address
     * @returns A Promise that resolves to the transaction data
     *
     * @throws Will throw an error if the contract call fails.
     */
    activateStake(address: HexString$2): Promise<Transaction>;
    /**
     * Creates a transaction data for canceling boost queue
     *
     * @param address - The staker address
     * @param amount - The amount of boost
     * @returns A Promise that resolves to the transaction data
     *
     * @throws Will throw an error if the contract call fails.
     */
    cancelStakeInQueue(address: string, amount: string): Promise<Transaction>;
    /**
     * Creates a transaction data for drop boost (unstake)
     *
     * @param address - The staker address
     * @param amount - The amount of boost (doesn't use for mainnet)
     * @returns A Promise that resolves to the transaction data
     *
     * @throws Will throw an error if the contract call fails.
     */
    unstake(address: string): Promise<Transaction>;
    /**
     * Creates a transaction data for boost (staking)
     *
     * @param address - The staker address
     * @param amount - The amount of boost
     * @returns A Promise that resolves to the transaction data
     *
     * @throws Will throw an error if the contract call fails.
     */
    stake(address: string, amount: string): Promise<Transaction>;
    /**
     * Creates a transaction data for queue drop boost (unstake queue)
     *
     * @param address - The staker address
     * @param amount - The amount of boost
     * @returns A Promise that resolves to the transaction data
     *
     * @throws Will throw an error if the contract call fails.
     */
    queueUnstake(address: HexString$2, amount: string): Promise<Transaction>;
    /**
     * Creates a transaction data for cancel drop boost (cancel unstake queue)
     *
     * @param address - The staker address
     * @param amount - The amount of boost
     * @returns A Promise that resolves to the transaction data
     *
     * @throws Will throw an error if the contract call fails.
     */
    cancelUnstake(address: HexString$2, amount: string): Promise<Transaction>;
    private getTransaction;
    /**
     * Calculates the gas limit by adding a predefined BERA_GAS_RESERVE to the given gas consumption.
     *
     * @param gasConsumption - The amount of gas consumed.
     *
     * @returns The calculated gas limit as a number.
     */
    private calculateGasLimit;
}

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */
declare const ABI_CONTRACT_ACCOUNTING: readonly [{
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "InvalidParam";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "InvalidValue";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "ZeroValue";
    readonly type: "error";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "round";
        readonly type: "uint256";
    }];
    readonly name: "ActivateRound";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "AddWithdrawRequest";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "Autocompound";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "int256";
        readonly name: "";
        readonly type: "int256";
    }];
    readonly name: "ChangeExpectValidatorsToStop";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "ClaimPoolFee";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "ClaimWithdrawRequest";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "DepositPending";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "newFee";
        readonly type: "uint256";
    }];
    readonly name: "FeeUpdated";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "oldGovernor";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "newGovernor";
        readonly type: "address";
    }];
    readonly name: "GovernorChanged";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint8";
        readonly name: "version";
        readonly type: "uint8";
    }];
    readonly name: "Initialized";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "InterchangeDeposit";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "InterchangeWithdraw";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "previousOwner";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "OwnershipTransferred";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "superAdmin";
        readonly type: "address";
    }];
    readonly name: "SetSuperAdmin";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "rewarderBalance";
        readonly type: "uint256";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "reward";
        readonly type: "uint256";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "fee";
        readonly type: "uint256";
    }];
    readonly name: "Update";
    readonly type: "event";
}, {
    readonly inputs: readonly [];
    readonly name: "BEACON_AMOUNT";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "FEE_DENOMINATOR";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "governor";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "owner";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "renounceOwnership";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "value";
        readonly type: "address";
    }];
    readonly name: "setSuperAdmin";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "superAdmin";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "transferOwnership";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "poolFee";
        readonly type: "uint256";
    }, {
        readonly internalType: "address";
        readonly name: "rewardsTreasury";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "withdrawTreasury";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "accountingGovernor";
        readonly type: "address";
    }];
    readonly name: "initialize";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "depositToPendingValue";
        readonly type: "uint256";
    }];
    readonly name: "deposit";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "interchangedAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "activatedSlots";
        readonly type: "uint256";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "balance";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "pendingDepositedBalance";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "pendingBalance";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "autocompoundBalanceOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "autocompoundBalance";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "depositedBalanceOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "pendingDepositedBalanceOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "pendingBalanceOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly name: "withdrawPending";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "withdraw";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "withdrawFromPendingAmount";
        readonly type: "uint256";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "claimPoolFee";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "getPoolFee";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "feeBalance";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "update";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "feeValue";
        readonly type: "uint256";
    }];
    readonly name: "setFee";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "autocompound";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "pendingRestakedRewards";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "pendingRestakedRewardOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "restakedRewardOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "withdrawRequestQueueParams";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }];
    readonly name: "withdrawRequest";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "claimWithdrawRequest";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "readyforAutocompoundRewardsAmount";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "unclaimedReward";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "closeValidatorsStat";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "stakeAmount";
        readonly type: "uint256";
    }];
    readonly name: "setMinRestakeAmount";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "activatedValidatorNum";
        readonly type: "uint256";
    }];
    readonly name: "activateValidators";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}];
declare const ABI_CONTRACT_POOL: readonly [{
    readonly inputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "constructor";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "InvalidAmount";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "InvalidParam";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "InvalidValue";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "Paused";
    readonly type: "error";
}, {
    readonly inputs: readonly [{
        readonly internalType: "string";
        readonly name: "field";
        readonly type: "string";
    }];
    readonly name: "ZeroValue";
    readonly type: "error";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "oldGovernor";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "newGovernor";
        readonly type: "address";
    }];
    readonly name: "GovernorChanged";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint8";
        readonly name: "version";
        readonly type: "uint8";
    }];
    readonly name: "Initialized";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "previousOwner";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "OwnershipTransferStarted";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "previousOwner";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "OwnershipTransferred";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly name: "PauseStaking";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly name: "PauseWithdraw";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "bytes";
        readonly name: "oldPendingValidatorPubKey";
        readonly type: "bytes";
    }, {
        readonly indexed: false;
        readonly internalType: "bytes";
        readonly name: "newPendingValidatorPubKey";
        readonly type: "bytes";
    }];
    readonly name: "PendingValidatorReplaced";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly name: "Restake";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "SetMinStakeAmount";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "superAdmin";
        readonly type: "address";
    }];
    readonly name: "SetSuperAdmin";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "StakeActivated";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }, {
        readonly indexed: false;
        readonly internalType: "uint64";
        readonly name: "source";
        readonly type: "uint64";
    }];
    readonly name: "StakeAdded";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "StakeCanceled";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "bytes";
        readonly name: "validator";
        readonly type: "bytes";
    }];
    readonly name: "StakeDeposited";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "staker";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }, {
        readonly indexed: false;
        readonly internalType: "uint64";
        readonly name: "source";
        readonly type: "uint64";
    }];
    readonly name: "Unstake";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly internalType: "bytes";
        readonly name: "validator";
        readonly type: "bytes";
    }];
    readonly name: "ValidatorMarkedAsExited";
    readonly type: "event";
}, {
    readonly inputs: readonly [];
    readonly name: "BEACON_AMOUNT";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "acceptOwnership";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "governor";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "owner";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "pendingOwner";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "renounceOwnership";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "value";
        readonly type: "address";
    }];
    readonly name: "setSuperAdmin";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "superAdmin";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "transferOwnership";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "depositContract";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "accountingContract";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "withdrawTreasury";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "rewardsTreasury";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "poolGovernor";
        readonly type: "address";
    }];
    readonly name: "initialize";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint64";
        readonly name: "source";
        readonly type: "uint64";
    }];
    readonly name: "stake";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly name: "unstakePending";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint16";
        readonly name: "allowedInterchangeNum";
        readonly type: "uint16";
    }, {
        readonly internalType: "uint64";
        readonly name: "source";
        readonly type: "uint64";
    }];
    readonly name: "unstake";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "unstakeFromPendingValue";
        readonly type: "uint256";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "activateStake";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "activatedSlots";
        readonly type: "uint256";
    }];
    readonly name: "restake";
    readonly outputs: readonly [];
    readonly stateMutability: "payable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly components: readonly [{
            readonly internalType: "bytes";
            readonly name: "pubkey";
            readonly type: "bytes";
        }, {
            readonly internalType: "bytes";
            readonly name: "signature";
            readonly type: "bytes";
        }, {
            readonly internalType: "bytes32";
            readonly name: "deposit_data_root";
            readonly type: "bytes32";
        }];
        readonly internalType: "struct ValidatorList.DepositData[]";
        readonly name: "pendingValidators";
        readonly type: "tuple[]";
    }];
    readonly name: "setPendingValidators";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "getPendingValidatorCount";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "index";
        readonly type: "uint256";
    }];
    readonly name: "getPendingValidator";
    readonly outputs: readonly [{
        readonly internalType: "bytes";
        readonly name: "";
        readonly type: "bytes";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "getValidatorCount";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "index";
        readonly type: "uint256";
    }];
    readonly name: "getValidator";
    readonly outputs: readonly [{
        readonly internalType: "bytes";
        readonly name: "";
        readonly type: "bytes";
    }, {
        readonly internalType: "enum ValidatorList.ValidatorStatus";
        readonly name: "";
        readonly type: "uint8";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "index";
        readonly type: "uint256";
    }, {
        readonly components: readonly [{
            readonly internalType: "bytes";
            readonly name: "pubkey";
            readonly type: "bytes";
        }, {
            readonly internalType: "bytes";
            readonly name: "signature";
            readonly type: "bytes";
        }, {
            readonly internalType: "bytes32";
            readonly name: "deposit_data_root";
            readonly type: "bytes32";
        }];
        readonly internalType: "struct ValidatorList.DepositData";
        readonly name: "pendingValidator";
        readonly type: "tuple";
    }];
    readonly name: "replacePendingValidator";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "num";
        readonly type: "uint256";
    }];
    readonly name: "markValidatorsAsExited";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "index";
        readonly type: "uint256";
    }];
    readonly name: "markValidatorAsExited";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "reorderPending";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "bool";
        readonly name: "pause";
        readonly type: "bool";
    }];
    readonly name: "pauseStaking";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "bool";
        readonly name: "pause";
        readonly type: "bool";
    }];
    readonly name: "pauseWithdraw";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "newGovernor";
        readonly type: "address";
    }];
    readonly name: "setGovernor";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly inputs: readonly [];
    readonly name: "minStakeAmount";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "stakeAmount";
        readonly type: "uint256";
    }];
    readonly name: "setMinStakeAmount";
    readonly outputs: readonly [];
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}];

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

type HexString$1 = `0x${string}`;
type EthNetworkType = 'mainnet' | 'holesky';
interface EthNetworkAddresses {
    addressContractAccounting: HexString$1;
    addressContractPool: HexString$1;
    addressContractWithdrawTreasury: HexString$1;
    rpcUrl: string;
}
type EthNetworkAddressesMap = {
    [K in EthNetworkType]: EthNetworkAddresses;
};
type EthTransaction = {
    from: HexString$1;
    to: HexString$1;
    value: BigNumber;
    gasLimit: number;
    data: HexString$1;
};
declare enum ValidatorStatus {
    Unknown = 0,
    Pending = 1,
    Deposited = 2
}
interface AggregatedBalances {
    [key: string]: string;
}

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

interface ContractProps$1<T extends Abi> {
    abi: T;
    address: HexString$1;
}
/**
 * The `Ethereum` class extends the `Blockchain` class and provides methods for interacting with the Ethereum network.
 *
 * It allows you to select a network, initialize it, and retrieve the balance of the contract.
 *
 * @property {PublicClient} client - The PublicClient instance used for interacting with the Ethereum network.
 * @property {string} addressContractWithdrawTreasury - The address of the withdraw treasury contract.
 * @property {ContractProps} contractAccounting - The accounting contract props.
 * @property {ContractProps} contractPool - The pool contract props.
 * @property ERROR_MESSAGES - The error messages for the Ethereum class.
 * @property ORIGINAL_ERROR_MESSAGES - The original error messages for the Ethereum class.
 *
 */
declare class Ethereum extends Blockchain {
    addressContractWithdrawTreasury: string;
    contractAccounting: ContractProps$1<typeof ABI_CONTRACT_ACCOUNTING>;
    contractPool: ContractProps$1<typeof ABI_CONTRACT_POOL>;
    client: PublicClient;
    private minAmount;
    protected ERROR_MESSAGES: {
        BALANCE_ERROR: string;
        PENDING_BALANCE_ERROR: string;
        PENDING_DEPOSITED_BALANCE_ERROR: string;
        PENDING_RESTAKED_REWARDS_ERROR: string;
        READY_FOR_AUTOCOMPOUND_REWARDS_AMOUNT_ERROR: string;
        PENDING_BALANCE_OF_ERROR: string;
        PENDING_DEPOSITED_BALANCE_OF_ERROR: string;
        DEPOSITED_BALANCE_OF_ERROR: string;
        PENDING_RESTAKED_REWARD_OF_ERROR: string;
        RESTAKED_REWARD_OF_ERROR: string;
        GET_POOL_FEE_ERROR: string;
        MIN_STAKE_AMOUNT_ERROR: string;
        GET_VALIDATOR_ERROR: string;
        GET_VALIDATOR_COUNT_ERROR: string;
        GET_PENDING_VALIDATOR_ERROR: string;
        GET_PENDING_VALIDATOR_COUNT_ERROR: string;
        ACTIVATE_STAKE_ERROR: string;
        MIN_AMOUNT_ERROR: string;
        UNSTAKE_PENDING_ERROR: string;
        INSUFFICIENT_PENDING_BALANCE_ERROR: string;
        ZERO_UNSTAKE_MESSAGE: string;
        AMOUNT_GREATER_THAN_PENDING_BALANCE_ERROR: string;
        NETWORK_NOT_SUPPORTED: string;
        NO_REWARDS_MESSAGE: string;
        AUTOCOMPOUND_ERROR: string;
        AUTOCOMPOUND_BALANCE_OF_ERROR: string;
        WITHDRAW_REQUEST_QUEUE_PARAMS_ERROR: string;
        WITHDRAW_REQUEST_ERROR: string;
        ZERO_UNSTAKE_ERROR: string;
        NOT_FILLED_UNSTAKE_MESSAGE: string;
        WRONG_TYPE_MESSAGE: string;
        CLAIM_WITHDRAW_REQUEST_ERROR: string;
        CLOSE_VALIDATORS_STAT_ERROR: string;
        STAKE_ERROR: string;
        UNSTAKE_ERROR: string;
        SIMULATE_UNSTAKE_ERROR: string;
        MAX_AMOUNT_FOR_UNSTAKE_ERROR: string;
        ADDRESS_FORMAT_ERROR: string;
        USER_BALANCES_ERROR: string;
        POOL_BALANCES_ERROR: string;
    };
    protected ORIGINAL_ERROR_MESSAGES: {
        'InvalidValue: remainder': string;
        'InvalidValue: amount': string;
        'InvalidValue: pending balance': string;
        'ZeroValue: pending': string;
        'ZeroValue: claim': string;
        'InvalidParam: index': string;
        'InvalidParam: caller': string;
        'InvalidValue: zero amount': string;
        'InvalidValue: share': string;
        'InvalidValue: withdrawable balance': string;
        'Paused: withdraw claim': string;
        'Paused: staking': string;
        'Paused: withdraw': string;
        'InvalidAmount: small stake': string;
        'Pending validator': string;
        'Returned error: execution reverted': string;
    };
    constructor(network?: EthNetworkType, rpcOrTransport?: string | HttpTransport | FallbackTransport);
    /**
     * Retrieves the balance of the contract.
     *
     * This method calls the `balance` method on the `contractAccounting` contract,
     * converts the result from Wei to Ether, and returns the result as a `BigNumber`.
     *
     * @returns A promise that resolves to the balance of the contract as a `BigNumber`.
     *
     * @throws Will throw an error if the contract call fails.
     */
    balance(): Promise<BigNumber>;
    /**
     * Fetches the pool pending balance. This balance is always less than 32 ETH.
     *
     * @returns A Promise that resolves to the pending balance in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    pendingBalance(): Promise<BigNumber>;
    /**
     * Fetches the pool pending deposited balance. This is the balance deposited into the Beacon deposit contract but validators are still not active.
     *
     * @returns A Promise that resolves to the pending deposited balance in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    pendingDepositedBalance(): Promise<BigNumber>;
    /**
     * Fetches the pool restaked rewards which are in pending status.
     *
     * @returns A Promise that resolves to the pending restaked rewards amount in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    pendingRestakedRewards(): Promise<BigNumber>;
    /**
     * Fetches the pool unclaimed rewards amount which can be restaked.
     *
     * @returns A Promise that resolves to the unclaimed rewards amount in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    readyforAutocompoundRewardsAmount(): Promise<BigNumber>;
    /**
     * Fetches the pending balance of a given address.
     *
     * @param address - The address to fetch the pending balance for.
     *
     * @returns A Promise that resolves to the pending balance in ether.
     *
     * @throws Will throw an Error if the contract call fails or address is not valid.
     */
    pendingBalanceOf(address: HexString$1): Promise<BigNumber>;
    /**
     * Fetches the user's pending deposited balance. This is the balance deposited into the validator but not active yet.
     * Pending deposited balance can't be unstaked till validator activation.
     *
     * @param address - The address to fetch the pending deposited balance for.
     *
     * @returns A Promise that resolves to the pending deposited balance in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    pendingDepositedBalanceOf(address: HexString$1): Promise<BigNumber>;
    /**
     * Fetches the user's active origin deposited balance.
     *
     * @param address - The address to fetch the deposited balance for.
     *
     * @returns A Promise that resolves to the deposited balance in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    depositedBalanceOf(address: HexString$1): Promise<BigNumber>;
    /**
     * Fetches the user's restaked rewards in pending state.
     *
     * @param address - The address to fetch the pending restaked rewards for.
     *
     * @returns A Promise that resolves to the pending restaked rewards in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    pendingRestakedRewardOf(address: HexString$1): Promise<BigNumber>;
    /**
     * Returns total user restaked rewards. Includes rewards in pending state.
     *
     * @param address - The address to fetch the restaked rewards for.
     *
     * @returns A Promise that resolves to the restaked rewards in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    restakedRewardOf(address: HexString$1): Promise<BigNumber>;
    /**
     * Fetches the pool fee in bips (1/10000).
     *
     * @returns A Promise that resolves to the pool fee.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    getPoolFee(): Promise<BigNumber>;
    /**
     * Claims all pool rewards and restakes it into the pool.
     *
     * @param address - The address to perform the autocompound operation for.
     *
     * @returns A Promise that resolves to a transaction object.
     *
     * @throws Will throw an Error if the contract call fails or there are no rewards.
     */
    autocompound(address: string): Promise<EthTransaction>;
    /**
     * Returns total user autocompound balance. Part of this balance could be in pending state after rewards autocompound.
     *
     * @param address - The address to fetch the autocompound balance for.
     *
     * @returns A Promise that resolves to the autocompound balance in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    autocompoundBalanceOf(address: string): Promise<BigNumber>;
    /**
     * Returns info about withdraw requests queue.
     * Includes totally all-time requested withdraw amount,
     * actual allowed for interchange with deposits amount,
     * all-time withdraw treasury filled amount,
     * and all-time claimed by users amount.
     *
     * @returns A Promise that resolves to an object containing the withdraw request queue parameters.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    withdrawRequestQueueParams(): Promise<{
        withdrawRequested: BigNumber;
        interchangeAllowed: BigNumber;
        filled: BigNumber;
        claimed: BigNumber;
    }>;
    /**
     * Returns user withdraw request info. Includes the actual requested amount and the amount ready for claim.
     *
     * @param address - The address to fetch the withdraw request info for.
     *
     * @returns A Promise that resolves to an object containing the requested amount and the amount ready for claim in ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    withdrawRequest(address: string): Promise<{
        requested: BigNumber;
        readyForClaim: BigNumber;
    }>;
    /**
     * Returns aggregated pool balances using multicall contract.
     *
     * @returns A Promise that resolves to a AggregatedBalances object.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    poolBalances(): Promise<AggregatedBalances>;
    /**
     * Returns aggregated user balances using multicall contract.
     *
     * @param address - The user address.
     *
     * @returns A Promise that resolves to a AggregatedBalances object.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    userBalances(address: string): Promise<AggregatedBalances>;
    /**
     * Claims funds requested by withdraw.
     *
     * @param address - The address to perform the claim operation for.
     *
     * @returns A Promise that resolves to a transaction object.
     *
     * @throws Will throw an Error if the contract call fails, there are no funds to claim, or the claim is not yet filled.
     */
    claimWithdrawRequest(address: string): Promise<EthTransaction>;
    /**
     * Returns the number of validators expected to stop.
     *
     * @returns A Promise that resolves to the number of validators expected to stop.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    closeValidatorsStat(): Promise<number>;
    /**
     * Stakes funds into pool.
     *
     * @param address - Sender address.
     * @param amount - Stake amount in ETH
     * @param source - Stake source. Default is '0'.
     *
     * @returns A Promise that resolves to the unsigned ETH transaction object.
     *
     * @throws Will throw an Error if the amount is not a valid, the amount is less than the minimum, or the contract call fails.
     */
    stake(address: string, amount: string, source?: string): Promise<EthTransaction>;
    /**
     * Unstake value from active autocompound balance.
     * AllowedInterchangeNum is max allowed number interchanges with pending stakers.
     * Unstaked immediately if value <= pool pending balance or create withdraw request.
     * Interchange disallowed as default.
     *
     * @param address - Sender address.
     * @param amount - Unstake amount in ETH.
     * @param allowedInterchangeNum - Max allowed number of interchanges. Default is 0.
     * @param source - Unstake source. Default is '0'.
     *
     * @returns A Promise that resolves to the unsigned ETH transaction object.
     *
     * @throws Will throw an Error if the amount is not a string, the balance is less than the amount, or the contract call fails.
     */
    unstake(address: string, amount: string, allowedInterchangeNum?: number, source?: string): Promise<EthTransaction>;
    /**
     * Simulate unstake transaction and return amount of instant unstake.
     * Required to compare evaluation of allowedInterchangeNum parameter.
     *
     * @param address - Sender address.
     * @param amount - Unstake amount in ETH.
     * @param allowedInterchangeNum - Max allowed number of interchanges. Default is 1.
     * @param source - Unstake source. Default is '0'.
     *
     * @returns A Promise that resolves to a BigNumber representing the instant unstake amount in ETH.
     *
     * @throws Will throw an Error if the balance is less than the amount or the contract call fails.
     */
    simulateUnstake(address: string, amount: string, allowedInterchangeNum?: number, source?: string): Promise<BigNumber>;
    /**
     * Unstakes the pending amount from Autocompound.
     *
     * @param address - The address from which the amount will be unstaked.
     * @param amount - The amount to unstake.
     *
     * @returns A Promise that resolves to a transaction object.
     *
     * @throws Will throw an Error if the pending balance is zero, the amount is greater than the pending balance,
     * or the pending balance is less than the minimum stake amount.
     */
    unstakePending(address: string, amount: string): Promise<EthTransaction>;
    /**
     * Activates pending stake by interchange with withdraw request.
     *
     * @param address - The address from which the stake will be activated.
     *
     * @returns A Promise that resolves to a transaction object.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    activateStake(address: string): Promise<EthTransaction>;
    /**
     * Fetches the number of validators prepared for deposit from the contract pool.
     *
     * @returns A Promise that resolves to the number of validators prepared for deposit.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    getPendingValidatorCount(): Promise<number>;
    /**
     * Fetches a pending validator's public key by index from the contract pool.
     * Note: The list of pending validators is dynamic so ordering is unstable.
     *
     * @param index - The index of the pending validator to fetch.
     *
     * @returns A Promise that resolves to the public key of the pending validator.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    getPendingValidator(index: number): Promise<string>;
    /**
     * Fetches the total number of known validators from the contract pool.
     * A validator can be in one of the following statuses: pending, deposited, exited.
     * Exited validators will be overwritten by new pending validators to optimize memory usage.
     *
     * @returns A Promise that resolves to the total number of known validators.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    getValidatorCount(): Promise<number>;
    /**
     * Fetches a validator from the contract pool by its index.
     * The result is an object containing the validator's public key and status.
     *
     * @param index - The index of the validator to fetch.
     *
     * @returns A Promise that resolves to an object with the validator's public key and status.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    getValidator(index: number): Promise<{
        pubkey: string;
        status: string;
    }>;
    /**
     * Fetches the minimum stake amount from the contract pool.
     * The result is converted from Wei to Ether using Web3 utilities.
     *
     * @returns A Promise that resolves to a BigNumber representing the minimum stake amount in Ether.
     *
     * @throws Will throw an Error if the contract call fails.
     */
    minStakeAmount(): Promise<BigNumber>;
    /**
     * Selects and initializes a new network.
     *
     * This method calls `initializeNetwork` with the provided parameters and returns the current instance,
     * allowing for method chaining.
     *
     * @param network - The network type. This should be one of the keys in `NETWORK_ADDRESSES`.
     * @param url - The RPC URL of the network. If not provided, the method will use the URL from `NETWORK_ADDRESSES`.
     *
     * @returns The current instance of the `Ethereum` class.
     */
    selectNetwork(network: EthNetworkType, url?: string): Ethereum;
    private getTransaction;
    /**
     * Initializes the network.
     *
     * This method sets the RPC URL, contract addresses, and initializes the Web3 instance and contracts.
     *
     * @param network - The network type. This should be one of the keys in `NETWORK_ADDRESSES`.
     * @param url - The RPC URL of the network. If not provided, the method will use the URL from `NETWORK_ADDRESSES`.
     *
     * @throws Will throw an error if the provided network is not supported (i.e., not a key in `NETWORK_ADDRESSES`).
     */
    private initializeNetwork;
    /**
     * Converts a status code into a human-readable status.
     *
     * @param code - The status code to convert. '0' means 'unknown', '1' means 'pending', any other value means 'deposited'.
     *
     * @returns The human-readable status corresponding to the given code.
     */
    getStatusFromCode(code: ValidatorStatus): string;
    /**
     * Converts the given amount from Wei to Ether.
     *
     * @param amount - The amount in Wei to convert to Ether.
     *
     * @returns The converted amount in Ether as a BigNumber.
     */
    private fromWeiToEther;
    /**
     * Calculates the gas limit by adding a predefined GAS_RESERVE to the given gas consumption.
     *
     * @param gasConsumption - The amount of gas consumed.
     *
     * @returns The calculated gas limit as a number.
     */
    private calculateGasLimit;
}

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

declare const ETH_NETWORK_ADDRESSES: EthNetworkAddressesMap;
declare const ETH_GAS_RESERVE: BigNumber;
declare const UINT16_MAX: number;
declare const ETH_MIN_AMOUNT: BigNumber;
declare const MULTICALL_CONTRACT_ADDRESS = "0xca11bde05977b3631167028862be2a173976ca11";

declare const ABI_CONTRACT_APPROVE: readonly [{
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "name";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "string";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "approve";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "totalSupply";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly name: "from";
        readonly type: "address";
    }, {
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "transferFrom";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "decimals";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint8";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly name: "addedValue";
        readonly type: "uint256";
    }];
    readonly name: "increaseAllowance";
    readonly outputs: readonly [{
        readonly name: "success";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "unpause";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "isPauser";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "paused";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "renouncePauser";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly name: "owner";
        readonly type: "address";
    }];
    readonly name: "balanceOf";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "addPauser";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "pause";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "symbol";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "string";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly name: "subtractedValue";
        readonly type: "uint256";
    }];
    readonly name: "decreaseAllowance";
    readonly outputs: readonly [{
        readonly name: "success";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "transfer";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly name: "owner";
        readonly type: "address";
    }, {
        readonly name: "spender";
        readonly type: "address";
    }];
    readonly name: "allowance";
    readonly outputs: readonly [{
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly inputs: readonly [{
        readonly name: "name";
        readonly type: "string";
    }, {
        readonly name: "symbol";
        readonly type: "string";
    }, {
        readonly name: "decimals";
        readonly type: "uint8";
    }, {
        readonly name: "totalSupply";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "constructor";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "Paused";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: false;
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "Unpaused";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "PauserAdded";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "account";
        readonly type: "address";
    }];
    readonly name: "PauserRemoved";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "from";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "Transfer";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly name: "owner";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "Approval";
    readonly type: "event";
}];
declare const ABI_CONTRACT_STAKING: readonly [{
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "currentEpoch";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}];
declare const ABI_CONTRACT_BUY: readonly [{
    readonly inputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "constructor";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "owner";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "Approval";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "previousOwner";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "OwnershipTransferred";
    readonly type: "event";
}, {
    readonly anonymous: false;
    readonly inputs: readonly [{
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "from";
        readonly type: "address";
    }, {
        readonly indexed: true;
        readonly internalType: "address";
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly indexed: false;
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "Transfer";
    readonly type: "event";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "bool";
        readonly name: "pol";
        readonly type: "bool";
    }];
    readonly name: "_restake";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "claimAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "maximumSharesToBurn";
        readonly type: "uint256";
    }, {
        readonly internalType: "bool";
        readonly name: "pol";
        readonly type: "bool";
    }];
    readonly name: "_sellVoucher_new";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "activeAmount";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "owner";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "spender";
        readonly type: "address";
    }];
    readonly name: "allowance";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "approve";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "owner";
        readonly type: "address";
    }];
    readonly name: "balanceOf";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "_amount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "_minSharesToMint";
        readonly type: "uint256";
    }];
    readonly name: "buyVoucher";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "amountToDeposit";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "_amount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "_minSharesToMint";
        readonly type: "uint256";
    }];
    readonly name: "buyVoucherPOL";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "amountToDeposit";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "_amount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "_minSharesToMint";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "deadline";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint8";
        readonly name: "v";
        readonly type: "uint8";
    }, {
        readonly internalType: "bytes32";
        readonly name: "r";
        readonly type: "bytes32";
    }, {
        readonly internalType: "bytes32";
        readonly name: "s";
        readonly type: "bytes32";
    }];
    readonly name: "buyVoucherWithPermit";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "amountToDeposit";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "commissionRate_deprecated";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "subtractedValue";
        readonly type: "uint256";
    }];
    readonly name: "decreaseAllowance";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "delegation";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "token";
        readonly type: "address";
    }, {
        readonly internalType: "address payable";
        readonly name: "destination";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly name: "drain";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "eventsHub";
    readonly outputs: readonly [{
        readonly internalType: "contract EventsHub";
        readonly name: "";
        readonly type: "address";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "exchangeRate";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "user";
        readonly type: "address";
    }];
    readonly name: "getLiquidRewards";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "getRewardPerShare";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "user";
        readonly type: "address";
    }];
    readonly name: "getTotalStake";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "spender";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "addedValue";
        readonly type: "uint256";
    }];
    readonly name: "increaseAllowance";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly name: "initalRewardPerShare";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "_validatorId";
        readonly type: "uint256";
    }, {
        readonly internalType: "address";
        readonly name: "_stakingLogger";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "_stakeManager";
        readonly type: "address";
    }];
    readonly name: "initialize";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "isOwner";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "lastCommissionUpdate_deprecated";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "lock";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "locked";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "user";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly name: "migrateIn";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "user";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "amount";
        readonly type: "uint256";
    }];
    readonly name: "migrateOut";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "minAmount";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "owner";
    readonly outputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "polToken";
    readonly outputs: readonly [{
        readonly internalType: "contract IERC20Permit";
        readonly name: "";
        readonly type: "address";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "renounceOwnership";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "restake";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "restakePOL";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "rewardPerShare";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "claimAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "maximumSharesToBurn";
        readonly type: "uint256";
    }];
    readonly name: "sellVoucher";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "claimAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "maximumSharesToBurn";
        readonly type: "uint256";
    }];
    readonly name: "sellVoucherPOL";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "claimAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "maximumSharesToBurn";
        readonly type: "uint256";
    }];
    readonly name: "sellVoucher_new";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "claimAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "maximumSharesToBurn";
        readonly type: "uint256";
    }];
    readonly name: "sellVoucher_newPOL";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "validatorStake";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "delegatedAmount";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "totalAmountToSlash";
        readonly type: "uint256";
    }];
    readonly name: "slash";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "stakeManager";
    readonly outputs: readonly [{
        readonly internalType: "contract IStakeManager";
        readonly name: "";
        readonly type: "address";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "stakingLogger";
    readonly outputs: readonly [{
        readonly internalType: "contract StakingInfo";
        readonly name: "";
        readonly type: "address";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "totalStake_deprecated";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "totalSupply";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "transfer";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "from";
        readonly type: "address";
    }, {
        readonly internalType: "address";
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "transferFrom";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "newOwner";
        readonly type: "address";
    }];
    readonly name: "transferOwnership";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "to";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "value";
        readonly type: "uint256";
    }];
    readonly name: "transferPOL";
    readonly outputs: readonly [{
        readonly internalType: "bool";
        readonly name: "";
        readonly type: "bool";
    }];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly name: "unbondNonces";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }];
    readonly name: "unbonds";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "shares";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "withdrawEpoch";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [{
        readonly internalType: "address";
        readonly name: "";
        readonly type: "address";
    }, {
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly name: "unbonds_new";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "shares";
        readonly type: "uint256";
    }, {
        readonly internalType: "uint256";
        readonly name: "withdrawEpoch";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "unlock";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "unstakeClaimTokens";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "unstakeClaimTokensPOL";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "unbondNonce";
        readonly type: "uint256";
    }];
    readonly name: "unstakeClaimTokens_new";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "unbondNonce";
        readonly type: "uint256";
    }];
    readonly name: "unstakeClaimTokens_newPOL";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [{
        readonly internalType: "bool";
        readonly name: "_delegation";
        readonly type: "bool";
    }];
    readonly name: "updateDelegation";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "validatorId";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "validatorRewards_deprecated";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "withdrawExchangeRate";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "withdrawPool";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "withdrawRewards";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: false;
    readonly inputs: readonly [];
    readonly name: "withdrawRewardsPOL";
    readonly outputs: readonly [];
    readonly payable: false;
    readonly stateMutability: "nonpayable";
    readonly type: "function";
}, {
    readonly constant: true;
    readonly inputs: readonly [];
    readonly name: "withdrawShares";
    readonly outputs: readonly [{
        readonly internalType: "uint256";
        readonly name: "";
        readonly type: "uint256";
    }];
    readonly payable: false;
    readonly stateMutability: "view";
    readonly type: "function";
}];

type HexString = `0x${string}`;
type TransactionRequest = {
    from: HexString;
    to: HexString;
    gasLimit: bigint;
    data: HexString;
};
type UnbondInfo = {
    amount: BigNumber;
    withdrawEpoch: bigint;
    unbondNonces: bigint;
};

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

declare const MIN_AMOUNT: BigNumber;
declare const WITHDRAW_EPOCH_DELAY = 80n;

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */
declare function setApiUrl(url: string): void;
declare const checkToken: (token: string) => Promise<boolean>;
interface SetStatsParams {
    token: string;
    action: string;
    amount: number;
    address: string;
    chain: string;
}
declare const setStats: (args_0: SetStatsParams) => Promise<undefined>;
declare const createToken: (name: string, type: string) => Promise<any>;
declare const getAssets: (chain: string) => Promise<any>;
declare const getEthValidatorsQueueStats: () => Promise<Record<"validator_activation_time" | "validator_adding_delay" | "validator_exit_time" | "validator_withdraw_time", number>>;

/**
 * Copyright (c) 2025, Everstake.
 * Licensed under the BSD-3-Clause License. See LICENSE file for details.
 */

interface ContractProps<T extends Abi> {
    abi: T;
    address: HexString;
}
/**
 * The `Polygon` class extends the `Blockchain` class and provides methods for interacting with the Polygon network.
 *
 * It handles initialization of Web3 and multiple contract instances, including approval contracts,
 * buy contracts, and staking contracts. It also manages error messages related to contract operations.
 *
 * @property {Web3} web3 - The Web3 instance used for interacting with the Polygon network.
 * @property {Contract} contract_approve - The contract instance for token approval.
 * @property {Contract} contract_approve_pol - The contract instance for POL token approval.
 * @property {Contract} contract_buy - The contract instance for token purchase logic.
 * @property {Contract} contract_staking - The contract instance for staking logic.
 * @property ERROR_MESSAGES - The standardized error messages for the Polygon class.
 * @property ORIGINAL_ERROR_MESSAGES - The raw/original error messages for internal mapping or debugging.
 *
 * @constructor
 * Creates an instance of the `Polygon` class.
 * @param {string} [rpc=RPC_URL] - The RPC URL of the Polygon network.
 */
declare class Polygon extends Blockchain {
    contract_approve: ContractProps<typeof ABI_CONTRACT_APPROVE>;
    contract_approve_pol: ContractProps<typeof ABI_CONTRACT_APPROVE>;
    contract_buy: ContractProps<typeof ABI_CONTRACT_BUY>;
    contract_staking: ContractProps<typeof ABI_CONTRACT_STAKING>;
    private client;
    protected ERROR_MESSAGES: {
        TRANSACTION_LOADING_ERR: string;
        APPROVE_ERR: string;
        DELEGATE_ERR: string;
        GET_ALLOWANCE_ERR: string;
        UNDELEGATE_ERR: string;
        GET_TOTAL_DELEGATE_ERR: string;
        GET_UNBOND_ERR: string;
        GET_UNBOND_NONCE_ERR: string;
        GET_REWARD_ERR: string;
        ALLOWANCE_ERR: string;
        DELEGATED_BALANCE_ERR: string;
    };
    protected ORIGINAL_ERROR_MESSAGES: {};
    constructor(rpcOrTransport?: string | HttpTransport | FallbackTransport);
    /**
     * Checks if a transaction is still pending or has been confirmed.
     *
     * @param {HexString} hash - The transaction hash to check.
     * @returns {Promise<{ result: boolean }>}
     *
     * @throws {Error} Throws an error with code `'TRANSACTION_LOADING_ERR'` if an issue occurs while fetching the transaction status.
     *
     */
    isTransactionLoading(hash: HexString): Promise<{
        result: boolean;
    }>;
    /** approve returns TX loading status
     * @param {HexString} address - user's address
     * @param {string} amount - amount for approve
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @returns {Promise<Object>} Promise object the result of boolean type
     */
    approve(address: HexString, amount: string, isPOL?: boolean): Promise<TransactionRequest>;
    /** delegate makes unsigned delegation TX
     * @param {string} token - auth token
     * @param {HexString} address - user's address
     * @param {string} amount - amount for approve
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @returns {Promise<Object>} Promise object represents the unsigned TX object
     */
    delegate(token: string, address: HexString, amount: string, isPOL?: boolean): Promise<TransactionRequest>;
    /** undelegate makes unsigned undelegate TX
     * @param {string} token - auth token
     * @param {HexString} address - user's address
     * @param {string} amount - amount for approve
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @returns {Promise<Object>} Promise object represents the unsigned TX object
     */
    undelegate(token: string, address: HexString, amount: string, isPOL?: boolean): Promise<TransactionRequest>;
    /** claimUndelegate makes unsigned claim undelegate TX
     * @param {HexString} address - user's address
     * @param {bigint} unbondNonce - unbound nonce
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @returns {Promise<Object>} Promise object represents the unsigned TX object
     */
    claimUndelegate(address: HexString, unbondNonce?: bigint, isPOL?: boolean): Promise<TransactionRequest>;
    /** reward makes unsigned claim reward TX
     * @param {string} address - user's address
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @returns {Promise<Object>} Promise object represents the unsigned TX object
     */
    reward(address: HexString, isPOL?: boolean): Promise<TransactionRequest>;
    /** restake makes unsigned restake reward TX
     * @param {string} address - user's address
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @returns {Promise<Object>} Promise object represents the unsigned TX object
     */
    restake(address: HexString, isPOL?: boolean): Promise<TransactionRequest>;
    /** getReward returns reward number
     * @param {HexString} address - user's address
     * @returns {Promise<BigNumber>} Promise with number of the reward
     */
    getReward(address: HexString): Promise<BigNumber>;
    /** getAllowance returns allowed number for spender
     * @param {string} owner - tokens owner
     * @param {boolean} isPOL - is POL token (false - old MATIC)
     * @param {string} spender - contract spender
     * @returns {Promise<bigint>} Promise allowed bigint for spender
     */
    getAllowance(owner: HexString, isPOL?: boolean, spender?: HexString): Promise<bigint>;
    /** getTotalDelegate returns total delegated number
     * @param {string} address - user's address
     * @returns {Promise<BigNumber>} Promise with BigNumber of the delegation
     */
    getTotalDelegate(address: HexString): Promise<BigNumber>;
    /** getUnbond returns unbound data
     * @param {HexString} address - user's address
     * @param {bigint} unbondNonce - unbound nonce
     * @returns {Promise<Object>} Promise Object with unbound data
     */
    getUnbond(address: HexString, unbondNonce?: bigint): Promise<UnbondInfo>;
    /** getUnbondNonces returns unbound nonce
     * @param {HexString} address - user's address
     * @returns {Promise<bigint>} Promise with unbound nonce bigint
     */
    getUnbondNonces(address: HexString): Promise<bigint>;
    /** getCurrentEpoch returns current epoch
     * @returns {Promise<bigint>} Promise with current epoch bigint
     */
    getCurrentEpoch(): Promise<bigint>;
    private getTransaction;
}

export { type AggregatedBalances, type Transaction as BerachainTransaction, Berrachain, Blockchain, type BoostedQueue, ETH_GAS_RESERVE, ETH_MIN_AMOUNT, ETH_NETWORK_ADDRESSES, type EthNetworkAddresses, type EthNetworkAddressesMap, type EthNetworkType, type EthTransaction, Ethereum, type HexString$1 as HexString, MULTICALL_CONTRACT_ADDRESS, type Network, MIN_AMOUNT as POLYGON_MIN_AMOUNT, WITHDRAW_EPOCH_DELAY as POLYGON_WITHDRAW_EPOCH_DELAY, Polygon, type TransactionRequest as PolygonTransactionRequest, UINT16_MAX, ValidatorStatus, WalletSDKError, checkToken, createToken, getAssets, getEthValidatorsQueueStats, setApiUrl, setStats };
