{"id":13693541,"url":"https://github.com/microsoft/eEVM","last_synced_at":"2025-05-02T21:32:20.862Z","repository":{"id":37686574,"uuid":"154743215","full_name":"microsoft/eEVM","owner":"microsoft","description":"Enclave ready EVM (eEVM) is an open-source, standalone, embeddable, C++ implementation of the Ethereum Virtual Machine.","archived":true,"fork":false,"pushed_at":"2024-04-13T17:42:56.000Z","size":3672,"stargazers_count":363,"open_issues_count":5,"forks_count":84,"subscribers_count":22,"default_branch":"main","last_synced_at":"2025-04-30T12:46:14.207Z","etag":null,"topics":["blockchain","enclave","ethereum","sgx","solidity"],"latest_commit_sha":null,"homepage":"http://microsoft.com/blockchain","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/microsoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-25T22:03:09.000Z","updated_at":"2025-04-28T17:38:37.000Z","dependencies_parsed_at":"2023-02-09T03:46:03.151Z","dependency_job_id":"51bdfddf-10c5-41df-afbe-5b0683f8177c","html_url":"https://github.com/microsoft/eEVM","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2FeEVM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2FeEVM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2FeEVM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/microsoft%2FeEVM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/microsoft","download_url":"https://codeload.github.com/microsoft/eEVM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252109063,"owners_count":21696185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","enclave","ethereum","sgx","solidity"],"created_at":"2024-08-02T17:01:12.171Z","updated_at":"2025-05-02T21:32:15.854Z","avatar_url":"https://github.com/microsoft.png","language":"C++","funding_links":[],"categories":["C++","EVM"],"sub_categories":["Cairo"],"readme":"# Enclave EVM\n\nEnclave EVM (eEVM) is an open-source, standalone, embeddable, C++ implementation of the Ethereum Virtual Machine. It was originally built to run within a [TEE](https://en.wikipedia.org/wiki/Trusted_execution_environment) (ie, SGX enclave) on top of the [Open Enclave SDK](https://openenclave.io/sdk/), for use with Microsoft's [Confidential Consortium Framework](https://github.com/Microsoft/CCF).\n\n[![eEVM GitHub Actions CI](https://github.com/microsoft/eEVM/actions/workflows/build_and_test.yml/badge.svg)](https://github.com/microsoft/eEVM/actions/workflows/build_and_test.yml)\n\n## Description\n\nThe main entry point is `eevm::Processor::run()`. You will need to provide `eevm::Processor` with an implementation of `eevm::GlobalState` to handle all interactions with permanent state. The source includes `eevm::SimpleGlobalState` as an example backed by `std::map`, but other instances will likely want an implementation which provides permanent storage - perhaps a wrapper to read/write data from the Ethereum blockchain.\n\neEVM supports all opcodes from Ethereum's [Homestead release](http://ethdocs.org/en/latest/introduction/the-homestead-release.html), as listed in [opcode.h](include/opcode.h). Note that this does not include more recent opcodes such as `RETURNDATACOPY` or `RETURNDATASIZE` from [EIP #211](https://github.com/ethereum/EIPs/pull/211).\n\nThe implementation ignores all gas costs - gas is not spent, tracked, or updated during execution, and execution will never throw an outofgas exception. However, it may still be necessary to pass a sensible initial gas value to `eevm::Processor::run()` in case the bytecode calculates or verifies gas budgets itself. It also does not provide the precompiled contracts at addresses 1 to 8.\n\nSo far, the code is not particularly optimized in any dimension. In fact, it is in experimental state.\n\n## Dependencies\n\n* CMake. Minimum version 3.10.\n\n## Build and Test\n\nWe build and test eEVM on Linux and Windows on x86-64, but it should be functional cross-platform.\n\n### Linux\n\nBuild the static library and tests.\n\n```bash\nmkdir build\ncd build\ncmake ..\nmake\n```\n\nIt is also possible to build with Ninja or another generator of choice, and the code will compile with either GCC or Clang (other compilers are untested).\n\nRun the tests.\n\n```bash\ncd build\nctest -VV\n```\n\n### Windows / Visual Studio 2017\n\nOpen the Visual Studio 2017 developer command prompt. Create .sln and .vcxproj files and build the static library and tests as follows.\n\n```cmd\nmkdir build\ncd build\ncmake ..\nmsbuild ALL_BUILD.vcxproj\n```\n\nRun the tests.\n\n```cmd\ncd build\nctest -C debug\n```\n\n### More on tests\n\nTo run the tests outside of CTest you will need to provide the path to the test cases as an environment variable.\n\n```bash\ncd build\nexport TEST_DIR=../3rdparty/test_cases/\n./eevm_tests\n```\n\nThe full test suite contains some longer performance tests which are skipped by default. For full coverage, these can be run by passing the `no-skip` option to the test app - these should complete in minutes, while the default tests should complete in under a second.\n\n```bash\ncd build\n\ntime TEST_DIR=../3rdparty/test_cases/ ./eevm_tests\n...\nreal    0m0.424s\n\ntime TEST_DIR=../3rdparty/test_cases/ ./eevm_tests -ns\n...\nreal    2m11.306s\n```\n\nNote that the test harness skips several test cases. Some of these test features which are not supported (gas exhaustion, huge address space), while others appear malformed (do not match the documented test format).\n\n## Third-party components\n\nWe rely on several open source third-party components, attributed under [THIRD_PARTY_NOTICES](THIRD_PARTY_NOTICES.txt).\n\n### Keccak\n\nThe Keccak sources were created from the reference KeccakCodePackage by running `make FIPS202-opt64.pack`. Unfortunately, we cannot use the probably more optimized ASM versions for now, because they are neither PIC nor Visual Studio compatible.\n\n## Contributing\n\nThis project welcomes contributions and suggestions. Most contributions require you to\nagree to a Contributor License Agreement (CLA) declaring that you have the right to,\nand actually do, grant us the rights to use your contribution. For details, visit\nhttps://cla.microsoft.com.\n\nWhen you submit a pull request, a CLA-bot will automatically determine whether you need\nto provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the\ninstructions provided by the bot. You will only need to do this once across all repositories using our CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)\nor contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrosoft%2FeEVM","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmicrosoft%2FeEVM","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmicrosoft%2FeEVM/lists"}