{"id":18731,"date":"2026-03-27T18:58:38","date_gmt":"2026-03-27T18:58:38","guid":{"rendered":"https:\/\/cryptoted.net\/index.php\/2026\/03\/27\/c-dev-update-july-edition\/"},"modified":"2026-03-27T18:58:38","modified_gmt":"2026-03-27T18:58:38","slug":"c-dev-update-july-edition","status":"publish","type":"post","link":"https:\/\/cryptoted.net\/index.php\/2026\/03\/27\/c-dev-update-july-edition\/","title":{"rendered":"C++ DEV Update &#8211; July edition"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div id=\"\">\n<p class=\"chakra-text css-gi02ar\">Since the last C++ DEV Update, a lot of things happened in the engine room which were not really visible to the outside. This post wants to give an overview about what we are currently working on.<\/p>\n<p class=\"chakra-text css-gi02ar\">Apart from the features side, Bob has been working on a proposed process for re-licensing of the C++ runtime client code to Apache 2.0, as has been mentioned a few times in the past month or two. Expect more news on that very soon.<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"eth-unit-test-mode\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"eth unit test mode permalink\" href=\"#eth-unit-test-mode\"><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>Eth Unit-Test Mode<\/h2>\n<p>Not only because it is essential for being able to perform our Solidity end-to-end tests via IPC, Dimitry Khoklov and others added some new RPC endpoints to the eth client which allow much more flexibility for testing smart contracts. If you use eth &#8211;test -d \/tmp\/test and connect to the ipc port at \/tmp\/test\/geth.ipc (we recommend using <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/ethereum-console\">ethereum-console<\/a> for that because it already has these features added) you can:<\/p>\n<ul role=\"list\" class=\"css-1ars4k6\">\n<li class=\"css-0\">change the blockchain parameters (e.g. remove proof of work checking and pre-fund certain accounts)<\/li>\n<li class=\"css-0\">mine a certain amount of blocks (at around 30 blocks per second)<\/li>\n<li class=\"css-0\">modify the timestamp of the current block (to e.g. test timeouts in your contracts)<\/li>\n<li class=\"css-0\">revert the blockchain to a given block number<\/li>\n<\/ul>\n<p>This allows us to run our currently 305 Solidity end-to-end tests in around 46 seconds on a moderate computer. Each of these tests include at least two (often more) transactions and the same amount of mined blocks.<\/p>\n<p class=\"chakra-text css-gi02ar\">More information about these features can be found at <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/ethereum-console\"\/><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/ethereum-console\">https:\/\/github.com\/ethereum\/ethereum-console<\/a>.<\/p>\n<p class=\"chakra-text css-gi02ar\">Please note that this is currently only available for the binary that is provided via the <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/launchpad.net\/~ethereum\/+archive\/ubuntu\/ethereum-dev\">ubuntu dev ppa<\/a>.<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"virtual-machine-speedup\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"virtual machine speedup permalink\" href=\"#virtual-machine-speedup\"><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>Virtual Machine Speedup<\/h2>\n<p>Greg Colvin spent the last months speeding up the C++ implementation of the EVM interpreter. He harvested what he calls the low-hanging fruits (he worked for Oracle on the Java interpreter before\u2026). \u00a0\u00a0The most important improvements so far have been replacing 256-bit calculations with 64-bit calculations for gas metering, and making sure that no more metering calculations are done for each VM operation than necessary. \u00a0These and other changes resulted in the following results for Pawe\u0142 Bylica\u2019s nascent <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/test-tools\">benchmark suite<\/a>. The following chart shows the speedup relative to the old cpp ethereum interpreter (cpp int (old)).<\/p>\n<p class=\"chakra-text css-gi02ar\"><a class=\"chakra-link css-vezwxf\" href=\"https:\/\/blog.ethereum.org\/images\/posts\/2016\/07\/relative_speedup.png\"><img decoding=\"async\" alt=\"relative_speedup\" src=\"https:\/\/blog.ethereum.org\/images\/posts\/2016\/07\/relative_speedup.png\" class=\"chakra-image css-hw6q2r\"\/><\/a><\/p>\n<p class=\"chakra-text css-gi02ar\">To be fair, we have to tell what these benchmarks measure. The first benchmark (where the evmjit goes off the scale with a speedup of 472x) does a million empty loops, and shows how slow the EVM\u2019s computed goto is compared to the direct jump of a JIT &#8211; fixing that is next on the stack. \u00a0The second benchmark is a bad random number generator that does a million loops with four multiplications and four additions per loop. \u00a0It is dominated by 256-bit calculations, so a JIT makes less difference. \u00a0(Note that the Go JIT does not compile to native code, but to a faster interpreted representation.)<\/p>\n<p class=\"chakra-text css-gi02ar\"><em class=\"chakra-text css-0\">In practice<\/em>, these speedups will <b>only<\/b> be relevant to \u201cnumber-crunching\u201d contracts because the computation time is otherwise largely dominated by storage access. On the other hand, the \u201crng\u201d benchmark is quite similar to cryptographic operations which pulls such things further into the realm of actual on-chain implementations.<\/p>\n<p class=\"chakra-text css-gi02ar\">Pawe\u0142 Bylica is working on a <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"http:\/\/ethereum.github.io\/evmjit\/docs\/group__EVMC.html\">C-language interface<\/a> between the virtual machine implementation and the client that hosts it, with the goal of being able to plug different VMs into an Ethereum client. This way, geth can also potentially benefit from our changes to the C++ virtual machine and especially from the LLVM just-in-time compiler.<\/p>\n<p class=\"chakra-text css-gi02ar\">Note that these changes are not yet released, but they are part of the <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/launchpad.net\/~ethereum\/+archive\/ubuntu\/ethereum-dev\">ubuntu dev ppa<\/a>.<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"remix\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"remix permalink\" href=\"#remix\"><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>Remix<\/h2>\n<p>Yann Levreau and Liana Husikyan are working on our new EVM debugger remix. We released the alpha version some days ago:<\/p>\n<p class=\"chakra-text css-gi02ar\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"http:\/\/ethereum.github.io\/remix\/\">Application<\/a> &#8211; <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/ethereum\/remix\">Instructions<\/a><\/p>\n<p class=\"chakra-text css-gi02ar\">For now, you can \u201conly\u201d use it to inspect every single step in the execution of any transaction in the blockchain, look at the current stack, memory and storage contents and see the sequence of instructions. The next step will be to also allow source-level debugging where you can see the current position in the source code, step on line or instruction level and see the decoded values of the variables (instead of only the raw hex values).<\/p>\n<p class=\"chakra-text css-gi02ar\">The debugger is for you, the community, and we were delighted to hear that etherscan has already integrated Remix into their <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"http:\/\/etherscan.io\/remix?txhash=0x7a45da60e04d397897f43b254a25bb96ee694ab07f3dd73d7d65e66f524a5a94\">blockchain explorer<\/a>.<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"repository-reorganisation\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"repository reorganisation permalink\" href=\"#repository-reorganisation\"><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>Repository Reorganisation<\/h2>\n<p>Bob Summerwill is dedicated to bringing back C++-Ethereum to its former home, https:\/\/github.com\/ethereum\/cpp-ethereum and thus remove the unnecessary and confusing split into multiple sub-repositories. We are making great progress there, one of the first really visible steps was to decouple the testing infrastructure of Solidity from the virtual machine implementation. The Solidity tests can now be compiled without the virtual machine and they are run by communicating with a specially configured eth process (the one mentioned above) over the regular IPC interface.<\/p>\n<p class=\"chakra-text css-gi02ar\">The next steps here are to disentangle the rest of the code, modify the test automation and continuous integration accordingly and perform the actual move.<\/p>\n<p class=\"chakra-text css-gi02ar\">Together with this step, we unfortunately have to <b>say goodbye to Mix and AlethZero<\/b> (the spirit of mix will live on in the new remix project). The burden they drag along would be too big, because it includes Qt and a tight coupling with Solidity. As already explained in earlier posts, a loose IPC-based coupling of these tools to a small client implementation makes us much more flexible and the community support that comes with a change to JavaScript and Web-based tools like remix and browser-solidity is just overwhelming in comparison.<\/p>\n<h2 class=\"chakra-heading group css-1kpzc4q\" id=\"formal-verification\" data-group=\"true\"><a class=\"chakra-link css-128fqrf\" aria-label=\"formal verification permalink\" href=\"#formal-verification\"><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>Formal Verification<\/h2>\n<p>We are extending the existing formal verification tools integrated with Solidity to cross-contract calls. This would enable automated proofs that e.g. a recursive call attack is not possible against a certain contract. Also, as why3 (the tool we use to do the heavy lifting) was recently ported to <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"http:\/\/lists.gforge.inria.fr\/pipermail\/why3-club\/2016-June\/001350.html\">browsers<\/a>, we can probably expect it to be available right inside browser-solidity and other tools like blockchain explorers!<\/p>\n<p class=\"chakra-text css-gi02ar\">There is a first <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/gist.github.com\/chriseth\/c4a53f201cd17fc3dd5f8ddea2aa3ff9\">proof of concept<\/a> including explanations that shows how automated verification can be used to show that it is impossible to steal money from a solidity contract, even if recursive calls are allowed.<\/p>\n<p class=\"chakra-text css-gi02ar\">This proof of concept will hopefully evolve into a usable tool in the next weeks.<\/p>\n<p>Several people from the community and from inside the Foundation are currently working on tools for Solidity or the EVM in general. These include:<\/p>\n<ol role=\"list\" class=\"css-vgl4zd\">\n<li class=\"css-0\">Solidity AST analysis for warnings by Dave Hoover (@redsquirrel)<\/li>\n<li class=\"css-0\">A Read-Eval-Print version of Solidity by raineorshine: <a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/raineorshine\/solidity-repl\">Solidity-repl<\/a><\/li>\n<li class=\"css-0\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/raineorshine\/solgraph\">Control-flow analysis graph<\/a> also by raineorshine<\/li>\n<li class=\"css-0\"><a target=\"_blank\" rel=\"noopener\" class=\"chakra-link css-vezwxf\" href=\"https:\/\/github.com\/arachnid\/evmdis\">EVM disassembler<\/a> by Nick Johnson<\/li>\n<\/ol>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/blog.ethereum.org\/en\/2016\/07\/08\/c-dev-update-summer-edition\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since the last C++ DEV Update, a lot of things happened in the engine room which were not really visible to the outside. This post wants to give an overview about what we are currently working on. Apart from the features side, Bob has been working on a proposed process for re-licensing of the C++ [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":18498,"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-18731","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\/18731","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=18731"}],"version-history":[{"count":0,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/posts\/18731\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/media\/18498"}],"wp:attachment":[{"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/media?parent=18731"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/categories?post=18731"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/tags?post=18731"},{"taxonomy":"kronos_expire_date","embeddable":true,"href":"https:\/\/cryptoted.net\/index.php\/wp-json\/wp\/v2\/kronos_expire_date?post=18731"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}