Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: chip handler refactor #80

Merged
merged 86 commits into from
Aug 7, 2024
Merged

feat: chip handler refactor #80

merged 86 commits into from
Aug 7, 2024

Conversation

iammadab
Copy link
Contributor

@iammadab iammadab commented Jun 19, 2024

General Goals

  • separate ram, rom and oam from chips
  • make each chip a concrete structure
  • add more tests
  • make logic clearer

Currently, the integration between chips and their underlying memory checking structure uses interior mutability, a subsequent PR will get rid of this interior mutability hack by having a new memory checking instance per chip then we combine the records generated for each at the end.
see corresponding issue: #87

@iammadab iammadab changed the base branch from feat/refactor-uint to master July 15, 2024 14:34
@iammadab iammadab marked this pull request as ready for review July 29, 2024 08:02
@dreamATD dreamATD requested a review from hero78119 July 30, 2024 02:37
@@ -378,6 +380,7 @@ impl<Ext: ExtensionField> CircuitBuilder<Ext> {
let a1b1 = self.create_cell();
self.add_internal(a1b1, in_0[1], in_1[1]);
self.add(out[0], a0b0, Ext::BaseField::ONE);
// TODO: is this a bug, should there be a random 7 here??
self.add(out[0], a1b1, Ext::BaseField::from(7));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just following the definition of extension field multiplication. You can refer the code here: https://github.com/hero78119/Goldilocks/blob/master/src/primefield/fp2.rs#L14

// instantiate chips
let global_state_chip = GlobalStateChip::new(ram_handler.clone());
let mut range_chip = RangeChip::new(rom_handler.clone());
let stack_chip = StackChip::new(ram_handler.clone());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does range_chip have mut, but global_state_chip and stack_chip doesn't?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed in #94

@dreamATD
Copy link
Collaborator

Could you run cargo fmt before merging @iammadab ?

iammadab and others added 2 commits August 5, 2024 08:16
* define chip handler structure

* fix calldata chip

* fix global state chip

* fix memory chip

* fix uint arithmetic unit

* fix range chip

* fix stack chip

* fix uint cmp

* fix singer-utils chips

* fix add instruction

* fix calldata chip

* fix dup instruction

* fix jum and jumpdest

* fix jumpi instruction

* fix mstore + pop instruction

* fix push instruction

* fix ret instruction

* fix swap instruction

* fix pro add instruction

* fix pro calldata instruction

* fix pro gt instruction

* fix jumpi inst pro

* fix pro mstore inst

* fix pro ret instruction

* fix bb_final

* fix bb_ret

* fix bb_start

* fix gt inst

* tests passing

* fix constant generation: use max_cell_bit instead of C for computations

* cleanup

* resolve pr commenets
@dreamATD dreamATD merged commit cfd717e into master Aug 7, 2024
3 of 4 checks passed
@iammadab iammadab deleted the feat/chip_handler_refactor branch August 7, 2024 08:30
yczhangsjtu pushed a commit that referenced this pull request Aug 12, 2024
* confirm const across file impl

* implement try from cell_id's to uint

* add test for uint from cell ids

* add documentation

* document N_OPERAND_CELLS constant

* wip

* test cell repacking

* add documentation

* update packing test, ensure remaining values are 0s

* add more uint instantiation methods

* add test placeholders

* sketch base plan for cmp

* implement and test pad cells

* modify from_range and from_bytes to use cell padding

* extract logic for uint from arbitrary cell_width to make from_range and from_bytes easier

* add compile time evaluated min function

* introduce new constant  cleans up uint_from*

* update uint from cell id test to test greater than N_OPERANDS

* add test for uint from different sized cells

* implement add_unsafe

* add functions sketch

* wip

* all func

* building

* test compiling

* use range checker

* refactor constants second pass

* document cmp

* wip

* arithmetic second pass

* delete old uint

* refactor arithmetic

* fix documentation

* add test for add

* test add constant unsafe

* add test for add_small_unsafe

* implement handle borrow

* test sub_unsafe

* rename add_small to add_cell

* wip

* change uint mod management

* setup structure for namespacing constants

* refactor counter vector implementation

* introduce difference

* define ram and rom structures

* potential bug

* rom phase 1

* rename

* implement oam handler phase 1

* implement ram handler phase 1

* bytecode chip attempt 1

* implement call data records builder p1

* implement global state chip record generator p1

* implement memory chip record generator

* implement stack chip record generator p1

* wip

* util method for cell to mixed

* start work on range chip

* wip

* document range check uint

* clean up range check uint

* remove range_chip_bit_width injection

* move non-zero

* add interior mutability to range chip

* add interior mutability to bytecode

* add interior mutability to call data chip

* add interior mutability to memory chip

* add interior mutability to stack

* ram handler using single source oam handler

* update signer utils

* big wip

* fix singer compile errors

* fix compile errors

* delete old chip handler

* cleanup

* merge oam handler with ram handler

* fmt

* remove random 7 comments

* feat: remove interior mutability (#94)

* define chip handler structure

* fix calldata chip

* fix global state chip

* fix memory chip

* fix uint arithmetic unit

* fix range chip

* fix stack chip

* fix uint cmp

* fix singer-utils chips

* fix add instruction

* fix calldata chip

* fix dup instruction

* fix jum and jumpdest

* fix jumpi instruction

* fix mstore + pop instruction

* fix push instruction

* fix ret instruction

* fix swap instruction

* fix pro add instruction

* fix pro calldata instruction

* fix pro gt instruction

* fix jumpi inst pro

* fix pro mstore inst

* fix pro ret instruction

* fix bb_final

* fix bb_ret

* fix bb_start

* fix gt inst

* tests passing

* fix constant generation: use max_cell_bit instead of C for computations

* cleanup

* resolve pr commenets
hero78119 pushed a commit that referenced this pull request Sep 30, 2024
* confirm const across file impl

* implement try from cell_id's to uint

* add test for uint from cell ids

* add documentation

* document N_OPERAND_CELLS constant

* wip

* test cell repacking

* add documentation

* update packing test, ensure remaining values are 0s

* add more uint instantiation methods

* add test placeholders

* sketch base plan for cmp

* implement and test pad cells

* modify from_range and from_bytes to use cell padding

* extract logic for uint from arbitrary cell_width to make from_range and from_bytes easier

* add compile time evaluated min function

* introduce new constant  cleans up uint_from*

* update uint from cell id test to test greater than N_OPERANDS

* add test for uint from different sized cells

* implement add_unsafe

* add functions sketch

* wip

* all func

* building

* test compiling

* use range checker

* refactor constants second pass

* document cmp

* wip

* arithmetic second pass

* delete old uint

* refactor arithmetic

* fix documentation

* add test for add

* test add constant unsafe

* add test for add_small_unsafe

* implement handle borrow

* test sub_unsafe

* rename add_small to add_cell

* wip

* change uint mod management

* setup structure for namespacing constants

* refactor counter vector implementation

* introduce difference

* define ram and rom structures

* potential bug

* rom phase 1

* rename

* implement oam handler phase 1

* implement ram handler phase 1

* bytecode chip attempt 1

* implement call data records builder p1

* implement global state chip record generator p1

* implement memory chip record generator

* implement stack chip record generator p1

* wip

* util method for cell to mixed

* start work on range chip

* wip

* document range check uint

* clean up range check uint

* remove range_chip_bit_width injection

* move non-zero

* add interior mutability to range chip

* add interior mutability to bytecode

* add interior mutability to call data chip

* add interior mutability to memory chip

* add interior mutability to stack

* ram handler using single source oam handler

* update signer utils

* big wip

* fix singer compile errors

* fix compile errors

* delete old chip handler

* cleanup

* merge oam handler with ram handler

* fmt

* remove random 7 comments

* feat: remove interior mutability (#94)

* define chip handler structure

* fix calldata chip

* fix global state chip

* fix memory chip

* fix uint arithmetic unit

* fix range chip

* fix stack chip

* fix uint cmp

* fix singer-utils chips

* fix add instruction

* fix calldata chip

* fix dup instruction

* fix jum and jumpdest

* fix jumpi instruction

* fix mstore + pop instruction

* fix push instruction

* fix ret instruction

* fix swap instruction

* fix pro add instruction

* fix pro calldata instruction

* fix pro gt instruction

* fix jumpi inst pro

* fix pro mstore inst

* fix pro ret instruction

* fix bb_final

* fix bb_ret

* fix bb_start

* fix gt inst

* tests passing

* fix constant generation: use max_cell_bit instead of C for computations

* cleanup

* resolve pr commenets
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants