import { ContractTransactionResponse, Overrides, Signer } from "ethers";
import type { NodeSDKConfig } from "./nodeSDKTypes";
import WriteAccessHandler from "./writeAccessHandler";
/**
 * Functions to provide liquidity. This class requires a private key and executes
 * smart-contract interactions that require gas-payments.
 * @extends WriteAccessHandler
 */
export default class LiquidityProviderTool extends WriteAccessHandler {
    /**
     * Constructor
     * @param {NodeSDKConfig} config Configuration object, see PerpetualDataHandler.
     * readSDKConfig.
     * @example
     * import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
     * async function main() {
     *   console.log(LiquidityProviderTool);
     *   // load configuration for Polygon zkEVM (testnet)
     *   const config = PerpetualDataHandler.readSDKConfig("cardona");
     *   // LiquidityProviderTool (authentication required, PK is an environment variable with a private key)
     *   const pk: string = <string>process.env.PK;
     *   let lqudtProviderTool = new LiquidityProviderTool(config, pk);
     *   // Create a proxy instance to access the blockchain
     *   await lqudtProviderTool.createProxyInstance();
     * }
     * main();
     *
     * @param {string | Signer} signer Private key or ethers Signer of the account
     */
    constructor(config: NodeSDKConfig, signer: string | Signer);
    /**
     *  Add liquidity to the PnL participant fund. The address gets pool shares in return.
     * @param {string} poolSymbolName  Name of pool symbol (e.g. MATIC)
     * @param {number} amountCC  Amount in pool-collateral currency
     * @example
     * import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
     * async function main() {
     *   console.log(LiquidityProviderTool);
     *   // setup (authentication required, PK is an environment variable with a private key)
     *   const config = PerpetualDataHandler.readSDKConfig("cardona");
     *   const pk: string = <string>process.env.PK;
     *   let lqudtProviderTool = new LiquidityProviderTool(config, pk);
     *   await lqudtProviderTool.createProxyInstance();
     *   // add liquidity
     *   await lqudtProviderTool.setAllowance("MATIC");
     *   let respAddLiquidity = await lqudtProviderTool.addLiquidity("MATIC", 0.1);
     *   console.log(respAddLiquidity);
     * }
     * main();
     *
     * @return Transaction object
     */
    addLiquidity(poolSymbolName: string, amountCC: number, overrides?: Overrides): Promise<ContractTransactionResponse>;
    /**
     * Initiates a liquidity withdrawal from the pool
     * It triggers a time-delayed unlocking of the given number of pool shares.
     * The amount of pool shares to be unlocked is fixed by this call, but not their value in pool currency.
     * @param {string} poolSymbolName Name of pool symbol (e.g. MATIC).
     * @param {string} amountPoolShares Amount in pool-shares, removes everything if > available amount.
     * @example
     * import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
     * async function main() {
     *   console.log(LiquidityProviderTool);
     *   // setup (authentication required, PK is an environment variable with a private key)
     *   const config = PerpetualDataHandler.readSDKConfig("cardona");
     *   const pk: string = <string>process.env.PK;
     *   let lqudtProviderTool = new LiquidityProviderTool(config, pk);
     *   await lqudtProviderTool.createProxyInstance();
     *   // initiate withdrawal
     *   let respRemoveLiquidity = await lqudtProviderTool.initiateLiquidityWithdrawal("MATIC", 0.1);
     *   console.log(respRemoveLiquidity);
     * }
     * main();
     *
     * @return Transaction object.
     */
    initiateLiquidityWithdrawal(poolSymbolName: string, amountPoolShares: number, overrides?: Overrides): Promise<ContractTransactionResponse>;
    /**
     * Withdraws as much liquidity as there is available after a call to initiateLiquidityWithdrawal.
     * The address loses pool shares in return.
     * @param poolSymbolName
     * @example
     * import { LiquidityProviderTool, PerpetualDataHandler } from '@d8x/perpetuals-sdk';
     * async function main() {
     *   console.log(LiquidityProviderTool);
     *   // setup (authentication required, PK is an environment variable with a private key)
     *   const config = PerpetualDataHandler.readSDKConfig("cardona");
     *   const pk: string = <string>process.env.PK;
     *   let lqudtProviderTool = new LiquidityProviderTool(config, pk);
     *   await lqudtProviderTool.createProxyInstance();
     *   // remove liquidity
     *   let respRemoveLiquidity = await lqudtProviderTool.executeLiquidityWithdrawal("MATIC", 0.1);
     *   console.log(respRemoveLiquidity);
     * }
     * main();
     *
     * @returns Transaction object.
     */
    executeLiquidityWithdrawal(poolSymbolName: string, overrides?: Overrides): Promise<ContractTransactionResponse>;
}
