import { DelegationOptions, DelegationResults, IStakingWallet, StakeOptions, StakingPrebuildTransactionResult, StakingRequest, StakingSignedTransaction, StakingSignOptions, StakingTransaction, SwitchValidatorOptions, TransactionsReadyToSign, UnstakeOptions, EthUnstakeOptions, ClaimRewardsOptions, TronStakeOptions, TaoStakeOptions, TaoSwitchValidatorOptions, VetStakeOptions, StoryStakeOptions, XdcStakeOptions } from './iStakingWallet';
import { IWallet, PrebuildTransactionResult } from '../wallet';
import { ITssUtils } from '../utils';
export declare class StakingWallet implements IStakingWallet {
    private readonly bitgo;
    private tokenParentWallet?;
    private readonly isEthTss;
    wallet: IWallet;
    tssUtil: ITssUtils;
    constructor(wallet: IWallet, isEthTss: boolean);
    get walletId(): string;
    get coin(): string;
    /**
     * Stake coins
     * @param options - stake options
     * @return StakingRequest
     */
    stake(options: StakeOptions | TronStakeOptions | TaoStakeOptions | VetStakeOptions | StoryStakeOptions | XdcStakeOptions): Promise<StakingRequest>;
    /**
     * Unstake coins
     * @param options - unstake options
     * @return StakingRequest
     */
    unstake(options: UnstakeOptions | EthUnstakeOptions): Promise<StakingRequest>;
    /**
     * Submit a request to switch the validator used for a specific delegation
     * This will create a new delegation with the new validator address and mark the old delegation as inactive
     * @param options - switch validator options
     * @return StakingRequest
     */
    switchValidator(options: SwitchValidatorOptions | TaoSwitchValidatorOptions): Promise<StakingRequest>;
    /**
     * Submit a request to claim rewards for a specific delegation
     * @param options - claim rewards options
     * @return StakingRequest
     */
    claimRewards(options: ClaimRewardsOptions): Promise<StakingRequest>;
    /**
     * Cancel staking request
     * @param stakingRequestId - id of the staking request to cancel
     * @return StakingRequest
     */
    cancelStakingRequest(stakingRequestId: string): Promise<StakingRequest>;
    /**
     * Fetch delegations for a specific wallet
     * @param options - unstake options
     * @return StakingRequest
     */
    delegations(options: DelegationOptions): Promise<DelegationResults>;
    /**
     * Get a staking request by ID
     * @param stakingRequestId - id of the staking request to retrieve
     * @return StakingRequest
     */
    getStakingRequest(stakingRequestId: string): Promise<StakingRequest>;
    /**
     * Get transactions ready to sign
     * @param stakingRequestId
     * @return TransactionsReadyToSign
     */
    getTransactionsReadyToSign(stakingRequestId: string): Promise<TransactionsReadyToSign>;
    /**
     * Build the staking transaction
     * If TSS delete signature shares, else expand build params and then build
     * @param transaction - staking transaction to build
     */
    build(transaction: StakingTransaction): Promise<StakingPrebuildTransactionResult>;
    private extractWallet;
    private isBtcUndelegate;
    private isStx;
    private isTrxStaking;
    /**
     * Sign the staking transaction
     * @param signOptions
     * @param stakingPrebuildTransaction
     */
    sign(signOptions: StakingSignOptions, stakingPrebuildTransaction: StakingPrebuildTransactionResult): Promise<StakingSignedTransaction>;
    /**
     * Send the signed staking transaction if required. Send call is not required if api version is full
     * and this method will return the staking transaction from the incoming object.
     * @param signedTransaction
     */
    send(signedTransaction: StakingSignedTransaction): Promise<StakingTransaction>;
    /**
     * @Deprecated use buildAndSign
     * Build, sign and send the transaction.
     * @param signOptions
     * @param transaction
     */
    buildSignAndSend(signOptions: StakingSignOptions, transaction: StakingTransaction): Promise<StakingTransaction>;
    /**
     * Create prebuilt staking transaction.
     *
     * for transactions with tx request id (TSS transactions), we need to delete signature shares before creating prebuild transaction
     * we only need to get transaction build params if they exist to pre build
     *
     * @param transaction
     */
    prebuildSelfManagedStakingTransaction(transaction: StakingTransaction): Promise<PrebuildTransactionResult>;
    /**
     * Build and sign the transaction.
     * @param signOptions
     * @param transaction
     */
    buildAndSign(signOptions: StakingSignOptions, transaction: StakingTransaction): Promise<StakingSignedTransaction>;
    private expandBuildParams;
    private createStakingRequest;
    private stakingRequestsURL;
    private getDelegations;
    private stakingDelegationsURL;
    private stakingRequestUrl;
    private stakingTransactionURL;
    private getWalletForBuildingAndSigning;
    /**
     * Send API call is only required for TSS TxRequest api version lite or multi-sig transactions.
     * For Full api version, sign transaction moves the transaction to delivered state.
     * @returns true if send API call to staking service is required else false
     */
    private isSendCallRequired;
    private getDescriptorWallet;
    private validateBuiltStakingTransaction;
}
//# sourceMappingURL=stakingWallet.d.ts.map