o1js
Version:
TypeScript framework for zk-SNARKs and zkApps
278 lines (277 loc) • 18.9 kB
TypeScript
/**
* This file contains bindings for JSOO written in TS and integrated with our normal code base.
* It is exposed to JSOO by populating a global variable with an object.
* It gets imported as the first thing in ../../bindings.js so that the global variable is ready by the time JSOO code gets executed.
*/
import type * as rustNamespace from '../compiled/node_bindings/kimchi_wasm.cjs';
import { fieldsFromRustFlat, fieldsToRustFlat } from './bindings/conversion-base.js';
export { Napi, Wasm, RustConversion, getRustConversion };
type Rust = typeof rustNamespace;
type Wasm = Rust;
type Napi = Rust;
type BackendKind = 'wasm' | 'native';
type WasmConversion = ReturnType<typeof buildWasmRustConversion>;
type NapiConversion = ReturnType<typeof buildNapiRustConversion>;
type RustConversion<B extends BackendKind = BackendKind> = B extends 'wasm' ? WasmConversion : NapiConversion;
declare function getRustConversion(rust: Rust): RustConversion;
declare function buildWasmRustConversion(wasm: Rust): {
fp: {
proofToRust([, public_evals, proof]: import("./bindings/kimchi-types.js").ProofWithPublic): rustNamespace.WasmFpProverProof | rustNamespace.WasmFqProverProof;
proofFromRust(wasmProof: rustNamespace.WasmFpProverProof | rustNamespace.WasmFqProverProof): import("./bindings/kimchi-types.js").ProofWithPublic;
runtimeTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTable>): Uint32Array;
runtimeTableCfgsToRust([, ...tableCfgs]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTableCfg>): Uint32Array;
lookupTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").LookupTable>): Uint32Array;
oraclesToRust(oracles: import("./bindings/kimchi-types.js").Oracles): rustNamespace.WasmFpOracles | rustNamespace.WasmFqOracles;
oraclesFromRust(oracles: rustNamespace.WasmFpOracles | rustNamespace.WasmFqOracles): import("./bindings/kimchi-types.js").Oracles;
shiftsToRust([, ...shifts]: import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>): rustNamespace.WasmFpShifts | rustNamespace.WasmFqShifts;
shiftsFromRust(s: rustNamespace.WasmFpShifts | rustNamespace.WasmFqShifts): import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>;
verifierIndexToRust(vk: import("./bindings/kimchi-types.js").VerifierIndex): rustNamespace.WasmFpPlonkVerifierIndex | rustNamespace.WasmFqPlonkVerifierIndex;
verifierIndexFromRust(vk: rustNamespace.WasmFpPlonkVerifierIndex | rustNamespace.WasmFqPlonkVerifierIndex): import("./bindings/kimchi-types.js").VerifierIndex;
wireToRust([, row, col]: import("./bindings/kimchi-types.js").Wire): rustNamespace.Wire;
vectorToRust: typeof fieldsToRustFlat;
vectorFromRust: typeof fieldsFromRustFlat;
gateToRust(gate: import("./bindings/kimchi-types.js").Gate): rustNamespace.WasmFpGate | rustNamespace.WasmFqGate;
gateFromRust(wasmGate: rustNamespace.WasmFpGate | rustNamespace.WasmFqGate): never;
pointToRust(point: import("./bindings/curve.js").OrInfinity): import("./bindings/conversion-base.js").WasmAffine;
pointFromRust: typeof import("./bindings/conversion-base.js").affineFromRust;
pointsToRust([, ...points]: import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>): Uint32Array;
pointsFromRust(points: Uint32Array): import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>;
polyCommToRust(polyComm: import("./bindings/kimchi-types.js").PolyComm): rustNamespace.WasmFpPolyComm | rustNamespace.WasmFqPolyComm;
polyCommFromRust(polyComm: rustNamespace.WasmFpPolyComm | rustNamespace.WasmFqPolyComm): import("./bindings/kimchi-types.js").PolyComm;
polyCommsToRust([, ...comms]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>): Uint32Array;
polyCommsFromRust(rustComms: Uint32Array): import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>;
};
fq: {
proofToRust([, public_evals, proof]: import("./bindings/kimchi-types.js").ProofWithPublic): rustNamespace.WasmFpProverProof | rustNamespace.WasmFqProverProof;
proofFromRust(wasmProof: rustNamespace.WasmFpProverProof | rustNamespace.WasmFqProverProof): import("./bindings/kimchi-types.js").ProofWithPublic;
runtimeTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTable>): Uint32Array;
runtimeTableCfgsToRust([, ...tableCfgs]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTableCfg>): Uint32Array;
lookupTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").LookupTable>): Uint32Array;
oraclesToRust(oracles: import("./bindings/kimchi-types.js").Oracles): rustNamespace.WasmFpOracles | rustNamespace.WasmFqOracles;
oraclesFromRust(oracles: rustNamespace.WasmFpOracles | rustNamespace.WasmFqOracles): import("./bindings/kimchi-types.js").Oracles;
shiftsToRust([, ...shifts]: import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>): rustNamespace.WasmFpShifts | rustNamespace.WasmFqShifts;
shiftsFromRust(s: rustNamespace.WasmFpShifts | rustNamespace.WasmFqShifts): import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>;
verifierIndexToRust(vk: import("./bindings/kimchi-types.js").VerifierIndex): rustNamespace.WasmFpPlonkVerifierIndex | rustNamespace.WasmFqPlonkVerifierIndex;
verifierIndexFromRust(vk: rustNamespace.WasmFpPlonkVerifierIndex | rustNamespace.WasmFqPlonkVerifierIndex): import("./bindings/kimchi-types.js").VerifierIndex;
wireToRust([, row, col]: import("./bindings/kimchi-types.js").Wire): rustNamespace.Wire;
vectorToRust: typeof fieldsToRustFlat;
vectorFromRust: typeof fieldsFromRustFlat;
gateToRust(gate: import("./bindings/kimchi-types.js").Gate): rustNamespace.WasmFpGate | rustNamespace.WasmFqGate;
gateFromRust(wasmGate: rustNamespace.WasmFpGate | rustNamespace.WasmFqGate): never;
pointToRust(point: import("./bindings/curve.js").OrInfinity): import("./bindings/conversion-base.js").WasmAffine;
pointFromRust: typeof import("./bindings/conversion-base.js").affineFromRust;
pointsToRust([, ...points]: import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>): Uint32Array;
pointsFromRust(points: Uint32Array): import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>;
polyCommToRust(polyComm: import("./bindings/kimchi-types.js").PolyComm): rustNamespace.WasmFpPolyComm | rustNamespace.WasmFqPolyComm;
polyCommFromRust(polyComm: rustNamespace.WasmFpPolyComm | rustNamespace.WasmFqPolyComm): import("./bindings/kimchi-types.js").PolyComm;
polyCommsToRust([, ...comms]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>): Uint32Array;
polyCommsFromRust(rustComms: Uint32Array): import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>;
};
fieldsToRustFlat: typeof fieldsToRustFlat;
fieldsFromRustFlat: typeof fieldsFromRustFlat;
wireToRust: ([, row, col]: import("./bindings/kimchi-types.js").Wire) => rustNamespace.Wire;
mapMlArrayToRustVector: <TMl, TRust extends {}>([, ...array]: import("../../lib/ml/base.js").MlArray<TMl>, map: (x: TMl) => TRust) => Uint32Array;
};
declare function buildNapiRustConversion(napi: Rust): {
fp: {
oraclesToRust(oracles: import("./bindings/kimchi-types.js").Oracles): import("./native/napi-wrappers.js").NapiOracles;
oraclesFromRust(oracles: import("./native/napi-wrappers.js").NapiOracles): import("./bindings/kimchi-types.js").Oracles;
shiftsToRust([, ...shifts]: import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>): import("./native/napi-wrappers.js").NapiShiftsShape;
shiftsFromRust(s: import("./native/napi-wrappers.js").NapiShiftsShape): import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>;
verifierIndexToRust(vk: import("./bindings/kimchi-types.js").VerifierIndex): import("./native/napi-wrappers.js").NapiVerifierIndex;
verifierIndexFromRust(vk: import("./native/napi-wrappers.js").NapiVerifierIndex): import("./bindings/kimchi-types.js").VerifierIndex;
proofToRust([, public_evals, proof]: import("./bindings/kimchi-types.js").ProofWithPublic): import("./native/napi-wrappers.js").NapiProverProof;
proofFromRust(napiProof: import("./native/napi-wrappers.js").NapiProverProof): import("./bindings/kimchi-types.js").ProofWithPublic;
runtimeTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTable>): import("./native/napi-wrappers.js").NapiRuntimeTable[];
runtimeTableCfgsToRust([, ...tableCfgs]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTableCfg>): import("./native/napi-wrappers.js").NapiRuntimeTableCfg[];
lookupTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").LookupTable>): import("./native/napi-wrappers.js").NapiLookupTable[];
vectorToRust: (fields: import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>) => Uint8Array;
vectorFromRust: typeof fieldsFromRustFlat;
wireToRust: ([, row, col]: import("./bindings/kimchi-types.js").Wire) => {
row: number;
col: number;
};
gateToRust: (gate: import("./bindings/kimchi-types.js").Gate) => {
typ: number;
wires: {
readonly w0: {
row: number;
col: number;
};
readonly w1: {
row: number;
col: number;
};
readonly w2: {
row: number;
col: number;
};
readonly w3: {
row: number;
col: number;
};
readonly w4: {
row: number;
col: number;
};
readonly w5: {
row: number;
col: number;
};
readonly w6: {
row: number;
col: number;
};
};
coeffs: number[];
};
gateFromRust: (gate: {
typ: number;
wires: {
w0: {
row: number;
col: number;
};
w1: {
row: number;
col: number;
};
w2: {
row: number;
col: number;
};
w3: {
row: number;
col: number;
};
w4: {
row: number;
col: number;
};
w5: {
row: number;
col: number;
};
w6: {
row: number;
col: number;
};
};
coeffs: number[] | Uint8Array;
}) => import("./bindings/kimchi-types.js").Gate;
affineToRust: (pt: import("./bindings/curve.js").OrInfinity) => import("./native/napi-wrappers.js").NapiAffine;
affineFromRust: (pt: import("./native/napi-wrappers.js").NapiAffine) => import("./bindings/curve.js").OrInfinity;
pointToRust: (pt: import("./bindings/curve.js").OrInfinity) => import("./native/napi-wrappers.js").NapiAffine;
pointFromRust: (pt: import("./native/napi-wrappers.js").NapiAffine) => import("./bindings/curve.js").OrInfinity;
pointsToRust: ([, ...points]: import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>) => import("./native/napi-wrappers.js").NapiAffine[];
pointsFromRust: (points: ArrayLike<import("./native/napi-wrappers.js").NapiAffine>) => import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>;
polyCommToRust: (polyComm: import("./bindings/kimchi-types.js").PolyComm) => import("./native/napi-wrappers.js").NapiPolyComm;
polyCommFromRust: (polyComm: import("./native/napi-wrappers.js").NapiPolyComm) => import("./bindings/kimchi-types.js").PolyComm;
polyCommsToRust: ([, ...comms]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>) => import("./native/napi-wrappers.js").NapiPolyComm[];
polyCommsFromRust: (rustComms: unknown) => import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>;
};
fq: {
oraclesToRust(oracles: import("./bindings/kimchi-types.js").Oracles): import("./native/napi-wrappers.js").NapiOracles;
oraclesFromRust(oracles: import("./native/napi-wrappers.js").NapiOracles): import("./bindings/kimchi-types.js").Oracles;
shiftsToRust([, ...shifts]: import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>): import("./native/napi-wrappers.js").NapiShiftsShape;
shiftsFromRust(s: import("./native/napi-wrappers.js").NapiShiftsShape): import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>;
verifierIndexToRust(vk: import("./bindings/kimchi-types.js").VerifierIndex): import("./native/napi-wrappers.js").NapiVerifierIndex;
verifierIndexFromRust(vk: import("./native/napi-wrappers.js").NapiVerifierIndex): import("./bindings/kimchi-types.js").VerifierIndex;
proofToRust([, public_evals, proof]: import("./bindings/kimchi-types.js").ProofWithPublic): import("./native/napi-wrappers.js").NapiProverProof;
proofFromRust(napiProof: import("./native/napi-wrappers.js").NapiProverProof): import("./bindings/kimchi-types.js").ProofWithPublic;
runtimeTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTable>): import("./native/napi-wrappers.js").NapiRuntimeTable[];
runtimeTableCfgsToRust([, ...tableCfgs]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").RuntimeTableCfg>): import("./native/napi-wrappers.js").NapiRuntimeTableCfg[];
lookupTablesToRust([, ...tables]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").LookupTable>): import("./native/napi-wrappers.js").NapiLookupTable[];
vectorToRust: (fields: import("../../lib/ml/base.js").MlArray<import("./bindings/field.js").Field>) => Uint8Array;
vectorFromRust: typeof fieldsFromRustFlat;
wireToRust: ([, row, col]: import("./bindings/kimchi-types.js").Wire) => {
row: number;
col: number;
};
gateToRust: (gate: import("./bindings/kimchi-types.js").Gate) => {
typ: number;
wires: {
readonly w0: {
row: number;
col: number;
};
readonly w1: {
row: number;
col: number;
};
readonly w2: {
row: number;
col: number;
};
readonly w3: {
row: number;
col: number;
};
readonly w4: {
row: number;
col: number;
};
readonly w5: {
row: number;
col: number;
};
readonly w6: {
row: number;
col: number;
};
};
coeffs: number[];
};
gateFromRust: (gate: {
typ: number;
wires: {
w0: {
row: number;
col: number;
};
w1: {
row: number;
col: number;
};
w2: {
row: number;
col: number;
};
w3: {
row: number;
col: number;
};
w4: {
row: number;
col: number;
};
w5: {
row: number;
col: number;
};
w6: {
row: number;
col: number;
};
};
coeffs: number[] | Uint8Array;
}) => import("./bindings/kimchi-types.js").Gate;
affineToRust: (pt: import("./bindings/curve.js").OrInfinity) => import("./native/napi-wrappers.js").NapiAffine;
affineFromRust: (pt: import("./native/napi-wrappers.js").NapiAffine) => import("./bindings/curve.js").OrInfinity;
pointToRust: (pt: import("./bindings/curve.js").OrInfinity) => import("./native/napi-wrappers.js").NapiAffine;
pointFromRust: (pt: import("./native/napi-wrappers.js").NapiAffine) => import("./bindings/curve.js").OrInfinity;
pointsToRust: ([, ...points]: import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>) => import("./native/napi-wrappers.js").NapiAffine[];
pointsFromRust: (points: ArrayLike<import("./native/napi-wrappers.js").NapiAffine>) => import("../../lib/ml/base.js").MlArray<import("./bindings/curve.js").OrInfinity>;
polyCommToRust: (polyComm: import("./bindings/kimchi-types.js").PolyComm) => import("./native/napi-wrappers.js").NapiPolyComm;
polyCommFromRust: (polyComm: import("./native/napi-wrappers.js").NapiPolyComm) => import("./bindings/kimchi-types.js").PolyComm;
polyCommsToRust: ([, ...comms]: import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>) => import("./native/napi-wrappers.js").NapiPolyComm[];
polyCommsFromRust: (rustComms: unknown) => import("../../lib/ml/base.js").MlArray<import("./bindings/kimchi-types.js").PolyComm>;
};
fieldsToRustFlat: typeof fieldsToRustFlat;
fieldsFromRustFlat: typeof fieldsFromRustFlat;
wireToRust: ([, row, col]: import("./bindings/kimchi-types.js").Wire) => {
row: number;
col: number;
};
mapMlArrayToRustVector: <TMl, TRust>([, ...array]: [0, ...TMl[]], map: (x: TMl) => TRust) => TRust[];
};