-
Notifications
You must be signed in to change notification settings - Fork 841
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
EIP-7692 "Mega" EOF Implementation #7169
Conversation
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
As per a recent ACD, the opcode numbers for EOF and Transient Storage have been updated. Update the code and test cases for the new numbers. Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
* rjump to 0xE2 * rjump zero index * move data to header kind 4 * move containers before data Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
As per a recent ACD, the opcode numbers for EOF and Transient Storage have been updated. Update the code and test cases for the new numbers. Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Current Opcodes Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Support running reference test EOFTests from the EVMTool CLI Signed-off-by: Danno Ferrin <danno.ferrin@swirldslabs.com>
Signed-off-by: Danno Ferrin <danno@numisight.com>
Add the "PragueEOF" fork which is prague+EOF. For genesis and evmtool trace, the Prague fork is just prague. To use EOF for networks and CLI traces use the 'PragueEOF' fork. For reverence tests the "Prague" fork maps to "PrageEOF" because reference tests currently have EOF tests wired into Prague. Signed-off-by: Danno Ferrin <danno@numisight.com>
Two changes: (a) ensure PragueEOF is used for ref tests for EOF (b) exclude an out of date test that expects TXCREATE to exist. Signed-off-by: Danno Ferrin <danno@numisight.com>
Don't give the option for shallow validation, it's always deep. Signed-off-by: Danno Ferrin <danno@numisight.com>
ReturnDataLoad and ReturnDataCopy had recent spec changes. Fix that. Signed-off-by: Danno Ferrin <danno@numisight.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggests naming changes and other nits. Will approve once PragueEOFGasCalculatorTest.java gets some tests in it ;)
...cetests/src/reference-test/java/org/hyperledger/besu/ethereum/eof/EOFReferenceTestTools.java
Outdated
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/code/CodeV1Validation.java
Outdated
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/fluent/EVMExecutor.java
Outdated
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/operation/AbstractCreateOperation.java
Outdated
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/operation/RelativeJumpVectorOperation.java
Outdated
Show resolved
Hide resolved
Signed-off-by: Danno Ferrin <danno@numisight.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks incredible well. Thank you so much for the video, that was extremely useful for reviewing this PR and also for filling the gap between Big EOF and Mega EOF
...um/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/MainnetTransactionProcessor.java
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/contractvalidation/EOFValidationCodeRule.java
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/operation/RelativeJumpVectorOperation.java
Outdated
Show resolved
Hide resolved
evm/src/main/java/org/hyperledger/besu/evm/operation/RelativeJumpVectorOperation.java
Outdated
Show resolved
Hide resolved
Signed-off-by: Danno Ferrin <danno@numisight.com>
Getting EXTCALL and legacy call to work in the same code flow is too complex. Re-wrote the gas calculation to be ext*call specific. Signed-off-by: Danno Ferrin <danno@numisight.com>
Signed-off-by: Danno Ferrin <danno@numisight.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚢!
Signed-off-by: Danno Ferrin <danno@numisight.com>
Signed-off-by: Danno Ferrin <danno@numisight.com>
PR description
This is a complete implementation of EIP-7692 EOF v.1
A video walkthrough of the diff is available here
One important change from the video is the introduction of a "PragueEOF" fork, which is Prague + EOF. When scheduling a fork via the genesis file or the
evmtool
's trace facility, you will use "PragueTime" to mean only scheduled prague EIPs, and "PragueEOFTime" for Prague + EOF. However, reference tests will continue to use PrageEOF as the fork basis, as many reference tests and EEST tests use Prague as the fork to test EOF features. This fork is temporary and as actual ACD scheduling changes will be updated.Fixed Issue(s)
Thanks for sending a pull request! Have you done the following?
doc-change-required
label to this PR if updates are required.Locally, you can run these tests to catch failures early:
./gradlew build
./gradlew acceptanceTest
./gradlew integrationTest
./gradlew ethereum:referenceTests:referenceTests