import { Algodv2, Indexer } from "algosdk";
import { RewardsProgram } from "./rewardsProgram";
import { Manager } from "./manager";
import { Market } from "./market";
import { Asset } from "./asset";
export declare class StakingContract {
    algodClient: Algodv2;
    historicalIndexerClient: Indexer;
    manager: Manager;
    market: Market;
    /**
     * This is the constructor for the StakingContract class.
     *
     * **Note, do not call this to create a new staking contract**. Instead call
     * the static method init as there are asynchronous set up steps in
     * creating an staking contract and a constructor can only return an instance of
     * the class and not a promise.
     *
     * #### Example
     * ```typescript
     * //Correct way to instantiate new staking contract
     * const newStakingContract = await StakingContract.init(algodClient, historicalIndexerClient, stakingContractInfo)
     *
     * //Incorrect way to instantiate new staking contract
     * const newStakingContract = new StakingContract(algodClient, historicalIndexerClient)
     * ```
     * @param algodClient - algod client
     * @param historicalIndexerClient - historical indexer client
     */
    constructor(algodClient: Algodv2, historicalIndexerClient: Indexer);
    /**
     * This is the function that should be called when creating a new staking contract.
     * You pass everything you would to the constructor with an additional staking contract info
     * dictionary, but to this function instead and this returns the new and created staking contract.
     *
     * #### Example
     * ```typescript
     * //Correct way to instantiate new staking contract
     * const newStakingContract = await StakingContract.init(algodClient, historicalIndexerClient, stakingContractInfo)
     *
     * //Incorrect way to instantiate new staking contract
     * const newStakingContract = new StakingContract(algodClient, historicalIndexerClient)
     * ```
     * @param algodClient - algod client
     * @param historicalIndexerClient - historical indexer client
     * @param stakingContractInfo - dictionary of information on staking contract
     */
    static init(algodClient: Algodv2, historicalIndexerClient: Indexer, stakingContractInfo: {
        [key: string]: number;
    }): Promise<StakingContract>;
    /**
     * Method to fetch most recent staking contract global state
     */
    updateGlobalState(): Promise<void>;
    /**
     * Return staking contract manager
     *
     * @returns manager
     */
    getManager(): Manager;
    /**
     * Return staking contract market
     *
     * @returns market
     */
    getMarket(): Market;
    /**
     * Return asset object for this market
     *
     * @returns asset
     */
    getAsset(): Asset;
    /**
     * Return manager app id
     *
     * @returns manager app id
     */
    getManagerAppId(): number;
    /**
     * Return manager address
     *
     * @returns manager address
     */
    getManagerAddress(): string;
    /**
     * Return the market app id
     *
     * @returns market app id
     */
    getMarketAppId(): number;
    /**
     * Return the market address
     *
     * @returns market address
     */
    getMarketAddress(): string;
    /**
     * Return oracle app id
     *
     * @returns oracle app id
     */
    getOracleAppId(): number;
    /**
     * Return staked amount
     *
     * @returns staked
     */
    getStaked(): number;
    /**
     * Return rewards program
     *
     * @returns rewards program
     */
    getRewardsProgram(): RewardsProgram;
    /**
     * Return the staking contract storage address for given address or null if it does not exist
     *
     * @param address - address to get info for
     * @returns storage account address for user
     */
    getStorageAddress(address: string): Promise<string>;
    /**
     * Return the staking contract local state for address
     *
     * @param address - address to get info for
     * @returns staking contract local state for address
     */
    getUserState(address: string): Promise<{
        [key: string]: any;
    }>;
    /**
     * Return the staking contract local state for storage address
     *
     * @param storageAddress -storage address to get info for
     * @returns staking contract local state for address
     */
    getStorageState(storageAddress: string): Promise<{
        [key: string]: any;
    }>;
}
