From 8cadb202691905435aace75a8c45212c85f989fc Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 01:26:23 +0530 Subject: [PATCH 01/12] Bug fix --- integration_tests/cairozero_test.go | 142 +-- integration_tests/test/iszeropack.small.cairo | 49 + .../test/iszeropack.small_compile_py_memory | Bin 0 -> 3800 bytes .../test/iszeropack.small_compile_py_trace | Bin 0 -> 12288 bytes .../test/iszeropack.small_compiled.json | 1040 +++++++++++++++++ pkg/hintrunner/zero/zerohint.go | 1 + pkg/hintrunner/zero/zerohint_ec.go | 2 +- 7 files changed, 1164 insertions(+), 70 deletions(-) create mode 100644 integration_tests/test/iszeropack.small.cairo create mode 100644 integration_tests/test/iszeropack.small_compile_py_memory create mode 100644 integration_tests/test/iszeropack.small_compile_py_trace create mode 100644 integration_tests/test/iszeropack.small_compiled.json diff --git a/integration_tests/cairozero_test.go b/integration_tests/cairozero_test.go index e2f7383e1..6bcc2ed51 100644 --- a/integration_tests/cairozero_test.go +++ b/integration_tests/cairozero_test.go @@ -51,35 +51,39 @@ func (f *Filter) filtered(testFile string) bool { func TestCairoZeroFiles(t *testing.T) { root1 := "./cairo_zero_hint_tests/" root2 := "./cairo_zero_file_tests/" + root3 := "./test" - testFiles1, err := os.ReadDir(root1) - require.NoError(t, err) + // testFiles1, err := os.ReadDir(root1) + // require.NoError(t, err) + + // testFiles2, err := os.ReadDir(root2) + // require.NoError(t, err) - testFiles2, err := os.ReadDir(root2) + testFiles3, err := os.ReadDir(root3) require.NoError(t, err) - testFiles := append(testFiles1, testFiles2...) + // testFiles := append(testFiles1, testFiles2...) - testFiles1Map := make(map[string]struct{}, len(testFiles1)) - for _, entry := range testFiles1 { - testFiles1Map[entry.Name()] = struct{}{} - } + // testFiles1Map := make(map[string]struct{}, len(testFiles1)) + // for _, entry := range testFiles1 { + // testFiles1Map[entry.Name()] = struct{}{} + // } // filter is for debugging purposes filter := Filter{} filter.init() - for _, dirEntry := range testFiles { + for _, dirEntry := range testFiles3 { if dirEntry.IsDir() || isGeneratedFile(dirEntry.Name()) { continue } - var path string - if _, found := testFiles1Map[dirEntry.Name()]; found { - path = filepath.Join(root1, dirEntry.Name()) - } else { - path = filepath.Join(root2, dirEntry.Name()) - } + // var path string + // if _, found := testFiles1Map[dirEntry.Name()]; found { + // path = filepath.Join(root1, dirEntry.Name()) + // } else { + // } + path := filepath.Join(root3, dirEntry.Name()) if !filter.filtered(dirEntry.Name()) { continue @@ -314,76 +318,76 @@ func memoryRepr(memory []*fp.Element) string { } -func TestFailingRangeCheck(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/range_check.small.cairo") - require.NoError(t, err) +// func TestFailingRangeCheck(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/range_check.small.cairo") +// require.NoError(t, err) - _, _, _, err = runVm(compiledOutput) - require.ErrorContains(t, err, "check write: 2**128 <") +// _, _, _, err = runVm(compiledOutput) +// require.ErrorContains(t, err, "check write: 2**128 <") - clean("./builtin_tests/") -} +// clean("./builtin_tests/") +// } -func TestBitwise(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/bitwise_builtin_test.starknet_with_keccak.cairo") - require.NoError(t, err) +// func TestBitwise(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/bitwise_builtin_test.starknet_with_keccak.cairo") +// require.NoError(t, err) - _, _, _, err = runVm(compiledOutput) - require.NoError(t, err) +// _, _, _, err = runVm(compiledOutput) +// require.NoError(t, err) - clean("./builtin_tests/") -} +// clean("./builtin_tests/") +// } -func TestPedersen(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/pedersen_test.small.cairo") - require.NoError(t, err) +// func TestPedersen(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/pedersen_test.small.cairo") +// require.NoError(t, err) - _, _, output, err := runVm(compiledOutput) - require.NoError(t, err) - require.Contains(t, output, "Program output:\n 2089986280348253421170679821480865132823066470938446095505822317253594081284") +// _, _, output, err := runVm(compiledOutput) +// require.NoError(t, err) +// require.Contains(t, output, "Program output:\n 2089986280348253421170679821480865132823066470938446095505822317253594081284") - clean("./builtin_tests/") -} +// clean("./builtin_tests/") +// } -func TestPoseidon(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/poseidon_test.starknet_with_keccak.cairo") - require.NoError(t, err) +// func TestPoseidon(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/poseidon_test.starknet_with_keccak.cairo") +// require.NoError(t, err) - _, _, output, err := runVm(compiledOutput) - require.NoError(t, err) - require.Contains(t, output, "Program output:\n 442682200349489646213731521593476982257703159825582578145778919623645026501\n 2233832504250924383748553933071188903279928981104663696710686541536735838182\n 2512222140811166287287541003826449032093371832913959128171347018667852712082\n") - require.Contains(t, output, "3016509350703874362933565866148509373957094754875411937434637891208784994231\n 3015199725895936530535660185611704199044060139852899280809302949374221328865\n 3062378460350040063467318871602229987911299744598148928378797834245039883769\n") - clean("./builtin_tests/") -} +// _, _, output, err := runVm(compiledOutput) +// require.NoError(t, err) +// require.Contains(t, output, "Program output:\n 442682200349489646213731521593476982257703159825582578145778919623645026501\n 2233832504250924383748553933071188903279928981104663696710686541536735838182\n 2512222140811166287287541003826449032093371832913959128171347018667852712082\n") +// require.Contains(t, output, "3016509350703874362933565866148509373957094754875411937434637891208784994231\n 3015199725895936530535660185611704199044060139852899280809302949374221328865\n 3062378460350040063467318871602229987911299744598148928378797834245039883769\n") +// clean("./builtin_tests/") +// } -func TestECDSA(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/ecdsa_test.starknet_with_keccak.cairo") - require.NoError(t, err) +// func TestECDSA(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/ecdsa_test.starknet_with_keccak.cairo") +// require.NoError(t, err) - _, _, _, err = runVm(compiledOutput) - require.NoError(t, err) +// _, _, _, err = runVm(compiledOutput) +// require.NoError(t, err) - clean("./builtin_tests/") -} +// clean("./builtin_tests/") +// } -func TestEcOp(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/ecop.starknet_with_keccak.cairo") - require.NoError(t, err) +// func TestEcOp(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/ecop.starknet_with_keccak.cairo") +// require.NoError(t, err) - _, _, _, err = runVm(compiledOutput) - // todo(rodro): This test is failing due to the lack of hint processing. It should be address soon - require.Error(t, err) +// _, _, _, err = runVm(compiledOutput) +// // todo(rodro): This test is failing due to the lack of hint processing. It should be address soon +// require.Error(t, err) - clean("./builtin_tests/") -} +// clean("./builtin_tests/") +// } -func TestKeccak(t *testing.T) { - compiledOutput, err := compileZeroCode("./builtin_tests/keccak_test.starknet_with_keccak.cairo") - require.NoError(t, err) +// func TestKeccak(t *testing.T) { +// compiledOutput, err := compileZeroCode("./builtin_tests/keccak_test.starknet_with_keccak.cairo") +// require.NoError(t, err) - _, _, output, err := runVm(compiledOutput) - require.NoError(t, err) - require.Contains(t, output, "Program output:\n 1304102964824333531548398680304964155037696012322029952943772\n 688749063493959345342507274897412933692859993314608487848187\n 986714560881445649520443980361539218531403996118322524237197\n 1184757872753521629808292433475729390634371625298664050186717\n 719230200744669084408849842242045083289669818920073250264351\n 1543031433416778513637578850638598357854418012971636697855068\n 63644822371671650271181212513090078620238279557402571802224\n 879446821229338092940381117330194802032344024906379963157761\n") +// _, _, output, err := runVm(compiledOutput) +// require.NoError(t, err) +// require.Contains(t, output, "Program output:\n 1304102964824333531548398680304964155037696012322029952943772\n 688749063493959345342507274897412933692859993314608487848187\n 986714560881445649520443980361539218531403996118322524237197\n 1184757872753521629808292433475729390634371625298664050186717\n 719230200744669084408849842242045083289669818920073250264351\n 1543031433416778513637578850638598357854418012971636697855068\n 63644822371671650271181212513090078620238279557402571802224\n 879446821229338092940381117330194802032344024906379963157761\n") - clean("./builtin_tests/") -} +// clean("./builtin_tests/") +// } diff --git a/integration_tests/test/iszeropack.small.cairo b/integration_tests/test/iszeropack.small.cairo new file mode 100644 index 000000000..38281941b --- /dev/null +++ b/integration_tests/test/iszeropack.small.cairo @@ -0,0 +1,49 @@ +// Returns 1 if x == 0 (mod secp256k1_prime), and 0 otherwise. + +%builtins range_check + +from starkware.cairo.common.cairo_secp.bigint import BigInt3 + +func is_zero{range_check_ptr}(x: BigInt3) -> (res: felt) { + %{ + from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack + + value = pack(ids.x, PRIME) % SECP_P + %} + %{ + from starkware.cairo.common.cairo_secp.secp_utils import pack + + x = pack(ids.x, PRIME) % SECP_P + %} + if (nondet %{ x == 0 %} != 0) { + return (res=1); + } + return (res=0); +} + +func test_is_zero{range_check_ptr}() -> () { + let zero = BigInt3(0, 0, 0); + + let (res: felt) = is_zero(zero); + assert res = 1; + + let one = BigInt3(1, 0, 0); + + let (res: felt) = is_zero(one); + assert res = 0; + + let secp256k1_prime = BigInt3( + 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815 + ); + + let (res: felt) = is_zero(secp256k1_prime); + assert res = 1; + + return (); +} + +func main{range_check_ptr}() -> () { + test_is_zero(); + + return (); +} diff --git a/integration_tests/test/iszeropack.small_compile_py_memory b/integration_tests/test/iszeropack.small_compile_py_memory new file mode 100644 index 0000000000000000000000000000000000000000..2a24219becd98658009afffff7fa1f0c03d66c57 GIT binary patch literal 3800 zcma)8S6kaa5VR7o9Z16|KpG~2^n?;hIuIb8G)QkhMSjo!ZIBHaSVCLWuJW(#>QdF7(cmC-4H};yJ$v-cHi}hka7L1YYYoFE3Kw#}PQx{;P9gdcV!M zX71=brioZ7=g16;#BQw~SM}hS{2Jb2J8~DWV z`)=ygMWeaf$oF+ojPkR|xR@vUsl%5aTVq0Z;YiZJ^#-px(Pcz4zcL_@D@ge*~&Ne*%x^jU~Ts z1w8)-Y}Mz_-a5ncT26opBWL5Yj$dVjkR0- zf&BF~2Q`n44=JD6JWxJ0eyDtAb5{A>_?+^E@p)K#@CgfZI*`@S_I@m=L_o8{-nc=>T&J^8i$>dBw+>PhiB*PiyA z_rx2`+TS-`_wvYi-Rog^YXA>f1U%p&4Dfx(9^e5FVW3G3+zULk2IxZ;0S|Zx1H2ov z2YA3k7~tKQJ-`DV!a$Q6xEFY64bX=y0v_-X26#7S5AcA8Fu=Ppdw>T#gn=eCa4+!C s8lVqZ1U%p&4DfEu9^e5FVSsmI_5crf2m?)O;9lUNH9#M-2wfij0gGr!EC2ui literal 0 HcmV?d00001 diff --git a/integration_tests/test/iszeropack.small_compiled.json b/integration_tests/test/iszeropack.small_compiled.json new file mode 100644 index 000000000..82feb8ebe --- /dev/null +++ b/integration_tests/test/iszeropack.small_compiled.json @@ -0,0 +1,1040 @@ +{ + "attributes": [], + "builtins": [ + "range_check" + ], + "compiler_version": "0.13.1", + "data": [ + "0x40780017fff7fff", + "0x1", + "0x1104800180018000", + "0x35", + "0x10780017fff7fff", + "0x0", + "0x40780017fff7fff", + "0x1", + "0x20680017fff7fff", + "0x4", + "0x10780017fff7fff", + "0x6", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x1", + "0x208b7fff7fff7ffe", + "0x480a7ffa7fff8000", + "0x480680017fff8000", + "0x0", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffec", + "0x400680017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x1", + "0x480680017fff8000", + "0x0", + "0x480680017fff8000", + "0x0", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe1", + "0x400680017fff7fff", + "0x0", + "0x48127ffe7fff8000", + "0x480680017fff8000", + "0x3ffffffffffffefffffc2f", + "0x480680017fff8000", + "0x3fffffffffffffffffffff", + "0x480680017fff8000", + "0xfffffffffffffffffffff", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd6", + "0x400680017fff7fff", + "0x1", + "0x48127ffe7fff8000", + "0x208b7fff7fff7ffe", + "0x480a7ffd7fff8000", + "0x1104800180018000", + "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffdd", + "0x208b7fff7fff7ffe" + ], + "debug_info": null, + "hints": { + "6": [ + { + "accessible_scopes": [ + "__main__", + "__main__.is_zero" + ], + "code": "from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack\n\nvalue = pack(ids.x, PRIME) % SECP_P", + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 0 + }, + "reference_ids": { + "__main__.is_zero.range_check_ptr": 1, + "__main__.is_zero.x": 0 + } + } + }, + { + "accessible_scopes": [ + "__main__", + "__main__.is_zero" + ], + "code": "from starkware.cairo.common.cairo_secp.secp_utils import pack\n\nx = pack(ids.x, PRIME) % SECP_P", + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 0 + }, + "reference_ids": { + "__main__.is_zero.range_check_ptr": 1, + "__main__.is_zero.x": 0 + } + } + }, + { + "accessible_scopes": [ + "__main__", + "__main__.is_zero" + ], + "code": "memory[ap] = to_felt_or_relocatable(x == 0)", + "flow_tracking_data": { + "ap_tracking": { + "group": 2, + "offset": 0 + }, + "reference_ids": { + "__main__.is_zero.range_check_ptr": 1, + "__main__.is_zero.x": 0 + } + } + } + ] + }, + "identifiers": { + "__main__.BigInt3": { + "destination": "starkware.cairo.common.cairo_secp.bigint.BigInt3", + "type": "alias" + }, + "__main__.__end__": { + "pc": 4, + "type": "label" + }, + "__main__.__start__": { + "pc": 0, + "type": "label" + }, + "__main__.is_zero": { + "decorators": [], + "pc": 6, + "type": "function" + }, + "__main__.is_zero.Args": { + "full_name": "__main__.is_zero.Args", + "members": { + "x": { + "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "offset": 0 + } + }, + "size": 3, + "type": "struct" + }, + "__main__.is_zero.ImplicitArgs": { + "full_name": "__main__.is_zero.ImplicitArgs", + "members": { + "range_check_ptr": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.is_zero.Return": { + "cairo_type": "(res: felt)", + "type": "type_definition" + }, + "__main__.is_zero.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.is_zero.__temp0": { + "cairo_type": "felt", + "full_name": "__main__.is_zero.__temp0", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 1 + }, + "pc": 8, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.is_zero.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.is_zero.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 6, + "value": "[cast(fp + (-6), felt*)]" + } + ], + "type": "reference" + }, + "__main__.is_zero.x": { + "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "full_name": "__main__.is_zero.x", + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 6, + "value": "[cast(fp + (-5), starkware.cairo.common.cairo_secp.bigint3.BigInt3*)]" + } + ], + "type": "reference" + }, + "__main__.main": { + "decorators": [], + "pc": 55, + "type": "function" + }, + "__main__.main.Args": { + "full_name": "__main__.main.Args", + "members": {}, + "size": 0, + "type": "struct" + }, + "__main__.main.ImplicitArgs": { + "full_name": "__main__.main.ImplicitArgs", + "members": { + "range_check_ptr": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.main.Return": { + "cairo_type": "()", + "type": "type_definition" + }, + "__main__.main.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.main.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.main.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 4, + "offset": 0 + }, + "pc": 55, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 4, + "offset": 31 + }, + "pc": 58, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.test_is_zero": { + "decorators": [], + "pc": 20, + "type": "function" + }, + "__main__.test_is_zero.Args": { + "full_name": "__main__.test_is_zero.Args", + "members": {}, + "size": 0, + "type": "struct" + }, + "__main__.test_is_zero.ImplicitArgs": { + "full_name": "__main__.test_is_zero.ImplicitArgs", + "members": { + "range_check_ptr": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 1, + "type": "struct" + }, + "__main__.test_is_zero.Return": { + "cairo_type": "()", + "type": "type_definition" + }, + "__main__.test_is_zero.SIZEOF_LOCALS": { + "type": "const", + "value": 0 + }, + "__main__.test_is_zero.one": { + "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "full_name": "__main__.test_is_zero.one", + "references": [ + { + "ap_tracking_data": { + "group": 3, + "offset": 9 + }, + "pc": 31, + "value": "cast((1, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" + } + ], + "type": "reference" + }, + "__main__.test_is_zero.range_check_ptr": { + "cairo_type": "felt", + "full_name": "__main__.test_is_zero.range_check_ptr", + "references": [ + { + "ap_tracking_data": { + "group": 3, + "offset": 0 + }, + "pc": 20, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 9 + }, + "pc": 29, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 18 + }, + "pc": 40, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 27 + }, + "pc": 51, + "value": "[cast(ap + (-2), felt*)]" + } + ], + "type": "reference" + }, + "__main__.test_is_zero.res": { + "cairo_type": "felt", + "full_name": "__main__.test_is_zero.res", + "references": [ + { + "ap_tracking_data": { + "group": 3, + "offset": 9 + }, + "pc": 29, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 18 + }, + "pc": 40, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 27 + }, + "pc": 51, + "value": "[cast(ap + (-1), felt*)]" + } + ], + "type": "reference" + }, + "__main__.test_is_zero.secp256k1_prime": { + "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "full_name": "__main__.test_is_zero.secp256k1_prime", + "references": [ + { + "ap_tracking_data": { + "group": 3, + "offset": 18 + }, + "pc": 42, + "value": "cast((\n 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815\n ), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" + } + ], + "type": "reference" + }, + "__main__.test_is_zero.zero": { + "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "full_name": "__main__.test_is_zero.zero", + "references": [ + { + "ap_tracking_data": { + "group": 3, + "offset": 0 + }, + "pc": 20, + "value": "cast((0, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" + } + ], + "type": "reference" + }, + "starkware.cairo.common.bitwise.ALL_ONES": { + "type": "const", + "value": -106710729501573572985208420194530329073740042555888586719234 + }, + "starkware.cairo.common.bitwise.BitwiseBuiltin": { + "destination": "starkware.cairo.common.cairo_builtins.BitwiseBuiltin", + "type": "alias" + }, + "starkware.cairo.common.bool.FALSE": { + "type": "const", + "value": 0 + }, + "starkware.cairo.common.bool.TRUE": { + "type": "const", + "value": 1 + }, + "starkware.cairo.common.cairo_builtins.BitwiseBuiltin": { + "full_name": "starkware.cairo.common.cairo_builtins.BitwiseBuiltin", + "members": { + "x": { + "cairo_type": "felt", + "offset": 0 + }, + "x_and_y": { + "cairo_type": "felt", + "offset": 2 + }, + "x_or_y": { + "cairo_type": "felt", + "offset": 4 + }, + "x_xor_y": { + "cairo_type": "felt", + "offset": 3 + }, + "y": { + "cairo_type": "felt", + "offset": 1 + } + }, + "size": 5, + "type": "struct" + }, + "starkware.cairo.common.cairo_builtins.EcOpBuiltin": { + "full_name": "starkware.cairo.common.cairo_builtins.EcOpBuiltin", + "members": { + "m": { + "cairo_type": "felt", + "offset": 4 + }, + "p": { + "cairo_type": "starkware.cairo.common.ec_point.EcPoint", + "offset": 0 + }, + "q": { + "cairo_type": "starkware.cairo.common.ec_point.EcPoint", + "offset": 2 + }, + "r": { + "cairo_type": "starkware.cairo.common.ec_point.EcPoint", + "offset": 5 + } + }, + "size": 7, + "type": "struct" + }, + "starkware.cairo.common.cairo_builtins.EcPoint": { + "destination": "starkware.cairo.common.ec_point.EcPoint", + "type": "alias" + }, + "starkware.cairo.common.cairo_builtins.HashBuiltin": { + "full_name": "starkware.cairo.common.cairo_builtins.HashBuiltin", + "members": { + "result": { + "cairo_type": "felt", + "offset": 2 + }, + "x": { + "cairo_type": "felt", + "offset": 0 + }, + "y": { + "cairo_type": "felt", + "offset": 1 + } + }, + "size": 3, + "type": "struct" + }, + "starkware.cairo.common.cairo_builtins.KeccakBuiltin": { + "full_name": "starkware.cairo.common.cairo_builtins.KeccakBuiltin", + "members": { + "input": { + "cairo_type": "starkware.cairo.common.keccak_state.KeccakBuiltinState", + "offset": 0 + }, + "output": { + "cairo_type": "starkware.cairo.common.keccak_state.KeccakBuiltinState", + "offset": 8 + } + }, + "size": 16, + "type": "struct" + }, + "starkware.cairo.common.cairo_builtins.KeccakBuiltinState": { + "destination": "starkware.cairo.common.keccak_state.KeccakBuiltinState", + "type": "alias" + }, + "starkware.cairo.common.cairo_builtins.PoseidonBuiltin": { + "full_name": "starkware.cairo.common.cairo_builtins.PoseidonBuiltin", + "members": { + "input": { + "cairo_type": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", + "offset": 0 + }, + "output": { + "cairo_type": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", + "offset": 3 + } + }, + "size": 6, + "type": "struct" + }, + "starkware.cairo.common.cairo_builtins.PoseidonBuiltinState": { + "destination": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", + "type": "alias" + }, + "starkware.cairo.common.cairo_builtins.SignatureBuiltin": { + "full_name": "starkware.cairo.common.cairo_builtins.SignatureBuiltin", + "members": { + "message": { + "cairo_type": "felt", + "offset": 1 + }, + "pub_key": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 2, + "type": "struct" + }, + "starkware.cairo.common.cairo_secp.bigint.BASE": { + "destination": "starkware.cairo.common.cairo_secp.constants.BASE", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.BigInt3": { + "destination": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.RC_BOUND": { + "destination": "starkware.cairo.common.math_cmp.RC_BOUND", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.Uint256": { + "destination": "starkware.cairo.common.uint256.Uint256", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.UnreducedBigInt3": { + "destination": "starkware.cairo.common.cairo_secp.bigint3.UnreducedBigInt3", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.UnreducedBigInt5": { + "full_name": "starkware.cairo.common.cairo_secp.bigint.UnreducedBigInt5", + "members": { + "d0": { + "cairo_type": "felt", + "offset": 0 + }, + "d1": { + "cairo_type": "felt", + "offset": 1 + }, + "d2": { + "cairo_type": "felt", + "offset": 2 + }, + "d3": { + "cairo_type": "felt", + "offset": 3 + }, + "d4": { + "cairo_type": "felt", + "offset": 4 + } + }, + "size": 5, + "type": "struct" + }, + "starkware.cairo.common.cairo_secp.bigint.assert_nn": { + "destination": "starkware.cairo.common.math.assert_nn", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.assert_nn_le": { + "destination": "starkware.cairo.common.math.assert_nn_le", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint.unsigned_div_rem": { + "destination": "starkware.cairo.common.math.unsigned_div_rem", + "type": "alias" + }, + "starkware.cairo.common.cairo_secp.bigint3.BigInt3": { + "full_name": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", + "members": { + "d0": { + "cairo_type": "felt", + "offset": 0 + }, + "d1": { + "cairo_type": "felt", + "offset": 1 + }, + "d2": { + "cairo_type": "felt", + "offset": 2 + } + }, + "size": 3, + "type": "struct" + }, + "starkware.cairo.common.cairo_secp.bigint3.SumBigInt3": { + "full_name": "starkware.cairo.common.cairo_secp.bigint3.SumBigInt3", + "members": { + "d0": { + "cairo_type": "felt", + "offset": 0 + }, + "d1": { + "cairo_type": "felt", + "offset": 1 + }, + "d2": { + "cairo_type": "felt", + "offset": 2 + } + }, + "size": 3, + "type": "struct" + }, + "starkware.cairo.common.cairo_secp.bigint3.UnreducedBigInt3": { + "full_name": "starkware.cairo.common.cairo_secp.bigint3.UnreducedBigInt3", + "members": { + "d0": { + "cairo_type": "felt", + "offset": 0 + }, + "d1": { + "cairo_type": "felt", + "offset": 1 + }, + "d2": { + "cairo_type": "felt", + "offset": 2 + } + }, + "size": 3, + "type": "struct" + }, + "starkware.cairo.common.cairo_secp.constants.BASE": { + "type": "const", + "value": 77371252455336267181195264 + }, + "starkware.cairo.common.cairo_secp.constants.BETA": { + "type": "const", + "value": 7 + }, + "starkware.cairo.common.cairo_secp.constants.N0": { + "type": "const", + "value": 10428087374290690730508609 + }, + "starkware.cairo.common.cairo_secp.constants.N1": { + "type": "const", + "value": 77371252455330678278691517 + }, + "starkware.cairo.common.cairo_secp.constants.N2": { + "type": "const", + "value": 19342813113834066795298815 + }, + "starkware.cairo.common.cairo_secp.constants.P0": { + "type": "const", + "value": 77371252455336262886226991 + }, + "starkware.cairo.common.cairo_secp.constants.P1": { + "type": "const", + "value": 77371252455336267181195263 + }, + "starkware.cairo.common.cairo_secp.constants.P2": { + "type": "const", + "value": 19342813113834066795298815 + }, + "starkware.cairo.common.cairo_secp.constants.SECP_PRIME_HIGH": { + "type": "const", + "value": 340282366920938463463374607431768211455 + }, + "starkware.cairo.common.cairo_secp.constants.SECP_PRIME_LOW": { + "type": "const", + "value": 340282366920938463463374607427473243183 + }, + "starkware.cairo.common.cairo_secp.constants.SECP_REM": { + "type": "const", + "value": 4294968273 + }, + "starkware.cairo.common.ec_point.EcPoint": { + "full_name": "starkware.cairo.common.ec_point.EcPoint", + "members": { + "x": { + "cairo_type": "felt", + "offset": 0 + }, + "y": { + "cairo_type": "felt", + "offset": 1 + } + }, + "size": 2, + "type": "struct" + }, + "starkware.cairo.common.keccak_state.KeccakBuiltinState": { + "full_name": "starkware.cairo.common.keccak_state.KeccakBuiltinState", + "members": { + "s0": { + "cairo_type": "felt", + "offset": 0 + }, + "s1": { + "cairo_type": "felt", + "offset": 1 + }, + "s2": { + "cairo_type": "felt", + "offset": 2 + }, + "s3": { + "cairo_type": "felt", + "offset": 3 + }, + "s4": { + "cairo_type": "felt", + "offset": 4 + }, + "s5": { + "cairo_type": "felt", + "offset": 5 + }, + "s6": { + "cairo_type": "felt", + "offset": 6 + }, + "s7": { + "cairo_type": "felt", + "offset": 7 + } + }, + "size": 8, + "type": "struct" + }, + "starkware.cairo.common.math.FALSE": { + "destination": "starkware.cairo.common.bool.FALSE", + "type": "alias" + }, + "starkware.cairo.common.math.TRUE": { + "destination": "starkware.cairo.common.bool.TRUE", + "type": "alias" + }, + "starkware.cairo.common.math_cmp.RC_BOUND": { + "type": "const", + "value": 340282366920938463463374607431768211456 + }, + "starkware.cairo.common.math_cmp.assert_le_felt": { + "destination": "starkware.cairo.common.math.assert_le_felt", + "type": "alias" + }, + "starkware.cairo.common.math_cmp.assert_lt_felt": { + "destination": "starkware.cairo.common.math.assert_lt_felt", + "type": "alias" + }, + "starkware.cairo.common.poseidon_state.PoseidonBuiltinState": { + "full_name": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", + "members": { + "s0": { + "cairo_type": "felt", + "offset": 0 + }, + "s1": { + "cairo_type": "felt", + "offset": 1 + }, + "s2": { + "cairo_type": "felt", + "offset": 2 + } + }, + "size": 3, + "type": "struct" + }, + "starkware.cairo.common.pow.assert_le": { + "destination": "starkware.cairo.common.math.assert_le", + "type": "alias" + }, + "starkware.cairo.common.pow.get_ap": { + "destination": "starkware.cairo.common.registers.get_ap", + "type": "alias" + }, + "starkware.cairo.common.pow.get_fp_and_pc": { + "destination": "starkware.cairo.common.registers.get_fp_and_pc", + "type": "alias" + }, + "starkware.cairo.common.pow.sign": { + "destination": "starkware.cairo.common.math.sign", + "type": "alias" + }, + "starkware.cairo.common.registers.get_ap": { + "destination": "starkware.cairo.lang.compiler.lib.registers.get_ap", + "type": "alias" + }, + "starkware.cairo.common.registers.get_fp_and_pc": { + "destination": "starkware.cairo.lang.compiler.lib.registers.get_fp_and_pc", + "type": "alias" + }, + "starkware.cairo.common.uint256.ALL_ONES": { + "type": "const", + "value": 340282366920938463463374607431768211455 + }, + "starkware.cairo.common.uint256.BitwiseBuiltin": { + "destination": "starkware.cairo.common.cairo_builtins.BitwiseBuiltin", + "type": "alias" + }, + "starkware.cairo.common.uint256.HALF_SHIFT": { + "type": "const", + "value": 18446744073709551616 + }, + "starkware.cairo.common.uint256.SHIFT": { + "type": "const", + "value": 340282366920938463463374607431768211456 + }, + "starkware.cairo.common.uint256.Uint256": { + "full_name": "starkware.cairo.common.uint256.Uint256", + "members": { + "high": { + "cairo_type": "felt", + "offset": 1 + }, + "low": { + "cairo_type": "felt", + "offset": 0 + } + }, + "size": 2, + "type": "struct" + }, + "starkware.cairo.common.uint256.assert_in_range": { + "destination": "starkware.cairo.common.math.assert_in_range", + "type": "alias" + }, + "starkware.cairo.common.uint256.assert_le": { + "destination": "starkware.cairo.common.math.assert_le", + "type": "alias" + }, + "starkware.cairo.common.uint256.assert_nn_le": { + "destination": "starkware.cairo.common.math.assert_nn_le", + "type": "alias" + }, + "starkware.cairo.common.uint256.assert_not_zero": { + "destination": "starkware.cairo.common.math.assert_not_zero", + "type": "alias" + }, + "starkware.cairo.common.uint256.bitwise_and": { + "destination": "starkware.cairo.common.bitwise.bitwise_and", + "type": "alias" + }, + "starkware.cairo.common.uint256.bitwise_or": { + "destination": "starkware.cairo.common.bitwise.bitwise_or", + "type": "alias" + }, + "starkware.cairo.common.uint256.bitwise_xor": { + "destination": "starkware.cairo.common.bitwise.bitwise_xor", + "type": "alias" + }, + "starkware.cairo.common.uint256.get_ap": { + "destination": "starkware.cairo.common.registers.get_ap", + "type": "alias" + }, + "starkware.cairo.common.uint256.get_fp_and_pc": { + "destination": "starkware.cairo.common.registers.get_fp_and_pc", + "type": "alias" + }, + "starkware.cairo.common.uint256.is_le": { + "destination": "starkware.cairo.common.math_cmp.is_le", + "type": "alias" + }, + "starkware.cairo.common.uint256.pow": { + "destination": "starkware.cairo.common.pow.pow", + "type": "alias" + }, + "starkware.cairo.common.uint256.split_felt": { + "destination": "starkware.cairo.common.math.split_felt", + "type": "alias" + } + }, + "main_scope": "__main__", + "prime": "0x800000000000011000000000000000000000000000000000000000000000001", + "reference_manager": { + "references": [ + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 6, + "value": "[cast(fp + (-5), starkware.cairo.common.cairo_secp.bigint3.BigInt3*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 0 + }, + "pc": 6, + "value": "[cast(fp + (-6), felt*)]" + }, + { + "ap_tracking_data": { + "group": 2, + "offset": 1 + }, + "pc": 8, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 0 + }, + "pc": 20, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 0 + }, + "pc": 20, + "value": "cast((0, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 9 + }, + "pc": 29, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 9 + }, + "pc": 29, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 9 + }, + "pc": 31, + "value": "cast((1, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 18 + }, + "pc": 40, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 18 + }, + "pc": 40, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 18 + }, + "pc": 42, + "value": "cast((\n 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815\n ), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 27 + }, + "pc": 51, + "value": "[cast(ap + (-2), felt*)]" + }, + { + "ap_tracking_data": { + "group": 3, + "offset": 27 + }, + "pc": 51, + "value": "[cast(ap + (-1), felt*)]" + }, + { + "ap_tracking_data": { + "group": 4, + "offset": 0 + }, + "pc": 55, + "value": "[cast(fp + (-3), felt*)]" + }, + { + "ap_tracking_data": { + "group": 4, + "offset": 31 + }, + "pc": 58, + "value": "[cast(ap + (-1), felt*)]" + } + ] + } +} diff --git a/pkg/hintrunner/zero/zerohint.go b/pkg/hintrunner/zero/zerohint.go index ee4b4933a..efff4a3e8 100644 --- a/pkg/hintrunner/zero/zerohint.go +++ b/pkg/hintrunner/zero/zerohint.go @@ -237,6 +237,7 @@ func GetHintFromCode(program *zero.ZeroProgram, rawHint zero.Hint, hintPC uint64 case findElementCode: return createFindElementHinter(resolver) default: + fmt.Println(rawHint.Code) return nil, fmt.Errorf("not identified hint") } } diff --git a/pkg/hintrunner/zero/zerohint_ec.go b/pkg/hintrunner/zero/zerohint_ec.go index 6d67362f9..922d82343 100644 --- a/pkg/hintrunner/zero/zerohint_ec.go +++ b/pkg/hintrunner/zero/zerohint_ec.go @@ -736,7 +736,7 @@ func createEcMulInnerHinter(resolver hintReferenceResolver) (hinter.Hinter, erro // i.e, 1 if `x == 0`, 0 otherwise func newIsZeroNondetHint() hinter.Hinter { return &GenericZeroHinter{ - Name: "IsZeroConditional", + Name: "IsZeroNondet", Op: func(vm *VM.VirtualMachine, ctx *hinter.HintRunnerContext) error { //> x == 0 From 3d0cd756ac424f254fff47b28ef5deb699c5bed8 Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 02:13:15 +0530 Subject: [PATCH 02/12] Added integration test and fixed hintcode --- .../cairo_zero_hint_tests/is_zero.small.cairo | 32 + integration_tests/cairozero_test.go | 142 ++- integration_tests/test/iszeropack.small.cairo | 49 - .../test/iszeropack.small_compile_py_memory | Bin 3800 -> 0 bytes .../test/iszeropack.small_compile_py_trace | Bin 12288 -> 0 bytes .../test/iszeropack.small_compiled.json | 1040 ----------------- pkg/hintrunner/zero/hintcode.go | 2 +- 7 files changed, 102 insertions(+), 1163 deletions(-) create mode 100644 integration_tests/cairo_zero_hint_tests/is_zero.small.cairo delete mode 100644 integration_tests/test/iszeropack.small.cairo delete mode 100644 integration_tests/test/iszeropack.small_compile_py_memory delete mode 100644 integration_tests/test/iszeropack.small_compile_py_trace delete mode 100644 integration_tests/test/iszeropack.small_compiled.json diff --git a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo new file mode 100644 index 000000000..a00a2ceac --- /dev/null +++ b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo @@ -0,0 +1,32 @@ +// Returns 1 if x == 0 (mod secp256k1_prime), and 0 otherwise. +// Serves as integration test for the following hints : +// isZeroNondetCode +// isZeroPackCode +// isZeroDivModCode + +%builtins range_check + +from starkware.cairo.common.cairo_secp.field import is_zero +from starkware.cairo.common.cairo_secp.bigint3 import SumBigInt3 + +func main{range_check_ptr}() -> () { + + // Test One + let a = SumBigInt3(0, 0, 0); + let (res: felt) = is_zero(a); + assert res = 1; + + // Test Two + let b = SumBigInt3(42, 0, 0); + let (res: felt) = is_zero(b); + assert res = 0; + + // Test Three + let c = SumBigInt3( + 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815 + ); + let (res: felt) = is_zero(c); + assert res = 1; + + return (); +} diff --git a/integration_tests/cairozero_test.go b/integration_tests/cairozero_test.go index 6bcc2ed51..e2f7383e1 100644 --- a/integration_tests/cairozero_test.go +++ b/integration_tests/cairozero_test.go @@ -51,39 +51,35 @@ func (f *Filter) filtered(testFile string) bool { func TestCairoZeroFiles(t *testing.T) { root1 := "./cairo_zero_hint_tests/" root2 := "./cairo_zero_file_tests/" - root3 := "./test" - // testFiles1, err := os.ReadDir(root1) - // require.NoError(t, err) - - // testFiles2, err := os.ReadDir(root2) - // require.NoError(t, err) + testFiles1, err := os.ReadDir(root1) + require.NoError(t, err) - testFiles3, err := os.ReadDir(root3) + testFiles2, err := os.ReadDir(root2) require.NoError(t, err) - // testFiles := append(testFiles1, testFiles2...) + testFiles := append(testFiles1, testFiles2...) - // testFiles1Map := make(map[string]struct{}, len(testFiles1)) - // for _, entry := range testFiles1 { - // testFiles1Map[entry.Name()] = struct{}{} - // } + testFiles1Map := make(map[string]struct{}, len(testFiles1)) + for _, entry := range testFiles1 { + testFiles1Map[entry.Name()] = struct{}{} + } // filter is for debugging purposes filter := Filter{} filter.init() - for _, dirEntry := range testFiles3 { + for _, dirEntry := range testFiles { if dirEntry.IsDir() || isGeneratedFile(dirEntry.Name()) { continue } - // var path string - // if _, found := testFiles1Map[dirEntry.Name()]; found { - // path = filepath.Join(root1, dirEntry.Name()) - // } else { - // } - path := filepath.Join(root3, dirEntry.Name()) + var path string + if _, found := testFiles1Map[dirEntry.Name()]; found { + path = filepath.Join(root1, dirEntry.Name()) + } else { + path = filepath.Join(root2, dirEntry.Name()) + } if !filter.filtered(dirEntry.Name()) { continue @@ -318,76 +314,76 @@ func memoryRepr(memory []*fp.Element) string { } -// func TestFailingRangeCheck(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/range_check.small.cairo") -// require.NoError(t, err) +func TestFailingRangeCheck(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/range_check.small.cairo") + require.NoError(t, err) -// _, _, _, err = runVm(compiledOutput) -// require.ErrorContains(t, err, "check write: 2**128 <") + _, _, _, err = runVm(compiledOutput) + require.ErrorContains(t, err, "check write: 2**128 <") -// clean("./builtin_tests/") -// } + clean("./builtin_tests/") +} -// func TestBitwise(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/bitwise_builtin_test.starknet_with_keccak.cairo") -// require.NoError(t, err) +func TestBitwise(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/bitwise_builtin_test.starknet_with_keccak.cairo") + require.NoError(t, err) -// _, _, _, err = runVm(compiledOutput) -// require.NoError(t, err) + _, _, _, err = runVm(compiledOutput) + require.NoError(t, err) -// clean("./builtin_tests/") -// } + clean("./builtin_tests/") +} -// func TestPedersen(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/pedersen_test.small.cairo") -// require.NoError(t, err) +func TestPedersen(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/pedersen_test.small.cairo") + require.NoError(t, err) -// _, _, output, err := runVm(compiledOutput) -// require.NoError(t, err) -// require.Contains(t, output, "Program output:\n 2089986280348253421170679821480865132823066470938446095505822317253594081284") + _, _, output, err := runVm(compiledOutput) + require.NoError(t, err) + require.Contains(t, output, "Program output:\n 2089986280348253421170679821480865132823066470938446095505822317253594081284") -// clean("./builtin_tests/") -// } + clean("./builtin_tests/") +} -// func TestPoseidon(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/poseidon_test.starknet_with_keccak.cairo") -// require.NoError(t, err) +func TestPoseidon(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/poseidon_test.starknet_with_keccak.cairo") + require.NoError(t, err) -// _, _, output, err := runVm(compiledOutput) -// require.NoError(t, err) -// require.Contains(t, output, "Program output:\n 442682200349489646213731521593476982257703159825582578145778919623645026501\n 2233832504250924383748553933071188903279928981104663696710686541536735838182\n 2512222140811166287287541003826449032093371832913959128171347018667852712082\n") -// require.Contains(t, output, "3016509350703874362933565866148509373957094754875411937434637891208784994231\n 3015199725895936530535660185611704199044060139852899280809302949374221328865\n 3062378460350040063467318871602229987911299744598148928378797834245039883769\n") -// clean("./builtin_tests/") -// } + _, _, output, err := runVm(compiledOutput) + require.NoError(t, err) + require.Contains(t, output, "Program output:\n 442682200349489646213731521593476982257703159825582578145778919623645026501\n 2233832504250924383748553933071188903279928981104663696710686541536735838182\n 2512222140811166287287541003826449032093371832913959128171347018667852712082\n") + require.Contains(t, output, "3016509350703874362933565866148509373957094754875411937434637891208784994231\n 3015199725895936530535660185611704199044060139852899280809302949374221328865\n 3062378460350040063467318871602229987911299744598148928378797834245039883769\n") + clean("./builtin_tests/") +} -// func TestECDSA(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/ecdsa_test.starknet_with_keccak.cairo") -// require.NoError(t, err) +func TestECDSA(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/ecdsa_test.starknet_with_keccak.cairo") + require.NoError(t, err) -// _, _, _, err = runVm(compiledOutput) -// require.NoError(t, err) + _, _, _, err = runVm(compiledOutput) + require.NoError(t, err) -// clean("./builtin_tests/") -// } + clean("./builtin_tests/") +} -// func TestEcOp(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/ecop.starknet_with_keccak.cairo") -// require.NoError(t, err) +func TestEcOp(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/ecop.starknet_with_keccak.cairo") + require.NoError(t, err) -// _, _, _, err = runVm(compiledOutput) -// // todo(rodro): This test is failing due to the lack of hint processing. It should be address soon -// require.Error(t, err) + _, _, _, err = runVm(compiledOutput) + // todo(rodro): This test is failing due to the lack of hint processing. It should be address soon + require.Error(t, err) -// clean("./builtin_tests/") -// } + clean("./builtin_tests/") +} -// func TestKeccak(t *testing.T) { -// compiledOutput, err := compileZeroCode("./builtin_tests/keccak_test.starknet_with_keccak.cairo") -// require.NoError(t, err) +func TestKeccak(t *testing.T) { + compiledOutput, err := compileZeroCode("./builtin_tests/keccak_test.starknet_with_keccak.cairo") + require.NoError(t, err) -// _, _, output, err := runVm(compiledOutput) -// require.NoError(t, err) -// require.Contains(t, output, "Program output:\n 1304102964824333531548398680304964155037696012322029952943772\n 688749063493959345342507274897412933692859993314608487848187\n 986714560881445649520443980361539218531403996118322524237197\n 1184757872753521629808292433475729390634371625298664050186717\n 719230200744669084408849842242045083289669818920073250264351\n 1543031433416778513637578850638598357854418012971636697855068\n 63644822371671650271181212513090078620238279557402571802224\n 879446821229338092940381117330194802032344024906379963157761\n") + _, _, output, err := runVm(compiledOutput) + require.NoError(t, err) + require.Contains(t, output, "Program output:\n 1304102964824333531548398680304964155037696012322029952943772\n 688749063493959345342507274897412933692859993314608487848187\n 986714560881445649520443980361539218531403996118322524237197\n 1184757872753521629808292433475729390634371625298664050186717\n 719230200744669084408849842242045083289669818920073250264351\n 1543031433416778513637578850638598357854418012971636697855068\n 63644822371671650271181212513090078620238279557402571802224\n 879446821229338092940381117330194802032344024906379963157761\n") -// clean("./builtin_tests/") -// } + clean("./builtin_tests/") +} diff --git a/integration_tests/test/iszeropack.small.cairo b/integration_tests/test/iszeropack.small.cairo deleted file mode 100644 index 38281941b..000000000 --- a/integration_tests/test/iszeropack.small.cairo +++ /dev/null @@ -1,49 +0,0 @@ -// Returns 1 if x == 0 (mod secp256k1_prime), and 0 otherwise. - -%builtins range_check - -from starkware.cairo.common.cairo_secp.bigint import BigInt3 - -func is_zero{range_check_ptr}(x: BigInt3) -> (res: felt) { - %{ - from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack - - value = pack(ids.x, PRIME) % SECP_P - %} - %{ - from starkware.cairo.common.cairo_secp.secp_utils import pack - - x = pack(ids.x, PRIME) % SECP_P - %} - if (nondet %{ x == 0 %} != 0) { - return (res=1); - } - return (res=0); -} - -func test_is_zero{range_check_ptr}() -> () { - let zero = BigInt3(0, 0, 0); - - let (res: felt) = is_zero(zero); - assert res = 1; - - let one = BigInt3(1, 0, 0); - - let (res: felt) = is_zero(one); - assert res = 0; - - let secp256k1_prime = BigInt3( - 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815 - ); - - let (res: felt) = is_zero(secp256k1_prime); - assert res = 1; - - return (); -} - -func main{range_check_ptr}() -> () { - test_is_zero(); - - return (); -} diff --git a/integration_tests/test/iszeropack.small_compile_py_memory b/integration_tests/test/iszeropack.small_compile_py_memory deleted file mode 100644 index 2a24219becd98658009afffff7fa1f0c03d66c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3800 zcma)8S6kaa5VR7o9Z16|KpG~2^n?;hIuIb8G)QkhMSjo!ZIBHaSVCLWuJW(#>QdF7(cmC-4H};yJ$v-cHi}hka7L1YYYoFE3Kw#}PQx{;P9gdcV!M zX71=brioZ7=g16;#BQw~SM}hS{2Jb2J8~DWV z`)=ygMWeaf$oF+ojPkR|xR@vUsl%5aTVq0Z;YiZJ^#-px(Pcz4zcL_@D@ge*~&Ne*%x^jU~Ts z1w8)-Y}Mz_-a5ncT26opBWL5Yj$dVjkR0- zf&BF~2Q`n44=JD6JWxJ0eyDtAb5{A>_?+^E@p)K#@CgfZI*`@S_I@m=L_o8{-nc=>T&J^8i$>dBw+>PhiB*PiyA z_rx2`+TS-`_wvYi-Rog^YXA>f1U%p&4Dfx(9^e5FVW3G3+zULk2IxZ;0S|Zx1H2ov z2YA3k7~tKQJ-`DV!a$Q6xEFY64bX=y0v_-X26#7S5AcA8Fu=Ppdw>T#gn=eCa4+!C s8lVqZ1U%p&4DfEu9^e5FVSsmI_5crf2m?)O;9lUNH9#M-2wfij0gGr!EC2ui diff --git a/integration_tests/test/iszeropack.small_compiled.json b/integration_tests/test/iszeropack.small_compiled.json deleted file mode 100644 index 82feb8ebe..000000000 --- a/integration_tests/test/iszeropack.small_compiled.json +++ /dev/null @@ -1,1040 +0,0 @@ -{ - "attributes": [], - "builtins": [ - "range_check" - ], - "compiler_version": "0.13.1", - "data": [ - "0x40780017fff7fff", - "0x1", - "0x1104800180018000", - "0x35", - "0x10780017fff7fff", - "0x0", - "0x40780017fff7fff", - "0x1", - "0x20680017fff7fff", - "0x4", - "0x10780017fff7fff", - "0x6", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x1", - "0x208b7fff7fff7ffe", - "0x480a7ffa7fff8000", - "0x480680017fff8000", - "0x0", - "0x208b7fff7fff7ffe", - "0x480a7ffd7fff8000", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffec", - "0x400680017fff7fff", - "0x1", - "0x48127ffe7fff8000", - "0x480680017fff8000", - "0x1", - "0x480680017fff8000", - "0x0", - "0x480680017fff8000", - "0x0", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffe1", - "0x400680017fff7fff", - "0x0", - "0x48127ffe7fff8000", - "0x480680017fff8000", - "0x3ffffffffffffefffffc2f", - "0x480680017fff8000", - "0x3fffffffffffffffffffff", - "0x480680017fff8000", - "0xfffffffffffffffffffff", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffd6", - "0x400680017fff7fff", - "0x1", - "0x48127ffe7fff8000", - "0x208b7fff7fff7ffe", - "0x480a7ffd7fff8000", - "0x1104800180018000", - "0x800000000000010ffffffffffffffffffffffffffffffffffffffffffffffdd", - "0x208b7fff7fff7ffe" - ], - "debug_info": null, - "hints": { - "6": [ - { - "accessible_scopes": [ - "__main__", - "__main__.is_zero" - ], - "code": "from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack\n\nvalue = pack(ids.x, PRIME) % SECP_P", - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 0 - }, - "reference_ids": { - "__main__.is_zero.range_check_ptr": 1, - "__main__.is_zero.x": 0 - } - } - }, - { - "accessible_scopes": [ - "__main__", - "__main__.is_zero" - ], - "code": "from starkware.cairo.common.cairo_secp.secp_utils import pack\n\nx = pack(ids.x, PRIME) % SECP_P", - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 0 - }, - "reference_ids": { - "__main__.is_zero.range_check_ptr": 1, - "__main__.is_zero.x": 0 - } - } - }, - { - "accessible_scopes": [ - "__main__", - "__main__.is_zero" - ], - "code": "memory[ap] = to_felt_or_relocatable(x == 0)", - "flow_tracking_data": { - "ap_tracking": { - "group": 2, - "offset": 0 - }, - "reference_ids": { - "__main__.is_zero.range_check_ptr": 1, - "__main__.is_zero.x": 0 - } - } - } - ] - }, - "identifiers": { - "__main__.BigInt3": { - "destination": "starkware.cairo.common.cairo_secp.bigint.BigInt3", - "type": "alias" - }, - "__main__.__end__": { - "pc": 4, - "type": "label" - }, - "__main__.__start__": { - "pc": 0, - "type": "label" - }, - "__main__.is_zero": { - "decorators": [], - "pc": 6, - "type": "function" - }, - "__main__.is_zero.Args": { - "full_name": "__main__.is_zero.Args", - "members": { - "x": { - "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "offset": 0 - } - }, - "size": 3, - "type": "struct" - }, - "__main__.is_zero.ImplicitArgs": { - "full_name": "__main__.is_zero.ImplicitArgs", - "members": { - "range_check_ptr": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "__main__.is_zero.Return": { - "cairo_type": "(res: felt)", - "type": "type_definition" - }, - "__main__.is_zero.SIZEOF_LOCALS": { - "type": "const", - "value": 0 - }, - "__main__.is_zero.__temp0": { - "cairo_type": "felt", - "full_name": "__main__.is_zero.__temp0", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 1 - }, - "pc": 8, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" - }, - "__main__.is_zero.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.is_zero.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 6, - "value": "[cast(fp + (-6), felt*)]" - } - ], - "type": "reference" - }, - "__main__.is_zero.x": { - "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "full_name": "__main__.is_zero.x", - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 6, - "value": "[cast(fp + (-5), starkware.cairo.common.cairo_secp.bigint3.BigInt3*)]" - } - ], - "type": "reference" - }, - "__main__.main": { - "decorators": [], - "pc": 55, - "type": "function" - }, - "__main__.main.Args": { - "full_name": "__main__.main.Args", - "members": {}, - "size": 0, - "type": "struct" - }, - "__main__.main.ImplicitArgs": { - "full_name": "__main__.main.ImplicitArgs", - "members": { - "range_check_ptr": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "__main__.main.Return": { - "cairo_type": "()", - "type": "type_definition" - }, - "__main__.main.SIZEOF_LOCALS": { - "type": "const", - "value": 0 - }, - "__main__.main.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.main.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 4, - "offset": 0 - }, - "pc": 55, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 4, - "offset": 31 - }, - "pc": 58, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" - }, - "__main__.test_is_zero": { - "decorators": [], - "pc": 20, - "type": "function" - }, - "__main__.test_is_zero.Args": { - "full_name": "__main__.test_is_zero.Args", - "members": {}, - "size": 0, - "type": "struct" - }, - "__main__.test_is_zero.ImplicitArgs": { - "full_name": "__main__.test_is_zero.ImplicitArgs", - "members": { - "range_check_ptr": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 1, - "type": "struct" - }, - "__main__.test_is_zero.Return": { - "cairo_type": "()", - "type": "type_definition" - }, - "__main__.test_is_zero.SIZEOF_LOCALS": { - "type": "const", - "value": 0 - }, - "__main__.test_is_zero.one": { - "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "full_name": "__main__.test_is_zero.one", - "references": [ - { - "ap_tracking_data": { - "group": 3, - "offset": 9 - }, - "pc": 31, - "value": "cast((1, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" - } - ], - "type": "reference" - }, - "__main__.test_is_zero.range_check_ptr": { - "cairo_type": "felt", - "full_name": "__main__.test_is_zero.range_check_ptr", - "references": [ - { - "ap_tracking_data": { - "group": 3, - "offset": 0 - }, - "pc": 20, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 9 - }, - "pc": 29, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 18 - }, - "pc": 40, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 27 - }, - "pc": 51, - "value": "[cast(ap + (-2), felt*)]" - } - ], - "type": "reference" - }, - "__main__.test_is_zero.res": { - "cairo_type": "felt", - "full_name": "__main__.test_is_zero.res", - "references": [ - { - "ap_tracking_data": { - "group": 3, - "offset": 9 - }, - "pc": 29, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 18 - }, - "pc": 40, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 27 - }, - "pc": 51, - "value": "[cast(ap + (-1), felt*)]" - } - ], - "type": "reference" - }, - "__main__.test_is_zero.secp256k1_prime": { - "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "full_name": "__main__.test_is_zero.secp256k1_prime", - "references": [ - { - "ap_tracking_data": { - "group": 3, - "offset": 18 - }, - "pc": 42, - "value": "cast((\n 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815\n ), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" - } - ], - "type": "reference" - }, - "__main__.test_is_zero.zero": { - "cairo_type": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "full_name": "__main__.test_is_zero.zero", - "references": [ - { - "ap_tracking_data": { - "group": 3, - "offset": 0 - }, - "pc": 20, - "value": "cast((0, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" - } - ], - "type": "reference" - }, - "starkware.cairo.common.bitwise.ALL_ONES": { - "type": "const", - "value": -106710729501573572985208420194530329073740042555888586719234 - }, - "starkware.cairo.common.bitwise.BitwiseBuiltin": { - "destination": "starkware.cairo.common.cairo_builtins.BitwiseBuiltin", - "type": "alias" - }, - "starkware.cairo.common.bool.FALSE": { - "type": "const", - "value": 0 - }, - "starkware.cairo.common.bool.TRUE": { - "type": "const", - "value": 1 - }, - "starkware.cairo.common.cairo_builtins.BitwiseBuiltin": { - "full_name": "starkware.cairo.common.cairo_builtins.BitwiseBuiltin", - "members": { - "x": { - "cairo_type": "felt", - "offset": 0 - }, - "x_and_y": { - "cairo_type": "felt", - "offset": 2 - }, - "x_or_y": { - "cairo_type": "felt", - "offset": 4 - }, - "x_xor_y": { - "cairo_type": "felt", - "offset": 3 - }, - "y": { - "cairo_type": "felt", - "offset": 1 - } - }, - "size": 5, - "type": "struct" - }, - "starkware.cairo.common.cairo_builtins.EcOpBuiltin": { - "full_name": "starkware.cairo.common.cairo_builtins.EcOpBuiltin", - "members": { - "m": { - "cairo_type": "felt", - "offset": 4 - }, - "p": { - "cairo_type": "starkware.cairo.common.ec_point.EcPoint", - "offset": 0 - }, - "q": { - "cairo_type": "starkware.cairo.common.ec_point.EcPoint", - "offset": 2 - }, - "r": { - "cairo_type": "starkware.cairo.common.ec_point.EcPoint", - "offset": 5 - } - }, - "size": 7, - "type": "struct" - }, - "starkware.cairo.common.cairo_builtins.EcPoint": { - "destination": "starkware.cairo.common.ec_point.EcPoint", - "type": "alias" - }, - "starkware.cairo.common.cairo_builtins.HashBuiltin": { - "full_name": "starkware.cairo.common.cairo_builtins.HashBuiltin", - "members": { - "result": { - "cairo_type": "felt", - "offset": 2 - }, - "x": { - "cairo_type": "felt", - "offset": 0 - }, - "y": { - "cairo_type": "felt", - "offset": 1 - } - }, - "size": 3, - "type": "struct" - }, - "starkware.cairo.common.cairo_builtins.KeccakBuiltin": { - "full_name": "starkware.cairo.common.cairo_builtins.KeccakBuiltin", - "members": { - "input": { - "cairo_type": "starkware.cairo.common.keccak_state.KeccakBuiltinState", - "offset": 0 - }, - "output": { - "cairo_type": "starkware.cairo.common.keccak_state.KeccakBuiltinState", - "offset": 8 - } - }, - "size": 16, - "type": "struct" - }, - "starkware.cairo.common.cairo_builtins.KeccakBuiltinState": { - "destination": "starkware.cairo.common.keccak_state.KeccakBuiltinState", - "type": "alias" - }, - "starkware.cairo.common.cairo_builtins.PoseidonBuiltin": { - "full_name": "starkware.cairo.common.cairo_builtins.PoseidonBuiltin", - "members": { - "input": { - "cairo_type": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", - "offset": 0 - }, - "output": { - "cairo_type": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", - "offset": 3 - } - }, - "size": 6, - "type": "struct" - }, - "starkware.cairo.common.cairo_builtins.PoseidonBuiltinState": { - "destination": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", - "type": "alias" - }, - "starkware.cairo.common.cairo_builtins.SignatureBuiltin": { - "full_name": "starkware.cairo.common.cairo_builtins.SignatureBuiltin", - "members": { - "message": { - "cairo_type": "felt", - "offset": 1 - }, - "pub_key": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 2, - "type": "struct" - }, - "starkware.cairo.common.cairo_secp.bigint.BASE": { - "destination": "starkware.cairo.common.cairo_secp.constants.BASE", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.BigInt3": { - "destination": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.RC_BOUND": { - "destination": "starkware.cairo.common.math_cmp.RC_BOUND", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.Uint256": { - "destination": "starkware.cairo.common.uint256.Uint256", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.UnreducedBigInt3": { - "destination": "starkware.cairo.common.cairo_secp.bigint3.UnreducedBigInt3", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.UnreducedBigInt5": { - "full_name": "starkware.cairo.common.cairo_secp.bigint.UnreducedBigInt5", - "members": { - "d0": { - "cairo_type": "felt", - "offset": 0 - }, - "d1": { - "cairo_type": "felt", - "offset": 1 - }, - "d2": { - "cairo_type": "felt", - "offset": 2 - }, - "d3": { - "cairo_type": "felt", - "offset": 3 - }, - "d4": { - "cairo_type": "felt", - "offset": 4 - } - }, - "size": 5, - "type": "struct" - }, - "starkware.cairo.common.cairo_secp.bigint.assert_nn": { - "destination": "starkware.cairo.common.math.assert_nn", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.assert_nn_le": { - "destination": "starkware.cairo.common.math.assert_nn_le", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint.unsigned_div_rem": { - "destination": "starkware.cairo.common.math.unsigned_div_rem", - "type": "alias" - }, - "starkware.cairo.common.cairo_secp.bigint3.BigInt3": { - "full_name": "starkware.cairo.common.cairo_secp.bigint3.BigInt3", - "members": { - "d0": { - "cairo_type": "felt", - "offset": 0 - }, - "d1": { - "cairo_type": "felt", - "offset": 1 - }, - "d2": { - "cairo_type": "felt", - "offset": 2 - } - }, - "size": 3, - "type": "struct" - }, - "starkware.cairo.common.cairo_secp.bigint3.SumBigInt3": { - "full_name": "starkware.cairo.common.cairo_secp.bigint3.SumBigInt3", - "members": { - "d0": { - "cairo_type": "felt", - "offset": 0 - }, - "d1": { - "cairo_type": "felt", - "offset": 1 - }, - "d2": { - "cairo_type": "felt", - "offset": 2 - } - }, - "size": 3, - "type": "struct" - }, - "starkware.cairo.common.cairo_secp.bigint3.UnreducedBigInt3": { - "full_name": "starkware.cairo.common.cairo_secp.bigint3.UnreducedBigInt3", - "members": { - "d0": { - "cairo_type": "felt", - "offset": 0 - }, - "d1": { - "cairo_type": "felt", - "offset": 1 - }, - "d2": { - "cairo_type": "felt", - "offset": 2 - } - }, - "size": 3, - "type": "struct" - }, - "starkware.cairo.common.cairo_secp.constants.BASE": { - "type": "const", - "value": 77371252455336267181195264 - }, - "starkware.cairo.common.cairo_secp.constants.BETA": { - "type": "const", - "value": 7 - }, - "starkware.cairo.common.cairo_secp.constants.N0": { - "type": "const", - "value": 10428087374290690730508609 - }, - "starkware.cairo.common.cairo_secp.constants.N1": { - "type": "const", - "value": 77371252455330678278691517 - }, - "starkware.cairo.common.cairo_secp.constants.N2": { - "type": "const", - "value": 19342813113834066795298815 - }, - "starkware.cairo.common.cairo_secp.constants.P0": { - "type": "const", - "value": 77371252455336262886226991 - }, - "starkware.cairo.common.cairo_secp.constants.P1": { - "type": "const", - "value": 77371252455336267181195263 - }, - "starkware.cairo.common.cairo_secp.constants.P2": { - "type": "const", - "value": 19342813113834066795298815 - }, - "starkware.cairo.common.cairo_secp.constants.SECP_PRIME_HIGH": { - "type": "const", - "value": 340282366920938463463374607431768211455 - }, - "starkware.cairo.common.cairo_secp.constants.SECP_PRIME_LOW": { - "type": "const", - "value": 340282366920938463463374607427473243183 - }, - "starkware.cairo.common.cairo_secp.constants.SECP_REM": { - "type": "const", - "value": 4294968273 - }, - "starkware.cairo.common.ec_point.EcPoint": { - "full_name": "starkware.cairo.common.ec_point.EcPoint", - "members": { - "x": { - "cairo_type": "felt", - "offset": 0 - }, - "y": { - "cairo_type": "felt", - "offset": 1 - } - }, - "size": 2, - "type": "struct" - }, - "starkware.cairo.common.keccak_state.KeccakBuiltinState": { - "full_name": "starkware.cairo.common.keccak_state.KeccakBuiltinState", - "members": { - "s0": { - "cairo_type": "felt", - "offset": 0 - }, - "s1": { - "cairo_type": "felt", - "offset": 1 - }, - "s2": { - "cairo_type": "felt", - "offset": 2 - }, - "s3": { - "cairo_type": "felt", - "offset": 3 - }, - "s4": { - "cairo_type": "felt", - "offset": 4 - }, - "s5": { - "cairo_type": "felt", - "offset": 5 - }, - "s6": { - "cairo_type": "felt", - "offset": 6 - }, - "s7": { - "cairo_type": "felt", - "offset": 7 - } - }, - "size": 8, - "type": "struct" - }, - "starkware.cairo.common.math.FALSE": { - "destination": "starkware.cairo.common.bool.FALSE", - "type": "alias" - }, - "starkware.cairo.common.math.TRUE": { - "destination": "starkware.cairo.common.bool.TRUE", - "type": "alias" - }, - "starkware.cairo.common.math_cmp.RC_BOUND": { - "type": "const", - "value": 340282366920938463463374607431768211456 - }, - "starkware.cairo.common.math_cmp.assert_le_felt": { - "destination": "starkware.cairo.common.math.assert_le_felt", - "type": "alias" - }, - "starkware.cairo.common.math_cmp.assert_lt_felt": { - "destination": "starkware.cairo.common.math.assert_lt_felt", - "type": "alias" - }, - "starkware.cairo.common.poseidon_state.PoseidonBuiltinState": { - "full_name": "starkware.cairo.common.poseidon_state.PoseidonBuiltinState", - "members": { - "s0": { - "cairo_type": "felt", - "offset": 0 - }, - "s1": { - "cairo_type": "felt", - "offset": 1 - }, - "s2": { - "cairo_type": "felt", - "offset": 2 - } - }, - "size": 3, - "type": "struct" - }, - "starkware.cairo.common.pow.assert_le": { - "destination": "starkware.cairo.common.math.assert_le", - "type": "alias" - }, - "starkware.cairo.common.pow.get_ap": { - "destination": "starkware.cairo.common.registers.get_ap", - "type": "alias" - }, - "starkware.cairo.common.pow.get_fp_and_pc": { - "destination": "starkware.cairo.common.registers.get_fp_and_pc", - "type": "alias" - }, - "starkware.cairo.common.pow.sign": { - "destination": "starkware.cairo.common.math.sign", - "type": "alias" - }, - "starkware.cairo.common.registers.get_ap": { - "destination": "starkware.cairo.lang.compiler.lib.registers.get_ap", - "type": "alias" - }, - "starkware.cairo.common.registers.get_fp_and_pc": { - "destination": "starkware.cairo.lang.compiler.lib.registers.get_fp_and_pc", - "type": "alias" - }, - "starkware.cairo.common.uint256.ALL_ONES": { - "type": "const", - "value": 340282366920938463463374607431768211455 - }, - "starkware.cairo.common.uint256.BitwiseBuiltin": { - "destination": "starkware.cairo.common.cairo_builtins.BitwiseBuiltin", - "type": "alias" - }, - "starkware.cairo.common.uint256.HALF_SHIFT": { - "type": "const", - "value": 18446744073709551616 - }, - "starkware.cairo.common.uint256.SHIFT": { - "type": "const", - "value": 340282366920938463463374607431768211456 - }, - "starkware.cairo.common.uint256.Uint256": { - "full_name": "starkware.cairo.common.uint256.Uint256", - "members": { - "high": { - "cairo_type": "felt", - "offset": 1 - }, - "low": { - "cairo_type": "felt", - "offset": 0 - } - }, - "size": 2, - "type": "struct" - }, - "starkware.cairo.common.uint256.assert_in_range": { - "destination": "starkware.cairo.common.math.assert_in_range", - "type": "alias" - }, - "starkware.cairo.common.uint256.assert_le": { - "destination": "starkware.cairo.common.math.assert_le", - "type": "alias" - }, - "starkware.cairo.common.uint256.assert_nn_le": { - "destination": "starkware.cairo.common.math.assert_nn_le", - "type": "alias" - }, - "starkware.cairo.common.uint256.assert_not_zero": { - "destination": "starkware.cairo.common.math.assert_not_zero", - "type": "alias" - }, - "starkware.cairo.common.uint256.bitwise_and": { - "destination": "starkware.cairo.common.bitwise.bitwise_and", - "type": "alias" - }, - "starkware.cairo.common.uint256.bitwise_or": { - "destination": "starkware.cairo.common.bitwise.bitwise_or", - "type": "alias" - }, - "starkware.cairo.common.uint256.bitwise_xor": { - "destination": "starkware.cairo.common.bitwise.bitwise_xor", - "type": "alias" - }, - "starkware.cairo.common.uint256.get_ap": { - "destination": "starkware.cairo.common.registers.get_ap", - "type": "alias" - }, - "starkware.cairo.common.uint256.get_fp_and_pc": { - "destination": "starkware.cairo.common.registers.get_fp_and_pc", - "type": "alias" - }, - "starkware.cairo.common.uint256.is_le": { - "destination": "starkware.cairo.common.math_cmp.is_le", - "type": "alias" - }, - "starkware.cairo.common.uint256.pow": { - "destination": "starkware.cairo.common.pow.pow", - "type": "alias" - }, - "starkware.cairo.common.uint256.split_felt": { - "destination": "starkware.cairo.common.math.split_felt", - "type": "alias" - } - }, - "main_scope": "__main__", - "prime": "0x800000000000011000000000000000000000000000000000000000000000001", - "reference_manager": { - "references": [ - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 6, - "value": "[cast(fp + (-5), starkware.cairo.common.cairo_secp.bigint3.BigInt3*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 0 - }, - "pc": 6, - "value": "[cast(fp + (-6), felt*)]" - }, - { - "ap_tracking_data": { - "group": 2, - "offset": 1 - }, - "pc": 8, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 0 - }, - "pc": 20, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 0 - }, - "pc": 20, - "value": "cast((0, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 9 - }, - "pc": 29, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 9 - }, - "pc": 29, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 9 - }, - "pc": 31, - "value": "cast((1, 0, 0), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 18 - }, - "pc": 40, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 18 - }, - "pc": 40, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 18 - }, - "pc": 42, - "value": "cast((\n 77371252455336262886226991, 77371252455336267181195263, 19342813113834066795298815\n ), starkware.cairo.common.cairo_secp.bigint3.BigInt3)" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 27 - }, - "pc": 51, - "value": "[cast(ap + (-2), felt*)]" - }, - { - "ap_tracking_data": { - "group": 3, - "offset": 27 - }, - "pc": 51, - "value": "[cast(ap + (-1), felt*)]" - }, - { - "ap_tracking_data": { - "group": 4, - "offset": 0 - }, - "pc": 55, - "value": "[cast(fp + (-3), felt*)]" - }, - { - "ap_tracking_data": { - "group": 4, - "offset": 31 - }, - "pc": 58, - "value": "[cast(ap + (-1), felt*)]" - } - ] - } -} diff --git a/pkg/hintrunner/zero/hintcode.go b/pkg/hintrunner/zero/hintcode.go index b2e86de85..3dc761c30 100644 --- a/pkg/hintrunner/zero/hintcode.go +++ b/pkg/hintrunner/zero/hintcode.go @@ -96,7 +96,7 @@ const ( ecDoubleAssignNewXV1Code string = "from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack\n\nslope = pack(ids.slope, PRIME)\nx = pack(ids.point.x, PRIME)\ny = pack(ids.point.y, PRIME)\n\nvalue = new_x = (pow(slope, 2, SECP_P) - 2 * x) % SECP_P" ecDoubleAssignNewYV1Code string = "value = new_y = (slope * (x - new_x) - y) % SECP_P" ecMulInnerCode string = "memory[ap] = (ids.scalar % PRIME) % 2" - isZeroNondetCode string = "x == 0" + isZeroNondetCode string = "memory[ap] = to_felt_or_relocatable(x == 0)" isZeroPackCode string = "from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack\n\nx = pack(ids.x, PRIME) % SECP_P" isZeroDivModCode string = "from starkware.cairo.common.cairo_secp.secp_utils import SECP_P\nfrom starkware.python.math_utils import div_mod\n\nvalue = x_inv = div_mod(1, x, SECP_P)" From 648e33144fb8b29033e62102a02ec7355f6f7969 Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 02:15:44 +0530 Subject: [PATCH 03/12] clean --- pkg/hintrunner/zero/zerohint.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/hintrunner/zero/zerohint.go b/pkg/hintrunner/zero/zerohint.go index efff4a3e8..ee4b4933a 100644 --- a/pkg/hintrunner/zero/zerohint.go +++ b/pkg/hintrunner/zero/zerohint.go @@ -237,7 +237,6 @@ func GetHintFromCode(program *zero.ZeroProgram, rawHint zero.Hint, hintPC uint64 case findElementCode: return createFindElementHinter(resolver) default: - fmt.Println(rawHint.Code) return nil, fmt.Errorf("not identified hint") } } From f76877076f8de38ba7f76edeb93989fc21cf9752 Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 02:34:47 +0530 Subject: [PATCH 04/12] bug fix --- integration_tests/cairo_zero_hint_tests/is_zero.small.cairo | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo index a00a2ceac..c1d5e8023 100644 --- a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo +++ b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo @@ -6,8 +6,7 @@ %builtins range_check -from starkware.cairo.common.cairo_secp.field import is_zero -from starkware.cairo.common.cairo_secp.bigint3 import SumBigInt3 +from starkware.cairo.common.cairo_secp.field import is_zero, SumBigInt3 func main{range_check_ptr}() -> () { From 9540413f9e3c95b077156d898d52343fba540c28 Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 12:27:57 +0530 Subject: [PATCH 05/12] Updated hint comments --- pkg/hintrunner/zero/zerohint_ec.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/hintrunner/zero/zerohint_ec.go b/pkg/hintrunner/zero/zerohint_ec.go index 922d82343..d8247a6fb 100644 --- a/pkg/hintrunner/zero/zerohint_ec.go +++ b/pkg/hintrunner/zero/zerohint_ec.go @@ -738,7 +738,10 @@ func newIsZeroNondetHint() hinter.Hinter { return &GenericZeroHinter{ Name: "IsZeroNondet", Op: func(vm *VM.VirtualMachine, ctx *hinter.HintRunnerContext) error { - //> x == 0 + //> in .cairo program + //> if nondet %{ x == 0 %} != 0: + //> On .json compiled program + //> "memory[ap] = to_felt_or_relocatable(x == 0)" x, err := ctx.ScopeManager.GetVariableValueAsBigInt("x") if err != nil { @@ -775,6 +778,7 @@ func newIsZeroPackHint(x hinter.ResOperander) hinter.Hinter { Name: "IsZeroPack", Op: func(vm *VM.VirtualMachine, ctx *hinter.HintRunnerContext) error { //> from starkware.cairo.common.cairo_secp.secp_utils import SECP_P, pack + //> x = pack(ids.x, PRIME) % SECP_P xAddr, err := x.GetAddress(vm) @@ -829,6 +833,7 @@ func newIsZeroDivModHint() hinter.Hinter { Op: func(vm *VM.VirtualMachine, ctx *hinter.HintRunnerContext) error { //> from starkware.cairo.common.cairo_secp.secp_utils import SECP_P //> from starkware.python.math_utils import div_mod + //> value = x_inv = div_mod(1, x, SECP_P) secPBig, ok := secp_utils.GetSecPBig() From 0e10f4b972e69dde51910bab2e756cfe1be18ba0 Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 12:28:35 +0530 Subject: [PATCH 06/12] Ran gofmt --- pkg/hintrunner/zero/zerohint_ec.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/hintrunner/zero/zerohint_ec.go b/pkg/hintrunner/zero/zerohint_ec.go index d8247a6fb..b302cfc0a 100644 --- a/pkg/hintrunner/zero/zerohint_ec.go +++ b/pkg/hintrunner/zero/zerohint_ec.go @@ -833,7 +833,7 @@ func newIsZeroDivModHint() hinter.Hinter { Op: func(vm *VM.VirtualMachine, ctx *hinter.HintRunnerContext) error { //> from starkware.cairo.common.cairo_secp.secp_utils import SECP_P //> from starkware.python.math_utils import div_mod - + //> value = x_inv = div_mod(1, x, SECP_P) secPBig, ok := secp_utils.GetSecPBig() From 4c29105922543525240f944e9119f7e7cac3bcfa Mon Sep 17 00:00:00 2001 From: Shourya Goel Date: Thu, 27 Jun 2024 19:08:08 +0530 Subject: [PATCH 07/12] Update is_zero.small.cairo --- integration_tests/cairo_zero_hint_tests/is_zero.small.cairo | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo index c1d5e8023..637f4e7e3 100644 --- a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo +++ b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo @@ -6,7 +6,8 @@ %builtins range_check -from starkware.cairo.common.cairo_secp.field import is_zero, SumBigInt3 +from starkware.cairo.common.cairo_secp.field import is_zero +from starkware.cairo.common.cairo_secp.bigint3 import BigInt3, SumBigInt3 func main{range_check_ptr}() -> () { From aab6eac793fd9c93f1326cba928803aa331b457f Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Thu, 27 Jun 2024 17:31:43 +0530 Subject: [PATCH 08/12] Bug Fix --- integration_tests/.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/.env b/integration_tests/.env index 8ffc53953..b24a173e8 100644 --- a/integration_tests/.env +++ b/integration_tests/.env @@ -1,2 +1,2 @@ # Set to run some specific file tests (ex. fib.cairo,alloc.cairo) -INTEGRATION_TESTS_FILTERS= +INTEGRATION_TESTS_FILTERS=is_zero.small.cairo From 9238454421e97ae710881c1880bec1f068d04d5a Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Fri, 28 Jun 2024 02:10:37 +0530 Subject: [PATCH 09/12] Comment update --- pkg/hintrunner/zero/zerohint_ec.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pkg/hintrunner/zero/zerohint_ec.go b/pkg/hintrunner/zero/zerohint_ec.go index b302cfc0a..62cdfc163 100644 --- a/pkg/hintrunner/zero/zerohint_ec.go +++ b/pkg/hintrunner/zero/zerohint_ec.go @@ -738,10 +738,8 @@ func newIsZeroNondetHint() hinter.Hinter { return &GenericZeroHinter{ Name: "IsZeroNondet", Op: func(vm *VM.VirtualMachine, ctx *hinter.HintRunnerContext) error { - //> in .cairo program - //> if nondet %{ x == 0 %} != 0: - //> On .json compiled program - //> "memory[ap] = to_felt_or_relocatable(x == 0)" + //> python hint in cairo file: "x == 0" + //> compiled file hint: "memory[ap] = to_felt_or_relocatable(x == 0)" x, err := ctx.ScopeManager.GetVariableValueAsBigInt("x") if err != nil { From 9c4a4ca4adf5846548dd3b62a4fee1805b939e16 Mon Sep 17 00:00:00 2001 From: Shourya Goel Date: Fri, 28 Jun 2024 02:15:42 +0530 Subject: [PATCH 10/12] Update .env --- integration_tests/.env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/.env b/integration_tests/.env index b24a173e8..8ffc53953 100644 --- a/integration_tests/.env +++ b/integration_tests/.env @@ -1,2 +1,2 @@ # Set to run some specific file tests (ex. fib.cairo,alloc.cairo) -INTEGRATION_TESTS_FILTERS=is_zero.small.cairo +INTEGRATION_TESTS_FILTERS= From 59afa98628228a7945102c6c7635563b79d8016a Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Fri, 28 Jun 2024 17:15:24 +0530 Subject: [PATCH 11/12] Bump cairo-lang version --- .github/workflows/integration-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml index f630180f9..b788a923e 100644 --- a/.github/workflows/integration-test.yml +++ b/.github/workflows/integration-test.yml @@ -18,7 +18,7 @@ jobs: python-version: '3.9' - name: Install cairo-lang - run: pip install cairo-lang==0.11 + run: pip install cairo-lang==0.13.1 - name: Build run: make build From 01703a1f2ff039ecb1a48e0621d4111cbddceaf6 Mon Sep 17 00:00:00 2001 From: Sh0g0-1758 Date: Fri, 28 Jun 2024 17:17:02 +0530 Subject: [PATCH 12/12] Updated test --- integration_tests/.env | 2 +- integration_tests/cairo_zero_hint_tests/is_zero.small.cairo | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/integration_tests/.env b/integration_tests/.env index 8ffc53953..b24a173e8 100644 --- a/integration_tests/.env +++ b/integration_tests/.env @@ -1,2 +1,2 @@ # Set to run some specific file tests (ex. fib.cairo,alloc.cairo) -INTEGRATION_TESTS_FILTERS= +INTEGRATION_TESTS_FILTERS=is_zero.small.cairo diff --git a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo index 637f4e7e3..c1d5e8023 100644 --- a/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo +++ b/integration_tests/cairo_zero_hint_tests/is_zero.small.cairo @@ -6,8 +6,7 @@ %builtins range_check -from starkware.cairo.common.cairo_secp.field import is_zero -from starkware.cairo.common.cairo_secp.bigint3 import BigInt3, SumBigInt3 +from starkware.cairo.common.cairo_secp.field import is_zero, SumBigInt3 func main{range_check_ptr}() -> () {