Remove unnecessary height field in removeClaim method
This commit is contained in:
parent
cccdce02df
commit
15be5dacce
6 changed files with 138 additions and 123 deletions
|
@ -144,7 +144,8 @@ def main():
|
|||
command.extend(lines)
|
||||
command.extend(['-style=file', '-fallback-style=none'])
|
||||
p = subprocess.Popen(command, stdout=subprocess.PIPE,
|
||||
stderr=None, stdin=subprocess.PIPE)
|
||||
stderr=None,
|
||||
stdin=subprocess.PIPE)
|
||||
stdout, stderr = p.communicate()
|
||||
if p.returncode != 0:
|
||||
sys.exit(p.returncode);
|
||||
|
|
|
@ -151,7 +151,7 @@ template<typename K> bool CClaimTrie::keyTypeEmpty(char keyType, K& dummy) const
|
|||
{
|
||||
boost::scoped_ptr<CDBIterator> pcursor(const_cast<CDBWrapper*>(&db)->NewIterator());
|
||||
pcursor->SeekToFirst();
|
||||
|
||||
|
||||
while (pcursor->Valid())
|
||||
{
|
||||
std::pair<char, K> key;
|
||||
|
@ -1197,7 +1197,7 @@ bool CClaimTrieCache::recursiveComputeMerkleHash(CClaimTrieNode* tnCurrent, std:
|
|||
vchToHash.insert(vchToHash.end(), it->second->hash.begin(), it->second->hash.end());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CClaimValue claim;
|
||||
bool hasClaim = tnCurrent->getBestClaim(claim);
|
||||
|
||||
|
@ -1301,7 +1301,7 @@ bool CClaimTrieCache::insertClaimIntoTrie(const std::string& name, CClaimValue c
|
|||
currentNode = childNode->second;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
// This next substring doesn't exist in the cache and the next
|
||||
// character doesn't exist in current node's children, so check
|
||||
// if the current node is in the cache, and if it's not, copy
|
||||
|
@ -1402,7 +1402,7 @@ bool CClaimTrieCache::removeClaimFromTrie(const std::string& name, const COutPoi
|
|||
bool fChanged = false;
|
||||
assert(currentNode != NULL);
|
||||
bool success = false;
|
||||
|
||||
|
||||
if (currentNode->claims.empty())
|
||||
{
|
||||
LogPrintf("%s: Asked to remove claim from node without claims\n", __func__);
|
||||
|
@ -1478,7 +1478,7 @@ bool CClaimTrieCache::recursivePruneName(CClaimTrieNode* tnCurrent, unsigned int
|
|||
// tnCurrent isn't necessarily in the cache. If it's not, it
|
||||
// has to be added to the cache, so nothing is changed in the
|
||||
// trie. If the current node is added to the cache, however,
|
||||
// that does not imply that the parent node must be altered to
|
||||
// that does not imply that the parent node must be altered to
|
||||
// reflect that its child is now in the cache, since it
|
||||
// already has a character in its child map which will be used
|
||||
// when calculating the merkle root.
|
||||
|
@ -1653,20 +1653,20 @@ bool CClaimTrieCache::removeClaimFromQueue(const std::string& name, const COutPo
|
|||
return false;
|
||||
}
|
||||
|
||||
bool CClaimTrieCache::undoAddClaim(const std::string& name, const COutPoint& outPoint, int nHeight) const
|
||||
bool CClaimTrieCache::undoAddClaim(const std::string& name, const COutPoint& outPoint) const
|
||||
{
|
||||
int throwaway;
|
||||
return removeClaim(name, outPoint, nHeight, throwaway, false);
|
||||
return removeClaim(name, outPoint, throwaway, false);
|
||||
}
|
||||
|
||||
bool CClaimTrieCache::spendClaim(const std::string& name, const COutPoint& outPoint, int nHeight, int& nValidAtHeight) const
|
||||
bool CClaimTrieCache::spendClaim(const std::string& name, const COutPoint& outPoint, int& nValidAtHeight) const
|
||||
{
|
||||
return removeClaim(name, outPoint, nHeight, nValidAtHeight, true);
|
||||
return removeClaim(name, outPoint, nValidAtHeight, true);
|
||||
}
|
||||
|
||||
bool CClaimTrieCache::removeClaim(const std::string& name, const COutPoint& outPoint, int nHeight, int& nValidAtHeight, bool fCheckTakeover) const
|
||||
bool CClaimTrieCache::removeClaim(const std::string& name, const COutPoint& outPoint, int& nValidAtHeight, bool fCheckTakeover) const
|
||||
{
|
||||
LogPrintf("%s: name: %s, txhash: %s, nOut: %s, nHeight: %s, nCurrentHeight: %s\n", __func__, name, outPoint.hash.GetHex(), outPoint.n, nHeight, nCurrentHeight);
|
||||
LogPrintf("%s: name: %s, txhash: %s, nOut: %s, nCurrentHeight: %s\n", __func__, name, outPoint.hash.GetHex(), outPoint.n, nCurrentHeight);
|
||||
bool removed = false;
|
||||
CClaimValue claim;
|
||||
if (removeClaimFromQueue(name, outPoint, claim))
|
||||
|
@ -1680,7 +1680,7 @@ bool CClaimTrieCache::removeClaim(const std::string& name, const COutPoint& outP
|
|||
if (removed == true)
|
||||
{
|
||||
nValidAtHeight = claim.nValidAtHeight;
|
||||
int expirationHeight = nHeight + base->nExpirationTime;
|
||||
int expirationHeight = claim.nHeight + base->nExpirationTime;
|
||||
removeFromExpirationQueue(name, outPoint, expirationHeight);
|
||||
claimsToDelete.insert(claim);
|
||||
}
|
||||
|
@ -2184,7 +2184,7 @@ bool CClaimTrieCache::incrementBlock(insertUndoType& insertUndo, claimQueueRowTy
|
|||
itSupportExpirationRow->second.clear();
|
||||
}
|
||||
// check each potentially taken over name to see if a takeover occurred.
|
||||
// if it did, then check the claim and support insertion queues for
|
||||
// if it did, then check the claim and support insertion queues for
|
||||
// the names that have been taken over, immediately insert all claim and
|
||||
// supports for those names, and stick them in the insertUndo or
|
||||
// insertSupportUndo vectors, with the nValidAtHeight they had prior to
|
||||
|
@ -2275,7 +2275,7 @@ bool CClaimTrieCache::incrementBlock(insertUndoType& insertUndo, claimQueueRowTy
|
|||
// remove all claims from the queue for that name
|
||||
itQueueNameRow->second.clear();
|
||||
}
|
||||
//
|
||||
//
|
||||
// Then, get all supports in the queue for that name
|
||||
queueNameType::iterator itSupportQueueNameRow = getSupportQueueCacheNameRow(*itNamesToCheck, false);
|
||||
if (itSupportQueueNameRow != supportQueueNameCache.end())
|
||||
|
@ -2390,7 +2390,7 @@ bool CClaimTrieCache::decrementBlock(insertUndoType& insertUndo, claimQueueRowTy
|
|||
assert(removeClaimFromTrie(itInsertUndo->name, itInsertUndo->outPoint, claim, false));
|
||||
queueNameType::iterator itQueueNameRow = getQueueCacheNameRow(itInsertUndo->name, true);
|
||||
itQueueRow->second.push_back(std::make_pair(itInsertUndo->name, claim));
|
||||
itQueueNameRow->second.push_back(outPointHeightType(itInsertUndo->outPoint, itInsertUndo->nHeight));
|
||||
itQueueNameRow->second.push_back(outPointHeightType(itInsertUndo->outPoint, itInsertUndo->nHeight));
|
||||
}
|
||||
|
||||
for (std::vector<std::pair<std::string, int> >::iterator itTakeoverHeightUndo = takeoverHeightUndo.begin(); itTakeoverHeightUndo != takeoverHeightUndo.end(); ++itTakeoverHeightUndo)
|
||||
|
|
|
@ -212,7 +212,6 @@ struct nameOutPointHeightType
|
|||
|
||||
nameOutPointHeightType(std::string name, COutPoint outPoint, int nHeight)
|
||||
: name(name), outPoint(outPoint), nHeight(nHeight) {}
|
||||
|
||||
ADD_SERIALIZE_METHODS;
|
||||
|
||||
template <typename Stream, typename Operation>
|
||||
|
@ -323,6 +322,7 @@ public:
|
|||
bool getLastTakeoverForName(const std::string& name, int& lastTakeoverHeight) const;
|
||||
|
||||
claimsForNameType getClaimsForName(const std::string& name) const;
|
||||
|
||||
CAmount getEffectiveAmountForClaim(const std::string& name, const uint160& claimId, std::vector<CSupportValue>* supports = NULL) const;
|
||||
CAmount getEffectiveAmountForClaim(const claimsForNameType& claims, const uint160& claimId, std::vector<CSupportValue>* supports = NULL) const;
|
||||
|
||||
|
@ -484,10 +484,8 @@ public:
|
|||
|
||||
bool addClaim(const std::string& name, const COutPoint& outPoint,
|
||||
uint160 claimId, CAmount nAmount, int nHeight) const;
|
||||
bool undoAddClaim(const std::string& name, const COutPoint& outPoint,
|
||||
int nHeight) const;
|
||||
bool spendClaim(const std::string& name, const COutPoint& outPoint,
|
||||
int nHeight, int& nValidAtHeight) const;
|
||||
bool undoAddClaim(const std::string& name, const COutPoint& outPoint) const;
|
||||
bool spendClaim(const std::string& name, const COutPoint& outPoint, int& nValidAtHeight) const;
|
||||
bool undoSpendClaim(const std::string& name, const COutPoint& outPoint,
|
||||
uint160 claimId, CAmount nAmount, int nHeight,
|
||||
int nValidAtHeight) const;
|
||||
|
@ -559,7 +557,7 @@ protected:
|
|||
mutable queueNameType supportQueueNameCache;
|
||||
mutable expirationQueueType supportExpirationQueueCache;
|
||||
mutable std::set<std::string> namesToCheckForTakeover;
|
||||
mutable std::map<std::string, int> cacheTakeoverHeights;
|
||||
mutable std::map<std::string, int> cacheTakeoverHeights;
|
||||
mutable int nCurrentHeight; // Height of the block that is being worked on, which is
|
||||
// one greater than the height of the chain's tip
|
||||
mutable claimIndexElementListType claimsToAdd;
|
||||
|
@ -578,9 +576,7 @@ protected:
|
|||
|
||||
bool clear() const;
|
||||
|
||||
bool removeClaim(const std::string& name, const COutPoint& outPoint,
|
||||
int nHeight, int& nValidAtHeight, bool fCheckTakeover) const;
|
||||
|
||||
bool removeClaim(const std::string& name, const COutPoint& outPoint, int& nValidAtHeight, bool fCheckTakeover) const;
|
||||
bool addClaimToQueues(const std::string& name, CClaimValue& claim) const;
|
||||
bool removeClaimFromQueue(const std::string& name, const COutPoint& outPoint,
|
||||
CClaimValue& claim) const;
|
||||
|
|
23
src/main.cpp
23
src/main.cpp
|
@ -963,13 +963,12 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
|
|||
if (!MoneyRange(nValueOut))
|
||||
return state.DoS(100, false, REJECT_INVALID, "bad-txns-txouttotal-toolarge");
|
||||
|
||||
// check claimtrie transactions
|
||||
// check claimtrie transactions
|
||||
|
||||
if (ClaimScriptSize(txout.scriptPubKey) > MAX_CLAIM_SCRIPT_SIZE)
|
||||
return state.DoS(100, false, REJECT_INVALID, "bad-txns-claimscriptsize-toolarge");
|
||||
if (ClaimNameSize(txout.scriptPubKey) > MAX_CLAIM_NAME_SIZE)
|
||||
if (ClaimNameSize(txout.scriptPubKey) > MAX_CLAIM_NAME_SIZE)
|
||||
return state.DoS(100, false, REJECT_INVALID, "bad-txns-claimscriptname-toolarge");
|
||||
|
||||
}
|
||||
|
||||
// Check for duplicate inputs
|
||||
|
@ -2194,8 +2193,7 @@ bool DisconnectBlock(const CBlock& block, CValidationState& state, const CBlockI
|
|||
}
|
||||
std::string name(vvchParams[0].begin(), vvchParams[0].end());
|
||||
LogPrintf("%s: (txid: %s, nOut: %d) Trying to remove %s from the claim trie due to its block being disconnected\n", __func__, hash.ToString(), i, name.c_str());
|
||||
if (!trieCache.undoAddClaim(name, COutPoint(hash, i), pindex->nHeight))
|
||||
{
|
||||
if (!trieCache.undoAddClaim(name, COutPoint(hash, i))) {
|
||||
LogPrintf("%s: Could not find the claim in the trie or the cache\n", __func__);
|
||||
}
|
||||
}
|
||||
|
@ -2503,7 +2501,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
|||
flags |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY;
|
||||
nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE;
|
||||
}
|
||||
|
||||
|
||||
// v 13 LBRYcrd hard fork to extend expiration time
|
||||
if (pindex->nHeight == Params().GetConsensus().nExtendedClaimExpirationForkHeight)
|
||||
{
|
||||
|
@ -2588,7 +2586,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
|||
|
||||
typedef std::vector<std::pair<std::string, uint160> > spentClaimsType;
|
||||
spentClaimsType spentClaims;
|
||||
|
||||
|
||||
for (unsigned int i = 0; i < tx.vin.size(); ++i)
|
||||
{
|
||||
const CTxIn& txin = tx.vin[i];
|
||||
|
@ -2625,8 +2623,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
|||
std::string name(vvchParams[0].begin(), vvchParams[0].end());
|
||||
int nValidAtHeight;
|
||||
LogPrintf("%s: Removing %s from the claim trie. Tx: %s, nOut: %d\n", __func__, name, txin.prevout.hash.GetHex(), txin.prevout.n);
|
||||
if (trieCache.spendClaim(name, COutPoint(txin.prevout.hash, txin.prevout.n), coins->nHeight, nValidAtHeight))
|
||||
{
|
||||
if (trieCache.spendClaim(name, COutPoint(txin.prevout.hash, txin.prevout.n), nValidAtHeight)) {
|
||||
mClaimUndoHeights[i] = nValidAtHeight;
|
||||
std::pair<std::string, uint160> entry(name, claimId);
|
||||
spentClaims.push_back(entry);
|
||||
|
@ -2649,7 +2646,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (unsigned int i = 0; i < tx.vout.size(); ++i)
|
||||
{
|
||||
const CTxOut& txout = tx.vout[i];
|
||||
|
@ -4218,8 +4215,8 @@ bool CVerifyDB::VerifyDB(const CChainParams& chainparams, CCoinsView *coinsview,
|
|||
return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||
// check level 1: verify block validity
|
||||
if (nCheckLevel >= 1 && !CheckBlock(block, state))
|
||||
return error("%s: *** found bad block at %d, hash=%s (%s)\n", __func__,
|
||||
pindex->nHeight, pindex->GetBlockHash().ToString(), FormatStateMessage(state));
|
||||
return error("%s: *** found bad block at %d, hash=%s (%s)\n", __func__,
|
||||
pindex->nHeight, pindex->GetBlockHash().ToString(), FormatStateMessage(state));
|
||||
// check level 2: verify undo validity
|
||||
if (nCheckLevel >= 2 && pindex) {
|
||||
CBlockUndo undo;
|
||||
|
@ -4348,7 +4345,7 @@ bool LoadBlockIndex()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool InitBlockIndex(const CChainParams& chainparams)
|
||||
bool InitBlockIndex(const CChainParams& chainparams)
|
||||
{
|
||||
LOCK(cs_main);
|
||||
|
||||
|
|
|
@ -294,8 +294,7 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const CScript& s
|
|||
}
|
||||
std::string name(vvchParams[0].begin(), vvchParams[0].end());
|
||||
int throwaway;
|
||||
if (trieCache.spendClaim(name, COutPoint(txin.prevout.hash, txin.prevout.n), nTxinHeight, throwaway))
|
||||
{
|
||||
if (trieCache.spendClaim(name, COutPoint(txin.prevout.hash, txin.prevout.n), throwaway)) {
|
||||
std::pair<std::string, uint160> entry(name, claimId);
|
||||
spentClaims.push_back(entry);
|
||||
}
|
||||
|
@ -316,11 +315,11 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const CScript& s
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (unsigned int i = 0; i < tx.vout.size(); ++i)
|
||||
{
|
||||
const CTxOut& txout = tx.vout[i];
|
||||
|
||||
|
||||
std::vector<std::vector<unsigned char> > vvchParams;
|
||||
int op;
|
||||
if (DecodeClaimScript(txout.scriptPubKey, op, vvchParams))
|
||||
|
@ -568,7 +567,7 @@ void static BitcoinMiner(const CChainParams& chainparams)
|
|||
while (true)
|
||||
{
|
||||
unsigned int nHashesDone = 0;
|
||||
|
||||
|
||||
// Check if something found
|
||||
while (true)
|
||||
{
|
||||
|
@ -599,7 +598,7 @@ void static BitcoinMiner(const CChainParams& chainparams)
|
|||
}
|
||||
if (found)
|
||||
break;
|
||||
|
||||
|
||||
// Meter hashes/sec
|
||||
static int64_t nHashCounter;
|
||||
if (nHPSTimerStart == 0)
|
||||
|
|
|
@ -24,37 +24,37 @@ using namespace std;
|
|||
|
||||
BOOST_FIXTURE_TEST_SUITE(claimtriebranching_tests, RegTestingSetup)
|
||||
|
||||
//is a claim in queue
|
||||
//is a claim in queue
|
||||
boost::test_tools::predicate_result
|
||||
is_claim_in_queue(std::string name, const CTransaction &tx)
|
||||
{
|
||||
COutPoint outPoint(tx.GetHash(), 0);
|
||||
int validAtHeight;
|
||||
bool have_claim = pclaimTrie->haveClaimInQueue(name,outPoint,validAtHeight);
|
||||
int validAtHeight;
|
||||
bool have_claim = pclaimTrie->haveClaimInQueue(name, outPoint, validAtHeight);
|
||||
if (have_claim){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
boost::test_tools::predicate_result res(false);
|
||||
res.message()<<"Is not a claim in queue.";
|
||||
res.message() << "Is not a claim in queue.";
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
// check if tx is best claim based on outpoint
|
||||
// check if tx is best claim based on outpoint
|
||||
boost::test_tools::predicate_result
|
||||
is_best_claim(std::string name, const CTransaction &tx)
|
||||
{
|
||||
CClaimValue val;
|
||||
COutPoint outPoint(tx.GetHash(), 0);
|
||||
bool have_claim = pclaimTrie->haveClaim(name,outPoint);
|
||||
bool have_claim = pclaimTrie->haveClaim(name, outPoint);
|
||||
bool have_info = pclaimTrie->getInfoForName(name, val);
|
||||
if (have_claim && have_info && val.outPoint == outPoint){
|
||||
return true;
|
||||
}
|
||||
else{
|
||||
boost::test_tools::predicate_result res(false);
|
||||
res.message()<<"Is not best claim";
|
||||
res.message() << "Is not best claim";
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
@ -154,13 +154,13 @@ bool CreateCoinbases(unsigned int num_coinbases, std::vector<CTransaction>& coin
|
|||
}
|
||||
|
||||
|
||||
// Test Fixtures
|
||||
// Test Fixtures
|
||||
struct ClaimTrieChainFixture{
|
||||
std::vector<CTransaction> coinbase_txs;
|
||||
std::vector<int> marks;
|
||||
int coinbase_txs_used;
|
||||
unsigned int num_txs;
|
||||
unsigned int num_txs_for_next_block;
|
||||
int coinbase_txs_used;
|
||||
unsigned int num_txs;
|
||||
unsigned int num_txs_for_next_block;
|
||||
|
||||
// these will take on regtest parameters
|
||||
const int expirationForkHeight;
|
||||
|
@ -177,7 +177,7 @@ struct ClaimTrieChainFixture{
|
|||
ENTER_CRITICAL_SECTION(cs_main);
|
||||
BOOST_CHECK(pclaimTrie->nCurrentHeight == chainActive.Height() + 1);
|
||||
num_txs_for_next_block = 0;
|
||||
num_txs = 0;
|
||||
num_txs = 0;
|
||||
coinbase_txs_used = 0;
|
||||
// generate coinbases to spend
|
||||
CreateCoinbases(40, coinbase_txs);
|
||||
|
@ -205,30 +205,29 @@ struct ClaimTrieChainFixture{
|
|||
BOOST_CHECK(AcceptToMemoryPool(mempool, state, tx, false, &fMissingInputs, &txFeeRate));
|
||||
}
|
||||
|
||||
//spend a bid into some non claimtrie related unspent
|
||||
//spend a bid into some non claimtrie related unspent
|
||||
CMutableTransaction Spend(const CTransaction &prev){
|
||||
|
||||
uint32_t prevout = 0;
|
||||
CMutableTransaction tx = BuildTransaction(prev,prevout);
|
||||
CMutableTransaction tx = BuildTransaction(prev, prevout);
|
||||
tx.vout[0].scriptPubKey = CScript() << OP_TRUE;
|
||||
tx.vout[0].nValue = 1;
|
||||
|
||||
CommitTx(tx);
|
||||
return tx;
|
||||
CommitTx(tx);
|
||||
return tx;
|
||||
}
|
||||
|
||||
//make claim at the current block
|
||||
CMutableTransaction MakeClaim(const CTransaction &prev, std::string name, std::string value,
|
||||
CAmount quantity)
|
||||
CMutableTransaction MakeClaim(const CTransaction& prev, std::string name, std::string value, CAmount quantity)
|
||||
{
|
||||
uint32_t prevout = 0;
|
||||
uint32_t prevout = 0;
|
||||
|
||||
CMutableTransaction tx = BuildTransaction(prev,prevout);
|
||||
tx.vout[0].scriptPubKey = ClaimNameScript(name,value);
|
||||
tx.vout[0].scriptPubKey = ClaimNameScript(name, value);
|
||||
tx.vout[0].nValue = quantity;
|
||||
|
||||
CommitTx(tx);
|
||||
return tx;
|
||||
CommitTx(tx);
|
||||
return tx;
|
||||
}
|
||||
|
||||
CMutableTransaction MakeClaim(const CTransaction& prev, std::string name, std::string value)
|
||||
|
@ -243,10 +242,10 @@ struct ClaimTrieChainFixture{
|
|||
uint32_t prevout = 0;
|
||||
|
||||
CMutableTransaction tx = BuildTransaction(prev,prevout);
|
||||
tx.vout[0].scriptPubKey = SupportClaimScript(name,claimId);
|
||||
tx.vout[0].scriptPubKey = SupportClaimScript(name, claimId);
|
||||
tx.vout[0].nValue = quantity;
|
||||
|
||||
CommitTx(tx);
|
||||
CommitTx(tx);
|
||||
return tx;
|
||||
}
|
||||
|
||||
|
@ -257,10 +256,10 @@ struct ClaimTrieChainFixture{
|
|||
uint32_t prevout = 0;
|
||||
|
||||
CMutableTransaction tx = BuildTransaction(prev,prevout);
|
||||
tx.vout[0].scriptPubKey = UpdateClaimScript(name,claimId,value);
|
||||
tx.vout[0].scriptPubKey = UpdateClaimScript(name, claimId, value);
|
||||
tx.vout[0].nValue = quantity;
|
||||
|
||||
CommitTx(tx);
|
||||
CommitTx(tx);
|
||||
return tx;
|
||||
}
|
||||
|
||||
|
@ -280,7 +279,7 @@ struct ClaimTrieChainFixture{
|
|||
for (int i = 0; i < num_blocks; ++i)
|
||||
{
|
||||
CBlockTemplate *pblocktemplate;
|
||||
CScript coinbase_scriptpubkey;
|
||||
CScript coinbase_scriptpubkey;
|
||||
coinbase_scriptpubkey << CScriptNum(chainActive.Height());
|
||||
BOOST_CHECK(pblocktemplate = CreateNewBlock(Params(), coinbase_scriptpubkey));
|
||||
BOOST_CHECK(pblocktemplate->block.vtx.size() == num_txs_for_next_block+1);
|
||||
|
@ -338,8 +337,8 @@ struct ClaimTrieChainFixture{
|
|||
there is a competing bid inserted same height
|
||||
check the greater one wins
|
||||
- quantity is same, check outpoint greater wins
|
||||
there is an existing competing bid
|
||||
check that rules for delays are observed
|
||||
there is an existing competing bid
|
||||
check that rules for delays are observed
|
||||
check that a greater amount wins
|
||||
check that a smaller amount does not win
|
||||
|
||||
|
@ -354,7 +353,7 @@ BOOST_AUTO_TEST_CASE(claim_test)
|
|||
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(!is_best_claim("test",tx1));
|
||||
|
||||
|
||||
// there is a competing bid inserted same height
|
||||
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
CMutableTransaction tx3 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
|
@ -362,34 +361,34 @@ BOOST_AUTO_TEST_CASE(claim_test)
|
|||
BOOST_CHECK(is_best_claim("test",tx3));
|
||||
BOOST_CHECK_EQUAL(2U, pclaimTrie->getClaimsForName("test").claims.size());
|
||||
|
||||
fixture.DecrementBlocks(1);
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(!is_best_claim("test",tx2));
|
||||
BOOST_CHECK(!is_best_claim("test",tx3));
|
||||
BOOST_CHECK_EQUAL(0U, pclaimTrie->getClaimsForName("test").claims.size());
|
||||
|
||||
// make two claims , one older
|
||||
// make two claims , one older
|
||||
CMutableTransaction tx4 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
fixture.IncrementBlocks(1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
CMutableTransaction tx5 = fixture.MakeClaim(fixture.GetCoinbase(),"test","two",1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_claim_in_queue("test",tx5));
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK(is_best_claim("test", tx4));
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK_EQUAL(2U, pclaimTrie->getClaimsForName("test").claims.size());
|
||||
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test", tx4));
|
||||
BOOST_CHECK(is_claim_in_queue("test",tx5));
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test", tx4));
|
||||
fixture.DecrementBlocks(1);
|
||||
|
||||
// check claim takeover, note that CClaimTrie.nProportionalDelayFactor is set to 1
|
||||
// instead of 32 in test_bitcoin.cpp
|
||||
CMutableTransaction tx6 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
fixture.IncrementBlocks(10);
|
||||
fixture.IncrementBlocks(10);
|
||||
BOOST_CHECK(is_best_claim("test",tx6));
|
||||
CMutableTransaction tx7 = fixture.MakeClaim(fixture.GetCoinbase(),"test","two",2);
|
||||
fixture.IncrementBlocks(1);
|
||||
|
@ -401,7 +400,7 @@ BOOST_AUTO_TEST_CASE(claim_test)
|
|||
|
||||
fixture.DecrementBlocks(10);
|
||||
BOOST_CHECK(is_claim_in_queue("test",tx7));
|
||||
BOOST_CHECK(is_best_claim("test",tx6));
|
||||
BOOST_CHECK(is_best_claim("test", tx6));
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx6));
|
||||
fixture.DecrementBlocks(10);
|
||||
|
@ -409,26 +408,26 @@ BOOST_AUTO_TEST_CASE(claim_test)
|
|||
|
||||
/*
|
||||
spent claims
|
||||
spending winning claim will make losing active claim winner
|
||||
spending winning claim will make losing active claim winner
|
||||
spending winning claim will make inactive claim winner
|
||||
spending winning claim will empty out claim trie
|
||||
spending winning claim will empty out claim trie
|
||||
*/
|
||||
BOOST_AUTO_TEST_CASE(spend_claim_test)
|
||||
{
|
||||
ClaimTrieChainFixture fixture;
|
||||
|
||||
// spending winning claim will make losing active claim winner
|
||||
// spending winning claim will make losing active claim winner
|
||||
CMutableTransaction tx1 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx1));
|
||||
BOOST_CHECK(is_best_claim("test", tx1));
|
||||
fixture.Spend(tx1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx2));
|
||||
|
||||
BOOST_CHECK(is_best_claim("test", tx2));
|
||||
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test", tx1));
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx1));
|
||||
fixture.DecrementBlocks(1);
|
||||
|
||||
|
||||
// spending winning claim will make inactive claim winner
|
||||
|
@ -436,7 +435,7 @@ BOOST_AUTO_TEST_CASE(spend_claim_test)
|
|||
fixture.IncrementBlocks(10);
|
||||
BOOST_CHECK(is_best_claim("test",tx3));
|
||||
CMutableTransaction tx4 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
fixture.IncrementBlocks(1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx3));
|
||||
fixture.Spend(tx3);
|
||||
fixture.IncrementBlocks(1);
|
||||
|
@ -449,7 +448,7 @@ BOOST_AUTO_TEST_CASE(spend_claim_test)
|
|||
fixture.DecrementBlocks(10);
|
||||
|
||||
|
||||
//spending winning claim will empty out claim trie
|
||||
//spending winning claim will empty out claim trie
|
||||
CMutableTransaction tx5 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx5));
|
||||
|
@ -466,14 +465,14 @@ BOOST_AUTO_TEST_CASE(spend_claim_test)
|
|||
|
||||
/*
|
||||
supports
|
||||
check support with wrong name does not work
|
||||
check support with wrong name does not work
|
||||
check claim with more support wins
|
||||
check support delay
|
||||
check support delay
|
||||
*/
|
||||
BOOST_AUTO_TEST_CASE(support_test)
|
||||
{
|
||||
ClaimTrieChainFixture fixture;
|
||||
// check claim with more support wins
|
||||
// check claim with more support wins
|
||||
CMutableTransaction tx1 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(),tx1,"test",1);
|
||||
|
@ -483,13 +482,13 @@ BOOST_AUTO_TEST_CASE(support_test)
|
|||
BOOST_CHECK(best_claim_effective_amount_equals("test",11));
|
||||
fixture.DecrementBlocks(1);
|
||||
|
||||
// check support delay
|
||||
// check support delay
|
||||
CMutableTransaction tx3 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
CMutableTransaction tx4 = fixture.MakeClaim(fixture.GetCoinbase(),"test","two",2);
|
||||
fixture.IncrementBlocks(10);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK(best_claim_effective_amount_equals("test",2));
|
||||
CMutableTransaction s4 = fixture.MakeSupport(fixture.GetCoinbase(),tx3,"test",10); //10 delay
|
||||
CMutableTransaction s4 = fixture.MakeSupport(fixture.GetCoinbase(), tx3, "test", 10); //10 delay
|
||||
fixture.IncrementBlocks(10);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK(best_claim_effective_amount_equals("test",2));
|
||||
|
@ -501,7 +500,7 @@ BOOST_AUTO_TEST_CASE(support_test)
|
|||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK(best_claim_effective_amount_equals("test",2));
|
||||
fixture.DecrementBlocks(10);
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK(is_best_claim("test", tx4));
|
||||
BOOST_CHECK(best_claim_effective_amount_equals("test",2));
|
||||
fixture.DecrementBlocks(10);
|
||||
}
|
||||
|
@ -572,7 +571,7 @@ BOOST_AUTO_TEST_CASE(update_on_support_test)
|
|||
support spend
|
||||
spending suport on winning claim will cause it to lose
|
||||
|
||||
spending a support on txin[i] where i is not 0
|
||||
spending a support on txin[i] where i is not 0
|
||||
*/
|
||||
BOOST_AUTO_TEST_CASE(support_spend_test)
|
||||
{
|
||||
|
@ -582,7 +581,7 @@ BOOST_AUTO_TEST_CASE(support_spend_test)
|
|||
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(),tx1,"test",2);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx1));
|
||||
BOOST_CHECK(is_best_claim("test", tx1));
|
||||
CMutableTransaction sp1 = fixture.Spend(s1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx2));
|
||||
|
@ -591,8 +590,8 @@ BOOST_AUTO_TEST_CASE(support_spend_test)
|
|||
BOOST_CHECK(is_best_claim("test",tx1));
|
||||
fixture.DecrementBlocks(1);
|
||||
|
||||
// spend a support on txin[i] where i is not 0
|
||||
|
||||
// spend a support on txin[i] where i is not 0
|
||||
|
||||
CMutableTransaction tx3 = fixture.MakeClaim(fixture.GetCoinbase(),"x","one",3);
|
||||
CMutableTransaction tx4 = fixture.MakeClaim(fixture.GetCoinbase(),"test","two",2);
|
||||
CMutableTransaction tx5 = fixture.MakeClaim(fixture.GetCoinbase(),"test","three",1);
|
||||
|
@ -601,7 +600,7 @@ BOOST_AUTO_TEST_CASE(support_spend_test)
|
|||
BOOST_CHECK(is_best_claim("test",tx5));
|
||||
BOOST_CHECK_EQUAL(2U, pclaimTrie->getClaimsForName("test").claims.size());
|
||||
|
||||
// build the spend where s2 is sppent on txin[1] and tx3 is spent on txin[0]
|
||||
// build the spend where s2 is sppent on txin[1] and tx3 is spent on txin[0]
|
||||
uint32_t prevout = 0;
|
||||
CMutableTransaction tx;
|
||||
tx.nVersion = 1;
|
||||
|
@ -619,40 +618,40 @@ BOOST_AUTO_TEST_CASE(support_spend_test)
|
|||
tx.vout[0].scriptPubKey = CScript() << OP_TRUE;
|
||||
tx.vout[0].nValue = 1;
|
||||
|
||||
fixture.CommitTx(tx);
|
||||
fixture.CommitTx(tx);
|
||||
fixture.IncrementBlocks(1);
|
||||
|
||||
BOOST_CHECK(is_best_claim("test",tx4));
|
||||
BOOST_CHECK(is_best_claim("test", tx4));
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx5));
|
||||
}
|
||||
/*
|
||||
update
|
||||
update preserves claim id
|
||||
update preserves supports
|
||||
update preserves supports
|
||||
winning update on winning claim happens without delay
|
||||
losing update on winning claim happens without delay
|
||||
update on losing claim happens with delay , and wins
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
BOOST_AUTO_TEST_CASE(claimtrie_update_test)
|
||||
{
|
||||
//update preserves claim id
|
||||
//update preserves claim id
|
||||
ClaimTrieChainFixture fixture;
|
||||
CMutableTransaction tx1 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
CMutableTransaction u1 = fixture.MakeUpdate(tx1,"test","one",ClaimIdHash(tx1.GetHash(),0),2);
|
||||
CMutableTransaction u1 = fixture.MakeUpdate(tx1, "test", "one", ClaimIdHash(tx1.GetHash(), 0), 2);
|
||||
fixture.IncrementBlocks(1);
|
||||
CClaimValue val;
|
||||
CClaimValue val;
|
||||
pclaimTrie->getInfoForName("test",val);
|
||||
BOOST_CHECK(val.claimId == ClaimIdHash(tx1.GetHash(),0));
|
||||
BOOST_CHECK(is_best_claim("test",u1));
|
||||
fixture.DecrementBlocks(1);
|
||||
|
||||
fixture.DecrementBlocks(1);
|
||||
|
||||
// update preserves supports
|
||||
CMutableTransaction tx2 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(),tx2,"test",1);
|
||||
CMutableTransaction u2 = fixture.MakeUpdate(tx2,"test","one",ClaimIdHash(tx2.GetHash(),0),1);
|
||||
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(), tx2, "test", 1);
|
||||
CMutableTransaction u2 = fixture.MakeUpdate(tx2, "test", "one", ClaimIdHash(tx2.GetHash(), 0), 1);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(best_claim_effective_amount_equals("test",2));
|
||||
fixture.DecrementBlocks(1);
|
||||
|
@ -661,7 +660,7 @@ BOOST_AUTO_TEST_CASE(claimtrie_update_test)
|
|||
CMutableTransaction tx3 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
CMutableTransaction tx4 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
fixture.IncrementBlocks(10);
|
||||
CMutableTransaction u3 = fixture.MakeUpdate(tx3,"test","one",ClaimIdHash(tx3.GetHash(),0),2);
|
||||
CMutableTransaction u3 = fixture.MakeUpdate(tx3, "test", "one", ClaimIdHash(tx3.GetHash(), 0), 2);
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",u3));
|
||||
BOOST_CHECK_EQUAL(2U, pclaimTrie->getClaimsForName("test").claims.size());
|
||||
|
@ -678,14 +677,14 @@ BOOST_AUTO_TEST_CASE(claimtrie_update_test)
|
|||
BOOST_CHECK(is_best_claim("test",tx6));
|
||||
|
||||
fixture.DecrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx5));
|
||||
BOOST_CHECK(is_best_claim("test", tx5));
|
||||
fixture.DecrementBlocks(10);
|
||||
|
||||
// update on losing claim happens with delay , and wins
|
||||
CMutableTransaction tx7 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",3);
|
||||
CMutableTransaction tx8 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",2);
|
||||
fixture.IncrementBlocks(10);
|
||||
BOOST_CHECK(is_best_claim("test",tx7));
|
||||
BOOST_CHECK(is_best_claim("test", tx7));
|
||||
|
||||
CMutableTransaction tx;
|
||||
tx.nVersion = 1;
|
||||
|
@ -702,7 +701,7 @@ BOOST_AUTO_TEST_CASE(claimtrie_update_test)
|
|||
tx.vin[1].nSequence = std::numeric_limits<unsigned int>::max();
|
||||
tx.vout[0].scriptPubKey = UpdateClaimScript("test",ClaimIdHash(tx8.GetHash(),0),"one");
|
||||
tx.vout[0].nValue = 4;
|
||||
fixture.CommitTx(tx);
|
||||
fixture.CommitTx(tx);
|
||||
|
||||
fixture.IncrementBlocks(1);
|
||||
BOOST_CHECK(is_best_claim("test",tx7));
|
||||
|
@ -718,7 +717,7 @@ BOOST_AUTO_TEST_CASE(claimtrie_update_test)
|
|||
expiration
|
||||
check claims expire and loses claim
|
||||
check claims expire and is not updateable (may be changed in future soft fork)
|
||||
check supports expire and can cause supported bid to lose claim
|
||||
check supports expire and can cause supported bid to lose claim
|
||||
*/
|
||||
BOOST_AUTO_TEST_CASE(claimtrie_expire_test)
|
||||
{
|
||||
|
@ -977,7 +976,7 @@ BOOST_AUTO_TEST_CASE(hardfork_support_test)
|
|||
ClaimTrieChainFixture fixture;
|
||||
|
||||
int blocks_before_fork = 10;
|
||||
fixture.IncrementBlocks(fixture.expirationForkHeight - chainActive.Height() - blocks_before_fork-1);
|
||||
fixture.IncrementBlocks(fixture.expirationForkHeight - chainActive.Height() - blocks_before_fork - 1);
|
||||
// Create claim and support it before the fork height
|
||||
CMutableTransaction tx1 = fixture.MakeClaim(fixture.GetCoinbase(),"test","one",1);
|
||||
CMutableTransaction s1 = fixture.MakeSupport(fixture.GetCoinbase(),tx1,"test",2);
|
||||
|
@ -1900,6 +1899,29 @@ BOOST_AUTO_TEST_CASE(claimtrienode_serialize_unserialize)
|
|||
BOOST_CHECK(n1 == n2);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(claimtrienode_remove_invalid_claim)
|
||||
{
|
||||
uint160 hash160;
|
||||
|
||||
CClaimTrieNode n1;
|
||||
CClaimTrieNode n2;
|
||||
CClaimValue throwaway;
|
||||
|
||||
CClaimValue v1(COutPoint(uint256S("0000000000000000000000000000000000000000000000000000000000000001"), 0), hash160, 50, 0, 100);
|
||||
CClaimValue v2(COutPoint(uint256S("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"), 1), hash160, 100, 1, 101);
|
||||
|
||||
n1.insertClaim(v1);
|
||||
|
||||
n2.insertClaim(v2);
|
||||
|
||||
bool invalidClaim = n2.removeClaim(v1.outPoint, throwaway);
|
||||
BOOST_CHECK(invalidClaim == false);
|
||||
|
||||
invalidClaim = n1.removeClaim(v2.outPoint, throwaway);
|
||||
BOOST_CHECK(invalidClaim == false);
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(invalid_claimid_test)
|
||||
{
|
||||
ClaimTrieChainFixture fixture;
|
||||
|
|
Loading…
Reference in a new issue