/**
 * Set of single functions in our airdrop-js
 * to let consumers pick and use with their strategies
 * @module Transaction/Core
 */
export { saveSnapshot, setMerkleRoot } from 'thirdweb/extensions/airdrop';
import { EstimateGasOptions, PreparedTransaction, SendTransactionOptions, ThirdwebClient, ThirdwebContract } from 'thirdweb';
import { TransactionReceipt } from 'thirdweb/transaction';
import { Account, Address, CreateRpcClientOptions, ExtraGasOptions, GasFeeInfo, GenerateMerkleTreeInfo, RetryOptions, SupportingChain, WhiteListItem } from '../type';
/**
 * Returns an RPC request that can be used to make JSON-RPC requests
 *
 * @param {ThirdwebClient} client - Thirdweb client.
 * @param {CreateRpcClientOptions} options - Options to create RpcClient.
 */
export declare const getRpcClientByChain: (client: ThirdwebClient, options: CreateRpcClientOptions) => import("viem").EIP1193RequestFn<[{
    Method: "web3_clientVersion";
    Parameters?: undefined;
    ReturnType: string;
}, {
    Method: "web3_sha3";
    Parameters: [data: `0x${string}`];
    ReturnType: string;
}, {
    Method: "net_listening";
    Parameters?: undefined;
    ReturnType: boolean;
}, {
    Method: "net_peerCount";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "net_version";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_blobBaseFee";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_blockNumber";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_call";
    Parameters: [transaction: import("viem").ExactPartial<import("viem").RpcTransactionRequest>] | [transaction: import("viem").ExactPartial<import("viem").RpcTransactionRequest>, block: `0x${string}` | import("viem").BlockTag | import("viem").RpcBlockIdentifier] | [transaction: import("viem").ExactPartial<import("viem").RpcTransactionRequest>, block: `0x${string}` | import("viem").BlockTag | import("viem").RpcBlockIdentifier, stateOverrideSet: import("viem").RpcStateOverride];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_chainId";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_coinbase";
    Parameters?: undefined;
    ReturnType: string;
}, {
    Method: "eth_estimateGas";
    Parameters: [transaction: import("viem").RpcTransactionRequest] | [transaction: import("viem").RpcTransactionRequest, block: `0x${string}` | import("viem").BlockTag] | [transaction: import("viem").RpcTransactionRequest, block: `0x${string}` | import("viem").BlockTag, stateOverride: import("viem").RpcStateOverride];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_feeHistory";
    Parameters: [blockCount: `0x${string}`, newestBlock: `0x${string}` | import("viem").BlockTag, rewardPercentiles: number[] | undefined];
    ReturnType: import("viem").RpcFeeHistory;
}, {
    Method: "eth_gasPrice";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getBalance";
    Parameters: [address: string, block: `0x${string}` | import("viem").BlockTag | import("viem").RpcBlockIdentifier];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getBlockByHash";
    Parameters: [hash: `0x${string}`, includeTransactionObjects: boolean];
    ReturnType: import("viem").RpcBlock | null;
}, {
    Method: "eth_getBlockByNumber";
    Parameters: [block: `0x${string}` | import("viem").BlockTag, includeTransactionObjects: boolean];
    ReturnType: import("viem").RpcBlock | null;
}, {
    Method: "eth_getBlockTransactionCountByHash";
    Parameters: [hash: `0x${string}`];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getBlockTransactionCountByNumber";
    Parameters: [block: `0x${string}` | import("viem").BlockTag];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getCode";
    Parameters: [address: string, block: `0x${string}` | import("viem").BlockTag | import("viem").RpcBlockIdentifier];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getFilterChanges";
    Parameters: [filterId: `0x${string}`];
    ReturnType: import("viem").RpcLog[] | `0x${string}`[];
}, {
    Method: "eth_getFilterLogs";
    Parameters: [filterId: `0x${string}`];
    ReturnType: import("viem").RpcLog[];
}, {
    Method: "eth_getLogs";
    Parameters: [{
        address?: string | string[] | undefined;
        topics?: import("viem").LogTopic[] | undefined;
    } & ({
        fromBlock?: `0x${string}` | import("viem").BlockTag | undefined;
        toBlock?: `0x${string}` | import("viem").BlockTag | undefined;
        blockHash?: undefined;
    } | {
        fromBlock?: undefined;
        toBlock?: undefined;
        blockHash?: `0x${string}` | undefined;
    })];
    ReturnType: import("viem").RpcLog[];
}, {
    Method: "eth_getProof";
    Parameters: [address: string, storageKeys: `0x${string}`[], block: `0x${string}` | import("viem").BlockTag];
    ReturnType: import("viem").RpcProof;
}, {
    Method: "eth_getStorageAt";
    Parameters: [address: string, index: `0x${string}`, block: `0x${string}` | import("viem").BlockTag | import("viem").RpcBlockIdentifier];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getTransactionByBlockHashAndIndex";
    Parameters: [hash: `0x${string}`, index: `0x${string}`];
    ReturnType: import("viem").RpcTransaction | null;
}, {
    Method: "eth_getTransactionByBlockNumberAndIndex";
    Parameters: [block: `0x${string}` | import("viem").BlockTag, index: `0x${string}`];
    ReturnType: import("viem").RpcTransaction | null;
}, {
    Method: "eth_getTransactionByHash";
    Parameters: [hash: `0x${string}`];
    ReturnType: import("viem").RpcTransaction | null;
}, {
    Method: "eth_getTransactionCount";
    Parameters: [address: string, block: `0x${string}` | import("viem").BlockTag | import("viem").RpcBlockIdentifier];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getTransactionReceipt";
    Parameters: [hash: `0x${string}`];
    ReturnType: import("viem").RpcTransactionReceipt | null;
}, {
    Method: "eth_getUncleByBlockHashAndIndex";
    Parameters: [hash: `0x${string}`, index: `0x${string}`];
    ReturnType: import("viem").RpcUncle | null;
}, {
    Method: "eth_getUncleByBlockNumberAndIndex";
    Parameters: [block: `0x${string}` | import("viem").BlockTag, index: `0x${string}`];
    ReturnType: import("viem").RpcUncle | null;
}, {
    Method: "eth_getUncleCountByBlockHash";
    Parameters: [hash: `0x${string}`];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_getUncleCountByBlockNumber";
    Parameters: [block: `0x${string}` | import("viem").BlockTag];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_maxPriorityFeePerGas";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_newBlockFilter";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_newFilter";
    Parameters: [filter: {
        fromBlock?: `0x${string}` | import("viem").BlockTag | undefined;
        toBlock?: `0x${string}` | import("viem").BlockTag | undefined;
        address?: string | string[] | undefined;
        topics?: import("viem").LogTopic[] | undefined;
    }];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_newPendingTransactionFilter";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_protocolVersion";
    Parameters?: undefined;
    ReturnType: string;
}, {
    Method: "eth_sendRawTransaction";
    Parameters: [signedTransaction: `0x${string}`];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_uninstallFilter";
    Parameters: [filterId: `0x${string}`];
    ReturnType: boolean;
}, {
    Method: "eth_accounts";
    Parameters?: undefined;
    ReturnType: string[];
}, {
    Method: "eth_chainId";
    Parameters?: undefined;
    ReturnType: `0x${string}`;
}, {
    Method: "eth_estimateGas";
    Parameters: [transaction: import("viem").RpcTransactionRequest] | [transaction: import("viem").RpcTransactionRequest, block: `0x${string}` | import("viem").BlockTag] | [transaction: import("viem").RpcTransactionRequest, block: `0x${string}` | import("viem").BlockTag, stateOverride: import("viem").RpcStateOverride];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_requestAccounts";
    Parameters?: undefined;
    ReturnType: string[];
}, {
    Method: "eth_sendTransaction";
    Parameters: [transaction: import("viem").RpcTransactionRequest];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_sendRawTransaction";
    Parameters: [signedTransaction: `0x${string}`];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_sign";
    Parameters: [address: string, data: `0x${string}`];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_signTransaction";
    Parameters: [request: import("viem").RpcTransactionRequest];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_signTypedData_v4";
    Parameters: [address: string, message: string];
    ReturnType: `0x${string}`;
}, {
    Method: "eth_syncing";
    Parameters?: undefined;
    ReturnType: false | import("viem").NetworkSync;
}, {
    Method: "personal_sign";
    Parameters: [data: `0x${string}`, address: string];
    ReturnType: `0x${string}`;
}, {
    Method: "wallet_addEthereumChain";
    Parameters: [chain: import("viem").AddEthereumChainParameter];
    ReturnType: null;
}, {
    Method: "wallet_getCallsStatus";
    Parameters?: [string] | undefined;
    ReturnType: import("viem").WalletGetCallsStatusReturnType<`0x${string}`, `0x${string}`>;
}, {
    Method: "wallet_getCapabilities";
    Parameters?: [string] | undefined;
    ReturnType: {
        [x: `0x${string}`]: import("viem").WalletCapabilities;
    };
}, {
    Method: "wallet_getPermissions";
    Parameters?: undefined;
    ReturnType: import("viem").WalletPermission[];
}, {
    Method: "wallet_grantPermissions";
    Parameters?: [import("viem").WalletGrantPermissionsParameters] | undefined;
    ReturnType: {
        expiry: number;
        factory?: `0x${string}` | undefined;
        factoryData?: string | undefined;
        grantedPermissions: readonly {
            data: unknown;
            policies: readonly {
                data: unknown;
                type: string;
            }[];
            required?: boolean | undefined;
            type: string;
        }[];
        permissionsContext: string;
        signerData?: {
            userOpBuilder?: `0x${string}` | undefined;
            submitToAddress?: `0x${string}` | undefined;
        } | undefined;
    };
}, {
    Method: "wallet_requestPermissions";
    Parameters: [permissions: {
        eth_accounts: Record<string, any>;
    }];
    ReturnType: import("viem").WalletPermission[];
}, {
    Method: "wallet_revokePermissions";
    Parameters: [permissions: {
        eth_accounts: Record<string, any>;
    }];
    ReturnType: null;
}, {
    Method: "wallet_sendCalls";
    Parameters?: import("viem").WalletSendCallsParameters<import("viem").WalletCapabilities, `0x${string}`, `0x${string}`> | undefined;
    ReturnType: string;
}, {
    Method: "wallet_showCallsStatus";
    Parameters?: [string] | undefined;
    ReturnType: void;
}, {
    Method: "wallet_switchEthereumChain";
    Parameters: [chain: {
        chainId: string;
    }];
    ReturnType: null;
}, {
    Method: "wallet_watchAsset";
    Parameters: import("viem").WatchAssetParams;
    ReturnType: boolean;
}]>;
/**
 * This callback type is called `transactionCallback` and is displayed as a global symbol.
 *
 * @callback transactionCallback
 * @param {TransactionReceipt} result - The transaction receipt received from submitting.
 */
/**
 * Calculate gas fee info need to paid to submit a transaction
 * @see {@link https://ethereum.org/en/developers/docs/gas|Ethereum's gas} or @see {@link https://support.metamask.io/transactions-and-gas/gas-fees/user-guide-gas/|Metamask's gas}
 * @see {@link https://etherscan.io/gastracker|Gas Tracker}
 *
 * @param {EstimateGasOptions} options - The options for estimating gas.
 * @param {boolean} isLogResult - Whether to log the result or not. Default true.
 *  @returns {Promise<GasFeeInfo>} Promise object represents the gas fee info to perform an on-chain transaction
 * @throws An error if the account is missed.
 */
export declare const getGasFeeInfo: (options: EstimateGasOptions, extraGasOptions?: ExtraGasOptions, isLogResult?: boolean) => Promise<GasFeeInfo>;
/**
 * Retrieves the transaction count (nonce) for a given Ethereum address.
 *
 * @see {@link https://ethereum.org/en/developers/docs/gas} for GAS AND FEES.
 * @see {@link https://etherscan.io/gastracker|Gas Tracker}
 *
 * @param {Address} address - The Ethereum address of Sender.
 * @param {ThirdwebClient} client - Thirdweb client.
 * @param {CreateRpcClientOptions} options - Options to create RpcClient.
 * @param {boolean} isLogResult - Whether to log the result or not. Default true.
 *  @returns {Promise<number>} Promise object represents the next transaction nonce
 */
export declare const getNextNonce: (address: Address, client: ThirdwebClient, options: CreateRpcClientOptions, isLogResult?: boolean) => Promise<number>;
/**
 * Reads owner of a smart contract.
 *
 * @param {ThirdwebContract} contract - The Thirdweb contract.
 * @returns {Promise<string>} A promise that resolves with the result of the owner ethereum address.
 */
export declare const getOwnerOfContract: (contract: ThirdwebContract) => Promise<string>;
/**
 * Creates a Thirdweb contract by combining the Thirdweb client and contract options.
 *
 * @param {Address} address - The ethereum smart contract address.
 * @param {ThirdwebClient} client - Thirdweb client.
 * @param {SupportingChain} selectingChain - The selecting chain.
 * @returns The Thirdweb contract.
 */
export declare const getThirdwebContract: (address: Address, client: ThirdwebClient, selectingChain: SupportingChain) => Readonly<import("thirdweb").ContractOptions<[]>>;
/**
 * End-User connects wallet to trigger Claim from Client side
 *
 * @param {Address} tokenAddress - The token address to claim.
 * @param {Account} account - The Account represent as sender @see {@link https://ethereum.org/en/glossary/#account|Account's Ethereum}.
 * @param {ThirdwebContract} airdropContract - The airdrop Thirdweb contract.
 * @param {transactionCallback} callback - The callback that handles the post-submit state.
 * @param {boolean} isLogResult - Whether to log the result or not. Default true.
 * @returns {Promise<TransactionReceipt>} A promise that resolves to the confirmed transaction receipt.
 * @throws An error if the wallet is not connected.
 * @example
 * ```ts
 * import { claimAirdropToken } from "./index";
 *
 * const transactionReceipt = await claimAirdropToken(
 *  tokenAddress,
 *  account,
 *  airdropContract
 * );
 * ```
 */
export declare const claimAirdropToken: (tokenAddress: Address, account: Account, airdropContract: ThirdwebContract, callback?: ((result: TransactionReceipt) => void) | undefined, isLogResult?: boolean) => Promise<TransactionReceipt>;
/**
 * Token contract owner approve airdrop contract address as spender with amount
 *
 * @param {Address} spender - The airdrop smart contract address as spender.
 * @param {number} amount - The total airdrop amount in ether format.
 * @param {Account} account - The Account represent as sender @see {@link https://ethereum.org/en/glossary/#account|Account's Ethereum}.
 * @param {ThirdwebContract} tokenContract - The token Thirdweb contract to airdrop
 * @param {transactionCallback} callback - The callback that handles the post-submit state.
 * @param {boolean} isLogResult - Whether to log the result or not. Default true.
 * @returns {Promise<TransactionReceipt>} A promise that resolves to the confirmed transaction receipt.
 * @throws An error if the amount <= 0.
 * @throws An error if the wallet is not connected.
 * @example
 * ```ts
 * import { approveAirdropAsSpender } from "./index";
 *
 * const transactionReceipt = await approveAirdropAsSpender(
 *  spender,
 *  amount,
 *  account,
 *  tokenContract
 * );
 * ```
 */
export declare const approveAirdropAsSpender: (spender: Address, amount: number, account: Account, tokenContract: ThirdwebContract, callback?: ((result: TransactionReceipt) => void) | undefined, isLogResult?: boolean) => Promise<TransactionReceipt>;
/**
 * Generate merkle tree info for a whitelist
 *
 * @param {WhiteListItem[]} whitelist - The list of items is available for airdrop.
 * @param {ThirdwebContract} airdropContract - The Airdrop Thirdweb contract.
 * @param {Address} tokenAddress - The token address to claim.
 * @param {boolean} isLogResult - Whether to log the result or not. Default true.
 * @returns {Promise<GenerateMerkleTreeInfo>} A promise that resolves to the generated info.
 * @throws An error if the wallet is zero.
 * @example
 * ```ts
 * import { generateMerkleTreeForWhitelist } from "./index";
 *
 * const generateMerkleTreeInfo = await generateMerkleTreeForWhitelist(
 *  whitelist,
 *  airdropContract,
 *  tokenAddress,
 *  tokenContract
 * );
 * ```
 */
export declare const generateMerkleTreeInfoERC20ForWhitelist: (whitelist: WhiteListItem[], airdropContract: ThirdwebContract, tokenAddress: Address, isLogResult?: boolean) => Promise<GenerateMerkleTreeInfo>;
/**
 * Airdrop's owner saved merkleRoot to on-chain.
 *
 * @remarks
 * MUST execute saveSnapshotByOwner first. Order master
 *
 * @param {Account} account - The Account represent as sender @see {@link https://ethereum.org/en/glossary/#account|Account's Ethereum}.
 * @param {ThirdwebContract} airdropContract - The airdrop Thirdweb contract.
 * @param {Address} tokenAddress - The token address to claim.
 * @param {string} merkleRoot - The generated merkleRoot from whitelist @see {@link generateMerkleTreeInfoERC20ForWhitelist|Generate merkleRoot}
 * @param {RetryOptions} retryOptions - The configuration on retry
 * @param {ExtraGasOptions} extraGasOptions - The extra gas options bidding for your transaction to be included in the next block.
 * @returns {Promise<TransactionReceipt>} A promise that resolves to the confirmed transaction receipt.
 * @throws An error if the wallet is not connected.
 */
export declare const saveMerkleRootByOwner: (account: Account, airdropContract: ThirdwebContract, tokenAddress: string, merkleRoot: string, retryOptions?: RetryOptions, extraGasOptions?: ExtraGasOptions) => Promise<TransactionReceipt>;
/**
 * Airdrop's owner saved snapshotUri to on-chain.
 *
 * @param {Account} account - The Account represent as sender @see {@link https://ethereum.org/en/glossary/#account|Account's Ethereum}.
 * @param {ThirdwebContract} airdropContract - The airdrop Thirdweb contract.
 * @param {string} merkleRoot - The generated merkleRoot from whitelist @see {@link generateMerkleTreeInfoERC20ForWhitelist|Generate merkleRoot}
 * @param {string} snapshotUri - The generated snapshotUri from whitelist @see {@link generateMerkleTreeInfoERC20ForWhitelist|Generate snapshotUri}
 * @param {RetryOptions} retryOptions - The configuration on retry
 * @param {ExtraGasOptions} extraGasOptions - The extra gas options bidding for your transaction to be included in the next block.
 * @returns {Promise<TransactionReceipt>} A promise that resolves to the confirmed transaction receipt.
 * @throws An error if the wallet is not connected.
 */
export declare const saveSnapshotByOwner: (account: Account, airdropContract: ThirdwebContract, merkleRoot: string, snapshotUri: string, retryOptions?: RetryOptions, extraGasOptions?: ExtraGasOptions) => Promise<TransactionReceipt>;
/**
 * Sends a transaction using the provided wallet.
 * @param {SendTransactionOptions} options - The options for sending the transaction.
 * @param {number} maxBlocksWaitTime - The maximum of blocks to wait for confirmation before considering success.
 * @returns {Promise<TransactionReceipt>} A promise that resolves to the confirmed transaction receipt.
 * @throws An error if the wallet is not connected.
 * @example
 * ```ts
 * import { sendAndConfirmTransaction } from "./index";
 *
 * const transactionReceipt = await sendAndConfirmTransaction(
 * options,
 * maxBlocksWaitTime
 * );
 * ```
 */
export declare function sendTransactionAndWaitForReceipt(options: SendTransactionOptions, maxBlocksWaitTime?: number): Promise<TransactionReceipt>;
/**
 * Retry on preparing the gas fee, and nonce, and send a transaction using the provided wallet.
 *
 * @param {PreparedTransaction} transaction - The raw transaction to submit
 * @param {Account} account - The Account represent as sender @see {@link https://ethereum.org/en/glossary/#account|Account's Ethereum}.
 * @param {ExtraGasOptions} extraGasOptions - The extra gas options bidding for your transaction to be included in the next block. Otherwise, Use default our sdk {@link Type | Default Variables}
 * @param {RetryOptions} retryOptions - The configuration on retry
 * @returns {Promise<TransactionReceipt>} A promise that resolves to the confirmed transaction receipt.
 * @throws An error if the wallet is not connected.
 */
export declare function retryPrepareAndSubmitRawTransaction(transaction: PreparedTransaction<any>, account: Account, retryOptions?: RetryOptions, extraGasOptions?: ExtraGasOptions): Promise<TransactionReceipt>;
