/**
 * NFTProgram is a ZkProgram providing zero-knowledge proofs for updating NFT metadata.
 * It includes methods for inserting metadata entries and merging proofs.
 *
 * @module NFTProgram
 */
import { Field, Cache, SelfProof, Signature } from "o1js";
import { NFTState } from "../interfaces/types.js";
import { MetadataMap } from "../metadata/metadata.js";
export { NFTProgram };
/**
 * Defines the NFTProgram ZkProgram with methods for updating NFT metadata.
 */
declare const NFTProgram: {
    name: string;
    maxProofsVerified(): Promise<0 | 1 | 2>;
    compile: (options?: {
        cache?: Cache;
        forceRecompile?: boolean;
        proofsEnabled?: boolean;
        withRuntimeTables?: boolean;
        numChunks?: number;
    }) => Promise<{
        verificationKey: {
            data: string;
            hash: Field;
        };
    }>;
    verify: (proof: import("o1js").Proof<NFTState, NFTState>) => Promise<boolean>;
    digest: () => Promise<string>;
    analyzeMethods: () => Promise<{
        insertMetadata: import("node_modules/o1js/dist/node/lib/provable/core/provable-context.js").ConstraintSystemSummary & {
            proofs: import("node_modules/o1js/dist/node/lib/proof-system/proof.js").ProofClass[];
        };
        merge: import("node_modules/o1js/dist/node/lib/provable/core/provable-context.js").ConstraintSystemSummary & {
            proofs: import("node_modules/o1js/dist/node/lib/proof-system/proof.js").ProofClass[];
        };
    }>;
    publicInputType: typeof NFTState;
    publicOutputType: typeof NFTState;
    privateInputTypes: {
        insertMetadata: [typeof MetadataMap, typeof import("node_modules/o1js/dist/node/lib/provable/field.js").Field & ((x: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/core/fieldvar.js").FieldConst | import("node_modules/o1js/dist/node/lib/provable/core/fieldvar.js").FieldVar | import("node_modules/o1js/dist/node/lib/provable/field.js").Field) => import("node_modules/o1js/dist/node/lib/provable/field.js").Field), typeof import("node_modules/o1js/dist/node/lib/provable/field.js").Field & ((x: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/core/fieldvar.js").FieldConst | import("node_modules/o1js/dist/node/lib/provable/core/fieldvar.js").FieldVar | import("node_modules/o1js/dist/node/lib/provable/field.js").Field) => import("node_modules/o1js/dist/node/lib/provable/field.js").Field), typeof Signature];
        merge: [typeof SelfProof, typeof SelfProof];
    };
    auxiliaryOutputTypes: {
        insertMetadata: typeof MetadataMap;
        merge: undefined;
    };
    rawMethods: {
        insertMetadata: (publicInput: NFTState, args_0: import("node_modules/o1js/dist/node/lib/provable/merkle-tree-indexed.js").IndexedMerkleMapBase, args_1: import("node_modules/o1js/dist/node/lib/provable/field.js").Field, args_2: import("node_modules/o1js/dist/node/lib/provable/field.js").Field, args_3: Signature) => Promise<{
            publicOutput: NFTState;
            auxiliaryOutput: import("node_modules/o1js/dist/node/lib/provable/merkle-tree-indexed.js").IndexedMerkleMapBase;
        }>;
        merge: (publicInput: NFTState, args_0: SelfProof<unknown, unknown>, args_1: SelfProof<unknown, unknown>) => Promise<{
            publicOutput: NFTState;
        }>;
    };
    Proof: {
        new ({ proof, publicInput, publicOutput, maxProofsVerified, }: {
            proof: import("node_modules/o1js/dist/node/bindings.js").Pickles.Proof;
            publicInput: NFTState;
            publicOutput: NFTState;
            maxProofsVerified: 0 | 1 | 2;
        }): import("o1js").Proof<NFTState, NFTState>;
        fromJSON<S extends import("node_modules/o1js/dist/node/lib/util/types.js").Subclass<typeof import("o1js").Proof>>(this: S, { maxProofsVerified, proof: proofString, publicInput: publicInputJson, publicOutput: publicOutputJson, }: import("o1js").JsonProof): Promise<import("o1js").Proof<import("o1js").InferProvable<S["publicInputType"]>, import("o1js").InferProvable<S["publicOutputType"]>>>;
        dummy<Input, OutPut>(publicInput: Input, publicOutput: OutPut, maxProofsVerified: 0 | 1 | 2, domainLog2?: number): Promise<import("o1js").Proof<Input, OutPut>>;
        readonly provable: {
            toFields: (value: import("o1js").Proof<any, any>) => import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
            toAuxiliary: (value?: import("o1js").Proof<any, any> | undefined) => any[];
            fromFields: (fields: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[], aux: any[]) => import("o1js").Proof<any, any>;
            sizeInFields(): number;
            check: (value: import("o1js").Proof<any, any>) => void;
            toValue: (x: import("o1js").Proof<any, any>) => import("node_modules/o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>;
            fromValue: (x: import("o1js").Proof<any, any> | import("node_modules/o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>) => import("o1js").Proof<any, any>;
            toCanonical?: ((x: import("o1js").Proof<any, any>) => import("o1js").Proof<any, any>) | undefined;
        };
        publicInputType: import("o1js").FlexibleProvable<any>;
        publicOutputType: import("o1js").FlexibleProvable<any>;
        tag: () => {
            name: string;
        };
        publicFields(value: import("o1js").ProofBase): {
            input: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
            output: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[];
        };
        _proofFromBase64(proofString: import("node_modules/o1js/dist/node/bindings.js").Base64ProofString, maxProofsVerified: 0 | 1 | 2): unknown;
        _proofToBase64(proof: import("node_modules/o1js/dist/node/bindings.js").Pickles.Proof, maxProofsVerified: 0 | 1 | 2): string;
    };
    proofsEnabled: boolean;
    setProofsEnabled(proofsEnabled: boolean): void;
} & {
    insertMetadata: (publicInput: NFTState | {
        immutableState: import("../interfaces/types.js").NFTImmutableState | {
            canChangeOwnerByProof: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canTransfer: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canApprove: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeMetadata: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeStorage: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeName: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeMetadataVerificationKeyHash: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canPause: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            address: import("o1js").PublicKey | {
                x: Field | bigint;
                isOdd: import("o1js").Bool | boolean;
            };
            tokenId: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
            id: number | bigint | import("o1js").UInt64;
        };
        name: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
        owner: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        approved: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        metadata: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
        storage: import("@silvana-one/storage").Storage | {
            url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
        };
        version: number | bigint | import("o1js").UInt64;
        isPaused: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
        metadataVerificationKeyHash: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
        creator: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        context: import("../interfaces/types.js").NFTTransactionContext | {
            custom: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
        };
        oracleAddress: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
    }, args_0: import("node_modules/o1js/dist/node/lib/provable/merkle-tree-indexed.js").IndexedMerkleMapBase | {
        root: bigint;
        length: bigint;
        data: {
            nodes: (bigint | undefined)[][];
            sortedLeaves: {
                readonly value: bigint;
                readonly key: bigint;
                readonly nextKey: bigint;
                readonly index: number;
            }[];
        };
    }, args_1: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field, args_2: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field, args_3: Signature | {
        r: Field | bigint;
        s: import("o1js").Scalar | bigint;
    }) => Promise<{
        proof: import("o1js").Proof<NFTState, NFTState>;
        auxiliaryOutput: import("node_modules/o1js/dist/node/lib/provable/merkle-tree-indexed.js").IndexedMerkleMapBase;
    }>;
    merge: (publicInput: NFTState | {
        immutableState: import("../interfaces/types.js").NFTImmutableState | {
            canChangeOwnerByProof: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canTransfer: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canApprove: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeMetadata: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeStorage: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeName: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canChangeMetadataVerificationKeyHash: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            canPause: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
            address: import("o1js").PublicKey | {
                x: Field | bigint;
                isOdd: import("o1js").Bool | boolean;
            };
            tokenId: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
            id: number | bigint | import("o1js").UInt64;
        };
        name: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
        owner: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        approved: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        metadata: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
        storage: import("@silvana-one/storage").Storage | {
            url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
        };
        version: number | bigint | import("o1js").UInt64;
        isPaused: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
        metadataVerificationKeyHash: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
        creator: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
        context: import("../interfaces/types.js").NFTTransactionContext | {
            custom: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
        };
        oracleAddress: import("o1js").PublicKey | {
            x: Field | bigint;
            isOdd: import("o1js").Bool | boolean;
        };
    }, args_0: import("o1js").Proof<any, any> | import("node_modules/o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>, args_1: import("o1js").Proof<any, any> | import("node_modules/o1js/dist/node/lib/proof-system/proof.js").ProofValue<any, any>) => Promise<{
        proof: import("o1js").Proof<NFTState, NFTState>;
        auxiliaryOutput: undefined;
    }>;
};
