406 Commits

Author SHA1 Message Date
Jacqueline Nabaglo
5922c58730
Change logic limb size to 32 bits (#674)
* Change logic limb size to 32 bits

* Remove unnecessary columns (thx Daniel!)
2022-08-17 21:19:27 -07:00
Daniel Lubarov
bfe86d70f5 Start with PC=route_txn instead of 0 2022-08-17 12:21:29 -07:00
Jacqueline Nabaglo
b98dd47820
Permission levels, jumps, traps (#653)
* Permission levels, jumps, traps

* Tests passing

* PR comments + documentation

* Docs + minor bugfixes

* Tests

* Use already-defined `stop` and `exception` (but renamed to `sys_stop`, `fault_exception`)

* Daniel comments
2022-08-16 09:46:10 -07:00
Daniel Lubarov
232303b9ec
Merge pull request #666 from mir-protocol/rlp_encode
RLP encoding functions
2022-08-15 12:19:04 -07:00
Daniel Lubarov
97b271bf69
Merge pull request #663 from mir-protocol/use_mstore_txn_field
Make use of `mstore_txn_field` in type 0 parsing
2022-08-15 11:41:18 -07:00
Daniel Lubarov
61819af07d Improved Keccak implementation
Based on the approach @SyxtonPrime described.

In terms of columns, the changes are:
- Store inputs (`A`) as `u32` limbs, rather than individual bits.
- Remove `C_partial`. It was used to store an intermediate product in a 5-way xor, but we've since realized that we can do a 5-way xor directly.
- Add `C_prime`, an intermediate result used to help verify the relation between `A` and `A'`.
2022-08-14 21:33:35 -07:00
Daniel Lubarov
539152d767 RLP encoding functions 2022-08-14 11:41:53 -07:00
Daniel Lubarov
f52e005307 Add static 2022-08-13 12:17:19 -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
6ea801d960 TODOs 2022-08-13 10:23:29 -07:00
Daniel Lubarov
74b1fd25e6 TODOs 2022-08-12 17:37:00 -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
Daniel Lubarov
1763b6bc37
Merge pull request #662 from mir-protocol/stack_pruning_opt_perms
For permutations, find the optimal sequence of swaps
2022-08-12 17:19:47 -07:00
Daniel Lubarov
288ff63945 Fix shift ordering 2022-08-10 21:47:37 -07:00
Daniel Lubarov
707e564934 Make use of mstore_txn_field in type 0 parsing
Some of the `%stack` operations are now trivial, but I kind of like keeping `%stack` since it serves as documentation as well, making comments about the stack unnecessary.
2022-08-09 18:44:41 -04:00
Daniel Lubarov
763d63de08 For permutations, find the optimal sequence of swaps
Using a method Angus described. This is mainly his idea and code, I just ported it to Rust.
2022-08-09 16:33:02 -04:00
Daniel Lubarov
68de3ee0c6
Merge pull request #660 from mir-protocol/packing
Packing memory operations
2022-08-08 14:23:49 -04:00
Nicholas Ward
ed3ac7b29d
Merge pull request #658 from mir-protocol/memory_stark_fix
Memory Stark fix
2022-08-05 15:33:00 -07:00
Daniel Lubarov
5f14bef57e
Merge pull request #655 from mir-protocol/more_metadata
More metadata fields
2022-08-05 14:08:51 -05:00
Daniel Lubarov
ccc4202de3 Packing memory operations 2022-08-05 13:44:08 -04:00
Daniel Lubarov
616eb618f2 Support macro-local labels
Again borrowing syntax from NASM. Example from the test:

    %macro spin
    %%start:
        PUSH %%start
        JUMP
    %endmacro

One thing this lets us do is create "wrapper" macros which call a function, then return to the code immediately following the macro call, such as

    %macro decode_rlp_scalar
        %stack (pos) -> (pos, %%after)
        %jump(decode_rlp_scalar)
    %%after:
    %endmacro

I used this to clean up `type_0.asm`.

However, since such macros need to insert `%%after` beneath any arguments in the stack, using them will be suboptimal in some cases. I wouldn't worry about it generally, but we might want to avoid them in performance-critical code, or functions with many arguments like `memcpy`.
2022-08-04 12:32:20 -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
1e6cf4c4ab newline 2022-08-04 09:34:46 -07:00
Daniel Lubarov
7423124e36 Split up memory asm and add more helper functions 2022-08-03 22:18:29 -07:00
Daniel Lubarov
fae653da2a Missing retdest 2022-08-03 21:56:31 -07:00
Daniel Lubarov
233584e945
Merge pull request #656 from mir-protocol/min_max
min, max macros
2022-08-03 21:41:23 -07:00
Daniel Lubarov
dfd715fafb Fix case where a valid constant propagation a broke test 2022-08-03 13:52:52 -07:00
Daniel Lubarov
f58990160e min, max macros
Will be used later for things like updating `MemorySize`.
2022-08-03 13:44:44 -07:00
Daniel Lubarov
b4d83f8db2 More metadata fields 2022-08-03 13:43:13 -07:00
Daniel Lubarov
90be4749ef Merge branch 'main' into optimizer 2022-08-03 09:58:54 -07:00
Daniel Lubarov
9b5b77d3e9 Check if suggested code is actually better 2022-08-03 09:57:40 -07:00
Daniel Lubarov
8aad0b0746 Feedback 2022-08-02 15:57:06 -07:00
Daniel Lubarov
6416826643 Feedback 2022-08-02 15:44:50 -07:00
Daniel Lubarov
002b568a12 fix 2022-08-02 10:17:34 -07:00
Daniel Lubarov
cb2df9fa03 More commutative fns 2022-08-02 09:22:06 -07:00
Daniel Lubarov
c167da8cbe Revert "UserspaceProgramCounter"
This reverts commit 05beaab661a8aaa2f84b6f121b5ac2f29f2ed836.
2022-08-02 09:11:27 -07:00
Daniel Lubarov
3b54ec3986 Feedback 2022-08-02 09:11:27 -07:00
Daniel Lubarov
8bb45203f9 More succinct deadbeef 2022-08-02 09:11:27 -07:00
Daniel Lubarov
f951345556
Update evm/src/cpu/kernel/global_metadata.rs
Co-authored-by: Jacqueline Nabaglo <jakub@mirprotocol.org>
2022-08-02 09:09:48 -07:00
Daniel Lubarov
be0a5269ab UserspaceProgramCounter 2022-08-01 21:21:35 -07: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
94c9b1b09c Misc 2022-08-01 11:20:56 -07:00
Daniel Lubarov
b737aeaf03 Tweak py-evm code 2022-08-01 11:13:33 -07:00
Daniel Lubarov
3618793706 Test for parsing type 0 transactions
I made a couple related changes to `Interpreter`:
- Only enforce the `JUMPDEST` rule if we're in kernel mode.
- Convenience methods for dealing with the RLP and txn field segments of memory.
2022-08-01 11:03:05 -07:00
Daniel Lubarov
4fc7f3cd6e
Merge pull request #649 from mir-protocol/rlp_tests
RLP decoding tests
2022-08-01 09:54:42 -07:00
Daniel Lubarov
98c4a372fb More binops 2022-08-01 09:22:01 -07:00
Daniel Lubarov
d1c9e150b3 remove_swaps_commutative 2022-08-01 09:02:39 -07:00
Daniel Lubarov
63c8568b17 remove_ignored_values 2022-08-01 08:47:07 -07:00