diff --git a/circuits/libs/spend.circom b/circuits/libs/spend.circom index 4308fc9..d0fd5d4 100644 --- a/circuits/libs/spend.circom +++ b/circuits/libs/spend.circom @@ -6,7 +6,10 @@ include "comparators.circom"; template Spend(maxInputs, maxOutputs) { // Public inputs signal input inputs_hashes[maxInputs]; // poseidon hashes of {amount, s} - signal input inputs_interest[maxInputs]; // uint32, max 1_000_000_000 interest multiplier, 9 - decimal, 1000_000_000 = 1 (100%), 1 - 0.000000001 (0.0000001%) + // uint32, max 2_000_000_000 (100% + 100%), min 0 (100% - 100%) + // 9 - decimals, 1_000_000_000 = 1, meaning no interest + // 2_000_000_001 = 2.000000001, or 0.000000001% interest + signal input inputs_interest_multiplier[maxInputs]; signal input outputs_hashes[maxOutputs]; // poseidon hashes of {amount, s} signal input public_output_amount; // uint208 public output amount @@ -34,8 +37,8 @@ template Spend(maxInputs, maxOutputs) { input_hashers[i].inputs[1] <== input_sValues[i]; inputs_hashes[i] === input_hashers[i].out; - // 2. Per-input scaled amount: amount * (1e9 + interest) - input_scaled_amounts[i] <== input_amounts[i] * (1000000000 + inputs_interest[i]); + // 2. Per-input scaled amount: amount * interest_multiplier + input_scaled_amounts[i] <== input_amounts[i] * inputs_interest_multiplier[i]; input_sum += input_scaled_amounts[i]; } diff --git a/circuits/spend_11/build/Verifier_spend_11.sol b/circuits/spend_11/build/Verifier_spend_11.sol index b9a41bb..46f6469 100644 --- a/circuits/spend_11/build/Verifier_spend_11.sol +++ b/circuits/spend_11/build/Verifier_spend_11.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 1459575766592316423577143905165608722420992672898602909450987968791742580721; uint256 constant Qlx = 288997766914999589654009773137793974014112498223982153991573713428301777587; uint256 constant Qly = 9479674489608074426198229070213013062777737846342680083196586545954615890004; - uint256 constant Qrx = 3243313416734363838398217171213872320275966134293852634583872158337736206228; - uint256 constant Qry = 19540656104658682187695537495476774154785660707953349954765370035697910980478; + uint256 constant Qrx = 8037452930422107823815671375903756003558356650734836923197301721130634243834; + uint256 constant Qry = 21243285276736097905888636845169768993544447557507583801008827213774770605095; uint256 constant Qox = 1099871903847047878360357490375956341312376559139126123677354060524419744290; uint256 constant Qoy = 2020956902076688667954065417514245028846589151425346278873428454054610872260; uint256 constant Qcx = 13981463159804410827383223753483813944194862557100130306771097259912189072982; uint256 constant Qcy = 8660254351820712418838773586043522418418459076479192104462870597304832922610; - uint256 constant S1x = 11951202513200125641902129723471112937153119144050149414055404128530661269129; - uint256 constant S1y = 16770356286771649627654074559802665216165795582788235080342194225992425124360; - uint256 constant S2x = 875181977125141301937964927733618856735602384400345804177429692129537715883; - uint256 constant S2y = 12589902284384628886501410698220868634116742157792153247213423762008621983593; + uint256 constant S1x = 6601268901122778335225529576817849117241527582166876710532235821262239160858; + uint256 constant S1y = 193596272508358204935319882306775421449675315418013158929925879488489439045; + uint256 constant S2x = 16635116007158277335012140262015821586641475540332256853722849238659508346152; + uint256 constant S2y = 3296104665521570876321418631032668990399532859897824112104714118632819847369; uint256 constant S3x = 16644617098992002976385133780334632196230425979955727900405758627434723685010; uint256 constant S3y = 7591816611980093484788709720289344648902430532003247318010584837321200633586; uint256 constant k1 = 2; diff --git a/circuits/spend_11/build/spend_11.r1cs b/circuits/spend_11/build/spend_11.r1cs index 5362e41..4c8d472 100644 Binary files a/circuits/spend_11/build/spend_11.r1cs and b/circuits/spend_11/build/spend_11.r1cs differ diff --git a/circuits/spend_11/build/spend_11.sym b/circuits/spend_11/build/spend_11.sym index 98fdf4a..2e088ec 100644 --- a/circuits/spend_11/build/spend_11.sym +++ b/circuits/spend_11/build/spend_11.sym @@ -1,5 +1,5 @@ 1,1,74,main.inputs_hashes[0] -2,2,74,main.inputs_interest[0] +2,2,74,main.inputs_interest_multiplier[0] 3,3,74,main.outputs_hashes[0] 4,4,74,main.public_output_amount 5,5,74,main.input_amounts[0] diff --git a/circuits/spend_11/build/spend_11.zkey b/circuits/spend_11/build/spend_11.zkey index 2bf6c6c..416af98 100644 Binary files a/circuits/spend_11/build/spend_11.zkey and b/circuits/spend_11/build/spend_11.zkey differ diff --git a/circuits/spend_11/build/spend_11_cpp/spend_11.cpp b/circuits/spend_11/build/spend_11_cpp/spend_11.cpp index b2cc1f7..073a474 100644 --- a/circuits/spend_11/build/spend_11_cpp/spend_11.cpp +++ b/circuits/spend_11/build/spend_11_cpp/spend_11.cpp @@ -259911,7 +259911,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 0; @@ -259945,23 +259945,22 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 0; cmp_index_ref_load = 0; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[0]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[0]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + 8]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + 1]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + 4],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + 4],&signalValues[mySignalStart + 1]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 8]); // line circom 39 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 8]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -259971,7 +259970,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259979,7 +259978,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 1; @@ -260013,9 +260012,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 1; cmp_index_ref_load = 1; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 2],&ctx->signalValues[ctx->componentMemory[mySubcomponents[1]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 2],&ctx->signalValues[ctx->componentMemory[mySubcomponents[1]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260050,15 +260049,15 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 2; cmp_index_ref_load = 2; {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[2]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[2]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 6]); // line circom 56 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 6]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -260068,15 +260067,15 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 3]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 3]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 3; i++){ diff --git a/circuits/spend_11/build/spend_11_cpp/spend_11.dat b/circuits/spend_11/build/spend_11_cpp/spend_11.dat index 7ae8826..618a069 100644 Binary files a/circuits/spend_11/build/spend_11_cpp/spend_11.dat and b/circuits/spend_11/build/spend_11_cpp/spend_11.dat differ diff --git a/circuits/spend_11/build/spend_11_js/spend_11.wasm b/circuits/spend_11/build/spend_11_js/spend_11.wasm index 29a92e2..7aaec15 100644 Binary files a/circuits/spend_11/build/spend_11_js/spend_11.wasm and b/circuits/spend_11/build/spend_11_js/spend_11.wasm differ diff --git a/circuits/spend_11/spend_11.circom b/circuits/spend_11/spend_11.circom index 0baa2ec..467f04d 100644 --- a/circuits/spend_11/spend_11.circom +++ b/circuits/spend_11/spend_11.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(1, 1); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(1, 1); \ No newline at end of file diff --git a/circuits/spend_12/build/Verifier_spend_12.sol b/circuits/spend_12/build/Verifier_spend_12.sol index 31a8ea8..04780e4 100644 --- a/circuits/spend_12/build/Verifier_spend_12.sol +++ b/circuits/spend_12/build/Verifier_spend_12.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 2862958861172975416409003387385675220916835649880961433005490929782289980031; uint256 constant Qlx = 4329745788430063251903427524829924594126695216940125515827773048639255515280; uint256 constant Qly = 11076376180622633981738050453144338630071000052683521892399822192069620086297; - uint256 constant Qrx = 7093528156492593164254189558831867148450599980384437649392432271152720866019; - uint256 constant Qry = 1120310243294061627597823078198258047031317832106891746887986383715077204643; + uint256 constant Qrx = 2253657970517368051150503130517838525055349461423659205659210996637154078387; + uint256 constant Qry = 21868832306958198743938006843486584616559664528491566558921587189939552295313; uint256 constant Qox = 9485169795184178833126785476469619733497716564574375856525335126065707019615; uint256 constant Qoy = 10756685357305867959161820399022608278936017282382705573681849431423342622668; uint256 constant Qcx = 14476898473678301282739112550321909089724779482491913200574257089908948197745; uint256 constant Qcy = 14612075719580978072641279998542783397839817254545513410152750203729889045261; - uint256 constant S1x = 19632986241511435067865694505517235671121630934258171338952727833257797985073; - uint256 constant S1y = 11157094665150479946808819083168173483997814299413365658222014573649243534992; - uint256 constant S2x = 7726597535579328041802181221187767764201814253835141621648377650300202375331; - uint256 constant S2y = 12801350021594001606862580292031528981763808111619077159981605728799467557679; + uint256 constant S1x = 1405793580327444066445071298901413168853033246092933681718160198145186064068; + uint256 constant S1y = 12083290395449752103772589332154466898549722910365694537976285818755107204339; + uint256 constant S2x = 18728240127324607860986861479467999969592448328761248884867099001852717148021; + uint256 constant S2y = 6582678160489234079356723188853719311073091891453414934298013633565317514949; uint256 constant S3x = 1066720386516553265337400518914313231887681742433820722306293956447215625613; uint256 constant S3y = 20744298715819978439805500664024885200117495864108781691751386629770470890092; uint256 constant k1 = 2; diff --git a/circuits/spend_12/build/spend_12.r1cs b/circuits/spend_12/build/spend_12.r1cs index d35ddcf..6b2bffe 100644 Binary files a/circuits/spend_12/build/spend_12.r1cs and b/circuits/spend_12/build/spend_12.r1cs differ diff --git a/circuits/spend_12/build/spend_12.sym b/circuits/spend_12/build/spend_12.sym index 4ac784c..6557e31 100644 --- a/circuits/spend_12/build/spend_12.sym +++ b/circuits/spend_12/build/spend_12.sym @@ -1,5 +1,5 @@ 1,1,74,main.inputs_hashes[0] -2,2,74,main.inputs_interest[0] +2,2,74,main.inputs_interest_multiplier[0] 3,3,74,main.outputs_hashes[0] 4,4,74,main.outputs_hashes[1] 5,5,74,main.public_output_amount diff --git a/circuits/spend_12/build/spend_12.zkey b/circuits/spend_12/build/spend_12.zkey index c00f603..f3bdfb6 100644 Binary files a/circuits/spend_12/build/spend_12.zkey and b/circuits/spend_12/build/spend_12.zkey differ diff --git a/circuits/spend_12/build/spend_12_cpp/spend_12.cpp b/circuits/spend_12/build/spend_12_cpp/spend_12.cpp index de1dd59..663426a 100644 --- a/circuits/spend_12/build/spend_12_cpp/spend_12.cpp +++ b/circuits/spend_12/build/spend_12_cpp/spend_12.cpp @@ -259927,7 +259927,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 0; @@ -259961,23 +259961,22 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 0; cmp_index_ref_load = 0; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[0]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[0]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + 11]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + 1]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + 5],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + 5],&signalValues[mySignalStart + 1]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 11]); // line circom 39 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 11]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -259987,7 +259986,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259995,7 +259994,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 1); @@ -260029,9 +260028,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 1); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 1); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 1)]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 1)]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260066,34 +260065,34 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 3); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 3); {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 3)]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 3)]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 7)]); // line circom 56 +Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 7)]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 4]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 4]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 5; i++){ diff --git a/circuits/spend_12/build/spend_12_cpp/spend_12.dat b/circuits/spend_12/build/spend_12_cpp/spend_12.dat index 4ee84f0..a9b1071 100644 Binary files a/circuits/spend_12/build/spend_12_cpp/spend_12.dat and b/circuits/spend_12/build/spend_12_cpp/spend_12.dat differ diff --git a/circuits/spend_12/build/spend_12_js/spend_12.wasm b/circuits/spend_12/build/spend_12_js/spend_12.wasm index 0ea343a..ba96911 100644 Binary files a/circuits/spend_12/build/spend_12_js/spend_12.wasm and b/circuits/spend_12/build/spend_12_js/spend_12.wasm differ diff --git a/circuits/spend_12/spend_12.circom b/circuits/spend_12/spend_12.circom index 80dd495..9107b68 100644 --- a/circuits/spend_12/spend_12.circom +++ b/circuits/spend_12/spend_12.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(1, 2); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(1, 2); \ No newline at end of file diff --git a/circuits/spend_121/build/Verifier_spend_121.sol b/circuits/spend_121/build/Verifier_spend_121.sol index 22a67f1..25e6412 100644 --- a/circuits/spend_121/build/Verifier_spend_121.sol +++ b/circuits/spend_121/build/Verifier_spend_121.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 11400607971672848304985908038021285436387884860496341051513616133146846087430; uint256 constant Qlx = 11098625316757912237100002101758915796300785051135285211853584035430935969510; uint256 constant Qly = 5864190940113252098184017789072067559025702715228019792504068004844333226569; - uint256 constant Qrx = 2379677926271615700987784067462383396583261889312392260564895810092851387888; - uint256 constant Qry = 6618454937430787823563544886165624927728220770963572489256810220889186723829; + uint256 constant Qrx = 19576368373738884556042913614010667617782628631624441102078342105064608089715; + uint256 constant Qry = 18397554987463494593091168675566515706247046315780359625002236381421117176019; uint256 constant Qox = 14459468608491765174273606343332255205707770444961166680912579017663848983059; uint256 constant Qoy = 19006667107767540284874626693776300284094596548758830037938476165985215972566; uint256 constant Qcx = 10246535753367140639402745289576322061092997691768892740262790995201646231251; uint256 constant Qcy = 5527017448669274200540060446857204915700788669162303970249321133633151134096; - uint256 constant S1x = 9942336080409416581507394126505385404430055803659853184360009008991059670789; - uint256 constant S1y = 13726513276193383812960028366793094847891484972336104065152228336175848356232; - uint256 constant S2x = 1520924964573313575401518513045658057609870979744431561524223618063302312541; - uint256 constant S2y = 16929339613351486583629817935863178794781724471807545255868122278254291881422; + uint256 constant S1x = 6502796491661884582565827980011634983627367860546893239093220144548841983575; + uint256 constant S1y = 11486187842626031106276071000647163119851366391553889122999630396856073787862; + uint256 constant S2x = 1700242695492005553171442977572660965957064310640519319405358459081662850206; + uint256 constant S2y = 12099770968351584153975643939138746471776126713887336818046655436768707450415; uint256 constant S3x = 15007525278228152364699769521426195878173584878318184906341184812974896205502; uint256 constant S3y = 12889312431442508803740065603386821867343316745856773303438466214607190220917; uint256 constant k1 = 2; diff --git a/circuits/spend_121/build/spend_121.r1cs b/circuits/spend_121/build/spend_121.r1cs index 97ae02c..d7bbc1a 100644 Binary files a/circuits/spend_121/build/spend_121.r1cs and b/circuits/spend_121/build/spend_121.r1cs differ diff --git a/circuits/spend_121/build/spend_121.sym b/circuits/spend_121/build/spend_121.sym index 023bb94..0b773d8 100644 --- a/circuits/spend_121/build/spend_121.sym +++ b/circuits/spend_121/build/spend_121.sym @@ -10,18 +10,18 @@ 10,10,74,main.inputs_hashes[9] 11,11,74,main.inputs_hashes[10] 12,12,74,main.inputs_hashes[11] -13,13,74,main.inputs_interest[0] -14,14,74,main.inputs_interest[1] -15,15,74,main.inputs_interest[2] -16,16,74,main.inputs_interest[3] -17,17,74,main.inputs_interest[4] -18,18,74,main.inputs_interest[5] -19,19,74,main.inputs_interest[6] -20,20,74,main.inputs_interest[7] -21,21,74,main.inputs_interest[8] -22,22,74,main.inputs_interest[9] -23,23,74,main.inputs_interest[10] -24,24,74,main.inputs_interest[11] +13,13,74,main.inputs_interest_multiplier[0] +14,14,74,main.inputs_interest_multiplier[1] +15,15,74,main.inputs_interest_multiplier[2] +16,16,74,main.inputs_interest_multiplier[3] +17,17,74,main.inputs_interest_multiplier[4] +18,18,74,main.inputs_interest_multiplier[5] +19,19,74,main.inputs_interest_multiplier[6] +20,20,74,main.inputs_interest_multiplier[7] +21,21,74,main.inputs_interest_multiplier[8] +22,22,74,main.inputs_interest_multiplier[9] +23,23,74,main.inputs_interest_multiplier[10] +24,24,74,main.inputs_interest_multiplier[11] 25,25,74,main.outputs_hashes[0] 26,26,74,main.public_output_amount 27,27,74,main.input_amounts[0] diff --git a/circuits/spend_121/build/spend_121.zkey b/circuits/spend_121/build/spend_121.zkey index 94bf766..a3fc93e 100644 Binary files a/circuits/spend_121/build/spend_121.zkey and b/circuits/spend_121/build/spend_121.zkey differ diff --git a/circuits/spend_121/build/spend_121_cpp/spend_121.cpp b/circuits/spend_121/build/spend_121_cpp/spend_121.cpp index e760a0a..550fc20 100644 --- a/circuits/spend_121/build/spend_121_cpp/spend_121.cpp +++ b/circuits/spend_121/build/spend_121_cpp/spend_121.cpp @@ -259919,7 +259919,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[95]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[95]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259953,34 +259953,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 52)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 26)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 26)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 52)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 52)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[95]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[95]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259988,7 +259987,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 12; @@ -260022,9 +260021,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 12; cmp_index_ref_load = 12; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 24],&ctx->signalValues[ctx->componentMemory[mySubcomponents[12]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 24],&ctx->signalValues[ctx->componentMemory[mySubcomponents[12]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260059,15 +260058,15 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 13; cmp_index_ref_load = 13; {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[13]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[13]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 50]); // line circom 56 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 50]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -260077,15 +260076,15 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 25]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 25]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 14; i++){ diff --git a/circuits/spend_121/build/spend_121_cpp/spend_121.dat b/circuits/spend_121/build/spend_121_cpp/spend_121.dat index df356f6..8094b65 100644 Binary files a/circuits/spend_121/build/spend_121_cpp/spend_121.dat and b/circuits/spend_121/build/spend_121_cpp/spend_121.dat differ diff --git a/circuits/spend_121/build/spend_121_js/spend_121.wasm b/circuits/spend_121/build/spend_121_js/spend_121.wasm index b291a4b..92183ca 100644 Binary files a/circuits/spend_121/build/spend_121_js/spend_121.wasm and b/circuits/spend_121/build/spend_121_js/spend_121.wasm differ diff --git a/circuits/spend_121/spend_121.circom b/circuits/spend_121/spend_121.circom index 8fe2e49..ea40c07 100644 --- a/circuits/spend_121/spend_121.circom +++ b/circuits/spend_121/spend_121.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(12, 1); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(12, 1); \ No newline at end of file diff --git a/circuits/spend_13/build/Verifier_spend_13.sol b/circuits/spend_13/build/Verifier_spend_13.sol index 03fddf9..96fd3c6 100644 --- a/circuits/spend_13/build/Verifier_spend_13.sol +++ b/circuits/spend_13/build/Verifier_spend_13.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 7241127251230801080932996650712109602050216284271839719172978475009294979000; uint256 constant Qlx = 6406228203686719163637907742493954244779926220612435383880067176933714482064; uint256 constant Qly = 19228818358130481914725449520095932909342143139747268479766010613997480541419; - uint256 constant Qrx = 3430767490488028755935380933453966584606497211779103836391192355892931095225; - uint256 constant Qry = 17605676031553786760889927081710307831425917117100703566620547592085922598222; + uint256 constant Qrx = 6947203075785338152985430666755537036899811365400342436282553412102421612800; + uint256 constant Qry = 2282783928346396933986249179938152777710353376125948372814720680110044295514; uint256 constant Qox = 4867519975249140175283850063706388391793673156411531390232849463158526943232; uint256 constant Qoy = 11259395117879930505674476196946460235659278159897987615019162202432570824404; uint256 constant Qcx = 9182603193055882685540729068315308988170179262306154256227567258453872164028; uint256 constant Qcy = 9651949669476474896435477151105307124140271072342475605424613848840756795368; - uint256 constant S1x = 10005765099885424200324118604237188086606928163786997250226163975861021048223; - uint256 constant S1y = 1152626170929706867464953960691146210108214296415913905780645947890735968254; - uint256 constant S2x = 17157797167871946633677280684158708577226353066998237086053919468344580325647; - uint256 constant S2y = 3494938044105217133430329564263833189814226215169728904843368273876717897871; + uint256 constant S1x = 2349951953369840512662641702209178019605768126186464134387187313595923099179; + uint256 constant S1y = 11532452859003493428844510462041293745814091892272745152796565890830780155858; + uint256 constant S2x = 3124274233548211130697653050549008995310449533944313879140252402056508950945; + uint256 constant S2y = 7843263623926225120749381220224869404665902364235938492917028823640027849670; uint256 constant S3x = 2045609709720653227396205664540630817619171867823154601325835943206321087481; uint256 constant S3y = 6418308075160631122024668641501743500551031067461651339229858657351379254852; uint256 constant k1 = 2; diff --git a/circuits/spend_13/build/spend_13.r1cs b/circuits/spend_13/build/spend_13.r1cs index 4344c8b..e41c72b 100644 Binary files a/circuits/spend_13/build/spend_13.r1cs and b/circuits/spend_13/build/spend_13.r1cs differ diff --git a/circuits/spend_13/build/spend_13.sym b/circuits/spend_13/build/spend_13.sym index b419b5d..0670b29 100644 --- a/circuits/spend_13/build/spend_13.sym +++ b/circuits/spend_13/build/spend_13.sym @@ -1,5 +1,5 @@ 1,1,74,main.inputs_hashes[0] -2,2,74,main.inputs_interest[0] +2,2,74,main.inputs_interest_multiplier[0] 3,3,74,main.outputs_hashes[0] 4,4,74,main.outputs_hashes[1] 5,5,74,main.outputs_hashes[2] diff --git a/circuits/spend_13/build/spend_13.zkey b/circuits/spend_13/build/spend_13.zkey index 1af2fbf..926e467 100644 Binary files a/circuits/spend_13/build/spend_13.zkey and b/circuits/spend_13/build/spend_13.zkey differ diff --git a/circuits/spend_13/build/spend_13_cpp/spend_13.cpp b/circuits/spend_13/build/spend_13_cpp/spend_13.cpp index 54efd99..a4f6bd6 100644 --- a/circuits/spend_13/build/spend_13_cpp/spend_13.cpp +++ b/circuits/spend_13/build/spend_13_cpp/spend_13.cpp @@ -259927,7 +259927,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 0; @@ -259961,23 +259961,22 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 0; cmp_index_ref_load = 0; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[0]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[0]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + 14]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + 1]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + 6],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + 6],&signalValues[mySignalStart + 1]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 14]); // line circom 39 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 14]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -259987,7 +259986,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259995,7 +259994,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 1); @@ -260029,9 +260028,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 1); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 1); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 1)]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 1)]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260066,34 +260065,34 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 4); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 4); {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 4)]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 4)]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 8)]); // line circom 56 +Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 8)]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 5]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 5]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 7; i++){ diff --git a/circuits/spend_13/build/spend_13_cpp/spend_13.dat b/circuits/spend_13/build/spend_13_cpp/spend_13.dat index 2e5f693..10914de 100644 Binary files a/circuits/spend_13/build/spend_13_cpp/spend_13.dat and b/circuits/spend_13/build/spend_13_cpp/spend_13.dat differ diff --git a/circuits/spend_13/build/spend_13_js/spend_13.wasm b/circuits/spend_13/build/spend_13_js/spend_13.wasm index e8e9c55..6d9d2cd 100644 Binary files a/circuits/spend_13/build/spend_13_js/spend_13.wasm and b/circuits/spend_13/build/spend_13_js/spend_13.wasm differ diff --git a/circuits/spend_13/spend_13.circom b/circuits/spend_13/spend_13.circom index 88244cf..08f6767 100644 --- a/circuits/spend_13/spend_13.circom +++ b/circuits/spend_13/spend_13.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(1, 3); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(1, 3); \ No newline at end of file diff --git a/circuits/spend_21/build/Verifier_spend_21.sol b/circuits/spend_21/build/Verifier_spend_21.sol index 7ae2859..5bbe525 100644 --- a/circuits/spend_21/build/Verifier_spend_21.sol +++ b/circuits/spend_21/build/Verifier_spend_21.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 4892233866195533509513843787493356477316860669788132498437562414047394755326; uint256 constant Qlx = 15318870165299008045002590377480756024446532827102079603479807059518884846934; uint256 constant Qly = 17825650001540381539413782768498841495995358912834367490313776400444503488447; - uint256 constant Qrx = 11742285768350708547195623290462559987749894104667463519072270326320556569823; - uint256 constant Qry = 18091866440857082577458913915893781570819680338362537771125428162090558278411; + uint256 constant Qrx = 15630354879193928056025870456024038180567601000581124592993460266002374941736; + uint256 constant Qry = 1986689813976854400282174346113120571333646175116206599967802465250224977271; uint256 constant Qox = 4069593120864648763024130715836174714757175795958765497584120110383408420073; uint256 constant Qoy = 15830491598016170033944641104151075472224374386542192865283029015041869772802; uint256 constant Qcx = 9014882878398338652779674296235390925159202858762992650665396216370635179848; uint256 constant Qcy = 21247603662882760739871585465244396055024883316326688005352163603525923440848; - uint256 constant S1x = 21801298566336119018305703970883868640189064332856214608655243866654332632151; - uint256 constant S1y = 7807105690998193101593506583838456096655397018404846258609874588284883650375; - uint256 constant S2x = 21493943073102807503140153197033218439163877303683936455407322345625112723771; - uint256 constant S2y = 12354224612244131077227286915832653177265734063500760775888734789190407395862; + uint256 constant S1x = 10246171985983318126204196705140421556038517779545706810085250771639853157314; + uint256 constant S1y = 388879651747545762126552612069597562610195475417496909193071889935937926820; + uint256 constant S2x = 8429357720806427829228321044906088824053553286191623181106707430323016634160; + uint256 constant S2y = 8592907475881837999009427345873718023666734674728994574849130766718758019916; uint256 constant S3x = 19647724273586817685545631048452167843367510382443515267145358500547983164547; uint256 constant S3y = 8264046650740868875930224413576605296355632559250756632181611232467770973239; uint256 constant k1 = 2; diff --git a/circuits/spend_21/build/spend_21.r1cs b/circuits/spend_21/build/spend_21.r1cs index 899d612..1524b7a 100644 Binary files a/circuits/spend_21/build/spend_21.r1cs and b/circuits/spend_21/build/spend_21.r1cs differ diff --git a/circuits/spend_21/build/spend_21.sym b/circuits/spend_21/build/spend_21.sym index fe1884e..b09c5d4 100644 --- a/circuits/spend_21/build/spend_21.sym +++ b/circuits/spend_21/build/spend_21.sym @@ -1,7 +1,7 @@ 1,1,74,main.inputs_hashes[0] 2,2,74,main.inputs_hashes[1] -3,3,74,main.inputs_interest[0] -4,4,74,main.inputs_interest[1] +3,3,74,main.inputs_interest_multiplier[0] +4,4,74,main.inputs_interest_multiplier[1] 5,5,74,main.outputs_hashes[0] 6,6,74,main.public_output_amount 7,7,74,main.input_amounts[0] diff --git a/circuits/spend_21/build/spend_21.zkey b/circuits/spend_21/build/spend_21.zkey index a47cca5..06d4cc4 100644 Binary files a/circuits/spend_21/build/spend_21.zkey and b/circuits/spend_21/build/spend_21.zkey differ diff --git a/circuits/spend_21/build/spend_21_cpp/spend_21.cpp b/circuits/spend_21/build/spend_21_cpp/spend_21.cpp index 56c9272..e5c2419 100644 --- a/circuits/spend_21/build/spend_21_cpp/spend_21.cpp +++ b/circuits/spend_21/build/spend_21_cpp/spend_21.cpp @@ -259919,7 +259919,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259953,34 +259953,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259988,7 +259987,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 2; @@ -260022,9 +260021,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 2; cmp_index_ref_load = 2; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 4],&ctx->signalValues[ctx->componentMemory[mySubcomponents[2]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 4],&ctx->signalValues[ctx->componentMemory[mySubcomponents[2]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260059,15 +260058,15 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 3; cmp_index_ref_load = 3; {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[3]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[3]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 10]); // line circom 56 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 10]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -260077,15 +260076,15 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 5]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 5]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 4; i++){ diff --git a/circuits/spend_21/build/spend_21_cpp/spend_21.dat b/circuits/spend_21/build/spend_21_cpp/spend_21.dat index 5cbbea1..1e30f4a 100644 Binary files a/circuits/spend_21/build/spend_21_cpp/spend_21.dat and b/circuits/spend_21/build/spend_21_cpp/spend_21.dat differ diff --git a/circuits/spend_21/build/spend_21_js/spend_21.wasm b/circuits/spend_21/build/spend_21_js/spend_21.wasm index 1641cc5..4267ffc 100644 Binary files a/circuits/spend_21/build/spend_21_js/spend_21.wasm and b/circuits/spend_21/build/spend_21_js/spend_21.wasm differ diff --git a/circuits/spend_21/spend_21.circom b/circuits/spend_21/spend_21.circom index ad4024d..d071bc7 100644 --- a/circuits/spend_21/spend_21.circom +++ b/circuits/spend_21/spend_21.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(2, 1); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(2, 1); \ No newline at end of file diff --git a/circuits/spend_22/build/Verifier_spend_22.sol b/circuits/spend_22/build/Verifier_spend_22.sol index 73ed5ea..ee31d63 100644 --- a/circuits/spend_22/build/Verifier_spend_22.sol +++ b/circuits/spend_22/build/Verifier_spend_22.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 11953573763789638742956508212161099438272732557439081878489970636755889989644; uint256 constant Qlx = 16770404187816639092568742225990439508846396204772015680345269099251092979968; uint256 constant Qly = 19914978295922847886551751371796051770820843961743977349676638501098188428861; - uint256 constant Qrx = 90135831134245637268017618199977233999014645591555312487682462619992512832; - uint256 constant Qry = 10215809197080494393476443604200847217093781992003991947746667602745328594261; + uint256 constant Qrx = 16951628242357347484699739353185355166603469725644212412310807421103190637336; + uint256 constant Qry = 3919801833478390361346259958260884713995947207094755467708076263015598754447; uint256 constant Qox = 14475704941366345490515648976033058239391990282603520599541769203814769467592; uint256 constant Qoy = 2361431281733938628522200612932144446930198202171899628379905107663025508333; uint256 constant Qcx = 11520946708480336957719943793290846468958056054320656834063771727679467559216; uint256 constant Qcy = 16428070643037829710120185980046480950675740650821096761124554258852303757714; - uint256 constant S1x = 11200318429578499233676981201375046478125074239840026004023565633460702016816; - uint256 constant S1y = 11254116916524825913410739758897729745965028356386194416452737894927668062313; - uint256 constant S2x = 19672439310246153208512451299238823464827438059433709237072621230441443609920; - uint256 constant S2y = 16658090368338118095980217869576692291607138337212498332016624555453682117011; + uint256 constant S1x = 7676948575042656452788367044435766305571668149715348133031036807226367835422; + uint256 constant S1y = 10260140332575823110744269611967403116823302812163160411066042182381964061920; + uint256 constant S2x = 1782471286613757515549235251181629340106673032889120951297356331779744424392; + uint256 constant S2y = 3238843714191781615376002412647119136857358629577642187529844399194358630753; uint256 constant S3x = 19297831884477215063278433510958196444153380001568978350499808056778030563298; uint256 constant S3y = 8804946444373977863200893559201259872296594060481443158342374462008564699067; uint256 constant k1 = 2; diff --git a/circuits/spend_22/build/spend_22.r1cs b/circuits/spend_22/build/spend_22.r1cs index c4eba44..e8a417b 100644 Binary files a/circuits/spend_22/build/spend_22.r1cs and b/circuits/spend_22/build/spend_22.r1cs differ diff --git a/circuits/spend_22/build/spend_22.sym b/circuits/spend_22/build/spend_22.sym index 5a515df..bf5fee7 100644 --- a/circuits/spend_22/build/spend_22.sym +++ b/circuits/spend_22/build/spend_22.sym @@ -1,7 +1,7 @@ 1,1,74,main.inputs_hashes[0] 2,2,74,main.inputs_hashes[1] -3,3,74,main.inputs_interest[0] -4,4,74,main.inputs_interest[1] +3,3,74,main.inputs_interest_multiplier[0] +4,4,74,main.inputs_interest_multiplier[1] 5,5,74,main.outputs_hashes[0] 6,6,74,main.outputs_hashes[1] 7,7,74,main.public_output_amount diff --git a/circuits/spend_22/build/spend_22.zkey b/circuits/spend_22/build/spend_22.zkey index f2c3557..781d8ad 100644 Binary files a/circuits/spend_22/build/spend_22.zkey and b/circuits/spend_22/build/spend_22.zkey differ diff --git a/circuits/spend_22/build/spend_22_cpp/spend_22.cpp b/circuits/spend_22/build/spend_22_cpp/spend_22.cpp index f1025ca..693c972 100644 --- a/circuits/spend_22/build/spend_22_cpp/spend_22.cpp +++ b/circuits/spend_22/build/spend_22_cpp/spend_22.cpp @@ -259935,7 +259935,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259969,34 +259969,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 15)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 7)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 7)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 15)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 15)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -260004,7 +260003,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 2); @@ -260038,9 +260037,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 2); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 2); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 4)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 2)]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 4)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 2)]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260075,34 +260074,34 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 4); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 4); {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 4)]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 4)]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 11)]); // line circom 56 +Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 11)]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 6]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 6]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 6; i++){ diff --git a/circuits/spend_22/build/spend_22_cpp/spend_22.dat b/circuits/spend_22/build/spend_22_cpp/spend_22.dat index 383ea4c..1429073 100644 Binary files a/circuits/spend_22/build/spend_22_cpp/spend_22.dat and b/circuits/spend_22/build/spend_22_cpp/spend_22.dat differ diff --git a/circuits/spend_22/build/spend_22_js/spend_22.wasm b/circuits/spend_22/build/spend_22_js/spend_22.wasm index 2e79958..04d4fed 100644 Binary files a/circuits/spend_22/build/spend_22_js/spend_22.wasm and b/circuits/spend_22/build/spend_22_js/spend_22.wasm differ diff --git a/circuits/spend_22/spend_22.circom b/circuits/spend_22/spend_22.circom index 1759dc7..4a2f13a 100644 --- a/circuits/spend_22/spend_22.circom +++ b/circuits/spend_22/spend_22.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(2, 2); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(2, 2); \ No newline at end of file diff --git a/circuits/spend_23/build/Verifier_spend_23.sol b/circuits/spend_23/build/Verifier_spend_23.sol index bc21ebe..55dcb80 100644 --- a/circuits/spend_23/build/Verifier_spend_23.sol +++ b/circuits/spend_23/build/Verifier_spend_23.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 19406049099808674136874515627377779398297019022944177709010106650552925911847; uint256 constant Qlx = 7155146706321641617736352633925444655586816989205876868270319296116627425982; uint256 constant Qly = 10358384878605764142565114556198435841644142795183855182252885774243327154464; - uint256 constant Qrx = 10885053619268578327581868442957314355734064699748899903759879610264385894060; - uint256 constant Qry = 9064075062487030832045340591832884833404679265918405610594861980559558370399; + uint256 constant Qrx = 6718609957432340103464225807491825413722617806060845121436092215763896446236; + uint256 constant Qry = 17357448412842409542857879849904670173192107213282693406195082021653722446460; uint256 constant Qox = 8629310056391636283869972317371675220083484944180810451789824430861565062809; uint256 constant Qoy = 6932008714588133543877476275791757308482967698526880269793051789431984942818; uint256 constant Qcx = 3245433862354748450784533934449364732637202200384420584021385536838270771214; uint256 constant Qcy = 15603021484505806355416882395171950934434096728769610781407533283421460684918; - uint256 constant S1x = 19920119088753475258013856887182726526759307741173225372893963151556980239615; - uint256 constant S1y = 19757291547592904063185689034299385627230621454653300877583677161010703590371; - uint256 constant S2x = 14352360867997478374610752115914503782146812275167640370185367042443477957335; - uint256 constant S2y = 16542990058170124192126950317538222436503834731889642510175269202671207807555; + uint256 constant S1x = 732548835022517677441387053997391699278134811628534633329063003200120768343; + uint256 constant S1y = 1131806568060603620262036605391616716910838165756160473178143535944599477371; + uint256 constant S2x = 5555038295800554661075984918596355692472290539820377842295349793263416555420; + uint256 constant S2y = 12927161264781305343196706927370299358259046917604776448758277785130114381873; uint256 constant S3x = 1317921102206017387793005661199449434860238766833176757818697101960779032794; uint256 constant S3y = 21879359559621824353764964891274872554976707570847958718777827974291098968455; uint256 constant k1 = 2; diff --git a/circuits/spend_23/build/spend_23.r1cs b/circuits/spend_23/build/spend_23.r1cs index b7bab37..9823079 100644 Binary files a/circuits/spend_23/build/spend_23.r1cs and b/circuits/spend_23/build/spend_23.r1cs differ diff --git a/circuits/spend_23/build/spend_23.sym b/circuits/spend_23/build/spend_23.sym index 5e79392..f63379f 100644 --- a/circuits/spend_23/build/spend_23.sym +++ b/circuits/spend_23/build/spend_23.sym @@ -1,7 +1,7 @@ 1,1,74,main.inputs_hashes[0] 2,2,74,main.inputs_hashes[1] -3,3,74,main.inputs_interest[0] -4,4,74,main.inputs_interest[1] +3,3,74,main.inputs_interest_multiplier[0] +4,4,74,main.inputs_interest_multiplier[1] 5,5,74,main.outputs_hashes[0] 6,6,74,main.outputs_hashes[1] 7,7,74,main.outputs_hashes[2] diff --git a/circuits/spend_23/build/spend_23.zkey b/circuits/spend_23/build/spend_23.zkey index 1f9e4aa..9eae4ca 100644 Binary files a/circuits/spend_23/build/spend_23.zkey and b/circuits/spend_23/build/spend_23.zkey differ diff --git a/circuits/spend_23/build/spend_23_cpp/spend_23.cpp b/circuits/spend_23/build/spend_23_cpp/spend_23.cpp index 587fb64..5b08bb2 100644 --- a/circuits/spend_23/build/spend_23_cpp/spend_23.cpp +++ b/circuits/spend_23/build/spend_23_cpp/spend_23.cpp @@ -259935,7 +259935,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259969,34 +259969,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 18)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 8)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 8)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 2)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 18)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 18)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -260004,7 +260003,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 2); @@ -260038,9 +260037,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 2); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 2); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 4)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 2)]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 4)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 2)]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260075,34 +260074,34 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 5); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 5); {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 5)]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 5)]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]); // line circom 56 +Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 12)]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 7]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 7]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 8; i++){ diff --git a/circuits/spend_23/build/spend_23_cpp/spend_23.dat b/circuits/spend_23/build/spend_23_cpp/spend_23.dat index a5103ae..3f8522a 100644 Binary files a/circuits/spend_23/build/spend_23_cpp/spend_23.dat and b/circuits/spend_23/build/spend_23_cpp/spend_23.dat differ diff --git a/circuits/spend_23/build/spend_23_js/spend_23.wasm b/circuits/spend_23/build/spend_23_js/spend_23.wasm index 71d8305..10174e1 100644 Binary files a/circuits/spend_23/build/spend_23_js/spend_23.wasm and b/circuits/spend_23/build/spend_23_js/spend_23.wasm differ diff --git a/circuits/spend_23/spend_23.circom b/circuits/spend_23/spend_23.circom index b76d51d..00b33e0 100644 --- a/circuits/spend_23/spend_23.circom +++ b/circuits/spend_23/spend_23.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(2, 3); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(2, 3); \ No newline at end of file diff --git a/circuits/spend_31/build/Verifier_spend_31.sol b/circuits/spend_31/build/Verifier_spend_31.sol index 509b164..fffad0b 100644 --- a/circuits/spend_31/build/Verifier_spend_31.sol +++ b/circuits/spend_31/build/Verifier_spend_31.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 18108481078158608804600978295875856029693862586223146766825524871489628183090; uint256 constant Qlx = 9024211085763652556457638167278551711485962540519346910012418983823644376824; uint256 constant Qly = 16704136693633024865562991080756118159727409857667945505768588177590614248913; - uint256 constant Qrx = 2813099120588931349590549901521284966386650028569511111483633280166384487983; - uint256 constant Qry = 16131888339953545366504848279728192512698400193221762139472815986902254903196; + uint256 constant Qrx = 9148485023515092421657979876530975094687163691935433586459826730672785928608; + uint256 constant Qry = 5352206744273316664973923513797991940945661205137653701967815025613414359068; uint256 constant Qox = 15668345810563515511329425738269338226191447902585693684153983115471103052508; uint256 constant Qoy = 15542579896838669496617029072700709211438718493400507609993492881464311312662; uint256 constant Qcx = 17437313712794495100654938654961330758085080356000895775354851204013458597742; uint256 constant Qcy = 8930011681076872130070708163482841789728736352969227032380159735082794255082; - uint256 constant S1x = 8860865498472322660061091678796305023191426251780155243719469885685116587436; - uint256 constant S1y = 8769438868868491268594484726862017302237633460095220712402618604557648244838; - uint256 constant S2x = 219246088359483777264730071453594255411581682047311189427711600006504379032; - uint256 constant S2y = 14990338235249335195147666420081186482284877330609223811898948964390526380517; + uint256 constant S1x = 6519811327418507024928624160313844052634584705598381140827773468364711423613; + uint256 constant S1y = 719419111793141774101472906859900311730528293848751900255853466033161328580; + uint256 constant S2x = 13515130523024120823010422802886045831897704848887229923802245480582733378456; + uint256 constant S2y = 9804584162072895058209029660601902296852067374106091682235599832233464538315; uint256 constant S3x = 10171721069556038156554673263681838443102550054456902623780307280237001155681; uint256 constant S3y = 3330659969877721386350881437510491388830209921938369161139979654985491113133; uint256 constant k1 = 2; diff --git a/circuits/spend_31/build/spend_31.r1cs b/circuits/spend_31/build/spend_31.r1cs index b9ea0ec..7d37f20 100644 Binary files a/circuits/spend_31/build/spend_31.r1cs and b/circuits/spend_31/build/spend_31.r1cs differ diff --git a/circuits/spend_31/build/spend_31.sym b/circuits/spend_31/build/spend_31.sym index df8b5c7..1adb671 100644 --- a/circuits/spend_31/build/spend_31.sym +++ b/circuits/spend_31/build/spend_31.sym @@ -1,9 +1,9 @@ 1,1,74,main.inputs_hashes[0] 2,2,74,main.inputs_hashes[1] 3,3,74,main.inputs_hashes[2] -4,4,74,main.inputs_interest[0] -5,5,74,main.inputs_interest[1] -6,6,74,main.inputs_interest[2] +4,4,74,main.inputs_interest_multiplier[0] +5,5,74,main.inputs_interest_multiplier[1] +6,6,74,main.inputs_interest_multiplier[2] 7,7,74,main.outputs_hashes[0] 8,8,74,main.public_output_amount 9,9,74,main.input_amounts[0] diff --git a/circuits/spend_31/build/spend_31.zkey b/circuits/spend_31/build/spend_31.zkey index 07a81b6..6887c6e 100644 Binary files a/circuits/spend_31/build/spend_31.zkey and b/circuits/spend_31/build/spend_31.zkey differ diff --git a/circuits/spend_31/build/spend_31_cpp/spend_31.cpp b/circuits/spend_31/build/spend_31_cpp/spend_31.cpp index bb4e636..5c7523e 100644 --- a/circuits/spend_31/build/spend_31_cpp/spend_31.cpp +++ b/circuits/spend_31/build/spend_31_cpp/spend_31.cpp @@ -259919,7 +259919,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259953,34 +259953,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 16)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 3)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 8)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 8)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 3)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 16)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 16)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259988,7 +259987,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 3; @@ -260022,9 +260021,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 3; cmp_index_ref_load = 3; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 6],&ctx->signalValues[ctx->componentMemory[mySubcomponents[3]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 6],&ctx->signalValues[ctx->componentMemory[mySubcomponents[3]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260059,15 +260058,15 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 4; cmp_index_ref_load = 4; {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[4]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[4]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 14]); // line circom 56 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 14]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -260077,15 +260076,15 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 7]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 7]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 5; i++){ diff --git a/circuits/spend_31/build/spend_31_cpp/spend_31.dat b/circuits/spend_31/build/spend_31_cpp/spend_31.dat index 91ee18b..3010fe4 100644 Binary files a/circuits/spend_31/build/spend_31_cpp/spend_31.dat and b/circuits/spend_31/build/spend_31_cpp/spend_31.dat differ diff --git a/circuits/spend_31/build/spend_31_js/spend_31.wasm b/circuits/spend_31/build/spend_31_js/spend_31.wasm index 75264a3..09d97fc 100644 Binary files a/circuits/spend_31/build/spend_31_js/spend_31.wasm and b/circuits/spend_31/build/spend_31_js/spend_31.wasm differ diff --git a/circuits/spend_31/spend_31.circom b/circuits/spend_31/spend_31.circom index 2f7f81c..0c60763 100644 --- a/circuits/spend_31/spend_31.circom +++ b/circuits/spend_31/spend_31.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(3, 1); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(3, 1); \ No newline at end of file diff --git a/circuits/spend_32/build/Verifier_spend_32.sol b/circuits/spend_32/build/Verifier_spend_32.sol index 56f4a43..64c0a7d 100644 --- a/circuits/spend_32/build/Verifier_spend_32.sol +++ b/circuits/spend_32/build/Verifier_spend_32.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 21679459721552195822965529216504369352672098779257614571228410418768642950268; uint256 constant Qlx = 10890547847243337133791725234692234101334483295975574137303078881894966439179; uint256 constant Qly = 18220136689665052445828150106367229703134145610800953614050636908711765053691; - uint256 constant Qrx = 6525484979648101408591659259608439928266753117210559773768038184239055984954; - uint256 constant Qry = 1387671620721445839748499035219953114214808971723823137352355180379975891589; + uint256 constant Qrx = 2423924334806493051454902731532191970915738574479147138134688422660262178958; + uint256 constant Qry = 10401382736089688922988656746061265759411887258087879354164158113842915385788; uint256 constant Qox = 4729869415365687050922716142944192639729005543127809024021590462241570016650; uint256 constant Qoy = 13521055509982403687129083087244724700368152737096872318722939341788685207969; uint256 constant Qcx = 21119916293175771780064314687266792278456179297553431413466175368617734447075; uint256 constant Qcy = 6417257603791077838463606638652705123061163774342624870023145468620312095909; - uint256 constant S1x = 13506415517133753120524872356474659645933795049673587777229143320915473979676; - uint256 constant S1y = 17623155941856517539974853128306496450537585566497191444017040608431154854396; - uint256 constant S2x = 9163413315524453164992076568994304532525523670895548893792453233815909290789; - uint256 constant S2y = 18973504706760152770039295075266329620861024132212436664352488242955536363070; + uint256 constant S1x = 1227868223102641907040309390417841827208819570017152159227778148893341169971; + uint256 constant S1y = 11804972707144515390129928045959338625606450341629598613081365915199417915347; + uint256 constant S2x = 6815785170141647138819864934388759043285575095083442555814576573654640634923; + uint256 constant S2y = 14787620495876090026904801980378484992983884652599432884829352976575946510637; uint256 constant S3x = 1998855470745891753627330540010145569528274473764685131608543422284797383525; uint256 constant S3y = 3618979369861536602759773249285223338571130561209012239223835295058387211613; uint256 constant k1 = 2; diff --git a/circuits/spend_32/build/spend_32.r1cs b/circuits/spend_32/build/spend_32.r1cs index b2d4263..f106e2a 100644 Binary files a/circuits/spend_32/build/spend_32.r1cs and b/circuits/spend_32/build/spend_32.r1cs differ diff --git a/circuits/spend_32/build/spend_32.sym b/circuits/spend_32/build/spend_32.sym index 2c7189c..b4740d5 100644 --- a/circuits/spend_32/build/spend_32.sym +++ b/circuits/spend_32/build/spend_32.sym @@ -1,9 +1,9 @@ 1,1,74,main.inputs_hashes[0] 2,2,74,main.inputs_hashes[1] 3,3,74,main.inputs_hashes[2] -4,4,74,main.inputs_interest[0] -5,5,74,main.inputs_interest[1] -6,6,74,main.inputs_interest[2] +4,4,74,main.inputs_interest_multiplier[0] +5,5,74,main.inputs_interest_multiplier[1] +6,6,74,main.inputs_interest_multiplier[2] 7,7,74,main.outputs_hashes[0] 8,8,74,main.outputs_hashes[1] 9,9,74,main.public_output_amount diff --git a/circuits/spend_32/build/spend_32.zkey b/circuits/spend_32/build/spend_32.zkey index d4a3a52..9e0a36f 100644 Binary files a/circuits/spend_32/build/spend_32.zkey and b/circuits/spend_32/build/spend_32.zkey differ diff --git a/circuits/spend_32/build/spend_32_cpp/spend_32.cpp b/circuits/spend_32/build/spend_32_cpp/spend_32.cpp index 6269a7f..ce9c8e6 100644 --- a/circuits/spend_32/build/spend_32_cpp/spend_32.cpp +++ b/circuits/spend_32/build/spend_32_cpp/spend_32.cpp @@ -259935,7 +259935,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259969,34 +259969,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 19)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 3)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 9)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 9)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 3)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 19)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 19)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -260004,7 +260003,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 3); @@ -260038,9 +260037,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 3); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 3); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 3)]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 3)]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260075,34 +260074,34 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 5); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 5); {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 5)]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 5)]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 15)]); // line circom 56 +Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 15)]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[330]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 8]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 8]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 7; i++){ diff --git a/circuits/spend_32/build/spend_32_cpp/spend_32.dat b/circuits/spend_32/build/spend_32_cpp/spend_32.dat index 98c68cd..a17ddbf 100644 Binary files a/circuits/spend_32/build/spend_32_cpp/spend_32.dat and b/circuits/spend_32/build/spend_32_cpp/spend_32.dat differ diff --git a/circuits/spend_32/build/spend_32_js/spend_32.wasm b/circuits/spend_32/build/spend_32_js/spend_32.wasm index 505fa13..b11f3d2 100644 Binary files a/circuits/spend_32/build/spend_32_js/spend_32.wasm and b/circuits/spend_32/build/spend_32_js/spend_32.wasm differ diff --git a/circuits/spend_32/spend_32.circom b/circuits/spend_32/spend_32.circom index 01efb32..8a6a9b2 100644 --- a/circuits/spend_32/spend_32.circom +++ b/circuits/spend_32/spend_32.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(3, 2); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(3, 2); \ No newline at end of file diff --git a/circuits/spend_33/build/Verifier_spend_33.sol b/circuits/spend_33/build/Verifier_spend_33.sol index 9834315..0983af8 100644 --- a/circuits/spend_33/build/Verifier_spend_33.sol +++ b/circuits/spend_33/build/Verifier_spend_33.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 6187581824023953749833689294537192210240672198897266667396764558875228755261; uint256 constant Qlx = 8499444587019640872124051966849548664460530972413514930745086294877239449751; uint256 constant Qly = 18912442518751632679171706124135686767511227116076175716938482158194655322089; - uint256 constant Qrx = 7949385198108221125559018319643894010008860482876005628057174160692215344642; - uint256 constant Qry = 15509536762265232656413509200536411536772684953918856798227316899749291744576; + uint256 constant Qrx = 19220546282185532709893604429813505406964087893380574797770174595905094312955; + uint256 constant Qry = 17358417173262574909988317010678543685224825979316977130202954184439801284205; uint256 constant Qox = 14318185103298512911783153844828775623737382607969805631035987303639793905060; uint256 constant Qoy = 2382394963283972675561661137234701590722913025325341884063925851878893604306; uint256 constant Qcx = 11557610718384846261279593383750549873997601347752073705835816850738842091724; uint256 constant Qcy = 15963372609396318058375412723938547882741527109402264186793149229988614108278; - uint256 constant S1x = 1192114457764505392281758953844055884524281864641428647008340747203668763208; - uint256 constant S1y = 1379738407101719672227474855561051724035592250279999799085189419005262128966; - uint256 constant S2x = 9778977593100069822525064485746228372585916057485545514627721604386602152291; - uint256 constant S2y = 13566267003248036802038884682158837873318040989386199631581463128103421535022; + uint256 constant S1x = 17176981420877995426736315550145134461097817349597818770784095509265069131000; + uint256 constant S1y = 12608214129272957508813276351229902429093703657157708709726052255436747963616; + uint256 constant S2x = 8092719476667046331634233814254507925097738040148172721427449191330709421089; + uint256 constant S2y = 9556814021320828446297931491995208168901643006516966753393376405559705982975; uint256 constant S3x = 11888430957438137707131023508793362313789073203797916117245398872724326266488; uint256 constant S3y = 18174850928919438379617202299721729228692999436800068501997896164706996705942; uint256 constant k1 = 2; diff --git a/circuits/spend_33/build/spend_33.r1cs b/circuits/spend_33/build/spend_33.r1cs index 1815d2c..5b784ac 100644 Binary files a/circuits/spend_33/build/spend_33.r1cs and b/circuits/spend_33/build/spend_33.r1cs differ diff --git a/circuits/spend_33/build/spend_33.sym b/circuits/spend_33/build/spend_33.sym index 84387f3..66bad83 100644 --- a/circuits/spend_33/build/spend_33.sym +++ b/circuits/spend_33/build/spend_33.sym @@ -1,9 +1,9 @@ 1,1,74,main.inputs_hashes[0] 2,2,74,main.inputs_hashes[1] 3,3,74,main.inputs_hashes[2] -4,4,74,main.inputs_interest[0] -5,5,74,main.inputs_interest[1] -6,6,74,main.inputs_interest[2] +4,4,74,main.inputs_interest_multiplier[0] +5,5,74,main.inputs_interest_multiplier[1] +6,6,74,main.inputs_interest_multiplier[2] 7,7,74,main.outputs_hashes[0] 8,8,74,main.outputs_hashes[1] 9,9,74,main.outputs_hashes[2] diff --git a/circuits/spend_33/build/spend_33.zkey b/circuits/spend_33/build/spend_33.zkey index 5028050..d1b7fb3 100644 Binary files a/circuits/spend_33/build/spend_33.zkey and b/circuits/spend_33/build/spend_33.zkey differ diff --git a/circuits/spend_33/build/spend_33_cpp/spend_33.cpp b/circuits/spend_33/build/spend_33_cpp/spend_33.cpp index 0a6bddc..fc60ee1 100644 --- a/circuits/spend_33/build/spend_33_cpp/spend_33.cpp +++ b/circuits/spend_33/build/spend_33_cpp/spend_33.cpp @@ -259935,7 +259935,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259969,34 +259969,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 22)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 3)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 10)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 10)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 3)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 22)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 22)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -260004,7 +260003,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 3); @@ -260038,9 +260037,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 3); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 3); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 3)]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 3)]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260075,34 +260074,34 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 6); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 6); {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 6)]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 6)]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 16)]); // line circom 56 +Fr_add(&expaux[0],&lvar[3],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 16)]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[82]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 9]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 9]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 9; i++){ diff --git a/circuits/spend_33/build/spend_33_cpp/spend_33.dat b/circuits/spend_33/build/spend_33_cpp/spend_33.dat index 813bc67..125372a 100644 Binary files a/circuits/spend_33/build/spend_33_cpp/spend_33.dat and b/circuits/spend_33/build/spend_33_cpp/spend_33.dat differ diff --git a/circuits/spend_33/build/spend_33_js/spend_33.wasm b/circuits/spend_33/build/spend_33_js/spend_33.wasm index a90d157..e33c071 100644 Binary files a/circuits/spend_33/build/spend_33_js/spend_33.wasm and b/circuits/spend_33/build/spend_33_js/spend_33.wasm differ diff --git a/circuits/spend_33/spend_33.circom b/circuits/spend_33/spend_33.circom index ce6c007..0d1cf83 100644 --- a/circuits/spend_33/spend_33.circom +++ b/circuits/spend_33/spend_33.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(3, 3); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(3, 3); \ No newline at end of file diff --git a/circuits/spend_61/build/Verifier_spend_61.sol b/circuits/spend_61/build/Verifier_spend_61.sol index 87a1d25..e703894 100644 --- a/circuits/spend_61/build/Verifier_spend_61.sol +++ b/circuits/spend_61/build/Verifier_spend_61.sol @@ -47,16 +47,16 @@ contract PlonkVerifier { uint256 constant Qmy = 11513707115300434794605833920527284950591116088204873210723946535782691655530; uint256 constant Qlx = 12631997768342070084107067345000751340816285877674167009206238231113144801488; uint256 constant Qly = 20404999408220302250486607270800675960715394950940363314317318983945734884322; - uint256 constant Qrx = 16391454875618829129569601144130955038865790426080308529187609710435626690572; - uint256 constant Qry = 13970663570499188897526342734394661746199379926460126825312270080718566635641; + uint256 constant Qrx = 6165055451170587342440444150540701717427905120499313889622783411780463145764; + uint256 constant Qry = 15224879860136184328986812182197012671756370988110997176808577438582367708371; uint256 constant Qox = 21790257375479090150267961340444563259775722866966880622366099460583839375500; uint256 constant Qoy = 11590836997899677484626242079577181875181640090644905845887695664068453047435; uint256 constant Qcx = 20295534368459431258839891242408529833657942087841286479854079748638253463368; uint256 constant Qcy = 6672036425513252437974403355109637256896682123550053643033699305257966285798; - uint256 constant S1x = 11263297287399830344634147416973589761530619086082520988699317119093677077463; - uint256 constant S1y = 5575441875779188857739570013921011221940704688424544794550716875520773675561; - uint256 constant S2x = 8688595598749714593962249324389746809923903338179843337785114711297605893964; - uint256 constant S2y = 14628738211809001918607373551624569249019128284505647143997118770779822321216; + uint256 constant S1x = 4333453392717674285675567377585354993101414138306030558228227163124693090327; + uint256 constant S1y = 10337790493981830558424970244382433727694827966499598298562297814759960954275; + uint256 constant S2x = 19653893440090031112394170572505936441956349845907913254920519632348622136182; + uint256 constant S2y = 14109180423465496728060876537644895814442964081746921546260823696475978915699; uint256 constant S3x = 15023309122810232719631356879079989197058665994932283408117078521031809629608; uint256 constant S3y = 477061408443288494009408501872853950356811892012157875317497475187649722326; uint256 constant k1 = 2; diff --git a/circuits/spend_61/build/spend_61.r1cs b/circuits/spend_61/build/spend_61.r1cs index b9d4f27..749ca53 100644 Binary files a/circuits/spend_61/build/spend_61.r1cs and b/circuits/spend_61/build/spend_61.r1cs differ diff --git a/circuits/spend_61/build/spend_61.sym b/circuits/spend_61/build/spend_61.sym index 8a93885..c5ca158 100644 --- a/circuits/spend_61/build/spend_61.sym +++ b/circuits/spend_61/build/spend_61.sym @@ -4,12 +4,12 @@ 4,4,74,main.inputs_hashes[3] 5,5,74,main.inputs_hashes[4] 6,6,74,main.inputs_hashes[5] -7,7,74,main.inputs_interest[0] -8,8,74,main.inputs_interest[1] -9,9,74,main.inputs_interest[2] -10,10,74,main.inputs_interest[3] -11,11,74,main.inputs_interest[4] -12,12,74,main.inputs_interest[5] +7,7,74,main.inputs_interest_multiplier[0] +8,8,74,main.inputs_interest_multiplier[1] +9,9,74,main.inputs_interest_multiplier[2] +10,10,74,main.inputs_interest_multiplier[3] +11,11,74,main.inputs_interest_multiplier[4] +12,12,74,main.inputs_interest_multiplier[5] 13,13,74,main.outputs_hashes[0] 14,14,74,main.public_output_amount 15,15,74,main.input_amounts[0] diff --git a/circuits/spend_61/build/spend_61.zkey b/circuits/spend_61/build/spend_61.zkey index d5c6ae1..def3e33 100644 Binary files a/circuits/spend_61/build/spend_61.zkey and b/circuits/spend_61/build/spend_61.zkey differ diff --git a/circuits/spend_61/build/spend_61_cpp/spend_61.cpp b/circuits/spend_61/build/spend_61_cpp/spend_61.cpp index c2150d2..1d9b218 100644 --- a/circuits/spend_61/build/spend_61_cpp/spend_61.cpp +++ b/circuits/spend_61/build/spend_61_cpp/spend_61.cpp @@ -259919,7 +259919,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[93]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[93]); // line circom 33 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = ((1 * Fr_toInt(&lvar[4])) + 0); @@ -259953,34 +259953,33 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); cmp_index_ref_load = ((1 * Fr_toInt(&lvar[4])) + 0); {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 35 +Fr_eq(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 0)],&ctx->signalValues[ctx->componentMemory[mySubcomponents[((1 * Fr_toInt(&lvar[4])) + 0)]].signalStart + 0]); // line circom 38 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 35. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 38. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 28)]; // load src -Fr_add(&expaux[1],&circuitConstants[608],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)]); // line circom 38 -Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 14)],&expaux[1]); // line circom 38 +Fr_mul(&expaux[0],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 14)],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 6)]); // line circom 41 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[2]; // load src -Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 28)]); // line circom 39 +Fr_add(&expaux[0],&lvar[2],&signalValues[mySignalStart + ((1 * Fr_toInt(&lvar[4])) + 28)]); // line circom 42 // end load src Fr_copy(aux_dest,&expaux[0]); } { PFrElement aux_dest = &lvar[4]; // load src -Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 30 +Fr_add(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33 // end load src Fr_copy(aux_dest,&expaux[0]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[93]); // line circom 30 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[93]); // line circom 33 } { PFrElement aux_dest = &lvar[4]; @@ -259988,7 +259987,7 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[81]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 while(Fr_isTrue(&expaux[0])){ { uint cmp_index_ref = 6; @@ -260022,9 +260021,9 @@ Poseidon_70_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 6; cmp_index_ref_load = 6; {{ -Fr_eq(&expaux[0],&signalValues[mySignalStart + 12],&ctx->signalValues[ctx->componentMemory[mySubcomponents[6]].signalStart + 0]); // line circom 48 +Fr_eq(&expaux[0],&signalValues[mySignalStart + 12],&ctx->signalValues[ctx->componentMemory[mySubcomponents[6]].signalStart + 0]); // line circom 51 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 48. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 51. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { @@ -260059,15 +260058,15 @@ GreaterEqThan_73_run(mySubcomponents[cmp_index_ref],ctx); cmp_index_ref_load = 7; cmp_index_ref_load = 7; {{ -Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[7]].signalStart + 0],&circuitConstants[83]); // line circom 54 +Fr_eq(&expaux[0],&ctx->signalValues[ctx->componentMemory[mySubcomponents[7]].signalStart + 0],&circuitConstants[83]); // line circom 57 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 54. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 57. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } { PFrElement aux_dest = &lvar[3]; // load src -Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 26]); // line circom 56 +Fr_add(&expaux[0],&circuitConstants[81],&signalValues[mySignalStart + 26]); // line circom 59 // end load src Fr_copy(aux_dest,&expaux[0]); } @@ -260077,15 +260076,15 @@ PFrElement aux_dest = &lvar[4]; // end load src Fr_copy(aux_dest,&circuitConstants[83]); } -Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 43 +Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 46 } { -Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 13]); // line circom 61 -Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 61 +Fr_add(&expaux[2],&lvar[3],&signalValues[mySignalStart + 13]); // line circom 64 +Fr_mul(&expaux[1],&expaux[2],&circuitConstants[608]); // line circom 64 {{ -Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 61 +Fr_eq(&expaux[0],&lvar[2],&expaux[1]); // line circom 64 }} -if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 61. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; +if (!Fr_isTrue(&expaux[0])) std::cout << "Failed assert in template/function " << myTemplateName << " line 64. " << "Followed trace of components: " << ctx->getTrace(myId) << std::endl; assert(Fr_isTrue(&expaux[0])); } for (uint i = 0; i < 8; i++){ diff --git a/circuits/spend_61/build/spend_61_cpp/spend_61.dat b/circuits/spend_61/build/spend_61_cpp/spend_61.dat index 4a5e993..f1bfa8c 100644 Binary files a/circuits/spend_61/build/spend_61_cpp/spend_61.dat and b/circuits/spend_61/build/spend_61_cpp/spend_61.dat differ diff --git a/circuits/spend_61/build/spend_61_js/spend_61.wasm b/circuits/spend_61/build/spend_61_js/spend_61.wasm index 946a7dd..2295687 100644 Binary files a/circuits/spend_61/build/spend_61_js/spend_61.wasm and b/circuits/spend_61/build/spend_61_js/spend_61.wasm differ diff --git a/circuits/spend_61/spend_61.circom b/circuits/spend_61/spend_61.circom index 1293e0e..9df35ba 100644 --- a/circuits/spend_61/spend_61.circom +++ b/circuits/spend_61/spend_61.circom @@ -2,4 +2,4 @@ pragma circom 2.1.4; include "../libs/spend.circom"; -component main {public [inputs_hashes, inputs_interest, outputs_hashes, public_output_amount]} = Spend(6, 1); \ No newline at end of file +component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(6, 1); \ No newline at end of file diff --git a/test/circuits/spend.perf.test.ts b/test/circuits/spend.perf.test.ts index 1c1cc0e..283f4de 100644 --- a/test/circuits/spend.perf.test.ts +++ b/test/circuits/spend.perf.test.ts @@ -32,7 +32,7 @@ describe("Spend Circuits Performance Tests", function () { ): Promise { const input = { inputs_hashes: Array(inputAmounts.length).fill(""), - inputs_interest: Array(inputAmounts.length).fill(""), + inputs_interest_multiplier: Array(inputAmounts.length).fill(""), outputs_hashes: Array(outputAmounts.length).fill(""), public_output_amount: fee.toString(), // public output equivalent to previous fee input_amounts: Array(inputAmounts.length).fill(""), @@ -47,8 +47,8 @@ describe("Spend Circuits Performance Tests", function () { input.input_amounts[i] = inputAmounts[i].toString(); input.input_sValues[i] = commitment.sValue; input.inputs_hashes[i] = commitment.hash; - // No interest on these inputs - input.inputs_interest[i] = "0"; + // 1_000_000_000 is neutral (x1.0 multiplier) + input.inputs_interest_multiplier[i] = "1000000000"; } // Generate output commitments diff --git a/test/circuits/spend11.circuit.test.ts b/test/circuits/spend11.circuit.test.ts index bb0f746..3bdf928 100644 --- a/test/circuits/spend11.circuit.test.ts +++ b/test/circuits/spend11.circuit.test.ts @@ -5,114 +5,102 @@ import { ethers } from "hardhat"; import { randomBytes } from "ethers"; describe("Spend11 Circuit Integration Tests", function () { + const MULTIPLIER_ONE = "1000000000"; + const MULTIPLIER_PLUS_ONE_PCT = "1010000000"; + let verifier: any; + before(async function () { const Verifier = await ethers.getContractFactory("Spend11Verifier"); verifier = await Verifier.deploy(); await verifier.waitForDeployment(); }); - it("valid case", async function () { + function randomSValue(): string { + return `0x${Buffer.from(randomBytes(32)).toString("hex")}`; + } + + async function buildInput( + inputAmount: bigint, + interestMultiplier: string, + outputAmount: bigint, + publicOutputAmount: bigint + ) { const input = { inputs_hashes: [""], - inputs_interest: [""], + inputs_interest_multiplier: [interestMultiplier], outputs_hashes: [""], - public_output_amount: "10", // 10 token public output (equivalent to previous fee) - input_amounts: [""], + public_output_amount: publicOutputAmount.toString(), + input_amounts: [inputAmount.toString()], input_sValues: [""], - output_amounts: [""], + output_amounts: [outputAmount.toString()], output_sValues: [""], }; - // Generate input commitment (spending 1010 tokens - 1000 + 10 fee) - const inputAmount = BigInt(1010); - input.input_amounts[0] = inputAmount.toString(); - input.input_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - // No interest on this input - input.inputs_interest[0] = "0"; + input.input_sValues[0] = randomSValue(); input.inputs_hashes[0] = await computePoseidon({ amount: input.input_amounts[0], entropy: input.input_sValues[0], }); - // Generate output commitment (spending 1000 tokens) - const outputAmount = BigInt(1000); - input.output_amounts[0] = outputAmount.toString(); - input.output_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; + input.output_sValues[0] = randomSValue(); input.outputs_hashes[0] = await computePoseidon({ amount: input.output_amounts[0], entropy: input.output_sValues[0], }); + return input; + } + + async function proveAndVerify(input: any) { const start = performance.now(); const { proof, publicSignals } = await prove(input, "spend_11"); - expect(publicSignals).to.have.length(4); - - // Get calldata for Solidity verifier const { calldata_proof, calldata_pubSignals } = await exportSolidityCallData(proof, publicSignals); - const isValidOnChain = await verifier.verify( calldata_proof, calldata_pubSignals ); expect(isValidOnChain).to.be.true; - console.log(`proving time: ${performance.now() - start}`); - }); + } - it("valid case with 1% interest on input", async function () { - // Interest: 9-decimal, 1_000_000_000 = 100%, so 1% = 10_000_000 - const INTEREST_1_PCT = "10000000"; + async function expectProveToFail(input: any, message: string) { + try { + await prove(input, "spend_11"); + expect.fail(message); + } catch (error: any) { + console.log(`${message}:`, error.message); + } + } + + it("valid 1-1 with neutral multiplier", async function () { + const input = await buildInput( + BigInt(1010), + MULTIPLIER_ONE, + BigInt(1000), + BigInt(10) + ); - const input = { - inputs_hashes: [""], - inputs_interest: [""], - outputs_hashes: [""], - public_output_amount: "10", // 10 token public output - input_amounts: [""], - input_sValues: [""], - output_amounts: [""], - output_sValues: [""], - }; + await proveAndVerify(input); + }); - // Input: 1000 tokens with 1% interest => effective value = 1000 * 1.01 = 1010 - const inputAmount = BigInt(1000); - input.input_amounts[0] = inputAmount.toString(); - input.input_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - input.inputs_interest[0] = INTEREST_1_PCT; - input.inputs_hashes[0] = await computePoseidon({ - amount: input.input_amounts[0], - entropy: input.input_sValues[0], - }); + it("valid 1-1 with +1% multiplier", async function () { + const input = await buildInput( + BigInt(1000), + MULTIPLIER_PLUS_ONE_PCT, + BigInt(1000), + BigInt(10) + ); - // Output: 1000 tokens. Balance: 1010 (effective input) = 1000 (output) + 10 (public) - const outputAmount = BigInt(1000); - input.output_amounts[0] = outputAmount.toString(); - input.output_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - input.outputs_hashes[0] = await computePoseidon({ - amount: input.output_amounts[0], - entropy: input.output_sValues[0], - }); + await proveAndVerify(input); + }); - const { proof, publicSignals } = await prove(input, "spend_11"); - const { calldata_proof, calldata_pubSignals } = - await exportSolidityCallData(proof, publicSignals); + it("valid 1-1 with 0 multiplier (-100% interest)", async function () { + const input = await buildInput(BigInt(1000), "0", BigInt(0), BigInt(0)); - const isValidOnChain = await verifier.verify( - calldata_proof, - calldata_pubSignals - ); - expect(isValidOnChain).to.be.true; + await proveAndVerify(input); }); it("valid case with max uint208 amounts", async function () { @@ -123,7 +111,7 @@ describe("Spend11 Circuit Integration Tests", function () { const input = { inputs_hashes: [""], - inputs_interest: ["0"], + inputs_interest_multiplier: [MULTIPLIER_ONE], outputs_hashes: [""], public_output_amount: publicOutput.toString(), input_amounts: [MAX_UINT208.toString()], @@ -163,7 +151,7 @@ describe("Spend11 Circuit Integration Tests", function () { const OVER_MAX_UINT208 = BigInt(2) ** BigInt(208); const input = { inputs_hashes: [""], - inputs_interest: ["0"], + inputs_interest_multiplier: [MULTIPLIER_ONE], outputs_hashes: [""], public_output_amount: "0", input_amounts: [OVER_MAX_UINT208.toString()], @@ -186,27 +174,21 @@ describe("Spend11 Circuit Integration Tests", function () { entropy: input.output_sValues[0], }); - try { - await prove(input, "spend_11"); - expect.fail( - "Expected prove to fail when input amount exceeds max(uint208)" - ); - } catch (error: any) { - console.log( - "Correctly failed with input > max(uint208):", - error.message - ); - } + await expectProveToFail( + input, + "Expected prove to fail when input amount exceeds max(uint208)" + ); }); it("should fail when output amount exceeds max(uint208)", async function () { const OVER_MAX_UINT208 = BigInt(2) ** BigInt(208); + const MAX_UINT208 = BigInt(2) ** BigInt(208) - BigInt(1); const input = { inputs_hashes: [""], - inputs_interest: ["0"], + inputs_interest_multiplier: [MULTIPLIER_ONE], outputs_hashes: [""], public_output_amount: "0", - input_amounts: [OVER_MAX_UINT208.toString()], + input_amounts: [MAX_UINT208.toString()], input_sValues: [""], output_amounts: [OVER_MAX_UINT208.toString()], output_sValues: [""], @@ -226,164 +208,46 @@ describe("Spend11 Circuit Integration Tests", function () { entropy: input.output_sValues[0], }); - try { - await prove(input, "spend_11"); - expect.fail( - "Expected prove to fail when output amount exceeds max(uint208)" - ); - } catch (error: any) { - console.log( - "Correctly failed with output > max(uint208):", - error.message - ); - } + await expectProveToFail( + input, + "Expected prove to fail when output amount exceeds max(uint208)" + ); }); it("should fail with amount mismatch", async function () { - const input = { - inputs_hashes: [""], - inputs_interest: [""], - outputs_hashes: [""], - public_output_amount: "10", // 10 token public output (equivalent to previous fee) - input_amounts: [""], - input_sValues: [""], - output_amounts: [""], - output_sValues: [""], - }; - - // Generate input commitment (spending 1000 tokens) - const inputAmount = BigInt(1000); - input.input_amounts[0] = inputAmount.toString(); - input.input_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - // No interest on this input - input.inputs_interest[0] = "0"; - input.inputs_hashes[0] = await computePoseidon({ - amount: input.input_amounts[0], - entropy: input.input_sValues[0], - }); - - // Generate output commitment (spending 1000 tokens - but fee is 10, so should fail) - const outputAmount = BigInt(1000); - input.output_amounts[0] = outputAmount.toString(); - input.output_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - input.outputs_hashes[0] = await computePoseidon({ - amount: input.output_amounts[0], - entropy: input.output_sValues[0], - }); + const input = await buildInput( + BigInt(1000), + MULTIPLIER_ONE, + BigInt(1000), + BigInt(10) + ); - // The circuit should fail because input_sum (1000) != output_sum (1000) + fee (10) - try { - await prove(input, "spend_11"); - // If we reach here, the test should fail - expect.fail("Expected prove to fail with amount mismatch"); - } catch (error: any) { - // Expected to fail - input sum should equal output sum + fee - console.log( - "Correctly failed with amount mismatch:", - error.message - ); - } + await expectProveToFail(input, "Expected prove to fail with amount mismatch"); }); it("should fail with negative output amount", async function () { - const input = { - inputs_hashes: [""], - inputs_interest: [""], - outputs_hashes: [""], - public_output_amount: "10", // 10 token public output (equivalent to previous fee) - input_amounts: [""], - input_sValues: [""], - output_amounts: [""], - output_sValues: [""], - }; - - // Generate input commitment (spending 1010 tokens - 1000 + 10 fee) - const inputAmount = BigInt(1010); - input.input_amounts[0] = inputAmount.toString(); - input.input_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - // No interest on this input - input.inputs_interest[0] = "0"; - input.inputs_hashes[0] = await computePoseidon({ - amount: input.input_amounts[0], - entropy: input.input_sValues[0], - }); - - // Generate output commitment with negative amount - const outputAmount = BigInt(-100); - input.output_amounts[0] = outputAmount.toString(); - input.output_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - input.outputs_hashes[0] = await computePoseidon({ - amount: input.output_amounts[0], - entropy: input.output_sValues[0], - }); + const input = await buildInput( + BigInt(1010), + MULTIPLIER_ONE, + BigInt(-100), + BigInt(10) + ); - // The circuit should fail with negative output amount - try { - await prove(input, "spend_11"); - // If we reach here, the test should fail - expect.fail("Expected prove to fail with negative output amount"); - } catch (error: any) { - // Expected to fail - output amounts should be non-negative - console.log( - "Correctly failed with negative output amount:", - error.message - ); - } + await expectProveToFail( + input, + "Expected prove to fail with negative output amount" + ); }); it("should fail with invalid input hash", async function () { - const input = { - inputs_hashes: [""], - inputs_interest: [""], - outputs_hashes: [""], - public_output_amount: "10", // 10 token public output (equivalent to previous fee) - input_amounts: [""], - input_sValues: [""], - output_amounts: [""], - output_sValues: [""], - }; + const input = await buildInput( + BigInt(1010), + MULTIPLIER_ONE, + BigInt(1000), + BigInt(10) + ); - // Generate input commitment (spending 1010 tokens - 1000 + 10 fee) - const inputAmount = BigInt(1010); - input.input_amounts[0] = inputAmount.toString(); - input.input_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - // No interest on this input - input.inputs_interest[0] = "0"; - // Use wrong hash - this should cause the circuit to fail input.inputs_hashes[0] = "123456789"; - - // Generate output commitment (spending 1000 tokens) - const outputAmount = BigInt(1000); - input.output_amounts[0] = outputAmount.toString(); - input.output_sValues[0] = `0x${Buffer.from(randomBytes(32)).toString( - "hex" - )}`; - input.outputs_hashes[0] = await computePoseidon({ - amount: input.output_amounts[0], - entropy: input.output_sValues[0], - }); - - // The circuit should fail because input hash doesn't match the commitment - try { - await prove(input, "spend_11"); - // If we reach here, the test should fail - expect.fail("Expected prove to fail with invalid input hash"); - } catch (error: any) { - // Expected to fail - input hash should match the commitment - console.log( - "Correctly failed with invalid input hash:", - error.message - ); - } + await expectProveToFail(input, "Expected prove to fail with invalid input hash"); }); });