All Projects → microsoft → Eevm

microsoft / Eevm

Licence: mit
Enclave ready EVM (eEVM) is an open-source, standalone, embeddable, C++ implementation of the Ethereum Virtual Machine.

Programming Languages

solidity
1140 projects

Projects that are alternatives of or similar to Eevm

Lemon.email Dapp
Lemon dApp is a world's first encrypted & decentralized e-mail service.
Stars: ✭ 155 (-11.43%)
Mutual labels:  blockchain, ethereum
Unstoppable Wallet Android
A secure and decentralized Bitcoin and other cryptocurrency wallet for Android phones. Supports Bitcoin, Ethereum, EOS, Binance Chain, Bitcoin Cash, DASH, ...
Stars: ✭ 165 (-5.71%)
Mutual labels:  blockchain, ethereum
Ico Contracts
Ethereum smart contracts that have been used during successful ICOs
Stars: ✭ 160 (-8.57%)
Mutual labels:  blockchain, ethereum
Study Blockchain Referrence
区块链学习路上的一些资料作为参考
Stars: ✭ 172 (-1.71%)
Mutual labels:  blockchain, ethereum
Eth Vue
Featured in Awesome Vue [https://github.com/vuejs/awesome-vue], a curated list maintained by vuejs of awesome things related to the Vue.js framework, and Awesome List [https://awesomelists.net/150-Vue.js/3863-Open+Source/18749-DOkwufulueze-eth-vue], this Truffle Box provides everything you need to quickly build Ethereum dApps that have authentication features with vue, including configuration for easy deployment to the Ropsten Network. It's also Gravatar-enabled. Connecting to a running Ganache blockchain network from Truffle is also possible -- for fast development and testing purposes. Built on Truffle 5 and Vue 3, eth-vue uses vuex for state management, vuex-persist for local storage of app state, and vue-router for routing. Authentication functionalities are handled by Smart Contracts running on the Ethereum blockchain.
Stars: ✭ 171 (-2.29%)
Mutual labels:  blockchain, ethereum
Defi Score
DeFi Score: An open framework for evaluating DeFi protocols
Stars: ✭ 152 (-13.14%)
Mutual labels:  blockchain, ethereum
Evmone
Fast Ethereum Virtual Machine implementation
Stars: ✭ 162 (-7.43%)
Mutual labels:  blockchain, ethereum
Ebtc
eBitcoin (eBTC) is an ERC20 token. Its primary utility is to provide an easy & fast payment solution. Its edge over other tokens is that it is capable of sending up to 255 payments in a single transaction.
Stars: ✭ 149 (-14.86%)
Mutual labels:  blockchain, ethereum
Cicero
Accord Project Smart Templates Implementation
Stars: ✭ 166 (-5.14%)
Mutual labels:  blockchain, ethereum
Mastering Ethereum
分散アプリケーションプラットフォーム「ethereum」の入門書
Stars: ✭ 165 (-5.71%)
Mutual labels:  blockchain, ethereum
Chainlink Ruby
Easily connect your applications to blockchains
Stars: ✭ 152 (-13.14%)
Mutual labels:  blockchain, ethereum
Angular Truffle Starter Dapp
Angular CLI + Truffle Starter Dapp; write, compile & deploy smart contracts on Ethereum blockchains
Stars: ✭ 174 (-0.57%)
Mutual labels:  blockchain, ethereum
Erc20 Rest Service
ERC-20 token standard RESTful service using Spring Boot and web3j
Stars: ✭ 150 (-14.29%)
Mutual labels:  blockchain, ethereum
Interledger Rs
An easy-to-use, high-performance Interledger implementation written in Rust
Stars: ✭ 155 (-11.43%)
Mutual labels:  blockchain, ethereum
Awesome Token Sale
Curated list of token sale resources / ICO resources
Stars: ✭ 149 (-14.86%)
Mutual labels:  blockchain, ethereum
Curso blockchain
Indtroductory course to cryptocurrencies and applications of Blockchain technologies.
Stars: ✭ 161 (-8%)
Mutual labels:  blockchain, ethereum
Sablier
The protocol for real-time finance on the Ethereum blockchain
Stars: ✭ 147 (-16%)
Mutual labels:  blockchain, ethereum
Raiden
Raiden Network
Stars: ✭ 1,825 (+942.86%)
Mutual labels:  blockchain, ethereum
Toshi Android Client
Android client for Toshi
Stars: ✭ 167 (-4.57%)
Mutual labels:  blockchain, ethereum
Smart Contract Watch
A tool to monitor a number of smart contracts and transactions
Stars: ✭ 168 (-4%)
Mutual labels:  blockchain, ethereum

Enclave EVM

Enclave EVM (eEVM) is an open-source, standalone, embeddable, C++ implementation of the Ethereum Virtual Machine. It was originally built to run within a TEE (ie, SGX enclave) on top of the Open Enclave SDK, for use with Microsoft's Confidential Consortium Framework.

CircleCI

Description

The 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.

eEVM supports all opcodes from Ethereum's Homestead release, as listed in opcode.h. Note that this does not include more recent opcodes such as RETURNDATACOPY or RETURNDATASIZE from EIP #211.

The 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.

So far, the code is not particularly optimized in any dimension. In fact, it is in experimental state.

Dependencies

  • CMake. Minimum version 3.10.

Build and Test

We build and test eEVM on Linux and Windows on x86-64, but it should be functional cross-platform.

Linux

Build the static library and tests.

mkdir build
cd build
cmake ..
make

It 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).

Run the tests.

cd build
ctest -VV

Windows / Visual Studio 2017

Open the Visual Studio 2017 developer command prompt. Create .sln and .vcxproj files and build the static library and tests as follows.

mkdir build
cd build
cmake ..
msbuild ALL_BUILD.vcxproj

Run the tests.

cd build
ctest -C debug

More on tests

To run the tests outside of CTest you will need to provide the path to the test cases as an environment variable.

cd build
export TEST_DIR=../3rdparty/test_cases/
./eevm_tests

The 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.

cd build

time TEST_DIR=../3rdparty/test_cases/ ./eevm_tests
...
real    0m0.424s

time TEST_DIR=../3rdparty/test_cases/ ./eevm_tests -ns
...
real    2m11.306s

Note 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).

Third-party components

We rely on several open source third-party components, attributed under THIRD_PARTY_NOTICES.

Keccak

The 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.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repositories using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].