import { Classification, ClassificationResources, ContractProperties } from '../utils/classification';
export declare type Address = string;
export interface ContractProxy {
    address: string;
    standard?: string;
    subType?: string;
    target?: string;
}
export interface ContractType {
    name: string | null;
    subType?: string;
    standards?: string[];
    proxies?: ContractProxy[];
    metadata?: boolean;
    baseUri?: boolean;
    tokenUri?: boolean;
    enumeration?: boolean;
    receive?: string[];
}
export interface TokenProperties {
    type: string;
    name: string;
    symbol: string;
    decimals?: number;
    totalSupply?: number;
    baseUri?: string;
    items?: string[];
}
export interface MultiSigProperties {
    type: string;
    owners: string[];
}
export interface ERC3668Properties {
    type: string;
    url: string;
}
export interface TokenPairInfo {
    address: string;
    info?: ContractInfo;
}
export interface TokenPair {
    type: string;
    token0?: TokenPairInfo;
    token1?: TokenPairInfo;
}
export interface ContractInfo {
    /** True if the corresponding account is a smart contract, otherwise false */
    isContract: boolean;
    /** A unique representation of all function and event signatures of a contract */
    fingerprint?: string;
    /** Name of the contract from configured ABIs */
    contractName?: string;
    /** Type of contract from signature matching */
    contractType?: ContractType;
    /** Token properties (if ERC20, ERC721, ERC777, ERC1155) */
    properties?: Partial<ContractProperties>;
}
/** Lookup function to find matching signature for a hash */
export declare type SignatureMatcher = (sig: string, address?: Address) => string | undefined;
/** Lookup function to find name for a given contract address or fingerprint */
export declare type ContractNameLookup = (address: Address, fingerprint: string) => string | undefined;
export interface ContractResources extends ClassificationResources {
    classification: Classification;
}
/**
 * Find function and event signature hashes in the EVM bytecode and attempt to match them against
 * known hashes from configured ABIs
 */
export declare function extractFunctionsAndEvents(contractCode: string, signatureMatcher: SignatureMatcher): {
    functions: string[];
    events: string[];
} | undefined;
/** Creates a hash of all function and event signatures of a contract used to match ABIs against EVM bytecode */
export declare function computeContractFingerprint({ functions, events }?: {
    functions: string[];
    events: string[];
}): string | undefined;
/**
 * Attempts to determine if the given account address is a smart contract and
 * determines some additional information if that's the case
 */
export declare function getContractInfo(address: Address, resources: ContractResources): Promise<ContractInfo>;
export declare function contractInfo({ address, resources }: {
    address: Address;
    resources: ContractResources;
}): Promise<ContractInfo | undefined>;
