From d8b5d6359decec39bc7661a5add6708ed0cc4f07 Mon Sep 17 00:00:00 2001
From: LiJianfeng <“Lijianfeng0108@qq.com>
Date: Wed, 7 Mar 2018 18:07:36 +0800
Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E4=BA=8E=E4=BB=A5=E5=A4=AA=E5=9D=8A?=
=?UTF-8?q?=E7=9A=84=E4=B8=80=E6=9C=9F=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CMakeLists.txt | 157 +
CodingStandards.txt | 254 +
LICENSE | 673 +
README.md | 165 +
appveyor.yml | 111 +
circle.yml | 73 +
cmake/EthBuildInfo.cmake | 53 +
cmake/EthCcache.cmake | 15 +
cmake/EthCompilerSettings.cmake | 180 +
cmake/EthDependencies.cmake | 83 +
cmake/EthExecutableHelper.cmake | 62 +
cmake/EthOptions.cmake | 110 +
cmake/EthPolicy.cmake | 33 +
cmake/EthUtils.cmake | 82 +
cmake/FindLevelDB.cmake | 61 +
cmake/FindMHD.cmake | 54 +
cmake/FindMiniupnpc.cmake | 49 +
cmake/FindRocksDB.cmake | 49 +
cmake/HunterGate.cmake | 529 +
cmake/ProjectCryptopp.cmake | 183 +
cmake/ProjectJsonRpcCpp.cmake | 86 +
cmake/ProjectLcov.cmake | 12 +
cmake/ProjectMPIR.cmake | 21 +
cmake/ProjectSecp256k1.cmake | 39 +
cmake/ProjectSnark.cmake | 39 +
cmake/UseMhd.cmake | 11 +
cmake/UseMiniupnpc.cmake | 11 +
cmake/scripts/buildinfo.cmake | 49 +
cmake/scripts/configure.cmake | 14 +
cmake/scripts/copydlls.cmake | 24 +
cmake/scripts/helpers.cmake | 90 +
cmake/scripts/install_deps.cmake | 12 +
cmake/scripts/jsonrpcstub.cmake | 82 +
cmake/scripts/resource.hpp.in | 30 +
cmake/scripts/resources.cmake | 57 +
cmake/scripts/runtest.cmake | 15 +
cmake/secp256k1/CMakeLists.txt | 38 +
cmake/templates/BuildInfo.h.in | 12 +
cmake/toolchain.cmake | 4 +
codecov.yml | 34 +
doc/Doxyfile | 2363 ++
doc/database_layout.rst | 109 +
doc/dependencies.rst | 35 +
doc/generating_tests.rst | 348 +
doc/gitbook/README.md | 14 +
doc/gitbook/SUMMARY.md | 13 +
doc/gitbook/book.json | 1 +
doc/gitbook/cli_tools.md | 2 +
doc/gitbook/cold_wallet_storage_device.md | 97 +
doc/gitbook/ethkey.md | 299 +
doc/gitbook/getting_started.md | 141 +
doc/gitbook/installation.md | 51 +
doc/gitbook/interactive_console.md | 261 +
doc/gitbook/mining.md | 90 +
doc/gitbook/styles/website.css | 1 +
doc/gitbook/transaction_explorer.md | 16 +
doc/gitbook/whisper.md | 22 +
doc/index.rst | 6 +
doc/usingtesteth.rst | 115 +
esi/CMakeLists.txt | 14 +
esi/genesis_info.h | 204 +
esi/main.cpp | 787 +
eth/AccountManager.cpp | 245 +
eth/AccountManager.h | 53 +
eth/CMakeLists.txt | 14 +
eth/MinerAux.h | 326 +
eth/main.cpp | 1263 +
ethkey/CMakeLists.txt | 2 +
ethkey/KeyAux.h | 849 +
ethkey/main.cpp | 106 +
ethvm/CMakeLists.txt | 5 +
ethvm/main.cpp | 364 +
homebrew/INSTALL_RECEIPT.json | 1 +
.../fix_homebrew_paths_in_standalone_zip.py | 65 +
homebrew/homebrew.mxcl.cpp-ethereum.plist | 23 +
homebrew/prepare_receipt.sh | 71 +
libdevcore/Address.cpp | 25 +
libdevcore/Address.h | 48 +
libdevcore/Assertions.h | 102 +
libdevcore/Base64.cpp | 146 +
libdevcore/Base64.h | 61 +
libdevcore/CMakeLists.txt | 24 +
libdevcore/Common.cpp | 108 +
libdevcore/Common.h | 327 +
libdevcore/CommonData.cpp | 141 +
libdevcore/CommonData.h | 395 +
libdevcore/CommonIO.cpp | 182 +
libdevcore/CommonIO.h | 178 +
libdevcore/CommonJS.cpp | 100 +
libdevcore/CommonJS.h | 127 +
libdevcore/Exceptions.h | 86 +
libdevcore/FileSystem.cpp | 118 +
libdevcore/FileSystem.h | 46 +
libdevcore/FixedHash.cpp | 49 +
libdevcore/FixedHash.h | 386 +
libdevcore/Guards.cpp | 29 +
libdevcore/Guards.h | 147 +
libdevcore/Log.cpp | 191 +
libdevcore/Log.h | 293 +
libdevcore/MemoryDB.cpp | 192 +
libdevcore/MemoryDB.h | 96 +
libdevcore/OverlayDB.cpp | 152 +
libdevcore/OverlayDB.h | 61 +
libdevcore/RLP.cpp | 378 +
libdevcore/RLP.h | 486 +
libdevcore/RangeMask.h | 293 +
libdevcore/SHA3.cpp | 223 +
libdevcore/SHA3.h | 71 +
libdevcore/Terminal.h | 148 +
libdevcore/TransientDirectory.cpp | 67 +
libdevcore/TransientDirectory.h | 47 +
libdevcore/TrieCommon.cpp | 130 +
libdevcore/TrieCommon.h | 134 +
libdevcore/TrieDB.h | 1234 +
libdevcore/TrieHash.cpp | 130 +
libdevcore/TrieHash.h | 47 +
libdevcore/UndefMacros.h | 46 +
libdevcore/Worker.cpp | 133 +
libdevcore/Worker.h | 110 +
libdevcore/concurrent_queue.h | 60 +
libdevcore/db.h | 36 +
libdevcore/dbfwd.h | 30 +
libdevcore/vector_ref.h | 122 +
libdevcrypto/AES.cpp | 60 +
libdevcrypto/AES.h | 34 +
libdevcrypto/CMakeLists.txt | 6 +
libdevcrypto/Common.cpp | 392 +
libdevcrypto/Common.h | 217 +
libdevcrypto/CryptoPP.cpp | 234 +
libdevcrypto/CryptoPP.h | 68 +
libdevcrypto/Exceptions.h | 35 +
libdevcrypto/Hash.cpp | 440 +
libdevcrypto/Hash.h | 36 +
libdevcrypto/LibSnark.cpp | 201 +
libdevcrypto/LibSnark.h | 35 +
libdevcrypto/SecretStore.cpp | 453 +
libdevcrypto/SecretStore.h | 146 +
libesiconsensus/CMakeLists.txt | 5 +
libesiconsensus/common.h | 34 +
libesiconsensus/consenter.h | 143 +
libesipbft/CMakeLists.txt | 5 +
libesipbft/key_wrapped.cpp | 29 +
libesipbft/key_wrapped.h | 52 +
libesipbft/lock_info.h | 59 +
libesipbft/msg_collector.cpp | 71 +
libesipbft/msg_collector.h | 64 +
libesipbft/pbft_common.h | 131 +
libesipbft/pbft_interface.h | 69 +
libesipbft/pbft_state_machine.cpp | 618 +
libesipbft/pbft_state_machine.h | 292 +
libesipbft/proposal_info.h | 44 +
libesipbft/time_out_ticker.cpp | 61 +
libesipbft/time_out_ticker.h | 71 +
libesipbft/utils.cpp | 103 +
libesipbft/utils.h | 79 +
libesipbft/validator_set.cpp | 54 +
libesipbft/validator_set.h | 90 +
libesipbft/vote_set.cpp | 164 +
libesipbft/vote_set.h | 186 +
libesipbftseal/CMakeLists.txt | 6 +
libesipbftseal/pbft_client.cpp | 263 +
libesipbftseal/pbft_client.h | 145 +
libesirpclient/rpc_seal_client.cpp | 28 +
libesirpclient/rpc_seal_client.h | 24 +
libesirpclient/seal_cli.cpp | 59 +
libesirpclient/seal_cli.h | 80 +
libesirpcserver/rpc_core_server.cpp | 92 +
libesirpcserver/rpc_core_server.h | 37 +
libesirpcserver/rpc_core_server_face.h | 132 +
libesirpcserver/rpc_net_server.cpp | 36 +
libesirpcserver/rpc_net_server.h | 30 +
libesirpcserver/rpc_net_server_face.h | 78 +
libesirpcserver/rpc_seal_server.cpp | 34 +
libesirpcserver/rpc_seal_server.h | 29 +
libesirpcserver/rpc_seal_server_face.h | 72 +
libesiwebthree/CMakeLists.txt | 2 +
libesiwebthree/web_three.cpp | 109 +
libesiwebthree/web_three.h | 110 +
libethash/CMakeLists.txt | 20 +
libethash/compiler.h | 33 +
libethash/data_sizes.h | 812 +
libethash/endian.h | 75 +
libethash/ethash.h | 147 +
libethash/fnv.h | 39 +
libethash/internal.c | 573 +
libethash/internal.h | 183 +
libethash/io.c | 119 +
libethash/io.h | 212 +
libethash/io_posix.c | 118 +
libethash/io_win32.c | 106 +
libethash/mmap.h | 47 +
libethash/mmap_win32.c | 84 +
libethash/sha3.c | 151 +
libethash/sha3.h | 31 +
libethash/util.c | 41 +
libethash/util.h | 47 +
libethash/util_win32.c | 38 +
libethashseal/CMakeLists.txt | 4 +
libethashseal/Ethash.cpp | 316 +
libethashseal/Ethash.h | 91 +
libethashseal/EthashAux.cpp | 259 +
libethashseal/EthashAux.h | 113 +
libethashseal/EthashCPUMiner.cpp | 93 +
libethashseal/EthashCPUMiner.h | 57 +
libethashseal/EthashClient.cpp | 136 +
libethashseal/EthashClient.h | 93 +
libethashseal/EthashProofOfWork.cpp | 60 +
libethashseal/EthashProofOfWork.h | 79 +
libethashseal/GenesisInfo.cpp | 100 +
libethashseal/GenesisInfo.h | 66 +
libethashseal/genesis/CMakeLists.txt | 1 +
libethashseal/genesis/mainNetwork.cpp | 27010 ++++++++++++++++
libethashseal/genesis/ropsten.cpp | 843 +
libethashseal/genesis/test/CMakeLists.txt | 1 +
.../genesis/test/EIP158ToByzantiumAt5Test.cpp | 65 +
libethashseal/genesis/test/byzantiumTest.cpp | 65 +
.../genesis/test/byzantiumTransitionTest.cpp | 65 +
.../genesis/test/constantinopleTest.cpp | 65 +
.../test/constantinopleTransitionTest.cpp | 65 +
libethashseal/genesis/test/eip150Test.cpp | 61 +
libethashseal/genesis/test/eip158Test.cpp | 61 +
.../genesis/test/frontierNoProofTest.cpp | 63 +
libethashseal/genesis/test/frontierTest.cpp | 63 +
.../test/frontierToHomesteadAt5Test.cpp | 61 +
libethashseal/genesis/test/homesteadTest.cpp | 62 +
.../genesis/test/homesteadToDaoAt5Test.cpp | 61 +
.../genesis/test/homesteadToEIP150At5Test.cpp | 61 +
.../genesis/test/mainNetworkNoProofTest.cpp | 64 +
.../genesis/test/mainNetworkTest.cpp | 64 +
.../genesis/test/transitionnetTest.cpp | 65 +
libethcore/ABI.cpp | 27 +
libethcore/ABI.h | 263 +
libethcore/BasicAuthority.cpp | 96 +
libethcore/BasicAuthority.h | 61 +
libethcore/BlockHeader.cpp | 273 +
libethcore/BlockHeader.h | 225 +
libethcore/CMakeLists.txt | 6 +
libethcore/ChainOperationParams.cpp | 84 +
libethcore/ChainOperationParams.h | 119 +
libethcore/Common.cpp | 194 +
libethcore/Common.h | 292 +
libethcore/CommonJS.cpp | 77 +
libethcore/CommonJS.h | 61 +
libethcore/EVMSchedule.h | 128 +
libethcore/Exceptions.h | 91 +
libethcore/KeyManager.cpp | 480 +
libethcore/KeyManager.h | 195 +
libethcore/LogEntry.cpp | 51 +
libethcore/LogEntry.h | 105 +
libethcore/Precompiled.cpp | 207 +
libethcore/Precompiled.h | 71 +
libethcore/SealEngine.cpp | 78 +
libethcore/SealEngine.h | 146 +
libethcore/Transaction.cpp | 219 +
libethcore/Transaction.h | 212 +
libethereum/Account.cpp | 157 +
libethereum/Account.h | 254 +
libethereum/BasicGasPricer.cpp | 100 +
libethereum/BasicGasPricer.h | 53 +
libethereum/Block.cpp | 957 +
libethereum/Block.h | 327 +
libethereum/BlockChain.cpp | 1657 +
libethereum/BlockChain.h | 463 +
libethereum/BlockChainImporter.cpp | 66 +
libethereum/BlockChainImporter.h | 51 +
libethereum/BlockChainSync.cpp | 868 +
libethereum/BlockChainSync.h | 169 +
libethereum/BlockDetails.cpp | 43 +
libethereum/BlockDetails.h | 129 +
libethereum/BlockQueue.cpp | 549 +
libethereum/BlockQueue.h | 331 +
libethereum/CMakeLists.txt | 6 +
libethereum/ChainParams.cpp | 251 +
libethereum/ChainParams.h | 77 +
libethereum/Client.cpp | 882 +
libethereum/Client.h | 346 +
libethereum/ClientBase.cpp | 568 +
libethereum/ClientBase.h | 193 +
libethereum/ClientTest.cpp | 131 +
libethereum/ClientTest.h | 66 +
libethereum/CodeSizeCache.h | 79 +
libethereum/CommonNet.cpp | 28 +
libethereum/CommonNet.h | 112 +
libethereum/Defaults.cpp | 34 +
libethereum/Defaults.h | 51 +
libethereum/EthereumHost.cpp | 694 +
libethereum/EthereumHost.h | 167 +
libethereum/EthereumPeer.cpp | 439 +
libethereum/EthereumPeer.h | 200 +
libethereum/Executive.cpp | 527 +
libethereum/Executive.h | 217 +
libethereum/ExtVM.cpp | 169 +
libethereum/ExtVM.h | 104 +
libethereum/GasPricer.cpp | 26 +
libethereum/GasPricer.h | 76 +
libethereum/GenericFarm.h | 204 +
libethereum/GenericMiner.cpp | 0
libethereum/GenericMiner.h | 166 +
libethereum/GenesisInfo.cpp | 321 +
libethereum/GenesisInfo.h | 37 +
libethereum/ImportPerformanceLogger.cpp | 59 +
libethereum/ImportPerformanceLogger.h | 68 +
libethereum/Interface.cpp | 64 +
libethereum/Interface.h | 285 +
libethereum/LastBlockHashesFace.h | 49 +
libethereum/LogFilter.cpp | 166 +
libethereum/LogFilter.h | 92 +
libethereum/SnapshotImporter.cpp | 257 +
libethereum/SnapshotImporter.h | 61 +
libethereum/SnapshotStorage.cpp | 94 +
libethereum/SnapshotStorage.h | 53 +
libethereum/State.cpp | 744 +
libethereum/State.h | 368 +
libethereum/StateImporter.cpp | 89 +
libethereum/StateImporter.h | 58 +
libethereum/SystemContract.cpp | 550 +
libethereum/SystemContract.h | 134 +
libethereum/SystemContractApi.cpp | 10 +
libethereum/SystemContractApi.h | 193 +
libethereum/Transaction.cpp | 102 +
libethereum/Transaction.h | 151 +
libethereum/TransactionQueue.cpp | 416 +
libethereum/TransactionQueue.h | 222 +
libethereum/TransactionReceipt.cpp | 119 +
libethereum/TransactionReceipt.h | 120 +
libethereum/VerifiedBlock.h | 79 +
libevm/CMakeLists.txt | 29 +
libevm/ExtVMFace.cpp | 299 +
libevm/ExtVMFace.h | 261 +
libevm/Instruction.cpp | 226 +
libevm/Instruction.h | 256 +
libevm/JitVM.cpp | 172 +
libevm/JitVM.h | 23 +
libevm/SmartVM.cpp | 121 +
libevm/SmartVM.h | 38 +
libevm/VM.cpp | 1594 +
libevm/VM.h | 253 +
libevm/VMCalls.cpp | 295 +
libevm/VMConfig.h | 437 +
libevm/VMFace.h | 69 +
libevm/VMFactory.cpp | 66 +
libevm/VMFactory.h | 49 +
libevm/VMOpt.cpp | 232 +
libevm/VMSIMD.cpp | 729 +
libevm/VMValidate.cpp | 175 +
libp2p/All.h | 8 +
libp2p/CMakeLists.txt | 11 +
libp2p/Capability.cpp | 60 +
libp2p/Capability.h | 69 +
libp2p/Common.cpp | 265 +
libp2p/Common.h | 341 +
libp2p/Host.cpp | 966 +
libp2p/Host.h | 348 +
libp2p/HostCapability.cpp | 44 +
libp2p/HostCapability.h | 94 +
libp2p/Network.cpp | 252 +
libp2p/Network.h | 88 +
libp2p/NodeTable.cpp | 634 +
libp2p/NodeTable.h | 474 +
libp2p/Peer.cpp | 86 +
libp2p/Peer.h | 102 +
libp2p/RLPXFrameCoder.cpp | 295 +
libp2p/RLPXFrameCoder.h | 131 +
libp2p/RLPXFrameReader.cpp | 95 +
libp2p/RLPXFrameReader.h | 55 +
libp2p/RLPXFrameWriter.cpp | 162 +
libp2p/RLPXFrameWriter.h | 90 +
libp2p/RLPXPacket.h | 71 +
libp2p/RLPXSocket.h | 55 +
libp2p/RLPXSocketIO.cpp | 115 +
libp2p/RLPXSocketIO.h | 69 +
libp2p/RLPxHandshake.cpp | 412 +
libp2p/RLPxHandshake.h | 148 +
libp2p/Session.cpp | 589 +
libp2p/Session.h | 209 +
libp2p/UDP.cpp | 63 +
libp2p/UDP.h | 280 +
libp2p/UPnP.cpp | 187 +
libp2p/UPnP.h | 58 +
libweb3jsonrpc/AccountHolder.cpp | 199 +
libweb3jsonrpc/AccountHolder.h | 162 +
libweb3jsonrpc/AdminEth.cpp | 295 +
libweb3jsonrpc/AdminEth.h | 62 +
libweb3jsonrpc/AdminEthFace.h | 145 +
libweb3jsonrpc/AdminNet.cpp | 85 +
libweb3jsonrpc/AdminNet.h | 37 +
libweb3jsonrpc/AdminNetFace.h | 73 +
libweb3jsonrpc/AdminUtils.cpp | 38 +
libweb3jsonrpc/AdminUtils.h | 35 +
libweb3jsonrpc/AdminUtilsFace.h | 41 +
libweb3jsonrpc/CMakeLists.txt | 60 +
libweb3jsonrpc/DBFace.h | 35 +
libweb3jsonrpc/Debug.cpp | 214 +
libweb3jsonrpc/Debug.h | 48 +
libweb3jsonrpc/DebugFace.h | 59 +
libweb3jsonrpc/Eth.cpp | 779 +
libweb3jsonrpc/Eth.h | 135 +
libweb3jsonrpc/EthFace.h | 342 +
libweb3jsonrpc/IpcServer.h | 34 +
libweb3jsonrpc/IpcServerBase.cpp | 162 +
libweb3jsonrpc/IpcServerBase.h | 55 +
libweb3jsonrpc/JsonHelper.cpp | 559 +
libweb3jsonrpc/JsonHelper.h | 124 +
libweb3jsonrpc/LevelDB.cpp | 60 +
libweb3jsonrpc/LevelDB.h | 49 +
libweb3jsonrpc/MemoryDB.cpp | 47 +
libweb3jsonrpc/MemoryDB.h | 47 +
libweb3jsonrpc/ModularServer.h | 178 +
libweb3jsonrpc/Net.cpp | 47 +
libweb3jsonrpc/Net.h | 52 +
libweb3jsonrpc/NetFace.h | 44 +
libweb3jsonrpc/Personal.cpp | 63 +
libweb3jsonrpc/Personal.h | 38 +
libweb3jsonrpc/PersonalFace.h | 54 +
libweb3jsonrpc/SafeHttpServer.cpp | 69 +
libweb3jsonrpc/SafeHttpServer.h | 48 +
libweb3jsonrpc/SessionManager.cpp | 24 +
libweb3jsonrpc/SessionManager.h | 50 +
libweb3jsonrpc/Test.cpp | 104 +
libweb3jsonrpc/Test.h | 57 +
libweb3jsonrpc/TestFace.h | 53 +
libweb3jsonrpc/UnixSocketServer.cpp | 149 +
libweb3jsonrpc/UnixSocketServer.h | 53 +
libweb3jsonrpc/Web3.cpp | 11 +
libweb3jsonrpc/Web3.h | 25 +
libweb3jsonrpc/Web3Face.h | 36 +
libweb3jsonrpc/Whisper.cpp | 201 +
libweb3jsonrpc/Whisper.h | 73 +
libweb3jsonrpc/WhisperFace.h | 78 +
libweb3jsonrpc/WinPipeServer.cpp | 90 +
libweb3jsonrpc/WinPipeServer.h | 49 +
libweb3jsonrpc/admin_eth.json | 22 +
libweb3jsonrpc/admin_net.json | 10 +
libweb3jsonrpc/admin_utils.json | 5 +
libweb3jsonrpc/db.json | 4 +
libweb3jsonrpc/debug.json | 8 +
libweb3jsonrpc/eth.json | 55 +
libweb3jsonrpc/net.json | 5 +
libweb3jsonrpc/personal.json | 7 +
libweb3jsonrpc/test.json | 7 +
libweb3jsonrpc/web3.json | 4 +
libweb3jsonrpc/whisper.json | 11 +
libwebthree/CMakeLists.txt | 2 +
libwebthree/WebThree.cpp | 161 +
libwebthree/WebThree.h | 222 +
libwhisper/BloomFilter.h | 143 +
libwhisper/CMakeLists.txt | 4 +
libwhisper/Common.cpp | 122 +
libwhisper/Common.h | 137 +
libwhisper/Interface.cpp | 34 +
libwhisper/Interface.h | 126 +
libwhisper/Message.cpp | 191 +
libwhisper/Message.h | 138 +
libwhisper/WhisperDB.cpp | 159 +
libwhisper/WhisperDB.h | 75 +
libwhisper/WhisperHost.cpp | 290 +
libwhisper/WhisperHost.h | 92 +
libwhisper/WhisperPeer.cpp | 153 +
libwhisper/WhisperPeer.h | 81 +
refilltests | 0
rlp/CMakeLists.txt | 3 +
rlp/main.cpp | 505 +
sanitizer-blacklist.txt | 8 +
scripts/Dockerfile | 40 +
scripts/build.sh | 41 +
scripts/cleanup_ccache.sh | 6 +
scripts/docker-eth | 15 +
scripts/docker/cpp-build-env.dockerfile | 49 +
scripts/docker/eth-alpine/Dockerfile | 30 +
scripts/docker/eth-centos/Dockerfile | 12 +
scripts/docker/eth-debian/Dockerfile | 24 +
scripts/docker/eth-fedora/Dockerfile | 10 +
scripts/duplicates.sh | 92 +
scripts/install_cmake.sh | 51 +
scripts/install_deps.bat | 59 +
scripts/install_deps.sh | 270 +
scripts/install_solc_lllc.sh | 46 +
scripts/ppabuild.sh | 107 +
scripts/prepare_ccache.sh | 15 +
scripts/release.bat | 37 +
scripts/release.sh | 115 +
scripts/runalltests.sh | 61 +
scripts/tests.bat | 58 +
scripts/tests.sh | 59 +
scripts/upload-homebrew-formula.sh | 16 +
snapcraft.yaml | 29 +
test/CMakeLists.txt | 71 +
test/tools/fuzzTesting/createRandomTest.cpp | 376 +
test/tools/fuzzTesting/fuzzHelper.cpp | 580 +
test/tools/fuzzTesting/fuzzHelper.h | 132 +
test/tools/jsontests/BlockChainTests.cpp | 1096 +
test/tools/jsontests/BlockChainTests.h | 86 +
test/tools/jsontests/StateTests.cpp | 202 +
test/tools/jsontests/StateTests.h | 39 +
test/tools/jsontests/TransactionTests.cpp | 215 +
test/tools/jsontests/vm.cpp | 511 +
test/tools/jsontests/vm.h | 90 +
test/tools/libtesteth/BlockChainHelper.cpp | 616 +
test/tools/libtesteth/BlockChainHelper.h | 165 +
test/tools/libtesteth/FillJsonFunctions.cpp | 215 +
test/tools/libtesteth/ImportTest.cpp | 737 +
test/tools/libtesteth/ImportTest.h | 93 +
test/tools/libtesteth/JsonSpiritHeaders.h | 30 +
test/tools/libtesteth/Options.cpp | 282 +
test/tools/libtesteth/Options.h | 85 +
test/tools/libtesteth/Stats.cpp | 120 +
test/tools/libtesteth/Stats.h | 58 +
test/tools/libtesteth/TestHelper.cpp | 553 +
test/tools/libtesteth/TestHelper.h | 149 +
test/tools/libtesteth/TestOutputHelper.cpp | 98 +
test/tools/libtesteth/TestOutputHelper.h | 60 +
test/tools/libtesteth/TestSuite.cpp | 181 +
test/tools/libtesteth/TestSuite.h | 62 +
test/tools/libtesteth/TestUtils.cpp | 117 +
test/tools/libtesteth/TestUtils.h | 81 +
test/tools/libtesteth/boostTest.cpp | 146 +
test/tools/libtestutils/BlockChainLoader.cpp | 55 +
test/tools/libtestutils/BlockChainLoader.h | 53 +
test/tools/libtestutils/Common.cpp | 88 +
test/tools/libtestutils/Common.h | 46 +
test/tools/libtestutils/FixedClient.cpp | 34 +
test/tools/libtestutils/FixedClient.h | 60 +
test/tools/libtestutils/TestLastBlockHashes.h | 44 +
.../unittests/external-dependencies/boost.cpp | 175 +
test/unittests/libdevcore/Base36.cpp | 54 +
test/unittests/libdevcore/CommonJS.cpp | 136 +
test/unittests/libdevcore/FixedHash.cpp | 148 +
test/unittests/libdevcore/RangeMask.cpp | 150 +
test/unittests/libdevcore/core.cpp | 75 +
test/unittests/libdevcore/rlp.cpp | 303 +
test/unittests/libdevcrypto/AES.cpp | 81 +
test/unittests/libdevcrypto/LibSnark.cpp | 489 +
test/unittests/libdevcrypto/MemTrie.cpp | 414 +
test/unittests/libdevcrypto/MemTrie.h | 54 +
test/unittests/libdevcrypto/SecretStore.cpp | 337 +
test/unittests/libdevcrypto/crypto.cpp | 836 +
test/unittests/libdevcrypto/hexPrefix.cpp | 101 +
test/unittests/libdevcrypto/trie.cpp | 616 +
test/unittests/libethashseal/EthashTest.cpp | 99 +
test/unittests/libethcore/PrecompiledTest.cpp | 720 +
test/unittests/libethcore/SealEngineTest.cpp | 48 +
test/unittests/libethcore/commonjs.cpp | 58 +
test/unittests/libethcore/dagger.cpp | 83 +
test/unittests/libethcore/difficulty.cpp | 283 +
test/unittests/libethcore/keymanager.cpp | 147 +
test/unittests/libethereum/Block.cpp | 302 +
test/unittests/libethereum/BlockChain.cpp | 392 +
.../libethereum/BlockChainInsert.cpp | 220 +
test/unittests/libethereum/BlockQueue.cpp | 103 +
test/unittests/libethereum/ClientBase.cpp | 225 +
.../libethereum/EthereumPeerTest.cpp | 188 +
test/unittests/libethereum/ExtVMTest.cpp | 114 +
test/unittests/libethereum/GasPricer.cpp | 189 +
test/unittests/libethereum/Genesis.cpp | 71 +
.../libethereum/SnapshotImporterTest.cpp | 394 +
test/unittests/libethereum/StateUnitTests.cpp | 60 +
test/unittests/libethereum/Transaction.cpp | 196 +
.../libethereum/TransactionQueue.cpp | 313 +
test/unittests/libp2p/capability.cpp | 164 +
test/unittests/libp2p/eip-8.cpp | 399 +
test/unittests/libp2p/net.cpp | 416 +
test/unittests/libp2p/peer.cpp | 356 +
test/unittests/libp2p/rlpx.cpp | 984 +
test/unittests/libtesteth/blockchainTest.cpp | 154 +
test/unittests/libweb3core/memorydb.cpp | 214 +
test/unittests/libweb3core/overlaydb.cpp | 130 +
.../libweb3jsonrpc/AccountHolder.cpp | 79 +
test/unittests/libweb3jsonrpc/Client.cpp | 144 +
test/unittests/libweb3jsonrpc/JSON_test.sol | 120 +
.../libweb3jsonrpc/WebThreeStubClient.h | 924 +
test/unittests/libweb3jsonrpc/jsonrpc.cpp | 334 +
test/unittests/libwhisper/bloomFilter.cpp | 318 +
test/unittests/libwhisper/whisperMessage.cpp | 119 +
test/unittests/performance/README | 129 +
test/unittests/performance/add128.asm | 53 +
test/unittests/performance/add256.asm | 53 +
test/unittests/performance/add64.asm | 53 +
test/unittests/performance/bop.sol | 18 +
test/unittests/performance/csv2gas.py | 47 +
test/unittests/performance/csv2nano.py | 54 +
test/unittests/performance/csv2ops.py | 55 +
test/unittests/performance/div128.asm | 54 +
test/unittests/performance/div256.asm | 53 +
test/unittests/performance/div64.asm | 53 +
test/unittests/performance/exp.asm | 53 +
test/unittests/performance/fun.sol | 32 +
test/unittests/performance/log2csv.py | 54 +
test/unittests/performance/loop.sol | 10 +
test/unittests/performance/mix.sol | 191 +
test/unittests/performance/mul128.asm | 54 +
test/unittests/performance/mul256.asm | 54 +
test/unittests/performance/mul64.asm | 57 +
test/unittests/performance/mul64c.c | 35 +
test/unittests/performance/nop.asm | 53 +
test/unittests/performance/parity-tests.sh | 56 +
test/unittests/performance/pop.asm | 53 +
test/unittests/performance/pop.sol | 58 +
test/unittests/performance/popcpyc.c | 26 +
test/unittests/performance/popincc.c | 35 +
test/unittests/performance/poplnkc.c | 31 +
test/unittests/performance/rc5.sol | 97 +
test/unittests/performance/rng.sol | 36 +
test/unittests/performance/sub128.asm | 53 +
test/unittests/performance/sub256.asm | 53 +
test/unittests/performance/sub64.asm | 53 +
test/unittests/performance/tests.mk | 113 +
test/unittests/performance/thrash.sol | 8 +
test/unittests/performance/top.sol | 16 +
utils/CMakeLists.txt | 1 +
utils/json_spirit/CMakeLists.txt | 10 +
utils/json_spirit/JsonSpiritHeaders.h | 32 +
utils/json_spirit/json_spirit.h | 18 +
utils/json_spirit/json_spirit.vcproj | 209 +
.../json_spirit/json_spirit_error_position.h | 54 +
utils/json_spirit/json_spirit_reader.cpp | 137 +
utils/json_spirit/json_spirit_reader.h | 62 +
.../json_spirit/json_spirit_reader_template.h | 612 +
utils/json_spirit/json_spirit_stream_reader.h | 70 +
utils/json_spirit/json_spirit_utils.h | 61 +
utils/json_spirit/json_spirit_value.cpp | 8 +
utils/json_spirit/json_spirit_value.h | 532 +
utils/json_spirit/json_spirit_writer.cpp | 95 +
utils/json_spirit/json_spirit_writer.h | 50 +
.../json_spirit/json_spirit_writer_template.h | 243 +
utils/libscrypt/CMakeLists.txt | 4 +
utils/libscrypt/LICENSE | 9 +
utils/libscrypt/b64.c | 313 +
utils/libscrypt/b64.h | 10 +
utils/libscrypt/crypto-mcf.c | 73 +
utils/libscrypt/crypto-scrypt-saltgen.c | 0
utils/libscrypt/crypto_scrypt-check.c | 100 +
utils/libscrypt/crypto_scrypt-hash.c | 0
utils/libscrypt/crypto_scrypt-hexconvert.c | 35 +
utils/libscrypt/crypto_scrypt-hexconvert.h | 9 +
utils/libscrypt/crypto_scrypt-nosse.c | 342 +
utils/libscrypt/libscrypt.h | 56 +
utils/libscrypt/libscrypt.version | 8 +
utils/libscrypt/sha256.c | 411 +
utils/libscrypt/sha256.h | 78 +
utils/libscrypt/slowequals.c | 26 +
utils/libscrypt/slowequals.h | 5 +
utils/libscrypt/sysendian.h | 144 +
642 files changed, 128110 insertions(+)
create mode 100644 CMakeLists.txt
create mode 100644 CodingStandards.txt
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 appveyor.yml
create mode 100644 circle.yml
create mode 100644 cmake/EthBuildInfo.cmake
create mode 100644 cmake/EthCcache.cmake
create mode 100644 cmake/EthCompilerSettings.cmake
create mode 100644 cmake/EthDependencies.cmake
create mode 100644 cmake/EthExecutableHelper.cmake
create mode 100644 cmake/EthOptions.cmake
create mode 100644 cmake/EthPolicy.cmake
create mode 100644 cmake/EthUtils.cmake
create mode 100644 cmake/FindLevelDB.cmake
create mode 100644 cmake/FindMHD.cmake
create mode 100644 cmake/FindMiniupnpc.cmake
create mode 100644 cmake/FindRocksDB.cmake
create mode 100644 cmake/HunterGate.cmake
create mode 100644 cmake/ProjectCryptopp.cmake
create mode 100644 cmake/ProjectJsonRpcCpp.cmake
create mode 100644 cmake/ProjectLcov.cmake
create mode 100644 cmake/ProjectMPIR.cmake
create mode 100644 cmake/ProjectSecp256k1.cmake
create mode 100644 cmake/ProjectSnark.cmake
create mode 100644 cmake/UseMhd.cmake
create mode 100644 cmake/UseMiniupnpc.cmake
create mode 100644 cmake/scripts/buildinfo.cmake
create mode 100644 cmake/scripts/configure.cmake
create mode 100644 cmake/scripts/copydlls.cmake
create mode 100644 cmake/scripts/helpers.cmake
create mode 100644 cmake/scripts/install_deps.cmake
create mode 100644 cmake/scripts/jsonrpcstub.cmake
create mode 100644 cmake/scripts/resource.hpp.in
create mode 100644 cmake/scripts/resources.cmake
create mode 100644 cmake/scripts/runtest.cmake
create mode 100644 cmake/secp256k1/CMakeLists.txt
create mode 100644 cmake/templates/BuildInfo.h.in
create mode 100644 cmake/toolchain.cmake
create mode 100644 codecov.yml
create mode 100644 doc/Doxyfile
create mode 100644 doc/database_layout.rst
create mode 100644 doc/dependencies.rst
create mode 100644 doc/generating_tests.rst
create mode 100644 doc/gitbook/README.md
create mode 100644 doc/gitbook/SUMMARY.md
create mode 100644 doc/gitbook/book.json
create mode 100644 doc/gitbook/cli_tools.md
create mode 100644 doc/gitbook/cold_wallet_storage_device.md
create mode 100644 doc/gitbook/ethkey.md
create mode 100644 doc/gitbook/getting_started.md
create mode 100644 doc/gitbook/installation.md
create mode 100644 doc/gitbook/interactive_console.md
create mode 100644 doc/gitbook/mining.md
create mode 100644 doc/gitbook/styles/website.css
create mode 100644 doc/gitbook/transaction_explorer.md
create mode 100644 doc/gitbook/whisper.md
create mode 100644 doc/index.rst
create mode 100644 doc/usingtesteth.rst
create mode 100644 esi/CMakeLists.txt
create mode 100644 esi/genesis_info.h
create mode 100644 esi/main.cpp
create mode 100644 eth/AccountManager.cpp
create mode 100644 eth/AccountManager.h
create mode 100644 eth/CMakeLists.txt
create mode 100644 eth/MinerAux.h
create mode 100644 eth/main.cpp
create mode 100644 ethkey/CMakeLists.txt
create mode 100644 ethkey/KeyAux.h
create mode 100644 ethkey/main.cpp
create mode 100644 ethvm/CMakeLists.txt
create mode 100644 ethvm/main.cpp
create mode 100644 homebrew/INSTALL_RECEIPT.json
create mode 100644 homebrew/fix_homebrew_paths_in_standalone_zip.py
create mode 100644 homebrew/homebrew.mxcl.cpp-ethereum.plist
create mode 100644 homebrew/prepare_receipt.sh
create mode 100644 libdevcore/Address.cpp
create mode 100644 libdevcore/Address.h
create mode 100644 libdevcore/Assertions.h
create mode 100644 libdevcore/Base64.cpp
create mode 100644 libdevcore/Base64.h
create mode 100644 libdevcore/CMakeLists.txt
create mode 100644 libdevcore/Common.cpp
create mode 100644 libdevcore/Common.h
create mode 100644 libdevcore/CommonData.cpp
create mode 100644 libdevcore/CommonData.h
create mode 100644 libdevcore/CommonIO.cpp
create mode 100644 libdevcore/CommonIO.h
create mode 100644 libdevcore/CommonJS.cpp
create mode 100644 libdevcore/CommonJS.h
create mode 100644 libdevcore/Exceptions.h
create mode 100644 libdevcore/FileSystem.cpp
create mode 100644 libdevcore/FileSystem.h
create mode 100644 libdevcore/FixedHash.cpp
create mode 100644 libdevcore/FixedHash.h
create mode 100644 libdevcore/Guards.cpp
create mode 100644 libdevcore/Guards.h
create mode 100644 libdevcore/Log.cpp
create mode 100644 libdevcore/Log.h
create mode 100644 libdevcore/MemoryDB.cpp
create mode 100644 libdevcore/MemoryDB.h
create mode 100644 libdevcore/OverlayDB.cpp
create mode 100644 libdevcore/OverlayDB.h
create mode 100644 libdevcore/RLP.cpp
create mode 100644 libdevcore/RLP.h
create mode 100644 libdevcore/RangeMask.h
create mode 100644 libdevcore/SHA3.cpp
create mode 100644 libdevcore/SHA3.h
create mode 100644 libdevcore/Terminal.h
create mode 100644 libdevcore/TransientDirectory.cpp
create mode 100644 libdevcore/TransientDirectory.h
create mode 100644 libdevcore/TrieCommon.cpp
create mode 100644 libdevcore/TrieCommon.h
create mode 100644 libdevcore/TrieDB.h
create mode 100644 libdevcore/TrieHash.cpp
create mode 100644 libdevcore/TrieHash.h
create mode 100644 libdevcore/UndefMacros.h
create mode 100644 libdevcore/Worker.cpp
create mode 100644 libdevcore/Worker.h
create mode 100644 libdevcore/concurrent_queue.h
create mode 100644 libdevcore/db.h
create mode 100644 libdevcore/dbfwd.h
create mode 100644 libdevcore/vector_ref.h
create mode 100644 libdevcrypto/AES.cpp
create mode 100644 libdevcrypto/AES.h
create mode 100644 libdevcrypto/CMakeLists.txt
create mode 100644 libdevcrypto/Common.cpp
create mode 100644 libdevcrypto/Common.h
create mode 100644 libdevcrypto/CryptoPP.cpp
create mode 100644 libdevcrypto/CryptoPP.h
create mode 100644 libdevcrypto/Exceptions.h
create mode 100644 libdevcrypto/Hash.cpp
create mode 100644 libdevcrypto/Hash.h
create mode 100644 libdevcrypto/LibSnark.cpp
create mode 100644 libdevcrypto/LibSnark.h
create mode 100644 libdevcrypto/SecretStore.cpp
create mode 100644 libdevcrypto/SecretStore.h
create mode 100644 libesiconsensus/CMakeLists.txt
create mode 100644 libesiconsensus/common.h
create mode 100644 libesiconsensus/consenter.h
create mode 100644 libesipbft/CMakeLists.txt
create mode 100644 libesipbft/key_wrapped.cpp
create mode 100644 libesipbft/key_wrapped.h
create mode 100644 libesipbft/lock_info.h
create mode 100644 libesipbft/msg_collector.cpp
create mode 100644 libesipbft/msg_collector.h
create mode 100644 libesipbft/pbft_common.h
create mode 100644 libesipbft/pbft_interface.h
create mode 100644 libesipbft/pbft_state_machine.cpp
create mode 100644 libesipbft/pbft_state_machine.h
create mode 100644 libesipbft/proposal_info.h
create mode 100644 libesipbft/time_out_ticker.cpp
create mode 100644 libesipbft/time_out_ticker.h
create mode 100644 libesipbft/utils.cpp
create mode 100644 libesipbft/utils.h
create mode 100644 libesipbft/validator_set.cpp
create mode 100644 libesipbft/validator_set.h
create mode 100644 libesipbft/vote_set.cpp
create mode 100644 libesipbft/vote_set.h
create mode 100644 libesipbftseal/CMakeLists.txt
create mode 100644 libesipbftseal/pbft_client.cpp
create mode 100644 libesipbftseal/pbft_client.h
create mode 100644 libesirpclient/rpc_seal_client.cpp
create mode 100644 libesirpclient/rpc_seal_client.h
create mode 100644 libesirpclient/seal_cli.cpp
create mode 100644 libesirpclient/seal_cli.h
create mode 100644 libesirpcserver/rpc_core_server.cpp
create mode 100644 libesirpcserver/rpc_core_server.h
create mode 100644 libesirpcserver/rpc_core_server_face.h
create mode 100644 libesirpcserver/rpc_net_server.cpp
create mode 100644 libesirpcserver/rpc_net_server.h
create mode 100644 libesirpcserver/rpc_net_server_face.h
create mode 100644 libesirpcserver/rpc_seal_server.cpp
create mode 100644 libesirpcserver/rpc_seal_server.h
create mode 100644 libesirpcserver/rpc_seal_server_face.h
create mode 100644 libesiwebthree/CMakeLists.txt
create mode 100644 libesiwebthree/web_three.cpp
create mode 100644 libesiwebthree/web_three.h
create mode 100644 libethash/CMakeLists.txt
create mode 100644 libethash/compiler.h
create mode 100644 libethash/data_sizes.h
create mode 100644 libethash/endian.h
create mode 100644 libethash/ethash.h
create mode 100644 libethash/fnv.h
create mode 100644 libethash/internal.c
create mode 100644 libethash/internal.h
create mode 100644 libethash/io.c
create mode 100644 libethash/io.h
create mode 100644 libethash/io_posix.c
create mode 100644 libethash/io_win32.c
create mode 100644 libethash/mmap.h
create mode 100644 libethash/mmap_win32.c
create mode 100644 libethash/sha3.c
create mode 100644 libethash/sha3.h
create mode 100644 libethash/util.c
create mode 100644 libethash/util.h
create mode 100644 libethash/util_win32.c
create mode 100644 libethashseal/CMakeLists.txt
create mode 100644 libethashseal/Ethash.cpp
create mode 100644 libethashseal/Ethash.h
create mode 100644 libethashseal/EthashAux.cpp
create mode 100644 libethashseal/EthashAux.h
create mode 100644 libethashseal/EthashCPUMiner.cpp
create mode 100644 libethashseal/EthashCPUMiner.h
create mode 100644 libethashseal/EthashClient.cpp
create mode 100644 libethashseal/EthashClient.h
create mode 100644 libethashseal/EthashProofOfWork.cpp
create mode 100644 libethashseal/EthashProofOfWork.h
create mode 100644 libethashseal/GenesisInfo.cpp
create mode 100644 libethashseal/GenesisInfo.h
create mode 100644 libethashseal/genesis/CMakeLists.txt
create mode 100644 libethashseal/genesis/mainNetwork.cpp
create mode 100644 libethashseal/genesis/ropsten.cpp
create mode 100644 libethashseal/genesis/test/CMakeLists.txt
create mode 100644 libethashseal/genesis/test/EIP158ToByzantiumAt5Test.cpp
create mode 100644 libethashseal/genesis/test/byzantiumTest.cpp
create mode 100644 libethashseal/genesis/test/byzantiumTransitionTest.cpp
create mode 100644 libethashseal/genesis/test/constantinopleTest.cpp
create mode 100644 libethashseal/genesis/test/constantinopleTransitionTest.cpp
create mode 100644 libethashseal/genesis/test/eip150Test.cpp
create mode 100644 libethashseal/genesis/test/eip158Test.cpp
create mode 100644 libethashseal/genesis/test/frontierNoProofTest.cpp
create mode 100644 libethashseal/genesis/test/frontierTest.cpp
create mode 100644 libethashseal/genesis/test/frontierToHomesteadAt5Test.cpp
create mode 100644 libethashseal/genesis/test/homesteadTest.cpp
create mode 100644 libethashseal/genesis/test/homesteadToDaoAt5Test.cpp
create mode 100644 libethashseal/genesis/test/homesteadToEIP150At5Test.cpp
create mode 100644 libethashseal/genesis/test/mainNetworkNoProofTest.cpp
create mode 100644 libethashseal/genesis/test/mainNetworkTest.cpp
create mode 100644 libethashseal/genesis/test/transitionnetTest.cpp
create mode 100644 libethcore/ABI.cpp
create mode 100644 libethcore/ABI.h
create mode 100644 libethcore/BasicAuthority.cpp
create mode 100644 libethcore/BasicAuthority.h
create mode 100644 libethcore/BlockHeader.cpp
create mode 100644 libethcore/BlockHeader.h
create mode 100644 libethcore/CMakeLists.txt
create mode 100644 libethcore/ChainOperationParams.cpp
create mode 100644 libethcore/ChainOperationParams.h
create mode 100644 libethcore/Common.cpp
create mode 100644 libethcore/Common.h
create mode 100644 libethcore/CommonJS.cpp
create mode 100644 libethcore/CommonJS.h
create mode 100644 libethcore/EVMSchedule.h
create mode 100644 libethcore/Exceptions.h
create mode 100644 libethcore/KeyManager.cpp
create mode 100644 libethcore/KeyManager.h
create mode 100644 libethcore/LogEntry.cpp
create mode 100644 libethcore/LogEntry.h
create mode 100644 libethcore/Precompiled.cpp
create mode 100644 libethcore/Precompiled.h
create mode 100644 libethcore/SealEngine.cpp
create mode 100644 libethcore/SealEngine.h
create mode 100644 libethcore/Transaction.cpp
create mode 100644 libethcore/Transaction.h
create mode 100644 libethereum/Account.cpp
create mode 100644 libethereum/Account.h
create mode 100644 libethereum/BasicGasPricer.cpp
create mode 100644 libethereum/BasicGasPricer.h
create mode 100644 libethereum/Block.cpp
create mode 100644 libethereum/Block.h
create mode 100644 libethereum/BlockChain.cpp
create mode 100644 libethereum/BlockChain.h
create mode 100644 libethereum/BlockChainImporter.cpp
create mode 100644 libethereum/BlockChainImporter.h
create mode 100644 libethereum/BlockChainSync.cpp
create mode 100644 libethereum/BlockChainSync.h
create mode 100644 libethereum/BlockDetails.cpp
create mode 100644 libethereum/BlockDetails.h
create mode 100644 libethereum/BlockQueue.cpp
create mode 100644 libethereum/BlockQueue.h
create mode 100644 libethereum/CMakeLists.txt
create mode 100644 libethereum/ChainParams.cpp
create mode 100644 libethereum/ChainParams.h
create mode 100644 libethereum/Client.cpp
create mode 100644 libethereum/Client.h
create mode 100644 libethereum/ClientBase.cpp
create mode 100644 libethereum/ClientBase.h
create mode 100644 libethereum/ClientTest.cpp
create mode 100644 libethereum/ClientTest.h
create mode 100644 libethereum/CodeSizeCache.h
create mode 100644 libethereum/CommonNet.cpp
create mode 100644 libethereum/CommonNet.h
create mode 100644 libethereum/Defaults.cpp
create mode 100644 libethereum/Defaults.h
create mode 100644 libethereum/EthereumHost.cpp
create mode 100644 libethereum/EthereumHost.h
create mode 100644 libethereum/EthereumPeer.cpp
create mode 100644 libethereum/EthereumPeer.h
create mode 100644 libethereum/Executive.cpp
create mode 100644 libethereum/Executive.h
create mode 100644 libethereum/ExtVM.cpp
create mode 100644 libethereum/ExtVM.h
create mode 100644 libethereum/GasPricer.cpp
create mode 100644 libethereum/GasPricer.h
create mode 100644 libethereum/GenericFarm.h
create mode 100644 libethereum/GenericMiner.cpp
create mode 100644 libethereum/GenericMiner.h
create mode 100644 libethereum/GenesisInfo.cpp
create mode 100644 libethereum/GenesisInfo.h
create mode 100644 libethereum/ImportPerformanceLogger.cpp
create mode 100644 libethereum/ImportPerformanceLogger.h
create mode 100644 libethereum/Interface.cpp
create mode 100644 libethereum/Interface.h
create mode 100644 libethereum/LastBlockHashesFace.h
create mode 100644 libethereum/LogFilter.cpp
create mode 100644 libethereum/LogFilter.h
create mode 100644 libethereum/SnapshotImporter.cpp
create mode 100644 libethereum/SnapshotImporter.h
create mode 100644 libethereum/SnapshotStorage.cpp
create mode 100644 libethereum/SnapshotStorage.h
create mode 100644 libethereum/State.cpp
create mode 100644 libethereum/State.h
create mode 100644 libethereum/StateImporter.cpp
create mode 100644 libethereum/StateImporter.h
create mode 100644 libethereum/SystemContract.cpp
create mode 100644 libethereum/SystemContract.h
create mode 100644 libethereum/SystemContractApi.cpp
create mode 100644 libethereum/SystemContractApi.h
create mode 100644 libethereum/Transaction.cpp
create mode 100644 libethereum/Transaction.h
create mode 100644 libethereum/TransactionQueue.cpp
create mode 100644 libethereum/TransactionQueue.h
create mode 100644 libethereum/TransactionReceipt.cpp
create mode 100644 libethereum/TransactionReceipt.h
create mode 100644 libethereum/VerifiedBlock.h
create mode 100644 libevm/CMakeLists.txt
create mode 100644 libevm/ExtVMFace.cpp
create mode 100644 libevm/ExtVMFace.h
create mode 100644 libevm/Instruction.cpp
create mode 100644 libevm/Instruction.h
create mode 100644 libevm/JitVM.cpp
create mode 100644 libevm/JitVM.h
create mode 100644 libevm/SmartVM.cpp
create mode 100644 libevm/SmartVM.h
create mode 100644 libevm/VM.cpp
create mode 100644 libevm/VM.h
create mode 100644 libevm/VMCalls.cpp
create mode 100644 libevm/VMConfig.h
create mode 100644 libevm/VMFace.h
create mode 100644 libevm/VMFactory.cpp
create mode 100644 libevm/VMFactory.h
create mode 100644 libevm/VMOpt.cpp
create mode 100644 libevm/VMSIMD.cpp
create mode 100644 libevm/VMValidate.cpp
create mode 100644 libp2p/All.h
create mode 100644 libp2p/CMakeLists.txt
create mode 100644 libp2p/Capability.cpp
create mode 100644 libp2p/Capability.h
create mode 100644 libp2p/Common.cpp
create mode 100644 libp2p/Common.h
create mode 100644 libp2p/Host.cpp
create mode 100644 libp2p/Host.h
create mode 100644 libp2p/HostCapability.cpp
create mode 100644 libp2p/HostCapability.h
create mode 100644 libp2p/Network.cpp
create mode 100644 libp2p/Network.h
create mode 100644 libp2p/NodeTable.cpp
create mode 100644 libp2p/NodeTable.h
create mode 100644 libp2p/Peer.cpp
create mode 100644 libp2p/Peer.h
create mode 100644 libp2p/RLPXFrameCoder.cpp
create mode 100644 libp2p/RLPXFrameCoder.h
create mode 100644 libp2p/RLPXFrameReader.cpp
create mode 100644 libp2p/RLPXFrameReader.h
create mode 100644 libp2p/RLPXFrameWriter.cpp
create mode 100644 libp2p/RLPXFrameWriter.h
create mode 100644 libp2p/RLPXPacket.h
create mode 100644 libp2p/RLPXSocket.h
create mode 100644 libp2p/RLPXSocketIO.cpp
create mode 100644 libp2p/RLPXSocketIO.h
create mode 100644 libp2p/RLPxHandshake.cpp
create mode 100644 libp2p/RLPxHandshake.h
create mode 100644 libp2p/Session.cpp
create mode 100644 libp2p/Session.h
create mode 100644 libp2p/UDP.cpp
create mode 100644 libp2p/UDP.h
create mode 100644 libp2p/UPnP.cpp
create mode 100644 libp2p/UPnP.h
create mode 100644 libweb3jsonrpc/AccountHolder.cpp
create mode 100644 libweb3jsonrpc/AccountHolder.h
create mode 100644 libweb3jsonrpc/AdminEth.cpp
create mode 100644 libweb3jsonrpc/AdminEth.h
create mode 100644 libweb3jsonrpc/AdminEthFace.h
create mode 100644 libweb3jsonrpc/AdminNet.cpp
create mode 100644 libweb3jsonrpc/AdminNet.h
create mode 100644 libweb3jsonrpc/AdminNetFace.h
create mode 100644 libweb3jsonrpc/AdminUtils.cpp
create mode 100644 libweb3jsonrpc/AdminUtils.h
create mode 100644 libweb3jsonrpc/AdminUtilsFace.h
create mode 100644 libweb3jsonrpc/CMakeLists.txt
create mode 100644 libweb3jsonrpc/DBFace.h
create mode 100644 libweb3jsonrpc/Debug.cpp
create mode 100644 libweb3jsonrpc/Debug.h
create mode 100644 libweb3jsonrpc/DebugFace.h
create mode 100644 libweb3jsonrpc/Eth.cpp
create mode 100644 libweb3jsonrpc/Eth.h
create mode 100644 libweb3jsonrpc/EthFace.h
create mode 100644 libweb3jsonrpc/IpcServer.h
create mode 100644 libweb3jsonrpc/IpcServerBase.cpp
create mode 100644 libweb3jsonrpc/IpcServerBase.h
create mode 100644 libweb3jsonrpc/JsonHelper.cpp
create mode 100644 libweb3jsonrpc/JsonHelper.h
create mode 100644 libweb3jsonrpc/LevelDB.cpp
create mode 100644 libweb3jsonrpc/LevelDB.h
create mode 100644 libweb3jsonrpc/MemoryDB.cpp
create mode 100644 libweb3jsonrpc/MemoryDB.h
create mode 100644 libweb3jsonrpc/ModularServer.h
create mode 100644 libweb3jsonrpc/Net.cpp
create mode 100644 libweb3jsonrpc/Net.h
create mode 100644 libweb3jsonrpc/NetFace.h
create mode 100644 libweb3jsonrpc/Personal.cpp
create mode 100644 libweb3jsonrpc/Personal.h
create mode 100644 libweb3jsonrpc/PersonalFace.h
create mode 100644 libweb3jsonrpc/SafeHttpServer.cpp
create mode 100644 libweb3jsonrpc/SafeHttpServer.h
create mode 100644 libweb3jsonrpc/SessionManager.cpp
create mode 100644 libweb3jsonrpc/SessionManager.h
create mode 100644 libweb3jsonrpc/Test.cpp
create mode 100644 libweb3jsonrpc/Test.h
create mode 100644 libweb3jsonrpc/TestFace.h
create mode 100644 libweb3jsonrpc/UnixSocketServer.cpp
create mode 100644 libweb3jsonrpc/UnixSocketServer.h
create mode 100644 libweb3jsonrpc/Web3.cpp
create mode 100644 libweb3jsonrpc/Web3.h
create mode 100644 libweb3jsonrpc/Web3Face.h
create mode 100644 libweb3jsonrpc/Whisper.cpp
create mode 100644 libweb3jsonrpc/Whisper.h
create mode 100644 libweb3jsonrpc/WhisperFace.h
create mode 100644 libweb3jsonrpc/WinPipeServer.cpp
create mode 100644 libweb3jsonrpc/WinPipeServer.h
create mode 100644 libweb3jsonrpc/admin_eth.json
create mode 100644 libweb3jsonrpc/admin_net.json
create mode 100644 libweb3jsonrpc/admin_utils.json
create mode 100644 libweb3jsonrpc/db.json
create mode 100644 libweb3jsonrpc/debug.json
create mode 100644 libweb3jsonrpc/eth.json
create mode 100644 libweb3jsonrpc/net.json
create mode 100644 libweb3jsonrpc/personal.json
create mode 100644 libweb3jsonrpc/test.json
create mode 100644 libweb3jsonrpc/web3.json
create mode 100644 libweb3jsonrpc/whisper.json
create mode 100644 libwebthree/CMakeLists.txt
create mode 100644 libwebthree/WebThree.cpp
create mode 100644 libwebthree/WebThree.h
create mode 100644 libwhisper/BloomFilter.h
create mode 100644 libwhisper/CMakeLists.txt
create mode 100644 libwhisper/Common.cpp
create mode 100644 libwhisper/Common.h
create mode 100644 libwhisper/Interface.cpp
create mode 100644 libwhisper/Interface.h
create mode 100644 libwhisper/Message.cpp
create mode 100644 libwhisper/Message.h
create mode 100644 libwhisper/WhisperDB.cpp
create mode 100644 libwhisper/WhisperDB.h
create mode 100644 libwhisper/WhisperHost.cpp
create mode 100644 libwhisper/WhisperHost.h
create mode 100644 libwhisper/WhisperPeer.cpp
create mode 100644 libwhisper/WhisperPeer.h
create mode 100644 refilltests
create mode 100644 rlp/CMakeLists.txt
create mode 100644 rlp/main.cpp
create mode 100644 sanitizer-blacklist.txt
create mode 100644 scripts/Dockerfile
create mode 100644 scripts/build.sh
create mode 100644 scripts/cleanup_ccache.sh
create mode 100644 scripts/docker-eth
create mode 100644 scripts/docker/cpp-build-env.dockerfile
create mode 100644 scripts/docker/eth-alpine/Dockerfile
create mode 100644 scripts/docker/eth-centos/Dockerfile
create mode 100644 scripts/docker/eth-debian/Dockerfile
create mode 100644 scripts/docker/eth-fedora/Dockerfile
create mode 100644 scripts/duplicates.sh
create mode 100644 scripts/install_cmake.sh
create mode 100644 scripts/install_deps.bat
create mode 100644 scripts/install_deps.sh
create mode 100644 scripts/install_solc_lllc.sh
create mode 100644 scripts/ppabuild.sh
create mode 100644 scripts/prepare_ccache.sh
create mode 100644 scripts/release.bat
create mode 100644 scripts/release.sh
create mode 100644 scripts/runalltests.sh
create mode 100644 scripts/tests.bat
create mode 100644 scripts/tests.sh
create mode 100644 scripts/upload-homebrew-formula.sh
create mode 100644 snapcraft.yaml
create mode 100644 test/CMakeLists.txt
create mode 100644 test/tools/fuzzTesting/createRandomTest.cpp
create mode 100644 test/tools/fuzzTesting/fuzzHelper.cpp
create mode 100644 test/tools/fuzzTesting/fuzzHelper.h
create mode 100644 test/tools/jsontests/BlockChainTests.cpp
create mode 100644 test/tools/jsontests/BlockChainTests.h
create mode 100644 test/tools/jsontests/StateTests.cpp
create mode 100644 test/tools/jsontests/StateTests.h
create mode 100644 test/tools/jsontests/TransactionTests.cpp
create mode 100644 test/tools/jsontests/vm.cpp
create mode 100644 test/tools/jsontests/vm.h
create mode 100644 test/tools/libtesteth/BlockChainHelper.cpp
create mode 100644 test/tools/libtesteth/BlockChainHelper.h
create mode 100644 test/tools/libtesteth/FillJsonFunctions.cpp
create mode 100644 test/tools/libtesteth/ImportTest.cpp
create mode 100644 test/tools/libtesteth/ImportTest.h
create mode 100644 test/tools/libtesteth/JsonSpiritHeaders.h
create mode 100644 test/tools/libtesteth/Options.cpp
create mode 100644 test/tools/libtesteth/Options.h
create mode 100644 test/tools/libtesteth/Stats.cpp
create mode 100644 test/tools/libtesteth/Stats.h
create mode 100644 test/tools/libtesteth/TestHelper.cpp
create mode 100644 test/tools/libtesteth/TestHelper.h
create mode 100644 test/tools/libtesteth/TestOutputHelper.cpp
create mode 100644 test/tools/libtesteth/TestOutputHelper.h
create mode 100644 test/tools/libtesteth/TestSuite.cpp
create mode 100644 test/tools/libtesteth/TestSuite.h
create mode 100644 test/tools/libtesteth/TestUtils.cpp
create mode 100644 test/tools/libtesteth/TestUtils.h
create mode 100644 test/tools/libtesteth/boostTest.cpp
create mode 100644 test/tools/libtestutils/BlockChainLoader.cpp
create mode 100644 test/tools/libtestutils/BlockChainLoader.h
create mode 100644 test/tools/libtestutils/Common.cpp
create mode 100644 test/tools/libtestutils/Common.h
create mode 100644 test/tools/libtestutils/FixedClient.cpp
create mode 100644 test/tools/libtestutils/FixedClient.h
create mode 100644 test/tools/libtestutils/TestLastBlockHashes.h
create mode 100644 test/unittests/external-dependencies/boost.cpp
create mode 100644 test/unittests/libdevcore/Base36.cpp
create mode 100644 test/unittests/libdevcore/CommonJS.cpp
create mode 100644 test/unittests/libdevcore/FixedHash.cpp
create mode 100644 test/unittests/libdevcore/RangeMask.cpp
create mode 100644 test/unittests/libdevcore/core.cpp
create mode 100644 test/unittests/libdevcore/rlp.cpp
create mode 100644 test/unittests/libdevcrypto/AES.cpp
create mode 100644 test/unittests/libdevcrypto/LibSnark.cpp
create mode 100644 test/unittests/libdevcrypto/MemTrie.cpp
create mode 100644 test/unittests/libdevcrypto/MemTrie.h
create mode 100644 test/unittests/libdevcrypto/SecretStore.cpp
create mode 100644 test/unittests/libdevcrypto/crypto.cpp
create mode 100644 test/unittests/libdevcrypto/hexPrefix.cpp
create mode 100644 test/unittests/libdevcrypto/trie.cpp
create mode 100644 test/unittests/libethashseal/EthashTest.cpp
create mode 100644 test/unittests/libethcore/PrecompiledTest.cpp
create mode 100644 test/unittests/libethcore/SealEngineTest.cpp
create mode 100644 test/unittests/libethcore/commonjs.cpp
create mode 100644 test/unittests/libethcore/dagger.cpp
create mode 100644 test/unittests/libethcore/difficulty.cpp
create mode 100644 test/unittests/libethcore/keymanager.cpp
create mode 100644 test/unittests/libethereum/Block.cpp
create mode 100644 test/unittests/libethereum/BlockChain.cpp
create mode 100644 test/unittests/libethereum/BlockChainInsert.cpp
create mode 100644 test/unittests/libethereum/BlockQueue.cpp
create mode 100644 test/unittests/libethereum/ClientBase.cpp
create mode 100644 test/unittests/libethereum/EthereumPeerTest.cpp
create mode 100644 test/unittests/libethereum/ExtVMTest.cpp
create mode 100644 test/unittests/libethereum/GasPricer.cpp
create mode 100644 test/unittests/libethereum/Genesis.cpp
create mode 100644 test/unittests/libethereum/SnapshotImporterTest.cpp
create mode 100644 test/unittests/libethereum/StateUnitTests.cpp
create mode 100644 test/unittests/libethereum/Transaction.cpp
create mode 100644 test/unittests/libethereum/TransactionQueue.cpp
create mode 100644 test/unittests/libp2p/capability.cpp
create mode 100644 test/unittests/libp2p/eip-8.cpp
create mode 100644 test/unittests/libp2p/net.cpp
create mode 100644 test/unittests/libp2p/peer.cpp
create mode 100644 test/unittests/libp2p/rlpx.cpp
create mode 100644 test/unittests/libtesteth/blockchainTest.cpp
create mode 100644 test/unittests/libweb3core/memorydb.cpp
create mode 100644 test/unittests/libweb3core/overlaydb.cpp
create mode 100644 test/unittests/libweb3jsonrpc/AccountHolder.cpp
create mode 100644 test/unittests/libweb3jsonrpc/Client.cpp
create mode 100644 test/unittests/libweb3jsonrpc/JSON_test.sol
create mode 100644 test/unittests/libweb3jsonrpc/WebThreeStubClient.h
create mode 100644 test/unittests/libweb3jsonrpc/jsonrpc.cpp
create mode 100644 test/unittests/libwhisper/bloomFilter.cpp
create mode 100644 test/unittests/libwhisper/whisperMessage.cpp
create mode 100644 test/unittests/performance/README
create mode 100644 test/unittests/performance/add128.asm
create mode 100644 test/unittests/performance/add256.asm
create mode 100644 test/unittests/performance/add64.asm
create mode 100644 test/unittests/performance/bop.sol
create mode 100644 test/unittests/performance/csv2gas.py
create mode 100644 test/unittests/performance/csv2nano.py
create mode 100644 test/unittests/performance/csv2ops.py
create mode 100644 test/unittests/performance/div128.asm
create mode 100644 test/unittests/performance/div256.asm
create mode 100644 test/unittests/performance/div64.asm
create mode 100644 test/unittests/performance/exp.asm
create mode 100644 test/unittests/performance/fun.sol
create mode 100644 test/unittests/performance/log2csv.py
create mode 100644 test/unittests/performance/loop.sol
create mode 100644 test/unittests/performance/mix.sol
create mode 100644 test/unittests/performance/mul128.asm
create mode 100644 test/unittests/performance/mul256.asm
create mode 100644 test/unittests/performance/mul64.asm
create mode 100644 test/unittests/performance/mul64c.c
create mode 100644 test/unittests/performance/nop.asm
create mode 100644 test/unittests/performance/parity-tests.sh
create mode 100644 test/unittests/performance/pop.asm
create mode 100644 test/unittests/performance/pop.sol
create mode 100644 test/unittests/performance/popcpyc.c
create mode 100644 test/unittests/performance/popincc.c
create mode 100644 test/unittests/performance/poplnkc.c
create mode 100644 test/unittests/performance/rc5.sol
create mode 100644 test/unittests/performance/rng.sol
create mode 100644 test/unittests/performance/sub128.asm
create mode 100644 test/unittests/performance/sub256.asm
create mode 100644 test/unittests/performance/sub64.asm
create mode 100644 test/unittests/performance/tests.mk
create mode 100644 test/unittests/performance/thrash.sol
create mode 100644 test/unittests/performance/top.sol
create mode 100644 utils/CMakeLists.txt
create mode 100644 utils/json_spirit/CMakeLists.txt
create mode 100644 utils/json_spirit/JsonSpiritHeaders.h
create mode 100644 utils/json_spirit/json_spirit.h
create mode 100644 utils/json_spirit/json_spirit.vcproj
create mode 100644 utils/json_spirit/json_spirit_error_position.h
create mode 100644 utils/json_spirit/json_spirit_reader.cpp
create mode 100644 utils/json_spirit/json_spirit_reader.h
create mode 100644 utils/json_spirit/json_spirit_reader_template.h
create mode 100644 utils/json_spirit/json_spirit_stream_reader.h
create mode 100644 utils/json_spirit/json_spirit_utils.h
create mode 100644 utils/json_spirit/json_spirit_value.cpp
create mode 100644 utils/json_spirit/json_spirit_value.h
create mode 100644 utils/json_spirit/json_spirit_writer.cpp
create mode 100644 utils/json_spirit/json_spirit_writer.h
create mode 100644 utils/json_spirit/json_spirit_writer_template.h
create mode 100644 utils/libscrypt/CMakeLists.txt
create mode 100644 utils/libscrypt/LICENSE
create mode 100644 utils/libscrypt/b64.c
create mode 100644 utils/libscrypt/b64.h
create mode 100644 utils/libscrypt/crypto-mcf.c
create mode 100644 utils/libscrypt/crypto-scrypt-saltgen.c
create mode 100644 utils/libscrypt/crypto_scrypt-check.c
create mode 100644 utils/libscrypt/crypto_scrypt-hash.c
create mode 100644 utils/libscrypt/crypto_scrypt-hexconvert.c
create mode 100644 utils/libscrypt/crypto_scrypt-hexconvert.h
create mode 100644 utils/libscrypt/crypto_scrypt-nosse.c
create mode 100644 utils/libscrypt/libscrypt.h
create mode 100644 utils/libscrypt/libscrypt.version
create mode 100644 utils/libscrypt/sha256.c
create mode 100644 utils/libscrypt/sha256.h
create mode 100644 utils/libscrypt/slowequals.c
create mode 100644 utils/libscrypt/slowequals.h
create mode 100644 utils/libscrypt/sysendian.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..ebc6869
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,157 @@
+#------------------------------------------------------------------------------
+# Top-level CMake file for cpp-ethereum.
+#
+# The documentation for cpp-ethereum is hosted at http://cpp-ethereum.org
+#
+# ------------------------------------------------------------------------------
+# This file is part of cpp-ethereum.
+#
+# cpp-ethereum is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cpp-ethereum is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cpp-ethereum. If not, see
+#
+# (c) 2014-2016 cpp-ethereum contributors.
+#------------------------------------------------------------------------------
+
+cmake_minimum_required(VERSION 3.5.1)
+
+if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)
+ # The default toolchain file configures compilers and build environment.
+ # This configuration is also used by hunter to build dependencies.
+ # CMake will cache this value, not need to explictly specify CACHE param.
+ set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/toolchain.cmake)
+endif()
+
+set(ETH_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/cmake" CACHE PATH "The path to the cmake directory")
+list(APPEND CMAKE_MODULE_PATH ${ETH_CMAKE_DIR})
+
+set(CPP_ETHEREUM_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Path to the root directory for cpp-ethereum")
+
+# set cmake_policies
+include(EthPolicy)
+eth_policy()
+
+if(CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "" FORCE)
+endif()
+
+set(HUNTER_CONFIGURATION_TYPES Release)
+set(HUNTER_JOBS_NUMBER 4)
+set(HUNTER_CACHE_SERVERS "https://github.com/ethereum/hunter-cache")
+include(HunterGate)
+HunterGate(
+ URL "https://github.com/ruslo/hunter/archive/v0.19.71.tar.gz"
+ SHA1 "8fe144d9490501d398777532e0c0f56bc7bb0ec7"
+)
+
+if(HUNTER_ENABLED)
+ find_package(PythonInterp QUIET)
+ if(PYTHONINTERP_FOUND)
+ hunter_gate_self(
+ "${HUNTER_CACHED_ROOT}"
+ "${HUNTER_VERSION}"
+ "${HUNTER_SHA1}"
+ hunter_dir
+ )
+ set(hunter_upload_script "${hunter_dir}/maintenance/upload-cache-to-github.py")
+ set(hunter_cache_dir "${HUNTER_GATE_ROOT}/_Base/Cache")
+ set(hunter_tmp_dir "${HUNTER_GATE_ROOT}/tmp")
+ add_custom_target(
+ hunter_upload_cache
+ ${PYTHON_EXECUTABLE} ${hunter_upload_script}
+ --username hunter-cache-bot
+ --repo-owner ethereum
+ --repo hunter-cache
+ --cache-dir ${hunter_cache_dir}
+ --temp-dir ${hunter_tmp_dir}
+ )
+ endif()
+endif()
+
+# project name and version should be set after cmake_policy CMP0048
+project(cpp-ethereum VERSION "1.3.0")
+
+if (NOT EXISTS ${CMAKE_SOURCE_DIR}/evmjit/.git)
+ message(FATAL_ERROR "Git submodules not initialized, execute:\n git submodule update --init")
+endif()
+
+set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY On)
+
+include(EthCcache)
+include(EthOptions)
+include(EthCompilerSettings)
+include(EthExecutableHelper)
+include(EthDependencies)
+include(EthUtils)
+
+hunter_add_package(Boost COMPONENTS filesystem system thread)
+find_package(Boost CONFIG REQUIRED filesystem system thread)
+
+hunter_add_package(jsoncpp)
+find_package(jsoncpp CONFIG REQUIRED)
+
+hunter_add_package(Snappy)
+find_package(Snappy CONFIG)
+
+include(ProjectCryptopp)
+include(ProjectJsonRpcCpp)
+include(ProjectSecp256k1)
+include(ProjectSnark)
+
+find_package(Threads)
+
+if(MINIUPNPC)
+ find_package(Miniupnpc 1.8.2013 REQUIRED)
+endif()
+
+configure_project()
+
+add_subdirectory(libdevcore)
+add_subdirectory(libdevcrypto)
+add_subdirectory(libp2p)
+
+add_subdirectory(libethash)
+
+add_subdirectory(libethcore)
+add_subdirectory(libevm)
+add_subdirectory(libethereum)
+add_subdirectory(libethashseal)
+
+add_subdirectory(libesipbft)
+add_subdirectory(libesipbftseal)
+add_subdirectory(libesiconsensus)
+add_subdirectory(libesiwebthree)
+
+add_subdirectory(libwhisper)
+add_subdirectory(libwebthree)
+add_subdirectory(libweb3jsonrpc)
+
+if (EVMJIT)
+ add_subdirectory(evmjit)
+endif()
+
+add_subdirectory(eth)
+add_subdirectory(esi)
+
+if (TOOLS)
+ add_subdirectory(ethkey)
+ add_subdirectory(ethvm)
+ add_subdirectory(rlp)
+endif()
+
+#if (TESTS)
+# enable_testing()
+# add_subdirectory(test)
+#endif()
+
+# TODO: Split out json_spirit, libscrypt and sec256k1.
+add_subdirectory(utils)
diff --git a/CodingStandards.txt b/CodingStandards.txt
new file mode 100644
index 0000000..ee924e7
--- /dev/null
+++ b/CodingStandards.txt
@@ -0,0 +1,254 @@
+0. Formatting
+
+GOLDEN RULE: Follow the style of the existing code when you make changes.
+
+a. Use tabs for leading indentation
+- tab stops are every 4 characters.
+- One indentation level -> exactly one byte (i.e. a tab character) in the source file.
+- If you have run-on lines, indent as you would for a block.
+b. Line widths:
+- Don't worry about having lines of code > 80-char wide.
+- Lines of comments should be formatted according to ease of viewing, but simplicity is to be preferred over beauty.
+c. Don't use braces for condition-body one-liners.
+d. Never place condition bodies on same line as condition.
+e. Space between first paren and keyword, but *not* following first paren or preceding final paren.
+f. No spaces when fewer than intra-expression three parens together; when three or more, space according to clarity.
+g. No spaces for subscripting or unary operators.
+h. No space before ':' but one after it, except in the ternary operator: one on both sides.
+i. Space all other operators.
+j. Braces, when used, always have their own lines and are at same indentation level as "parent" scope.
+
+(WRONG)
+if( a==b[ i ] ) { printf ("Hello\n"); }
+foo->bar(someLongVariableName,
+ anotherLongVariableName,
+ anotherLongVariableName,
+ anotherLongVariableName,
+ anotherLongVariableName);
+
+(RIGHT)
+if (a == b[i])
+ printf("Hello\n"); // NOTE spaces used instead of tab here for clarity - first byte should be '\t'.
+foo->bar(
+ someLongVariableName,
+ anotherLongVariableName,
+ anotherLongVariableName,
+ anotherLongVariableName,
+ anotherLongVariableName
+);
+
+
+
+1. Namespaces;
+
+a. No "using namespace" declarations in header files.
+b. All symbols should be declared in a namespace except for final applications.
+c. Preprocessor symbols should be prefixed with the namespace in all-caps and an underscore.
+
+(WRONG)
+#include
+using namespace std;
+tuple meanAndSigma(vector const& _v);
+
+(CORRECT)
+#include
+std::tuple meanAndSigma(std::vector const& _v);
+
+
+
+2. Preprocessor;
+
+a. File comment is always at top, and includes:
+- Copyright.
+- License (e.g. see COPYING).
+b. Never use #ifdef/#define/#endif file guards. Prefer #pragma once as first line below file comment.
+c. Prefer static const variable to value macros.
+d. Prefer inline constexpr functions to function macros.
+e. Split complex macro on multiple lines with '\'.
+
+
+
+3. Capitalization;
+
+GOLDEN RULE: Preprocessor: ALL_CAPS; C++: camelCase.
+
+a. Use camelCase for splitting words in names, except where obviously extending STL/boost functionality in which case follow those naming conventions.
+b. The following entities' first alpha is upper case:
+- Type names.
+- Template parameters.
+- Enum members.
+- static const variables that form an external API.
+c. All preprocessor symbols (macros, macro arguments) in full uppercase with underscore word separation.
+
+
+All other entities' first alpha is lower case.
+
+
+
+4. Variable prefixes:
+
+a. Leading underscore "_" to parameter names.
+- Exception: "o_parameterName" when it is used exclusively for output. See 6(f).
+- Exception: "io_parameterName" when it is used for both input and output. See 6(f).
+b. Leading "c_" to const variables (unless part of an external API).
+c. Leading "g_" to global (non-const) variables.
+d. Leading "s_" to static (non-const, non-global) variables.
+
+
+
+5. Error reporting:
+
+- Prefer exception to bool/int return type.
+
+
+
+6. Declarations:
+
+a. {Typename} + {qualifiers} + {name}.
+b. Only one per line.
+c. Associate */& with type, not variable (at ends with parser, but more readable, and safe if in conjunction with (b)).
+d. Favour declarations close to use; don't habitually declare at top of scope ala C.
+e. Always pass non-trivial parameters with a const& suffix.
+f. If a function returns multiple values, use std::tuple (std::pair acceptable). Prefer not using */& arguments, except where efficiency requires.
+g. Never use a macro where adequate non-preprocessor C++ can be written.
+h. Make use of auto whenever type is clear or unimportant:
+- Always avoid doubly-stating the type.
+- Use to avoid vast and unimportant type declarations.
+- However, avoid using auto where type is not immediately obvious from the context, and especially not for arithmetic expressions.
+i. Don't pass bools: prefer enumerations instead.
+j. Prefer enum class to straight enum.
+
+
+(WRONG)
+const double d = 0;
+int i, j;
+char *s;
+float meanAndSigma(std::vector _v, float* _sigma, bool _approximate);
+Derived* x(dynamic_cast(base));
+for (map::iterator i = l.begin(); i != l.end(); ++l) {}
+
+
+(CORRECT)
+enum class Accuracy
+{
+ Approximate,
+ Exact
+};
+double const d = 0;
+int i;
+int j;
+char* s;
+std::tuple meanAndSigma(std::vector const& _v, Accuracy _a);
+auto x = dynamic_cast(base);
+for (auto i = x.begin(); i != x.end(); ++i) {}
+
+
+7. Structs & classes
+
+a. Structs to be used when all members public and no virtual functions.
+- In this case, members should be named naturally and not prefixed with 'm_'
+b. Classes to be used in all other circumstances.
+
+
+
+8. Members:
+
+a. One member per line only.
+b. Private, non-static, non-const fields prefixed with m_.
+c. Avoid public fields, except in structs.
+d. Use override, final and const as much as possible.
+e. No implementations with the class declaration, except:
+- template or force-inline method (though prefer implementation at bottom of header file).
+- one-line implementation (in which case include it in same line as declaration).
+f. For a property 'foo'
+- Member: m_foo;
+- Getter: foo() [ also: for booleans, isFoo() ];
+- Setter: setFoo();
+
+
+
+9. Naming
+
+a. Collection conventions:
+- -s means std::vector e.g. using MyTypes = std::vector
+- -Set means std::set e.g. using MyTypeSet = std::set
+- -Hash means std::unordered_set e.g. using MyTypeHash = std::unordered_set
+b. Class conventions:
+- -Face means the interface of some shared concept. (e.g. FooFace might be a pure virtual class.)
+c. Avoid unpronouncable names;
+- If you need to shorten a name favour a pronouncable slice of the original to a scattered set of consonants.
+- e.g. Manager shortens to Man rather than Mgr.
+d. Avoid prefixes of initials (e.g. DON'T use IMyInterface, CMyImplementation)
+e. Find short, memorable & (at least semi-) descriptive names for commonly used classes or name-fragments.
+- A dictionary and thesaurus are your friends.
+- Spell correctly.
+- Think carefully about the class's purpose.
+- Imagine it as an isolated component to try to decontextualise it when considering its name.
+- Don't be trapped into naming it (purely) in terms of its implementation.
+
+
+
+10. Type-definitions
+
+a. Prefer 'using' to 'typedef'. e.g. using ints = std::vector; rather than typedef std::vector ints;
+b. Generally avoid shortening a standard form that already includes all important information:
+- e.g. stick to shared_ptr rather than shortening to ptr.
+c. Where there are exceptions to this (due to excessive use and clear meaning), note the change prominently and use it consistently.
+- e.g. using Guard = std::lock_guard; ///< Guard is used throughout the codebase since it's clear in meaning and used commonly.
+d. In general expressions should be roughly as important/semantically meaningful as the space they occupy.
+
+
+
+11. Commenting
+
+a. Comments should be doxygen-compilable, using @notation rather than \notation.
+b. Document the interface, not the implementation.
+- Documentation should be able to remain completely unchanged, even if the method is reimplemented.
+- Comment in terms of the method properties and intended alteration to class state (or what aspects of the state it reports).
+- Be careful to scrutinise documentation that extends only to intended purpose and usage.
+- Reject documentation that is simply an English transaction of the implementation.
+
+
+
+12. Include Headers
+
+Includes should go in increasing order of generality (libethereum -> libethcore -> libdevcrypto -> libdevcore -> boost -> STL). For example:
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+See http://stackoverflow.com/questions/614302/c-header-order/614333#614333 for the reason: this makes it easier to find missing includes in header files.
+
+
+
+13. Logging
+
+Logging should be performed at appropriate verbosities depending on the logging message.
+The more likely a message is to repeat (and thus cause noise) the higher in verbosity it should be.
+Some rules to keep in mind:
+
+ - Verbosity == 0 -> Reserved for important stuff that users must see and can understand.
+ - Verbosity == 1 -> Reserved for stuff that users don't need to see but can understand.
+ - Verbosity >= 2 -> Anything that is or might be displayed more than once every minute
+ - Verbosity >= 3 -> Anything that only a developer would understand
+ - Verbosity >= 4 -> Anything that is low-level (e.g. peer disconnects, timers being cancelled)
+
+
+14. Recommended reading
+
+Herb Sutter and Bjarne Stroustrup
+- "C++ Core Guidelines" (https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md)
+
+Herb Sutter and Andrei Alexandrescu
+- "C++ Coding Standards: 101 Rules, Guidelines, and Best Practices"
+
+Scott Meyers
+- "Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)"
+- "More Effective C++: 35 New Ways to Improve Your Programs and Designs"
+- "Effective Modern C++: 42 Specific Ways to Improve Your Use of C++11 and C++14"
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f20c36f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,673 @@
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..eb78b98
--- /dev/null
+++ b/README.md
@@ -0,0 +1,165 @@
+# cpp-ethereum - Ethereum C++ client
+
+This repository contains [cpp-ethereum](http://cpp-ethereum.org), the [Ethereum](https://ethereum.org) C++ client.
+
+It is the third most popular of the Ethereum clients, behind [geth](https://github.com/ethereum/go-ethereum) (the [go](https://golang.org)
+client) and [Parity](https://github.com/ethcore/parity) (the [rust](https://www.rust-lang.org/) client). The code is exceptionally
+[portable](http://cpp-ethereum.org/portability.html) and has been used successfully on a very broad range
+of operating systems and hardware.
+
+
+## Contact
+
+[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/ethereum/cpp-ethereum)
+[![GitHub Issues](https://img.shields.io/github/issues-raw/badges/shields.svg)](https://github.com/ethereum/cpp-ethereum/issues)
+
+- Chat in [cpp-ethereum channel on Gitter](https://gitter.im/ethereum/cpp-ethereum).
+- Report bugs, issues or feature requests using [GitHub issues](issues/new).
+
+
+## Getting Started
+
+The Ethereum Documentation site hosts the **[cpp-ethereum homepage](http://cpp-ethereum.org)**, which
+has a Quick Start section.
+
+
+Operating system | Status
+---------------- | ----------
+Ubuntu and macOS | [![TravisCI](https://img.shields.io/travis/ethereum/cpp-ethereum/develop.svg)](https://travis-ci.org/ethereum/cpp-ethereum)
+Windows | [![AppVeyor](https://img.shields.io/appveyor/ci/ethereum/cpp-ethereum/develop.svg)](https://ci.appveyor.com/project/ethereum/cpp-ethereum)
+
+
+## Building from source
+
+### Get the source code
+
+Git and GitHub is used to maintain the source code. Clone the repository by:
+
+```shell
+git clone --recursive https://github.com/ethereum/cpp-ethereum.git
+cd cpp-ethereum
+```
+
+The `--recursive` option is important. It orders git to clone additional
+submodules which are required to build the project.
+If you missed it you can correct your mistake with command
+`git submodule update --init`.
+
+### Install CMake
+
+CMake is used to control the build configuration of the project. Quite recent
+version of CMake is required
+(at the time of writing [3.4.3 is the minimum](CMakeLists.txt#L25)).
+We recommend installing CMake by downloading and unpacking the binary
+distribution of the latest version available on the
+[**CMake download page**](https://cmake.org/download/).
+
+The CMake package available in your operating system can also be installed
+and used if it meets the minimum version requirement.
+
+> **Alternative method**
+>
+> The repository contains the
+[scripts/install_cmake.sh](scripts/install_cmake.sh) script that downloads
+> a fixed version of CMake and unpacks it to the given directory prefix.
+> Example usage: `scripts/install_cmake.sh --prefix /usr/local`.
+
+### Install dependencies (Linux, macOS)
+
+The following *libraries* are required to be installed in the system in their
+development variant:
+
+- leveldb
+- microhttpd
+
+They usually can be installed using system-specific package manager.
+Examples for some systems:
+
+Operating system | Installation command
+---------------- | --------------------
+Debian-based | `sudo apt-get install libleveldb-dev libmicrohttpd-dev`
+RedHat-based | `dnf install leveldb-devel libmicrohttpd-devel`
+macOS | `brew install leveldb libmicrohttpd`
+
+
+We also support a "one-button" shell script
+[scripts/install_deps.sh](scripts/install_deps.sh)
+which attempts to aggregate dependencies installation instructions for Unix-like
+operating systems. It identifies your distro and installs the external packages.
+Supporting the script is non-trivial task so please [inform us](#contact)
+if it does not work for your use-case.
+
+### Install dependencies (Windows)
+
+We provide prebuilt dependencies required to build the project. Download them
+with the [scripts/install_deps.bat](scripts/install_deps.bat) script.
+
+```shell
+scripts/install_deps.bat
+```
+
+### Build
+
+Configure the project build with the following command. It will create the
+`build` directory with the configuration.
+
+```shell
+mkdir build; cd build # Create a build directory.
+cmake .. # Configure the project.
+cmake --build . # Build all default targets.
+```
+
+On **Windows** Visual Studio 2015 is required. You should generate Visual Studio
+solution file (.sln) for 64-bit architecture by adding
+`-G "Visual Studio 14 2015 Win64"` argument to the CMake configure command.
+After configuration is completed the `cpp-ethereum.sln` can be found in the
+`build` directory.
+
+```shell
+cmake .. -G "Visual Studio 14 2015 Win64"
+```
+
+## Contributing
+
+[![Contributors](https://img.shields.io/github/contributors/ethereum/cpp-ethereum.svg)](https://github.com/ethereum/cpp-ethereum/graphs/contributors)
+[![Gitter](https://img.shields.io/gitter/room/nwjs/nw.js.svg)](https://gitter.im/ethereum/cpp-ethereum)
+[![up-for-grabs](https://img.shields.io/github/issues-raw/ethereum/cpp-ethereum/up-for-grabs.svg)](https://github.com/ethereum/cpp-ethereum/labels/up-for-grabs)
+
+The current codebase is the work of many, many hands, with nearly 100
+[individual contributors](https://github.com/ethereum/cpp-ethereum/graphs/contributors) over the course of its development.
+
+Our day-to-day development chat happens on the
+[cpp-ethereum](https://gitter.im/ethereum/cpp-ethereum) Gitter channel.
+
+All contributions are welcome! We try to keep a list of tasks that are suitable
+for newcomers under the tag
+[up-for-grabs](https://github.com/ethereum/cpp-ethereum/labels/up-for-grabs).
+If you have any questions, please just ask.
+
+Please read [CodingStandards.txt](CodingStandards.txt) thoroughly before making
+alterations to the code base.
+
+All development goes in develop branch.
+
+
+## Mining
+
+This project is **not suitable for Ethereum mining**. The support for GPU mining
+has been dropped some time ago including the ethminer tool. Use the ethminer tool from https://github.com/ethereum-mining/ethminer.
+
+## Testing
+
+To run the tests, make sure you clone https://github.com/ethereum/tests and point the environment variable
+`ETHEREUM_TEST_PATH` to that path.
+
+## Documentation
+
+- [Internal documentation for developers](doc/index.rst).
+- [Outdated documentation for end users](http://www.ethdocs.org/en/latest/ethereum-clients/cpp-ethereum/).
+
+
+## License
+
+[![License](https://img.shields.io/github/license/ethereum/cpp-ethereum.svg)](LICENSE)
+
+All contributions are made under the [GNU General Public License v3](https://www.gnu.org/licenses/gpl-3.0.en.html). See [LICENSE](LICENSE).
diff --git a/appveyor.yml b/appveyor.yml
new file mode 100644
index 0000000..0b6f72e
--- /dev/null
+++ b/appveyor.yml
@@ -0,0 +1,111 @@
+#------------------------------------------------------------------------------
+# Appveyor configuration file for cpp-ethereum.
+#
+# The documentation for cpp-ethereum is hosted at http://cpp-ethereum.org
+#
+# ------------------------------------------------------------------------------
+# This file is part of cpp-ethereum.
+#
+# cpp-ethereum is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cpp-ethereum is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cpp-ethereum. If not, see
+#
+# (c) 2016 cpp-ethereum contributors.
+#------------------------------------------------------------------------------
+
+branches:
+ only:
+ - master
+ - develop
+ - appveyor
+ - hunter
+os: Visual Studio 2015
+configuration:
+ - RelWithDebInfo
+environment:
+ TESTS: On
+ GITHUB_USER_PASSWORD:
+ secure: 7TuNppxpvI3M/IF1PfvzZ8LluCeCQAsdFoJY+KhNv/pe/rAw5HEsTjqdbyM1mEtd
+clone_script:
+# We have to overwrite the clone script to update submodules before
+# the cache invalidation check.
+ - ps: |
+ if(-not $env:appveyor_pull_request_number) {
+ git clone -q --depth 1 --branch=$env:appveyor_repo_branch https://github.com/$env:appveyor_repo_name.git $env:appveyor_build_folder
+ git checkout -qf $env:appveyor_repo_commit
+ git submodule -q update --init --recursive
+ } else {
+ git clone -q --depth 1 https://github.com/$env:appveyor_repo_name.git $env:appveyor_build_folder
+ git fetch -q origin +refs/pull/$env:appveyor_pull_request_number/merge:
+ git checkout -qf FETCH_HEAD
+ git submodule -q update --init --recursive
+ }
+cache:
+ - build/deps -> cmake/ProjectJsonRpc.cmake
+#RDP LOGIN details for trouble shooting
+#init:
+# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
+#on_finish:
+# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
+install:
+ - scripts/install_deps.bat
+ - set ETHEREUM_DEPS_PATH=%APPVEYOR_BUILD_FOLDER%\deps
+before_build:
+ - if not exist build mkdir build
+ - cd build
+ - cmake -G "Visual Studio 14 2015 Win64" .. -DTESTS=%TESTS% -DEVMJIT=OFF
+build_script:
+ - msbuild cpp-ethereum.sln /p:Configuration=%CONFIGURATION% /m:%NUMBER_OF_PROCESSORS% /v:minimal
+ - cd %APPVEYOR_BUILD_FOLDER%
+ - scripts\release.bat %CONFIGURATION% %ETHEREUM_DEPS_PATH% %TESTS%
+after_build:
+ ps: |
+ if (-not $env:appveyor_pull_request_number) {
+ pip install requests
+ cmake --build build --target hunter_upload_cache
+ }
+test_script:
+ - cd %APPVEYOR_BUILD_FOLDER%
+ - scripts\tests.bat %TESTS% %CONFIGURATION% %APPVEYOR_BUILD_FOLDER% %ETHEREUM_DEPS_PATH%
+artifacts:
+ - path: cpp-ethereum-windows.zip
+ name: cpp-ethereum-windows-zip
+
+# This is the deploy target for Windows which generates ZIPs per commit.
+# We are in agreement that generating ZIPs per commit for the develop
+# branch is probably just noise, so we only run this deployment target
+# on 'release'.
+#
+# See https://www.appveyor.com/docs/deployment/github for information
+# on GitHub Releases in Appveyor.
+#
+# You need to generate a GitHub personal access token for Appveyor
+# See https://github.com/settings/tokens for more information on that.
+# The token you generate there (in an encrypted form) is what is
+# passed to this deployment target in the 'auth_token' parameter
+# below.
+deploy:
+ prerelease: true
+ provider: GitHub
+ auth_token:
+ secure: yukM9mHUbzuZSS5WSBLKSW0yGJerJEqAXkFhDhSHBBcKJE7GAryjQsdO9Kxh3yRv
+ artifact: cpp-ethereum-windows-zip
+ on:
+ branch: release
+
+# Disable slightly annoying AppVeyorBot. The comments it adds onto Github issues are
+# redundant with the "Checks Passed/Failure" detail which is already on the issues.
+notifications:
+ - provider: GitHubPullRequest
+ on_build_success: false
+ on_build_failure: false
+ on_build_status_changed: false
diff --git a/circle.yml b/circle.yml
new file mode 100644
index 0000000..f38d29a
--- /dev/null
+++ b/circle.yml
@@ -0,0 +1,73 @@
+version: 2
+jobs:
+ build:
+ docker:
+ - image: ethereum/cpp-build-env:experimental
+ working_directory: ~/cpp-ethereum
+ steps:
+ - checkout
+
+ - run:
+ name: "Init submodules"
+ command: git submodule update --init
+
+ - cache-restore:
+ name: "Restore dependencies cache"
+ key: deps-4-{{ checksum "cmake/ProjectJsonRpcCpp.cmake" }}
+
+ - run:
+ name: "Configure"
+ command: |
+ mkdir -p build && cd build
+ cmake .. -G Ninja -DCOVERAGE=ON -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang
+
+ - run:
+ name: "Upload Hunter cache"
+ command: |
+ if [ ! "$CIRCLE_PR_NUMBER" ]; then # Skip forked PRs.
+ cmake --build build --target hunter_upload_cache
+ fi
+
+ - run:
+ name: "Build"
+ pwd: ~/cpp-ethereum/build
+ command: |
+ ninja -j8
+
+ - cache-save:
+ name: "Save dependencies cache"
+ key: deps-4-{{ checksum "cmake/ProjectJsonRpcCpp.cmake" }}
+ paths:
+ - ~/cpp-ethereum/build/deps
+
+ - store_artifacts:
+ path: build/eth/eth
+ destination: eth
+
+ - cache-restore:
+ name: "Restore Ethash DAG file"
+ key: ethash-dag0
+
+ - run:
+ name: "Test"
+ pwd: ~/cpp-ethereum/build
+ command: |
+ export ETHEREUM_TEST_PATH=~/cpp-ethereum/test/jsontests
+ export TMPDIR=/dev/shm
+ test/testeth -t BlockchainTests &
+ test/testeth -t StateTestsGeneral &
+ test/testeth -t 'KeyStore:Crypto:KeyManagerTests' &
+ test/testeth -t '!BlockchainTests:!StateTestsGeneral:!KeyStore:!Crypto:!KeyManagerTests' &
+ wait
+
+ - cache-save:
+ name: "Save Ethash DAG file"
+ key: ethash-dag0
+ paths:
+ - ~/.ethash/full-R23-0000000000000000
+
+ - run:
+ name: "Code coverage"
+ pwd: ~/cpp-ethereum/build
+ command: |
+ bash <(curl -s https://codecov.io/bash) -X fix
diff --git a/cmake/EthBuildInfo.cmake b/cmake/EthBuildInfo.cmake
new file mode 100644
index 0000000..9a132e3
--- /dev/null
+++ b/cmake/EthBuildInfo.cmake
@@ -0,0 +1,53 @@
+function(create_build_info)
+
+ # Set build platform; to be written to BuildInfo.h
+ set(ETH_BUILD_OS "${CMAKE_SYSTEM_NAME}")
+
+ if (CMAKE_COMPILER_IS_MINGW)
+ set(ETH_BUILD_COMPILER "mingw")
+ elseif (CMAKE_COMPILER_IS_MSYS)
+ set(ETH_BUILD_COMPILER "msys")
+ elseif (CMAKE_COMPILER_IS_GNUCXX)
+ set(ETH_BUILD_COMPILER "g++")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+ set(ETH_BUILD_COMPILER "msvc")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+ set(ETH_BUILD_COMPILER "clang")
+ elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
+ set(ETH_BUILD_COMPILER "appleclang")
+ else ()
+ set(ETH_BUILD_COMPILER "unknown")
+ endif ()
+
+ if (EVMJIT)
+ set(ETH_BUILD_JIT_MODE "JIT")
+ else ()
+ set(ETH_BUILD_JIT_MODE "Interpreter")
+ endif ()
+
+ set(ETH_BUILD_PLATFORM "${ETH_BUILD_OS}/${ETH_BUILD_COMPILER}/${ETH_BUILD_JIT_MODE}")
+
+ #cmake build type may be not speCified when using msvc
+ if (CMAKE_BUILD_TYPE)
+ set(_cmake_build_type ${CMAKE_BUILD_TYPE})
+ else()
+ set(_cmake_build_type "${CMAKE_CFG_INTDIR}")
+ endif()
+
+ # Generate header file containing useful build information
+ add_custom_target(BuildInfo.h ALL
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ COMMAND ${CMAKE_COMMAND} -DETH_SOURCE_DIR="${PROJECT_SOURCE_DIR}" -DETH_BUILDINFO_IN="${ETH_CMAKE_DIR}/templates/BuildInfo.h.in" -DETH_DST_DIR="${PROJECT_BINARY_DIR}/include" -DETH_CMAKE_DIR="${ETH_CMAKE_DIR}"
+ -DETH_BUILD_TYPE="${_cmake_build_type}"
+ -DETH_BUILD_OS="${ETH_BUILD_OS}"
+ -DETH_BUILD_COMPILER="${ETH_BUILD_COMPILER}"
+ -DETH_BUILD_JIT_MODE="${ETH_BUILD_JIT_MODE}"
+ -DETH_BUILD_PLATFORM="${ETH_BUILD_PLATFORM}"
+ -DETH_BUILD_NUMBER="${BUILD_NUMBER}"
+ -DETH_VERSION_SUFFIX="${VERSION_SUFFIX}"
+ -DPROJECT_VERSION="${PROJECT_VERSION}"
+ -DETH_FATDB="${FATDB10}"
+ -P "${ETH_SCRIPTS_DIR}/buildinfo.cmake"
+ )
+ include_directories(BEFORE ${PROJECT_BINARY_DIR})
+endfunction()
diff --git a/cmake/EthCcache.cmake b/cmake/EthCcache.cmake
new file mode 100644
index 0000000..4c4d51a
--- /dev/null
+++ b/cmake/EthCcache.cmake
@@ -0,0 +1,15 @@
+# Setup ccache.
+#
+# The ccache is auto-enabled if the tool is found.
+# To disable set -DCCACHE=OFF option.
+if(NOT DEFINED CMAKE_CXX_COMPILER_LAUNCHER)
+ find_program(CCACHE ccache DOC "ccache tool path; set to OFF to disable")
+ if(CCACHE)
+ set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
+ if(COMMAND cotire)
+ # Change ccache config to meet cotire requirements.
+ set(ENV{CCACHE_SLOPPINESS} pch_defines,time_macros)
+ endif()
+ message(STATUS "[ccache] Enabled: ${CCACHE}")
+ endif()
+endif()
diff --git a/cmake/EthCompilerSettings.cmake b/cmake/EthCompilerSettings.cmake
new file mode 100644
index 0000000..daa1eb5
--- /dev/null
+++ b/cmake/EthCompilerSettings.cmake
@@ -0,0 +1,180 @@
+#------------------------------------------------------------------------------
+# EthCompilerSettings.cmake
+#
+# CMake file for cpp-ethereum project which specifies our compiler settings
+# for each supported platform and build configuration.
+#
+# The documentation for cpp-ethereum is hosted at http://cpp-ethereum.org
+#
+# Copyright (c) 2014-2016 cpp-ethereum contributors.
+#------------------------------------------------------------------------------
+
+# Clang seeks to be command-line compatible with GCC as much as possible, so
+# most of our compiler settings are common between GCC and Clang.
+#
+# These settings then end up spanning all POSIX platforms (Linux, OS X, BSD, etc)
+
+if (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang"))
+ # Enables all the warnings about constructions that some users consider questionable,
+ # and that are easy to avoid. Also enable some extra warning flags that are not
+ # enabled by -Wall. Finally, treat at warnings-as-errors, which forces developers
+ # to fix warnings as they arise, so they don't accumulate "to be fixed later".
+ add_compile_options(-Wall)
+ add_compile_options(-Wextra)
+ add_compile_options(-Wno-unused-variable)
+ add_compile_options(-Wno-unused-parameter)
+ add_compile_options(-Wreturn-type)
+ #add_compile_options(-Werror)
+
+ # Disable warnings about unknown pragmas (which is enabled by -Wall).
+ add_compile_options(-Wno-unknown-pragmas)
+
+ # Configuration-specific compiler settings.
+ set(CMAKE_CXX_FLAGS_DEBUG "-Og -g -DETH_DEBUG")
+ set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG -DETH_RELEASE")
+ set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -DETH_RELEASE")
+ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DETH_RELEASE")
+
+ option(USE_LD_GOLD "Use GNU gold linker" ON)
+ if (USE_LD_GOLD)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
+ if ("${LD_VERSION}" MATCHES "GNU gold")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold")
+ endif ()
+ endif ()
+
+ # Additional GCC-specific compiler settings.
+ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
+
+ # Check that we've got GCC 4.7 or newer.
+ execute_process(
+ COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
+ if (NOT (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7))
+ message(FATAL_ERROR "${PROJECT_NAME} requires g++ 4.7 or greater.")
+ endif ()
+
+ # Strong stack protection was only added in GCC 4.9.
+ # Use it if we have the option to do so.
+ # See https://lwn.net/Articles/584225/
+ if (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
+ add_compile_options(-fstack-protector-strong)
+ add_compile_options(-fstack-protector)
+ endif()
+
+ # Additional Clang-specific compiler settings.
+ elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
+
+ # Stop if buggy clang compiler detected.
+ if("${CMAKE_CXX_COMPILER_ID}" MATCHES AppleClang)
+ if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 8.4)
+ message(FATAL_ERROR "This compiler ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} is not able to compile required libff. Install clang 4+ from Homebrew.")
+ endif()
+ endif()
+
+
+ add_compile_options(-fstack-protector)
+
+ # Enable strong stack protection only on Mac and only for OS X Yosemite
+ # or newer (AppleClang 7.0+). We should be able to re-enable this setting
+ # on non-Apple Clang as well, if we can work out what expression to use for
+ # the version detection.
+
+ # The fact that the version-reporting for AppleClang loses the original
+ # Clang versioning is rather annoying. Ideally we could just have
+ # a single cross-platform "if version >= 3.4.1" check.
+ #
+ # There is debug text in the else clause below, to help us work out what
+ # such an expression should be, if we can get this running on a Trusty box
+ # with Clang. Greg Colvin previously replicated the issue there too.
+ #
+ # See https://github.com/ethereum/webthree-umbrella/issues/594
+
+ if (APPLE)
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
+ add_compile_options(-fstack-protector-strong)
+ endif()
+ else()
+ message(WARNING "CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}")
+ endif()
+
+ # Some Linux-specific Clang settings. We don't want these for OS X.
+ if ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux")
+
+ # Tell Boost that we're using Clang's libc++. Not sure exactly why we need to do.
+ add_definitions(-DBOOST_ASIO_HAS_CLANG_LIBCXX)
+
+ # Use fancy colors in the compiler diagnostics
+ add_compile_options(-fcolor-diagnostics)
+ endif()
+ endif()
+
+# The major alternative compiler to GCC/Clang is Microsoft's Visual C++ compiler, only available on Windows.
+elseif (MSVC)
+
+ add_compile_options(/MP) # enable parallel compilation
+ add_compile_options(/EHsc) # specify Exception Handling Model in msvc
+ add_compile_options(/WX) # enable warnings-as-errors
+ add_compile_options(/wd4068) # disable unknown pragma warning (4068)
+ add_compile_options(/wd4996) # disable unsafe function warning (4996)
+ add_compile_options(/wd4503) # disable decorated name length exceeded, name was truncated (4503)
+ add_compile_options(/wd4267) # disable conversion from 'size_t' to 'type', possible loss of data (4267)
+ add_compile_options(/wd4180) # disable qualifier applied to function type has no meaning; ignored (4180)
+ add_compile_options(/wd4290) # disable C++ exception specification ignored except to indicate a function is not __declspec(nothrow) (4290)
+ add_compile_options(/wd4297) # disable 's function assumed not to throw an exception but does (4297)
+ add_compile_options(/wd4244) # disable conversion from 'type1' to 'type2', possible loss of data (4244)
+ add_compile_options(/wd4800) # disable forcing value to bool 'true' or 'false' (performance warning) (4800)
+ add_compile_options(-D_WIN32_WINNT=0x0600) # declare Windows Vista API requirement
+ add_compile_options(-DNOMINMAX) # undefine windows.h MAX && MIN macros cause it cause conflicts with std::min && std::max functions
+ add_compile_options(-DMINIUPNP_STATICLIB) # define miniupnp static library
+
+ # Always use Release variant of C++ runtime.
+ # We don't want to provide Debug variants of all dependencies. Some default
+ # flags set by CMake must be tweaked.
+ string(REPLACE "/MDd" "/MD" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "/D_DEBUG" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "/MDd" "/MD" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
+ string(REPLACE "/D_DEBUG" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
+ string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
+ set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS OFF)
+
+ # disable empty object file warning
+ set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /ignore:4221")
+ # warning LNK4075: ignoring '/EDITANDCONTINUE' due to '/SAFESEH' specification
+ # warning LNK4099: pdb was not found with lib
+ # stack size 16MB
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099,4075 /STACK:16777216")
+
+# If you don't have GCC, Clang or VC++ then you are on your own. Good luck!
+else ()
+ message(WARNING "Your compiler is not tested, if you run into any issues, we'd welcome any patches.")
+endif ()
+
+if (SANITIZE)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer -fsanitize=${SANITIZE}")
+ if (${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/sanitizer-blacklist.txt")
+ endif()
+endif()
+
+if (PROFILING AND (("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")))
+ set(CMAKE_CXX_FLAGS "-g ${CMAKE_CXX_FLAGS}")
+ set(CMAKE_C_FLAGS "-g ${CMAKE_C_FLAGS}")
+ add_definitions(-DETH_PROFILING_GPERF)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lprofiler")
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lprofiler")
+endif ()
+
+if (COVERAGE)
+ include(ProjectLcov)
+ set(CMAKE_CXX_FLAGS "-g --coverage ${CMAKE_CXX_FLAGS}")
+ set(CMAKE_C_FLAGS "-g --coverage ${CMAKE_C_FLAGS}")
+ set(CMAKE_SHARED_LINKER_FLAGS "--coverage ${CMAKE_SHARED_LINKER_FLAGS}")
+ set(CMAKE_EXE_LINKER_FLAGS "--coverage ${CMAKE_EXE_LINKER_FLAGS}")
+ add_custom_target(coverage.data
+ COMMAND ${LCOV_TOOL} -o ${CMAKE_BINARY_DIR}/coverage.data -c -d ${CMAKE_BINARY_DIR}
+ COMMAND ${LCOV_TOOL} -o ${CMAKE_BINARY_DIR}/coverage.data -r ${CMAKE_BINARY_DIR}/coverage.data '/usr*' '${CMAKE_SOURCE_DIR}/deps/*'
+ )
+ add_dependencies(coverage.data lcov)
+endif ()
diff --git a/cmake/EthDependencies.cmake b/cmake/EthDependencies.cmake
new file mode 100644
index 0000000..e3dab32
--- /dev/null
+++ b/cmake/EthDependencies.cmake
@@ -0,0 +1,83 @@
+# all dependencies that are not directly included in the cpp-ethereum distribution are defined here
+# for this to work, download the dependency via the cmake script in extdep or install them manually!
+
+function(eth_show_dependency DEP NAME)
+ get_property(DISPLAYED GLOBAL PROPERTY ETH_${DEP}_DISPLAYED)
+ if (NOT DISPLAYED)
+ set_property(GLOBAL PROPERTY ETH_${DEP}_DISPLAYED TRUE)
+ message(STATUS "${NAME} headers: ${${DEP}_INCLUDE_DIRS}")
+ message(STATUS "${NAME} lib : ${${DEP}_LIBRARIES}")
+ if (NOT("${${DEP}_DLLS}" STREQUAL ""))
+ message(STATUS "${NAME} dll : ${${DEP}_DLLS}")
+ endif()
+ endif()
+endfunction()
+
+# The Windows platform has not historically had any standard packaging system for delivering
+# versioned releases of libraries. Homebrew and PPA perform that function for macOS and Ubuntu
+# respectively, and there are analogous standards for other Linux distros. In the absense of
+# such a standard, we have chosen to make a "fake packaging system" for cpp-ethereum, which is
+# implemented in https://github.com/ethereum/cpp-dependencies.
+#
+# NOTE - In the last couple of years, the NuGet packaging system, first created for delivery
+# of .NET packages, has added support for C++ packages, and it may be possible for us to migrate
+# our "fake package server" to that real package server. That would certainly be preferable
+# to rolling our own, but it also puts us at the mercy of intermediate package maintainers who
+# may be inactive. There is not a fantastic range of packages available at the time of writing,
+# so we might find that such a move turns us into becoming the package maintainer for our
+# dependencies. Not a net win :-)
+#
+# "Windows - Try to use NuGet C++ packages"
+# https://github.com/ethereum/webthree-umbrella/issues/509
+#
+# Perhaps a better alternative is to step away from dependencies onto binary releases entirely,
+# and switching to build-from-source for some (or all) of our dependencies, especially if they
+# are small. That gives us total control, but at the cost of longer build times. That is the
+# approach which Pawel has taken for LLVM in https://github.com/ethereum/evmjit.
+
+if (MSVC)
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.0.0)
+ message(FATAL_ERROR "ERROR - As of the 1.3.0 release, cpp-ethereum only supports Visual Studio 2015 or newer.\nPlease download from https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx.")
+ else()
+ get_filename_component(ETH_DEPENDENCY_INSTALL_DIR "${CMAKE_CURRENT_LIST_DIR}/../deps/x64" ABSOLUTE)
+ endif()
+ set (CMAKE_PREFIX_PATH ${ETH_DEPENDENCY_INSTALL_DIR} ${CMAKE_PREFIX_PATH})
+endif()
+
+# custom cmake scripts
+set(ETH_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR})
+set(ETH_SCRIPTS_DIR ${ETH_CMAKE_DIR}/scripts)
+
+find_program(CTEST_COMMAND ctest)
+
+# Use Boost "multithreaded mode" for Windows. The platform C/C++ runtime libraries come in
+# two flavors on Windows, which causes an ABI schism across the whole ecosystem. This setting
+# is declaring which side of that schism we fall on.
+if (MSVC)
+ set(Boost_USE_MULTITHREADED ON)
+endif()
+
+# Use the dynamic libraries for Boost for Linux and static linkage on Windows and macOS.
+# We would like to use static linkage on Linux too, but on Ubuntu at least it appears that
+# the prebuilt binaries for Boost won't support this.
+#
+# We will need to build Boost from source ourselves, with -fPIC enabled, before we are
+# able to remove this conditional. That is exactly what has been happening for months for
+# the doublethinkco cross-builds (see https://github.com/doublethinkco/cpp-ethereum-cross).
+#
+# Typical build error we get if trying to do static Boost on Ubunty Trusty (many of them):
+#
+# Linking CXX shared library libdevcore.so
+# /usr/bin/ld.gold: error: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/
+# libboost_thread.a(thread.o): requires dynamic R_X86_64_32 reloc which may overflow at
+# runtime; recompile with -fPIC
+#
+# https://travis-ci.org/bobsummerwill/cpp-ethereum/jobs/145955041
+
+if (UNIX AND NOT APPLE)
+ set(Boost_USE_STATIC_LIBS OFF)
+else()
+ set(Boost_USE_STATIC_LIBS ON)
+endif()
+
+include_directories(BEFORE "${PROJECT_BINARY_DIR}/include")
diff --git a/cmake/EthExecutableHelper.cmake b/cmake/EthExecutableHelper.cmake
new file mode 100644
index 0000000..ca2947d
--- /dev/null
+++ b/cmake/EthExecutableHelper.cmake
@@ -0,0 +1,62 @@
+#
+# this function requires the following variables to be specified:
+# ETH_VERSION
+# PROJECT_NAME
+# PROJECT_VERSION
+# PROJECT_COPYRIGHT_YEAR
+# PROJECT_VENDOR
+# PROJECT_DOMAIN_SECOND
+# PROJECT_DOMAIN_FIRST
+# SRC_LIST
+# HEADERS
+#
+# params:
+# ICON
+#
+
+macro(eth_copy_dll EXECUTABLE DLL)
+ # dlls must be unsubstitud list variable (without ${}) in format
+ # optimized;path_to_dll.dll;debug;path_to_dlld.dll
+ if(DEFINED MSVC)
+ list(GET ${DLL} 1 DLL_RELEASE)
+ list(GET ${DLL} 3 DLL_DEBUG)
+ add_custom_command(TARGET ${EXECUTABLE}
+ PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} ARGS
+ -DDLL_RELEASE="${DLL_RELEASE}"
+ -DDLL_DEBUG="${DLL_DEBUG}"
+ -DCONF="$"
+ -DDESTINATION="${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
+ -P "${ETH_SCRIPTS_DIR}/copydlls.cmake"
+ )
+ endif()
+endmacro()
+
+macro(eth_copy_dlls EXECUTABLE)
+ foreach(dll ${ARGN})
+ eth_copy_dll(${EXECUTABLE} ${dll})
+ endforeach(dll)
+endmacro()
+
+macro(jsonrpcstub_create EXECUTABLE SPEC SERVERNAME SERVERDIR SERVERFILENAME CLIENTNAME CLIENTDIR CLIENTFILENAME)
+ if (ETH_JSON_RPC_STUB)
+ add_custom_target(${SPEC}stub)
+ add_custom_command(
+ TARGET ${SPEC}stub
+ POST_BUILD
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${SPEC}"
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${CMAKE_COMMAND} -DETH_SPEC_PATH="${CMAKE_CURRENT_SOURCE_DIR}/${SPEC}" -DETH_SOURCE_DIR="${CMAKE_SOURCE_DIR}" -DETH_CMAKE_DIR="${ETH_CMAKE_DIR}"
+ -DETH_CLIENT_DIR="${CLIENTDIR}"
+ -DETH_CLIENT_NAME=${CLIENTNAME}
+ -DETH_CLIENT_FILENAME=${CLIENTFILENAME}
+ -DETH_SERVER_DIR="${SERVERDIR}"
+ -DETH_SERVER_NAME=${SERVERNAME}
+ -DETH_SERVER_FILENAME=${SERVERFILENAME}
+ -DETH_JSON_RPC_STUB="${ETH_JSON_RPC_STUB}"
+ -P "${ETH_SCRIPTS_DIR}/jsonrpcstub.cmake"
+ )
+ add_dependencies(${EXECUTABLE} ${SPEC}stub)
+ endif ()
+endmacro()
+
diff --git a/cmake/EthOptions.cmake b/cmake/EthOptions.cmake
new file mode 100644
index 0000000..6331b62
--- /dev/null
+++ b/cmake/EthOptions.cmake
@@ -0,0 +1,110 @@
+macro(configure_project)
+ # Default to RelWithDebInfo configuration if no configuration is explicitly specified.
+ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type on single-configuration generators" FORCE)
+ endif()
+
+ option(BUILD_SHARED_LIBS "Build project libraries shared" OFF)
+
+ # Features:
+ option(VMTRACE "Enable VM tracing" OFF)
+ option(PROFILING "Enable profiling (deprecated)" OFF)
+ option(FATDB "Enable fat state database" ON)
+ option(ROCKSDB "Build with RocksDB instead of LevelDB" OFF)
+ option(PARANOID "Enable additional checks when validating transactions (deprecated)" OFF)
+ option(MINIUPNPC "Build with UPnP support" OFF)
+ option(FASTCTEST "Enable fast ctest" OFF)
+
+ if(MINIUPNPC)
+ message(WARNING
+ "Security vulnerabilities have been discovered in miniupnpc library."
+ "This build option is for testing only. Do not use it in public networks")
+ endif()
+
+ # components
+ option(TESTS "Build with tests" ON)
+ option(TOOLS "Build additional tools" ON)
+ option(EVMJIT "Build with EVMJIT module enabled" OFF)
+
+ # Resolve any clashes between incompatible options.
+ if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
+ if (PARANOID)
+ message(WARNING "Paranoia requires debug - disabling for release build.")
+ set(PARANOID OFF)
+ endif ()
+ if (VMTRACE)
+ message(WARNING "VM Tracing requires debug - disabling for release build.")
+ set (VMTRACE OFF)
+ endif ()
+ endif ()
+
+ # Are we including the JIT EVM module?
+ # That pulls in a quite heavyweight LLVM dependency, which is
+ # not suitable for all platforms.
+ if (EVMJIT)
+ add_definitions(-DETH_EVMJIT)
+ endif ()
+
+ # FATDB is an option to include the reverse hashes for the trie,
+ # i.e. it allows you to iterate over the contents of the state.
+ if (FATDB)
+ add_definitions(-DETH_FATDB)
+ endif ()
+
+ # ROCKSDB is an option to build Ethereum against Facebook's RocksDB instead
+ # of LevelDB
+ if (ROCKSDB)
+ add_definitions(-DETH_ROCKSDB)
+ endif ()
+
+ if (PARANOID)
+ add_definitions(-DETH_PARANOIA)
+ endif ()
+
+ if (VMTRACE)
+ add_definitions(-DETH_VMTRACE)
+ endif ()
+
+ # CI Builds should provide (for user builds this is totally optional)
+ # -DBUILD_NUMBER - A number to identify the current build with. Becomes TWEAK component of project version.
+ # -DVERSION_SUFFIX - A string to append to the end of the version string where applicable.
+ if (NOT DEFINED BUILD_NUMBER)
+ # default is big so that local build is always considered greater
+ # and can easily replace CI build for for all platforms if needed.
+ # Windows max version component number is 65535
+ set(BUILD_NUMBER 65535)
+ endif()
+
+ # Suffix like "-rc1" e.t.c. to append to versions wherever needed.
+ if (NOT DEFINED VERSION_SUFFIX)
+ set(VERSION_SUFFIX "")
+ endif()
+
+ include(EthBuildInfo)
+ create_build_info()
+ print_config()
+endmacro()
+
+macro(print_config)
+ message("")
+ message("------------------------------------------------------------------------")
+ message("-- Configuring ${PROJECT_NAME}")
+ message("------------------------------------------------------------------------")
+ message("-- CMake ${CMAKE_VERSION} (${CMAKE_COMMAND})")
+ message("-- CMAKE_BUILD_TYPE Build type ${CMAKE_BUILD_TYPE}")
+ message("-- TARGET_PLATFORM Target platform ${CMAKE_SYSTEM_NAME}")
+ message("-- BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS}")
+ message("--------------------------------------------------------------- features")
+ message("-- VMTRACE VM execution tracing ${VMTRACE}")
+ message("-- PROFILING Profiling support ${PROFILING}")
+ message("-- FATDB Full database exploring ${FATDB}")
+ message("-- ROCKSDB Prefer rocksdb to leveldb ${ROCKSDB}")
+ message("-- PARANOID - ${PARANOID}")
+ message("-- MINIUPNPC - ${MINIUPNPC}")
+ message("------------------------------------------------------------- components")
+ message("-- TESTS Build tests ${TESTS}")
+ message("-- TOOLS Build tools ${TOOLS}")
+ message("-- EVMJIT Build LLVM-based JIT EVM ${EVMJIT}")
+ message("------------------------------------------------------------------------")
+ message("")
+endmacro()
diff --git a/cmake/EthPolicy.cmake b/cmake/EthPolicy.cmake
new file mode 100644
index 0000000..c58de00
--- /dev/null
+++ b/cmake/EthPolicy.cmake
@@ -0,0 +1,33 @@
+# it must be a macro cause policies have scopes
+# http://www.cmake.org/cmake/help/v3.0/command/cmake_policy.html
+macro (eth_policy)
+ # link_directories() treats paths relative to the source dir.
+ cmake_policy(SET CMP0015 NEW)
+
+ # let cmake autolink dependencies on windows
+ cmake_policy(SET CMP0020 NEW)
+
+ # CMake 2.8.12 and lower allowed the use of targets and files with double
+ # colons in target_link_libraries,
+ cmake_policy(SET CMP0028 NEW)
+
+ if (${CMAKE_VERSION} VERSION_GREATER 3.0)
+
+ # fix MACOSX_RPATH
+ cmake_policy(SET CMP0042 OLD)
+
+ # ignore COMPILE_DEFINITIONS_ properties
+ cmake_policy(SET CMP0043 OLD)
+
+ # allow VERSION argument in project()
+ cmake_policy(SET CMP0048 NEW)
+
+ endif()
+
+ if (POLICY CMP0054)
+ # do not interpret if() arguments as variables!
+ cmake_policy(SET CMP0054 NEW)
+ endif()
+
+endmacro()
+
diff --git a/cmake/EthUtils.cmake b/cmake/EthUtils.cmake
new file mode 100644
index 0000000..27afe86
--- /dev/null
+++ b/cmake/EthUtils.cmake
@@ -0,0 +1,82 @@
+#
+# renames the file if it is different from its destination
+include(CMakeParseArguments)
+#
+macro(replace_if_different SOURCE DST)
+ set(extra_macro_args ${ARGN})
+ set(options CREATE)
+ set(one_value_args)
+ set(multi_value_args)
+ cmake_parse_arguments(REPLACE_IF_DIFFERENT "${options}" "${one_value_args}" "${multi_value_args}" "${extra_macro_args}")
+
+ if (REPLACE_IF_DIFFERENT_CREATE AND (NOT (EXISTS "${DST}")))
+ file(WRITE "${DST}" "")
+ endif()
+
+ execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files "${SOURCE}" "${DST}" RESULT_VARIABLE DIFFERENT OUTPUT_QUIET ERROR_QUIET)
+
+ if (DIFFERENT)
+ execute_process(COMMAND ${CMAKE_COMMAND} -E rename "${SOURCE}" "${DST}")
+ else()
+ execute_process(COMMAND ${CMAKE_COMMAND} -E remove "${SOURCE}")
+ endif()
+endmacro()
+
+macro(eth_add_test NAME)
+
+ # parse arguments here
+ set(commands)
+ set(current_command "")
+ foreach (arg ${ARGN})
+ if (arg STREQUAL "ARGS")
+ if (current_command)
+ list(APPEND commands ${current_command})
+ endif()
+ set(current_command "")
+ else ()
+ set(current_command "${current_command} ${arg}")
+ endif()
+ endforeach(arg)
+ list(APPEND commands ${current_command})
+
+ message(STATUS "test: ${NAME} | ${commands}")
+
+ # create tests
+ set(index 0)
+ list(LENGTH commands count)
+ while (index LESS count)
+ list(GET commands ${index} test_arguments)
+
+ set(run_test "--run_test=${NAME}")
+ add_test(NAME "${NAME}.${index}" COMMAND testeth ${run_test} ${test_arguments})
+
+ math(EXPR index "${index} + 1")
+ endwhile(index LESS count)
+
+ # add target to run them
+ add_custom_target("test.${NAME}"
+ DEPENDS testeth
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMAND ${CMAKE_COMMAND} -DETH_TEST_NAME="${NAME}" -DCTEST_COMMAND="${CTEST_COMMAND}" -P "${ETH_SCRIPTS_DIR}/runtest.cmake"
+ )
+
+endmacro()
+
+# In Windows split repositories build we need to be checking whether or not
+# Debug/Release or both versions were built for the config phase to run smoothly
+macro(eth_check_library_link L)
+ if (${${L}_LIBRARY} AND ${${L}_LIBRARY} EQUAL "${L}_LIBRARY-NOTFOUND")
+ unset(${${L}_LIBRARY})
+ endif()
+ if (${${L}_LIBRARY_DEBUG} AND ${${L}_LIBRARY_DEBUG} EQUAL "${L}_LIBRARY_DEBUG-NOTFOUND")
+ unset(${${L}_LIBRARY_DEBUG})
+ endif()
+ if (${${L}_LIBRARY} AND ${${L}_LIBRARY_DEBUG})
+ set(${L}_LIBRARIES optimized ${${L}_LIBRARY} debug ${${L}_LIBRARY_DEBUG})
+ elseif (${${L}_LIBRARY})
+ set(${L}_LIBRARIES ${${L}_LIBRARY})
+ elseif (${${L}_LIBRARY_DEBUG})
+ set(${L}_LIBRARIES ${${L}_LIBRARY_DEBUG})
+ endif()
+endmacro()
+
diff --git a/cmake/FindLevelDB.cmake b/cmake/FindLevelDB.cmake
new file mode 100644
index 0000000..79321b7
--- /dev/null
+++ b/cmake/FindLevelDB.cmake
@@ -0,0 +1,61 @@
+# Find leveldb
+#
+# Find the leveldb includes and library
+#
+# if you need to add a custom library search path, do it via via CMAKE_PREFIX_PATH
+#
+# This module defines
+# LEVELDB_INCLUDE_DIRS, where to find header, etc.
+# LEVELDB_LIBRARIES, the libraries needed to use leveldb.
+# LEVELDB_FOUND, If false, do not try to use leveldb.
+
+# only look in default directories
+find_path(
+ LEVELDB_INCLUDE_DIR
+ NAMES leveldb/db.h
+ DOC "leveldb include dir"
+)
+
+find_library(
+ LEVELDB_LIBRARY
+ NAMES leveldb
+ DOC "leveldb library"
+)
+
+set(LEVELDB_INCLUDE_DIRS ${LEVELDB_INCLUDE_DIR})
+set(LEVELDB_LIBRARIES ${LEVELDB_LIBRARY})
+
+# When we're static linking (at least on OS X), leveldb also drags in snappy.
+# This might be due to some dependency within leveldb which would be dead-code
+# stripped if we were using a static lib for leveldb. We aren't (yet), because
+# we only have partial static-linkage on OS X so far.
+if (NOT BUILD_SHARED_LIBS AND APPLE)
+ find_path(SNAPPY_INCLUDE_DIR snappy.h PATH_SUFFIXES snappy)
+ find_library(SNAPPY_LIBRARY snappy)
+ set(LEVELDB_INCLUDE_DIRS ${LEVELDB_INCLUDE_DIR} ${SNAPPY_INCLUDE_DIR})
+ set(LEVELDB_LIBRARIES ${LEVELDB_LIBRARY} ${SNAPPY_LIBRARY})
+endif()
+
+# debug library on windows
+# same naming convention as in qt (appending debug library with d)
+# boost is using the same "hack" as us with "optimized" and "debug"
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+
+ find_library(
+ LEVELDB_LIBRARY_DEBUG
+ NAMES leveldbd
+ DOC "leveldb debug library"
+ )
+
+ list(APPEND LEVELDB_LIBRARIES "shlwapi")
+ list(APPEND LEVELDB_LIBRARY_DEBUG "shlwapi")
+ set(LEVELDB_LIBRARIES optimized ${LEVELDB_LIBRARIES} debug ${LEVELDB_LIBRARY_DEBUG})
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set LEVELDB_FOUND to TRUE
+# if all listed variables are TRUE, hide their existence from configuration view
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(leveldb DEFAULT_MSG
+ LEVELDB_LIBRARY LEVELDB_INCLUDE_DIR)
+mark_as_advanced (LEVELDB_INCLUDE_DIR LEVELDB_LIBRARY)
+
diff --git a/cmake/FindMHD.cmake b/cmake/FindMHD.cmake
new file mode 100644
index 0000000..597c990
--- /dev/null
+++ b/cmake/FindMHD.cmake
@@ -0,0 +1,54 @@
+# Find microhttpd
+#
+# Find the microhttpd includes and library
+#
+# if you need to add a custom library search path, do it via via CMAKE_PREFIX_PATH
+#
+# This module defines
+# MHD_INCLUDE_DIRS, where to find header, etc.
+# MHD_LIBRARIES, the libraries needed to use jsoncpp.
+# MHD_FOUND, If false, do not try to use jsoncpp.
+
+find_path(
+ MHD_INCLUDE_DIR
+ NAMES microhttpd.h
+ DOC "microhttpd include dir"
+)
+
+find_library(
+ MHD_LIBRARY
+ NAMES microhttpd microhttpd-10 libmicrohttpd libmicrohttpd-dll
+ DOC "microhttpd library"
+)
+
+set(MHD_INCLUDE_DIRS ${MHD_INCLUDE_DIR})
+set(MHD_LIBRARIES ${MHD_LIBRARY})
+
+# debug library on windows
+# same naming convention as in QT (appending debug library with d)
+# boost is using the same "hack" as us with "optimized" and "debug"
+# official MHD project actually uses _d suffix
+if (MSVC)
+
+ find_library(
+ MHD_LIBRARY_DEBUG
+ NAMES microhttpd_d microhttpd-10_d libmicrohttpd_d libmicrohttpd-dll_d
+ DOC "mhd debug library"
+ )
+
+ set(MHD_LIBRARIES optimized ${MHD_LIBRARIES} debug ${MHD_LIBRARY_DEBUG})
+
+ # prepare dlls
+ string(REPLACE ".lib" ".dll" MHD_DLL "${MHD_LIBRARY}")
+ string(REPLACE "/lib/" "/bin/" MHD_DLL "${MHD_DLL}")
+ string(REPLACE ".lib" ".dll" MHD_DLL_DEBUG "${MHD_LIBRARY_DEBUG}")
+ string(REPLACE "/lib/" "/bin/" MHD_DLL_DEBUG "${MHD_DLL_DEBUG}")
+ set(MHD_DLLS optimized ${MHD_DLL} debug "${MHD_DLL_DEBUG}")
+
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(mhd DEFAULT_MSG
+ MHD_LIBRARY MHD_INCLUDE_DIR)
+
+mark_as_advanced(MHD_INCLUDE_DIR MHD_LIBRARY)
diff --git a/cmake/FindMiniupnpc.cmake b/cmake/FindMiniupnpc.cmake
new file mode 100644
index 0000000..e24419e
--- /dev/null
+++ b/cmake/FindMiniupnpc.cmake
@@ -0,0 +1,49 @@
+# Find miniupnpc
+#
+# Find the miniupnpc includes and library
+#
+# if you nee to add a custom library search path, do it via CMAKE_PREFIX_PATH
+#
+# This module defines
+# MINIUPNPC_INCLUDE_DIRS, where to find header, etc.
+# MINIUPNPC_LIBRARIES, the libraries needed to use miniupnpc.
+# MINIUPNPC_FOUND, If false, do not try to use miniupnpc.
+
+# only look in default directories
+find_path(
+ MINIUPNPC_INCLUDE_DIR
+ NAMES miniupnpc/miniupnpc.h
+ DOC "miniupnpc include dir"
+)
+
+find_library(
+ MINIUPNPC_LIBRARY
+ NAMES miniupnpc
+ DOC "miniupnpc library"
+)
+
+set(MINIUPNPC_INCLUDE_DIRS ${MINIUPNPC_INCLUDE_DIR})
+set(MINIUPNPC_LIBRARIES ${MINIUPNPC_LIBRARY})
+
+# debug library on windows
+# same naming convention as in QT (appending debug library with d)
+# boost is using the same "hack" as us with "optimized" and "debug"
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+
+ find_library(
+ MINIUPNPC_LIBRARY_DEBUG
+ NAMES miniupnpcd
+ DOC "miniupnpc debug library"
+ )
+
+ set(MINIUPNPC_LIBRARIES "iphlpapi" optimized ${MINIUPNPC_LIBRARIES} debug ${MINIUPNPC_LIBRARY_DEBUG})
+
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set MINIUPNPC_FOUND to TRUE
+# if all listed variables are TRUE, hide their existence from configuration view
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(miniupnpc DEFAULT_MSG
+ MINIUPNPC_LIBRARY MINIUPNPC_INCLUDE_DIR)
+mark_as_advanced (MINIUPNPC_INCLUDE_DIR MINIUPNPC_LIBRARY)
+
diff --git a/cmake/FindRocksDB.cmake b/cmake/FindRocksDB.cmake
new file mode 100644
index 0000000..7f5a0c3
--- /dev/null
+++ b/cmake/FindRocksDB.cmake
@@ -0,0 +1,49 @@
+# Find rocksdb
+#
+# Find the rocksdb includes and library
+#
+# if you nee to add a custom library search path, do it via via CMAKE_PREFIX_PATH
+#
+# This module defines
+# ROCKSDB_INCLUDE_DIRS, where to find header, etc.
+# ROCKSDB_LIBRARIES, the libraries needed to use rocksdb.
+# ROCKSDB_FOUND, If false, do not try to use rocksdb.
+
+# only look in default directories
+find_path(
+ ROCKSDB_INCLUDE_DIR
+ NAMES rocksdb/db.h
+ DOC "rocksdb include dir"
+)
+
+find_library(
+ ROCKSDB_LIBRARY
+ NAMES rocksdb
+ DOC "rocksdb library"
+)
+
+set(ROCKSDB_INCLUDE_DIRS ${ROCKSDB_INCLUDE_DIR})
+set(ROCKSDB_LIBRARIES ${ROCKSDB_LIBRARY})
+
+# debug library on windows
+# same naming convention as in qt (appending debug library with d)
+# boost is using the same "hack" as us with "optimized" and "debug"
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+
+ find_library(
+ ROCKSDB_LIBRARY_DEBUG
+ NAMES rocksdbd
+ DOC "rocksdb debug library"
+ )
+
+ set(ROCKSDB_LIBRARIES optimized ${ROCKSDB_LIBRARIES} debug ${ROCKSDB_LIBRARY_DEBUG})
+
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set ROCKSDB_FOUND to TRUE
+# if all listed variables are TRUE, hide their existence from configuration view
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(RocksDB DEFAULT_MSG
+ ROCKS_DB_LIBRARY ROCKSDB_INCLUDE_DIR)
+mark_as_advanced (ROCKSDB_INCLUDE_DIR ROCKSDB_LIBRARY)
+
diff --git a/cmake/HunterGate.cmake b/cmake/HunterGate.cmake
new file mode 100644
index 0000000..cdc37af
--- /dev/null
+++ b/cmake/HunterGate.cmake
@@ -0,0 +1,529 @@
+# Copyright (c) 2013-2017, Ruslan Baratov
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# This is a gate file to Hunter package manager.
+# Include this file using `include` command and add package you need, example:
+#
+# cmake_minimum_required(VERSION 3.0)
+#
+# include("cmake/HunterGate.cmake")
+# HunterGate(
+# URL "https://github.com/path/to/hunter/archive.tar.gz"
+# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d"
+# )
+#
+# project(MyProject)
+#
+# hunter_add_package(Foo)
+# hunter_add_package(Boo COMPONENTS Bar Baz)
+#
+# Projects:
+# * https://github.com/hunter-packages/gate/
+# * https://github.com/ruslo/hunter
+
+option(HUNTER_ENABLED "Enable Hunter package manager support" ON)
+if(HUNTER_ENABLED)
+ if(CMAKE_VERSION VERSION_LESS "3.0")
+ message(FATAL_ERROR "At least CMake version 3.0 required for hunter dependency management."
+ " Update CMake or set HUNTER_ENABLED to OFF.")
+ endif()
+endif()
+
+include(CMakeParseArguments) # cmake_parse_arguments
+
+option(HUNTER_STATUS_PRINT "Print working status" ON)
+option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
+
+set(HUNTER_WIKI "https://github.com/ruslo/hunter/wiki")
+
+function(hunter_gate_status_print)
+ foreach(print_message ${ARGV})
+ if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
+ message(STATUS "[hunter] ${print_message}")
+ endif()
+ endforeach()
+endfunction()
+
+function(hunter_gate_status_debug)
+ foreach(print_message ${ARGV})
+ if(HUNTER_STATUS_DEBUG)
+ string(TIMESTAMP timestamp)
+ message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}")
+ endif()
+ endforeach()
+endfunction()
+
+function(hunter_gate_wiki wiki_page)
+ message("------------------------------ WIKI -------------------------------")
+ message(" ${HUNTER_WIKI}/${wiki_page}")
+ message("-------------------------------------------------------------------")
+ message("")
+ message(FATAL_ERROR "")
+endfunction()
+
+function(hunter_gate_internal_error)
+ message("")
+ foreach(print_message ${ARGV})
+ message("[hunter ** INTERNAL **] ${print_message}")
+ endforeach()
+ message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
+ message("")
+ hunter_gate_wiki("error.internal")
+endfunction()
+
+function(hunter_gate_fatal_error)
+ cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}")
+ string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki)
+ if(have_no_wiki)
+ hunter_gate_internal_error("Expected wiki")
+ endif()
+ message("")
+ foreach(x ${hunter_UNPARSED_ARGUMENTS})
+ message("[hunter ** FATAL ERROR **] ${x}")
+ endforeach()
+ message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
+ message("")
+ hunter_gate_wiki("${hunter_WIKI}")
+endfunction()
+
+function(hunter_gate_user_error)
+ hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data")
+endfunction()
+
+function(hunter_gate_self root version sha1 result)
+ string(COMPARE EQUAL "${root}" "" is_bad)
+ if(is_bad)
+ hunter_gate_internal_error("root is empty")
+ endif()
+
+ string(COMPARE EQUAL "${version}" "" is_bad)
+ if(is_bad)
+ hunter_gate_internal_error("version is empty")
+ endif()
+
+ string(COMPARE EQUAL "${sha1}" "" is_bad)
+ if(is_bad)
+ hunter_gate_internal_error("sha1 is empty")
+ endif()
+
+ string(SUBSTRING "${sha1}" 0 7 archive_id)
+
+ if(EXISTS "${root}/cmake/Hunter")
+ set(hunter_self "${root}")
+ else()
+ set(
+ hunter_self
+ "${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked"
+ )
+ endif()
+
+ set("${result}" "${hunter_self}" PARENT_SCOPE)
+endfunction()
+
+# Set HUNTER_GATE_ROOT cmake variable to suitable value.
+function(hunter_gate_detect_root)
+ # Check CMake variable
+ string(COMPARE NOTEQUAL "${HUNTER_ROOT}" "" not_empty)
+ if(not_empty)
+ set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
+ hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
+ return()
+ endif()
+
+ # Check environment variable
+ string(COMPARE NOTEQUAL "$ENV{HUNTER_ROOT}" "" not_empty)
+ if(not_empty)
+ set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE)
+ hunter_gate_status_debug("HUNTER_ROOT detected by environment variable")
+ return()
+ endif()
+
+ # Check HOME environment variable
+ string(COMPARE NOTEQUAL "$ENV{HOME}" "" result)
+ if(result)
+ set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
+ hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
+ return()
+ endif()
+
+ # Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
+ if(WIN32)
+ string(COMPARE NOTEQUAL "$ENV{SYSTEMDRIVE}" "" result)
+ if(result)
+ set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
+ hunter_gate_status_debug(
+ "HUNTER_ROOT set using SYSTEMDRIVE environment variable"
+ )
+ return()
+ endif()
+
+ string(COMPARE NOTEQUAL "$ENV{USERPROFILE}" "" result)
+ if(result)
+ set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
+ hunter_gate_status_debug(
+ "HUNTER_ROOT set using USERPROFILE environment variable"
+ )
+ return()
+ endif()
+ endif()
+
+ hunter_gate_fatal_error(
+ "Can't detect HUNTER_ROOT"
+ WIKI "error.detect.hunter.root"
+ )
+endfunction()
+
+macro(hunter_gate_lock dir)
+ if(NOT HUNTER_SKIP_LOCK)
+ if("${CMAKE_VERSION}" VERSION_LESS "3.2")
+ hunter_gate_fatal_error(
+ "Can't lock, upgrade to CMake 3.2 or use HUNTER_SKIP_LOCK"
+ WIKI "error.can.not.lock"
+ )
+ endif()
+ hunter_gate_status_debug("Locking directory: ${dir}")
+ file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
+ hunter_gate_status_debug("Lock done")
+ endif()
+endmacro()
+
+function(hunter_gate_download dir)
+ string(
+ COMPARE
+ NOTEQUAL
+ "$ENV{HUNTER_DISABLE_AUTOINSTALL}"
+ ""
+ disable_autoinstall
+ )
+ if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL)
+ hunter_gate_fatal_error(
+ "Hunter not found in '${dir}'"
+ "Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'"
+ "Settings:"
+ " HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
+ " HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
+ WIKI "error.run.install"
+ )
+ endif()
+ string(COMPARE EQUAL "${dir}" "" is_bad)
+ if(is_bad)
+ hunter_gate_internal_error("Empty 'dir' argument")
+ endif()
+
+ string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad)
+ if(is_bad)
+ hunter_gate_internal_error("HUNTER_GATE_SHA1 empty")
+ endif()
+
+ string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad)
+ if(is_bad)
+ hunter_gate_internal_error("HUNTER_GATE_URL empty")
+ endif()
+
+ set(done_location "${dir}/DONE")
+ set(sha1_location "${dir}/SHA1")
+
+ set(build_dir "${dir}/Build")
+ set(cmakelists "${dir}/CMakeLists.txt")
+
+ hunter_gate_lock("${dir}")
+ if(EXISTS "${done_location}")
+ # while waiting for lock other instance can do all the job
+ hunter_gate_status_debug("File '${done_location}' found, skip install")
+ return()
+ endif()
+
+ file(REMOVE_RECURSE "${build_dir}")
+ file(REMOVE_RECURSE "${cmakelists}")
+
+ file(MAKE_DIRECTORY "${build_dir}") # check directory permissions
+
+ # Disabling languages speeds up a little bit, reduces noise in the output
+ # and avoids path too long windows error
+ file(
+ WRITE
+ "${cmakelists}"
+ "cmake_minimum_required(VERSION 3.0)\n"
+ "project(HunterDownload LANGUAGES NONE)\n"
+ "include(ExternalProject)\n"
+ "ExternalProject_Add(\n"
+ " Hunter\n"
+ " URL\n"
+ " \"${HUNTER_GATE_URL}\"\n"
+ " URL_HASH\n"
+ " SHA1=${HUNTER_GATE_SHA1}\n"
+ " DOWNLOAD_DIR\n"
+ " \"${dir}\"\n"
+ " SOURCE_DIR\n"
+ " \"${dir}/Unpacked\"\n"
+ " CONFIGURE_COMMAND\n"
+ " \"\"\n"
+ " BUILD_COMMAND\n"
+ " \"\"\n"
+ " INSTALL_COMMAND\n"
+ " \"\"\n"
+ ")\n"
+ )
+
+ if(HUNTER_STATUS_DEBUG)
+ set(logging_params "")
+ else()
+ set(logging_params OUTPUT_QUIET)
+ endif()
+
+ hunter_gate_status_debug("Run generate")
+
+ # Need to add toolchain file too.
+ # Otherwise on Visual Studio + MDD this will fail with error:
+ # "Could not find an appropriate version of the Windows 10 SDK installed on this machine"
+ if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
+ get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE)
+ set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}")
+ else()
+ # 'toolchain_arg' can't be empty
+ set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=")
+ endif()
+
+ string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make)
+ if(no_make)
+ set(make_arg "")
+ else()
+ # Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM
+ set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}")
+ endif()
+
+ execute_process(
+ COMMAND
+ "${CMAKE_COMMAND}"
+ "-H${dir}"
+ "-B${build_dir}"
+ "-G${CMAKE_GENERATOR}"
+ "${toolchain_arg}"
+ ${make_arg}
+ WORKING_DIRECTORY "${dir}"
+ RESULT_VARIABLE download_result
+ ${logging_params}
+ )
+
+ if(NOT download_result EQUAL 0)
+ hunter_gate_internal_error("Configure project failed")
+ endif()
+
+ hunter_gate_status_print(
+ "Initializing Hunter workspace (${HUNTER_GATE_SHA1})"
+ " ${HUNTER_GATE_URL}"
+ " -> ${dir}"
+ )
+ execute_process(
+ COMMAND "${CMAKE_COMMAND}" --build "${build_dir}"
+ WORKING_DIRECTORY "${dir}"
+ RESULT_VARIABLE download_result
+ ${logging_params}
+ )
+
+ if(NOT download_result EQUAL 0)
+ hunter_gate_internal_error("Build project failed")
+ endif()
+
+ file(REMOVE_RECURSE "${build_dir}")
+ file(REMOVE_RECURSE "${cmakelists}")
+
+ file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}")
+ file(WRITE "${done_location}" "DONE")
+
+ hunter_gate_status_debug("Finished")
+endfunction()
+
+# Must be a macro so master file 'cmake/Hunter' can
+# apply all variables easily just by 'include' command
+# (otherwise PARENT_SCOPE magic needed)
+macro(HunterGate)
+ if(HUNTER_GATE_DONE)
+ # variable HUNTER_GATE_DONE set explicitly for external project
+ # (see `hunter_download`)
+ set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
+ endif()
+
+ # First HunterGate command will init Hunter, others will be ignored
+ get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET)
+
+ if(NOT HUNTER_ENABLED)
+ # Empty function to avoid error "unknown function"
+ function(hunter_add_package)
+ endfunction()
+ elseif(_hunter_gate_done)
+ hunter_gate_status_debug("Secondary HunterGate (use old settings)")
+ hunter_gate_self(
+ "${HUNTER_CACHED_ROOT}"
+ "${HUNTER_VERSION}"
+ "${HUNTER_SHA1}"
+ _hunter_self
+ )
+ include("${_hunter_self}/cmake/Hunter")
+ else()
+ set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_LIST_DIR}")
+
+ string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name)
+ if(_have_project_name)
+ hunter_gate_fatal_error(
+ "Please set HunterGate *before* 'project' command. "
+ "Detected project: ${PROJECT_NAME}"
+ WIKI "error.huntergate.before.project"
+ )
+ endif()
+
+ cmake_parse_arguments(
+ HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV}
+ )
+
+ string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1)
+ string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url)
+ string(
+ COMPARE
+ NOTEQUAL
+ "${HUNTER_GATE_UNPARSED_ARGUMENTS}"
+ ""
+ _have_unparsed
+ )
+ string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global)
+ string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath)
+
+ if(_have_unparsed)
+ hunter_gate_user_error(
+ "HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}"
+ )
+ endif()
+ if(_empty_sha1)
+ hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
+ endif()
+ if(_empty_url)
+ hunter_gate_user_error("URL suboption of HunterGate is mandatory")
+ endif()
+ if(_have_global)
+ if(HUNTER_GATE_LOCAL)
+ hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)")
+ endif()
+ if(_have_filepath)
+ hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)")
+ endif()
+ endif()
+ if(HUNTER_GATE_LOCAL)
+ if(_have_global)
+ hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)")
+ endif()
+ if(_have_filepath)
+ hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)")
+ endif()
+ endif()
+ if(_have_filepath)
+ if(_have_global)
+ hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)")
+ endif()
+ if(HUNTER_GATE_LOCAL)
+ hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)")
+ endif()
+ endif()
+
+ hunter_gate_detect_root() # set HUNTER_GATE_ROOT
+
+ # Beautify path, fix probable problems with windows path slashes
+ get_filename_component(
+ HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE
+ )
+ hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}")
+ if(NOT HUNTER_ALLOW_SPACES_IN_PATH)
+ string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces)
+ if(NOT _contain_spaces EQUAL -1)
+ hunter_gate_fatal_error(
+ "HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
+ "Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
+ "(Use at your own risk!)"
+ WIKI "error.spaces.in.hunter.root"
+ )
+ endif()
+ endif()
+
+ string(
+ REGEX
+ MATCH
+ "[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*"
+ HUNTER_GATE_VERSION
+ "${HUNTER_GATE_URL}"
+ )
+ string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty)
+ if(_is_empty)
+ set(HUNTER_GATE_VERSION "unknown")
+ endif()
+
+ hunter_gate_self(
+ "${HUNTER_GATE_ROOT}"
+ "${HUNTER_GATE_VERSION}"
+ "${HUNTER_GATE_SHA1}"
+ _hunter_self
+ )
+
+ set(_master_location "${_hunter_self}/cmake/Hunter")
+ if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter")
+ # Hunter downloaded manually (e.g. by 'git clone')
+ set(_unused "xxxxxxxxxx")
+ set(HUNTER_GATE_SHA1 "${_unused}")
+ set(HUNTER_GATE_VERSION "${_unused}")
+ else()
+ get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE)
+ set(_done_location "${_archive_id_location}/DONE")
+ set(_sha1_location "${_archive_id_location}/SHA1")
+
+ # Check Hunter already downloaded by HunterGate
+ if(NOT EXISTS "${_done_location}")
+ hunter_gate_download("${_archive_id_location}")
+ endif()
+
+ if(NOT EXISTS "${_done_location}")
+ hunter_gate_internal_error("hunter_gate_download failed")
+ endif()
+
+ if(NOT EXISTS "${_sha1_location}")
+ hunter_gate_internal_error("${_sha1_location} not found")
+ endif()
+ file(READ "${_sha1_location}" _sha1_value)
+ string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal)
+ if(NOT _is_equal)
+ hunter_gate_internal_error(
+ "Short SHA1 collision:"
+ " ${_sha1_value} (from ${_sha1_location})"
+ " ${HUNTER_GATE_SHA1} (HunterGate)"
+ )
+ endif()
+ if(NOT EXISTS "${_master_location}")
+ hunter_gate_user_error(
+ "Master file not found:"
+ " ${_master_location}"
+ "try to update Hunter/HunterGate"
+ )
+ endif()
+ endif()
+ include("${_master_location}")
+ set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
+ endif()
+endmacro()
\ No newline at end of file
diff --git a/cmake/ProjectCryptopp.cmake b/cmake/ProjectCryptopp.cmake
new file mode 100644
index 0000000..0ece2c9
--- /dev/null
+++ b/cmake/ProjectCryptopp.cmake
@@ -0,0 +1,183 @@
+include(ExternalProject)
+include(GNUInstallDirs)
+
+set(prefix "${CMAKE_BINARY_DIR}/deps")
+if (MSVC)
+ set(CRYPTOPP_LIBRARY "${prefix}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}cryptopp-static${CMAKE_STATIC_LIBRARY_SUFFIX}")
+else()
+ set(CRYPTOPP_LIBRARY "${prefix}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}cryptopp${CMAKE_STATIC_LIBRARY_SUFFIX}")
+endif()
+set(CRYPTOPP_INCLUDE_DIR "${prefix}/include")
+
+ExternalProject_Add(
+ cryptopp
+ PREFIX "${prefix}"
+ # This points to unreleased version 5.6.5+ but contains very small
+ # warning fix:
+ # https://github.com/weidai11/cryptopp/commit/903b8feaa70199eb39a313b32a71268745ddb600
+ DOWNLOAD_NAME cryptopp_bccc6443.tar.gz
+ DOWNLOAD_NO_PROGRESS 1
+ URL https://github.com/weidai11/cryptopp/archive/bccc6443c4d4d611066c2de4c17109380cf97704.tar.gz
+ URL_HASH SHA256=f1fddacadd2a0873f795d5614a85fecd5b6ff1d1c6e21dedc251703c54ce63aa
+ PATCH_COMMAND ${CMAKE_COMMAND} -E remove
+ 3way.cpp
+ adler32.cpp
+ # algebra.cpp
+ # algparam.cpp
+ arc4.cpp
+ # asn.cpp
+ authenc.cpp
+ base32.cpp
+ base64.cpp
+ # basecode.cpp
+ bench1.cpp
+ bench2.cpp
+ bfinit.cpp
+ blake2.cpp
+ blowfish.cpp
+ blumshub.cpp
+ camellia.cpp
+ cast.cpp
+ casts.cpp
+ cbcmac.cpp
+ ccm.cpp
+ chacha.cpp
+ channels.cpp
+ cmac.cpp
+ # cpu.cpp
+ crc.cpp
+ # cryptlib.cpp
+ datatest.cpp
+ default.cpp
+ des.cpp
+ dessp.cpp
+ dh2.cpp
+ dh.cpp
+ # dll.cpp
+ dlltest.cpp
+ # dsa.cpp
+ eax.cpp
+ # ec2n.cpp
+ # eccrypto.cpp
+ # ecp.cpp
+ elgamal.cpp
+ emsa2.cpp
+ # eprecomp.cpp
+ esign.cpp
+ files.cpp
+ # filters.cpp
+ # fips140.cpp
+ fipsalgt.cpp
+ fipstest.cpp
+ gcm.cpp
+ gf2_32.cpp
+ gf256.cpp
+ # gf2n.cpp
+ # gfpcrypt.cpp
+ gost.cpp
+ gzip.cpp
+ # hex.cpp
+ # hmac.cpp
+ # hrtimer.cpp
+ ida.cpp
+ idea.cpp
+ # integer.cpp
+ # iterhash.cpp
+ # keccak.cpp
+ luc.cpp
+ mars.cpp
+ marss.cpp
+ md2.cpp
+ md4.cpp
+ md5.cpp
+ # misc.cpp
+ # modes.cpp
+ # mqueue.cpp
+ mqv.cpp
+ # nbtheory.cpp
+ network.cpp
+ # oaep.cpp
+ # osrng.cpp
+ panama.cpp
+ pch.cpp
+ pkcspad.cpp
+ poly1305.cpp
+ # polynomi.cpp
+ pssr.cpp
+ # pubkey.cpp
+ # queue.cpp
+ rabin.cpp
+ # randpool.cpp
+ rc2.cpp
+ rc5.cpp
+ rc6.cpp
+ rdrand.cpp
+ # rdtables.cpp
+ regtest.cpp
+ # rijndael.cpp
+ ripemd.cpp
+ # rng.cpp
+ rsa.cpp
+ rw.cpp
+ safer.cpp
+ salsa.cpp
+ seal.cpp
+ seed.cpp
+ serpent.cpp
+ sha3.cpp
+ shacal2.cpp
+ # sha.cpp
+ sharkbox.cpp
+ shark.cpp
+ simple.cpp
+ skipjack.cpp
+ socketft.cpp
+ sosemanuk.cpp
+ square.cpp
+ squaretb.cpp
+ # strciphr.cpp
+ tea.cpp
+ test.cpp
+ tftables.cpp
+ tiger.cpp
+ tigertab.cpp
+ trdlocal.cpp
+ ttmac.cpp
+ twofish.cpp
+ validat0.cpp
+ validat1.cpp
+ validat2.cpp
+ validat3.cpp
+ vmac.cpp
+ wait.cpp
+ wake.cpp
+ whrlpool.cpp
+ # winpipes.cpp
+ xtr.cpp
+ xtrcrypt.cpp
+ zdeflate.cpp
+ zinflate.cpp
+ zlib.cpp
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=
+ -DCMAKE_BUILD_TYPE=Release
+ # Build static lib but suitable to be included in a shared lib.
+ -DCMAKE_POSITION_INDEPENDENT_CODE=${BUILD_SHARED_LIBS}
+ -DBUILD_SHARED=Off
+ -DBUILD_TESTING=Off
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ LOG_CONFIGURE 1
+ # Overwrite build and install commands to force Release build on MSVC.
+ BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install
+ LOG_INSTALL 1
+ BUILD_BYPRODUCTS "${CRYPTOPP_LIBRARY}"
+)
+
+# Create cryptopp imported library
+add_library(Cryptopp STATIC IMPORTED)
+file(MAKE_DIRECTORY ${CRYPTOPP_INCLUDE_DIR}) # Must exist.
+set_property(TARGET Cryptopp PROPERTY IMPORTED_CONFIGURATIONS Release)
+set_property(TARGET Cryptopp PROPERTY IMPORTED_LOCATION_RELEASE ${CRYPTOPP_LIBRARY})
+set_property(TARGET Cryptopp PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${CRYPTOPP_INCLUDE_DIR})
+add_dependencies(Cryptopp cryptopp)
diff --git a/cmake/ProjectJsonRpcCpp.cmake b/cmake/ProjectJsonRpcCpp.cmake
new file mode 100644
index 0000000..5f2d764
--- /dev/null
+++ b/cmake/ProjectJsonRpcCpp.cmake
@@ -0,0 +1,86 @@
+# HTTP server from JSON RPC CPP requires microhttpd library. It can find it itself,
+# but we need to know the MHD location for static linking.
+find_package(MHD REQUIRED)
+
+get_property(jsoncpp_include_dir TARGET jsoncpp_lib_static PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
+get_property(jsoncpp_library TARGET jsoncpp_lib_static PROPERTY IMPORTED_LOCATION_RELEASE)
+
+set(prefix "${CMAKE_BINARY_DIR}/deps")
+if (WIN32)
+ # On Windows CMAKE_INSTALL_PREFIX is ignored and installs to dist dir.
+ set(INSTALL_DIR ${prefix}/src/jsonrpccpp-build/dist)
+else()
+ set(INSTALL_DIR ${prefix})
+endif()
+set(JSONRPCCPP_INCLUDE_DIR ${INSTALL_DIR}/include)
+set(JSONRPCCPP_COMMON_LIBRARY ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsonrpccpp-common${CMAKE_STATIC_LIBRARY_SUFFIX})
+set(JSONRPCCPP_SERVER_LIBRARY ${INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}jsonrpccpp-server${CMAKE_STATIC_LIBRARY_SUFFIX})
+
+set(CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=
+ -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ # Build static lib but suitable to be included in a shared lib.
+ -DCMAKE_POSITION_INDEPENDENT_CODE=${BUILD_SHARED_LIBS}
+ -DBUILD_STATIC_LIBS=On
+ -DBUILD_SHARED_LIBS=Off
+ -DUNIX_DOMAIN_SOCKET_SERVER=Off
+ -DUNIX_DOMAIN_SOCKET_CLIENT=Off
+ -DHTTP_SERVER=On
+ -DHTTP_CLIENT=OFF
+ -DCOMPILE_TESTS=Off
+ -DCOMPILE_STUBGEN=Off
+ -DCOMPILE_EXAMPLES=Off
+ # Point to jsoncpp library.
+ -DJSONCPP_INCLUDE_DIR=${jsoncpp_include_dir}
+ # Select jsoncpp include prefix: or
+ -DJSONCPP_INCLUDE_PREFIX=json
+ -DJSONCPP_LIBRARY=${jsoncpp_library}
+ -DMHD_INCLUDE_DIR=${MHD_INCLUDE_DIR}
+ -DMHD_LIBRARY=${MHD_LIBRARY})
+
+if (WIN32)
+ # For Windows we have to provide also locations for debug libraries.
+ set(CMAKE_ARGS ${CMAKE_ARGS}
+ -DJSONCPP_LIBRARY_DEBUG=${jsoncpp_library}
+ -DMHD_LIBRARY_DEBUG=${MHD_LIBRARY})
+endif()
+
+ExternalProject_Add(
+ jsonrpccpp
+ PREFIX "${prefix}"
+ DOWNLOAD_NAME jsonrcpcpp-0.7.0.tar.gz
+ DOWNLOAD_NO_PROGRESS 1
+ URL https://github.com/cinemast/libjson-rpc-cpp/archive/v0.7.0.tar.gz
+ URL_HASH SHA256=669c2259909f11a8c196923a910f9a16a8225ecc14e6c30e2bcb712bab9097eb
+ # On Windows it tries to install this dir. Create it to prevent failure.
+ PATCH_COMMAND ${CMAKE_COMMAND} -E make_directory /win32-deps/include
+ CMAKE_ARGS ${CMAKE_ARGS}
+ LOG_CONFIGURE 1
+ # Overwrite build and install commands to force Release build on MSVC.
+ BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install
+ LOG_INSTALL 1
+ BUILD_BYPRODUCTS "${JSONRPCCPP_COMMON_LIBRARY}" "${JSONRPCCPP_SERVER_LIBRARY}"
+)
+
+# Create imported libraries
+file(MAKE_DIRECTORY ${JSONRPCCPP_INCLUDE_DIR}) # Must exist.
+
+add_library(JsonRpcCpp::Common STATIC IMPORTED)
+set_property(TARGET JsonRpcCpp::Common PROPERTY IMPORTED_CONFIGURATIONS Release)
+set_property(TARGET JsonRpcCpp::Common PROPERTY IMPORTED_LOCATION_RELEASE ${JSONRPCCPP_COMMON_LIBRARY})
+set_property(TARGET JsonRpcCpp::Common PROPERTY INTERFACE_LINK_LIBRARIES jsoncpp_lib_static)
+set_property(TARGET JsonRpcCpp::Common PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${JSONRPCCPP_INCLUDE_DIR} ${jsoncpp_include_dir})
+add_dependencies(JsonRpcCpp::Common jsonrpccpp)
+
+add_library(JsonRpcCpp::Server STATIC IMPORTED)
+set_property(TARGET JsonRpcCpp::Server PROPERTY IMPORTED_CONFIGURATIONS Release)
+set_property(TARGET JsonRpcCpp::Server PROPERTY IMPORTED_LOCATION_RELEASE ${JSONRPCCPP_SERVER_LIBRARY})
+set_property(TARGET JsonRpcCpp::Server PROPERTY INTERFACE_LINK_LIBRARIES JsonRpcCpp::Common ${MHD_LIBRARY})
+set_property(TARGET JsonRpcCpp::Server PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MHD_INCLUDE_DIR})
+add_dependencies(JsonRpcCpp::Server jsonrpccpp)
+
+unset(BINARY_DIR)
+unset(INSTALL_DIR)
+unset(CMAKE_ARGS)
diff --git a/cmake/ProjectLcov.cmake b/cmake/ProjectLcov.cmake
new file mode 100644
index 0000000..cb7d378
--- /dev/null
+++ b/cmake/ProjectLcov.cmake
@@ -0,0 +1,12 @@
+include(ExternalProject)
+
+ExternalProject_Add(lcov
+ PREFIX deps
+ DOWNLOAD_NO_PROGRESS 1
+ URL https://github.com/linux-test-project/lcov/releases/download/v1.13/lcov-1.13.tar.gz
+ URL_HASH SHA256=44972c878482cc06a05fe78eaa3645cbfcbad6634615c3309858b207965d8a23
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND ""
+ INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory /bin /bin
+)
+set(LCOV_TOOL ${CMAKE_BINARY_DIR}/deps/bin/lcov)
diff --git a/cmake/ProjectMPIR.cmake b/cmake/ProjectMPIR.cmake
new file mode 100644
index 0000000..378cceb
--- /dev/null
+++ b/cmake/ProjectMPIR.cmake
@@ -0,0 +1,21 @@
+set(prefix "${CMAKE_BINARY_DIR}/deps")
+set(MPIR_LIBRARY "${prefix}/${CMAKE_INSTALL_LIBDIR}/${CMAKE_STATIC_LIBRARY_PREFIX}mpir${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set(MPIR_INCLUDE_DIR "${prefix}/include")
+
+ExternalProject_Add(mpir
+ PREFIX "${prefix}"
+ DOWNLOAD_NAME mpir-cmake.tar.gz
+ DOWNLOAD_NO_PROGRESS TRUE
+ URL https://github.com/chfast/mpir/archive/cmake.tar.gz
+ URL_HASH SHA256=d32ea73cb2d8115a8e59b244f96f29bad7ff03367162b660bae6495826811e06
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=
+ -DCMAKE_BUILD_TYPE=Release
+ -DMPIR_GMP=On
+ BUILD_BYPRODUCTS "${MPIR_LIBRARY}"
+)
+
+add_library(MPIR::mpir STATIC IMPORTED)
+set_property(TARGET MPIR::mpir PROPERTY IMPORTED_CONFIGURATIONS Release)
+set_property(TARGET MPIR::mpir PROPERTY IMPORTED_LOCATION_RELEASE ${MPIR_LIBRARY})
+set_property(TARGET MPIR::mpir PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${MPIR_INCLUDE_DIR})
+add_dependencies(MPIR::mpir mpir)
\ No newline at end of file
diff --git a/cmake/ProjectSecp256k1.cmake b/cmake/ProjectSecp256k1.cmake
new file mode 100644
index 0000000..4d94d8f
--- /dev/null
+++ b/cmake/ProjectSecp256k1.cmake
@@ -0,0 +1,39 @@
+include(ExternalProject)
+
+if (MSVC)
+ set(_only_release_configuration -DCMAKE_CONFIGURATION_TYPES=Release)
+ set(_overwrite_install_command INSTALL_COMMAND cmake --build --config Release --target install)
+endif()
+
+set(prefix "${CMAKE_BINARY_DIR}/deps")
+set(SECP256K1_LIBRARY "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}secp256k1${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set(SECP256K1_INCLUDE_DIR "${prefix}/include")
+
+ExternalProject_Add(
+ secp256k1
+ PREFIX "${prefix}"
+ DOWNLOAD_NAME secp256k1-ac8ccf29.tar.gz
+ DOWNLOAD_NO_PROGRESS 1
+ URL https://github.com/chfast/secp256k1/archive/ac8ccf29b8c6b2b793bc734661ce43d1f952977a.tar.gz
+ URL_HASH SHA256=02f8f05c9e9d2badc91be8e229a07ad5e4984c1e77193d6b00e549df129e7c3a
+ PATCH_COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ ${CMAKE_CURRENT_LIST_DIR}/secp256k1/CMakeLists.txt
+ CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=
+ -DCMAKE_POSITION_INDEPENDENT_CODE=${BUILD_SHARED_LIBS}
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ ${_only_release_configuration}
+ LOG_CONFIGURE 1
+ BUILD_COMMAND ""
+ ${_overwrite_install_command}
+ LOG_INSTALL 1
+ BUILD_BYPRODUCTS "${SECP256K1_LIBRARY}"
+)
+
+# Create imported library
+add_library(Secp256k1 STATIC IMPORTED)
+file(MAKE_DIRECTORY ${SECP256K1_INCLUDE_DIR}) # Must exist.
+set_property(TARGET Secp256k1 PROPERTY IMPORTED_CONFIGURATIONS Release)
+set_property(TARGET Secp256k1 PROPERTY IMPORTED_LOCATION_RELEASE ${SECP256K1_LIBRARY})
+set_property(TARGET Secp256k1 PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SECP256K1_INCLUDE_DIR})
+add_dependencies(Secp256k1 secp256k1)
diff --git a/cmake/ProjectSnark.cmake b/cmake/ProjectSnark.cmake
new file mode 100644
index 0000000..b5e22fa
--- /dev/null
+++ b/cmake/ProjectSnark.cmake
@@ -0,0 +1,39 @@
+include(ProjectMPIR)
+
+# FIXME: Rename to LibFF as that's the name of the library.
+
+set(prefix "${CMAKE_BINARY_DIR}/deps")
+set(SNARK_LIBRARY "${prefix}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ff${CMAKE_STATIC_LIBRARY_SUFFIX}")
+set(SNARK_INCLUDE_DIR "${prefix}/include/libff")
+
+ExternalProject_Add(snark
+ PREFIX "${prefix}"
+ DOWNLOAD_NAME libff-97d3fa6c.tar.gz
+ DOWNLOAD_NO_PROGRESS TRUE
+ URL https://github.com/chfast/libff/archive/97d3fa6cdbd4b7549c7a8a179dc97308dbfd044d.tar.gz
+ URL_HASH SHA256=f102f3ee43c96c9a81c20d8c0446c805c6b8c0e3121518b3625f08e2c230096e
+ CMAKE_ARGS
+ -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX=
+ -DGMP_INCLUDE_DIR=${MPIR_INCLUDE_DIR}
+ -DGMP_LIBRARIES=${MPIR_LIBRARY}
+ -DGMPXX_LIBRARIES=${MPIR_LIBRARY}
+ -DCURVE=ALT_BN128 -DPERFORMANCE=Off -DWITH_PROCPS=Off
+ -DUSE_PT_COMPRESSION=Off
+ -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+ -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+ BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release
+ LOG_BUILD 1
+ INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install
+ BUILD_BYPRODUCTS "${SNARK_LIBRARY}"
+)
+add_dependencies(snark mpir)
+
+# Create snark imported library
+add_library(Snark STATIC IMPORTED)
+file(MAKE_DIRECTORY ${SNARK_INCLUDE_DIR})
+set_property(TARGET Snark PROPERTY IMPORTED_CONFIGURATIONS Release)
+set_property(TARGET Snark PROPERTY IMPORTED_LOCATION_RELEASE ${SNARK_LIBRARY})
+set_property(TARGET Snark PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${SNARK_INCLUDE_DIR})
+set_property(TARGET Snark PROPERTY INTERFACE_LINK_LIBRARIES MPIR::mpir)
+add_dependencies(Snark snark)
diff --git a/cmake/UseMhd.cmake b/cmake/UseMhd.cmake
new file mode 100644
index 0000000..4bcf892
--- /dev/null
+++ b/cmake/UseMhd.cmake
@@ -0,0 +1,11 @@
+function(eth_apply TARGET REQUIRED)
+ find_package(MHD REQUIRED)
+ eth_show_dependency(MHD microhttpd)
+ if (MHD_FOUND)
+ target_include_directories(${TARGET} SYSTEM PUBLIC ${MHD_INCLUDE_DIRS})
+ target_link_libraries(${TARGET} ${MHD_LIBRARIES})
+ eth_copy_dlls(${TARGET} MHD_DLLS)
+ elseif (NOT ${REQUIRED} STREQUAL "OPTIONAL")
+ message(FATAL_ERROR "Microhttpd library not found")
+ endif()
+endfunction()
diff --git a/cmake/UseMiniupnpc.cmake b/cmake/UseMiniupnpc.cmake
new file mode 100644
index 0000000..013695c
--- /dev/null
+++ b/cmake/UseMiniupnpc.cmake
@@ -0,0 +1,11 @@
+function(eth_apply TARGET REQUIRED)
+ find_package (Miniupnpc 1.8.2013)
+ eth_show_dependency(MINIUPNPC miniupnpc)
+ if (MINIUPNPC AND MINIUPNPC_FOUND)
+ target_include_directories(${TARGET} SYSTEM PRIVATE ${MINIUPNPC_INCLUDE_DIRS})
+ target_link_libraries(${TARGET} ${MINIUPNPC_LIBRARIES})
+ target_compile_definitions(${TARGET} PUBLIC ETH_MINIUPNPC)
+ elseif (NOT ${REQUIRED} STREQUAL "OPTIONAL")
+ message(FATAL_ERROR "Miniupnpc library not found")
+ endif()
+endfunction()
diff --git a/cmake/scripts/buildinfo.cmake b/cmake/scripts/buildinfo.cmake
new file mode 100644
index 0000000..2689971
--- /dev/null
+++ b/cmake/scripts/buildinfo.cmake
@@ -0,0 +1,49 @@
+# generates BuildInfo.h
+#
+# this module expects
+# ETH_SOURCE_DIR - main CMAKE_SOURCE_DIR
+# ETH_DST_DIR - main CMAKE_BINARY_DIR
+# ETH_BUILD_TYPE
+# ETH_BUILD_PLATFORM
+# ETH_BUILD_NUMBER
+# ETH_VERSION_SUFFIX
+#
+# example usage:
+# cmake -DETH_SOURCE_DIR=. -DETH_DST_DIR=build -DETH_BUILD_TYPE=Debug -DETH_BUILD_PLATFORM=mac -DETH_BUILD_NUMBER=45 -DETH_VERSION_SUFFIX="-rc1" -P scripts/buildinfo.cmake
+
+if (NOT ETH_BUILD_TYPE)
+ set(ETH_BUILD_TYPE "unknown")
+endif()
+
+if (NOT ETH_BUILD_PLATFORM)
+ set(ETH_BUILD_PLATFORM "unknown")
+endif()
+
+execute_process(
+ COMMAND git --git-dir=${ETH_SOURCE_DIR}/.git --work-tree=${ETH_SOURCE_DIR} rev-parse HEAD
+ OUTPUT_VARIABLE ETH_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
+)
+
+if (NOT ETH_COMMIT_HASH)
+ set(ETH_COMMIT_HASH 0)
+endif()
+
+execute_process(
+ COMMAND git --git-dir=${ETH_SOURCE_DIR}/.git --work-tree=${ETH_SOURCE_DIR} diff HEAD --shortstat
+ OUTPUT_VARIABLE ETH_LOCAL_CHANGES OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET
+)
+
+if (ETH_LOCAL_CHANGES)
+ set(ETH_CLEAN_REPO 0)
+else()
+ set(ETH_CLEAN_REPO 1)
+endif()
+
+set(TMPFILE "${ETH_DST_DIR}/BuildInfo.h.tmp")
+set(OUTFILE "${ETH_DST_DIR}/BuildInfo.h")
+
+configure_file("${ETH_BUILDINFO_IN}" "${TMPFILE}")
+
+include("${ETH_CMAKE_DIR}/EthUtils.cmake")
+replace_if_different("${TMPFILE}" "${OUTFILE}" CREATE)
+
diff --git a/cmake/scripts/configure.cmake b/cmake/scripts/configure.cmake
new file mode 100644
index 0000000..76fb7b7
--- /dev/null
+++ b/cmake/scripts/configure.cmake
@@ -0,0 +1,14 @@
+# adds possibility to run configure_file as buildstep
+# reference:
+# http://www.cmake.org/pipermail/cmake/2012-May/050227.html
+#
+# This module expects
+# INFILE
+# OUTFILE
+# other custom vars
+#
+# example usage:
+# cmake -DINFILE=blah.in -DOUTFILE=blah.out -Dvar1=value1 -Dvar2=value2 -P scripts/configure.cmake
+
+configure_file(${INFILE} ${OUTFILE})
+
diff --git a/cmake/scripts/copydlls.cmake b/cmake/scripts/copydlls.cmake
new file mode 100644
index 0000000..8dfe3a8
--- /dev/null
+++ b/cmake/scripts/copydlls.cmake
@@ -0,0 +1,24 @@
+# this module expects
+# DLLS
+# CONF
+# DESTINATION
+
+# example usage:
+# cmake -DDLL_DEBUG=xd.dll -DDLL_RELEASE=x.dll -DCONFIGURATION=Release -DDESTINATION=dest -P scripts/copydlls.cmake
+
+# this script is created cause we do not know configuration in multiconfiguration generators at cmake configure phase ;)
+
+if ("${CONF}" STREQUAL "Debug")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${DLL_DEBUG}" "${DESTINATION}")
+
+ # hack, copy it twice. with and without d.dll suffix
+ # at first let's get the file name part
+ get_filename_component(DLL_DEBUG_D_NAME ${DLL_DEBUG} NAME)
+ string(REPLACE "d.dll" ".dll" DLL_DEBUG_D_NAME "${DLL_DEBUG_D_NAME}")
+ string(REPLACE "_.dll" ".dll" DLL_DEBUG_D_NAME "${DLL_DEBUG_D_NAME}")
+
+ set(DESTINATION_D "${DESTINATION}/${DLL_DEBUG_D_NAME}")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${DLL_DEBUG}" "${DESTINATION_D}")
+else ()
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${DLL_RELEASE}" "${DESTINATION}")
+endif()
diff --git a/cmake/scripts/helpers.cmake b/cmake/scripts/helpers.cmake
new file mode 100644
index 0000000..06dcdcd
--- /dev/null
+++ b/cmake/scripts/helpers.cmake
@@ -0,0 +1,90 @@
+get_filename_component(ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../.." ABSOLUTE)
+
+set(CACHE_DIR "${ROOT_DIR}/deps/src")
+set(PACKAGES_DIR "${ROOT_DIR}/packages")
+
+function(download URL DST_FILE STATUS)
+ set(TMP_FILE "${DST_FILE}.part")
+
+ get_filename_component(FILE_NAME ${DST_FILE} NAME)
+ if (NOT EXISTS ${DST_FILE})
+ message("Downloading ${FILE_NAME}")
+ file(DOWNLOAD ${URL} ${TMP_FILE} SHOW_PROGRESS STATUS DOWNLOAD_STATUS)
+ list(GET DOWNLOAD_STATUS 0 STATUS_CODE)
+ if (STATUS_CODE EQUAL 0)
+ file(RENAME ${TMP_FILE} ${DST_FILE})
+ else()
+ file(REMOVE ${TMP_FILE})
+ list(GET DOWNLOAD_STATUS 1 ERROR_MSG)
+
+ message("ERROR! Downloading '${FILE_NAME}' failed.")
+ message(STATUS "URL: ${URL}")
+ message(STATUS "Error: ${STATUS_CODE} ${ERROR_MSG}")
+ set(STATUS FALSE PARENT_SCOPE)
+ return()
+ endif()
+ else()
+ message("Using cached ${FILE_NAME}")
+ endif()
+ set(STATUS TRUE PARENT_SCOPE)
+endfunction(download)
+
+function(download_and_unpack PACKAGE_URL DST_DIR)
+ get_filename_component(FILE_NAME ${PACKAGE_URL} NAME)
+
+ set(DST_FILE "${CACHE_DIR}/${FILE_NAME}")
+ set(TMP_FILE "${DST_FILE}.part")
+
+ file(MAKE_DIRECTORY ${CACHE_DIR})
+ file(MAKE_DIRECTORY ${DST_DIR})
+
+ download(${PACKAGE_URL} ${DST_FILE} STATUS)
+
+ if (STATUS)
+ message("Unpacking ${FILE_NAME} to ${DST_DIR}")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E tar -xf ${DST_FILE}
+ WORKING_DIRECTORY ${DST_DIR})
+ endif()
+endfunction(download_and_unpack)
+
+# Packs installed package binaries and headers into an archive.
+function(create_package NAME DIR)
+ message("Creating package ${NAME}")
+ file(MAKE_DIRECTORY ${PACKAGES_DIR})
+
+ # To create an archive without addicional top level directory
+ # (like package-X.Y.Z) we need to know all top level files/dirs.
+ # Usually it is just "win64" dir.
+ file(GLOB TOP_FILES RELATIVE ${DIR} "${DIR}/*")
+
+ set(PACKAGE_FILE "${PACKAGES_DIR}/${NAME}.tar.gz")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E
+ tar -czf ${PACKAGE_FILE} ${TOP_FILES}
+ WORKING_DIRECTORY ${DIR})
+endfunction(create_package)
+
+# Downloads the source code of the package and unpacks it to dedicated 'src'
+# dir. Also creates 'build' and 'install' dir to be used by a build script.
+function(prepare_package_source NAME VERSION URL)
+ set(PACKAGE_NAME "${NAME}-${VERSION}")
+
+ set(PACKAGE_DIR "${CACHE_DIR}/${PACKAGE_NAME}")
+ set(SOURCE_DIR "${PACKAGE_DIR}/src")
+ set(BUILD_DIR "${PACKAGE_DIR}/build")
+ set(INSTALL_DIR "${PACKAGE_DIR}/install")
+
+ if (NOT EXISTS ${SOURCE_DIR})
+ download_and_unpack(${URL} ${PACKAGE_DIR} STATUS)
+ file(GLOB ORIG_SOURCE_DIR_NAME "${PACKAGE_DIR}/*")
+ file(RENAME ${ORIG_SOURCE_DIR_NAME} ${SOURCE_DIR})
+ endif()
+
+ file(MAKE_DIRECTORY ${BUILD_DIR})
+ file(MAKE_DIRECTORY ${INSTALL_DIR})
+
+ # Export names and dirs to be used by a package-specific build script.
+ set(PACKAGE_NAME ${PACKAGE_NAME} PARENT_SCOPE)
+ set(SOURCE_DIR ${SOURCE_DIR} PARENT_SCOPE)
+ set(BUILD_DIR ${BUILD_DIR} PARENT_SCOPE)
+ set(INSTALL_DIR ${INSTALL_DIR} PARENT_SCOPE)
+endfunction()
diff --git a/cmake/scripts/install_deps.cmake b/cmake/scripts/install_deps.cmake
new file mode 100644
index 0000000..1a1b34f
--- /dev/null
+++ b/cmake/scripts/install_deps.cmake
@@ -0,0 +1,12 @@
+include("${CMAKE_CURRENT_LIST_DIR}/helpers.cmake")
+
+set(INSTALL_DIR "${ROOT_DIR}/deps")
+set(SERVER "https://github.com/ethereum/cpp-dependencies/releases/download/vc140/")
+
+function(download_and_install PACKAGE_NAME)
+ download_and_unpack("${SERVER}${PACKAGE_NAME}.tar.gz" ${INSTALL_DIR})
+endfunction(download_and_install)
+
+
+download_and_install("leveldb-1.2")
+download_and_install("microhttpd-0.9.2")
diff --git a/cmake/scripts/jsonrpcstub.cmake b/cmake/scripts/jsonrpcstub.cmake
new file mode 100644
index 0000000..a5d8e6d
--- /dev/null
+++ b/cmake/scripts/jsonrpcstub.cmake
@@ -0,0 +1,82 @@
+# generates JSONRPC Stub Server && Client
+#
+# this script expects
+# ETH_SOURCE_DIR - main CMAKE_SOURCE_DIR
+# ETH_SPEC_PATH
+# ETH_SERVER_DIR
+# ETH_CLIENT_DIR
+# ETH_SERVER_NAME
+# ETH_CLIENT_NAME
+# ETH_JSON_RPC_STUB
+#
+# example usage:
+# cmake -DETH_SPEC_PATH=spec.json -DETH_SERVER_DIR=libweb3jsonrpc -DETH_CLIENT_DIR=test
+# -DETH_SERVER_NAME=AbstractWebThreeStubServer -DETH_CLIENT_NAME=WebThreeStubClient -DETH_JSON_RPC_STUB=/usr/local/bin/jsonrpcstub
+
+# setup names, and allow different filename from classname for namespaced classes.
+# For an example call look at libethereum/CMakeLists.txt for eth::dev::Sentinel
+if (ETH_SERVER_FILENAME)
+ set(SERVER_TMPFILE "${ETH_SERVER_DIR}/${ETH_SERVER_FILENAME}.h.tmp")
+ set(SERVER_TMPFILE2 "${ETH_SERVER_DIR}/${ETH_SERVER_FILENAME}.h.tmp2")
+ set(SERVER_OUTFILE "${ETH_SERVER_DIR}/${ETH_SERVER_FILENAME}.h")
+else ()
+ set(SERVER_TMPFILE "${ETH_SERVER_DIR}/${ETH_SERVER_NAME}.h.tmp")
+ set(SERVER_TMPFILE2 "${ETH_SERVER_DIR}/${ETH_SERVER_NAME}.h.tmp2")
+ set(SERVER_OUTFILE "${ETH_SERVER_DIR}/${ETH_SERVER_NAME}.h")
+endif()
+if (ETH_CLIENT_FILENAME)
+ set(CLIENT_TMPFILE "${ETH_CLIENT_DIR}/${ETH_CLIENT_FILENAME}.h.tmp")
+ set(CLIENT_OUTFILE "${ETH_CLIENT_DIR}/${ETH_CLIENT_FILENAME}.h")
+else ()
+ set(CLIENT_TMPFILE "${ETH_CLIENT_DIR}/${ETH_CLIENT_NAME}.h.tmp")
+ set(CLIENT_OUTFILE "${ETH_CLIENT_DIR}/${ETH_CLIENT_NAME}.h")
+endif ()
+
+# create tmp files
+if (NOT ETH_SERVER_DIR)
+ execute_process(
+ COMMAND ${ETH_JSON_RPC_STUB} ${ETH_SPEC_PATH}
+ --cpp-client=${ETH_CLIENT_NAME} --cpp-client-file=${CLIENT_TMPFILE}
+ OUTPUT_VARIABLE ERR ERROR_QUIET
+ )
+else ()
+ execute_process(
+ COMMAND ${ETH_JSON_RPC_STUB} ${ETH_SPEC_PATH}
+ --cpp-server=${ETH_SERVER_NAME} --cpp-server-file=${SERVER_TMPFILE}
+ --cpp-client=${ETH_CLIENT_NAME} --cpp-client-file=${CLIENT_TMPFILE}
+ OUTPUT_VARIABLE ERR ERROR_QUIET
+ )
+
+ # get name without namespace
+ string(REPLACE "::" ";" SERVER_NAME_LIST "${ETH_SERVER_NAME}")
+ list(LENGTH SERVER_NAME_LIST SERVER_NAME_LENGTH)
+ math(EXPR SERVER_NAME_POS "${SERVER_NAME_LENGTH} - 1")
+ list(GET SERVER_NAME_LIST ${SERVER_NAME_POS} SERVER_NAME)
+
+ file(READ ${SERVER_TMPFILE} SERVER_CONTENT)
+
+ # The following cmake regexps are equal to this sed command
+ # sed -e s/include\ \/include\ ${INCLUDE_NAME}/g \
+ # -e s/public\ jsonrpc::AbstractServer\<${NAME}\>/public\ ServerInterface\<${NAME}\>/g \
+ # -e s/${NAME}\(jsonrpc::AbstractServerConnector\ \&conn,\ jsonrpc::serverVersion_t\ type\ =\ jsonrpc::JSONRPC_SERVER_V2\)\ :\ jsonrpc::AbstractServer\<${NAME}\>\(conn,\ type\)/${NAME}\(\)/g \
+ string(REGEX REPLACE "include\ " "include\ \"ModularServer.h\"" SERVER_CONTENT "${SERVER_CONTENT}")
+ string(REGEX REPLACE "public\ jsonrpc::AbstractServer<${SERVER_NAME}>" "public ServerInterface<${SERVER_NAME}>" SERVER_CONTENT "${SERVER_CONTENT}")
+ string(REGEX REPLACE "${SERVER_NAME}\\(jsonrpc::AbstractServerConnector\ &conn,\ jsonrpc::serverVersion_t\ type\ =\ jsonrpc::JSONRPC_SERVER_V2\\)\ :\ jsonrpc::AbstractServer<${SERVER_NAME}>\\(conn, type\\)" "${SERVER_NAME}()" SERVER_CONTENT "${SERVER_CONTENT}")
+
+ file(WRITE ${SERVER_TMPFILE2} "${SERVER_CONTENT}")
+endif()
+
+# don't throw fatal error on jsonrpcstub error, someone might have old version of jsonrpcstub,
+# he does not need to upgrade it if he is not working on JSON RPC
+# show him warning instead
+if (ERR)
+ message(WARNING "Your version of jsonrcpstub tool is not supported. Please upgrade it.")
+ message(WARNING "${ERR}")
+else()
+ include("${ETH_CMAKE_DIR}/EthUtils.cmake")
+ if (ETH_SERVER_DIR)
+ file(REMOVE "${SERVER_TMPFILE}")
+ replace_if_different("${SERVER_TMPFILE2}" "${SERVER_OUTFILE}")
+ endif()
+ replace_if_different("${CLIENT_TMPFILE}" "${CLIENT_OUTFILE}")
+endif()
diff --git a/cmake/scripts/resource.hpp.in b/cmake/scripts/resource.hpp.in
new file mode 100644
index 0000000..6a97406
--- /dev/null
+++ b/cmake/scripts/resource.hpp.in
@@ -0,0 +1,30 @@
+// this file is autogenerated, do not modify!!!
+#pragma once
+
+#include
+#include