import { ethers } from "ethers";
import Host from "./Host";
import SuperfluidAgreement from "./SuperfluidAgreement";
import SuperfluidPoolClass from "./SuperfluidPool";
import { ConnectPoolParams, CreatePoolParams, DisconnectPoolParams, DistributeFlowParams, DistributeParams, EstimateDistributionActualAmountParams, EstimateFlowDistributionActualFlowRateParams, FlowDistributionActualFlowRateData, GDAGetFlowRateParams, GDAGetNetFlowParams, GetPoolAdjustmentFlowInfoParams, GetPoolAdjustmentFlowRateParams, IsMemberConnectedParams, IsPoolParams, PoolAdjustmentFlowInfo } from "./interfaces";
import { GDAv1Forwarder, IGeneralDistributionAgreementV1 } from "./typechain-types";
/**
 * General Distribution Agreement V1 Helper Class
 * @description A helper class to interact with the GDAV1 contract.
 */
export default class GeneralDistributionAgreementV1 extends SuperfluidAgreement {
    readonly host: Host;
    readonly contract: IGeneralDistributionAgreementV1;
    readonly forwarder: GDAv1Forwarder;
    constructor(hostAddress: string, gdaV1Address: string, gdaV1ForwarderAddress: string);
    /**
     * Retrieves the net flow for a specific token and account.
     *
     * @param token The token address.
     * @param account The account address.
     * @param providerOrSigner A provider or signer object
     * @returns The net flow of the account for the token.
     */
    getNetFlow: (params: GDAGetNetFlowParams) => Promise<string>;
    /**
     * Retrieves the flow rate for a specific token, sender, and pool.
     *
     * @param token The token address.
     * @param from The sender address.
     * @param pool The pool address.
     * @param providerOrSigner A provider or signer object
     * @returns The flow rate from the sender to the pool for the token.
     */
    getFlowRate: (params: GDAGetFlowRateParams) => Promise<string>;
    /**
     * Estimates the flow distribution's actual flow rate for a specific token, sender, and pool.
     *
     * @param token The token address.
     * @param from The sender address.
     * @param pool The pool address.
     * @param requestedFlowRate The requested flow rate.
     * @param providerOrSigner A provider or signer object
     * @returns The flow distribution's actual flow rate and the total distribution flow rate for the pool.
     */
    estimateFlowDistributionActualFlowRate: (params: EstimateFlowDistributionActualFlowRateParams) => Promise<FlowDistributionActualFlowRateData>;
    /**
     * Estimates the distribution's actual amount for a specific token, sender, and pool.
     *
     * @param token The token address.
     * @param from The sender address.
     * @param pool The pool address.
     * @param requestedAmount The requested amount.
     * @param providerOrSigner A provider or signer object
     * @returns The actual amount that will be distributed.
     */
    estimateDistributionActualAmount: (params: EstimateDistributionActualAmountParams) => Promise<string>;
    /**
     * Retrieves the pool adjustment flow rate for a specific token and pool.
     *
     * @param token The token address.
     * @param pool The pool address.
     * @param providerOrSigner A provider or signer object
     * @returns The pool adjustment flow rate for the token and pool.
     */
    getPoolAdjustmentFlowRate: (params: GetPoolAdjustmentFlowRateParams) => Promise<string>;
    /**
     * Checks if a given token and account form a pool.
     *
     * @param token The token address.
     * @param account The account address.
     * @param providerOrSigner A provider or signer object
     * @returns Whether the account is a pool for the token.
     */
    isPool: (params: IsPoolParams) => Promise<boolean>;
    /**
     * Checks if a member is connected to a specific pool.
     *
     * @param pool The pool address.
     * @param member The member address.
     * @param providerOrSigner A provider or signer object
     * @returns Whether the member is connected to the pool.
     */
    isMemberConnected: (params: IsMemberConnectedParams) => Promise<boolean>;
    /**
     * Retrieves the pool adjustment flow information for a specific pool.
     *
     * @param pool The address of the pool.
     * @param providerOrSigner A provider or signer object
     * @returns The recipient of the pool adjustment flow, the flow hash and the rate of the adjustment flow.
     */
    getPoolAdjustmentFlowInfo: (params: GetPoolAdjustmentFlowInfoParams) => Promise<PoolAdjustmentFlowInfo>;
    /**
     * Creates a new pool with the given token and admin.
     *
     * @param token The token address.
     * @param admin The admin address.
     * @returns CreatePoolTxn and SuperfluidPool instance
     */
    createPool: (params: CreatePoolParams) => Promise<{
        createPoolTxn: ethers.ContractTransaction;
        pool: SuperfluidPoolClass;
    }>;
    /**
     * Connects a pool to the contract.
     *
     * @param pool The pool address.
     * @param userData The user data.
     * @param overrides The transaction overrides.
     * @returns The call agreement operation result.
     */
    connectPool: (params: ConnectPoolParams) => import("./Operation").default;
    /**
     * Disconnects a pool from the contract.
     *
     * @param pool The pool address.
     * @param userData The user data.
     * @param overrides The transaction overrides.
     * @returns The call agreement operation result.
     */
    disconnectPool: (params: DisconnectPoolParams) => import("./Operation").default;
    /**
     * Distributes funds from the sender's account to the specified pool.
     *
     * @param token The token address.
     * @param from The sender's address.
     * @param pool The pool address.
     * @param requestedAmount The requested amount to distribute.
     * @param userData The user data.
     * @param overrides The transaction overrides.
     * @returns The call agreement operation result.
     */
    distribute: (params: DistributeParams) => import("./Operation").default;
    /**
     * Distributes the flow from the sender's account to the specified pool.
     *
     * @param token The token address.
     * @param from The sender's address.
     * @param pool The pool address.
     * @param requestedFlowRate The requested flow rate.
     * @param userData The user data.
     * @param overrides The transaction overrides.
     * @returns The call agreement operation result.
     */
    distributeFlow: (params: DistributeFlowParams) => import("./Operation").default;
}
//# sourceMappingURL=GeneralDistributionAgreementV1.d.ts.map