From afedafd66100a52af0329cf71ca1d96fb9539a83 Mon Sep 17 00:00:00 2001 From: Tristan <122918260+TAdev0@users.noreply.github.com> Date: Thu, 5 Sep 2024 20:25:26 +0200 Subject: [PATCH] feat: implement `recursive_large_output` layout (#652) recursive_large_output layout --- integration_tests/cairozero_test.go | 4 ++++ pkg/vm/builtins/layouts.go | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/integration_tests/cairozero_test.go b/integration_tests/cairozero_test.go index 3ba2d162..7a89a156 100644 --- a/integration_tests/cairozero_test.go +++ b/integration_tests/cairozero_test.go @@ -292,6 +292,8 @@ func runPythonVm(testFilename, path string) (time.Duration, string, string, erro args = append(args, "--layout", "dex") } else if strings.HasSuffix(testFilename, ".starknet_with_keccak.cairo") { args = append(args, "--layout", "starknet_with_keccak") + } else if strings.HasSuffix(testFilename, ".recursive_large_output.cairo") { + args = append(args, "--layout", "recursive_large_output") } else if strings.HasSuffix(testFilename, ".recursive_with_poseidon.cairo") { args = append(args, "--layout", "recursive_with_poseidon") } @@ -329,6 +331,8 @@ func runVm(path string) (time.Duration, string, string, string, error) { layout = "dex" } else if strings.Contains(path, ".starknet_with_keccak") { layout = "starknet_with_keccak" + } else if strings.Contains(path, ".recursive_large_output") { + layout = "recursive_large_output" } else if strings.Contains(path, ".recursive_with_poseidon") { layout = "recursive_with_poseidon" } diff --git a/pkg/vm/builtins/layouts.go b/pkg/vm/builtins/layouts.go index f41b545c..8e5cc2c6 100644 --- a/pkg/vm/builtins/layouts.go +++ b/pkg/vm/builtins/layouts.go @@ -59,6 +59,16 @@ func getStarknetWithKeccakLayout() Layout { }} } +func getRecursiveLargeOutputLayout() Layout { + return Layout{Name: "recursive_large_output", RcUnits: 4, Builtins: []LayoutBuiltin{ + {Runner: &Output{}, Builtin: starknet.Output}, + {Runner: &Pedersen{ratio: 128}, Builtin: starknet.Pedersen}, + {Runner: &RangeCheck{ratio: 8, RangeCheckNParts: 8}, Builtin: starknet.RangeCheck}, + {Runner: &Bitwise{ratio: 8}, Builtin: starknet.Bitwise}, + {Runner: &Poseidon{ratio: 8, cache: make(map[uint64]fp.Element)}, Builtin: starknet.Poseidon}, + }} +} + func getRecursiveWithPoseidonLayout() Layout { return Layout{Name: "recursive_with_poseidon", RcUnits: 4, Builtins: []LayoutBuiltin{ {Runner: &Output{}, Builtin: starknet.Output}, @@ -69,7 +79,6 @@ func getRecursiveWithPoseidonLayout() Layout { }} } -// recursive_with_poseidon func GetLayout(layout string) (Layout, error) { switch layout { case "plain": @@ -80,6 +89,8 @@ func GetLayout(layout string) (Layout, error) { return getDexLayout(), nil case "starknet_with_keccak": return getStarknetWithKeccakLayout(), nil + case "recursive_large_output": + return getRecursiveLargeOutputLayout(), nil case "recursive_with_poseidon": return getRecursiveWithPoseidonLayout(), nil case "":