-
-
Notifications
You must be signed in to change notification settings - Fork 793
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
VIP: EVM Ruleset Switch #1230
Comments
I am happy if we support byzantium onwards, but having to figure out all the differences before that will be a lot of work for minimal gain. |
I think a really scalable solution here utilizes |
Yeah this would require a lot of works in the lll compile & opcode step. Py-evm's rulesets are not as easy to wield here, have you seen how it's implemented? |
Was taking a browse through. My initial thought was to check against the dict of opcodes for existence (to throw an error), then validate if there was an incorrect number of args for the opcode later down the line. Definitely a lot of work to get it flawless, but arguable very necessary for supporting new hard forks and the like |
That seems quite do-able, but then we'd create a dependency on py-evm for the base vyper install. For reference see: https://github.com/ethereum/py-evm/blob/master/eth/vm/forks/byzantium/opcodes.py I say let's try to see what |
Maybe a different way to support this is through a flag with comma-separated EIP numbers that are implemented in the language but not currently enabled in the main chain (but planned for a hard fork) |
|
add version info (availability, gas cost) to opcodes |
implementation-wise, probably cleanest to make a new LLL pseudo-opcode for every new EVM feature we want to support, and then we only need to deal with the versioning at the LLL to EVM translation step, either emulate for older versions (e.g. for SELFBALANCE) or throw if not supported (e.g. CHAINID). |
Simple Summary
People need to produce code for different versions of the EVM
Abstract
Provide an interface to switch the VM rulesets used to compile, validate, and produce bytecode for a given source program.
Motivation
It is important for developers to be able to produce bytecode for different versions of the EVM. This may include for future hardfork implementations (such as constantinople), or for chains that still use past rules (ETC or permissioned networks like Quorum). It might also be eventually useful to specify more granular or custom rulesets via
py-evm
, but that is out of scope for now.Specification
Solidity has
--evm-version VM_NAME
flag:I suggest we use this.
The technical details should be as such:
Backwards Compatibility
Fully backwards compatible
Dependencies
No dependancies on other VIPs
Copyright
Copyright and related rights waived via CC0
The text was updated successfully, but these errors were encountered: