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 fc989f624..000000000 --- a/libethcore/Ethash.h +++ /dev/null @@ -1,77 +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 - { - - 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..e83e8a493 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,6 +49,13 @@ const unsigned EthashProofOfWork::defaultGlobalWorkSizeMultiplier = 4096; // * C const unsigned EthashProofOfWork::defaultMSPerBatch = 0; const EthashProofOfWork::WorkPackage EthashProofOfWork::NullWorkPackage = EthashProofOfWork::WorkPackage(); +h256 const& Ethash::BlockHeaderRaw::seedHash() const +{ + if (!m_seedHash) + m_seedHash = EthashAux::seedHash((unsigned)m_number); + return m_seedHash; +} + EthashAux::~EthashAux() { } diff --git a/libethcore/EthashAux.h b/libethcore/EthashAux.h index e41c6f130..1970f0bea 100644 --- a/libethcore/EthashAux.h +++ b/libethcore/EthashAux.h @@ -25,16 +25,42 @@ #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; }; +class Ethash +{ +public: + using Nonce = h64; + + 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; +}; + /// Proof of work definition for Ethash. struct EthashProofOfWork { 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 {