92 Commits

Author SHA1 Message Date
Daniel Lubarov
aa87f2c3ba Public memory 2022-08-25 20:19:18 -07:00
Daniel Lubarov
c38a98f9e4 Simpler CPU <-> memory CTL 2022-08-23 23:38:28 -07:00
Daniel Lubarov
6a7e8d0fb0 Trie related segments and metadata
Summary of the design:
- Tries are stored as immutable, copy-on-write trees
- All trie data is stored in the `TrieData` segment. Since it's immutable, data is never modified/deleted, new versions are just appended at the end.
- In order to support reverts, each context stores a pointer to the initial state trie version, plus the initial version of each storage trie.

One variation which may be worth considering is storing the whole state trie as one big trie (with sub-tries for storage). Reverts would then be simpler - we'd replace a single pointer. I thought that approach might make hashing the trie a bit more complex, as the node associated with an account would be a special type of node, rather than just another leaf. Either approach seems reasonable though.
2022-08-13 13:24:58 -07:00
Daniel Lubarov
137076c964 Revert "Add static"
This reverts commit 90c4e1b9d1cad9309c0cbcaeff52c172167b2c1c.
2022-08-13 12:16:19 -07:00
Daniel Lubarov
90c4e1b9d1 Add static 2022-08-13 12:15:42 -07:00
Daniel Lubarov
cc61c7211c Core transaction processing logic
With lots of TODOs to fill in afterward; this is just a start.
2022-08-12 17:20:18 -07:00
Nicholas Ward
bbcb419521 fmt 2022-08-04 14:56:16 -04:00
Nicholas Ward
bf4cf1c64f fix 2022-08-04 14:40:34 -04:00
Daniel Lubarov
3f08cca116 More constants for kernel ASM
- `GlobalMetadata` - offsets for global kernel variables in memory
- `ContextMetadata` - offsets for context-specific kernel variables in memory
- `GAS_CONSTANTS`, based on the yellowpaper

Also move constants to a separate module since `aggregator` was getting long.
2022-08-01 18:18:22 -07:00
Daniel Lubarov
bb45c8c850
Merge pull request #629 from proxima-one/maybe-rayon
add rayon shim
2022-07-28 11:38:56 -07:00
wborgeaud
ac68ce62c2 Merge conflicts 2022-07-27 10:16:04 +02:00
wborgeaud
fbfe0ad62a Merge branch 'main' into interpreter_context_segments 2022-07-27 10:12:59 +02:00
wborgeaud
e8ab92b115 PR feedback 2022-07-27 10:05:31 +02:00
wborgeaud
304299a007 Add assert to range check memory values 2022-07-25 10:39:51 +02:00
wborgeaud
715c350ee8 Implement mload/store_general 2022-07-25 10:34:18 +02:00
Sebastien La Duca
e48bfa837f fmt 2022-07-24 18:06:03 -04:00
Sebastien La Duca
c9d610ec10 use maybe_rayon in starky and evm 2022-07-24 17:47:14 -04:00
Daniel Lubarov
544c84b420 Transaction (RLP) parsing
Will add tests once we have the interpreter support for other segmnets.
2022-07-23 21:39:01 -07:00
Daniel Lubarov
47ea00d6c7 A few ASM fixes 2022-07-20 15:05:09 -07:00
Daniel Lubarov
997453237f Store memory values as U256s
Ultimately they're encoded as `[F; 8]`s in the table, but I don't anticipate that we'll have any use cases where we want to store more than 256 bits. Might as well store `U256` until we actually build the table since they're more compact.
2022-07-17 07:58:28 -07:00
Daniel Lubarov
ab5abc391d Organize segments in an enum
It's a bit more type-safe (can't mix up segment with context or virtual addr), and this way uniqueness of ordinals is enforced, partially addressing a concern raised in #591.

To avoid making `Segment` public (which I don't think would be appropriate), I had to make some other visibility changes, and had to move `generate_random_memory_ops` into the test module.
2022-07-16 10:16:12 -07:00
Daniel Lubarov
bfd924870f Generate most of the memory table while it's in row-wise form
This should improve cache locality - since we generally access several values at a time in a given row, we want themt to be close together in memory.

There are a few steps that make more sense column-wise, though, such as generating the `COUNTER` column. I put those after the transpose.
2022-07-13 13:08:41 -07:00
Daniel Lubarov
678d04e69a fix 2022-07-12 17:52:53 -07:00
Daniel Lubarov
d1afe8129c More realistic padding rows in memory
This adds padding rows which satisfy the ordering checks. To ensure that they also satisfy the value consistency checks, I just copied the address and value from the last operation.

I think this method of padding feels more natural, though it is a bit more code since we need to calculate the max range check in a different way. But on the plus side, the constraints are a bit smaller and simpler.

Also added a few constraints that I think we need for soundness:
- Each `is_channel` flag is bool.
- Sum of `is_channel` flags is bool.
- Dummy operations must be reads (otherwise the prover could put writes in the memory table which aren't in the CPU table).
2022-07-12 17:46:19 -07:00
Daniel Lubarov
1331f992a6 fix 2022-07-12 14:55:34 -07:00
Daniel Lubarov
25d429af7a fix 2022-07-12 14:54:36 -07:00
Daniel Lubarov
934f1aeb7e Simplify memory table
By no longer storing unsorted operations; they are effectively stored in the CPU table already.

I ran into some issues with sorting, since the existing sort method didn't include `is_channel` columns. Rather than update the existing method, I removed it and added a sort on the `MemoryOp`s, which I think seems cleaner.
2022-07-12 14:53:34 -07:00
Daniel Lubarov
ef3addea2c Merge branch 'main' into evm_generation 2022-07-11 17:24:37 -07:00
Nicholas Ward
abc729f1d6 TODO 2022-07-11 10:44:48 -07:00
Nicholas Ward
bdae9bc33b update 2022-07-11 10:44:48 -07:00
Nicholas Ward
b935605f69 fmt 2022-07-11 10:44:48 -07:00
Nicholas Ward
467f532024 addressed comments 2022-07-11 10:44:48 -07:00
Nicholas Ward
49c208ec9b addressed comments 2022-07-11 10:44:48 -07:00
Nicholas Ward
9ad2958f73 fix 2022-07-11 10:44:48 -07:00
Nicholas Ward
6655ee68e4 restored timestamp column to CTL 2022-07-11 10:44:48 -07:00
Nicholas Ward
6b2b745291 removed debug prints 2022-07-11 10:44:48 -07:00
Nicholas Ward
3a6f2ef25e clippy 2022-07-11 10:44:48 -07:00
Nicholas Ward
51498eb748 fmt 2022-07-11 10:44:48 -07:00
Nicholas Ward
58c2e7214a another padding-row constraint fix 2022-07-11 10:44:48 -07:00
Nicholas Ward
77a7ace39c updates to recursive constraints 2022-07-11 10:44:48 -07:00
Nicholas Ward
f3ef6c9bf3 fix: ignore padding rows in constraints 2022-07-11 10:44:48 -07:00
Nicholas Ward
83963c3a8f permutation pairs 2022-07-11 10:44:48 -07:00
Nicholas Ward
b467a13d91 fix 2022-07-11 10:44:48 -07:00
Nicholas Ward
c3e7652763 updates 2022-07-11 10:44:48 -07:00
Nicholas Ward
181a132335 fixes 2022-07-11 10:44:48 -07:00
Nicholas Ward
a98f267ff0 initial change 2022-07-11 10:44:48 -07:00
Daniel Lubarov
5d74a19ad6 Add test (won't work for a while, but to illustrate) 2022-07-04 18:10:03 -07:00
Daniel Lubarov
c389abc140 other segments 2022-07-02 23:17:33 -07:00
Daniel Lubarov
e7b480deaf Begin work on witness generation and kernel bootstrapping 2022-07-01 10:09:57 -07:00
wborgeaud
f30889b7d7 NUM_REGISTERS -> NUM_COLUMNS 2022-06-29 10:06:46 +02:00