| 25 | type CairoProgram struct{} |
| 26 | |
| 27 | func LoadCairoZeroProgram(cairoZeroJson *zero.ZeroProgram) (*Program, error) { |
| 28 | // bytecode |
| 29 | bytecode := make([]*fp.Element, len(cairoZeroJson.Data)) |
| 30 | for i := range cairoZeroJson.Data { |
| 31 | felt, err := new(fp.Element).SetString(cairoZeroJson.Data[i]) |
| 32 | if err != nil { |
| 33 | return nil, fmt.Errorf( |
| 34 | "cannot read bytecode %s at position %d: %w", |
| 35 | cairoZeroJson.Data[i], i, err, |
| 36 | ) |
| 37 | } |
| 38 | bytecode[i] = felt |
| 39 | } |
| 40 | |
| 41 | entrypoints, labels := extractEntrypointsAndLabels(cairoZeroJson) |
| 42 | |
| 43 | return &Program{ |
| 44 | Bytecode: bytecode, |
| 45 | Entrypoints: entrypoints, |
| 46 | Labels: labels, |
| 47 | Builtins: cairoZeroJson.Builtins, |
| 48 | }, nil |
| 49 | } |
| 50 | |
| 51 | func extractEntrypointsAndLabels(json *zero.ZeroProgram) (map[string]uint64, map[string]uint64) { |
| 52 | entrypoints := map[string]uint64{} |