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
18 changes: 18 additions & 0 deletions e2e_test/Cairo/basic.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// layout - small
// can't check modulus application because it is not implemented!
// only range check is used

use core::felt252;

fn main() -> Array<felt252> {
let a = 12345678901234567890;
let b = 98765432109876543210;

let mut result = array![];
if (a * b) == 1219326311370217952237463801111263526900 {
result.append(1);
} else {
result.append(0);
}
result
}
19 changes: 19 additions & 0 deletions e2e_test/Cairo/bitwise.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// layout - small
// can't check & is not implemented for felt252

use core::felt252;

fn least_significant_bit(x: felt252) -> felt252 {
x & -x
}

fn main() -> Array<felt252> {
let mut result = array![];
let next_power_of_two = 3 + least_significant_bit(3);
if next_power_of_two == 4 {
result.append(1);
} else {
result.append(0);
}
result
}
23 changes: 23 additions & 0 deletions e2e_test/Cairo/ecdsa.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// layout - all_cairo

use core::felt252;
use core::pedersen::PedersenTrait;
use core::hash::{HashStateTrait, HashStateExTrait};
use core::ecdsa::check_ecdsa_signature;

fn main() -> Array<felt252> {
let message_hash = 0x503f4bea29baee10b22a7f10bdc82dda071c977c1f25b8f3973d34e6b03b2c;
let public_key = 0x7b7454acbe7845da996377f85eb0892044d75ae95d04d3325a391951f35d2ec;
let signature_r = 0xbe96d72eb4f94078192c2e84d5230cde2a70f4b45c8797e2c907acff5060bb;
let signature_s = 0x677ae6bba6daf00d2631fab14c8acf24be6579f9d9e98f67aa7f2770e57a1f5;

let mut result = array![];
if check_ecdsa_signature(message_hash, public_key, signature_r, signature_s) {
result.append(1);
} else {
result.append(0);
}
result
}


20 changes: 20 additions & 0 deletions e2e_test/Cairo/hash_pedersen.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
use core::felt252;
use core::pedersen::PedersenTrait;
use core::hash::{HashStateTrait, HashStateExTrait};

#[derive(Drop, Hash)]
struct StructForHash {
first: felt252,
second: felt252,
third: (u32, u32),
last: bool,
}

fn main() -> Array<felt252> {
let struct_to_hash = StructForHash { first: 0, second: 1, third: (1, 2), last: false };
let hash = PedersenTrait::new(0).update_with(struct_to_hash).finalize();

let mut result = array![];
result.append(hash);
result
}
20 changes: 20 additions & 0 deletions e2e_test/Cairo/hash_poseidon.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
use core::felt252;
use core::poseidon::PoseidonTrait;
use core::hash::{HashStateTrait, HashStateExTrait};

#[derive(Drop, Hash)]
struct StructForHash {
first: felt252,
second: felt252,
third: (u32, u32),
last: bool,
}

fn main() -> Array<felt252> {
let struct_to_hash = StructForHash { first: 0, second: 1, third: (1, 2), last: false };
let hash = PoseidonTrait::new().update_with(struct_to_hash).finalize();

let mut result = array![];
result.append(hash);
result
}
11 changes: 11 additions & 0 deletions e2e_test/Cairo/keccak.cairo
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use core::felt252;
use core::keccak::compute_keccak_byte_array;


fn main() -> Array<felt252> {
let keccak: u256 = compute_keccak_byte_array(@"");
let mut result = array![];
result.append(keccak.low.into());
result.append(keccak.high.into());
result
}
46 changes: 46 additions & 0 deletions helpers/calculate_fri_step_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import sys

'''
Whenever you encounter error like:
Fri parameters do not match stark degree bound.
Expected FRI degree from FriParameters: 8192. STARK: 2097152

Use this script to calculate the FRI step in cpu_air_params.json file.

Script takes two arguments: "Desired degree bound" and optional "Last layer degree" bound.
Desired degree bound is the number that goes after STARK in error message above (2097152).
Last layer degree in located in cpu_air_params.json key stark->fri->last_layer_degree_bound.

'''


desired_degree_bound = int(sys.argv[1])
try:
last_layer_degree_bound = int(sys.argv[2])
except:
print("No last layer degree bound provided. Using default value of 64.")
last_layer_degree_bound = 64

to_process = desired_degree_bound // last_layer_degree_bound

def highest_power_of_2_in(n):
power = 0

while n % 2 == 0:
n //= 2
power += 1

return power

fri_step_list = []
highest_power_of_2 = highest_power_of_2_in(to_process)

while True:
if highest_power_of_2 <= 4:
fri_step_list.append(highest_power_of_2)
break

fri_step_list.append(4)
highest_power_of_2 = highest_power_of_2 - 4

print(fri_step_list)
42 changes: 33 additions & 9 deletions test.sh
Original file line number Diff line number Diff line change
@@ -1,17 +1,41 @@
#!/bin/bash

# TODO(baitcode): Should live in a scripts folder

# Exit immediately if a command exits with a non-zero status
set -e

# Navigate to the test_files directory, assuming it's in the root of the repository
cd test_files || exit
ESCAPED_PWD=$(printf '%s' "$(pwd)" | sed 's/[\/&]/\\&/g')

# TODO(baitcode): should be moved out of the script to a common place
if [[ "$(uname)" == "Darwin" ]]; then
SED_REPLACE="sed -i \"\" \"s/$ESCAPED_PWD/./\""
else
SED_REPLACE="sed -i \"s/$ESCAPED_PWD/./\""
fi

TEST_FILES=$(pwd)/test_files

function generate_verify_proof {
local PROGRAM=$1
local PARAMS_FILE=$2

cpu_air_prover \
-v 1 \
--out_file=${TEST_FILES}/${PROGRAM}/proof.json \
--private_input_file=${TEST_FILES}/${PROGRAM}/private_input.json \
--public_input_file=${TEST_FILES}/${PROGRAM}/public_input.json \
--prover_config_file=${TEST_FILES}/cpu_air_prover_config.json \
--parameter_file=${TEST_FILES}/${PARAMS_FILE}

bash -c "$SED_REPLACE ${TEST_FILES}/${PROGRAM}/proof.json"

# Run the end-to-end tests
cpu_air_prover \
--out_file=fibonacci_proof.json \
--private_input_file=fibonacci_private_input.json \
--public_input_file=fibonacci_public_input.json \
--prover_config_file=cpu_air_prover_config.json \
--parameter_file=cpu_air_params.json
cpu_air_verifier --in_file=${TEST_FILES}/${PROGRAM}/proof.json && echo "Successfully verified ${PROGRAM} example proof."
}

cpu_air_verifier --in_file=fibonacci_proof.json && echo "Successfully verified example proof."
generate_verify_proof basic cpu_air_params.json
generate_verify_proof fibonacci cpu_air_params.json
generate_verify_proof hash_pedersen hash_pedersen_cpu_air_params.json
generate_verify_proof hash_poseidon hash_poseidon_cpu_air_params.json
generate_verify_proof ecdsa ecdsa_cpu_air_params.json
Binary file added test_files/basic/memory.b
Binary file not shown.
7 changes: 7 additions & 0 deletions test_files/basic/private_input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"trace_path": "./test_files/basic/trace.b",
"memory_path": "./test_files/basic/memory.b",
"pedersen": [],
"range_check": [],
"ecdsa": []
}
368 changes: 368 additions & 0 deletions test_files/basic/proof.json

Large diffs are not rendered by default.

Loading