import { SuiClient, SuiObjectResponse, SuiObjectDataOptions, SuiTransactionBlockResponseOptions, SuiTransactionBlockResponse, CoinMetadata } from '@mysten/sui/client';
import { Transaction as TransactionBlock, TransactionResult, TransactionArgument } from '@mysten/sui/transactions';
import { GuardConstant } from './guard.js';
export declare enum MODULES {
    machine = "machine",
    progress = "progress",
    repository = "repository",
    permission = "permission",
    passport = "passport",
    guard = "guard",
    demand = "demand",
    order = "order",
    service = "service",
    resource = "resource",
    entity = "entity",
    wowok = "wowok",
    treasury = "treasury",
    payment = "payment",
    arbitration = "arbitration",
    arb = "arb"
}
export type PermissionAddress = TransactionResult;
export type PermissionObject = TransactionResult | string | TransactionArgument;
export type RepositoryAddress = TransactionResult;
export type RepositoryObject = TransactionResult | string | TransactionArgument;
export type GuardAddress = TransactionResult;
export type GuardObject = TransactionResult | string | TransactionArgument;
export type MachineAddress = TransactionResult;
export type MachineObject = TransactionResult | string | TransactionArgument;
export type PassportObject = TransactionResult;
export type DemandAddress = TransactionResult;
export type DemandObject = TransactionResult | string | TransactionArgument;
export type ServiceObject = TransactionResult | string | TransactionArgument;
export type ServiceAddress = TransactionResult;
export type ArbitrationObject = TransactionResult | string | TransactionArgument;
export type ArbitrationAddress = TransactionResult;
export type ArbObject = TransactionResult | string | TransactionArgument;
export type ArbAddress = TransactionResult;
export type ProgressObject = TransactionResult | string | TransactionArgument;
export type ProgressAddress = TransactionResult;
export type TreasuryObject = TransactionResult | string | TransactionArgument;
export type TreasuryAddress = TransactionResult;
export type OrderObject = TransactionResult | string | TransactionArgument;
export type OrderAddress = TransactionResult;
export type DiscountObject = TransactionResult | string | TransactionArgument;
export type CoinObject = TransactionResult | string | TransactionArgument;
export type ResourceObject = TransactionResult | string | TransactionArgument;
export type ResourceAddress = TransactionResult;
export type EntityObject = TransactionResult | string | TransactionArgument;
export type EntityAddress = TransactionResult;
export type PaymentObject = TransactionResult | string | TransactionArgument;
export type PaymentAddress = TransactionResult;
export type ReceivedObject = TransactionResult | string | TransactionArgument;
export type CoinWrapperObject = TransactionResult;
export type TxbAddress = string | TransactionResult;
export type TxbObject = string | TransactionResult | TransactionArgument | GuardObject | RepositoryObject | PermissionObject | MachineObject | PassportObject | DemandObject | ServiceObject | OrderObject | DiscountObject | DemandObject | ResourceObject | EntityObject | ArbitrationObject | ArbObject | TreasuryObject;
export type WowokObject = TransactionResult;
export type FnCallType = `${string}::${string}::${string}`;
export declare enum OperatorType {
    TYPE_QUERY = 1,// query wowok object
    TYPE_NUMBER_ADD = 2,
    TYPE_NUMBER_SUBTRACT = 3,
    TYPE_NUMBER_MULTIPLY = 4,
    TYPE_NUMBER_DEVIDE = 5,
    TYPE_NUMBER_MOD = 6,
    TYPE_NUMBER_ADDRESS = 7,
    TYPE_STRING_LOWERCASE = 8,// string to lowercase
    TYPE_LOGIC_AS_U256_GREATER = 11,
    TYPE_LOGIC_AS_U256_GREATER_EQUAL = 12,
    TYPE_LOGIC_AS_U256_LESSER = 13,
    TYPE_LOGIC_AS_U256_LESSER_EQUAL = 14,
    TYPE_LOGIC_AS_U256_EQUAL = 15,
    TYPE_LOGIC_EQUAL = 16,// TYPE&DATA(vector<u8>) MUST BE EQUAL
    TYPE_LOGIC_HAS_SUBSTRING = 17,// SUBSTRING
    TYPE_LOGIC_NOT = 18,// NOT
    TYPE_LOGIC_AND = 19,// AND
    TYPE_LOGIC_OR = 20,// OR
    TYPE_SAFE_U8 = 21,// convert number to u8
    TYPE_SAFE_U64 = 22
}
export declare const LogicsInfo: (string | OperatorType)[][];
export declare enum ValueType {
    TYPE_BOOL = 100,
    TYPE_ADDRESS = 101,
    TYPE_U8 = 102,
    TYPE_U64 = 103,
    TYPE_VEC_U8 = 104,
    TYPE_U128 = 105,
    TYPE_VEC_ADDRESS = 106,
    TYPE_VEC_BOOL = 107,
    TYPE_VEC_VEC_U8 = 108,
    TYPE_VEC_U64 = 109,
    TYPE_VEC_U128 = 110,
    TYPE_OPTION_ADDRESS = 111,
    TYPE_OPTION_BOOL = 112,
    TYPE_OPTION_U8 = 113,
    TYPE_OPTION_U64 = 114,
    TYPE_OPTION_U128 = 115,
    TYPE_OPTION_U256 = 116,
    TYPE_OPTION_STRING = 117,
    TYPE_OPTION_VEC_U8 = 118,
    TYPE_VEC_U256 = 119,
    TYPE_STRING = 120,
    TYPE_VEC_STRING = 121,
    TYPE_U256 = 122
}
export declare enum RepositoryValueType {
    Address = 200,
    Address_Vec = 201,
    PositiveNumber = 202,
    PositiveNumber_Vec = 203,
    String = 204,
    String_Vec = 205,
    Bool = 206
}
export declare const RepositoryValueTypeInfo: {
    type: RepositoryValueType;
    name: string;
    description: string;
}[];
export declare const OperatorTypeArray: number[];
export declare const ValueTypeArray: number[];
export declare const IsValidOperatorType: (type: number) => boolean;
export declare const IsValidValueType: (type: number) => boolean;
export declare const IsNumberType: (type: ValueType | any) => boolean;
export declare enum ContextType {
    TYPE_SIGNER = 60,// address type; the signer address on verifying
    TYPE_CLOCK = 61,// u64 type; On-chain time at validation
    TYPE_GUARD = 62,// address type; the address of the guard being verified
    TYPE_CONSTANT = 80,
    TYPE_ORDER_PROGRESS = 30,
    TYPE_ORDER_MACHINE = 31,
    TYPE_ORDER_SERVICE = 32,
    TYPE_PROGRESS_MACHINE = 33,
    TYPE_ARB_ORDER = 34,
    TYPE_ARB_ARBITRATION = 35,
    TYPE_ARB_PROGRESS = 36,
    TYPE_ARB_MACHINE = 37,
    TYPE_ARB_SERVICE = 38
}
export declare const IsContextWitness: (type?: number | any) => boolean;
export declare const ContextWitnessRetType: (type?: number | any) => ValueType | undefined;
export type WitnessType = ContextType.TYPE_PROGRESS_MACHINE | ContextType.TYPE_ARB_ARBITRATION | ContextType.TYPE_ARB_MACHINE | ContextType.TYPE_ARB_ORDER | ContextType.TYPE_ARB_PROGRESS | ContextType.TYPE_ARB_SERVICE | ContextType.TYPE_ORDER_MACHINE | ContextType.TYPE_ORDER_PROGRESS | ContextType.TYPE_ORDER_SERVICE;
export declare const WitnessObjectModule: (type: WitnessType) => MODULES;
export declare const WitnessForModule: (type: WitnessType) => MODULES;
interface ValueTypeString {
    type: ValueType | ContextType;
    name: string;
    description: string;
    validator?: (value: any) => boolean;
}
export declare const SER_VALUE: ValueTypeString[];
export type Data_Type = ValueType | OperatorType | ContextType;
export declare enum ENTRYPOINT {
    mainnet = "sui mainnet",// sui mainnet
    testnet = "sui testnet",// sui testnet
    wowoknet = "wowok",// wowok mainnet
    localnet = "local wowok"
}
export interface CoinTypeInfo extends CoinMetadata {
    alias?: string;
    type: string; /** type name for the coin (e.g., 0x168da5bf1f48dafc111b0a488fa454aca95e0b5e::usdc::USDC) */
}
export interface NetworkInfo {
    network: ENTRYPOINT;
    url: string;
}
export declare class Protocol {
    protected network?: ENTRYPOINT;
    protected packages: Map<string, string>;
    protected signer: string;
    protected wowok_object: string;
    protected entity_object: string;
    protected treasury_cap: string;
    protected oracle_object: string;
    protected txb: TransactionBlock | undefined;
    static _instance: any;
    constructor(network?: ENTRYPOINT);
    static Instance(): Protocol;
    static Client(network?: ENTRYPOINT): SuiClient;
    use_network(network?: ENTRYPOINT): void;
    package(type: string): string;
    objectWowok(): string;
    objectEntity(): string;
    objectOracle(): string;
    objectTreasuryCap(): string;
    IsNetworkValid(): boolean;
    networkUrl(network?: ENTRYPOINT): NetworkInfo;
    machineFn: (fn: any) => string;
    baseMachineFn: (fn: any) => string;
    progressFn: (fn: any) => string;
    repositoryFn: (fn: any) => string;
    permissionFn: (fn: any) => string;
    passportFn: (fn: any) => string;
    demandFn: (fn: any) => string;
    orderFn: (fn: any) => string;
    serviceFn: (fn: any) => string;
    resourceFn: (fn: any) => string;
    entityFn: (fn: any) => string;
    wowokFn: (fn: any) => string;
    treasuryFn: (fn: any) => string;
    paymentFn: (fn: any) => string;
    guardFn: (fn: any) => string;
    baseWowokFn: (fn: any) => string;
    arbitrationFn: (fn: any) => string;
    arbFn: (fn: any) => string;
    query: (objects: Query_Param[], options?: SuiObjectDataOptions, network?: ENTRYPOINT) => Promise<SuiObjectResponse[]>;
    query_raw: (objects: string[], options?: SuiObjectDataOptions, network?: ENTRYPOINT) => Promise<SuiObjectResponse[]>;
    new_session: () => TransactionBlock;
    sessionCurrent: () => TransactionBlock;
    sign_excute: (exes: ((protocol: Protocol, param: any) => void)[], priv_key: string, param?: any, options?: SuiTransactionBlockResponseOptions, network?: ENTRYPOINT) => Promise<SuiTransactionBlockResponse>;
    static SUI_TOKEN_TYPE: string;
    static SUI_COIN_TYPE: string;
    WOWOK_TOKEN_TYPE: () => string;
    WOWOK_COIN_TYPE: () => string;
    COINS_TYPE: () => CoinTypeInfo[];
    update_coinType: (coinType: CoinTypeInfo, network?: ENTRYPOINT) => void;
    explorerUrl: (objectid: string, type?: "object" | "txblock" | "account") => string;
    CoinTypes_Testnet: CoinTypeInfo[];
    CoinTypes_Mainnet: CoinTypeInfo[];
    coinTypeInfo: (token_type: string, handler: (info: CoinTypeInfo) => void, network?: ENTRYPOINT) => CoinTypeInfo | "loading";
    static CLOCK_OBJECT: {
        objectId: string;
        mutable: boolean;
        initialSharedVersion: number;
    };
    static TXB_OBJECT(txb: TransactionBlock, arg: TxbObject): TransactionArgument;
    static IsValidObjects: (arr: TxbObject[]) => boolean;
    WOWOK_OBJECTS_TYPE: () => string[];
    WOWOK_OBJECTS_PREFIX_TYPE: () => string[];
    hasPackage(pack: string): boolean;
    object_name_from_type_repr: (type_repr: string) => string;
    module_object_name_from_type_repr: (type_repr: string) => string;
}
export declare class RpcResultParser {
    static Object_Type_Extra: () => string[];
    static objectids_from_response: (protocol: Protocol, response: SuiTransactionBlockResponse, concat_result?: Map<string, TxbObject[]>) => Map<string, TxbObject[]>;
}
export type Query_Param = {
    objectid: string;
    callback: (protocol: Protocol, response: SuiObjectResponse, param: Query_Param, option: SuiObjectDataOptions) => void;
    parser?: (result: any[], guardid: string, chain_sense_bsc: Uint8Array, constant?: GuardConstant) => boolean;
    data?: any;
    constants?: GuardConstant;
};
export {};
//# sourceMappingURL=protocol.d.ts.map