import { Algodv2, Transaction } from "algosdk";
import AlgofiUser from "../../algofiUser";
import { StakingQuote } from "../../staking/v2/staking";
import GovernanceClient from "./governanceClient";
export default class VotingEscrow {
    governanceClient: GovernanceClient;
    algod: Algodv2;
    appId: number;
    totalLocked: number;
    totalVebank: number;
    assetId: number;
    votingEscrowMaxTimeLockSeconds: number;
    votingEscrowMinTimeLockSeconds: number;
    /**
     * The constructor for the voting escrow object.
     *
     * @param governanceClient - a governance client
     */
    constructor(governanceClient: GovernanceClient);
    /**
     * Function which will update the data on the voting escrow object to match
     * that of the global state of the voting escrow contract.
     */
    loadState(): Promise<void>;
    getLockQuote(user: AlgofiUser, lockAmount: number, lockEnd: number): [number, {
        [key: number]: StakingQuote;
    }];
    getAirdropTxns(user: AlgofiUser): Promise<Transaction[]>;
    getLockedAirdropTxns(user: AlgofiUser): Promise<Transaction[]>;
    /**
     * Constructs a series of transactions to update a target user's vebank.
     *
     * @param userCalling - user who is calling the udpate transaction
     * @param userUpdating - user whose vebank is actually being updated
     * @returns a series of transactions to update a target user's vebank.
     */
    getUpdateVeBankDataTxns(userCalling: AlgofiUser, userUpdating: AlgofiUser): Promise<Transaction[]>;
    /**
     * Constructs a series of transactions that lock a user's BANK.
     *
     * @param user - user who is locking
     * @param amount - amount they are locking
     * @param durationSeconds - amount of time they are locking for
     * @returns a series of transactions that lock a user's BANK.
     */
    getLockTxns(user: AlgofiUser, amount: number, durationSeconds: number): Promise<Transaction[]>;
    /**
     * Constructs a series of transactions that extend a user's lock.
     *
     * @param user - user who is locking
     * @param durationSeconds - amount of time they are extending for
     * @returns a series of transactions that extend a user's lock.
     */
    getExtendLockTxns(user: AlgofiUser, durationSeconds: number): Promise<Transaction[]>;
    /**
     * Constructs a series of transactions that increase a user's lock amount.
     *
     * @param user - user who is locking
     * @param amount - amount they are increasing their lock for
     * @returns a series of transactions that increase a user's lock amount.
     */
    getIncreaseLockAmountTxns(user: AlgofiUser, amount: number): Promise<Transaction[]>;
    getClaimTxns(user: AlgofiUser): Promise<Transaction[]>;
}
