Skip to content

Commit

Permalink
sketch
Browse files Browse the repository at this point in the history
  • Loading branch information
Okm165 committed Apr 14, 2024
1 parent acb9ac1 commit ad04750
Show file tree
Hide file tree
Showing 14 changed files with 433 additions and 0 deletions.
1 change: 1 addition & 0 deletions .cairofmtignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cairo/
Empty file added cairo/bootloader/__init__.py
Empty file.
97 changes: 97 additions & 0 deletions cairo/bootloader/objects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import dataclasses
from abc import abstractmethod
from dataclasses import field
from typing import ClassVar, Dict, List, Optional, Type

import marshmallow
import marshmallow.fields as mfields
import marshmallow_dataclass
from marshmallow_oneofschema import OneOfSchema

from starkware.cairo.lang.compiler.program import Program, ProgramBase, StrippedProgram
from starkware.cairo.lang.vm.cairo_pie import CairoPie
from starkware.starkware_utils.marshmallow_dataclass_fields import additional_metadata
from starkware.starkware_utils.validated_dataclass import ValidatedMarshmallowDataclass


class TaskSpec(ValidatedMarshmallowDataclass):
"""
Contains task's specification.
"""

@abstractmethod
def load_task(self) -> "Task":
"""
Returns the corresponding task.
"""


class Task:
@abstractmethod
def get_program(self) -> ProgramBase:
"""
Returns the task's Cairo program.
"""


@marshmallow_dataclass.dataclass(frozen=True)
class RunProgramTask(TaskSpec, Task):
TYPE: ClassVar[str] = "RunProgramTask"
program: Program
program_input: dict
use_poseidon: bool

def get_program(self) -> Program:
return self.program

def load_task(self) -> "Task":
return self


@marshmallow_dataclass.dataclass(frozen=True)
class CairoPiePath(TaskSpec):
TYPE: ClassVar[str] = "CairoPiePath"
path: str
use_poseidon: bool

def load_task(self) -> "CairoPieTask":
"""
Loads the PIE to memory.
"""
return CairoPieTask(cairo_pie=CairoPie.from_file(self.path), use_poseidon=self.use_poseidon)


class TaskSchema(OneOfSchema):
"""
Schema for Task/CairoPiePath.
OneOfSchema adds a "type" field.
"""

type_schemas: Dict[str, Type[marshmallow.Schema]] = {
RunProgramTask.TYPE: RunProgramTask.Schema,
CairoPiePath.TYPE: CairoPiePath.Schema,
}

def get_obj_type(self, obj):
return obj.TYPE


@dataclasses.dataclass(frozen=True)
class CairoPieTask(Task):
cairo_pie: CairoPie
use_poseidon: bool

def get_program(self) -> StrippedProgram:
return self.cairo_pie.program


@marshmallow_dataclass.dataclass(frozen=True)
class SimpleBootloaderInput(ValidatedMarshmallowDataclass):
tasks: List[TaskSpec] = field(
metadata=additional_metadata(marshmallow_field=mfields.List(mfields.Nested(TaskSchema)))
)
fact_topologies_path: Optional[str]

# If true, the bootloader will put all the outputs in a single page, ignoring the
# tasks' fact topologies.
single_page: bool
Empty file.
11 changes: 11 additions & 0 deletions cairo/bootloader/recursive_with_poseidon/builtins.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from starkware.cairo.lang.builtins.all_builtins import *

ALL_BUILTINS = BuiltinList(
[
OUTPUT_BUILTIN,
PEDERSEN_BUILTIN,
RANGE_CHECK_BUILTIN,
BITWISE_BUILTIN,
POSEIDON_BUILTIN,
]
)
Loading

0 comments on commit ad04750

Please sign in to comment.