{"id":5724,"date":"2024-12-05T11:35:55","date_gmt":"2024-12-05T10:35:55","guid":{"rendered":"https:\/\/wsj-crypto.com\/?p=5724"},"modified":"2024-12-05T11:35:55","modified_gmt":"2024-12-05T10:35:55","slug":"unveiling-the-ethereum-execution-layer-a-comprehensive-guide","status":"publish","type":"post","link":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/","title":{"rendered":"Unveiling the Ethereum Execution Layer: A Comprehensive Guide"},"content":{"rendered":"<p><\/p>\n<div id=\"\">\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"tldr\"><abbr title=\"too long; didn't read\">tl;dr<!-- --><\/abbr><\/h2>\n<p><!-- --><\/p>\n<ul role=\"list\" class=\"css-1onhfjo\">\n<li class=\"css-cvpopp\">EELS is a reference implementation of an execution layer in Python.<!-- --><\/li>\n<li class=\"css-cvpopp\">It is aligned with the mainnet.<!-- --><\/li>\n<li class=\"css-cvpopp\">It fulfills tests and successfully passes the existing ones.<!-- --><\/li>\n<li class=\"css-cvpopp\">Below is an example of an EIP implemented in EELS.<!-- --><\/li>\n<\/ul>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"introduction\">Introduction<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">After over a year in development, we are excited to publicly present the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/execution-specs\">Ethereum Execution Layer Specification<!-- --><\/a> (affectionately referred to as EELS.) EELS serves as a reference implementation in Python for the essential elements of an Ethereum execution client, emphasizing clarity and readability. As a spiritual successor to the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/ethereum.github.io\/yellowpaper\/paper.pdf\">Yellow Paper<!-- --><\/a>, it is designed to be more programmer-friendly and up-to-date with post-merge forks; EELS can fill and execute state tests, follow mainnet<!-- --><sup><a class=\"chakra-link css-ug8vf0\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#user-content-fn-1\">1<!-- --><\/a><\/sup>, and serves as an excellent environment to prototype new EIPs.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">EELS supplies comprehensive snapshots of the protocol at each fork\u2014including forthcoming ones\u2014making it significantly easier to comprehend than <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/\">EIPs<!-- --><\/a> (which merely propose alterations) and production clients (which frequently amalgamate several forks in the same codebase.)<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"history\">History<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Initiated in 2021, as an initiative of ConsenSys&#8217; Quilt team together with the Ethereum Foundation, the <!-- --><span class=\"chakra-text css-ons8vw\">eth1.0-spec<\/span> (previously known) emerged from the overwhelming challenge of interpreting the esoteric notation of the Yellow Paper (<!-- --><a class=\"chakra-link css-ug8vf0\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#fig1\">Figure 1<!-- --><\/a>) to grasp the precise functionality of an EVM instruction.<!-- --><\/p>\n<p><!-- --><\/p>\n<figure id=\"fig1\">\n    <!-- --><br \/>\n    <!-- --><figcaption><strong>Figure 1.<!-- --><\/strong> mystical symbols characterizing the foundation of the blockchain paradigm<!-- --><\/figcaption><!-- --><\/figure>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Leveraging the success of the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/consensus-specs\">Consensus Layer Specification<!-- --><\/a>, we aimed to develop a comparable executable specification for the execution layer.<!-- --><\/p>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"present\">Present<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Currently, EELS can be accessed as a <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/execution-specs\">standard Python repository<!-- --><\/a> as well as <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/ethereum.github.io\/execution-specs\/\">rendered documentation<!-- --><\/a>. Although it still has a few rough spots and lacks extensive annotations or English clarifications of various components, improvements will be made over time.<!-- --><\/p>\n<p><!-- --><\/p>\n<h3 class=\"chakra-heading css-145upk7\" id=\"its-just-python\">It\u2019s merely Python<!-- --><\/h3>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">A side-by-side comparison of the Yellow Paper and the corresponding code from EELS is likely to illustrate why EELS serves as a beneficial complement:<!-- --><\/p>\n<p><!-- --><\/p>\n<figure id=\"fig2\">\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><img decoding=\"async\" alt=\"Less-than (LT) opcode\" src=\"https:\/\/storage.googleapis.com\/ethereum-hackmd\/upload_7a45bc80a3438c232dfbf64460c44376.png\" class=\"chakra-image css-hw6q2r\"\/><\/p>\n<p><!-- --><figcaption><strong>Figure 2.<!-- --><\/strong> Less-than (<!-- --><span class=\"chakra-text css-ons8vw\">LT<\/span>) EVM instruction from Yellow Paper<!-- --><\/figcaption><!-- --><\/figure>\n<p><!-- --><\/p>\n<figure id=\"fig3\">\n<!-- --><\/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-python\" 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)\">def<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(130, 170, 255)\">less_than<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span> Evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">-<!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">&gt;<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(255, 88, 116)\">None<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">:<!-- --><\/span><span>\n<!-- --><\/span><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># STACK<!-- --><\/span><span>\n<!-- --><\/span><span>    left <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> pop<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span>stack<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span>\n<!-- --><\/span><span>    right <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> pop<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span>stack<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span>\n<!-- --><\/span>\n<!-- --><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># GAS<!-- --><\/span><span>\n<!-- --><\/span><span>    charge_gas<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">,<!-- --><\/span><span> GAS_VERY_LOW<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span>\n<!-- --><\/span>\n<!-- --><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># OPERATION<!-- --><\/span><span>\n<!-- --><\/span><span>    result <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">=<!-- --><\/span><span> U256<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>left <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\"\/><span> right<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span>\n<!-- --><\/span>\n<!-- --><span>    insert<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">(<!-- --><\/span><span>evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span>stack<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">,<!-- --><\/span><span> outcome<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">)<!-- --><\/span><span>\n<!-- --><\/span>\n<!-- --><span>    <!-- --><\/span><span class=\"token\" style=\"color:rgb(99, 119, 119);font-style:italic\"># PROGRAM COUNTER<!-- --><\/span><span>\n<!-- --><\/span><span>    evm<!-- --><\/span><span class=\"token\" style=\"color:rgb(199, 146, 234)\">.<!-- --><\/span><span>pc <!-- --><\/span><span class=\"token\" style=\"color:rgb(127, 219, 202)\">+=<!-- --><\/span><span> <!-- --><\/span><span class=\"token\" style=\"color:rgb(247, 140, 108)\">1<!-- --><\/span><span>\n<!-- --><\/span><\/code><\/pre>\n<\/div>\n<p><!-- --><figcaption><strong>Figure 3.<!-- --><\/strong> Less-than (<!-- --><span class=\"chakra-text css-ons8vw\">LT<\/span>) EVM directive from EELS<!-- --><\/figcaption><!-- --><\/figure>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Although <!-- --><a class=\"chakra-link css-ug8vf0\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#fig2\">Figure 2<!-- --><\/a> may be understandable to scholars, <!-- --><a class=\"chakra-link css-ug8vf0\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#fig3\">Figure 3<!-- --><\/a> is undoubtedly more intuitive for developers.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">If you&#8217;re interested, here&#8217;s a video <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/www.youtube.com\/watch?v=QIcw_DGSy3s\">guide on incorporating a basic EVM instruction<!-- --><\/a>.<!-- --><\/p>\n<p><!-- --><\/p>\n<h3 class=\"chakra-heading css-145upk7\" id=\"writing-tests\">Creating Tests<!-- --><\/h3>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">It&#8217;s worth reiterating: EELS is simply standard Python. It can be tested akin to any other Python package! Alongside the complete <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/tests\"><span class=\"chakra-text css-ons8vw\">ethereum\/tests<\/span><\/a> collection, we also offer an array of <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/docs.pytest.org\/\">pytest<!-- --><\/a> tests.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">With some assistance from <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/execution-spec-tests\"><span class=\"chakra-text css-ons8vw\">execution-spec-tests<\/span><\/a>, any tests crafted for EELS can also be utilized with production clients!<!-- --><sup><a class=\"chakra-link css-ug8vf0\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#user-content-fn-2\">2<!-- --><\/a><\/sup><\/p>\n<p><!-- --><\/p>\n<h3 class=\"chakra-heading css-145upk7\" id=\"showing-differences\">Displaying Differences<!-- --><\/h3>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Having snapshots at each fork is beneficial for a smart contract developer examining the particulars of how an EVM instruction operates, but it isn&#8217;t very helpful for the developers of clients themselves. For them, EELS can reveal the discrepancies among forks:<!-- --><\/p>\n<p><!-- --><\/p>\n<figure id=\"fig4\">\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><img decoding=\"async\" alt=\"Screenshot of the variations in the apply_fork function between homestead and the DAO fork\" src=\"https:\/\/storage.googleapis.com\/ethereum-hackmd\/upload_156402252698322ea52892e0a7352ac1.png\" class=\"chakra-image css-hw6q2r\"\/><\/p>\n<p><!-- --><figcaption><strong>Figure 4.<!-- --><\/strong> a distinction between homestead and the DAO fork<!-- --><\/figcaption><!-- --><\/figure>\n<p><!-- --><\/p>\n<h3 class=\"chakra-heading css-145upk7\" id=\"an-example-eip\">A Sample EIP<!-- --><\/h3>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-6780\">EIP-6780<!-- --><\/a> is the inaugural EIP to receive <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/execution-specs\/pull\/819\">an EELS implementation<!-- --><\/a> provided by the creator, <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/gballet\">Guillaume Ballet<!-- --><\/a>! Let&#8217;s examine it.<!-- --><\/p>\n<p><!-- --><\/p>\n<figure id=\"fig5\">\n<!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\"><img decoding=\"async\" alt=\"Screenshot of EIP-6780's specification segment\" src=\"https:\/\/storage.googleapis.com\/ethereum-hackmd\/upload_a852d191eb6c78e036d01c7efbed1ac1.png\" class=\"chakra-image css-hw6q2r\"\/><\/p>\n<p><!-- --><figcaption><strong>Figure 5.<!-- --><\/strong> EIP-6780&#8217;s specification section<!-- --><\/figcaption><!-- --><\/figure>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Initially, we introduce a <!-- --><span class=\"chakra-text css-ons8vw\">created_contracts<\/span> variable to the EVM with transaction-level visibility:<!-- --><\/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-diff\" 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 unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">@dataclass\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">class Environment:\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    caller: Address\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    block_hashes: List[Hash32]\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    origin: Address\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    coinbase: Address\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    number: Uint\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    base_fee_per_gas: Uint\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    gas_limit: Uint\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    gas_price: Uint\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    time: U256\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    prev_randao: Bytes32\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    state: State\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token unchanged prefix\"> <!-- --><\/span><span class=\"token unchanged line\">    chain_id: U64\n<!-- --><\/span><span class=\"token unchanged line\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">    created_contracts: Set[Address]\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Secondly, we indicate which contracts were formed during each transaction:<!-- --><\/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-diff\" 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 inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">    evm.env.created_contracts.add(contract_address)\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">In conclusion, we alter <!-- --><span class=\"chakra-text css-ons8vw\">selfdestruct<\/span> so it solely operates on contracts recorded in <!-- --><span class=\"chakra-text css-ons8vw\">created_contracts<\/span>:<!-- --><\/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-diff\" 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 deleted-sign prefix\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\">-<!-- --><\/span><span class=\"token deleted-sign line\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\">    # register account for deletion\n<!-- --><\/span><span class=\"token deleted-sign line\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\"\/><span class=\"token deleted-sign prefix\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\">-<!-- --><\/span><span class=\"token deleted-sign line\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\">    evm.accounts_to_delete.add(originator)\n<!-- --><\/span><span class=\"token deleted-sign line\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\"\/><span class=\"token deleted-sign prefix\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\">-<!-- --><\/span><span class=\"token deleted-sign line\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\">\n<!-- --><\/span><span class=\"token deleted-sign line\" style=\"color:rgba(239, 83, 80, 0.56);font-style:italic\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">    # Only proceed if the contract has been created in the same tx\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">    if originator in evm.env.created_contracts:\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">        # register account for deletion\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">        evm.accounts_to_delete.add(originator)\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><span class=\"token inserted-sign prefix\" style=\"color:rgb(173, 219, 103);font-style:italic\">+<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\">\n<!-- --><\/span><span class=\"token inserted-sign line\" style=\"color:rgb(173, 219, 103);font-style:italic\"\/><\/code><\/pre>\n<\/div>\n<p><!-- --><\/p>\n<h2 class=\"chakra-heading css-1w54o5f\" id=\"future\">Future<!-- --><\/h2>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">Our goal is for EELS to become the standard method for defining Core EIPs, the primary resource for EIP authors to prototype their proposals, and the ultimate guide on how Ethereum functions.<!-- --><\/p>\n<p><!-- --><\/p>\n<p class=\"chakra-text css-gi02ar\">If you are keen on contributing or prototyping your EIP, join us in the <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/discord.gg\/3nBCwVjX6d\">#specifications<!-- --><\/a> channel or take an issue from our <!-- --><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-ug8vf0\" href=\"https:\/\/github.com\/ethereum\/execution-specs\">repository<!-- --><\/a>.<!-- --><\/p>\n<p><!-- --><\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/blog.ethereum.org\/en\/2023\/08\/29\/eel-spec\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>tl;dr EELS is a reference implementation of an execution layer in Python. It is aligned with the mainnet. It fulfills tests and successfully passes the existing ones. Below is an example of an EIP implemented in EELS. Introduction After over a year in development, we are excited to publicly present the Ethereum Execution Layer Specification<\/p>\n","protected":false},"author":3,"featured_media":5725,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[299],"class_list":["post-5724","post","type-post","status-publish","format-standard","has-post-thumbnail","category-ethereum","tag-return-a-list-of-comma-separated-tags-from-this-title-ethereum-execution-layer-specification-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 the Ethereum Execution Layer: A Comprehensive Guide - 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\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Unveiling the Ethereum Execution Layer: A Comprehensive Guide - WSJ-Crypto\" \/>\n<meta property=\"og:description\" content=\"tl;dr EELS is a reference implementation of an execution layer in Python. It is aligned with the mainnet. It fulfills tests and successfully passes the existing ones. Below is an example of an EIP implemented in EELS. Introduction After over a year in development, we are excited to publicly present the Ethereum Execution Layer Specification\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"WSJ-Crypto\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-05T10:35:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2040\" \/>\n\t<meta property=\"og:image:height\" content=\"1007\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"3 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\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/\",\"url\":\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/\",\"name\":\"Unveiling the Ethereum Execution Layer: A Comprehensive Guide - WSJ-Crypto\",\"isPartOf\":{\"@id\":\"https:\/\/wsj-crypto.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png\",\"datePublished\":\"2024-12-05T10:35:55+00:00\",\"author\":{\"@id\":\"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#primaryimage\",\"url\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png\",\"contentUrl\":\"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png\",\"width\":2040,\"height\":1007},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wsj-crypto.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unveiling the Ethereum Execution Layer: A Comprehensive Guide\"}]},{\"@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 the Ethereum Execution Layer: A Comprehensive Guide - 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\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/","og_locale":"it_IT","og_type":"article","og_title":"Unveiling the Ethereum Execution Layer: A Comprehensive Guide - WSJ-Crypto","og_description":"tl;dr EELS is a reference implementation of an execution layer in Python. It is aligned with the mainnet. It fulfills tests and successfully passes the existing ones. Below is an example of an EIP implemented in EELS. Introduction After over a year in development, we are excited to publicly present the Ethereum Execution Layer Specification","og_url":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/","og_site_name":"WSJ-Crypto","article_published_time":"2024-12-05T10:35:55+00:00","og_image":[{"width":2040,"height":1007,"url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png","type":"image\/png"}],"author":"wsjcrypto","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"wsjcrypto","Tempo di lettura stimato":"3 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/","url":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/","name":"Unveiling the Ethereum Execution Layer: A Comprehensive Guide - WSJ-Crypto","isPartOf":{"@id":"https:\/\/wsj-crypto.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#primaryimage"},"image":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png","datePublished":"2024-12-05T10:35:55+00:00","author":{"@id":"https:\/\/wsj-crypto.com\/#\/schema\/person\/88a93723b30416db1a352d5a0096c4a7"},"breadcrumb":{"@id":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#primaryimage","url":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png","contentUrl":"https:\/\/wsj-crypto.com\/wp-content\/uploads\/2024\/12\/upload_df8b1c7d4bb7b7fafb10ce70cefced02.png","width":2040,"height":1007},{"@type":"BreadcrumbList","@id":"https:\/\/wsj-crypto.com\/index.php\/2024\/12\/05\/unveiling-the-ethereum-execution-layer-a-comprehensive-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wsj-crypto.com\/"},{"@type":"ListItem","position":2,"name":"Unveiling the Ethereum Execution Layer: A Comprehensive Guide"}]},{"@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\/5724","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=5724"}],"version-history":[{"count":2,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/5724\/revisions"}],"predecessor-version":[{"id":5727,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/posts\/5724\/revisions\/5727"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media\/5725"}],"wp:attachment":[{"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/media?parent=5724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/categories?post=5724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wsj-crypto.com\/index.php\/wp-json\/wp\/v2\/tags?post=5724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}