diff --git a/ethminer/MinerAux.h b/ethminer/MinerAux.h index 438526b3b..f09bb6830 100644 --- a/ethminer/MinerAux.h +++ b/ethminer/MinerAux.h @@ -608,7 +608,7 @@ private: void doBenchmark(MinerType _m, unsigned _warmupDuration = 15, unsigned _trialDuration = 3, unsigned _trials = 5) { - Ethash::BlockHeader genesis; + BlockHeader genesis; genesis.setNumber(m_benchmarkBlock); genesis.setDifficulty(1 << 18); cdebug << genesis.boundary(); @@ -674,7 +674,7 @@ private: void doSimulation(MinerType _m, int difficulty = 20) { - Ethash::BlockHeader genesis; + BlockHeader genesis; genesis.setNumber(m_benchmarkBlock); genesis.setDifficulty(1 << 18); cdebug << genesis.boundary(); diff --git a/libethcore/BlockInfo.h b/libethcore/BlockInfo.h index ae56342c5..55bdf2b08 100644 --- a/libethcore/BlockInfo.h +++ b/libethcore/BlockInfo.h @@ -221,5 +221,26 @@ public: } }; +class BlockHeaderRaw: public BlockInfo +{ +public: + h256 const& seedHash() const; + Nonce const& nonce() const { return m_nonce; } + +protected: + BlockHeaderRaw() = default; + BlockHeaderRaw(BlockInfo const& _bi): BlockInfo(_bi) {} + + void clear() { m_mixHash = h256(); m_nonce = Nonce(); } + +private: + Nonce m_nonce; + h256 m_mixHash; + + mutable h256 m_seedHash; +}; + +using BlockHeader = BlockHeaderPolished; + } } diff --git a/libethcore/CMakeLists.txt b/libethcore/CMakeLists.txt index 82ed66e77..0b3847c1f 100644 --- a/libethcore/CMakeLists.txt +++ b/libethcore/CMakeLists.txt @@ -3,16 +3,13 @@ file(GLOB HEADERS "*.h") include_directories(BEFORE ..) -if (ETHASHCUDA) - include_directories(${CUDA_INCLUDE_DIRS}) -endif () - add_library(ethcore ${SOURCES} ${HEADERS}) target_link_libraries(ethcore ethash devcore) -if (ETHASHCL) +if(ETHASHCL) target_link_libraries(ethcore ethash-cl) -endif () -if (ETHASHCUDA) +endif() +if(ETHASHCUDA) + target_include_directories(ethcore PRIVATE ${CUDA_INCLUDE_DIRS}) target_link_libraries(ethcore ethash-cuda) -endif () +endif() diff --git a/libethcore/Ethash.cpp b/libethcore/Ethash.cpp deleted file mode 100644 index a6720850e..000000000 --- a/libethcore/Ethash.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - 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 . -*/ -/** @file Ethash.cpp - * @author Gav Wood - * @date 2014 - */ - -#include "Ethash.h" -#include "EthashAux.h" - -namespace dev -{ -namespace eth -{ - -h256 const& Ethash::BlockHeaderRaw::seedHash() const -{ - if (!m_seedHash) - m_seedHash = EthashAux::seedHash((unsigned)m_number); - return m_seedHash; -} - -} -} diff --git a/libethcore/Ethash.h b/libethcore/Ethash.h deleted file mode 100644 index 7a3a80a59..000000000 --- a/libethcore/Ethash.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - 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 . -*/ -/** @file Ethash.h - * @author Gav Wood - * @date 2014 - * - * A proof of work algorithm. - */ - -#pragma once - -#include -#include -#include -#include "Common.h" -#include "Miner.h" -#include "Farm.h" - -class ethash_cl_miner; -class ethash_cuda_miner; - -namespace dev -{ - -class RLP; -class RLPStream; - -namespace eth -{ - -class BlockInfo; -class EthashCLHook; -class EthashCUDAHook; - -class Ethash -{ -public: - using Nonce = h64; - - class BlockHeaderRaw: public BlockInfo - { - friend class EthashSealEngine; - - public: - h256 const& seedHash() const; - Nonce const& nonce() const { return m_nonce; } - - protected: - BlockHeaderRaw() = default; - BlockHeaderRaw(BlockInfo const& _bi): BlockInfo(_bi) {} - - void clear() { m_mixHash = h256(); m_nonce = Nonce(); } - - private: - Nonce m_nonce; - h256 m_mixHash; - - mutable h256 m_seedHash; - }; - using BlockHeader = BlockHeaderPolished; -}; - -} -} diff --git a/libethcore/EthashAux.cpp b/libethcore/EthashAux.cpp index fae8ce2e1..6f22d7a38 100644 --- a/libethcore/EthashAux.cpp +++ b/libethcore/EthashAux.cpp @@ -33,6 +33,7 @@ #include #include "BlockInfo.h" #include "Exceptions.h" + using namespace std; using namespace chrono; using namespace dev; @@ -48,8 +49,11 @@ const unsigned EthashProofOfWork::defaultGlobalWorkSizeMultiplier = 4096; // * C const unsigned EthashProofOfWork::defaultMSPerBatch = 0; const EthashProofOfWork::WorkPackage EthashProofOfWork::NullWorkPackage = EthashProofOfWork::WorkPackage(); -EthashAux::~EthashAux() +h256 const& BlockHeaderRaw::seedHash() const { + if (!m_seedHash) + m_seedHash = EthashAux::seedHash((unsigned)m_number); + return m_seedHash; } EthashAux* EthashAux::get() diff --git a/libethcore/EthashAux.h b/libethcore/EthashAux.h index e41c6f130..a29c498fa 100644 --- a/libethcore/EthashAux.h +++ b/libethcore/EthashAux.h @@ -25,14 +25,13 @@ #include #include #include -#include "Ethash.h" +#include "BlockInfo.h" namespace dev { namespace eth { - struct DAGChannel: public LogChannel { static const char* name(); static const int verbosity = 1; }; /// Proof of work definition for Ethash. @@ -53,7 +52,7 @@ struct EthashProofOfWork struct WorkPackage { WorkPackage() = default; - WorkPackage(Ethash::BlockHeader const& _bh) : + WorkPackage(BlockHeader const& _bh) : boundary(_bh.boundary()), headerHash(_bh.hashWithout()), seedHash(_bh.seedHash()) @@ -91,8 +90,6 @@ enum class DAGEraseMode class EthashAux { public: - ~EthashAux(); - static EthashAux* get(); struct LightAllocation diff --git a/libethcore/EthashCUDAMiner.h b/libethcore/EthashCUDAMiner.h index ed8b8200c..e5217d8b6 100644 --- a/libethcore/EthashCUDAMiner.h +++ b/libethcore/EthashCUDAMiner.h @@ -28,10 +28,14 @@ along with cpp-ethereum. If not, see . #include "EthashAux.h" #include "Miner.h" +class ethash_cuda_miner; + namespace dev { namespace eth { +class EthashCUDAHook; + class EthashCUDAMiner : public GenericMiner, Worker { friend class dev::eth::EthashCUDAHook; diff --git a/libethcore/EthashGPUMiner.cpp b/libethcore/EthashGPUMiner.cpp index aa6f4adda..e9376f854 100644 --- a/libethcore/EthashGPUMiner.cpp +++ b/libethcore/EthashGPUMiner.cpp @@ -27,6 +27,7 @@ #include #include #include + using namespace std; using namespace dev; using namespace eth; diff --git a/libethcore/EthashGPUMiner.h b/libethcore/EthashGPUMiner.h index 49efd652b..6e39bb747 100644 --- a/libethcore/EthashGPUMiner.h +++ b/libethcore/EthashGPUMiner.h @@ -24,14 +24,17 @@ #pragma once #if ETH_ETHASHCL -#include "libdevcore/Worker.h" +#include #include "EthashAux.h" #include "Miner.h" +class ethash_cl_miner; + namespace dev { namespace eth { +class EthashCLHook; class EthashGPUMiner: public GenericMiner, Worker { diff --git a/libethcore/EthashSealEngine.cpp b/libethcore/EthashSealEngine.cpp deleted file mode 100644 index 9ade2bbf2..000000000 --- a/libethcore/EthashSealEngine.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - 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 . -*/ -/** @file EthashSealEngine.cpp - * @author Gav Wood - * @date 2014 - * - * Determines the PoW algorithm. - */ - -#include "EthashSealEngine.h" -#include "EthashGPUMiner.h" -#include "EthashCUDAMiner.h" -using namespace std; -using namespace dev; -using namespace eth; - -EthashSealEngine::EthashSealEngine() -{ - map::SealerDescriptor> sealers; -#if ETH_ETHASHCL - sealers["opencl"] = GenericFarm::SealerDescriptor{&EthashGPUMiner::instances, [](GenericMiner::ConstructionInfo ci){ return new EthashGPUMiner(ci); }}; -#endif -#if ETH_ETHASHCUDA - sealers["cuda"] = GenericFarm::SealerDescriptor{ &EthashCUDAMiner::instances, [](GenericMiner::ConstructionInfo ci){ return new EthashCUDAMiner(ci); } }; -#endif - m_farm.setSealers(sealers); -} - -strings EthashSealEngine::sealers() const -{ - return { - "cpu" -#if ETH_ETHASHCL - , "opencl" -#endif -#if ETH_ETHASHCUDA - , "cuda" -#endif - }; -} diff --git a/libethcore/EthashSealEngine.h b/libethcore/EthashSealEngine.h deleted file mode 100644 index 3c4c92107..000000000 --- a/libethcore/EthashSealEngine.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - 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 . -*/ -/** @file EthashSealEngine.h - * @author Gav Wood - * @date 2014 - * - * Determines the PoW algorithm. - */ - -#pragma once - -#include "Ethash.h" -#include "EthashAux.h" - -namespace dev -{ -namespace eth -{ - -class EthashSealEngine -{ - friend class Ethash; - -public: - EthashSealEngine(); - - strings sealers() const; - -private: - eth::GenericFarm m_farm; -}; - -} -}