Working python bindings
Signed-off-by: Anthony Fieroni <bvbfan@abv.bg>
This commit is contained in:
parent
792ba0b032
commit
2c7392c7a1
13 changed files with 208 additions and 127 deletions
|
@ -1,7 +1,7 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
|
||||||
project(claimtrie)
|
project(claimtrie)
|
||||||
set(CMAKE_CXX_STANDARD 11)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
include(../../contrib/cmake/cmake/CPM.cmake)
|
include(../../contrib/cmake/cmake/CPM.cmake)
|
||||||
|
@ -12,90 +12,43 @@ set(CLAIMTRIE_SRC
|
||||||
forks.cpp
|
forks.cpp
|
||||||
hashes.cpp
|
hashes.cpp
|
||||||
log.cpp
|
log.cpp
|
||||||
prefixtrie.cpp
|
|
||||||
trie.cpp
|
trie.cpp
|
||||||
txoutpoint.cpp
|
txoutpoint.cpp
|
||||||
uints.cpp
|
uints.cpp
|
||||||
|
sqlite/sqlite3.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(BIND)
|
||||||
|
find_program(SWIG NAMES swig)
|
||||||
|
string(TOLOWER ${BIND} BIND)
|
||||||
|
set(INTERFACE_NAME libclaimtrie)
|
||||||
|
if(${BIND} STREQUAL "python")
|
||||||
|
find_package(PythonInterp 3.6 REQUIRED)
|
||||||
|
find_package(PythonLibs 3.6 REQUIRED)
|
||||||
|
set(BIND_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})
|
||||||
|
set(SWIG_OPTIONS -python;-py3)
|
||||||
|
set(CMAKE_SHARED_LIBRARY_PREFIX _lib)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Implement a handler for ${BIND}")
|
||||||
|
endif()
|
||||||
|
add_custom_command(OUTPUT ${INTERFACE_NAME}_wrap.cxx
|
||||||
|
COMMAND ${SWIG}
|
||||||
|
ARGS -c++ ${SWIG_OPTIONS} -outcurrentdir ${CMAKE_CURRENT_SOURCE_DIR}/${INTERFACE_NAME}.i
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set(CLAIMTRIE_SRC ${CLAIMTRIE_SRC}
|
||||||
|
${INTERFACE_NAME}_wrap.cxx
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_library(claimtrie SHARED ${CLAIMTRIE_SRC})
|
add_library(claimtrie SHARED ${CLAIMTRIE_SRC})
|
||||||
|
|
||||||
target_include_directories(claimtrie PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
target_include_directories(claimtrie PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
# TODO remove leveldb depends
|
if(BIND_INCLUDE_DIRS)
|
||||||
set(LEVELDB_SRC
|
target_include_directories(claimtrie PRIVATE ${BIND_INCLUDE_DIRS})
|
||||||
../leveldb/db/builder.cc
|
|
||||||
../leveldb/db/c.cc
|
|
||||||
../leveldb/db/dbformat.cc
|
|
||||||
../leveldb/db/db_impl.cc
|
|
||||||
../leveldb/db/db_iter.cc
|
|
||||||
../leveldb/db/dumpfile.cc
|
|
||||||
../leveldb/db/filename.cc
|
|
||||||
../leveldb/db/log_reader.cc
|
|
||||||
../leveldb/db/log_writer.cc
|
|
||||||
../leveldb/db/memtable.cc
|
|
||||||
../leveldb/db/repair.cc
|
|
||||||
../leveldb/db/table_cache.cc
|
|
||||||
../leveldb/db/version_edit.cc
|
|
||||||
../leveldb/db/version_set.cc
|
|
||||||
../leveldb/db/write_batch.cc
|
|
||||||
../leveldb/table/block_builder.cc
|
|
||||||
../leveldb/table/block.cc
|
|
||||||
../leveldb/table/filter_block.cc
|
|
||||||
../leveldb/table/format.cc
|
|
||||||
../leveldb/table/iterator.cc
|
|
||||||
../leveldb/table/merger.cc
|
|
||||||
../leveldb/table/table_builder.cc
|
|
||||||
../leveldb/table/table.cc
|
|
||||||
../leveldb/table/two_level_iterator.cc
|
|
||||||
../leveldb/util/arena.cc
|
|
||||||
../leveldb/util/bloom.cc
|
|
||||||
../leveldb/util/cache.cc
|
|
||||||
../leveldb/util/coding.cc
|
|
||||||
../leveldb/util/comparator.cc
|
|
||||||
../leveldb/util/crc32c.cc
|
|
||||||
../leveldb/util/env.cc
|
|
||||||
../leveldb/util/env_posix.cc
|
|
||||||
../leveldb/util/filter_policy.cc
|
|
||||||
../leveldb/util/hash.cc
|
|
||||||
../leveldb/util/histogram.cc
|
|
||||||
../leveldb/util/logging.cc
|
|
||||||
../leveldb/util/options.cc
|
|
||||||
../leveldb/util/status.cc
|
|
||||||
)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
set(LEVELDB_SRC ${LEVELDB_SRC}
|
|
||||||
../leveldb/util/env_win.cc
|
|
||||||
../leveldb/port/port_win.cc
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
set(LEVELDB_SRC ${LEVELDB_SRC}
|
|
||||||
../leveldb/port/port_posix.cc
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(leveldb STATIC ${LEVELDB_SRC})
|
|
||||||
|
|
||||||
target_include_directories(leveldb PRIVATE ../leveldb ../leveldb/include)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
target_compile_definitions(leveldb PRIVATE -DLEVELDB_PLATFORM_WINDOWS -DWINVER=0x0500 -D__USE_MINGW_ANSI_STDIO=1)
|
|
||||||
else()
|
|
||||||
target_compile_definitions(leveldb PRIVATE -DLEVELDB_PLATFORM_POSIX)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_compile_definitions(leveldb PRIVATE -DLEVELDB_ATOMIC_PRESENT -D__STDC_LIMIT_MACROS)
|
|
||||||
|
|
||||||
target_link_libraries(claimtrie PRIVATE leveldb)
|
|
||||||
# leveldb depends end here
|
|
||||||
|
|
||||||
# TODO remove BITCOIN depends
|
|
||||||
target_include_directories(claimtrie PRIVATE ../ ../leveldb/include)
|
|
||||||
# it's needed a configure call to create config files
|
|
||||||
target_compile_definitions(claimtrie PRIVATE -DHAVE_CONFIG_H)
|
|
||||||
# bitcoin depends end here
|
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME OpenSSL
|
NAME OpenSSL
|
||||||
GITHUB_REPOSITORY openssl/openssl
|
GITHUB_REPOSITORY openssl/openssl
|
||||||
|
|
|
@ -77,8 +77,3 @@ CNameOutPointHeightType::CNameOutPointHeightType(std::string name, CTxOutPoint o
|
||||||
: name(std::move(name)), outPoint(std::move(outPoint)), nValidHeight(nValidHeight)
|
: name(std::move(name)), outPoint(std::move(outPoint)), nValidHeight(nValidHeight)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
CClaimIndexElement::CClaimIndexElement(std::string name, CClaimValue claim)
|
|
||||||
: name(std::move(name)), claim(std::move(claim))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#ifndef CLAIMTRIE_DATA_H
|
#ifndef CLAIMTRIE_DATA_H
|
||||||
#define CLAIMTRIE_DATA_H
|
#define CLAIMTRIE_DATA_H
|
||||||
|
|
||||||
#include <claimtrie/sqlite/sqlite3.h>
|
#include <sqlite/sqlite3.h>
|
||||||
#include <txoutpoint.h>
|
#include <txoutpoint.h>
|
||||||
#include <uints.h>
|
#include <uints.h>
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ namespace sqlite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <claimtrie/sqlite/hdr/sqlite_modern_cpp.h>
|
#include <sqlite/hdr/sqlite_modern_cpp.h>
|
||||||
|
|
||||||
namespace sqlite
|
namespace sqlite
|
||||||
{
|
{
|
||||||
|
@ -119,13 +119,4 @@ struct CNameOutPointHeightType
|
||||||
CNameOutPointHeightType(std::string name, CTxOutPoint outPoint, int nValidHeight);
|
CNameOutPointHeightType(std::string name, CTxOutPoint outPoint, int nValidHeight);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CClaimIndexElement
|
|
||||||
{
|
|
||||||
std::string name;
|
|
||||||
CClaimValue claim;
|
|
||||||
|
|
||||||
CClaimIndexElement() = default;
|
|
||||||
CClaimIndexElement(std::string name, CClaimValue claim);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // CLAIMTRIE_DATA_H
|
#endif // CLAIMTRIE_DATA_H
|
||||||
|
|
57
src/claimtrie/libclaimtrie.i
Normal file
57
src/claimtrie/libclaimtrie.i
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
|
||||||
|
%module libclaimtrie
|
||||||
|
%{
|
||||||
|
#include "uints.h"
|
||||||
|
#include "txoutpoint.h"
|
||||||
|
#include "data.h"
|
||||||
|
#include "trie.h"
|
||||||
|
#include "forks.h"
|
||||||
|
%}
|
||||||
|
|
||||||
|
%feature("directors", 1);
|
||||||
|
%feature("flatnested", 1);
|
||||||
|
|
||||||
|
%include stl.i
|
||||||
|
%include stdint.i
|
||||||
|
%include std_pair.i
|
||||||
|
|
||||||
|
%ignore CBaseBlob(CBaseBlob &&);
|
||||||
|
%ignore CClaimIndexElement(CClaimIndexElement &&);
|
||||||
|
%ignore CClaimNsupports(CClaimNsupports &&);
|
||||||
|
%ignore CClaimTrieProof(CClaimTrieProof &&);
|
||||||
|
%ignore CClaimTrieProofNode(CClaimTrieProofNode &&);
|
||||||
|
%ignore CClaimValue(CClaimValue &&);
|
||||||
|
%ignore CSupportValue(CSupportValue &&);
|
||||||
|
%ignore CTxOutPoint(CTxOutPoint &&);
|
||||||
|
|
||||||
|
#define SWIG_INTERFACE
|
||||||
|
|
||||||
|
%include "uints.h"
|
||||||
|
%include "txoutpoint.h"
|
||||||
|
%include "data.h"
|
||||||
|
%include "trie.h"
|
||||||
|
%include "forks.h"
|
||||||
|
|
||||||
|
%template(CUint160) CBaseBlob<160>;
|
||||||
|
%template(CUint256) CBaseBlob<256>;
|
||||||
|
%template(uint8vec) std::vector<uint8_t>;
|
||||||
|
|
||||||
|
%template(claimEntryType) std::vector<CClaimValue>;
|
||||||
|
%template(supportEntryType) std::vector<CSupportValue>;
|
||||||
|
%template(claimsNsupports) std::vector<CClaimNsupports>;
|
||||||
|
|
||||||
|
%template(proofPair) std::pair<bool, CUint256>;
|
||||||
|
%template(proofNodePair) std::pair<unsigned char, CUint256>;
|
||||||
|
%template(claimUndoPair) std::pair<std::string, CClaimValue>;
|
||||||
|
%template(supportUndoPair) std::pair<std::string, CSupportValue>;
|
||||||
|
%template(takeoverUndoPair) std::pair<std::string, <std::pair<int, CUint160>>;
|
||||||
|
|
||||||
|
%template(proofNodes) std::vector<CClaimTrieProofNode>;
|
||||||
|
%template(proofPairs) std::vector<std::pair<bool, CUint256>>;
|
||||||
|
%template(proofNodeChildren) std::vector<std::pair<unsigned char, CUint256>>;
|
||||||
|
%template(claimUndoType) std::vector<claimUndoPair>;
|
||||||
|
%template(supportUndoType) std::vector<supportUndoPair>;
|
||||||
|
%template(insertUndoType) std::vector<CNameOutPointHeightType>;
|
||||||
|
%template(takeoverUndoType) std::vector<takeoverUndoPair>;
|
||||||
|
|
||||||
|
%rename(CClaimTrieCache) CClaimTrieCacheHashFork;
|
86
src/claimtrie/libclaimtrie_test.py
Normal file
86
src/claimtrie/libclaimtrie_test.py
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
|
||||||
|
from libclaimtrie import *
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
class TestClaimTrieTypes(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.uint256s = "1234567890987654321012345678909876543210123456789098765432101234"
|
||||||
|
self.uint160 = CUint160S("1234567890987654321012345678909876543210")
|
||||||
|
self.uint = CUint256S(self.uint256s)
|
||||||
|
self.txp = CTxOutPoint(self.uint, 1)
|
||||||
|
|
||||||
|
def assertClaimEqual(self, claim, txo, cid, amount, effe, height, validHeight, msg):
|
||||||
|
self.assertEqual(claim.outPoint, txo, msg)
|
||||||
|
self.assertEqual(claim.claimId, cid, msg)
|
||||||
|
self.assertEqual(claim.nAmount, amount, msg)
|
||||||
|
self.assertEqual(claim.nEffectiveAmount, effe, msg)
|
||||||
|
self.assertEqual(claim.nHeight, height, msg)
|
||||||
|
self.assertEqual(claim.nValidAtHeight, validHeight, msg)
|
||||||
|
|
||||||
|
def assertSupportEqual(self, support, txo, cid, amount, height, validHeight, msg):
|
||||||
|
self.assertEqual(support.outPoint, txo, msg)
|
||||||
|
self.assertEqual(support.supportedClaimId, cid, msg)
|
||||||
|
self.assertEqual(support.nAmount, amount, msg)
|
||||||
|
self.assertEqual(support.nHeight, height, msg)
|
||||||
|
self.assertEqual(support.nValidAtHeight, validHeight, msg)
|
||||||
|
|
||||||
|
def test_uint256(self):
|
||||||
|
uint = self.uint
|
||||||
|
self.assertFalse(uint.IsNull(), "incorrect CUint256S or CBaseBlob::IsNull")
|
||||||
|
self.assertEqual(uint.GetHex(), self.uint256s, "incorrect CBaseBlob::GetHex")
|
||||||
|
self.assertEqual(uint.GetHex(), uint.ToString(), "incorrect CBaseBlob::ToString")
|
||||||
|
self.assertEqual(uint.size(), 32, "incorrect CBaseBlob::size")
|
||||||
|
copy = CUint256()
|
||||||
|
self.assertNotEqual(copy, uint, "incorrect CBaseBlob::operator!=")
|
||||||
|
self.assertTrue(copy.IsNull(), "incorrect CBaseBlob::IsNull")
|
||||||
|
copy = CUint256(uint)
|
||||||
|
self.assertEqual(copy, uint, "incorrect CBaseBlob::operator==")
|
||||||
|
copy.SetNull()
|
||||||
|
self.assertTrue(copy.IsNull()), "incorrect CBaseBlob::SetNull"
|
||||||
|
|
||||||
|
def test_txoupoint(self):
|
||||||
|
txp = self.txp
|
||||||
|
uint = self.uint
|
||||||
|
self.assertEqual(txp.hash, uint, "incorrect CTxOutPoint::CTxOutPoint")
|
||||||
|
self.assertEqual(txp.n, 1, "incorrect CTxOutPoint::CTxOutPoint")
|
||||||
|
self.assertFalse(txp.IsNull(), "incorrect CTxOutPoint::IsNull")
|
||||||
|
pcopy = CTxOutPoint()
|
||||||
|
self.assertTrue(pcopy.IsNull(), "incorrect CTxOutPoint::IsNull")
|
||||||
|
self.assertEqual(pcopy.hash, CUint256(), "incorrect CTxOutPoint::CTxOutPoint")
|
||||||
|
self.assertNotEqual(pcopy, txp, "incorrect CTxOutPoint::operator!=")
|
||||||
|
self.assertIn(uint.ToString()[:10], txp.ToString(), "incorrect CTxOutPoint::ToString")
|
||||||
|
|
||||||
|
def test_claim(self):
|
||||||
|
txp = self.txp
|
||||||
|
uint160 = self.uint160
|
||||||
|
self.assertEqual(uint160.size(), 20, "incorrect CBaseBlob::size")
|
||||||
|
claim = CClaimValue(txp, uint160, 20, 1, 10)
|
||||||
|
self.assertClaimEqual(claim, txp, uint160, 20, 20, 1, 10, "incorrect CClaimValue::CClaimValue")
|
||||||
|
|
||||||
|
def test_support(self):
|
||||||
|
txp = self.txp
|
||||||
|
uint160 = self.uint160
|
||||||
|
claim = CClaimValue(txp, uint160, 20, 1, 10)
|
||||||
|
support = CSupportValue(txp, uint160, 20, 1, 10)
|
||||||
|
self.assertSupportEqual(support, claim.outPoint, claim.claimId, claim.nAmount, claim.nHeight, claim.nValidAtHeight, "incorrect CSupportValue::CSupportValue")
|
||||||
|
|
||||||
|
def test_claimtrie(self):
|
||||||
|
txp = self.txp
|
||||||
|
uint160 = self.uint160
|
||||||
|
claim = CClaimValue(txp, uint160, 20, 1, 10)
|
||||||
|
data = CClaimTrieData()
|
||||||
|
data.insertClaim(claim)
|
||||||
|
wipe = True; height = 0; data_dir = "."
|
||||||
|
trie = CClaimTrie(wipe, height, data_dir)
|
||||||
|
cache = CClaimTrieCacheBase(trie)
|
||||||
|
self.assertTrue(cache.empty(), "incorrect CClaimtrieCache::empty")
|
||||||
|
self.assertFalse(cache.haveClaim("test", txp), "incorrect CClaimtrieCache::haveClaim")
|
||||||
|
self.assertTrue(cache.addClaim("tes", txp, uint160, 20, 0), "incorrect CClaimtrieCache::addClaim")
|
||||||
|
self.assertEqual(cache.getTotalNamesInTrie(), 1, "incorrect CClaimtrieCache::getTotalNamesInTrie")
|
||||||
|
self.assertEqual(cache.getTotalClaimsInTrie(), 1, "incorrect CClaimtrieCache::getTotalClaimsInTrie")
|
||||||
|
claimsToName = cache.getClaimsForName("test")
|
||||||
|
claims = claimsToName.claimsNsupports
|
||||||
|
self.assertEqual(claims.size(), 1, "incorrect CClaimTrieCache::getClaimsForName")
|
||||||
|
self.assertFalse(claims[0].IsNull(), "incorrect CClaimNsupports::IsNull")
|
||||||
|
|
||||||
|
unittest.main()
|
|
@ -452,7 +452,7 @@ CUint256 CClaimTrieCacheBase::recursiveComputeMerkleHash(const std::string& name
|
||||||
std::vector<std::tuple<std::string, std::unique_ptr<CUint256>, int>> children;
|
std::vector<std::tuple<std::string, std::unique_ptr<CUint256>, int>> children;
|
||||||
childHashQuery << name >> [&children](std::string name, std::unique_ptr<CUint256> hash, int takeoverHeight) {
|
childHashQuery << name >> [&children](std::string name, std::unique_ptr<CUint256> hash, int takeoverHeight) {
|
||||||
children.push_back(std::make_tuple(std::move(name), std::move(hash), takeoverHeight));
|
children.push_back(std::make_tuple(std::move(name), std::move(hash), takeoverHeight));
|
||||||
}
|
};
|
||||||
childHashQuery++;
|
childHashQuery++;
|
||||||
|
|
||||||
for (auto& child: children) {
|
for (auto& child: children) {
|
||||||
|
@ -460,7 +460,7 @@ CUint256 CClaimTrieCacheBase::recursiveComputeMerkleHash(const std::string& name
|
||||||
auto& hash = std::get<1>(child);
|
auto& hash = std::get<1>(child);
|
||||||
if (!hash) hash = std::make_unique<CUint256>();
|
if (!hash) hash = std::make_unique<CUint256>();
|
||||||
if (hash->IsNull())
|
if (hash->IsNull())
|
||||||
hash = recursiveComputeMerkleHash(name, std::get<2>(child), checkOnly);
|
*hash = recursiveComputeMerkleHash(name, std::get<2>(child), checkOnly);
|
||||||
completeHash(*hash, name, pos);
|
completeHash(*hash, name, pos);
|
||||||
vchToHash.push_back(name[pos]);
|
vchToHash.push_back(name[pos]);
|
||||||
vchToHash.insert(vchToHash.end(), hash->begin(), hash->end());
|
vchToHash.insert(vchToHash.end(), hash->begin(), hash->end());
|
||||||
|
|
|
@ -55,17 +55,18 @@ class CClaimTrie
|
||||||
friend class CClaimTrieCacheHashFork;
|
friend class CClaimTrieCacheHashFork;
|
||||||
friend class CClaimTrieCacheExpirationFork;
|
friend class CClaimTrieCacheExpirationFork;
|
||||||
friend class CClaimTrieCacheNormalizationFork;
|
friend class CClaimTrieCacheNormalizationFork;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CClaimTrie() = default;
|
CClaimTrie() = default;
|
||||||
CClaimTrie(CClaimTrie&&) = delete;
|
CClaimTrie(CClaimTrie&&) = delete;
|
||||||
CClaimTrie(const CClaimTrie&) = delete;
|
CClaimTrie(const CClaimTrie&) = delete;
|
||||||
CClaimTrie(bool fWipe, int height,
|
CClaimTrie(bool fWipe, int height,
|
||||||
const std::string& dataDir,
|
const std::string& dataDir,
|
||||||
int nNormalizedNameForkHeight,
|
int nNormalizedNameForkHeight = -1,
|
||||||
int64_t nOriginalClaimExpirationTime,
|
int64_t nOriginalClaimExpirationTime = -1,
|
||||||
int64_t nExtendedClaimExpirationTime,
|
int64_t nExtendedClaimExpirationTime = -1,
|
||||||
int64_t nExtendedClaimExpirationForkHeight,
|
int64_t nExtendedClaimExpirationForkHeight = -1,
|
||||||
int64_t nAllClaimsInMerkleForkHeight,
|
int64_t nAllClaimsInMerkleForkHeight = -1,
|
||||||
int proportionalDelayFactor = 32);
|
int proportionalDelayFactor = 32);
|
||||||
|
|
||||||
CClaimTrie& operator=(CClaimTrie&&) = delete;
|
CClaimTrie& operator=(CClaimTrie&&) = delete;
|
||||||
|
@ -77,7 +78,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
int nNextHeight = 0;
|
int nNextHeight = 0;
|
||||||
sqlite::database db;
|
sqlite::database db;
|
||||||
const int nProportionalDelayFactor = 0;
|
const int nProportionalDelayFactor = 1;
|
||||||
|
|
||||||
const int nNormalizedNameForkHeight = -1;
|
const int nNormalizedNameForkHeight = -1;
|
||||||
const int64_t nOriginalClaimExpirationTime = -1;
|
const int64_t nOriginalClaimExpirationTime = -1;
|
||||||
|
@ -90,6 +91,7 @@ struct CClaimTrieProofNode
|
||||||
{
|
{
|
||||||
CClaimTrieProofNode(std::vector<std::pair<unsigned char, CUint256>> children, bool hasValue, CUint256 valHash);
|
CClaimTrieProofNode(std::vector<std::pair<unsigned char, CUint256>> children, bool hasValue, CUint256 valHash);
|
||||||
|
|
||||||
|
CClaimTrieProofNode() = default;
|
||||||
CClaimTrieProofNode(CClaimTrieProofNode&&) = default;
|
CClaimTrieProofNode(CClaimTrieProofNode&&) = default;
|
||||||
CClaimTrieProofNode(const CClaimTrieProofNode&) = default;
|
CClaimTrieProofNode(const CClaimTrieProofNode&) = default;
|
||||||
CClaimTrieProofNode& operator=(CClaimTrieProofNode&&) = default;
|
CClaimTrieProofNode& operator=(CClaimTrieProofNode&&) = default;
|
||||||
|
@ -118,10 +120,20 @@ struct CClaimTrieProof
|
||||||
template <typename T>
|
template <typename T>
|
||||||
using queueEntryType = std::pair<std::string, T>;
|
using queueEntryType = std::pair<std::string, T>;
|
||||||
|
|
||||||
typedef std::vector<queueEntryType<CClaimValue>> claimUndoType;
|
#ifdef SWIG_INTERFACE // swig has a problem with using in typedef
|
||||||
typedef std::vector<queueEntryType<CSupportValue>> supportUndoType;
|
using claimUndoPair = std::pair<std::string, CClaimValue>;
|
||||||
|
using supportUndoPair = std::pair<std::string, CSupportValue>;
|
||||||
|
using takeoverUndoPair = std::pair<std::string, <std::pair<int, CUint160>>;
|
||||||
|
#else
|
||||||
|
using claimUndoPair = queueEntryType<CClaimValue>;
|
||||||
|
using supportUndoPair = queueEntryType<CSupportValue>;
|
||||||
|
using takeoverUndoPair = queueEntryType<std::pair<int, CUint160>>;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef std::vector<claimUndoPair> claimUndoType;
|
||||||
|
typedef std::vector<supportUndoPair> supportUndoType;
|
||||||
typedef std::vector<CNameOutPointHeightType> insertUndoType;
|
typedef std::vector<CNameOutPointHeightType> insertUndoType;
|
||||||
typedef std::vector<queueEntryType<std::pair<int, CUint160>>> takeoverUndoType;
|
typedef std::vector<takeoverUndoPair> takeoverUndoType;
|
||||||
|
|
||||||
class CClaimTrieCacheBase
|
class CClaimTrieCacheBase
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <uints.h>
|
#include <uints.h>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <string>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
@ -34,4 +35,8 @@ public:
|
||||||
std::string ToString() const;
|
std::string ToString() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef SWIG_INTERFACE
|
||||||
|
|
||||||
|
|
||||||
|
#endif // SWIG_INTERFACE
|
||||||
#endif // CLAIMTRIE_TXOUTPUT_H
|
#endif // CLAIMTRIE_TXOUTPUT_H
|
||||||
|
|
|
@ -88,18 +88,4 @@ void Unserialize(Stream& s, CNameOutPointHeightType& u)
|
||||||
Unserialize(s, u.nValidHeight);
|
Unserialize(s, u.nValidHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Stream>
|
|
||||||
void Serialize(Stream& s, const CClaimIndexElement& u)
|
|
||||||
{
|
|
||||||
Serialize(s, u.name);
|
|
||||||
Serialize(s, u.claim);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename Stream>
|
|
||||||
void Unserialize(Stream& s, CClaimIndexElement& u)
|
|
||||||
{
|
|
||||||
Unserialize(s, u.name);
|
|
||||||
Unserialize(s, u.claim);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // CLAIMTRIE_SERIAL_H
|
#endif // CLAIMTRIE_SERIAL_H
|
||||||
|
|
|
@ -1586,7 +1586,7 @@ bool AppInitMain(InitInterfaces& interfaces)
|
||||||
}
|
}
|
||||||
auto tip = chainActive.Tip();
|
auto tip = chainActive.Tip();
|
||||||
assert(tip);
|
assert(tip);
|
||||||
if (!CClaimTrieCache(pclaimTrie).validateDb(tip->hashClaimTrie))
|
if (!CClaimTrieCache(pclaimTrie).validateDb(tip->hashClaimTrie)) {
|
||||||
strLoadError = _("Error loading the claim trie from disk");
|
strLoadError = _("Error loading the claim trie from disk");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,15 +440,15 @@ BOOST_AUTO_TEST_CASE(claimtrie_update_takeover_test)
|
||||||
fixture.getLastTakeoverForName("test", cid2, takeover);
|
fixture.getLastTakeoverForName("test", cid2, takeover);
|
||||||
CClaimValue value;
|
CClaimValue value;
|
||||||
BOOST_REQUIRE(fixture.getInfoForName("test", value) && value.nAmount == 3);
|
BOOST_REQUIRE(fixture.getInfoForName("test", value) && value.nAmount == 3);
|
||||||
BOOST_CHECK_EQUAL(cid, cid2);
|
BOOST_CHECK_EQUAL(cid, uint160(cid2));
|
||||||
BOOST_CHECK_EQUAL(height, takeover);
|
BOOST_CHECK_EQUAL(height, takeover);
|
||||||
fixture.DecrementBlocks(1);
|
fixture.DecrementBlocks(1);
|
||||||
fixture.getLastTakeoverForName("test", cid2, takeover);
|
fixture.getLastTakeoverForName("test", cid2, takeover);
|
||||||
BOOST_CHECK_EQUAL(cid, cid2);
|
BOOST_CHECK_EQUAL(cid, uint160(cid2));
|
||||||
BOOST_CHECK_EQUAL(height, takeover);
|
BOOST_CHECK_EQUAL(height, takeover);
|
||||||
fixture.DecrementBlocks(1);
|
fixture.DecrementBlocks(1);
|
||||||
fixture.getLastTakeoverForName("test", cid2, takeover);
|
fixture.getLastTakeoverForName("test", cid2, takeover);
|
||||||
BOOST_CHECK_EQUAL(cid, cid2);
|
BOOST_CHECK_EQUAL(cid, uint160(cid2));
|
||||||
BOOST_CHECK_EQUAL(height, takeover);
|
BOOST_CHECK_EQUAL(height, takeover);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1924,7 +1924,7 @@ BOOST_AUTO_TEST_CASE(update_on_support2_test)
|
||||||
int lastTakeover;
|
int lastTakeover;
|
||||||
BOOST_CHECK(fixture.getLastTakeoverForName(name, claimId, lastTakeover));
|
BOOST_CHECK(fixture.getLastTakeoverForName(name, claimId, lastTakeover));
|
||||||
BOOST_CHECK_EQUAL(lastTakeover, height + 1);
|
BOOST_CHECK_EQUAL(lastTakeover, height + 1);
|
||||||
BOOST_CHECK_EQUAL(ClaimIdHash(tx1.GetHash(), 0), claimId);
|
BOOST_CHECK_EQUAL(ClaimIdHash(tx1.GetHash(), 0), uint160(claimId));
|
||||||
|
|
||||||
fixture.Spend(s1);
|
fixture.Spend(s1);
|
||||||
fixture.Spend(s2);
|
fixture.Spend(s2);
|
||||||
|
|
|
@ -276,9 +276,6 @@ BOOST_AUTO_TEST_CASE(hardfork_disk_test)
|
||||||
BOOST_CHECK_EQUAL(fixture.expirationTime(), 3);
|
BOOST_CHECK_EQUAL(fixture.expirationTime(), 3);
|
||||||
fixture.IncrementBlocks(7, true);
|
fixture.IncrementBlocks(7, true);
|
||||||
BOOST_CHECK_EQUAL(fixture.expirationTime(), 6);
|
BOOST_CHECK_EQUAL(fixture.expirationTime(), 6);
|
||||||
auto tip = chainActive.Tip();
|
|
||||||
pclaimTrie->ReadFromDisk(tip->nHeight, tip->hashClaimTrie);
|
|
||||||
BOOST_CHECK_EQUAL(fixture.expirationTime(), 6);
|
|
||||||
|
|
||||||
// Create a claim and support 1 block before the fork height that will expire after the fork height.
|
// Create a claim and support 1 block before the fork height that will expire after the fork height.
|
||||||
// Reset to disk, increment past the fork height and make sure we get
|
// Reset to disk, increment past the fork height and make sure we get
|
||||||
|
@ -288,8 +285,6 @@ BOOST_AUTO_TEST_CASE(hardfork_disk_test)
|
||||||
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(), tx1, "test", 1);
|
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(), tx1, "test", 1);
|
||||||
fixture.IncrementBlocks(1);
|
fixture.IncrementBlocks(1);
|
||||||
|
|
||||||
tip = chainActive.Tip();
|
|
||||||
pclaimTrie->ReadFromDisk(tip->nHeight, tip->hashClaimTrie);
|
|
||||||
BOOST_CHECK_EQUAL(fixture.expirationTime(), 3);
|
BOOST_CHECK_EQUAL(fixture.expirationTime(), 3);
|
||||||
fixture.IncrementBlocks(1);
|
fixture.IncrementBlocks(1);
|
||||||
BOOST_CHECK_EQUAL(fixture.expirationTime(), 6);
|
BOOST_CHECK_EQUAL(fixture.expirationTime(), 6);
|
||||||
|
@ -310,8 +305,7 @@ BOOST_AUTO_TEST_CASE(hardfork_disk_test)
|
||||||
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test2","one",1);
|
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test2","one",1);
|
||||||
CMutableTransaction s2 = fixture.MakeSupport(fixture.GetCoinbase(),tx2,"test2",1);
|
CMutableTransaction s2 = fixture.MakeSupport(fixture.GetCoinbase(),tx2,"test2",1);
|
||||||
fixture.IncrementBlocks(1);
|
fixture.IncrementBlocks(1);
|
||||||
tip = chainActive.Tip();
|
|
||||||
pclaimTrie->ReadFromDisk(tip->nHeight, tip->hashClaimTrie);
|
|
||||||
CMutableTransaction u2 = fixture.MakeUpdate(tx2, "test2", "two", ClaimIdHash(tx2.GetHash(), 0), 1);
|
CMutableTransaction u2 = fixture.MakeUpdate(tx2, "test2", "two", ClaimIdHash(tx2.GetHash(), 0), 1);
|
||||||
// increment to fork
|
// increment to fork
|
||||||
fixture.IncrementBlocks(2);
|
fixture.IncrementBlocks(2);
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
|
|
||||||
extern ::CChainState g_chainstate;
|
extern ::CChainState g_chainstate;
|
||||||
extern ::ArgsManager gArgs;
|
extern ::ArgsManager gArgs;
|
||||||
|
extern std::vector<std::string> random_strings(std::size_t count);
|
||||||
|
|
||||||
|
|
||||||
CMutableTransaction BuildTransaction(const uint256& prevhash);
|
CMutableTransaction BuildTransaction(const uint256& prevhash);
|
||||||
CMutableTransaction BuildTransaction(const CTransaction& prev, uint32_t prevout=0, unsigned int numOutputs=1, int locktime=0);
|
CMutableTransaction BuildTransaction(const CTransaction& prev, uint32_t prevout=0, unsigned int numOutputs=1, int locktime=0);
|
||||||
|
|
Loading…
Reference in a new issue