Try   HackMD

Problem set 1: Range proofs to polynomials

Reading https://vitalik.ca/general/2017/11/09/starks_part_1.html

Prove that you know the millionth Fibonacci number ?

TODO: Create a list containing the first 10 Fibonacci numbers

x = [1,1]

def fib(x):
    for i in range(2,8):
        x.append(x[i-2]+x[i-1])
    return(x)

x = fib(x)

print(x[-1])

TODO simulate an evil genius, simulate an attacker able to switch a singel bit durin gthe computation and see what the final result is ? Is it different ?

x_evil = [0,1]
print(fib(x_evil)[-1])

TODO: Range proof check: Check that a list of numbers are all between in the range 0 , 9. This is basically means make a for look that does > < checks ;) no proofs needed.

x = [1,2,3,4,5,6,7,8,9]

for i in x: 
    assert(i > 0 and i < 10)

TODO: Make a function that evaluates a polynomial in coefficient format. For example x*2 + 2 + 3 is [3, 2, 1]

def eval(coeffs, x):
    out = 0 
    for i, coeff in enumerate(coeffs):
        out += (coeff * (x**i))
    return(out)

assert ( eval([3,2,1] , 1) == 6)

TODO: Find the coefficeint form of a polynomial that is 0 for x in [1,2,3,4,5,6,7,8,9] this polynomial is called c(x)

TODO: Change your range checker function to use evaluations of this polynomial

TODO: FInd the coeffieients o the polynomial p(x) where the first 1 million values are in the range (0, 9)

TODO: Change your range checker function to use evaluation fo P(x) as well as c(x)

TODO: Calculate Z(x) the polynomail that any polynomail that equals 0 for all x from 1 to 1,000,000 is a multiple of Z(x)

TODO: Calulate D(x) this is the polynomial that c(P(x)) / Z(x) = D(x)

TODO: Make a merkle tree of the first 1 million evalusastions of C(x) , P(x) , D(x) , Z(x)

TODO: use Fiat shamir transform to generate a randome number.

TODO: Open all polynomials at the random point r

TODO: Verify the equation C(P(x) == Z(x) D(x) at this point.

TODO: Which of of the polynoials are are prover key ? Which are our verificaion key and which are the ones the prover must produce ?

TODO Implement a proof of the 1 millionth Fibonachi number

TODO Create an attack that breaks this proof ? ;) We will fix that after our next learning group on Fri :D:D:D