/**
 * A dynamic record is a key-value list which can contain keys/values you are not aware of at compile time.
 */
import { Field, type From, type InferProvable, Option, type ProvableHashable, Unconstrained } from 'o1js';
import { type ProvableHashableType } from '../o1js-missing.ts';
export { DynamicRecord, GenericRecord, type UnknownRecord, type DynamicRecordClass, extractProperty, };
type DynamicRecord<TKnown = any> = DynamicRecordBase<TKnown>;
type DynamicRecordClass<AKnown extends Record<string, any>> = ReturnType<typeof DynamicRecord<AKnown>>;
declare function DynamicRecord<AKnown extends Record<string, ProvableHashableType>, TKnown extends {
    [K in keyof AKnown]: InferProvable<AKnown[K]>;
} = {
    [K in keyof AKnown]: InferProvable<AKnown[K]>;
}>(knownShape: AKnown, { maxEntries }: {
    maxEntries: number;
}): {
    new (value: DynamicRecordRaw): {
        readonly maxEntries: number;
        readonly knownShape: { [K in keyof TKnown]: ProvableHashableType<TKnown[K]>; };
        get<K extends keyof TKnown & string>(key: K): TKnown[K];
        entries: Option<{
            key: Field;
            value: Field;
        }>[];
        actual: Unconstrained<UnknownRecord>;
        getAny<A extends ProvableHashableType>(valueType: A, key: string): import("node_modules/o1js/dist/node/bindings/lib/provable-generic.js").InferProvable<import("node_modules/o1js/dist/node/lib/provable/types/provable-intf.js").ToProvable<A>, import("node_modules/o1js/dist/node/lib/provable/field.js").Field>;
        hash(): Field;
    };
    from<T extends From<AKnown> & UnknownRecord>(value: T): DynamicRecordBase<TKnown>;
    fromShape<A extends AKnown>(type: A, value: { [K in keyof A]: From<A[K]>; }): DynamicRecordBase<TKnown>;
    readonly shape: { [K in keyof TKnown]: ProvableHashableType<TKnown[K]>; };
    provable: ProvableHashable<DynamicRecordBase<TKnown>, UnknownRecord>;
};
declare namespace DynamicRecord {
    var Base: typeof DynamicRecordBase;
}
type GenericRecord = GenericRecordBase;
declare function GenericRecord({ maxEntries }: {
    maxEntries: number;
}): {
    new (value: DynamicRecordRaw): {
        readonly maxEntries: number;
        entries: Option<{
            key: Field;
            value: Field;
        }>[];
        actual: Unconstrained<UnknownRecord>;
        readonly knownShape: {};
        getAny<A extends ProvableHashableType>(valueType: A, key: string): import("node_modules/o1js/dist/node/bindings/lib/provable-generic.js").InferProvable<import("node_modules/o1js/dist/node/lib/provable/types/provable-intf.js").ToProvable<A>, import("node_modules/o1js/dist/node/lib/provable/field.js").Field>;
        hash(): Field;
    };
    from(actual: UnknownRecord): GenericRecordBase;
};
declare namespace GenericRecord {
    var Base: typeof GenericRecordBase;
}
declare class GenericRecordBase {
    entries: Option<{
        key: Field;
        value: Field;
    }>[];
    actual: Unconstrained<UnknownRecord>;
    constructor(value: DynamicRecordRaw);
    get maxEntries(): number;
    get knownShape(): {};
    static from(actual: UnknownRecord): GenericRecordBase;
    getAny<A extends ProvableHashableType>(valueType: A, key: string): import("node_modules/o1js/dist/node/bindings/lib/provable-generic.js").InferProvable<import("node_modules/o1js/dist/node/lib/provable/types/provable-intf.js").ToProvable<A>, import("node_modules/o1js/dist/node/lib/provable/field.js").Field>;
    hash(): Field;
}
declare class DynamicRecordBase<TKnown = any> extends GenericRecordBase {
    get knownShape(): {
        [K in keyof TKnown]: ProvableHashableType<TKnown[K]>;
    };
    get<K extends keyof TKnown & string>(key: K): TKnown[K];
}
type DynamicRecordRaw = {
    entries: Option<{
        key: Field;
        value: Field;
    }>[];
    actual: Unconstrained<UnknownRecord>;
};
type UnknownRecord = Record<string, unknown>;
declare function extractProperty(data: unknown, key: string): unknown;
