Skip to content

Commit 0d1b966

Browse files
authored
Implemented EvalCircuit, Fixed bugs and wrote tests for Modbuiltin (#669)
* Wrote tests for ModBuiltin * it * Added another test * big test * add zerodivisor * implemented nComputedMulGates * Done with tests * lint * nit * nit * nit * nit
1 parent f1f925d commit 0d1b966

File tree

10 files changed

+797
-77
lines changed

10 files changed

+797
-77
lines changed

.github/workflows/integration-test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
python-version: "3.9"
1919

2020
- name: Install cairo-lang
21-
run: pip install cairo-lang==0.13.1
21+
run: pip install cairo-lang==0.13.2
2222

2323
- name: Install sympy
2424
run: pip install sympy==1.11.1

pkg/hintrunner/core/cairo_hintparser.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ func GetHintByName(hint starknet.Hint) (hinter.Hinter, error) {
9595
return &AllocSegment{
9696
Dst: parseCellRefer(args.Dst),
9797
}, nil
98+
case starknet.EvalCircuitName:
99+
args := hint.Args.(*starknet.EvalCircuit)
100+
return &EvalCircuit{
101+
AddModN: parseResOperand(args.NAddMods),
102+
AddModPtr: parseResOperand(args.AddModPtr),
103+
MulModN: parseResOperand(args.NMulMods),
104+
MulModPtr: parseResOperand(args.MulModPtr),
105+
}, nil
98106
case starknet.TestLessThanName:
99107
args := hint.Args.(*starknet.TestLessThan)
100108
return &TestLessThan{

pkg/hintrunner/core/hint.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/NethermindEth/cairo-vm-go/pkg/parsers/starknet"
1313
"github.com/NethermindEth/cairo-vm-go/pkg/utils"
1414
VM "github.com/NethermindEth/cairo-vm-go/pkg/vm"
15+
"github.com/NethermindEth/cairo-vm-go/pkg/vm/builtins"
1516
mem "github.com/NethermindEth/cairo-vm-go/pkg/vm/memory"
1617
f "github.com/consensys/gnark-crypto/ecc/stark-curve/fp"
1718
)
@@ -56,6 +57,46 @@ func (hint *AllocSegment) Execute(vm *VM.VirtualMachine, _ *hinter.HintRunnerCon
5657
return nil
5758
}
5859

60+
type EvalCircuit struct {
61+
AddModN hinter.Reference
62+
AddModPtr hinter.Reference
63+
MulModN hinter.Reference
64+
MulModPtr hinter.Reference
65+
}
66+
67+
func (hint *EvalCircuit) String() string {
68+
return "EvalCircuit"
69+
}
70+
71+
func (hint *EvalCircuit) Execute(vm *VM.VirtualMachine, _ *hinter.HintRunnerContext) error {
72+
addModInputAddress, err := hinter.ResolveAsAddress(vm, hint.AddModPtr)
73+
if err != nil {
74+
return fmt.Errorf("resolve addModBuiltin pointer: %w", err)
75+
}
76+
nAddMods, err := hint.AddModN.Resolve(vm)
77+
if err != nil {
78+
return fmt.Errorf("resolve nAddMods operand %s: %v", hint.AddModN, err)
79+
}
80+
nAddModsFelt, err := nAddMods.Uint64()
81+
if err != nil {
82+
return err
83+
}
84+
mulModInputAddress, err := hinter.ResolveAsAddress(vm, hint.MulModPtr)
85+
if err != nil {
86+
return fmt.Errorf("resolve mulModBuiltin pointer: %w", err)
87+
}
88+
nMulMods, err := hint.MulModN.Resolve(vm)
89+
if err != nil {
90+
return fmt.Errorf("resolve nMulMods operand %s: %v", hint.MulModN, err)
91+
}
92+
nMulModsFelt, err := nMulMods.Uint64()
93+
if err != nil {
94+
return err
95+
}
96+
97+
return builtins.FillMemory(vm.Memory, *addModInputAddress, nAddModsFelt, *mulModInputAddress, nMulModsFelt)
98+
}
99+
59100
type TestLessThan struct {
60101
dst hinter.Reference
61102
lhs hinter.Reference

0 commit comments

Comments
 (0)