Sum proof

Maru volume sum proof via zk-STARKs enables efficient verification of any volume trades from a remote pools.

To prove volume of pool trades we need to add each value of sold token volume in receipts and prove that counted volume is correct. For this purpose we create SumStark using constraints and cross table lookups tables from SumStark and ArithmeticStark to prove correctness of each arithmetic addition of 256 bits elements.

Circuit

Private inputs include data fields about each value of acummulated sum.

In execution trace we use such fields:

  • IS_INPUT indicates where in row the initial value of accumulated sum.

  • IS_OUTPUT indicates where in row the output of accumulated sum from previous operation will be as the operand in current row.

  • IS_RESULT indicates the last value of accumulated sum of ChainResult operations

  • ACUM_SUM consists of 16 limbs that represent each 16 bit per column.

  • IS_PUBLIC indicates where in row the public value of accumulated sum.

  • NOT_INIT indicates where the first zero init value.

  • VALUE indicates initial volume to be multiplied.

  • MULTIPLIER is used to multiply the value to a consistent format, specifically, 18 digits after the decimal point.

  • MULT_RESULT indicates result of multiplication.

  • TOKEN_ID indicates the ID of the token with the specified volume value.

  • CALCULATION_ID indicates the ID of volume summation.

Constraints

The Sum Stark aims at constraining the following aspects:

  • IS_INPUT and IS_OUTPUT can be in range of {0, 1}

The main idea of proving relies on CTL, where we build two function for CTL:

  • ctl_previous_sum_equal_op1() prove that previous accumulated sum used as second operand in arithmetic operation.

  • ctl_acum_equals_result() guarantees that acum sum columns have the exact values as result columns in arithmetic table.

  • ctl_mult_value() ensures that VALUE, MULTIPLIER, MULT_RESULT columns contain the exact values in the Arithmetic STARK, where we prove the multiplication.

  • ctl_volume_value() ensures that VALUE and CALCULATION_ID columns contain the exact values in the Data Stark.

  • ctl_token_id() ensures that TOKEN_ID and CALCULATION_ID columns contain the exact values in the Data Stark.

Last updated