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