import { WriteContractParameters, Hex, Transport, Address, Abi, Chain, Account, PublicClient, WalletClient, GetContractParameters, GetContractReturnType } from 'viem';

type ContractWrite = {
    id: string;
    request: WriteContractParameters;
    result: Promise<Hex>;
};
type GetContractOptions<TTransport extends Transport, TAddress extends Address, TAbi extends Abi, TChain extends Chain, TAccount extends Account, TPublicClient extends PublicClient<TTransport, TChain>, TWalletClient extends WalletClient<TTransport, TChain, TAccount>> = GetContractParameters<TTransport, TChain, TAccount, TAbi, {
    public: TPublicClient;
    wallet: TWalletClient;
}, TAddress> & {
    onWrite?: (write: ContractWrite) => void;
};
/** @deprecated Use `walletClient.extend(transactionQueue()).extend(writeObserver({ onWrite }))` and viem's `getContract` instead. */
declare function getContract<TTransport extends Transport, TAddress extends Address, TAbi extends Abi, TChain extends Chain, TAccount extends Account, TPublicClient extends PublicClient<TTransport, TChain>, TWalletClient extends WalletClient<TTransport, TChain, TAccount>>({ abi, address, client: { public: publicClient, wallet: walletClient }, onWrite, }: GetContractOptions<TTransport, TAddress, TAbi, TChain, TAccount, TPublicClient, TWalletClient>): GetContractReturnType<TAbi, {
    public: TPublicClient;
    wallet: TWalletClient;
}, TAddress>;

export { ContractWrite as C, GetContractOptions as G, getContract as g };
