import { BigNumber, ContractReceipt, ethers } from "ethers";
/**
 * A zebec bridge client interface for evm bridge.
 */
export interface IZebecEthBridgeClient {
    /**
     * An arbitary fee used for paying fee to wormhole
     */
    readonly ArbitaryFee: BigNumber;
    /**
     * Sends payload to create solana account for evm user.
     * @param address evm user address for which solana account is created
     */
    registerUser(address: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to initialize associated token account in solana via evm bridge to wormhole.
     * @param owner evm user address
     * @param tokenMint solana token mint address
     */
    createTokenAccount(owner: string, tokenMint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to deposit in zebec vault in solana via evm bridge to wormhole.
     * @param amount amount of token to deposit
     * @param depositor evm address of depositor
     * @param token_mint solana token mint address to deposit
     */
    deposit(amount: string, depositor: string, token_mint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     *	Sends payload to withdraw from zebec vault in solana via evm bridge to wormhole.
     * @param amount amount of token to withdraw
     * @param sender evm address from where token was deposited at firstd
     * @param tokenMint solana token mint address to withdraw
     */
    withdraw(amount: string, sender: string, tokenMint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     *	Sends payload to initialize token stream in solana via evm bridge to wormhole.
     *
     * *Note: It takes few minutes for payloads to reach the solana chain from evm chain.
     * So, make sure start time does not get passed during transaction execution in solana*
     * @param startTime unix timestamp from which onward stream starts
     * @param endTime unix timestamp at which stream ends
     * @param amount amount of token streamed
     * @param receiver evm address to which token streams is targeted
     * @param sender evm address from which token stream is initialized
     * @param canCancel specifies whether stream can be canceled or not
     * @param canUpdate specifies whether stream information can be mutated after stream initialization or not
     * @param tokenMint solana token mint address which is streamed
     */
    initStream(startTime: string, endTime: string, amount: string, receiver: string, sender: string, canCancel: boolean, canUpdate: boolean, tokenMint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to update existing token stream in solana via evm bridge to wormhole.
     * @param startTime unix timestamp from which onward stream will to start
     * @param endTime unix timestamp at which stream will end
     * @param amount amount of token streamed
     * @param receiver evm address to which token streams is targeted
     * @param sender evm address from which token stream is initialized
     * @param streamDataAcount solana stream info account address created at initialization
     * @param tokenMint solana token mint address which is streamed
     */
    updateStream(startTime: string, endTime: string, amount: string, receiver: string, sender: string, streamDataAcount: string, tokenMint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to withdraw streamed token (by receiver) in solana via evm bridge to wormhole.
     * @param sender evm address from which token stream is initialized
     * @param withdrawer evm address to which token streams is targeted
     * @param tokenMint solana token mint address which is streamed
     * @param streamDataAccount solana stream info account address created at initialization
     */
    withdrawStreamed(sender: string, withdrawer: string, tokenMint: string, streamDataAccount: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to cancel existing token stream in solana via evm bridge to wormhole.
     * @param sender  evm address from which token stream is initialized
     * @param receiver evm address to which token streams is targeted
     * @param tokenMint solana token mint address which was streamed
     * @param streamDataAccount solana stream info account address created at initialization
     */
    cancelStream(sender: string, receiver: string, tokenMint: string, streamDataAccount: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to pause or resume token stream in solana via evm bridge to wormhole.
     * @param sender  evm address from which token stream is initialized
     * @param receiver evm address to which token streams is targeted
     * @param tokenMint solana token mint address which was streamed
     * @param streamDataAccount solana stream info account address created at initialization
     */
    pauseResumeStream(sender: string, receiver: string, tokenMint: string, streamDataAccount: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     *	Sends payload to transfer token (from vault) instantly (not stream) via evm bridge to wormhole.
     * @param amount amount of token to transfer
     * @param sender evm address from whose vault token is transfer
     * @param receiver evm address to which token token is transfer
     * @param tokenMint solana token mint address which was streamed
     */
    instantTransfer(amount: string, sender: string, receiver: string, tokenMint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
    /**
     * Sends payload to transfer token from solana chain to evm chain address via evm bridge to wormhole.
     * @param amount amount of token to transfer
     * @param sender evm address from whose corresponding solana account token is transfer
     * @param receiver evm address to which token is transfer
     * @param tokenMint
     */
    directTransfer(amount: string, sender: string, receiver: string, tokenMint: string, overrides?: ethers.Overrides): Promise<ContractReceipt>;
}
