Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: use emulated.FieldParams as type parameter to generic Curve and Pairing #901

Merged
merged 16 commits into from Nov 10, 2023

Conversation

ivokub
Copy link
Collaborator

@ivokub ivokub commented Nov 3, 2023

Description

For the PLONK and KZG verifiers we need to work on the scalar fields. However, in the existing parametrization we didn't have access to the field parameters and the 2-chain scalars weren't compatible.

This PR makes the generic Curve and Pairing interfaces parametric with emulated.FieldParams which defines the scalar field. Accordingly, we update all the implementations to follow the convention. As now the scalars are emulated elements, then we also defined 2-chain scalars to be emulated elements which is more conventional.

NB! This PR depends on #900 so that should be merged before.

Type of change

  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How has this been tested?

All existing tests pass as is.

How has this been benchmarked?

Not benchmarked.

Checklist:

  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • I have added tests that prove my fix is effective or that my feature works
  • I did not modify files generated from templates
  • golangci-lint does not output errors locally
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

@ivokub ivokub added consolidate strengthen an existing feature zk-evm labels Nov 3, 2023
@ivokub ivokub self-assigned this Nov 3, 2023
@ivokub
Copy link
Collaborator Author

ivokub commented Nov 6, 2023

Also @yelhousni - this also impact KZG verifier.

Copy link

github-actions bot commented Nov 7, 2023

📦 github.com/consensys/gnark/std/algebra/native/sw_bls12377
TestMarshalScalar 0s

TestMarshalScalar/bw6_761 0s

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 0 == 1
        	            	sw_bls12377.(*MarshalScalarTest).Define
        	            		g1_test.go:47
        	            	
        	            	witness:{"X":{"Limbs":["8156853329741982713","3068138849464570087","15990919781714332387","1157640988544703959"]},"R":[0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,1,0,1,1,0,0,0,0,1,1,1,1,0,1,1,1,0,1,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,1,0,0,1,1,0,1,1,0,0,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,0,1,0,1,0,1,0,1,0,0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,0,1,1,1,1,0,1,1,0,1,1,1,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,0,0,1]}
        	Test:       	TestMarshalScalar/bw6_761

📦 github.com/consensys/gnark/std/algebra/native/sw_bls24315
TestMarshalScalar 0s

TestMarshalScalar/bw6_633 0s

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 0 == 1
        	            	sw_bls24315.(*MarshalScalarTest).Define
        	            		g1_test.go:47
        	            	
        	            	witness:{"X":{"Limbs":["3326230124356164029","714488970745469180","16417430617600612646","1347093845144562971"]},"R":[0,0,0,1,0,0,1,0,1,0,1,1,0,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,1,1,0,0,0,0,0,1,1,0,1,1,1,1,0,1,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,0,1,1,0,0,1,1,0,1,1,1,0,0,0,1,0,1,0,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,0,1,1,1,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,1,0,1,1,1,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,1,1,0,1,1,0,0,1,1,0,1,1,1,1,0,1]}
        	Test:       	TestMarshalScalar/bw6_633

📦 github.com/consensys/gnark/std/commitments/kzg
TestKZGVerificationTwoChain 40ms

TestKZGVerificationTwoChain/bw6_761 30ms

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 149836714850269720934438391082781387947376490293086919020861934986775094735624021395194491938548386398108807978600 == 1
        	            	fields_bls12377.(*E2).AssertIsEqual
        	            		e2.go:237
        	            	fields_bls12377.(*E6).AssertIsEqual
        	            		e6.go:299
        	            	fields_bls12377.(*E12).AssertIsEqual
        	            		e12.go:560
        	            	sw_bls12377.(*Pairing).PairingCheck
        	            		pairing2.go:188
        	            	kzg.(*Verifier[...]).AssertProof
        	            		verifier.go:258
        	            	kzg.(*KZGVerificationCircuit[...]).Define
        	            		verifier_test.go:56
        	            	
        	            	witness:schema is inconsistent with Witness
        	Test:       	TestKZGVerificationTwoChain/bw6_761

TestKZGVerificationTwoChain2 60ms

TestKZGVerificationTwoChain2/bw6_633 50ms

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 16120764669520962039785580209459313949512639442102778955259534445742350557226818159690408615334 == 1
        	            	fields_bls24315.(*E2).AssertIsEqual
        	            		e2.go:240
        	            	fields_bls24315.(*E4).AssertIsEqual
        	            		e4.go:249
        	            	fields_bls24315.(*E12).AssertIsEqual
        	            		e12.go:311
        	            	fields_bls24315.(*E24).AssertIsEqual
        	            		e24.go:568
        	            	sw_bls24315.(*Pairing).PairingCheck
        	            		pairing2.go:188
        	            	kzg.(*Verifier[...]).AssertProof
        	            		verifier.go:258
        	            	kzg.(*KZGVerificationCircuit[...]).Define
        	            		verifier_test.go:56
        	            	
        	            	witness:schema is inconsistent with Witness
        	Test:       	TestKZGVerificationTwoChain2/bw6_633

📦 github.com/consensys/gnark/std/recursion
TestHashMarshalScalar 50ms

TestHashMarshalScalar/#01 0s

TestHashMarshalScalar/#01/bw6_761 0s

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 92798767362117070691201253674479572603981331041610282949792077223865605767 == 192073472593785708112435212341387486718018880030771031457955703344491808404
        	            	recursion_test.(*hashMarshalScalarCircuit[...]).Define
        	            		wrapped_hash_test.go:189
        	            	
        	            	witness:{"Scalar":{"Limbs":["15580439985346699239","14830235236036943554","1751756658799062346","51019030540560640"]},"Expected":"192073472593785708112435212341387486718018880030771031457955703344491808404"}
        	Test:       	TestHashMarshalScalar/#01/bw6_761

TestHashMarshalScalar/#02 0s

TestHashMarshalScalar/#02/bw6_633 0s

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 114300419764862296362243810852731803026004052504551754960768658306444735100 == 272362994429422692423226357711259522619865129856146078277062213516732348610
        	            	recursion_test.(*hashMarshalScalarCircuit[...]).Define
        	            		wrapped_hash_test.go:189
        	            	
        	            	witness:{"Scalar":{"Limbs":["9445851164512094335","3919806527670130680","5576857269393096590","566944741996319843"]},"Expected":"272362994429422692423226357711259522619865129856146078277062213516732348610"}
        	Test:       	TestHashMarshalScalar/#02/bw6_633

Copy link

github-actions bot commented Nov 7, 2023

📦 github.com/consensys/gnark/std/commitments/kzg
TestKZGVerificationTwoChain 60ms

TestKZGVerificationTwoChain/bw6_761 50ms

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 66701263701397516900661102244558881742818505018335197563333744399600335938147016897895048882457339614495484170117 == 1
        	            	fields_bls12377.(*E2).AssertIsEqual
        	            		e2.go:237
        	            	fields_bls12377.(*E6).AssertIsEqual
        	            		e6.go:299
        	            	fields_bls12377.(*E12).AssertIsEqual
        	            		e12.go:560
        	            	sw_bls12377.(*Pairing).PairingCheck
        	            		pairing2.go:195
        	            	kzg.(*Verifier[...]).AssertProof
        	            		verifier.go:258
        	            	kzg.(*KZGVerificationCircuit[...]).Define
        	            		verifier_test.go:56
        	            	
        	            	witness:schema is inconsistent with Witness
        	Test:       	TestKZGVerificationTwoChain/bw6_761

TestKZGVerificationTwoChain2 70ms

TestKZGVerificationTwoChain2/bw6_633 60ms

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 14783592095170323457783773776789255774360161352365297597898680477069399509159689223988124282600 == 1
        	            	fields_bls24315.(*E2).AssertIsEqual
        	            		e2.go:240
        	            	fields_bls24315.(*E4).AssertIsEqual
        	            		e4.go:249
        	            	fields_bls24315.(*E12).AssertIsEqual
        	            		e12.go:311
        	            	fields_bls24315.(*E24).AssertIsEqual
        	            		e24.go:568
        	            	sw_bls24315.(*Pairing).PairingCheck
        	            		pairing2.go:195
        	            	kzg.(*Verifier[...]).AssertProof
        	            		verifier.go:258
        	            	kzg.(*KZGVerificationCircuit[...]).Define
        	            		verifier_test.go:56
        	            	
        	            	witness:schema is inconsistent with Witness
        	Test:       	TestKZGVerificationTwoChain2/bw6_633

Copy link

github-actions bot commented Nov 8, 2023

📦 github.com/consensys/gnark/std/commitments/kzg
TestKZGVerificationTwoChain 40ms

TestKZGVerificationTwoChain/bw6_761 30ms

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 183668272043299524080062540612391353521035773639581317936544738626651813133565230561682411310631609118189282557511 == 1
        	            	fields_bls12377.(*E2).AssertIsEqual
        	            		e2.go:237
        	            	fields_bls12377.(*E6).AssertIsEqual
        	            		e6.go:299
        	            	fields_bls12377.(*E12).AssertIsEqual
        	            		e12.go:560
        	            	sw_bls12377.(*Pairing).PairingCheck
        	            		pairing2.go:198
        	            	kzg.(*Verifier[...]).AssertProof
        	            		verifier.go:258
        	            	kzg.(*KZGVerificationCircuit[...]).Define
        	            		verifier_test.go:56
        	            	
        	            	witness:schema is inconsistent with Witness
        	Test:       	TestKZGVerificationTwoChain/bw6_761

TestKZGVerificationTwoChain2 90ms

TestKZGVerificationTwoChain2/bw6_633 80ms

    assert.go:200: 
        	Error Trace:	/home/runner/work/gnark/gnark/test/assert.go:200
        	            				/home/runner/work/gnark/gnark/test/assert_checkcircuit.go:50
        	            				/home/runner/work/gnark/gnark/test/assert.go:66
        	Error:      	[assertIsEqual] 38051229909386083520280943873056033020155172487213661803726160403533161395897839145379468534897 == 1
        	            	fields_bls24315.(*E2).AssertIsEqual
        	            		e2.go:240
        	            	fields_bls24315.(*E4).AssertIsEqual
        	            		e4.go:249
        	            	fields_bls24315.(*E12).AssertIsEqual
        	            		e12.go:311
        	            	fields_bls24315.(*E24).AssertIsEqual
        	            		e24.go:568
        	            	sw_bls24315.(*Pairing).PairingCheck
        	            		pairing2.go:198
        	            	kzg.(*Verifier[...]).AssertProof
        	            		verifier.go:258
        	            	kzg.(*KZGVerificationCircuit[...]).Define
        	            		verifier_test.go:56
        	            	
        	            	witness:schema is inconsistent with Witness
        	Test:       	TestKZGVerificationTwoChain2/bw6_633

@ivokub ivokub mentioned this pull request Nov 8, 2023
@ivokub ivokub merged commit 29cadaa into master Nov 10, 2023
7 checks passed
@ivokub ivokub deleted the refactor/scalar-params branch November 10, 2023 17:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
consolidate strengthen an existing feature zk-evm
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants