import { ChainConfig } from "../chains/types/chainConfig";
import { ApproveTokenParams } from "./types/approveTokenParams";
import { DeployERC20TokenParams } from "./types/deployERC20Token";
import { DeployTokenHomeContractParams } from "./types/deployTokenHomeContractParams";
import { DeployTokenRemoteContractParams } from "./types/deployTokenRemoteContractParams";
import { RegisterRemoteWithHomeParams } from "./types/registerRemoteWithHomeParams";
import { SendTokenParams } from "./types/sendTokenParams";
export declare class ICTT {
    private sourceChain;
    private destinationChain;
    private gasLimit;
    private telemetry;
    constructor(sourceChain?: ChainConfig, destinationChain?: ChainConfig, gasLimit?: bigint, enableTelemetry?: boolean);
    /**
     * Deploys a new ERC20 token on the source chain.
     * @param params - The parameters for deploying the ERC20 token.
     * @param params.walletClient - The wallet client to use for deploying the ERC20 token.
     * @param params.sourceChain - The source chain to deploy the ERC20 token on.
     * @param params.name - The name of the token.
     * @param params.symbol - The symbol of the token.
     * @param params.initialSupply - The initial supply of the token.
     * @param params.recipient - The recipient of the newly minted tokens.
     * @returns The transaction hash and the contract address of the deployed ERC20 token.
     */
    deployERC20Token(params: DeployERC20TokenParams): Promise<{
        txHash: `0x${string}`;
        contractAddress: `0x${string}`;
    }>;
    /**
     * Approves the token for the token home contract on the source chain.
     * @param params - The parameters for approving the token.
     * @param params.walletClient - The wallet client to use for approving the token.
     * @param params.sourceChain - The source chain to approve the token on.
     * @param params.tokenHomeContract - The address of the token home contract to approve the token for.
     * @param params.tokenAddress - The address of the token to approve.
     * @param params.amountInBaseUnit - The amount of the token to approve.
     * @returns The transaction hash of the approval.
     */
    approveToken(params: ApproveTokenParams): Promise<{
        txHash: `0x${string}`;
    }>;
    /**
     * Deploy a token home contract on the source chain.
     * @param params - The parameters for deploying the token home contract.
     * @param params.walletClient - The wallet client to use for deploying the token home contract.
     * @param params.sourceChain - The source chain to deploy the token home contract on.
     * @param params.erc20TokenAddress - The address of the ERC20 token to be used as the token home contract.
     * @param params.minimumTeleporterVersion - The minimum teleporter version required for the token home contract.
     * @param params.tokenHomeCustomByteCode - Optional. The customized bytecode for the token home contract.
     * @param params.tokenHomeCustomABI - Optional. The customized ABI for the token home contract.
     * @returns The transaction hash and the contract address of the deployed token home contract.
     */
    deployTokenHomeContract(params: DeployTokenHomeContractParams): Promise<{
        txHash: `0x${string}`;
        contractAddress: `0x${string}`;
    }>;
    /**
     * Deploy a token remote contract on the destination chain.
     * @param params - The parameters for deploying the token remote contract.
     * @param params.walletClient - The wallet client to use for deploying the token remote contract.
     * @param params.sourceChain - The source chain to deploy the token remote contract on.
     * @param params.destinationChain - The destination chain to deploy the token remote contract on.
     * @param params.tokenHomeContract - The address of the token home contract to be used as the token remote contract.
     * @param params.tokenRemoteCustomByteCode - Optional. The customized bytecode for the token remote contract.
     * @param params.tokenRemoteCustomABI - Optional. The customized ABI for the token remote contract.
     * @returns The transaction hash and the contract address of the deployed token remote contract.
     */
    deployTokenRemoteContract(params: DeployTokenRemoteContractParams): Promise<{
        txHash: `0x${string}`;
        contractAddress: `0x${string}`;
    }>;
    /**
     * Emits event from the TokenRemote contract to get it registered with the TokenHome contract on the source chain.
     * @param params - The parameters for registering the token remote contract with the token home contract.
     * @param params.walletClient - The wallet client to use for registering the token remote contract with the token home contract.
     * @param params.sourceChain - The source chain to register the token remote contract with the token home contract on.
     * @param params.destinationChain - The destination chain to register the token remote contract with the token home contract on.
     * @param params.tokenRemoteContract - The address of the token remote contract to be registered with the token home contract.
     * @param params.feeTokenAddress - Optional. The address of the fee token to be used for the registration.
     * @param params.feeAmount - Optional. The amount of the fee to be used for the registration.
     * @returns The transaction hash of the registration.
     */
    registerRemoteWithHome(params: RegisterRemoteWithHomeParams): Promise<{
        txHash: `0x${string}`;
    }>;
    /**
     * Sends tokens from the TokenHome contract on the source chain to the TokenRemote contract on the destination chain.
     * @param params - The parameters for sending the tokens.
     * @param params.walletClient - The wallet client to use for sending the tokens.
     * @param params.sourceChain - The source chain to send the tokens from.
     * @param params.destinationChain - The destination chain to send the tokens to.
     * @param params.tokenHomeContract - The address of the token home contract to send the tokens from.
     * @param params.tokenRemoteContract - The address of the token remote contract to send the tokens to.
     * @param params.recipient - The address of the recipient of the tokens.
     * @param params.amountInBaseUnit - The amount of the tokens to be sent.
     * @param params.feeTokenAddress - Optional. The address of the fee token to be used for the transfer.
     * @param params.feeAmount - Optional. The amount of the fee to be used for the transfer.
     * @returns The transaction hash of the transfer.
     */
    sendToken(params: SendTokenParams): Promise<{
        txHash: `0x${string}`;
    }>;
}
/**
 * Creates a new ICTT client.
 * @param sourceChain - The default source chain to use for the client.
 * @param destinationChain - The default destination chain to use for the client.
 * @param gasLimit - The default gas limit to use for the client.
 * @returns A new ICTT client.
 */
export declare function createICTTClient(sourceChain?: ChainConfig, destinationChain?: ChainConfig, gasLimit?: bigint): ICTT;
//# sourceMappingURL=ictt.d.ts.map