{"id":17789,"date":"2026-03-01T06:14:35","date_gmt":"2026-03-01T06:14:35","guid":{"rendered":"https:\/\/cryptoted.net\/index.php\/2026\/03\/01\/ethereum-execution-layer-specification-ethereum-foundation-blog\/"},"modified":"2026-03-01T06:14:35","modified_gmt":"2026-03-01T06:14:35","slug":"ethereum-execution-layer-specification-ethereum-foundation-blog","status":"publish","type":"post","link":"https:\/\/cryptoted.net\/index.php\/2026\/03\/01\/ethereum-execution-layer-specification-ethereum-foundation-blog\/","title":{"rendered":"Ethereum Execution Layer Specification | Ethereum Foundation Blog"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"\">\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"tldr\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"tldr permalink\" href=\"#tldr\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a><abbr title=\"too long; didn't read\">tl;dr<\/abbr><\/h2>\n<ul role=\"list\" class=\"css-1ars4k6\">\n<li class=\"css-0\">EELS is an execution layer reference implementation in Python.<\/li>\n<li class=\"css-0\">It&#8217;s up to date with mainnet.<\/li>\n<li class=\"css-0\">It fills tests, and passes existing ones.<\/li>\n<li class=\"css-0\">There&#8217;s an example of an EIP implemented in EELS below.<\/li>\n<\/ul>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"introduction\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"introduction permalink\" href=\"#introduction\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>Introduction<\/h2>\n<p class=\"chakra-text css-gi02ar\">After more than a year in development, we&#8217;re pleased to publicly introduce the <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/execution-specs\">Ethereum Execution Layer Specification<\/a> (affectionately known as EELS.) EELS is a Python reference implementation of the core components of an Ethereum execution client focused on readability and clarity. Intended as a spiritual successor to the <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/ethereum.github.io\/yellowpaper\/paper.pdf\">Yellow Paper<\/a> that&#8217;s 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-vezwxf\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#user-content-fn-1\">1<\/a><\/sup>, and is a great place to prototype new EIPs.<\/p>\n<p class=\"chakra-text css-gi02ar\">EELS provides complete snapshots of the protocol at each fork\u2014including upcoming ones\u2014making it much easier to follow than <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/eips.ethereum.org\/\">EIPs<\/a> (which only propose changes) and production clients (which often mix multiple forks in the same codepath.)<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"history\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"history permalink\" href=\"#history\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>History<\/h2>\n<p class=\"chakra-text css-gi02ar\">Beginning in 2021, as a project of ConsenSys&#8217; Quilt team and the Ethereum Foundation, the <span class=\"chakra-text css-ons8vw\">eth1.0-spec<\/span> (as it was known then) was inspired by the sheer frustration of having to decipher the cryptic notation of the Yellow Paper (<a class=\"chakra-link css-vezwxf\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#fig1\">Figure 1<\/a>) to understand the specific behavior of an EVM instruction.<\/p>\n<figure id=\"fig1\">\n    <img decoding=\"async\" alt=\"Screenshot of formulas 2, 3, and 4 from the Yellow Paper\" src=\"https:\/\/storage.googleapis.com\/ethereum-hackmd\/upload_ca282a54fcac0d1438a9611dbcb5051d.png\" class=\"chakra-image css-hw6q2r\"\/><figcaption><strong>Figure 1.<\/strong> arcane runes describing the basis of the blockchain paradigm<\/figcaption><\/figure>\n<p class=\"chakra-text css-gi02ar\">Drawing on the successful <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/consensus-specs\">Consensus Layer Specification<\/a>, we set out to create a similar executable specification for the execution layer.<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"present\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"present permalink\" href=\"#present\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>Present<\/h2>\n<p class=\"chakra-text css-gi02ar\">Today, EELS is consumable as a <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/execution-specs\">traditional Python repository<\/a> and as <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/ethereum.github.io\/execution-specs\/\">rendered documentation<\/a>. It&#8217;s still a bit rough around the edges, and doesn&#8217;t provide much in the way of annotations or English explanations for what various pieces do, but those will come with time.<\/p>\n<h3 class=\"chakra-heading group css-xuzltg\" id=\"its-just-python\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"its just python permalink\" href=\"#its-just-python\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>It&#8217;s just Python<\/h3>\n<p class=\"chakra-text css-gi02ar\">Hopefully a side-by-side comparison of the Yellow Paper and the equivalent code from EELS can show why EELS is a valuable complement to it:<\/p>\n<figure id=\"fig2\">\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><figcaption><strong>Figure 2.<\/strong> Less-than (<span class=\"chakra-text css-ons8vw\">LT<\/span>) EVM instruction from Yellow Paper<\/figcaption><\/figure>\n<figure id=\"fig3\">\n<div class=\"chakra-stack css-1jx0in4\">\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>    push<\/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> result<\/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><\/span><\/code><\/pre>\n<\/div><figcaption><strong>Figure 3.<\/strong> Less-than (<span class=\"chakra-text css-ons8vw\">LT<\/span>) EVM instruction from EELS<\/figcaption><\/figure>\n<p class=\"chakra-text css-gi02ar\">While <a class=\"chakra-link css-vezwxf\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#fig2\">Figure 2<\/a> might be digestible to academics, <a class=\"chakra-link css-vezwxf\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#fig3\">Figure 3<\/a> is indisputably more natural to programmers.<\/p>\n<p class=\"chakra-text css-gi02ar\">Here&#8217;s a video <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/www.youtube.com\/watch?v=QIcw_DGSy3s\">walk-through of adding a simple EVM instruction<\/a> if that&#8217;s your kind of thing.<\/p>\n<h3 class=\"chakra-heading group css-xuzltg\" id=\"writing-tests\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"writing tests permalink\" href=\"#writing-tests\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>Writing Tests<\/h3>\n<p class=\"chakra-text css-gi02ar\">It bears repeating: EELS is just regular Python. It can be tested like any other Python library! In addition to the entire <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/tests\"><span class=\"chakra-text css-ons8vw\">ethereum\/tests<\/span><\/a> suite, we also have a selection of <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/docs.pytest.org\/\">pytest<\/a> tests.<\/p>\n<p class=\"chakra-text css-gi02ar\">With a little help from <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/execution-spec-tests\"><span class=\"chakra-text css-ons8vw\">execution-spec-tests<\/span><\/a>, any tests written for EELS can also be applied to production clients!<sup><a class=\"chakra-link css-vezwxf\" href=\"http:\/\/blog.ethereum.org\/2023\/08\/29\/eel-spec#user-content-fn-2\">2<\/a><\/sup><\/p>\n<h3 class=\"chakra-heading group css-xuzltg\" id=\"showing-differences\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"showing differences permalink\" href=\"#showing-differences\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>Showing Differences<\/h3>\n<p class=\"chakra-text css-gi02ar\">Having snapshots at each fork is great for a smart contract developer popping in to see the specifics of how an EVM instruction works, but isn&#8217;t very helpful for client developers themselves. For them, EELS can display the differences between forks:<\/p>\n<figure id=\"fig4\">\n<p class=\"chakra-text css-gi02ar\"><img decoding=\"async\" alt=\"Screenshot of the differences 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><figcaption><strong>Figure 4.<\/strong> one difference between homestead and the DAO fork<\/figcaption><\/figure>\n<h3 class=\"chakra-heading group css-xuzltg\" id=\"an-example-eip\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"an example eip permalink\" href=\"#an-example-eip\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>An Example EIP<\/h3>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-6780\">EIP-6780<\/a> is the first EIP to get <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/execution-specs\/pull\/819\">an EELS implementation<\/a> provided by the author, <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/gballet\">Guillaume Ballet<\/a>! Let&#8217;s take a look.<\/p>\n<figure id=\"fig5\">\n<p class=\"chakra-text css-gi02ar\"><img decoding=\"async\" alt=\"Screenshot of EIP-6780's specification section\" src=\"https:\/\/storage.googleapis.com\/ethereum-hackmd\/upload_a852d191eb6c78e036d01c7efbed1ac1.png\" class=\"chakra-image css-hw6q2r\"\/><\/p><figcaption><strong>Figure 5.<\/strong> EIP-6768&#8217;s specification section<\/figcaption><\/figure>\n<p class=\"chakra-text css-gi02ar\">First, we introduce a <span class=\"chakra-text css-ons8vw\">created_contracts<\/span> variable to the EVM with transaction-level scope:<\/p>\n<div class=\"chakra-stack css-1jx0in4\">\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 class=\"chakra-text css-gi02ar\">Second, we note which contracts were created in each transaction:<\/p>\n<div class=\"chakra-stack css-1jx0in4\">\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 class=\"chakra-text css-gi02ar\">Finally, we modify <span class=\"chakra-text css-ons8vw\">selfdestruct<\/span> so it only works for contracts noted in <span class=\"chakra-text css-ons8vw\">created_contracts<\/span>:<\/p>\n<div class=\"chakra-stack css-1jx0in4\">\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 continue 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<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"future\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"future permalink\" href=\"#future\"><svg viewbox=\"0 0 24 24\" focusable=\"false\" class=\"chakra-icon css-173jpr1\"><g fill=\"currentColor\"><path d=\"M10.458,18.374,7.721,21.11a2.853,2.853,0,0,1-3.942,0l-.892-.891a2.787,2.787,0,0,1,0-3.941l5.8-5.8a2.789,2.789,0,0,1,3.942,0l.893.892A1,1,0,0,0,14.94,9.952l-.893-.892a4.791,4.791,0,0,0-6.771,0l-5.8,5.8a4.787,4.787,0,0,0,0,6.77l.892.891a4.785,4.785,0,0,0,6.771,0l2.736-2.735a1,1,0,1,0-1.414-1.415Z\"\/><path d=\"M22.526,2.363l-.892-.892a4.8,4.8,0,0,0-6.77,0l-2.905,2.9a1,1,0,0,0,1.414,1.414l2.9-2.9a2.79,2.79,0,0,1,3.941,0l.893.893a2.786,2.786,0,0,1,0,3.942l-5.8,5.8a2.769,2.769,0,0,1-1.971.817h0a2.766,2.766,0,0,1-1.969-.816,1,1,0,1,0-1.415,1.412,4.751,4.751,0,0,0,3.384,1.4h0a4.752,4.752,0,0,0,3.385-1.4l5.8-5.8a4.786,4.786,0,0,0,0-6.771Z\"\/><\/g><\/svg><\/a>Future<\/h2>\n<p class=\"chakra-text css-gi02ar\">We want EELS to become the default way to specify Core EIPs, the first place EIP authors go to prototype their proposals, and the best possible reference for how Ethereum works.<\/p>\n<p class=\"chakra-text css-gi02ar\">If you&#8217;re interested in contributing or prototyping your EIP, join us on the <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/discord.gg\/3nBCwVjX6d\">#specifications<\/a> channel or grab an issue from our <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/execution-specs\">repository<\/a>.<\/p>\n<\/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 an execution layer reference implementation in Python. It&#8217;s up to date with mainnet. It fills tests, and passes existing ones. There&#8217;s an example of an EIP implemented in EELS below. Introduction After more than a year in development, we&#8217;re pleased to publicly introduce the Ethereum Execution Layer Specification (affectionately known as EELS.) [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":17790,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"tdm_status":"","tdm_grid_status":"","footnotes":""},"categories":[24],"tags":[],"kronos_expire_date":[],"class_list":["post-17789","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ethereum"],"_links":{"self":[{"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/posts\/17789","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/comments?post=17789"}],"version-history":[{"count":0,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/posts\/17789\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/media\/17790"}],"wp:attachment":[{"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/media?parent=17789"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/categories?post=17789"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/tags?post=17789"},{"taxonomy":"kronos_expire_date","embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/kronos_expire_date?post=17789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}