11import type {
2- WasmPastaFpLookupTable ,
32 WasmFpRuntimeTable ,
43 WasmPastaFpRuntimeTableCfg ,
5- WasmPastaFqLookupTable ,
4+ WasmPastaFpLookupTable ,
65 WasmFqRuntimeTable ,
76 WasmPastaFqRuntimeTableCfg ,
7+ WasmPastaFqLookupTable ,
88 WasmVecVecFp ,
99 WasmVecVecFq ,
10- WasmFpProverCommitments ,
11- WasmFqProverCommitments ,
12- WasmFpOpeningProof ,
13- WasmFqOpeningProof ,
14- WasmFpProverProof ,
15- WasmFqProverProof ,
16- WasmFpLookupCommitments ,
17- WasmFqLookupCommitments ,
1810} from '../compiled/node_bindings/plonk_wasm.cjs' ;
1911import type * as napiNamespace from '../compiled/node_bindings/plonk_wasm.cjs' ;
20- import type {
21- RuntimeTable ,
22- RuntimeTableCfg ,
23- LookupTable ,
24- ProofWithPublic ,
25- ProverProof ,
26- LookupCommitments ,
27- PolyComm , PointEvaluations , ProofEvaluations ,
28- RecursionChallenge ,
29- ProverCommitments ,
30- OpeningProof ,
31- OrInfinity ,
32- } from './bindings/kimchi-types.js' ;
33- import { MlArray , MlTuple , MlOption } from '../../lib/ml/base.js' ;
34- import {
35- fieldsToRustFlat ,
36- fieldToRust ,
37- fieldsFromRustFlat ,
38- fieldFromRust ,
39- } from './bindings/conversion-base.js' ;
12+ import type { RuntimeTable , RuntimeTableCfg , LookupTable } from './bindings/kimchi-types.js' ;
13+ import { MlArray } from '../../lib/ml/base.js' ;
14+ import { fieldsToRustFlat } from './bindings/conversion-base.js' ;
4015import { ConversionCore , ConversionCores } from './napi-conversion-core.js' ;
4116
4217export { napiProofConversion } ;
43-
44- type NapiProofEvaluations = [
45- 0 ,
46- MlOption < PointEvaluations < Uint8Array > > ,
47- ...RemoveLeadingZero < ProofEvaluations < Uint8Array > > ,
48- ] ;
4918
5019type napi = typeof napiNamespace ;
5120
52- type NapiProverCommitments = WasmFpProverCommitments | WasmFqProverCommitments ;
53- type NapiOpeningProof = WasmFpOpeningProof | WasmFqOpeningProof ;
54- type NapiProverProof = WasmFpProverProof | WasmFqProverProof ;
55- type NapiLookupCommitments = WasmFpLookupCommitments | WasmFqLookupCommitments ;
5621type NapiRuntimeTable = WasmFpRuntimeTable | WasmFqRuntimeTable ;
5722type NapiRuntimeTableCfg = WasmPastaFpRuntimeTableCfg | WasmPastaFqRuntimeTableCfg ;
5823type NapiLookupTable = WasmPastaFpLookupTable | WasmPastaFqLookupTable ;
5924
6025type NapiClasses = {
61- ProverCommitments : typeof WasmFpProverCommitments | typeof WasmFqProverCommitments ;
62- OpeningProof : typeof WasmFpOpeningProof | typeof WasmFqOpeningProof ;
6326 VecVec : typeof WasmVecVecFp | typeof WasmVecVecFq ;
64- ProverProof : typeof WasmFpProverProof | typeof WasmFqProverProof ;
65- LookupCommitments : typeof WasmFpLookupCommitments | typeof WasmFqLookupCommitments ;
6627 RuntimeTable : typeof WasmFpRuntimeTable | typeof WasmFqRuntimeTable ;
6728 RuntimeTableCfg : typeof WasmPastaFpRuntimeTableCfg | typeof WasmPastaFqRuntimeTableCfg ;
6829 LookupTable : typeof WasmPastaFpLookupTable | typeof WasmPastaFqLookupTable ;
@@ -71,21 +32,13 @@ type NapiClasses = {
7132function napiProofConversion ( napi : napi , core : ConversionCores ) {
7233 return {
7334 fp : proofConversionPerField ( core . fp , {
74- ProverCommitments : napi . WasmFpProverCommitments ,
75- OpeningProof : napi . WasmFpOpeningProof ,
7635 VecVec : napi . WasmVecVecFp ,
77- ProverProof : napi . WasmFpProverProof ,
78- LookupCommitments : napi . WasmFpLookupCommitments ,
7936 RuntimeTable : napi . WasmFpRuntimeTable ,
8037 RuntimeTableCfg : napi . WasmPastaFpRuntimeTableCfg ,
8138 LookupTable : napi . WasmPastaFpLookupTable ,
8239 } ) ,
8340 fq : proofConversionPerField ( core . fq , {
84- ProverCommitments : napi . WasmFqProverCommitments ,
85- OpeningProof : napi . WasmFqOpeningProof ,
8641 VecVec : napi . WasmVecVecFq ,
87- ProverProof : napi . WasmFqProverProof ,
88- LookupCommitments : napi . WasmFqLookupCommitments ,
8942 RuntimeTable : napi . WasmFqRuntimeTable ,
9043 RuntimeTableCfg : napi . WasmPastaFqRuntimeTableCfg ,
9144 LookupTable : napi . WasmPastaFqLookupTable ,
@@ -95,79 +48,8 @@ function napiProofConversion(napi: napi, core: ConversionCores) {
9548
9649function proofConversionPerField (
9750 core : ConversionCore ,
98- {
99- ProverCommitments,
100- OpeningProof,
101- VecVec,
102- ProverProof,
103- LookupCommitments,
104- RuntimeTable,
105- RuntimeTableCfg,
106- LookupTable,
107- } : NapiClasses
51+ { VecVec, RuntimeTable, RuntimeTableCfg, LookupTable } : NapiClasses
10852) {
109- function commitmentsToRust ( commitments : ProverCommitments ) : NapiProverCommitments {
110- let wComm = core . polyCommsToRust ( commitments [ 1 ] ) ;
111- let zComm = core . polyCommToRust ( commitments [ 2 ] ) ;
112- let tComm = core . polyCommToRust ( commitments [ 3 ] ) ;
113- let lookup = MlOption . mapFrom ( commitments [ 4 ] , lookupCommitmentsToRust ) ;
114- return new ProverCommitments ( wComm , zComm , tComm , lookup ) ;
115- }
116- function commitmentsFromRust ( commitments : NapiProverCommitments ) : ProverCommitments {
117- let wComm = core . polyCommsFromRust ( commitments . w_comm ) ;
118- let zComm = core . polyCommFromRust ( commitments . z_comm ) ;
119- let tComm = core . polyCommFromRust ( commitments . t_comm ) ;
120- let lookup = MlOption . mapTo ( commitments . lookup , lookupCommitmentsFromRust ) ;
121- commitments . free ( ) ;
122- return [ 0 , wComm as MlTuple < PolyComm , 15 > , zComm , tComm , lookup ] ;
123- }
124-
125- function lookupCommitmentsToRust ( lookup : LookupCommitments ) : NapiLookupCommitments {
126- let sorted = core . polyCommsToRust ( lookup [ 1 ] ) ;
127- let aggreg = core . polyCommToRust ( lookup [ 2 ] ) ;
128- let runtime = MlOption . mapFrom ( lookup [ 3 ] , core . polyCommToRust ) ;
129- return new LookupCommitments ( sorted , aggreg , runtime ) ;
130- }
131- function lookupCommitmentsFromRust ( lookup : NapiLookupCommitments ) : LookupCommitments {
132- let sorted = core . polyCommsFromRust ( lookup . sorted ) ;
133- let aggreg = core . polyCommFromRust ( lookup . aggreg ) ;
134- let runtime = MlOption . mapTo ( lookup . runtime , core . polyCommFromRust ) ;
135- lookup . free ( ) ;
136- return [ 0 , sorted , aggreg , runtime ] ;
137- }
138-
139- function openingProofToRust ( proof : OpeningProof ) : NapiOpeningProof {
140- let [ _ , [ , ...lr ] , delta , z1 , z2 , sg ] = proof ;
141- // We pass l and r as separate vectors over the FFI
142- let l : MlArray < OrInfinity > = [ 0 ] ;
143- let r : MlArray < OrInfinity > = [ 0 ] ;
144- for ( let [ , li , ri ] of lr ) {
145- l . push ( li ) ;
146- r . push ( ri ) ;
147- }
148- return new OpeningProof (
149- core . pointsToRust ( l ) ,
150- core . pointsToRust ( r ) ,
151- core . pointToRust ( delta ) ,
152- fieldToRust ( z1 ) ,
153- fieldToRust ( z2 ) ,
154- core . pointToRust ( sg )
155- ) ;
156- }
157- function openingProofFromRust ( proof : NapiOpeningProof ) : OpeningProof {
158- let [ , ...l ] = core . pointsFromRust ( proof . lr_0 ) ;
159- let [ , ...r ] = core . pointsFromRust ( proof . lr_1 ) ;
160- let n = l . length ;
161- if ( n !== r . length ) throw Error ( 'openingProofFromRust: l and r length mismatch.' ) ;
162- let lr = l . map < [ 0 , OrInfinity , OrInfinity ] > ( ( li , i ) => [ 0 , li , r [ i ] ] ) ;
163- let delta = core . pointFromRust ( proof . delta ) ;
164- let z1 = fieldFromRust ( proof . z1 ) ;
165- let z2 = fieldFromRust ( proof . z2 ) ;
166- let sg = core . pointFromRust ( proof . sg ) ;
167- proof . free ( ) ;
168- return [ 0 , [ 0 , ...lr ] , delta , z1 , z2 , sg ] ;
169- }
170-
17153 function runtimeTableToRust ( [ , id , data ] : RuntimeTable ) : NapiRuntimeTable {
17254 return new RuntimeTable ( id , core . vectorToRust ( data ) ) ;
17355 }
@@ -184,68 +66,8 @@ function proofConversionPerField(
18466 }
18567 return new LookupTable ( id , wasmData ) ;
18668 }
187-
188-
18969
19070 return {
191- proofToRust ( [ , public_evals , proof ] : ProofWithPublic ) : NapiProverProof {
192- let commitments = commitmentsToRust ( proof [ 1 ] ) ;
193- let openingProof = openingProofToRust ( proof [ 2 ] ) ;
194- let [ , ...evals ] = proofEvaluationsToRust ( proof [ 3 ] ) ;
195- let publicEvals = pointEvalsOptionToRust ( public_evals ) ;
196- // TODO typed as `any` in wasm-bindgen, this has the correct type
197- let evalsActual : NapiProofEvaluations = [ 0 , publicEvals , ...evals ] ;
198-
199- let ftEval1 = fieldToRust ( proof [ 4 ] ) ;
200- let public_ = fieldsToRustFlat ( proof [ 5 ] ) ;
201- let [ , ...prevChallenges ] = proof [ 6 ] ;
202- let n = prevChallenges . length ;
203- let prevChallengeScalars = new VecVec ( n ) ;
204- let prevChallengeCommsMl : MlArray < PolyComm > = [ 0 ] ;
205- for ( let [ , scalars , comms ] of prevChallenges ) {
206- prevChallengeScalars . push ( fieldsToRustFlat ( scalars ) ) ;
207- prevChallengeCommsMl . push ( comms ) ;
208- }
209- let prevChallengeComms = core . polyCommsToRust ( prevChallengeCommsMl ) ;
210- return new ProverProof (
211- commitments ,
212- openingProof ,
213- evalsActual ,
214- ftEval1 ,
215- public_ ,
216- prevChallengeScalars ,
217- prevChallengeComms
218- ) ;
219- } ,
220- proofFromRust ( wasmProof : NapiProverProof ) : ProofWithPublic {
221- let commitments = commitmentsFromRust ( wasmProof . commitments ) ;
222- let openingProof = openingProofFromRust ( wasmProof . proof ) ;
223- // TODO typed as `any` in wasm-bindgen, this is the correct type
224- let [ , wasmPublicEvals , ...wasmEvals ] : NapiProofEvaluations = wasmProof . evals ;
225- let publicEvals = pointEvalsOptionFromRust ( wasmPublicEvals ) ;
226- let evals = proofEvaluationsFromRust ( [ 0 , ...wasmEvals ] ) ;
227-
228- let ftEval1 = fieldFromRust ( wasmProof . ft_eval1 ) ;
229- let public_ = fieldsFromRustFlat ( wasmProof . public_ ) ;
230- let prevChallengeScalars = wasmProof . prev_challenges_scalars ;
231- let [ , ...prevChallengeComms ] = core . polyCommsFromRust ( wasmProof . prev_challenges_comms ) ;
232- let prevChallenges = prevChallengeComms . map < RecursionChallenge > ( ( comms , i ) => {
233- let scalars = fieldsFromRustFlat ( prevChallengeScalars . get ( i ) ) ;
234- return [ 0 , scalars , comms ] ;
235- } ) ;
236- wasmProof . free ( ) ;
237- let proof : ProverProof = [
238- 0 ,
239- commitments ,
240- openingProof ,
241- evals ,
242- ftEval1 ,
243- public_ ,
244- [ 0 , ...prevChallenges ] ,
245- ] ;
246- return [ 0 , publicEvals , proof ] ;
247- } ,
248-
24971 runtimeTablesToRust ( [ , ...tables ] : MlArray < RuntimeTable > ) : NapiRuntimeTable [ ] {
25072 return tables . map ( runtimeTableToRust ) ;
25173 } ,
@@ -259,7 +81,3 @@ function proofConversionPerField(
25981 } ,
26082 } ;
26183}
262-
263- // helper
264-
265- type RemoveLeadingZero < T extends [ 0 , ...any ] > = T extends [ 0 , ...infer U ] ? U : never ;
0 commit comments