@@ -38,9 +38,17 @@ import {
3838 fieldFromRust ,
3939} from './bindings/conversion-base.js' ;
4040import { ConversionCore , ConversionCores } from './napi-conversion-core.js' ;
41+ import type { Field } from './bindings/field.js' ;
4142
4243export { napiProofConversion } ;
4344
45+ const fieldToRust_ = ( x : Field ) => fieldToRust ( x ) ;
46+ const proofEvaluationsToRust = mapProofEvaluations ( fieldToRust_ ) ;
47+ const proofEvaluationsFromRust = mapProofEvaluations ( fieldFromRust ) ;
48+ const pointEvalsOptionToRust = mapPointEvalsOption ( fieldToRust_ ) ;
49+ const pointEvalsOptionFromRust = mapPointEvalsOption ( fieldFromRust ) ;
50+
51+
4452type NapiProofEvaluations = [
4553 0 ,
4654 MlOption < PointEvaluations < Uint8Array > > ,
@@ -111,7 +119,7 @@ function proofConversionPerField(
111119 let zComm = core . polyCommToRust ( commitments [ 2 ] ) ;
112120 let tComm = core . polyCommToRust ( commitments [ 3 ] ) ;
113121 let lookup = MlOption . mapFrom ( commitments [ 4 ] , lookupCommitmentsToRust ) ;
114- return new ProverCommitments ( wComm , zComm , tComm , lookup ) ;
122+ return new ProverCommitments ( wComm as any , zComm as any , tComm as any , lookup as any ) ;
115123 }
116124 function commitmentsFromRust ( commitments : NapiProverCommitments ) : ProverCommitments {
117125 let wComm = core . polyCommsFromRust ( commitments . w_comm ) ;
@@ -126,7 +134,7 @@ function proofConversionPerField(
126134 let sorted = core . polyCommsToRust ( lookup [ 1 ] ) ;
127135 let aggreg = core . polyCommToRust ( lookup [ 2 ] ) ;
128136 let runtime = MlOption . mapFrom ( lookup [ 3 ] , core . polyCommToRust ) ;
129- return new LookupCommitments ( sorted , aggreg , runtime ) ;
137+ return new LookupCommitments ( sorted as any , aggreg as any , runtime as any ) ;
130138 }
131139 function lookupCommitmentsFromRust ( lookup : NapiLookupCommitments ) : LookupCommitments {
132140 let sorted = core . polyCommsFromRust ( lookup . sorted ) ;
@@ -146,15 +154,15 @@ function proofConversionPerField(
146154 r . push ( ri ) ;
147155 }
148156 return new OpeningProof (
149- core . pointsToRust ( l ) ,
150- core . pointsToRust ( r ) ,
157+ core . pointsToRust ( l ) as any ,
158+ core . pointsToRust ( r ) as any ,
151159 core . pointToRust ( delta ) ,
152160 fieldToRust ( z1 ) ,
153161 fieldToRust ( z2 ) ,
154162 core . pointToRust ( sg )
155163 ) ;
156164 }
157- function openingProofFromRust ( proof : NapiOpeningProof ) : OpeningProof {
165+ function openingProofFromRust ( proof : any ) : OpeningProof {
158166 let [ , ...l ] = core . pointsFromRust ( proof . lr_0 ) ;
159167 let [ , ...r ] = core . pointsFromRust ( proof . lr_1 ) ;
160168 let n = l . length ;
@@ -214,7 +222,7 @@ function proofConversionPerField(
214222 ftEval1 ,
215223 public_ ,
216224 prevChallengeScalars ,
217- prevChallengeComms
225+ prevChallengeComms as any
218226 ) ;
219227 } ,
220228 proofFromRust ( wasmProof : NapiProverProof ) : ProofWithPublic {
@@ -260,6 +268,85 @@ function proofConversionPerField(
260268 } ;
261269}
262270
271+ function createMapPointEvals < Field1 , Field2 > ( map : ( x : Field1 ) => Field2 ) {
272+ return ( evals : PointEvaluations < Field1 > ) : PointEvaluations < Field2 > => {
273+ let [ , zeta , zeta_omega ] = evals ;
274+ return [ 0 , MlArray . map ( zeta , map ) , MlArray . map ( zeta_omega , map ) ] ;
275+ } ;
276+ }
277+
278+ function mapPointEvalsOption < Field1 , Field2 > ( map : ( x : Field1 ) => Field2 ) {
279+ return ( evals : MlOption < PointEvaluations < Field1 > > ) =>
280+ MlOption . map ( evals , createMapPointEvals ( map ) ) ;
281+ }
282+
283+ function mapProofEvaluations < Field1 , Field2 > ( map : ( x : Field1 ) => Field2 ) {
284+ const mapPointEvals = createMapPointEvals ( map ) ;
285+
286+ const mapPointEvalsOption = (
287+ evals : MlOption < PointEvaluations < Field1 > >
288+ ) : MlOption < PointEvaluations < Field2 > > => MlOption . map ( evals , mapPointEvals ) ;
289+
290+ return function mapProofEvaluations ( evals : ProofEvaluations < Field1 > ) : ProofEvaluations < Field2 > {
291+ let [
292+ ,
293+ w ,
294+ z ,
295+ s ,
296+ coeffs ,
297+ genericSelector ,
298+ poseidonSelector ,
299+ completeAddSelector ,
300+ mulSelector ,
301+ emulSelector ,
302+ endomulScalarSelector ,
303+ rangeCheck0Selector ,
304+ rangeCheck1Selector ,
305+ foreignFieldAddSelector ,
306+ foreignFieldMulSelector ,
307+ xorSelector ,
308+ rotSelector ,
309+ lookupAggregation ,
310+ lookupTable ,
311+ lookupSorted ,
312+ runtimeLookupTable ,
313+ runtimeLookupTableSelector ,
314+ xorLookupSelector ,
315+ lookupGateLookupSelector ,
316+ rangeCheckLookupSelector ,
317+ foreignFieldMulLookupSelector ,
318+ ] = evals ;
319+ return [
320+ 0 ,
321+ MlTuple . map ( w , mapPointEvals ) ,
322+ mapPointEvals ( z ) ,
323+ MlTuple . map ( s , mapPointEvals ) ,
324+ MlTuple . map ( coeffs , mapPointEvals ) ,
325+ mapPointEvals ( genericSelector ) ,
326+ mapPointEvals ( poseidonSelector ) ,
327+ mapPointEvals ( completeAddSelector ) ,
328+ mapPointEvals ( mulSelector ) ,
329+ mapPointEvals ( emulSelector ) ,
330+ mapPointEvals ( endomulScalarSelector ) ,
331+ mapPointEvalsOption ( rangeCheck0Selector ) ,
332+ mapPointEvalsOption ( rangeCheck1Selector ) ,
333+ mapPointEvalsOption ( foreignFieldAddSelector ) ,
334+ mapPointEvalsOption ( foreignFieldMulSelector ) ,
335+ mapPointEvalsOption ( xorSelector ) ,
336+ mapPointEvalsOption ( rotSelector ) ,
337+ mapPointEvalsOption ( lookupAggregation ) ,
338+ mapPointEvalsOption ( lookupTable ) ,
339+ MlArray . map ( lookupSorted , mapPointEvalsOption ) ,
340+ mapPointEvalsOption ( runtimeLookupTable ) ,
341+ mapPointEvalsOption ( runtimeLookupTableSelector ) ,
342+ mapPointEvalsOption ( xorLookupSelector ) ,
343+ mapPointEvalsOption ( lookupGateLookupSelector ) ,
344+ mapPointEvalsOption ( rangeCheckLookupSelector ) ,
345+ mapPointEvalsOption ( foreignFieldMulLookupSelector ) ,
346+ ] ;
347+ } ;
348+ }
349+
263350// helper
264351
265352type RemoveLeadingZero < T extends [ 0 , ...any ] > = T extends [ 0 , ...infer U ] ? U : never ;
0 commit comments