/**
 * This file is part of Swapable shared under AGPL-3.0
 * Copyright (C) 2021 Using Blockchain Ltd, Reg No.: 12658136, United Kingdom
 *
 * @package     Swapable
 * @author      Grégory Saive for Using Blockchain Ltd <greg@ubc.digital>
 * @license     AGPL-3.0
 */
import { PublicAccount, Transaction } from 'symbol-sdk';
import { AllowanceResult, CommandOption } from '../../index';
import { Executable } from './Executable';
/**
 * @class Swapable.RemoveLiquidity
 * @package Swapable
 * @subpackage Commands
 * @since v1.0.0
 * @description Class that describes a command for removing assets
 *              in automated liquidity pools (i.e. "withdrawal").
 * @summary
 * This automated pool command accepts the following arguments:
 *
 * | Argument | Description | Example |
 * | --- | --- | --- |
 * | provider | Liquidity provider | `new PublicAccount(...)` |
 * | input_x | Amount and asset identifier of `x` (first in pair) | `new AssetAmount(...)` |
 * | input_y | Amount and asset identifier of `y` (second in pair) | `new AssetAmount(...)` |
 *
 * The execution of this command results in the creation of
 * the following list of transactions with their respective
 * *signer* and a description:
 *
 * | Sequence | Type | Signer | Description |
 * | --- | --- | --- | --- |
 * | 01 | TransferTransaction | Provider Account | Transfers a proportional amount of automated pool shares to the **target** account, where they will be burned. |
 * | 02 | MosaicSupplyChangeTransaction | Target Account | Removes the amount of automated pool shares that is proportional to the amount of liquidity removed from the pool. |
 * | 03 | TransferTransaction | Target Account | Transfers the **removed liquidity** of `x` and `y` to the provider account. |
 * | 04 | TransferTransaction | Provider Account | Adds an execution proof message sent to the **target** account. |
 *
 */
export declare class RemoveLiquidity extends Executable {
    /**
     * @access public
     * @description The list of **required** arguments to execute
     *              *this* automated pool command.
     */
    arguments: string[];
    /**
     * Verifies **allowance** of \a actor to execute a command
     * with arguments \a argv. This method returns true if all
     * required arguments are present.
     *
     * This method asserts the presence of mandatory arguments.
     *
     * @access public
     * @param   {PublicAccount}           actor   The actor is whom executes the command.
     * @param   {Array<CommandOption>}    argv    The command options (arguments).
     * @return  {AllowanceResult}         Returns whether an actor is authorized to execute this command.
     * @throws  {FailureMissingArgument}  On missing mandatory argument(s).
     **/
    canExecute(actor: PublicAccount, argv?: CommandOption[]): AllowanceResult;
    /**
     * This method returns the automated pool command name,
     * e.g. "CreatePool" or "AddLiquidity", etc.
     *
     * @access public
     * @return {string}
     **/
    get name(): string;
    /**
     * This method MUST return a unique automated pool command
     * descriptor which includes:
     *
     * - the open standard descriptor (e.g.: "Swapable") ;
     * - the open standard *revision* (e.g.: 1) ;
     * - the kebab-case command name (e.g.: "create-pool") ;
     * - and the automated pool shares asset identifier.
     *
     * Items are joined with the `:` operator and attached to a
     * so-called execution proof transaction.
     *
     * @access public
     * @return {string}
     **/
    get descriptor(): string;
    /**
     * This method returns a list of unsigned transactions in a
     * sequencial order of execution. The resulting transaction
     * array is later wrapped inside a digital contract that is
     * executed atomically such that either all transactions do
     * succeed or all transactions are cancelled.
     *
     * :warning: This method creates at least one- or more than
     * one - network-wide **account restriction**. Restrictions
     * can potentially lock you out of your account, please use
     * this only with caution and if you understand the risks.
     *
     * @see {execute()}
     * @access public
     * @return  {Transaction[]}   Given the execution of a command, returns a list of unsigned transactions.
     **/
    protected get transactions(): Transaction[];
}
