import { providers } from "ethers";
/**
 * Verify whether an address' bytecode resembles an EIP-7702 delegation.
 * @param code Bytecode for a given address.
 * @returns True if the bytecode resembles an EIP-7702 delegation, otherwise false.
 */
export declare function is7702Delegate(code: string): boolean;
/**
 * Checks if a contract is deployed at the given address
 * @param address The ETH address to check
 * @param provider A valid Ethers.js provider
 * @param ignore7702 A boolean to indicate whether EIP-7702 delegations should be considered as contract code.
 * @returns A boolean indicating if a contract is deployed at the given address or not (true = contract, false = no contract)
 */
export declare function isContractDeployedToAddress(address: string, provider: providers.Provider, ignore7702?: boolean): Promise<boolean>;
export declare function compareAddresses(addressA: string, addressB: string): 1 | -1 | 0;
export declare function compareAddressesSimple(addressA?: string, addressB?: string): boolean;
export declare function toBytes32(address: string): string;
export declare function toEvmAddress(hexString: string): string;
/**
 * Normalizes an address to its canonical native string for the detected family
 * (checksummed EVM hex, Solana base58, or TRON base58). Returns undefined when
 * the input is not valid in any supported format.
 */
export declare function normalizeAddressString(address: string): string | undefined;
export declare function isValidEvmAddress(address: string): boolean;
/**
 * Creates the proper address type given the input chain ID corresponding to the address's origin network.
 * @param address Stringified address type to convert. Can be either hex encoded or base58 encoded.
 * @param chainId Chain ID for the intended use of the address.
 * @returns a child `Address` type most fitting for the chain ID.
 * @todo: Change this to `toAddress` once we remove the other `toAddress` function.
 */
export declare function toAddressType(address: string, chainId: number): Address;
export declare abstract class Address {
    readonly __address_type_brand = true;
    readonly rawAddress: Uint8Array;
    evmAddress: string | undefined;
    bytes32Address: string | undefined;
    svmAddress: string | undefined;
    constructor(_rawAddress: Uint8Array);
    static isAddress(obj: unknown): obj is Address;
    toJSON(): string;
    toBytes32(): string;
    truncateToBytes20(): string;
    toBase58(): string;
    toEvmAddress(): string;
    toNative(): string;
    toHexString(): string;
    isValidOn(chainId: number): boolean;
    toString(): string;
    isZeroAddress(): boolean;
    forceSvmAddress(): SvmAddress;
    eq(other?: Address): boolean;
    compare(otherAddress: Address): 1 | -1 | 0;
    isEVM(): this is EvmAddress;
    isSVM(): this is SvmAddress;
    isTVM(): this is TvmAddress;
}
export declare class EvmAddress extends Address {
    private readonly _type;
    constructor(rawAddress: Uint8Array);
    static validate(rawAddress: Uint8Array): boolean;
    isEVM(): this is EvmAddress;
    toNative(): string;
    static from(address: string): EvmAddress;
}
export declare class SvmAddress extends Address {
    private readonly _type;
    constructor(rawAddress: Uint8Array);
    static validate(rawAddress: Uint8Array): boolean;
    isSVM(): this is SvmAddress;
    toNative(): string;
    static from(address: string): SvmAddress;
}
export declare class TvmAddress extends Address {
    private readonly _type;
    private nativeAddress;
    constructor(rawAddress: Uint8Array);
    static validate(rawAddress: Uint8Array): boolean;
    isTVM(): this is TvmAddress;
    toNative(): string;
    toHexString(): string;
    static from(address: string): TvmAddress;
}
export declare class RawAddress extends Address {
    private readonly _type;
}
