From c740c917cc5ddced3c58d211adc24e2be7276f35 Mon Sep 17 00:00:00 2001 From: Harikrishnan Shaji Date: Wed, 10 Jul 2024 18:46:24 +0530 Subject: [PATCH] FIx not enough steps being run (#515) * Run all builtin tests as integration tests * Fix bitwise infer value bug * Allow checking for failures * Update blake test * Fix checkUsedCells bug * Update blake test --- integration_tests/BenchMarks.txt | 94 +++++++++---------- .../blake.starknet_with_keccak.cairo | 59 +++++++++++- pkg/runners/zero/zero.go | 9 +- 3 files changed, 112 insertions(+), 50 deletions(-) diff --git a/integration_tests/BenchMarks.txt b/integration_tests/BenchMarks.txt index ce2f8a79..ef4db204 100644 --- a/integration_tests/BenchMarks.txt +++ b/integration_tests/BenchMarks.txt @@ -1,97 +1,97 @@ =========================================================================================================================== | File | PythonVM (ms) | GoVM (ms) | =========================================================================================================================== -| uint256_unsigned_div_rem.small.cairo | 872 | 106 | +| cmp.small.cairo | 902 | 106 | --------------------------------------------------------------------------------------------------------------------------- -| unsafe_keccak_finalize.small.cairo | 659 | 103 | +| dict_squash.small.cairo | 783 | 107 | --------------------------------------------------------------------------------------------------------------------------- -| keccak_test.starknet_with_keccak.cairo| 1304 | 107 | +| ec.small.cairo | 4479 | 158 | --------------------------------------------------------------------------------------------------------------------------- -| assert_not_zero.cairo | 678 | 109 | +| import_secp256R1P.small.cairo | 610 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| dict_squash.small.cairo | 1965 | 273 | +| is_positive.small.cairo | 733 | 114 | --------------------------------------------------------------------------------------------------------------------------- -| split64.small.cairo | 944 | 107 | +| signed_div_rem.small.cairo | 701 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| split_felt.small.cairo | 890 | 104 | +| uint256_add.small.cairo | 720 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| cmp.small.cairo | 1150 | 111 | +| blake.starknet_with_keccak.cairo | 46788 | 482 | --------------------------------------------------------------------------------------------------------------------------- -| memcpy.cairo | 615 | 105 | +| pedersen_test.small.cairo | 625 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| factorial.cairo | 1041 | 105 | +| pow.small.cairo | 712 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| search_sorted_lower.small.cairo | 760 | 109 | +| verify_ecdsa_signature.small.cairo | 754 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| uint256_signedNN.small.cairo | 863 | 108 | +| memset.cairo | 682 | 104 | --------------------------------------------------------------------------------------------------------------------------- -| fib.cairo | 666 | 103 | +| split64.small.cairo | 812 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| assert_250_bits.small.cairo | 915 | 129 | +| uint256_sqrt.small.cairo | 923 | 108 | --------------------------------------------------------------------------------------------------------------------------- -| ec.small.cairo | 5145 | 159 | +| assert_250_bits.small.cairo | 969 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| get_point_from_x.small.cairo | 869 | 109 | +| is_quad_residue.small.cairo | 793 | 123 | --------------------------------------------------------------------------------------------------------------------------- -| pow.small.cairo | 787 | 106 | +| reduce_v1.small.cairo | 824 | 106 | --------------------------------------------------------------------------------------------------------------------------- -| assert_not_equal.cairo | 783 | 105 | +| set_add.small.cairo | 662 | 104 | --------------------------------------------------------------------------------------------------------------------------- -| hintrefs.cairo | 671 | 105 | +| split_felt.small.cairo | 812 | 106 | --------------------------------------------------------------------------------------------------------------------------- -| import_secp256R1P.small.cairo | 697 | 106 | +| uint256_mul_div_mod.small.cairo | 916 | 108 | --------------------------------------------------------------------------------------------------------------------------- -| sqrt.small.cairo | 806 | 108 | +| poseidon_test.starknet_with_keccak.cairo| 1315 | 107 | --------------------------------------------------------------------------------------------------------------------------- -| verify_ecdsa_signature.small.cairo | 937 | 108 | +| div_mod_n.small.cairo | 942 | 111 | --------------------------------------------------------------------------------------------------------------------------- -| verify_zero.small.cairo | 801 | 105 | +| assert_not_zero.cairo | 666 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| ecdsa_test.starknet_with_keccak.cairo | 1399 | 107 | +| memcpy.cairo | 631 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| pedersen_test.small.cairo | 636 | 103 | +| search_sorted_lower.small.cairo | 759 | 107 | --------------------------------------------------------------------------------------------------------------------------- -| blake.starknet_with_keccak.cairo | 3863 | 136 | +| uint256_unsigned_div_rem.small.cairo | 873 | 108 | --------------------------------------------------------------------------------------------------------------------------- -| reduce_v1.small.cairo | 823 | 105 | +| unsigned_div_rem.small.cairo | 798 | 106 | --------------------------------------------------------------------------------------------------------------------------- -| uint256_add.small.cairo | 708 | 103 | +| verify_zero.small.cairo | 716 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| uint256_sqrt.small.cairo | 929 | 108 | +| fib.cairo | 651 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| poseidon_test.starknet_with_keccak.cairo| 1260 | 146 | +| assert_not_equal.cairo | 638 | 102 | --------------------------------------------------------------------------------------------------------------------------- -| dict.cairo | 1876 | 109 | +| keccak_test.starknet_with_keccak.cairo| 1293 | 107 | --------------------------------------------------------------------------------------------------------------------------- -| is_positive.small.cairo | 754 | 107 | +| is_zero.small.cairo | 830 | 104 | --------------------------------------------------------------------------------------------------------------------------- -| split_int.small.cairo | 803 | 105 | +| hintrefs.cairo | 714 | 104 | --------------------------------------------------------------------------------------------------------------------------- -| uint256_mul_div_mod.small.cairo | 914 | 106 | +| unsafe_keccak.small.cairo | 707 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| set_add.small.cairo | 690 | 107 | +| factorial.cairo | 1013 | 109 | --------------------------------------------------------------------------------------------------------------------------- -| unsafe_keccak.small.cairo | 698 | 104 | +| simple.cairo | 637 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| unsigned_div_rem.small.cairo | 819 | 105 | +| ecdsa_test.starknet_with_keccak.cairo | 1385 | 108 | --------------------------------------------------------------------------------------------------------------------------- -| usort.small.cairo | 885 | 112 | +| get_point_from_x.small.cairo | 870 | 106 | --------------------------------------------------------------------------------------------------------------------------- -| div_mod_n.small.cairo | 1921 | 150 | +| dict.cairo | 653 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| find_element.small.cairo | 889 | 106 | +| find_element.small.cairo | 774 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| is_quad_residue.small.cairo | 862 | 124 | +| split_int.small.cairo | 713 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| memset.cairo | 853 | 179 | +| sqrt.small.cairo | 823 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| bitwise_builtin_test.starknet_with_keccak.cairo| 1293 | 108 | +| uint256_signedNN.small.cairo | 683 | 105 | --------------------------------------------------------------------------------------------------------------------------- -| alloc.cairo | 871 | 229 | +| unsafe_keccak_finalize.small.cairo | 675 | 103 | --------------------------------------------------------------------------------------------------------------------------- -| is_zero.small.cairo | 870 | 107 | +| usort.small.cairo | 740 | 106 | --------------------------------------------------------------------------------------------------------------------------- -| signed_div_rem.small.cairo | 804 | 111 | +| alloc.cairo | 715 | 596 | --------------------------------------------------------------------------------------------------------------------------- -| simple.cairo | 606 | 103 | +| bitwise_builtin_test.starknet_with_keccak.cairo| 1304 | 107 | =========================================================================================================================== diff --git a/integration_tests/cairo_zero_hint_tests/blake.starknet_with_keccak.cairo b/integration_tests/cairo_zero_hint_tests/blake.starknet_with_keccak.cairo index b93c7583..8d900c6c 100644 --- a/integration_tests/cairo_zero_hint_tests/blake.starknet_with_keccak.cairo +++ b/integration_tests/cairo_zero_hint_tests/blake.starknet_with_keccak.cairo @@ -3,9 +3,10 @@ %builtins range_check bitwise from starkware.cairo.common.alloc import alloc -from starkware.cairo.common.cairo_blake2s.blake2s import blake2s, blake2s_felts +from starkware.cairo.common.cairo_blake2s.blake2s import blake2s, blake2s_felts, finalize_blake2s from starkware.cairo.common.cairo_builtins import BitwiseBuiltin from starkware.cairo.common.bool import TRUE, FALSE +from starkware.cairo.common.uint256 import Uint256 func test_hash{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}() { alloc_locals; @@ -59,9 +60,65 @@ func test_blake2s_felts{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}() { return (); } +func fill_array(array: felt*, base: felt, step: felt, array_length: felt, iterator: felt) { + if (iterator == array_length) { + return (); + } + assert array[iterator] = base + step * iterator; + return fill_array(array, base, step, array_length, iterator + 1); +} + +func test_integration{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}(iter: felt, last: felt) { + alloc_locals; + if (iter == last) { + return (); + } + + let (data: felt*) = alloc(); + fill_array(data, iter, 2 * iter, 10, 0); + + let (local blake2s_ptr_start) = alloc(); + let blake2s_ptr = blake2s_ptr_start; + let (res_1: Uint256) = blake2s{range_check_ptr=range_check_ptr, blake2s_ptr=blake2s_ptr}( + data, 9 + ); + + finalize_blake2s(blake2s_ptr_start, blake2s_ptr); + + let (local blake2s_ptr_start) = alloc(); + let blake2s_ptr = blake2s_ptr_start; + + let (data_2: felt*) = alloc(); + assert data_2[0] = res_1.low; + assert data_2[1] = res_1.high; + + let (res_2) = blake2s_felts{range_check_ptr=range_check_ptr, blake2s_ptr=blake2s_ptr}( + 2, data_2, TRUE + ); + + finalize_blake2s(blake2s_ptr_start, blake2s_ptr); + + if (iter == last - 1 and last == 10) { + assert res_1.low = 327684140823325841083166505949840946643; + assert res_1.high = 28077572547397067729112288485703133566; + assert res_2.low = 323710308182296053867309835081443411626; + assert res_2.high = 159988406782415793602959692147600111481; + } + + if (iter == last - 1 and last == 100) { + assert res_1.low = 26473789897582596397897414631405692327; + assert res_1.high = 35314462001555260569814614879256292984; + assert res_2.low = 256911263205530722270005922452382996929; + assert res_2.high = 248798531786594770765531047659644061441; + } + + return test_integration(iter + 1, last); +} + func main{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}() { test_hash(); test_blake2s_felts(); + test_integration(0, 10); return (); } diff --git a/pkg/runners/zero/zero.go b/pkg/runners/zero/zero.go index 09802969..909761db 100644 --- a/pkg/runners/zero/zero.go +++ b/pkg/runners/zero/zero.go @@ -287,12 +287,17 @@ func (runner *ZeroRunner) EndRun() { // or there are not enough trace cells to fill the entire range check range func (runner *ZeroRunner) checkUsedCells() error { for _, bRunner := range runner.layout.Builtins { - builtinSegment, ok := runner.vm.Memory.FindSegmentWithBuiltin(bRunner.Runner.String()) + builtinName := bRunner.Runner.String() + builtinSegment, ok := runner.vm.Memory.FindSegmentWithBuiltin(builtinName) if ok { - _, err := bRunner.Runner.GetAllocatedSize(builtinSegment.Len(), runner.steps()) + segmentUsedSize := builtinSegment.Len() + allocatedSize, err := bRunner.Runner.GetAllocatedSize(segmentUsedSize, runner.steps()) if err != nil { return err } + if segmentUsedSize > allocatedSize { + return fmt.Errorf("builtin %s used size: %d exceeds allocated size: %d ", builtinName, segmentUsedSize, allocatedSize) + } } } return runner.checkRangeCheckUsage()