export interface WitnessFactoryInput {
    /**
     * 32-byte AES-GCM-encryptable secret derived once per wallet session
     * from the seed key. Stable across reconnects for the same viewing key.
     */
    attestationSecret: Uint8Array;
    /**
     * Per-CALL witnesses for the ZK-predicate circuits (`commitValue` /
     * `provePredicate`). Absent for `attest`/`grant`/`revoke`, which don't
     * invoke `attested_value()`/`value_salt()`. Serialized as primitives so it
     * survives the worker-thread boundary:
     *   - `attestedValue`: decimal string of the Uint<64> value being proven.
     *   - `valueSalt`: 64-char hex of the 32-byte commitment opening.
     */
    witnessValues?: {
        attestedValue: string;
        valueSalt: string;
    };
}
/**
 * Derives the per-session AttestationVault secret from the wallet seed.
 *
 * Output: 32 raw bytes, fed directly to the `local_secret_key()` witness.
 * Domain-separated by a v1 label so future contracts that need their own
 * secret can derive a fresh one without colliding.
 */
export declare function deriveAttestationSecret(seedBytes: Uint8Array): Uint8Array;
/**
 * Builds the AttestationVault witness object.
 *
 * `local_secret_key()` returns the same 32-byte secret on every call for a
 * given session — that determinism is what `persistentHash(local_secret_key())`
 * inside the circuit relies on to produce a stable `attester_id`.
 *
 * The witness signature matches the generated `Witnesses<PS>` type:
 *   local_secret_key(ctx): [PS, Uint8Array]
 * We pass `ctx.privateState` through unchanged because this witness reads
 * but does not mutate the private state slot.
 */
export declare function buildAttestationVaultWitnesses(input: WitnessFactoryInput): any;
export type WitnessFactory = (input: WitnessFactoryInput) => any;
export declare function getContractWitnessFactory(contractName: string): WitnessFactory | undefined;
export declare function hasContractWitnessFactory(contractName: string): boolean;
