Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions circuits/libs/spend.circom
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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];
}

Expand Down
12 changes: 6 additions & 6 deletions circuits/spend_11/build/Verifier_spend_11.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Binary file modified circuits/spend_11/build/spend_11.r1cs
Binary file not shown.
2 changes: 1 addition & 1 deletion circuits/spend_11/build/spend_11.sym
Original file line number Diff line number Diff line change
@@ -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]
Expand Down
Binary file modified circuits/spend_11/build/spend_11.zkey
Binary file not shown.
35 changes: 17 additions & 18 deletions circuits/spend_11/build/spend_11_cpp/spend_11.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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]);
}
Expand All @@ -259971,15 +259970,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 30
Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33
}
{
PFrElement aux_dest = &lvar[4];
// load src
// 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;
Expand Down Expand Up @@ -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]));
}
{
Expand Down Expand Up @@ -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]);
}
Expand All @@ -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++){
Expand Down
Binary file modified circuits/spend_11/build/spend_11_cpp/spend_11.dat
Binary file not shown.
Binary file modified circuits/spend_11/build/spend_11_js/spend_11.wasm
Binary file not shown.
2 changes: 1 addition & 1 deletion circuits/spend_11/spend_11.circom
Original file line number Diff line number Diff line change
Expand Up @@ -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);
component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(1, 1);
12 changes: 6 additions & 6 deletions circuits/spend_12/build/Verifier_spend_12.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Binary file modified circuits/spend_12/build/spend_12.r1cs
Binary file not shown.
2 changes: 1 addition & 1 deletion circuits/spend_12/build/spend_12.sym
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Binary file modified circuits/spend_12/build/spend_12.zkey
Binary file not shown.
37 changes: 18 additions & 19 deletions circuits/spend_12/build/spend_12_cpp/spend_12.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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]);
}
Expand All @@ -259987,15 +259986,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 30
Fr_lt(&expaux[0],&lvar[4],&circuitConstants[83]); // line circom 33
}
{
PFrElement aux_dest = &lvar[4];
// load src
// 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);
Expand Down Expand Up @@ -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]));
}
{
Expand Down Expand Up @@ -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++){
Expand Down
Binary file modified circuits/spend_12/build/spend_12_cpp/spend_12.dat
Binary file not shown.
Binary file modified circuits/spend_12/build/spend_12_js/spend_12.wasm
Binary file not shown.
2 changes: 1 addition & 1 deletion circuits/spend_12/spend_12.circom
Original file line number Diff line number Diff line change
Expand Up @@ -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);
component main {public [inputs_hashes, inputs_interest_multiplier, outputs_hashes, public_output_amount]} = Spend(1, 2);
Loading
Loading