import { CallOverrides, PopulatedTransaction } from "@ethersproject/contracts";
import { JsonRpcSigner, TransactionResponse } from "@ethersproject/providers";
import { ChainId } from "../chain";
import { ServiceInterface } from "../common";
import { Address, Balance, DepositOptions, Integer, Token, TokenAllowance, VaultDynamic, VaultMetadataOverrides, VaultStatic, VaultsUserSummary, VaultUserMetadata, WithdrawOptions } from "../types";
import { Position, Vault } from "../types";
export declare class VaultInterface<T extends ChainId> extends ServiceInterface<T> {
    private cachedFetcherGet;
    private cachedFetcherGetDynamic;
    private cachedFetcherTokens;
    /**
     * Get all yearn vaults.
     * @param addresses filter, if not provided all positions are returned
     * @param overrides
     * @returns
     */
    get(addresses?: Address[], overrides?: CallOverrides): Promise<Vault[]>;
    /**
     * Get static part of yearn vaults.
     * @param addresses filter, if not provided all positions are returned
     * @param overrides
     * @returns
     */
    getStatic(addresses?: Address[], overrides?: CallOverrides): Promise<VaultStatic[]>;
    /**
     * Get dynamic part of yearn vaults.
     * @param addresses filter, if not provided all positions are returned
     * @param overrides
     * @returns
     */
    getDynamic(addresses?: Address[], vaultMetadataOverrides?: VaultMetadataOverrides[], overrides?: CallOverrides): Promise<VaultDynamic[]>;
    /**
     * Get yearn vault positions for a particular address.
     * @param address
     * @param addresses filter, if not provided all positions are returned
     * @param overrides
     * @returns
     */
    positionsOf(address: Address, addresses?: Address[], overrides?: CallOverrides): Promise<Position[]>;
    /**
     * Get the Vaults User Summary for a particular address.
     * @param address
     * @returns
     */
    summaryOf(address: Address): Promise<VaultsUserSummary>;
    /**
     * Get the Vault User Metadata for a particular address.
     * @param address
     * @param addresses filter, if provided only those addresses' Vault User Metadata are returned
     * @returns
     */
    metadataOf(address: Address, addresses?: Address[]): Promise<VaultUserMetadata[]>;
    /**
     * Get all yearn vault's underlying token balances for a particular address.
     * @param address
     * @param overrides
     * @returns
     */
    balances(address: Address, overrides?: CallOverrides): Promise<Balance[]>;
    /**
     * Get all yearn vault's underlying tokens.
     * @param overrides
     * @returns
     */
    tokens(overrides?: CallOverrides): Promise<Token[]>;
    /**
     * Fetch the token amount that has been allowed to be used for deposits
     * @param accountAddress
     * @param vaultAddress
     * @param tokenAddress
     * @returns TokenAllowance
     */
    getDepositAllowance(accountAddress: Address, vaultAddress: Address, tokenAddress: Address): Promise<TokenAllowance>;
    /**
     * Fetch the token amount that has been allowed to be used for withdraw
     * @param accountAddress
     * @param vaultAddress
     * @param tokenAddress
     * @returns TokenAllowance
     */
    getWithdrawAllowance(accountAddress: Address, vaultAddress: Address, tokenAddress: Address): Promise<TokenAllowance>;
    /**
     * Approve the token amount to allow to be used for deposits
     * @param accountAddress
     * @param vaultAddress
     * @param tokenAddress
     * @param amount
     * @param overrides
     * @returns TransactionResponse
     */
    approveDeposit(accountAddress: Address, vaultAddress: Address, tokenAddress: Address, amount?: Integer, overrides?: CallOverrides): Promise<TransactionResponse>;
    /**
     * Approve the token amount to allow to be used for withdraw
     * @param accountAddress
     * @param vaultAddress
     * @param tokenAddress
     * @param amount
     * @param overrides
     * @returns TransactionResponse
     */
    approveWithdraw(accountAddress: Address, vaultAddress: Address, tokenAddress: Address, amount?: Integer, overrides?: CallOverrides): Promise<TransactionResponse>;
    private getDepositContractAddress;
    private getWithdrawContractAddress;
    isUnderlyingToken(vaultAddress: Address, tokenAddress: Address): Promise<boolean>;
    /**
     * Deposit into a yearn vault
     * @param vault
     * @param token
     * @param amount
     * @param account
     * @param overrides
     * @returns transaction
     */
    deposit(vault: Address, token: Address, amount: Integer, account: Address, options?: DepositOptions, overrides?: CallOverrides): Promise<TransactionResponse>;
    /**
     * Withdraw from a yearn vault.
     * @param vault
     * @param token
     * @param amount
     * @param account
     * @param overrides
     * @returns transaction
     */
    withdraw(vault: Address, token: Address, amount: Integer, account: Address, options?: WithdrawOptions, overrides?: CallOverrides): Promise<TransactionResponse>;
    private zapIn;
    private executeZapperTransaction;
    private executeVaultContractTransaction;
    private fillTokenMetadataOverrides;
    private fillMetadataOverrides;
    private shouldUsePartnerService;
    private makeEmptyApy;
    populateDepositTransaction({ vault, amount, overrides, signer, }: {
        vault: Address;
        amount: Integer;
        overrides: CallOverrides;
        signer: JsonRpcSigner;
    }): Promise<PopulatedTransaction | undefined>;
    private isZappingIntoPickleJar;
}
