Paweł Bylica
8 years ago
14 changed files with 10 additions and 1674 deletions
@ -1,49 +0,0 @@ |
|||||
# Find leveldb |
|
||||
# |
|
||||
# Find the leveldb includes and library |
|
||||
# |
|
||||
# if you nee 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}) |
|
||||
|
|
||||
# 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" |
|
||||
) |
|
||||
|
|
||||
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_INCLUDE_DIR LEVELDB_LIBRARY) |
|
||||
mark_as_advanced (LEVELDB_INCLUDE_DIR LEVELDB_LIBRARY) |
|
||||
|
|
@ -1,30 +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 <http://www.gnu.org/licenses/>.
|
|
||||
*/ |
|
||||
/** @file TrieDB.cpp
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#include <libdevcore/Common.h> |
|
||||
#include "TrieDB.h" |
|
||||
using namespace std; |
|
||||
using namespace dev; |
|
||||
|
|
||||
h256 const dev::c_shaNull = sha3(rlp("")); |
|
||||
h256 const dev::EmptyTrie = sha3(rlp("")); |
|
||||
|
|
||||
const char* TrieDBChannel::name() { return "-T-"; } |
|
File diff suppressed because it is too large
@ -1,195 +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 <http://www.gnu.org/licenses/>.
|
|
||||
*/ |
|
||||
/** @file TrieHash.cpp
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#include "TrieHash.h" |
|
||||
#include <libdevcore/TrieCommon.h> |
|
||||
#include <libdevcore/TrieDB.h> // @TODO replace ASAP! |
|
||||
#include <libdevcore/SHA3.h> |
|
||||
using namespace std; |
|
||||
using namespace dev; |
|
||||
|
|
||||
namespace dev |
|
||||
{ |
|
||||
|
|
||||
/*/
|
|
||||
#define APPEND_CHILD appendData |
|
||||
/*/
|
|
||||
#define APPEND_CHILD appendRaw |
|
||||
/**/ |
|
||||
|
|
||||
#define ENABLE_DEBUG_PRINT 0 |
|
||||
|
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
bool g_hashDebug = false; |
|
||||
#endif |
|
||||
|
|
||||
void hash256aux(HexMap const& _s, HexMap::const_iterator _begin, HexMap::const_iterator _end, unsigned _preLen, RLPStream& _rlp); |
|
||||
|
|
||||
void hash256rlp(HexMap const& _s, HexMap::const_iterator _begin, HexMap::const_iterator _end, unsigned _preLen, RLPStream& _rlp) |
|
||||
{ |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
static std::string s_indent; |
|
||||
if (_preLen) |
|
||||
s_indent += " "; |
|
||||
#endif |
|
||||
|
|
||||
if (_begin == _end) |
|
||||
_rlp << ""; // NULL
|
|
||||
else if (std::next(_begin) == _end) |
|
||||
{ |
|
||||
// only one left - terminate with the pair.
|
|
||||
_rlp.appendList(2) << hexPrefixEncode(_begin->first, true, _preLen) << _begin->second; |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (g_hashDebug) |
|
||||
std::cerr << s_indent << toHex(bytesConstRef(_begin->first.data() + _preLen, _begin->first.size() - _preLen), 1) << ": " << _begin->second << " = " << sha3(_rlp.out()) << std::endl; |
|
||||
#endif |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
// find the number of common prefix nibbles shared
|
|
||||
// i.e. the minimum number of nibbles shared at the beginning between the first hex string and each successive.
|
|
||||
unsigned sharedPre = (unsigned)-1; |
|
||||
unsigned c = 0; |
|
||||
for (auto i = std::next(_begin); i != _end && sharedPre; ++i, ++c) |
|
||||
{ |
|
||||
unsigned x = std::min(sharedPre, std::min((unsigned)_begin->first.size(), (unsigned)i->first.size())); |
|
||||
unsigned shared = _preLen; |
|
||||
for (; shared < x && _begin->first[shared] == i->first[shared]; ++shared) {} |
|
||||
sharedPre = std::min(shared, sharedPre); |
|
||||
} |
|
||||
if (sharedPre > _preLen) |
|
||||
{ |
|
||||
// if they all have the same next nibble, we also want a pair.
|
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (g_hashDebug) |
|
||||
std::cerr << s_indent << toHex(bytesConstRef(_begin->first.data() + _preLen, sharedPre), 1) << ": " << std::endl; |
|
||||
#endif |
|
||||
_rlp.appendList(2) << hexPrefixEncode(_begin->first, false, _preLen, (int)sharedPre); |
|
||||
hash256aux(_s, _begin, _end, (unsigned)sharedPre, _rlp); |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (g_hashDebug) |
|
||||
std::cerr << s_indent << "= " << hex << sha3(_rlp.out()) << dec << std::endl; |
|
||||
#endif |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
// otherwise enumerate all 16+1 entries.
|
|
||||
_rlp.appendList(17); |
|
||||
auto b = _begin; |
|
||||
if (_preLen == b->first.size()) |
|
||||
{ |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (g_hashDebug) |
|
||||
std::cerr << s_indent << "@: " << b->second << std::endl; |
|
||||
#endif |
|
||||
++b; |
|
||||
} |
|
||||
for (auto i = 0; i < 16; ++i) |
|
||||
{ |
|
||||
auto n = b; |
|
||||
for (; n != _end && n->first[_preLen] == i; ++n) {} |
|
||||
if (b == n) |
|
||||
_rlp << ""; |
|
||||
else |
|
||||
{ |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (g_hashDebug) |
|
||||
std::cerr << s_indent << std::hex << i << ": " << std::dec << std::endl; |
|
||||
#endif |
|
||||
hash256aux(_s, b, n, _preLen + 1, _rlp); |
|
||||
} |
|
||||
b = n; |
|
||||
} |
|
||||
if (_preLen == _begin->first.size()) |
|
||||
_rlp << _begin->second; |
|
||||
else |
|
||||
_rlp << ""; |
|
||||
|
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (g_hashDebug) |
|
||||
std::cerr << s_indent << "= " << hex << sha3(_rlp.out()) << dec << std::endl; |
|
||||
#endif |
|
||||
} |
|
||||
} |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
if (_preLen) |
|
||||
s_indent.resize(s_indent.size() - 2); |
|
||||
#endif |
|
||||
} |
|
||||
|
|
||||
void hash256aux(HexMap const& _s, HexMap::const_iterator _begin, HexMap::const_iterator _end, unsigned _preLen, RLPStream& _rlp) |
|
||||
{ |
|
||||
RLPStream rlp; |
|
||||
hash256rlp(_s, _begin, _end, _preLen, rlp); |
|
||||
if (rlp.out().size() < 32) |
|
||||
{ |
|
||||
// RECURSIVE RLP
|
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
cerr << "[INLINE: " << dec << rlp.out().size() << " < 32]" << endl; |
|
||||
#endif |
|
||||
_rlp.APPEND_CHILD(rlp.out()); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
#if ENABLE_DEBUG_PRINT |
|
||||
cerr << "[HASH: " << dec << rlp.out().size() << " >= 32]" << endl; |
|
||||
#endif |
|
||||
_rlp << sha3(rlp.out()); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
bytes rlp256(BytesMap const& _s) |
|
||||
{ |
|
||||
// build patricia tree.
|
|
||||
if (_s.empty()) |
|
||||
return rlp(""); |
|
||||
HexMap hexMap; |
|
||||
for (auto i = _s.rbegin(); i != _s.rend(); ++i) |
|
||||
hexMap[asNibbles(bytesConstRef(&i->first))] = i->second; |
|
||||
RLPStream s; |
|
||||
hash256rlp(hexMap, hexMap.cbegin(), hexMap.cend(), 0, s); |
|
||||
return s.out(); |
|
||||
} |
|
||||
|
|
||||
h256 hash256(BytesMap const& _s) |
|
||||
{ |
|
||||
return sha3(rlp256(_s)); |
|
||||
} |
|
||||
|
|
||||
h256 orderedTrieRoot(std::vector<bytes> const& _data) |
|
||||
{ |
|
||||
BytesMap m; |
|
||||
unsigned j = 0; |
|
||||
for (auto i: _data) |
|
||||
m[rlp(j++)] = i; |
|
||||
return hash256(m); |
|
||||
} |
|
||||
|
|
||||
h256 orderedTrieRoot(std::vector<bytesConstRef> const& _data) |
|
||||
{ |
|
||||
BytesMap m; |
|
||||
unsigned j = 0; |
|
||||
for (auto i: _data) |
|
||||
m[rlp(j++)] = i.toBytes(); |
|
||||
return hash256(m); |
|
||||
} |
|
||||
|
|
||||
} |
|
@ -1,46 +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 <http://www.gnu.org/licenses/>.
|
|
||||
*/ |
|
||||
/** @file TrieHash.h
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <libdevcore/Common.h> |
|
||||
#include <libdevcore/FixedHash.h> |
|
||||
|
|
||||
namespace dev |
|
||||
{ |
|
||||
|
|
||||
bytes rlp256(BytesMap const& _s); |
|
||||
h256 hash256(BytesMap const& _s); |
|
||||
|
|
||||
h256 orderedTrieRoot(std::vector<bytes> const& _data); |
|
||||
|
|
||||
template <class T, class U> inline h256 trieRootOver(unsigned _itemCount, T const& _getKey, U const& _getValue) |
|
||||
{ |
|
||||
BytesMap m; |
|
||||
for (unsigned i = 0; i < _itemCount; ++i) |
|
||||
m[_getKey(i)] = _getValue(i); |
|
||||
return hash256(m); |
|
||||
} |
|
||||
|
|
||||
h256 orderedTrieRoot(std::vector<bytesConstRef> const& _data); |
|
||||
h256 orderedTrieRoot(std::vector<bytes> const& _data); |
|
||||
|
|
||||
} |
|
@ -1,30 +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 <http://www.gnu.org/licenses/>.
|
|
||||
*/ |
|
||||
/** @file DB.h
|
|
||||
* @author Gav Wood <i@gavwood.com> |
|
||||
* @date 2014 |
|
||||
*/ |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#pragma warning(push) |
|
||||
#pragma warning(disable: 4100 4267) |
|
||||
#include <leveldb/db.h> |
|
||||
#include <leveldb/write_batch.h> |
|
||||
namespace ldb = leveldb; |
|
||||
#pragma warning(pop) |
|
||||
#define DEV_LDB 1 |
|
Loading…
Reference in new issue