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

VM v5 Release Planning #681

Closed
20 of 27 tasks
holgerd77 opened this issue Mar 31, 2020 · 19 comments
Closed
20 of 27 tasks

VM v5 Release Planning #681

holgerd77 opened this issue Mar 31, 2020 · 19 comments

Comments

@holgerd77
Copy link
Member

holgerd77 commented Mar 31, 2020

Now with the monorepo transition being in its latests phases we can start on planning the next major VM release, various things are on the door for this. I'll try to collect here what I can think of and we can further discuss, if we have some agreement on further additions please just add to the list below:

TODO List

Be Happy! 🦄 😄 🌻

Discussion

  • VM: Do we finally want to expose the reworked Interpreter API Sina @s1na introduced along the v4.0.0 release ( see "EVM Modularization and Structural Refactoring" section as well as linked PR within the section)? Related: VM: Run transaction with custom EVM/Interpreter / API Discussion #636
    • Update: agreement that there is currently still too much movement around this, so won't be integrated in v5 but rather postponed to a subsequent major version release
  • VM, merkle-patricia-tree: Do we want to also wait for the TypeScript / Promisification v4.0.0 release of the merkle tree library to add here or do we want to give this a bit more time (this would also need an update on the Block and eventually the Account (only dev dependency) library)? @ryanio
    • -> Update: MPT release is imminent, so this can be integrated, have moved to TODO

Notes

  1. Ownership: I've assigned team members already involved or I thought fitting to the tasks, if you can't/don't want to take over just replace with OPEN or something.

  2. Date: Just as some orientation, I would roughly target a date within a range of 2-3 weeks for a possible release, let's take April 22, Wednesday as a starter, let me know if you have comments on that

Anything else? Something missing? Other suggestions?

@holgerd77
Copy link
Member Author

Just some notes, before I forget, will work this better into the description above and generally update the issue list early next week.

  • Work here turns out to be likely to extensive to match the April 22 date in a couple of days, we'll likely have to move here by at least I would say 2 weeks
  • MPT promisification PR by @ryanio is merged (yeah 🎉, great work) and a v4 release is relatively imminent Release - v4.0.0 merkle-patricia-tree#111, so we can likely take a MPT update in
  • @cgewecke has committed to do some work on the ethereumjs-util library and finalize Update secp2561 ECDSA dependency to v4.0.0 ethereumjs-util#228, wonder if we should also take this in (would be also a major release on the util library) since this would significantly improve the installation process, which is currently really a pain regarding the crypto packages and source for many complaints. Not sure, Chris will you be able to work on this relatively soon (next week optimally?)?

We generally have to look at the dependency tree (by @evertonfraga) really closely regarding all these things to not miss some updates.

@cgewecke
Copy link
Contributor

cgewecke commented Apr 20, 2020

Chris will you be able to work on this relatively soon (next week optimally?)?

@holgerd77 Yes, I will start working on this Monday, April 20.

@kumavis
Copy link
Member

kumavis commented Apr 20, 2020

some ideas from earlier days of ethereumjs-*

  • merkle-patricia-tree if you make getting the current state root of a merkle-patricia-tree an async op, you can put off ALL hash calculations for new values until the root is read. if the root is never read, you saved yourself a bunch of work
  • vm if you make the storage backend easily pluggable, you can run the vm off of rpc requests
    https://github.com/ethereumjs/ethereumjs-vm/blob/0f10fcfdbc55ceadbff6adeb54bca6df393ef62f/lib/hooked.js#L77-L83 This is hugely useful for anyone who wants to run the vm while accessing state remotely. sad to see support for it was dropped.

basicaclly scifi:

  • vm: out-of-order execution. (not speculative execution or branch prediction) a significant change, but if you make all values you push onto the stack to be promises, you get great perf wins like parallel storage reads (huge for zero and light clients), and you let the js engine figure out the causality requirements. to really do it correctly you need to build a funky mutex machine around memory read/writes, but it sounds like a fun challenge. I started playing with this over the summer and you can make iterative progress while maintaining passing tests.
    e13503b...dynamic-execution#diff-f42577b259c8466289ed92b49e2a212c

@kumavis
Copy link
Member

kumavis commented Apr 20, 2020

worth noting that ganache's forked blockchain feature also uses a json rpc client for state reads, this is how they are hooking in https://github.com/trufflesuite/ganache-core/blob/a5f43a4d666c82bce9da51f9ce1d15b6561e24f3/lib/utils/forkedblockchain.js#L89-L93

this usecase should be supported without having to override underscored properties/methods

@s1na
Copy link
Contributor

s1na commented Apr 28, 2020

Wrote down some thoughts re making EVM (Interpreter and EEI) public here. Probably makes sense to keep them private for this release.

@holgerd77
Copy link
Member Author

For notice: have substantially updated the initial TODO list here to keep track with our latest discussions around various questions.

@holgerd77
Copy link
Member Author

@evertonfraga Can you please give the TODO list from above an update, so that things won't get forgotten?

One additional thing which comes to my mind: we should do a last

npm ls ethereumjs-util

check on the final VM version to ensure that we haven't forgotten anything along the Uti v7 update.

Also: @ryanio what is the state of the MPT v4 update? Can we still manage to get this in?

@evertonfraga
Copy link
Contributor

@holgerd77 sure. I will change the todo descriptions, if you don’t mind.

@ryanio
Copy link
Contributor

ryanio commented Jun 9, 2020

@holgerd77 yes let's release mpt v4 on npm and i will finish my branch to include :)

@alcuadrado
Copy link
Member

One additional thing which comes to my mind: we should do a last

npm ls ethereumjs-util

check on the final VM version to ensure that we haven't forgotten anything along the Uti v7 update.

I think this should be checked by a linter/script on the CI. I have a script to do this in Buidler, I hadn't proposed importing it here before, because it works with a monorepo. I'll open a PR now.

@evertonfraga
Copy link
Contributor

Thanks @alcuadrado!

@alcuadrado
Copy link
Member

Can we release and use @ethereumjs/config-typescript before this version gets published?

@evertonfraga
Copy link
Contributor

Sure @alcuadrado, that’s on my plan. To make things more clear, tomorrow I’ll start the day creating a milestone with all the issues for the v5. You all will be welcome to suggest as well.

@jochem-brouwer
Copy link
Member

jochem-brouwer commented Aug 6, 2020

Some thoughts on what I think should be included in V5 (as addition to things already mentioned here):

  • Berlin HF support
  • Support for all older HFs (we could skip DAO for now though)
  • Remove callbacks from blockchain (blockchain is the only package which is now using callbacks as opposed to all other packages having replaced the callbacks by async functions).

Besides those, it might be a good idea to go over all issues and all currently open PRs in order to see if there are any breaking changes which we'd like to include in the V5 release.

@holgerd77
Copy link
Member Author

Have updated the TODO list from above so that we can finally close in on a release, please add if something is missing.

@alcuadrado
Copy link
Member

How is the Berlin support gonna be released? I think it should be somehow marked as experimental, with no guarantees of stability, as Berlin may include a different set of eips. Did we have some experimental apis before?

Just curious, I don't think this requieres too much thinking, just not making it default and a big warning.

@holgerd77
Copy link
Member Author

@alcuadrado Yes, a bit as you described. Analogous to the previous forks we won't switch the default fork yet and mark the HF support as experimental. Once this has finalized we will likely release a new minor version with the stable-marked HF (still not made default). This worked pretty well in the past, no complains there at any time.

@alcuadrado
Copy link
Member

Oh, that's nice. I thought the previous HFs were released after they were settled/activated.

@holgerd77
Copy link
Member Author

Closed in favor of #907

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

No branches or pull requests

8 participants