import { BigNumber as BN, Contract, providers, Wallet, utils, BigNumberish } from "ethers";
import { GasConfiguration } from "../types";
export declare class Staker {
    /**************
      PROPERTIES
      **************/
    chainID: number;
    walletOrProviderOrSigner: Wallet | providers.JsonRpcSigner | providers.Provider;
    stakingRewards: Contract;
    xsLocker: Contract;
    /**************
      CONSTRUCTOR
      **************/
    /**
     * @param chainID The chainID for the Staker object, 1 for Ethereum Mainnet.
     * @param walletOrProviderOrSigner walletOrProviderOrSigner object - a Wallet (https://docs.ethers.io/v5/api/signer/#Wallet) or a Provider (https://docs.ethers.io/v5/api/providers/) or Signer (https://docs.ethers.io/v5/api/signer/)
     */
    constructor(chainID: number, walletOrProviderOrSigner?: Wallet | providers.JsonRpcSigner | providers.Provider);
    /**********************************
      xsLocker Mutator Functions
      **********************************/
    /**
     * Deposit SOLACE to create a new lock, assumes SOLACE already approved
     * @param recipient The account that will receive the lock.
     * @param amount The amount of [**SOLACE**](./../SOLACE) to deposit.
     * @param end The timestamp the lock will unlock, use end = 0 to initialize as unlocked
     */
    createLock(recipient: string, amount: BigNumberish, end: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * Deposit SOLACE to create a new lock, uses EIP-712 signature to perform approval in same transaction
     * @dev recipient = msg.sender
     * @param amount The amount of [**SOLACE**](./../SOLACE) to deposit.
     * @param end The timestamp the lock will unlock, use end = 0 to initialize as unlocked
     * @param deadline Time the transaction must go through before.
     * @param v secp256k1 signature
     * @param r secp256k1 signature
     * @param s secp256k1 signature
     */
    createLockSigned(amount: BigNumberish, end: BigNumberish, deadline: BigNumberish, v: utils.BytesLike, r: utils.BytesLike, s: utils.BytesLike, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Deposit SOLACE to increase the value of an existing lock.
     * @dev SOLACE is transferred from msg.sender, assumes its already approved.
     * @param xsLockID The ID of the lock to update.
     * @param amount The amount of SOLACE to deposit.
     */
    increaseAmount(xsLockID: BigNumberish, amount: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Deposit SOLACE to increase the value of an existing lock.
     * @dev SOLACE is transferred from msg.sender, uses EIP-712 signature to perform approval in same transaction
     * @param xsLockID The ID of the lock to update.
     * @param amount The amount of SOLACE to deposit.
     * @param deadline Time the transaction must go through before.
     * @param v secp256k1 signature
     * @param r secp256k1 signature
     * @param s secp256k1 signature
     */
    increaseAmountSigned(xsLockID: BigNumberish, amount: BigNumberish, deadline: BigNumberish, v: utils.BytesLike, r: utils.BytesLike, s: utils.BytesLike, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Extend a lock's duration.
     * @dev Can only be called by the lock owner or approved.
     * @param xsLockID The ID of the lock to update.
     * @param end The new time for the lock to unlock.
     */
    extendLock(xsLockID: BigNumberish, end: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Withdraw from a lock in full.
     * @dev Can only be called by the lock owner or approved.
     * @dev Can only be called if unlocked.
     * @param xsLockID The ID of the lock to withdraw from.
     * @param recipient The user to receive the lock's SOLACE.
     */
    withdraw(xsLockID: BigNumberish, recipient: string, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Withdraw from a lock in part.
     * @dev Can only be called by the lock owner or approved.
     * @dev Can only be called if unlocked.
     * @param xsLockID The ID of the lock to withdraw from.
     * @param recipient The user to receive the lock's SOLACE.
     * @param amount The amount of SOLACE to withdraw.
     */
    withdrawInPart(xsLockID: BigNumberish, recipient: string, amount: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Withdraw from a multiple locks in full.
     * @dev Can only be called by the lock owner or approved.
     * @dev Can only be called if unlocked.
     * @param xsLockIDs The ID of the locks to withdraw from.
     * @param recipient The user to receive the lock's SOLACE.
     */
    withdrawMany(xsLockIDs: BigNumberish[], recipient: string, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**********************************
      xsLocker View Functions
      **********************************/
    /**
     * @notice Information about a lock.
     * @param xsLockID The ID of the lock to query.
     * @return lock_ Information about the lock.
     */
    locks(xsLockID: BigNumberish): Promise<any>;
    /**
     * @notice Returns whether a lock is locked.
     * @param xsLockID The ID of the lock to query.
     * @return locked True if the lock is locked, false if unlocked.
     */
    isLocked(xsLockID: BigNumberish): Promise<boolean>;
    /**
     * @notice Determines the time left until the lock unlocks.
     * @param xsLockID The ID of the lock to query.
     * @return time The time left in seconds, 0 if unlocked.
     */
    timeLeft(xsLockID: BigNumberish): Promise<BN>;
    /**
     * @notice Returns the amount of [**SOLACE**](./../SOLACE) the user has staked.
     * @param account The account to query.
     * @return balance The user's balance.
     */
    stakedBalance(account: string): Promise<BN>;
    /**********************************
      StakingRewards Mutator Functions
      **********************************/
    /**
     * @notice Updates and sends a lock's rewards.
     * @param xsLockID The ID of the lock to process rewards for.
     */
    harvestLock(xsLockID: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Updates and sends a lock's rewards.
     * @param xsLockID The ID of the lock to process rewards for.
     */
    harvestLocks(xsLockIDs: BigNumberish[], gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Withdraws a lock's rewards and deposits it back into the lock.
     * Can only be called by the owner of the lock.
     * @param xsLockID The ID of the lock to compound.
     */
    compoundLock(xsLockID: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Withdraws multiple lock's rewards and deposits it into lock.
     * Can only be called by the owner of the locks.
     * @param xsLockIDs The ID of the locks to compound.
     * @param increasedLockID The ID of the lock to deposit into.
     */
    compoundLocks(xsLockIDs: BigNumberish[], increasedLockID: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**********************************
      StakingRewardsV2 Mutator Functions
      **********************************/
    /**
     * @notice Updates and sends a lock's rewards.
     * @param xsLockID The ID of the lock to process rewards for.
     * @param price The `SOLACE` price in wei(usd).
     * @param priceDeadline Expiry timestamp for price quote.
     * @param signature The `SOLACE` price signature.
     */
    harvestLockForScp(xsLockID: BigNumberish, price: BigNumberish, priceDeadline: BigNumberish, signature: utils.BytesLike, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Updates and sends multiple lock's rewards.
     * @param xsLockIDs The IDs of the locks to process rewards for.
     * @param price The `SOLACE` price in wei(usd).
     * @param priceDeadline The `SOLACE` price in wei(usd).
     * @param signature The `SOLACE` price signature.
     */
    harvestLocksForScp(xsLockIDs: BigNumberish[], price: BigNumberish, priceDeadline: BigNumberish, signature: utils.BytesLike, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**
     * @notice Adds a one time boost to rewards.
     * Paid in [**SOLACE**](./../../SOLACE) by `msg.sender`.
     * @param amount Amount of rewards to distribute.
     */
    postRewards(amount: BigNumberish, gasConfig?: GasConfiguration): Promise<providers.TransactionResponse>;
    /**********************************
      StakingRewards View Functions
      **********************************/
    /**
     * @notice Information about each lock.
     * @param xsLockID The ID of the lock to query.
     * @return StakedLockInfo
     */
    stakedLockInfo(xsLockID: BigNumberish): Promise<any>;
    /**
     * @notice Calculates the accumulated balance of [**SOLACE**](./../SOLACE) for specified lock.
     * @param xsLockID The ID of the lock to query rewards for.
     * @return reward Total amount of withdrawable reward tokens.
     */
    pendingRewardsOfLock(xsLockID: BigNumberish): Promise<BN>;
}
