import Web3 from 'web3';
import { QVault } from '../../web3-contracts/QVault';
import { TransactionReceipt } from 'web3-eth';
import { VotingLockInfo, QNonPayableTx, QPayableTx, StakeDelegationInfo, TimeLockEntry, QVaultBalanceDetails } from '../../types';
import BN from 'bn.js';
import { SystemContractInstance } from '../SystemContractInstance';
import { CompoundRateKeeperInstance } from '../common/CompoundRateKeeperInstance';
import { VotingWeightProxyInstance } from '../governance/VotingWeightProxyInstance';
/**
 * QVault instance to interact with QVault contract.
 * See [onchain documentation](@system-contracts-repo/@network/QVault/) for more details.
 * An instance of this class for a deployed network can be obtained via {@link ContractRegistryInstance.qVault}
 */
export declare class QVaultInstance extends SystemContractInstance<QVault> {
    static readonly registryKey = "tokeneconomics.qVault";
    static readonly abi = "QVault.json";
    private c;
    /**
     * VotingWeightProxy instance. Used by local methods.
     */
    votingWeightProxy: VotingWeightProxyInstance;
    private timeLockHelper;
    private erc20;
    constructor(web3: Web3, address: string);
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#aggregatednormalizedbalance)
     */
    aggregatedNormalizedBalance(): Promise<string>;
    /** @deprecated use getCompoundRateKeeper */
    compoundRateKeeper(): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#getcompoundratekeeper)
     */
    getCompoundRateKeeper(): Promise<CompoundRateKeeperInstance>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#deposit)
     */
    deposit(txOptions?: QPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#lock)
     */
    lock(amount: string, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#announceunlock)
     */
    announceUnlock(amount: string, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#unlock)
     */
    unlock(amount: string, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#withdraw)
     */
    withdraw(amount: string, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * Withdraw all available amount.
     * Use {@link QVaultInstance.getReadyToWithdrawBalance}
     * @param user account.
     * @returns Transaction receipt.
     */
    withdrawEntireBalance(user: string): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#updatecompoundrate)
     */
    updateCompoundRate(txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /** @deprecated compound rate has to be updated via ValidationRewardPoolsInstance */
    updateValidatorsCompoundRate(_validator: string, _txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#delegatestake)
     */
    delegateStake(delegatedTo: string[], stakes: string[], txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#name)
     */
    name(): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#symbol)
     */
    symbol(): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#decimals)
     */
    decimals(): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#totalsupply)
     */
    totalSupply(): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#balanceof)
     */
    balanceOf(userAddress: string): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#transfer)
     */
    transfer(receiver: string, amount: number | string | BN, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#approve)
     */
    approve(spender: string, amount: number | string | BN, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#transferfrom)
     */
    transferFrom(owner: string, receiver: string, amount: number | string | BN, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#allowance)
     */
    allowance(tokenOwner: string, spender: string): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#increaseallowance)
     */
    increaseAllowance(spender: string, addedValue: number | string | BN, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#decreaseallowance)
     */
    decreaseAllowance(spender: string, subtractedValue: number | string | BN, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#transferandcall)
     */
    transferAndCall(to: string, value: number | string | BN, data: string | number[], txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#withdrawto)
     */
    withdrawTo(recipient: string, amount: number | string | BN, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#depositto)
     */
    depositTo(recipient: string, txOptions?: QPayableTx): Promise<TransactionReceipt>;
    /**
     * Token amount that can be withdrawn at current moment.
     * This method takes into account all locks of QVault
     * @param user account
     * @returns Withdrawable amount
     */
    getReadyToWithdrawBalance(user: string): Promise<string>;
    /**
     * Calculate total delegation stake for chosen account.
     * @param user account.
     * @returns total delegated stake.
     */
    getTotalDelegatedStake(user: string): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#getdelegationslist)
     */
    getDelegationsList(user: string): Promise<StakeDelegationInfo[]>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#getnormalizedbalance)
     */
    getNormalizedBalance(userAddress: string): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#claimstakedelegatorreward)
     */
    claimStakeDelegatorReward(txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#depositfrompool)
     */
    depositFromPool(txOptions?: QPayableTx): Promise<TransactionReceipt>;
    /** @deprecated user balance has to be received via balanceOf */
    getUserBalance(user: string): Promise<string>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#getbalancedetails)
     */
    getBalanceDetails(user: string): Promise<QVaultBalanceDetails>;
    /**
     * [External documentation](@system-contracts-repo/@network/QVault/#getlockinfo)
     */
    getLockInfo(user: string): Promise<VotingLockInfo>;
    /**
     * Calculate available to delegate amount
     * @param user account
     * @returns delegatable amount
     */
    getDelegatableAmount(user: string): Promise<string>;
    /**
     * Calculate available to lock amount
     * @param user account
     * @returns lockable amount
     */
    getLockableAmount(user: string): Promise<string>;
    /**
     * {@link TimeLockHelperInstance.depositOnBehalfOf | Internal documentation}
     */
    depositOnBehalfOf(account: string, start: number | string | BN, end: number | string | BN, txOptions?: QPayableTx): Promise<TransactionReceipt>;
    /**
     * {@link TimeLockHelperInstance.getTimeLocks | Internal documentation}
     */
    getTimeLocks(account: string): Promise<TimeLockEntry[]>;
    /**
     * {@link TimeLockHelperInstance.getMinimumBalance | Internal documentation}
     */
    getMinimumBalance(account: string, timestamp: number | BN | string): Promise<string>;
    /**
     * {@link TimeLockHelperInstance.purgeTimeLocks | Internal documentation}
     */
    purgeTimeLocks(account: string, txOptions?: QNonPayableTx): Promise<TransactionReceipt>;
}
/** @deprecated use QVaultInstance instead */
export declare type PiggyBankInstance = QVaultInstance;
/** @deprecated use QVault instead */
export declare type PiggyBank = QVault;
