{"id":7183,"date":"2025-01-10T20:25:29","date_gmt":"2025-01-10T19:25:29","guid":{"rendered":"https:\/\/wsj-crypto.com\/?p=7183"},"modified":"2025-01-10T20:25:29","modified_gmt":"2025-01-10T19:25:29","slug":"unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development","status":"publish","type":"post","link":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/","title":{"rendered":"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development"},"content":{"rendered":"<p><\/p>\n<div id=\"\">\n<p class=\"chakra-text css-gi02ar\">While everyone gazes in wonder on December 1st, 12pm UTC expecting the Eth 2.0 Beaconchain genesis, the JavaScript team has been diligently crafting our own small genesis release in the background. Although we are still well-versed with the good old Eth 1.0 chain, we are equally thrilled about this. \ud83d\ude00<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Some contextual information: the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\">EthereumJS<!-- --><\/a> ecosystem surrounding the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-vm\">VM<!-- --><\/a> comprises a highly modular selection of libraries (vm, blockchain, merkle-patricia-tree, tx,&#8230;), with each hosting its specific functionality. While this is beneficial for the user, it has proven less than ideal for development as it often becomes necessary to implement modifications across multiple libraries simultaneously, which can be difficult and time-consuming to manage while maintaining consistency when the libraries are stored in separate repositories. Therefore, earlier this year we resolved to overhaul our setup and merge the VM-related libraries into a single <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-vm\">monorepo<!-- --><\/a>. This single repository allows for targeting changes across various libraries within a single pull request and enables execution of all different library test suites concurrently to guarantee consistency. Simultaneously, the advantages of having multiple packages released individually are preserved.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Since transitioning to the monorepo, our development output has surged. \ud83d\ude0b We uncovered numerous enhancements we wished to implement, leading to an unceasing flow of improvements, particularly as one change frequently triggered another, all of which now seemed &#8220;so evident to execute&#8221;. \ud83d\ude1c<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">So we innovated. And innovated. And innovated. Essentially throughout the entire year. This is the primary reason you&#8217;ve heard relatively little from us during the previous months; we were immensely occupied with all these tasks.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Even though we sometimes questioned if we would ever manage to pull everything together again (consult our extensive release notes to grasp what I imply), today I am genuinely proud to finally proclaim: we <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-vm\/pull\/962\">accomplished it<!-- --><\/a>. \ud83d\ude0b A huge thank you to an incredible team for all the wonderful and committed efforts on this. \ud83c\udf89<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">This signifies not one but six significant releases on our core libraries with our virtual machine taking center stage:<!-- --><\/p>\n<p><!-- --><br \/>\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">In this article, we won&#8217;t delve deeply into the technical specifics and will instead provide a high-level overview. For a more exhaustive picture, refer to the release notes linked above; we genuinely prioritized making these concise and comprehensible while providing a solid overview of all pertinent (breaking) changes.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Perhaps just one crucial note: we adopted a <!-- --><strong>new naming convention<!-- --><\/strong> throughout these releases, and you must utilize the new names to access the latest versions. The previous <!-- --><span class=\"chakra-text css-ons8vw\">ethereumjs-vm<\/span> package, for instance, now installs as follows:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-shell\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token\" style=\"color:rgb(130, 170, 255)\">npm<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">install<!-- --><\/span><span> @ethereumjs\/vm\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Ok. What is actually included? Let&#8217;s take a brief glance.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"all-hardforks\">All Hardforks<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><span class=\"chakra-text css-ons8vw\">EthereumJS VM<\/span> <!-- --><span class=\"chakra-text css-ons8vw\">v5<\/span> now accommodates all hardforks dating back to genesis. This marks a significant chapter in the history of JavaScript Ethereum, and we anticipate that this will facilitate numerous potentially thrilling new applications. We have our own, and more on this shortly.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">A VM on a designated HF can be initiated using:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-typescript\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">import<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">VM<!-- --><\/span><span> <!-- --><\/span><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">from<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'@ethereumjs\/vm'<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">import<!-- --><\/span><span> <!-- --><\/span><span class=\"token imports maybe-class-name\">Common<!-- --><\/span><span> <!-- --><\/span><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">from<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'@ethereumjs\/common'<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span>\n<!-- --><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">const<!-- --><\/span><span> common <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">new<!-- --><\/span><span> <!-- --><\/span><span class=\"token maybe-class-name\" style=\"color:rgb(255, 203, 139)\">Common<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">{<!-- --><\/span><span> chain<!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">:<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'mainnet'<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">,<!-- --><\/span><span> hardfork<!-- -->```html\n<\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">:<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'spuriousDragon'<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">}<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">const<!-- --><\/span><span> vm <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">new<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">VM<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">{<!-- --><\/span><span> common <!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">}<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"an-eip-centric-vm\">A VM Focused on EIPs<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Although hardforks are excellent for grouping a series of consensus alterations, a hardfork-centric VM has proven to lack sufficient adaptability for a forward-thinking progression where it remains undecided for an extended period which EIPs will be incorporated into a forthcoming hardfork (the <!-- --><span class=\"chakra-text css-ons8vw\">Berlin<\/span> hardfork currently stands as the most significant illustration of this).<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">With the latest VM update, the internal structural modularization layer has undergone significant revisions. This enables EIPs to be established as native entities within the VM. A VM tailored with a specific collection of EIPs can be initialized as demonstrated below:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-typescript\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">import<!-- --><\/span><span> <!-- --><\/span><span class=\"token imports maybe-class-name\">Common<!-- --><\/span><span> <!-- --><\/span><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">from<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'@ethereumjs\/common'<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">import<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">VM<!-- --><\/span><span> <!-- --><\/span><span class=\"token module\" style=\"color:rgb(127, 219, 202)\">from<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'@ethereumjs\/vm'<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span>\n<!-- --><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">const<!-- --><\/span><span> common <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">new<!-- --><\/span><span> <!-- --><\/span><span class=\"token maybe-class-name\" style=\"color:rgb(255, 203, 139)\">Common<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">{<!-- --><\/span><span> chain<!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">:<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(173, 219, 103)\">'mainnet'<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">,<!-- --><\/span><span> eips<!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">:<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">[<!-- --><\/span><span class=\"token\" style=\"color:rgb(247, 140, 108)\">2537<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">]<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">}<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token\" style=\"color:rgb(127, 219, 202)\">const<!-- --><\/span><span> vm <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">new<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">VM<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">{<!-- --><\/span><span> common <!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">}<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Initially, we are endorsing the following new EIPs (primarily associated with the <!-- --><span class=\"chakra-text css-ons8vw\">Berlin<\/span> hardfork) as part of the VM <!-- --><span class=\"chakra-text css-ons8vw\">v5<\/span> launch:<!-- --><\/p>\n<p><!-- --><br \/>\n<!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"typescript\">TypeScript<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">In this EthereumJS release cycle, we can assertively confirm that we have comprehensively advanced our libraries to a contemporary technology framework. A significant component of this: with the recent updates, we are nearing the completion of our long-anticipated TypeScript transition, with all our primary libraries and internal dependencies now developed in TypeScript.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Just a glimpse at what renders TypeScript so exceptional and contributes to the enhancement of our libraries&#8217; durability and security: TypeScript functions as a superset of JavaScript and informs developers about the data types for every variable and object utilized in the code. Is the variable named <!-- --><span class=\"chakra-text css-ons8vw\">address<\/span> a string or a binary <!-- --><span class=\"chakra-text css-ons8vw\">Buffer<\/span> object? Although JavaScript provides no explicit indications regarding this &#8211; greatly escalating the chances of subsequent developer errors &#8211; TypeScript guarantees clarity in this respect.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Moreover, it becomes significantly more enjoyable to collaborate on our libraries directly or utilize them within third-party projects since, as a developer, you can effortlessly obtain insights like this in the IDE throughout the entire codebase:<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Your development environment, equipped with appropriate TypeScript typing, now understands that a <!-- --><span class=\"chakra-text css-ons8vw\">blockchain<\/span> variable is an <!-- --><span class=\"chakra-text css-ons8vw\">@ethereumjs\/blockchain<\/span> object (please hold back your comments, Go and Rust developers \ud83d\ude05 ) and not just &#8220;something&#8221;.<br \/>\n&#8220;`So our custom code enhances the readability of your (TypeScript) code tremendously by utilizing the new library versions.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"promises\">Promises<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">If you are not particularly familiar with JavaScript, you may bypass this section; however, if you are a JavaScript developer, you will probably breathe a sigh of relief upon hearing this news, so we will at least give it a brief mention:<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Another transition completed, with all library APIs now operating with JavaScript Promises. Thus, there will be no more callbacks throughout our entire stack.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Usage of the library shifts from:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-typescript\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span>blockchain<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span class=\"token method property-access\" style=\"color:rgb(130, 170, 255)\">getBlock<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>blockId<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">,<!-- --><\/span><span> block <!-- --><\/span><span class=\"token arrow\" style=\"color:rgb(127, 219, 202)\">=&gt;<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">{<!-- --><\/span><span>\n<!-- --><\/span><span>  <!-- --><\/span><span class=\"token console\" style=\"color:rgb(255, 203, 139)\">console<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span class=\"token method property-access\" style=\"color:rgb(130, 170, 255)\">log<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>block<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token\" style=\"color:rgb(199, 146, 234)}><!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Example of the new API:<!-- --><\/p>\n<p><!-- --><\/p>\n<div class=\"chakra-stack css-1uyok63\">\n<pre><pre style=\"color:white;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;padding:1em;margin:0.5em 0;overflow:auto;background:#011627\"><code class=\"language-typescript\" style=\"color:#d6deeb;font-family:Consolas, Monaco, &quot;Andale Mono&quot;, &quot;Ubuntu Mono&quot;, monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;font-size:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none\"><span class=\"token\" style=\"color:rgb(127, 219, 202)\">const<!-- --><\/span><span> block <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> <!-- --><\/span><span class=\"token control-flow\" style=\"color:rgb(127, 219, 202)\">await<!-- --><\/span><span> blockchain<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span class=\"token method property-access\" style=\"color:rgb(130, 170, 255)\">getBlock<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>blockId<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><span\/><span class=\"token console\" style=\"color:rgb(255, 203, 139)\">console<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span class=\"token method property-access\" style=\"color:rgb(130, 170, 255)\">log<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>block<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">;<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The slight indentation in the initial example may not seem significant at first glance. However, with multiple old-style nested calls, the code can become increasingly convoluted and unreadable. Just search &#8220;callback hell&#8221; if you are curious about how that can manifest. \ud83d\ude42 Promises facilitate writing code that is substantially more comprehensible.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"library-refactorings\">Library Refactorings<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">It can sometimes be challenging to grasp the necessity of an engine overhaul while the vehicle is still functional, yet it ultimately becomes essential if you aim to safely navigate the next 10,000 miles. Similarly, refactoring in software often mirrors this scenario. \ud83d\ude00 In this series of releases, we have revamped the core of several of our most essential libraries, and our <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-vm\/releases\/tag\/%40ethereumjs%2Fblock%403.0.0\">block<!-- --><\/a>, our <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-vm\/releases\/tag\/%40ethereumjs%2Ftx%403.0.0\">tx<!-- --><\/a>, and partially our <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-vm\/releases\/tag\/%40ethereumjs%2Fblockchain%405.0.0\">blockchain<!-- --><\/a> library has undergone a significant rewrite.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">It should now be considerably easier to interact with these libraries, which should be well-equipped to lay down a firm and secure foundation within the Ethereum JavaScript ecosystem for the upcoming years.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"outlook\">Outlook<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">We hope you appreciate our latest releases. This article merely offers a glimpse of the most critical updates, with comprehensive details available in the release notes linked at the beginning of this post. We welcome your feedback on our <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/discord.gg\/TNwARpR\">Discord<!-- --><\/a> server or our new <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/twitter.com\/EFJavaScript\">@EFJavaScript<!-- --><\/a> Twitter account.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">For us, these releases create sturdy ground for shifting towards a more future-oriented development cycle, and we are enthusiastically anticipating this coming to fruition. With the VM fully equipped with all hard forks, it now becomes feasible to integrate the VM into our revamped <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereumjs\/ethereumjs-client\">EthereumJS Client<!-- --><\/a> project. We won&#8217;t be joining the mainnet with this client anytime soon. However, we will nonetheless be able to contribute toward enhancing client diversity. The new client, in its initial stages, will enable us to participate in development testnets such as <!-- --><span class=\"chakra-text css-ons8vw\">Yolo v2<\/span> (and beyond) and actively aid in detecting and safeguarding against consensus bugs across clients. We will also be able to engage more actively in future protocol research and potentially participate in upcoming research implementations. More information will follow once we have a functional version of our client ready (targeting full sync on <!-- --><span class=\"chakra-text css-ons8vw\">Yolo v2<\/span>), which we anticipate will be early next year.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">For now, we wish everyone a reflective conclusion to the year, paired with an exhilarating beacon chain launch day (week)! \ud83d\ude80<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">The EF JavaScript Team<!-- --><\/p>\n<\/div>\n<p><script async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><br \/>\n<br \/><br \/>\n<br \/><a href=\"https:\/\/blog.ethereum.org\/en\/2020\/11\/26\/ethereumjs-vm-v5-release\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>While everyone gazes in wonder on December 1st, 12pm UTC expecting the Eth 2.0 Beaconchain genesis, the JavaScript team has been diligently crafting our own small genesis release in the background. Although we are still well-versed with the good old Eth 1.0 chain, we are equally thrilled about this. \ud83d\ude00 Some contextual information: the EthereumJS<\/p>\n","protected":false},"author":3,"featured_media":7184,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[800],"class_list":["post-7183","post","type-post","status-publish","format-standard","has-post-thumbnail","category-ethereum","tag-return-a-list-of-comma-separated-tags-from-this-title-ethereumjs-vm-v5-release-ethereum-foundation-blog"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development - WSJ-Crypto<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development - WSJ-Crypto\" \/>\n<meta property=\"og:description\" content=\"While everyone gazes in wonder on December 1st, 12pm UTC expecting the Eth 2.0 Beaconchain genesis, the JavaScript team has been diligently crafting our own small genesis release in the background. Although we are still well-versed with the good old Eth 1.0 chain, we are equally thrilled about this. \ud83d\ude00 Some contextual information: the EthereumJS\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/\" \/>\n<meta property=\"og:site_name\" content=\"WSJ-Crypto\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-10T19:25:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2198\" \/>\n\t<meta property=\"og:image:height\" content=\"850\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"wsjcrypto\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"wsjcrypto\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/\",\"url\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/\",\"name\":\"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development - WSJ-Crypto\",\"isPartOf\":{\"@id\":\"https:\/\/wsj-crypto.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg\",\"datePublished\":\"2025-01-10T19:25:29+00:00\",\"author\":{\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#primaryimage\",\"url\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg\",\"contentUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg\",\"width\":2198,\"height\":850},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wsj-crypto.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wsj-crypto.com\/#website\",\"url\":\"https:\/\/wsj-crypto.com\/\",\"name\":\"WSJ-Crypto\",\"description\":\"Just Another Crypto News Website\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wsj-crypto.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\",\"name\":\"wsjcrypto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g\",\"caption\":\"wsjcrypto\"},\"url\":\"https:\/\/wsj-crypto.com\/index.php\/author\/wsjcrypto\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development - WSJ-Crypto","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/","og_locale":"it_IT","og_type":"article","og_title":"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development - WSJ-Crypto","og_description":"While everyone gazes in wonder on December 1st, 12pm UTC expecting the Eth 2.0 Beaconchain genesis, the JavaScript team has been diligently crafting our own small genesis release in the background. Although we are still well-versed with the good old Eth 1.0 chain, we are equally thrilled about this. \ud83d\ude00 Some contextual information: the EthereumJS","og_url":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/","og_site_name":"WSJ-Crypto","article_published_time":"2025-01-10T19:25:29+00:00","og_image":[{"width":2198,"height":850,"url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg","type":"image\/jpeg"}],"author":"wsjcrypto","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"wsjcrypto","Tempo di lettura stimato":"5 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/","url":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/","name":"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development - WSJ-Crypto","isPartOf":{"@id":"https:\/\/wsj-crypto.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#primaryimage"},"image":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#primaryimage"},"thumbnailUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg","datePublished":"2025-01-10T19:25:29+00:00","author":{"@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7"},"breadcrumb":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#primaryimage","url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg","contentUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2025\/01\/upload_dbe7960618939e067575d87951485537.jpg","width":2198,"height":850},{"@type":"BreadcrumbList","@id":"https:\/\/wsj-crypto.com\/index.php\/2025\/01\/10\/unveiling-ethereumjs-vm-v5-a-game-changer-for-ethereum-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wsj-crypto.com\/"},{"@type":"ListItem","position":2,"name":"Unveiling EthereumJS VM v5: A Game Changer for Ethereum Development"}]},{"@type":"WebSite","@id":"https:\/\/wsj-crypto.com\/#website","url":"https:\/\/wsj-crypto.com\/","name":"WSJ-Crypto","description":"Just Another Crypto News Website","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wsj-crypto.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7","name":"wsjcrypto","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86fe8af82ea089646d6639ca2f87e0243d8688d957bd8e3ec22ec3c457cc16d4?s=96&d=mm&r=g","caption":"wsjcrypto"},"url":"https:\/\/wsj-crypto.com\/index.php\/author\/wsjcrypto\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/7183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/comments?post=7183"}],"version-history":[{"count":2,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/7183\/revisions"}],"predecessor-version":[{"id":7186,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/7183\/revisions\/7186"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media\/7184"}],"wp:attachment":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media?parent=7183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/categories?post=7183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/tags?post=7183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}