Serialize effective amount #231

Closed
bvbfan wants to merge 309 commits from serialize_effective_amount into master
14 changed files with 331 additions and 128 deletions
Showing only changes of commit f0b2c46d68 - Show all commits

View file

@ -244,6 +244,22 @@ bool CClaimTrie::haveClaim(const std::string& name, const uint256& txhash, uint3
return current->haveValue(txhash, nOut); return current->haveValue(txhash, nOut);
} }
bool CClaimTrie::haveSupport(const std::string& name, const uint256& txhash, uint32_t nOut) const
{
supportMapNodeType node;
if (!getSupportNode(name, node))
{
return false;
}
for (supportMapNodeType::const_iterator itnode = node.begin(); itnode != node.end(); ++itnode)
{
if (itnode->txhash == txhash && itnode->nOut == nOut)
return true;
}
return false;
}
unsigned int CClaimTrie::getTotalNamesInTrie() const unsigned int CClaimTrie::getTotalNamesInTrie() const
{ {
if (empty()) if (empty())
@ -469,6 +485,17 @@ bool CClaimTrie::getSupportNode(std::string name, supportMapNodeType& node)
return db.Read(std::make_pair(SUPPORT, name), node); return db.Read(std::make_pair(SUPPORT, name), node);
} }
bool CClaimTrie::getSupportNode(std::string name, supportMapNodeType& node) const
{
supportMapType::const_iterator itNode = dirtySupportNodes.find(name);
if (itNode != dirtySupportNodes.end())
{
node = itNode->second;
return true;
}
return db.Read(std::make_pair(SUPPORT, name), node);
}
bool CClaimTrie::getSupportQueueRow(int nHeight, std::vector<CSupportValueQueueEntry>& row) bool CClaimTrie::getSupportQueueRow(int nHeight, std::vector<CSupportValueQueueEntry>& row)
{ {
supportValueQueueType::iterator itQueueRow = dirtySupportQueueRows.find(nHeight); supportValueQueueType::iterator itQueueRow = dirtySupportQueueRows.find(nHeight);
@ -1387,7 +1414,7 @@ bool CClaimTrieCache::insertSupportIntoMap(const std::string name, CSupportNodeV
return reorderTrieNode(name); return reorderTrieNode(name);
} }
bool CClaimTrieCache::removeSupportFromMap(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight, int& nValidAtHeight) const bool CClaimTrieCache::removeSupportFromMap(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int& nValidAtHeight) const
{ {
supportMapType::iterator cachedNode; supportMapType::iterator cachedNode;
cachedNode = supportCache.find(name); cachedNode = supportCache.find(name);
@ -1444,7 +1471,7 @@ supportValueQueueType::iterator CClaimTrieCache::getSupportQueueCacheRow(int nHe
return itQueueRow; return itQueueRow;
} }
bool CClaimTrieCache::addSupportToQueue(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, int supportednOut, int nHeight, int nValidAtHeight) const bool CClaimTrieCache::addSupportToQueue(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int nValidAtHeight) const
{ {
LogPrintf("%s: nValidAtHeight: %d\n", __func__, nValidAtHeight); LogPrintf("%s: nValidAtHeight: %d\n", __func__, nValidAtHeight);
CSupportNodeValue val(txhash, nOut, supportedTxhash, supportednOut, nAmount, nHeight, nValidAtHeight); CSupportNodeValue val(txhash, nOut, supportedTxhash, supportednOut, nAmount, nHeight, nValidAtHeight);
@ -1454,7 +1481,7 @@ bool CClaimTrieCache::addSupportToQueue(const std::string name, uint256 txhash,
return true; return true;
} }
bool CClaimTrieCache::removeSupportFromQueue(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeightToCheck, int& nValidAtHeight) const bool CClaimTrieCache::removeSupportFromQueue(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeightToCheck, int& nValidAtHeight) const
{ {
supportValueQueueType::iterator itQueueRow = getSupportQueueCacheRow(nHeightToCheck, false); supportValueQueueType::iterator itQueueRow = getSupportQueueCacheRow(nHeightToCheck, false);
if (itQueueRow == supportQueueCache.end()) if (itQueueRow == supportQueueCache.end())
@ -1479,7 +1506,7 @@ bool CClaimTrieCache::removeSupportFromQueue(const std::string name, uint256 txh
return false; return false;
} }
bool CClaimTrieCache::addSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, int supportednOut, int nHeight) const bool CClaimTrieCache::addSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, uint32_t supportednOut, int nHeight) const
{ {
LogPrintf("%s: name: %s, txhash: %s, nOut: %d, nAmount: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, nAmount, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight); LogPrintf("%s: name: %s, txhash: %s, nOut: %d, nAmount: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, nAmount, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight);
assert(nHeight == nCurrentHeight); assert(nHeight == nCurrentHeight);
@ -1495,7 +1522,7 @@ bool CClaimTrieCache::addSupport(const std::string name, uint256 txhash, uint32_
return addSupportToQueue(name, txhash, nOut, nAmount, supportedTxhash, supportednOut, nHeight, nHeight + DEFAULT_DELAY); return addSupportToQueue(name, txhash, nOut, nAmount, supportedTxhash, supportednOut, nHeight, nHeight + DEFAULT_DELAY);
} }
bool CClaimTrieCache::undoSpendSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, int supportednOut, int nHeight, int nValidAtHeight) const bool CClaimTrieCache::undoSpendSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int nValidAtHeight) const
{ {
LogPrintf("%s: name: %s, txhash: %s, nOut: %d, nAmount: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, nAmount, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight); LogPrintf("%s: name: %s, txhash: %s, nOut: %d, nAmount: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, nAmount, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight);
if (nValidAtHeight < nCurrentHeight) if (nValidAtHeight < nCurrentHeight)
@ -1510,7 +1537,7 @@ bool CClaimTrieCache::undoSpendSupport(const std::string name, uint256 txhash, u
} }
} }
bool CClaimTrieCache::removeSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight, int& nValidAtHeight) const bool CClaimTrieCache::removeSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int& nValidAtHeight) const
{ {
bool removed = false; bool removed = false;
if (nHeight + DEFAULT_DELAY >= nCurrentHeight) if (nHeight + DEFAULT_DELAY >= nCurrentHeight)
@ -1525,14 +1552,14 @@ bool CClaimTrieCache::removeSupport(const std::string name, uint256 txhash, uint
return removed; return removed;
} }
bool CClaimTrieCache::undoAddSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight) const bool CClaimTrieCache::undoAddSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight) const
{ {
LogPrintf("%s: name: %s, txhash: %s, nOut: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight); LogPrintf("%s: name: %s, txhash: %s, nOut: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight);
int throwaway; int throwaway;
return removeSupport(name, txhash, nOut, supportedTxhash, supportednOut, nHeight, throwaway); return removeSupport(name, txhash, nOut, supportedTxhash, supportednOut, nHeight, throwaway);
} }
bool CClaimTrieCache::spendSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight, int& nValidAtHeight) const bool CClaimTrieCache::spendSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int& nValidAtHeight) const
{ {
LogPrintf("%s: name: %s, txhash: %s, nOut: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight); LogPrintf("%s: name: %s, txhash: %s, nOut: %d, supportedTxhash: %s, supportednOut: %d, nHeight: %d, nCurrentHeight: %d\n", __func__, name, txhash.GetHex(), nOut, supportedTxhash.GetHex(), supportednOut, nHeight, nCurrentHeight);
return removeSupport(name, txhash, nOut, supportedTxhash, supportednOut, nHeight, nValidAtHeight); return removeSupport(name, txhash, nOut, supportedTxhash, supportednOut, nHeight, nValidAtHeight);

View file

@ -83,7 +83,7 @@ public:
uint256 txhash; uint256 txhash;
uint32_t nOut; uint32_t nOut;
uint256 supportTxhash; uint256 supportTxhash;
int supportnOut; uint32_t supportnOut;
CAmount nAmount; CAmount nAmount;
int nHeight; int nHeight;
int nValidAtHeight; int nValidAtHeight;
@ -234,8 +234,10 @@ public:
bool getQueueRow(int nHeight, std::vector<CValueQueueEntry>& row); bool getQueueRow(int nHeight, std::vector<CValueQueueEntry>& row);
bool getExpirationQueueRow(int nHeight, std::vector<CValueQueueEntry>& row); bool getExpirationQueueRow(int nHeight, std::vector<CValueQueueEntry>& row);
bool getSupportNode(std::string name, supportMapNodeType& node); bool getSupportNode(std::string name, supportMapNodeType& node);
bool getSupportNode(std::string name, supportMapNodeType& node) const;
bool getSupportQueueRow(int nHeight, std::vector<CSupportValueQueueEntry>& row); bool getSupportQueueRow(int nHeight, std::vector<CSupportValueQueueEntry>& row);
bool haveClaim(const std::string& name, const uint256& txhash, uint32_t nOut) const; bool haveClaim(const std::string& name, const uint256& txhash, uint32_t nOut) const;
bool haveSupport(const std::string& name, const uint256& txhash, uint32_t nOut) const;
unsigned int getTotalNamesInTrie() const; unsigned int getTotalNamesInTrie() const;
unsigned int getTotalClaimsInTrie() const; unsigned int getTotalClaimsInTrie() const;
CAmount getTotalValueOfClaimsInTrie(bool fControllingOnly) const; CAmount getTotalValueOfClaimsInTrie(bool fControllingOnly) const;
@ -289,10 +291,10 @@ public:
bool undoAddClaim(const std::string name, uint256 txhash, uint32_t nOut, int nHeight) const; bool undoAddClaim(const std::string name, uint256 txhash, uint32_t nOut, int nHeight) const;
bool spendClaim(const std::string name, uint256 txhash, uint32_t nOut, int nHeight, int& nValidAtHeight) const; bool spendClaim(const std::string name, uint256 txhash, uint32_t nOut, int nHeight, int& nValidAtHeight) const;
bool undoSpendClaim(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, int nHeight, int nValidAtHeight) const; bool undoSpendClaim(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, int nHeight, int nValidAtHeight) const;
bool addSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, int supportednOut, int nHeight) const; bool addSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, uint32_t supportednOut, int nHeight) const;
bool undoAddSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight) const; bool undoAddSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight) const;
bool spendSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight, int& nValidAtHeight) const; bool spendSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int& nValidAtHeight) const;
bool undoSpendSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, int supportednOut, int nHeight, int nValidAtHeight) const; bool undoSpendSupport(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int nValidAtHeight) const;
uint256 getBestBlock(); uint256 getBestBlock();
void setBestBlock(const uint256& hashBlock); void setBestBlock(const uint256& hashBlock);
bool incrementBlock(CClaimTrieQueueUndo& insertUndo, CClaimTrieQueueUndo& expireUndo, CSupportValueQueueUndo& insertSupportUndo) const; bool incrementBlock(CClaimTrieQueueUndo& insertUndo, CClaimTrieQueueUndo& expireUndo, CSupportValueQueueUndo& insertSupportUndo) const;
@ -323,12 +325,12 @@ private:
void removeFromExpirationQueue(const std::string name, uint256 txhash, uint32_t nOut, int nHeight) const; void removeFromExpirationQueue(const std::string name, uint256 txhash, uint32_t nOut, int nHeight) const;
valueQueueType::iterator getQueueCacheRow(int nHeight, bool createIfNotExists) const; valueQueueType::iterator getQueueCacheRow(int nHeight, bool createIfNotExists) const;
valueQueueType::iterator getExpirationQueueCacheRow(int nHeight, bool createIfNotExists) const; valueQueueType::iterator getExpirationQueueCacheRow(int nHeight, bool createIfNotExists) const;
bool removeSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight, int& nValidAtHeight) const; bool removeSupport(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int& nValidAtHeight) const;
bool removeSupportFromMap(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeight, int& nValidAtHeight) const; bool removeSupportFromMap(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int& nValidAtHeight) const;
bool insertSupportIntoMap(const std::string name, CSupportNodeValue val) const; bool insertSupportIntoMap(const std::string name, CSupportNodeValue val) const;
supportValueQueueType::iterator getSupportQueueCacheRow(int nHeight, bool createIfNotExists) const; supportValueQueueType::iterator getSupportQueueCacheRow(int nHeight, bool createIfNotExists) const;
bool addSupportToQueue(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, int supportednOut, int nHeight, int nValidAtHeight) const; bool addSupportToQueue(const std::string name, uint256 txhash, uint32_t nOut, CAmount nAmount, uint256 supportedTxhash, uint32_t supportednOut, int nHeight, int nValidAtHeight) const;
bool removeSupportFromQueue(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, int supportednOut, int nHeightToCheck, int& nValidAtHeight) const; bool removeSupportFromQueue(const std::string name, uint256 txhash, uint32_t nOut, uint256 supportedTxhash, uint32_t supportednOut, int nHeightToCheck, int& nValidAtHeight) const;
uint256 hashBlock; uint256 hashBlock;
bool getSupportsForName(const std::string name, supportMapNodeType& node) const; bool getSupportsForName(const std::string name, supportMapNodeType& node) const;
}; };

View file

@ -1644,8 +1644,7 @@ static bool ApplyTxInUndo(const CTxInUndo& undo, CCoinsViewCache& view, CClaimTr
assert(vvchParams.size() == 3); assert(vvchParams.size() == 3);
std::string name(vvchParams[0].begin(), vvchParams[0].end()); std::string name(vvchParams[0].begin(), vvchParams[0].end());
uint256 supportedTxid(vvchParams[1]); uint256 supportedTxid(vvchParams[1]);
CScriptNum snOut(vvchParams[2], true); uint32_t supportednOut = vch_to_uint32_t(vvchParams[2]);;
int supportednOut = snOut.getint();
int nValidHeight = undo.nClaimValidHeight; int nValidHeight = undo.nClaimValidHeight;
if (nValidHeight > 0 && nValidHeight >= coins->nHeight) if (nValidHeight > 0 && nValidHeight >= coins->nHeight)
{ {
@ -1729,8 +1728,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
assert(vvchParams.size() == 3); assert(vvchParams.size() == 3);
std::string name(vvchParams[0].begin(), vvchParams[0].end()); std::string name(vvchParams[0].begin(), vvchParams[0].end());
uint256 supportedTxid(vvchParams[1]); uint256 supportedTxid(vvchParams[1]);
CScriptNum snOut(vvchParams[2], true); uint32_t supportednOut = vch_to_uint32_t(vvchParams[2]);;
int supportednOut = snOut.getint();
LogPrintf("%s: (txid: %s, nOut: %d) Removing support for %s from txid %s nOut %d due to its block being disconnected\n", __func__, hash.ToString(), i, supportedTxid.ToString(), supportednOut, name.c_str()); LogPrintf("%s: (txid: %s, nOut: %d) Removing support for %s from txid %s nOut %d due to its block being disconnected\n", __func__, hash.ToString(), i, supportedTxid.ToString(), supportednOut, name.c_str());
if (!trieCache.undoAddSupport(name, hash, i, supportedTxid, supportednOut, pindex->nHeight)) if (!trieCache.undoAddSupport(name, hash, i, supportedTxid, supportednOut, pindex->nHeight))
LogPrintf("%s: Something went wrong removing support for name %s in hash %s\n", __func__, name.c_str(), hash.ToString()); LogPrintf("%s: Something went wrong removing support for name %s in hash %s\n", __func__, name.c_str(), hash.ToString());
@ -2028,8 +2026,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
assert(vvchParams.size() == 3); assert(vvchParams.size() == 3);
std::string name(vvchParams[0].begin(), vvchParams[0].end()); std::string name(vvchParams[0].begin(), vvchParams[0].end());
uint256 supportedTxid(vvchParams[1]); uint256 supportedTxid(vvchParams[1]);
CScriptNum snOut(vvchParams[2], true); uint32_t supportednOut = vch_to_uint32_t(vvchParams[2]);;
int supportednOut = snOut.getint();
int nValidAtHeight; int nValidAtHeight;
LogPrintf("%s: Removing support for %s in txid %s nOut %d. Tx: %s, nOut: %d\n", __func__, name, supportedTxid.ToString(), supportednOut, txin.prevout.hash.ToString(), txin.prevout.n); LogPrintf("%s: Removing support for %s in txid %s nOut %d. Tx: %s, nOut: %d\n", __func__, name, supportedTxid.ToString(), supportednOut, txin.prevout.hash.ToString(), txin.prevout.n);
if (trieCache.spendSupport(name, txin.prevout.hash, txin.prevout.n, supportedTxid, supportednOut, coins->nHeight, nValidAtHeight)) if (trieCache.spendSupport(name, txin.prevout.hash, txin.prevout.n, supportedTxid, supportednOut, coins->nHeight, nValidAtHeight))
@ -2071,8 +2068,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
assert(vvchParams.size() == 3); assert(vvchParams.size() == 3);
std::string name(vvchParams[0].begin(), vvchParams[0].end()); std::string name(vvchParams[0].begin(), vvchParams[0].end());
uint256 supportedTxid(vvchParams[1]); uint256 supportedTxid(vvchParams[1]);
CScriptNum snOut(vvchParams[2], true); uint32_t supportednOut = vch_to_uint32_t(vvchParams[2]);;
int supportednOut = snOut.getint();
if (!trieCache.addSupport(name, tx.GetHash(), i, txout.nValue, supportedTxid, supportednOut, pindex->nHeight)) if (!trieCache.addSupport(name, tx.GetHash(), i, txout.nValue, supportedTxid, supportednOut, pindex->nHeight))
LogPrintf("%s: Something went wrong inserting the support\n", __func__); LogPrintf("%s: Something went wrong inserting the support\n", __func__);
} }

View file

@ -326,8 +326,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
assert(vvchParams.size() == 3); assert(vvchParams.size() == 3);
std::string name(vvchParams[0].begin(), vvchParams[0].end()); std::string name(vvchParams[0].begin(), vvchParams[0].end());
uint256 supportedTxid(vvchParams[1]); uint256 supportedTxid(vvchParams[1]);
CScriptNum snOut(vvchParams[2], true); uint32_t supportednOut = vch_to_uint32_t(vvchParams[2]);
int supportednOut = snOut.getint();
int throwaway; int throwaway;
if (!trieCache.spendSupport(name, txin.prevout.hash, txin.prevout.n, supportedTxid, supportednOut, coins->nHeight, throwaway)) if (!trieCache.spendSupport(name, txin.prevout.hash, txin.prevout.n, supportedTxid, supportednOut, coins->nHeight, throwaway))
LogPrintf("%s: Something went wrong removing the support\n", __func__); LogPrintf("%s: Something went wrong removing the support\n", __func__);
@ -366,8 +365,9 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
assert(vvchParams.size() == 3); assert(vvchParams.size() == 3);
std::string name(vvchParams[0].begin(), vvchParams[0].end()); std::string name(vvchParams[0].begin(), vvchParams[0].end());
uint256 supportedTxid(vvchParams[1]); uint256 supportedTxid(vvchParams[1]);
CScriptNum snOut(vvchParams[2], true); uint32_t supportednOut = vch_to_uint32_t(vvchParams[2]);
int supportednOut = snOut.getint(); //CScriptNum snOut(vvchParams[2], true);
//int supportednOut = snOut.getint();
if (!trieCache.addSupport(name, tx.GetHash(), i, txout.nValue, supportedTxid, supportednOut, nHeight)) if (!trieCache.addSupport(name, tx.GetHash(), i, txout.nValue, supportedTxid, supportednOut, nHeight))
{ {
LogPrintf("%s: Something went wrong inserting the name\n", __func__); LogPrintf("%s: Something went wrong inserting the name\n", __func__);

View file

@ -1,6 +1,29 @@
#include "nameclaim.h" #include "nameclaim.h"
#include "util.h" #include "util.h"
std::vector<unsigned char> uint32_t_to_vch(uint32_t n)
{
std::vector<unsigned char> vchN;
vchN.resize(4);
vchN[0] = n >> 24;
vchN[1] = n >> 16;
vchN[2] = n >> 8;
vchN[3] = n;
return vchN;
}
uint32_t vch_to_uint32_t(std::vector<unsigned char>& vchN)
{
uint32_t n;
if (vchN.size() != 4)
{
LogPrintf("%s() : a vector<unsigned char> with size other than 4 has been given", __func__);
return 0;
}
n = vchN[0] << 24 | vchN[1] << 16 | vchN[2] << 8 | vchN[3];
return n;
}
bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector<unsigned char> >& vvchParams) bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector<unsigned char> >& vvchParams)
{ {
CScript::const_iterator pc = scriptIn.begin(); CScript::const_iterator pc = scriptIn.begin();
@ -41,7 +64,11 @@ bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector
} }
if (op == OP_SUPPORT_CLAIM) if (op == OP_SUPPORT_CLAIM)
{ {
if (!scriptIn.GetOp(pc, opcode) || opcode < 0 || opcode > OP_PUSHDATA4) if (!scriptIn.GetOp(pc, opcode, vchParam3) || opcode < 0 || opcode > OP_PUSHDATA4)
{
return false;
}
if (vchParam3.size() != 4)
{ {
return false; return false;
} }
@ -60,6 +87,8 @@ bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector
if (op == OP_SUPPORT_CLAIM) if (op == OP_SUPPORT_CLAIM)
{ {
vvchParams.push_back(vchParam3); vvchParams.push_back(vchParam3);
if (vchParam2.size() != (256/8))
return false;
} }
return true; return true;
@ -68,6 +97,11 @@ bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector
CScript StripClaimScriptPrefix(const CScript& scriptIn) CScript StripClaimScriptPrefix(const CScript& scriptIn)
{ {
int op; int op;
return StripClaimScriptPrefix(scriptIn, op);
}
CScript StripClaimScriptPrefix(const CScript& scriptIn, int& op)
{
std::vector<std::vector<unsigned char> > vvchParams; std::vector<std::vector<unsigned char> > vvchParams;
CScript::const_iterator pc = scriptIn.begin(); CScript::const_iterator pc = scriptIn.begin();

View file

@ -8,5 +8,8 @@
bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector<unsigned char> >& vvchParams); bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector<unsigned char> >& vvchParams);
bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector<unsigned char> >& vvchParams, CScript::const_iterator& pc); bool DecodeClaimScript(const CScript& scriptIn, int& op, std::vector<std::vector<unsigned char> >& vvchParams, CScript::const_iterator& pc);
CScript StripClaimScriptPrefix(const CScript& scriptIn); CScript StripClaimScriptPrefix(const CScript& scriptIn);
CScript StripClaimScriptPrefix(const CScript& scriptIn, int& op);
std::vector<unsigned char> uint32_t_to_vch(uint32_t n);
uint32_t vch_to_uint32_t(std::vector<unsigned char>& vchN);
#endif // BITCOIN_NAMECLAIM_H #endif // BITCOIN_NAMECLAIM_H

View file

@ -98,6 +98,10 @@ static const CRPCConvertParam vRPCConvertParams[] =
{ "abandonclaim", 2}, { "abandonclaim", 2},
{ "listnameclaims", 0}, { "listnameclaims", 0},
{ "listnameclaims", 1}, { "listnameclaims", 1},
{ "listnameclaims", 2},
{ "supportclaim", 2},
{ "supportclaim", 3},
{ "abandonsupport", 2},
{ "gettotalvalueofclaims", 0}, { "gettotalvalueofclaims", 0},
}; };

View file

@ -370,6 +370,8 @@ static const CRPCCommand vRPCCommands[] =
{ "wallet", "listnameclaims", &listnameclaims, false }, { "wallet", "listnameclaims", &listnameclaims, false },
{ "wallet", "updateclaim", &updateclaim, false }, { "wallet", "updateclaim", &updateclaim, false },
{ "wallet", "abandonclaim", &abandonclaim, false }, { "wallet", "abandonclaim", &abandonclaim, false },
{ "wallet", "supportclaim", &supportclaim, false },
{ "wallet", "abandonsupport", &abandonsupport, false },
{ "wallet", "sendtoaddress", &sendtoaddress, false }, { "wallet", "sendtoaddress", &sendtoaddress, false },
{ "wallet", "setaccount", &setaccount, true }, { "wallet", "setaccount", &setaccount, true },
{ "wallet", "settxfee", &settxfee, true }, { "wallet", "settxfee", &settxfee, true },

View file

@ -181,6 +181,8 @@ extern UniValue claimname(const UniValue& params, bool fHelp);
extern UniValue listnameclaims(const UniValue& params, bool fHelp); extern UniValue listnameclaims(const UniValue& params, bool fHelp);
extern UniValue updateclaim(const UniValue& params, bool fHelp); extern UniValue updateclaim(const UniValue& params, bool fHelp);
extern UniValue abandonclaim(const UniValue& params, bool fHelp); extern UniValue abandonclaim(const UniValue& params, bool fHelp);
extern UniValue supportclaim(const UniValue& params, bool fHelp);
extern UniValue abandonsupport(const UniValue& params, bool fHelp);
extern UniValue sendtoaddress(const UniValue& params, bool fHelp); extern UniValue sendtoaddress(const UniValue& params, bool fHelp);
extern UniValue signmessage(const UniValue& params, bool fHelp); extern UniValue signmessage(const UniValue& params, bool fHelp);
extern UniValue verifymessage(const UniValue& params, bool fHelp); extern UniValue verifymessage(const UniValue& params, bool fHelp);

View file

@ -7,6 +7,7 @@
#include "primitives/transaction.h" #include "primitives/transaction.h"
#include "miner.h" #include "miner.h"
#include "claimtrie.h" #include "claimtrie.h"
#include "nameclaim.h"
#include "coins.h" #include "coins.h"
#include "streams.h" #include "streams.h"
#include <boost/test/unit_test.hpp> #include <boost/test/unit_test.hpp>
@ -169,23 +170,23 @@ const unsigned int support_nonces1[] = {
55230, 65910, 11530, 7441, 110596, 108561, 71692, 43935, 151361, 79724, 55230, 65910, 11530, 7441, 110596, 108561, 71692, 43935, 151361, 79724,
99792, 107989, 82596, 9169, 291679, 112377, 41344, 185047, 7018, 5951, 99792, 107989, 82596, 9169, 291679, 112377, 41344, 185047, 7018, 5951,
88404, 140428, 87970, 81004, 152441, 36684, 173721, 3349, 3175, 252786, 88404, 140428, 87970, 81004, 152441, 36684, 173721, 3349, 3175, 252786,
32720, 40948, 76930, 9491, 137742, 56954, 358844, 11884, 79338, 1449, 32720, 40948, 76930, 20858, 43320, 45434, 68488, 164113, 20916, 239879,
271845, 65895, 3599, 67466, 390374, 92544, 169976, 64804, 22583, 33184, 40956, 111839, 68933, 74051, 192633, 25137, 97047, 72680, 153778, 109034,
21846, 126102, 134037, 7743, 68285, 37887, 19122, 58595, 13881, 49513, 43666, 16939, 18176, 133058, 32517, 46410, 194708, 40105, 58360, 137048,
59047, 76262, 33652, 176824, 128984, 700, 3132, 46367, 11747, 127193, 10313, 165416, 20483, 7205, 5507, 19765, 3457, 154415, 48932, 82199,
41077, 38093, 5491, 325, 79570, 204899, 30771, 366656, 31271, 30585, 160148, 23694, 55796, 78716, 70039, 164, 41686, 53995, 54996, 67472,
158040, 144014, 12649, 23040, 115875, 18196, 50306, 7922, 43930, 19235, 47392, 17816, 214640, 22687, 169977, 101026, 9873, 49577, 10778, 125898,
29139, 48803, 44994, 103398, 22128, 20131, 23586, 15249, 2941, 266120, 76370, 34024, 177655, 93657, 24720, 31059, 17496, 111609, 281936, 16678,
16186, 104144, 194544, 26703, 80750, 28839, 1190, 24200, 22772, 28085, 7952, 78319, 26740, 34426, 43900, 59040, 93664, 43267, 70771, 4339,
74439, 988, 51721, 65257, 48807, 45808, 5972, 44544, 43609, 97247, 161842, 14987, 68264, 16, 36136, 80695, 13263, 90082, 857, 107417,
338685, 648, 87423, 106088, 31569, 99139, 106419, 69391, 3635, 113533, 161366, 1416, 14466, 10056, 23907, 74171, 5261, 240414, 15976, 56496,
10925, 87228, 70748, 56881, 128451, 2366, 68232, 11000, 1853, 153196, 50007, 93917, 101335, 33195, 5902, 26325, 69080, 157373, 51960, 691,
2581, 3875, 54236, 107276, 545, 229067, 76364, 45067, 39982, 68628, 54830, 67430, 33423, 127739, 9219, 62709, 495080, 227830, 73772, 13165,
5029, 27839, 67151, 20147, 20111, 47782, 18702, 42648, 5476, 15906, 3613, 117489, 4320, 114186, 132594, 69, 46875, 33889, 172546, 15312,
69026, 289594, 22143, 113896, 30068, 23716, 62821, 67978, 77734, 116084, 21267, 85199, 7134, 67319, 76992, 21812, 51259, 9249, 9862, 24484,
88619, 92799, 92576, 25349, 165358, 7728, 80032, 124308, 37356, 49800, 59952, 75454, 75256, 2651, 39566, 75408, 38682, 35976, 27900, 43089,
82395, 58213, 61798, 66574, 25471, 29709, 7591, 121781, 75306, 27929, 156885, 43435, 193627, 83950, 5709, 60268, 92811, 13408, 15480, 58406,
7698, 69279, 151730, 2691, 33981, 22634, 48722, 610916, 4741, 61336, 215450, 28785, 19379, 10100, 44302, 19849, 74044, 26939, 37505, 61336,
20033, 19624, 63951, 6755, 18613, 43297, 180012, 66684, 6631, 121649, 20033, 19624, 63951, 6755, 18613, 43297, 180012, 66684, 6631, 121649,
22531, 320516, 74811, 59326, 17935, 39781, 137162, 44383, 33226, 114852, 22531, 320516, 74811, 59326, 17935, 39781, 137162, 44383, 33226, 114852,
181180, 67566, 157014, 13412, 166344, 47237, 2946, 1812, 122065, 28047, 181180, 67566, 157014, 13412, 166344, 47237, 2946, 1812, 122065, 28047,
@ -215,17 +216,17 @@ const unsigned int support_nonces2[] = {
81635, 191166, 66330, 36626, 94722, 52716, 133306, 20991, 64508, 34170, 81635, 191166, 66330, 36626, 94722, 52716, 133306, 20991, 64508, 34170,
88659, 9779, 70051, 123365, 158677, 142215, 165612, 176285, 5277, 69969, 88659, 9779, 70051, 123365, 158677, 142215, 165612, 176285, 5277, 69969,
123460, 4739, 25210, 1181, 22451, 147063, 45230, 183496, 50047, 142425, 123460, 4739, 25210, 1181, 22451, 147063, 45230, 183496, 50047, 142425,
90173, 10472, 97468, 37034, 93084, 39525, 120266, 84300, 17673, 6804, 90173, 10472, 97468, 2218, 111455, 212848, 2916, 18721, 30825, 190739,
97967, 26481, 4194, 17105, 124852, 94454, 27437, 28181, 56705, 41272, 113909, 24856, 8440, 86811, 211, 29718, 17486, 59240, 46915, 20444,
114455, 71194, 57137, 94295, 22075, 71012, 98068, 4972, 3674, 65977, 76005, 12477, 16029, 16541, 17049, 3641, 51405, 22015, 102809, 82073,
100267, 85369, 5135, 135988, 72022, 1382, 34686, 147332, 41812, 28748, 79420, 20290, 178940, 16336, 11521, 80562, 151537, 24375, 14822, 89007,
67431, 75021, 6087, 1904, 1747, 75216, 32773, 12619, 134365, 122043, 168314, 106790, 190447, 9747, 71739, 73323, 223536, 43707, 6166, 53859,
12472, 109146, 40092, 1179, 47114, 60362, 7733, 25120, 32149, 61762, 77193, 19913, 180298, 148, 20032, 43052, 68174, 63836, 76626, 45639,
126194, 2473, 24550, 33741, 22542, 29648, 68799, 372, 14759, 4420, 136164, 15480, 66532, 189984, 70371, 46701, 87073, 101098, 13573, 32446,
122218, 115770, 11635, 40806, 5109, 200049, 50072, 135160, 128155, 78683, 40411, 3277, 5337, 4480, 33121, 31322, 16519, 46549, 8561, 9329,
250908, 21261, 133847, 188522, 79927, 18060, 121196, 80770, 69660, 30155, 15755, 57765, 37039, 52216, 170054, 23913, 3224, 22095, 43992, 66225,
74666, 20550, 18463, 52066, 40764, 36043, 24574, 17210, 55087, 42619, 764, 75691, 35599, 5417, 269692, 86253, 90212, 26251, 8874, 16060,
19320, 6026, 17221, 30996, 52355, 62543, 2856, 308138, 9975, 5428, 27117, 33737, 203711, 116599, 19914, 62543, 2856, 308138, 9975, 5428,
39726, 1759, 24200, 6970, 154491, 59163, 144476, 46342, 64023, 78238, 39726, 1759, 24200, 6970, 154491, 59163, 144476, 46342, 64023, 78238,
71701, 52740, 30958, 122696, 6737, 210973, 32609, 19114, 58624, 92640, 71701, 52740, 30958, 122696, 6737, 210973, 32609, 19114, 58624, 92640,
12948, 11073, 16901, 25895, 21842, 9027, 60460, 33030, 67370, 44786, 12948, 11073, 16901, 25895, 21842, 9027, 60460, 33030, 67370, 44786,
@ -240,12 +241,12 @@ const unsigned int support_nonces2[] = {
45784, 70172, 44564, 143614, 39200, 75869, 14353, 127113, 70557, 38980, 45784, 70172, 44564, 143614, 39200, 75869, 14353, 127113, 70557, 38980,
63364, 14319, 18884, 256, 44183, 16794, 45418, 126627, 31531, 60619, 63364, 14319, 18884, 256, 44183, 16794, 45418, 126627, 31531, 60619,
16674, 99942, 16293, 4961, 57609, 247725, 102578, 76154, 4376, 74861, 16674, 99942, 16293, 4961, 57609, 247725, 102578, 76154, 4376, 74861,
27560, 14614, 158129, 126472, 79987, 20773, 61268, 1874, 130509, 870, 27560, 14614, 158129, 126472, 79987, 20773, 48122, 116607, 39308, 150466,
57357, 10848, 15044, 9971, 35590, 20488, 13594, 30216, 149806, 1096, 64570, 49849, 46186, 23349, 80633, 4727, 45020, 44244, 18138, 9984,
64153, 32166, 114746, 83875, 22065, 53825, 24118, 41806, 236143, 6033, 12649, 8930, 343846, 8772, 85447, 20913, 6850, 7148, 35165, 6243,
51233, 82133, 22722, 70053, 24220, 121801, 28752, 106039, 35457, 43791, 80328, 15660, 17966, 103914, 37229, 75098, 32367, 137670, 30573, 13861,
99575, 241399, 3328, 39177, 59918, 46609, 2050, 177764, 32959, 44877, 99470, 331362, 16339, 294785, 944, 180161, 354424, 29493, 90717, 76017,
97421, 70882, 86683, 137432, 28277, 4848, 65459, 86324, 11610, 111098, 157363, 94801, 41689, 285734, 11149, 2512, 17019, 86324, 11610, 111098,
198344, 10291, 83710, 39609, 33945, 11683, 93409, 28102, 20296, 64664, 198344, 10291, 83710, 39609, 33945, 11683, 93409, 28102, 20296, 64664,
1384, 23191, 168994, 31248, 81598, 179948, 1255, 7520, 8735, 23643, 1384, 23191, 168994, 31248, 81598, 179948, 1255, 7520, 8735, 23643,
27822, 136323, 25917, 18533, 105920, 50395, 98221, 2001, 46451, 191395, 27822, 136323, 25917, 18533, 105920, 50395, 98221, 2001, 46451, 191395,
@ -260,17 +261,17 @@ const unsigned int support_nonces2[] = {
11959, 12403, 226703, 60436, 48242, 180368, 20683, 13789, 38857, 72504, 11959, 12403, 226703, 60436, 48242, 180368, 20683, 13789, 38857, 72504,
62740, 27778, 16689, 126445, 63668, 135369, 16489, 91265, 87614, 256543, 62740, 27778, 16689, 126445, 63668, 135369, 16489, 91265, 87614, 256543,
31608, 63165, 8084, 48884, 60285, 233181, 133145, 67325, 38060, 82702, 31608, 63165, 8084, 48884, 60285, 233181, 133145, 67325, 38060, 82702,
274112, 1546, 17121, 72008, 63213, 66714, 4427, 26378, 94263, 36210, 274112, 1546, 17121, 72008, 63213, 66714, 4427, 26378, 293747, 54190,
28045, 4909, 57592, 77438, 49088, 85309, 35021, 68525, 64373, 118736, 13609, 46687, 14907, 3925, 54506, 89292, 21048, 52230, 80904, 39484,
73554, 33662, 31448, 22889, 9562, 51823, 38785, 93493, 109255, 7238, 199322, 17743, 68138, 19352, 47055, 144457, 19211, 29628, 69986, 131196,
107680, 222970, 81756, 128621, 2719, 283622, 231398, 73223, 70508, 11794, 53872, 49387, 152281, 51824, 22041, 33971, 15108, 13337, 162014, 40602,
81074, 132458, 79351, 36119, 21610, 28900, 61319, 186803, 78521, 107741, 106200, 8292, 19773, 1304, 55807, 70998, 10637, 83313, 122595, 227472,
96212, 63336, 151983, 43585, 9506, 108319, 12565, 72059, 31944, 184186, 24159, 98863, 39656, 10452, 127345, 6191, 68732, 4303, 94547, 52004,
72624, 119317, 3929, 69397, 31659, 19319, 76104, 16688, 2118, 101192, 19411, 2513, 229112, 93276, 46105, 94524, 93852, 19074, 7569, 19864,
48160, 97739, 20241, 133014, 48221, 19220, 5980, 127621, 18732, 177, 47459, 121864, 50899, 96723, 197798, 91795, 77069, 26481, 147668, 202302,
10627, 157980, 7145, 43432, 60647, 132588, 51314, 9458, 22465, 13920, 5928, 184427, 12000, 56211, 5622, 24665, 22639, 30812, 169494, 83456,
148416, 16017, 56429, 161205, 49038, 20341, 18729, 66404, 126427, 59051, 137941, 17169, 2000, 104824, 136832, 71272, 141938, 63227, 28633, 55314,
93406, 66991, 61963, 23362, 67901, 11674, 96360, 32335, 130778, 39768, 146418, 373502, 191002, 118787, 8980, 15847, 36560, 30751, 212194, 39768,
75, 11013, 7055, 104552, 9149, 54963, 2738, 28738, 25418, 48211, 75, 11013, 7055, 104552, 9149, 54963, 2738, 28738, 25418, 48211,
39567, 47613, 19398, 177205, 29822, 104444, 115853, 31753, 26932, 48801, 39567, 47613, 19398, 177205, 29822, 104444, 115853, 31753, 26932, 48801,
111612, 25639, 44335, 94548, 84888, 14268, 10561, 50159, 37092, 19300, 111612, 25639, 44335, 94548, 84888, 14268, 10561, 50159, 37092, 19300,
@ -286,12 +287,12 @@ const unsigned int support_nonces2[] = {
25474, 15522, 87555, 60020, 103660, 41229, 115987, 19328, 69277, 102703, 25474, 15522, 87555, 60020, 103660, 41229, 115987, 19328, 69277, 102703,
53647, 113118, 10548, 19783, 27221, 17091, 14797, 61259, 43178, 28954, 53647, 113118, 10548, 19783, 27221, 17091, 14797, 61259, 43178, 28954,
123513, 29391, 23953, 70469, 28759, 57824, 19168, 13562, 4571, 26173, 123513, 29391, 23953, 70469, 28759, 57824, 19168, 13562, 4571, 26173,
21807, 88451, 42122, 80482, 1114, 29348, 32714, 12145, 45059, 140758, 60313, 52354, 9731, 33617, 7708, 116302, 145296, 63414, 79680, 598,
21086, 1404, 93598, 22266, 38093, 62994, 20323, 25937, 97720, 200142, 9047, 47056, 37125, 149483, 5432, 89502, 55348, 172980, 8886, 137667,
37172, 45408, 2590, 4616, 9409, 143829, 38195, 22823, 59868, 79751, 148918, 23869, 10506, 24099, 238653, 24339, 22464, 7307, 68969, 33856,
28362, 298864, 29197, 66153, 65205, 118892, 41497, 127505, 44291, 9390, 34296, 203325, 51164, 7833, 109377, 13562, 126128, 159047, 37659, 67068,
247172, 112067, 129931, 66836, 36417, 164541, 226592, 4711, 58305, 56688, 62885, 17276, 198570, 97716, 125203, 163072, 25870, 101965, 163916, 46804,
95081, 159350, 235037, 123980, 9143, 94471, 73153, 11363, 93164, 63362, 95510, 41574, 235037, 123980, 9143, 94471, 73153, 11363, 93164, 63362,
86526, 24756, 14070, 16924, 83332, 4100, 317190, 285610, 61499, 27712, 86526, 24756, 14070, 16924, 83332, 4100, 317190, 285610, 61499, 27712,
76315, 4835, 40248, 5447, 12097, 81545, 12833, 37877, 242159, 91197, 76315, 4835, 40248, 5447, 12097, 81545, 12833, 37877, 242159, 91197,
2425, 26630, 2519, 152473, 65756, 32133, 248062, 4329, 39461, 27326, 2425, 26630, 2519, 152473, 65756, 32133, 248062, 4329, 39461, 27326,
@ -301,22 +302,22 @@ const unsigned int support_nonces2[] = {
2874, 24150, 9499, 52916, 14152, 141953, 21624, 22911, 42470, 52998, 2874, 24150, 9499, 52916, 14152, 141953, 21624, 22911, 42470, 52998,
1080, 37439, 131336, 59290, 38910, 29273, 94703, 8312, 116959, 51277, 1080, 37439, 131336, 59290, 38910, 29273, 94703, 8312, 116959, 51277,
849, 40262, 190652, 11850, 38769, 87731, 143411, 65908, 50669, 4674, 849, 40262, 190652, 11850, 38769, 87731, 143411, 65908, 50669, 4674,
125631, 98358, 39497, 144991, 101800, 44453, 113984, 47609, 2319, 88314, 125631, 98358, 39497, 33785, 54496, 44453, 113984, 47609, 2319, 88314,
22946, 31369, 99638, 7495, 260385, 116804, 136433, 70265, 98192, 31726, 22946, 31369, 99638, 7495, 260385, 116804, 136433, 70265, 98192, 31726,
12780, 17332, 3003, 47373, 74798, 26352, 5939, 15375, 8675, 101575, 12780, 17332, 3003, 47373, 74798, 26352, 5939, 15375, 8675, 101575,
164102, 100976, 101627, 10537, 54993, 31846, 126637, 20135, 158708, 7478, 164102, 100976, 101627, 10537, 54993, 31846, 126637, 20135, 158708, 7478,
25893, 28672, 66730, 39996, 126228, 20288, 77905, 34495, 19051, 12352, 25893, 28672, 66730, 39996, 126228, 20288, 77905, 34495, 19051, 12352,
55961, 124354, 58053, 5836, 17005, 28713, 5440, 61023, 67395, 11906, 55961, 124354, 58053, 5836, 17005, 3143, 4591, 122833, 14138, 17268,
191543, 46119, 5766, 9724, 136234, 20108, 34132, 113384, 49581, 23655, 36030, 16341, 56423, 35558, 107746, 52961, 66136, 211036, 46256, 26463,
55773, 108438, 12770, 2401, 31206, 25771, 1512, 15106, 95593, 18175, 33814, 5837, 34306, 99237, 109457, 20216, 136509, 215181, 26837, 7661,
130805, 25440, 214098, 136438, 53509, 290766, 15849, 1552, 65290, 725, 50220, 12966, 89526, 91218, 19980, 120895, 37290, 36883, 18725, 81858,
22352, 147274, 29787, 81667, 3047, 1360, 154794, 12339, 21770, 56408, 1600, 23014, 255282, 72423, 100392, 1207, 207156, 11959, 62546, 110928,
33675, 129531, 91341, 137661, 37828, 97543, 22518, 69127, 108482, 2514, 18915, 39838, 11316, 61634, 30352, 166281, 4171, 167586, 23141, 107122,
12634, 11975, 126573, 142228, 87169, 91641, 146065, 21746, 42517, 19841, 53327, 66841, 15665, 2139, 129790, 152050, 22873, 47846, 46836, 72224,
10163, 100527, 174806, 3410, 90965, 152821, 57522, 36897, 113679, 20895, 112396, 10779, 81485, 27048, 3607, 15669, 43750, 36080, 54178, 103924,
85751, 74220, 45532, 38417, 83189, 187113, 47798, 84865, 19093, 96824, 23998, 56178, 247600, 41719, 20168, 123337, 367762, 248158, 71843, 71079,
10547, 263601, 59486, 86011, 10869, 201270, 68189, 6550, 71153, 51180, 24365, 76, 6585, 64163, 48816, 62945, 91850, 80506, 101195, 93166,
46722, 321280, 28734, 29270, 196742, 36713, 102935, 80953, 18790, 93369, 30499, 88326,
}; };
BOOST_FIXTURE_TEST_SUITE(claimtrie_tests, TestingSetup) BOOST_FIXTURE_TEST_SUITE(claimtrie_tests, TestingSetup)
@ -1306,7 +1307,8 @@ BOOST_AUTO_TEST_CASE(claimtrie_supporting_claims)
CMutableTransaction tx3 = BuildTransaction(coinbases[2]); CMutableTransaction tx3 = BuildTransaction(coinbases[2]);
uint256 tx1Hash = tx1.GetHash(); uint256 tx1Hash = tx1.GetHash();
std::vector<unsigned char> vchTx1Hash(tx1Hash.begin(), tx1Hash.end()); std::vector<unsigned char> vchTx1Hash(tx1Hash.begin(), tx1Hash.end());
tx3.vout[0].scriptPubKey = CScript() << OP_SUPPORT_CLAIM << vchName << vchTx1Hash << CScriptNum(0) << OP_2DROP << OP_2DROP << OP_TRUE; std::vector<unsigned char> vchSupportnOut = uint32_t_to_vch(0);
tx3.vout[0].scriptPubKey = CScript() << OP_SUPPORT_CLAIM << vchName << vchTx1Hash << vchSupportnOut << OP_2DROP << OP_2DROP << OP_TRUE;
tx3.vout[0].nValue = 500000000; tx3.vout[0].nValue = 500000000;
CMutableTransaction tx4 = BuildTransaction(tx1); CMutableTransaction tx4 = BuildTransaction(tx1);
@ -1637,7 +1639,8 @@ BOOST_AUTO_TEST_CASE(claimtrie_supporting_claims2)
CMutableTransaction tx3 = BuildTransaction(coinbases[2]); CMutableTransaction tx3 = BuildTransaction(coinbases[2]);
uint256 tx1Hash = tx1.GetHash(); uint256 tx1Hash = tx1.GetHash();
std::vector<unsigned char> vchTx1Hash(tx1Hash.begin(), tx1Hash.end()); std::vector<unsigned char> vchTx1Hash(tx1Hash.begin(), tx1Hash.end());
tx3.vout[0].scriptPubKey = CScript() << OP_SUPPORT_CLAIM << vchName << vchTx1Hash << CScriptNum(0) << OP_2DROP << OP_2DROP << OP_TRUE; std::vector<unsigned char> vchSupportnOut = uint32_t_to_vch(0);
tx3.vout[0].scriptPubKey = CScript() << OP_SUPPORT_CLAIM << vchName << vchTx1Hash << vchSupportnOut << OP_2DROP << OP_2DROP << OP_TRUE;
tx3.vout[0].nValue = 500000000; tx3.vout[0].nValue = 500000000;
CMutableTransaction tx4 = BuildTransaction(tx1); CMutableTransaction tx4 = BuildTransaction(tx1);

View file

@ -347,7 +347,7 @@ UniValue getaddressesbyaccount(const UniValue& params, bool fHelp)
return ret; return ret;
} }
void ClaimName(const std::vector<unsigned char> vchName, const std::vector<unsigned char> vchValue, CAmount nAmount, CWalletTx& wtxNew) void CreateClaim(CScript& claimScript, CAmount nAmount, CWalletTx& wtxNew)
{ {
// Check amount // Check amount
if (nAmount <= 0) if (nAmount <= 0)
@ -360,7 +360,7 @@ void ClaimName(const std::vector<unsigned char> vchName, const std::vector<unsig
if (pwalletMain->IsLocked()) if (pwalletMain->IsLocked())
{ {
strError = "Error: Wallet locked, unable to create transaction!"; strError = "Error: Wallet locked, unable to create transaction!";
LogPrintf("SendMoney() : %s", strError); LogPrintf("%s() : %s", __func__, strError);
throw JSONRPCError(RPC_WALLET_ERROR, strError); throw JSONRPCError(RPC_WALLET_ERROR, strError);
} }
@ -370,7 +370,6 @@ void ClaimName(const std::vector<unsigned char> vchName, const std::vector<unsig
throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first"); throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first");
CScript scriptPubKey = GetScriptForDestination(CTxDestination(newKey.GetID())); CScript scriptPubKey = GetScriptForDestination(CTxDestination(newKey.GetID()));
CScript claimScript = CScript() << OP_CLAIM_NAME << vchName << vchValue << OP_2DROP << OP_DROP;
claimScript = claimScript + scriptPubKey; claimScript = claimScript + scriptPubKey;
vector<CRecipient> vecSend; vector<CRecipient> vecSend;
@ -385,7 +384,7 @@ void ClaimName(const std::vector<unsigned char> vchName, const std::vector<unsig
{ {
if (nAmount + nFeeRequired > pwalletMain->GetBalance()) if (nAmount + nFeeRequired > pwalletMain->GetBalance())
strError = strprintf("Error: This transaction requires a transaction fee of at least %s because if its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired)); strError = strprintf("Error: This transaction requires a transaction fee of at least %s because if its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired));
LogPrintf("ClaimName() : %s\n", strError); LogPrintf("%s() : %s\n", __func__, strError);
throw JSONRPCError(RPC_WALLET_ERROR, strError); throw JSONRPCError(RPC_WALLET_ERROR, strError);
} }
if (!pwalletMain->CommitTransaction(wtxNew, reservekey)) if (!pwalletMain->CommitTransaction(wtxNew, reservekey))
@ -419,7 +418,9 @@ UniValue claimname(const UniValue& params, bool fHelp)
EnsureWalletIsUnlocked(); EnsureWalletIsUnlocked();
ClaimName(vchName, vchValue, nAmount, wtx); CScript claimScript = CScript() << OP_CLAIM_NAME << vchName << vchValue << OP_2DROP << OP_DROP;
CreateClaim(claimScript, nAmount, wtx);
return wtx.GetHash().GetHex(); return wtx.GetHash().GetHex();
} }
@ -438,7 +439,7 @@ void UpdateName(const std::vector<unsigned char> vchName, const std::vector<unsi
if (pwalletMain->IsLocked()) if (pwalletMain->IsLocked())
{ {
strError = "Error: Wallet locked, unable to create transaction!"; strError = "Error: Wallet locked, unable to create transaction!";
LogPrintf("UpdateName() : %s", strError); LogPrintf("%s() : %s", __func__, strError);
throw JSONRPCError(RPC_WALLET_ERROR, strError); throw JSONRPCError(RPC_WALLET_ERROR, strError);
} }
@ -463,7 +464,7 @@ void UpdateName(const std::vector<unsigned char> vchName, const std::vector<unsi
{ {
if (nAmount + nFeeRequired - wtxIn.vout[nTxOut].nValue > pwalletMain->GetBalance()) if (nAmount + nFeeRequired - wtxIn.vout[nTxOut].nValue > pwalletMain->GetBalance())
strError = strprintf("Error: This transaction requires a transaction fee of at leaste %s because of its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired)); strError = strprintf("Error: This transaction requires a transaction fee of at leaste %s because of its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired));
LogPrintf("ClaimName() : %s\n", strError); LogPrintf("%s() : %s\n", __func__, strError);
throw JSONRPCError(RPC_WALLET_ERROR, strError); throw JSONRPCError(RPC_WALLET_ERROR, strError);
} }
if (!pwalletMain->CommitTransaction(wtxNew, reservekey)) if (!pwalletMain->CommitTransaction(wtxNew, reservekey))
@ -527,7 +528,7 @@ UniValue updateclaim(const UniValue& params, bool fHelp)
} }
void AbandonName(const CTxDestination &address, CAmount nAmount, CWalletTx& wtxNew, CWalletTx wtxIn, unsigned int nTxOut) void AbandonClaim(const CTxDestination &address, CAmount nAmount, CWalletTx& wtxNew, CWalletTx wtxIn, unsigned int nTxOut)
{ {
// Check amount // Check amount
if (nAmount <= 0) if (nAmount <= 0)
@ -540,7 +541,7 @@ void AbandonName(const CTxDestination &address, CAmount nAmount, CWalletTx& wtxN
if (pwalletMain->IsLocked()) if (pwalletMain->IsLocked())
{ {
strError = "Error: Wallet locked, unable to create transaction!"; strError = "Error: Wallet locked, unable to create transaction!";
LogPrintf("AbandonName() : %s", strError); LogPrintf("%s() : %s", __func__, strError);
throw JSONRPCError(RPC_WALLET_ERROR, strError); throw JSONRPCError(RPC_WALLET_ERROR, strError);
} }
@ -558,7 +559,7 @@ void AbandonName(const CTxDestination &address, CAmount nAmount, CWalletTx& wtxN
{ {
if (nAmount + nFeeRequired - wtxIn.vout[nTxOut].nValue > pwalletMain->GetBalance()) if (nAmount + nFeeRequired - wtxIn.vout[nTxOut].nValue > pwalletMain->GetBalance())
strError = strprintf("Error: This transaction requires a transaction fee of a least %s because of its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired)); strError = strprintf("Error: This transaction requires a transaction fee of a least %s because of its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired));
LogPrintf("AbandonName() : %s\n", strError); LogPrintf("%s() : %s\n", __func__, strError);
throw JSONRPCError(RPC_WALLET_ERROR, strError); throw JSONRPCError(RPC_WALLET_ERROR, strError);
} }
if (!pwalletMain->CommitTransaction(wtxNew, reservekey)) if (!pwalletMain->CommitTransaction(wtxNew, reservekey))
@ -588,7 +589,7 @@ UniValue abandonclaim(const UniValue& params, bool fHelp)
CBitcoinAddress address(params[1].get_str()); CBitcoinAddress address(params[1].get_str());
if (!address.IsValid()) if (!address.IsValid())
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address"); throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LBRYcrd address");
CAmount nAmount = AmountFromValue(params[2]); CAmount nAmount = AmountFromValue(params[2]);
@ -610,7 +611,7 @@ UniValue abandonclaim(const UniValue& params, bool fHelp)
if (DecodeClaimScript(wtx.vout[i].scriptPubKey, op, vvchParams)) if (DecodeClaimScript(wtx.vout[i].scriptPubKey, op, vvchParams))
{ {
EnsureWalletIsUnlocked(); EnsureWalletIsUnlocked();
AbandonName(address.Get(), nAmount, wtxNew, wtx, i); AbandonClaim(address.Get(), nAmount, wtxNew, wtx, i);
fFound = true; fFound = true;
} }
} }
@ -648,22 +649,31 @@ void ListNameClaims(const CWalletTx& wtx, const string& strAccount, int nMinDept
vector<vector<unsigned char> > vvchParams; vector<vector<unsigned char> > vvchParams;
if (!DecodeClaimScript(scriptPubKey, op, vvchParams)) if (!DecodeClaimScript(scriptPubKey, op, vvchParams))
{ {
LogPrintf("ListNameClaims(): Txout classified as name claim could not be decoded. Txid: %s", wtx.GetHash().ToString()); LogPrintf("%s(): Txout classified as name claim could not be decoded. Txid: %s", __func__, wtx.GetHash().ToString());
continue; continue;
} }
else if (vvchParams.size() != 2) else if (((op == OP_CLAIM_NAME) && (vvchParams.size() != 2)) || ((op == OP_SUPPORT_CLAIM) && (vvchParams.size() != 3)))
{ {
LogPrintf("ListNameClaims(): Wrong number of params to name claim script. Got %d, expected 2. Txid: %s", vvchParams.size(), wtx.GetHash().ToString()); LogPrintf("%s(): Wrong number of params to name claim script. Got %d, expected %d. Txid: %s", __func__, vvchParams.size(), ((op == OP_CLAIM_NAME) ? 2 : 3), wtx.GetHash().ToString());
continue; continue;
} }
string sName (vvchParams[0].begin(), vvchParams[0].end()); string sName (vvchParams[0].begin(), vvchParams[0].end());
string sValue (vvchParams[1].begin(), vvchParams[1].end());
entry.push_back(Pair("name", sName)); entry.push_back(Pair("name", sName));
entry.push_back(Pair("value", sValue)); if (op == OP_CLAIM_NAME)
{
string sValue (vvchParams[1].begin(), vvchParams[1].end());
entry.push_back(Pair("value", sValue));
}
else if (op == OP_SUPPORT_CLAIM)
{
uint256 txhash(vvchParams[1]);
entry.push_back(Pair("supported_txid", txhash.GetHex()));
CScriptNum snOut(vvchParams[2], true);
entry.push_back(Pair("supported_nOut", snOut.getint()));
}
entry.push_back(Pair("txid", wtx.GetHash().ToString())); entry.push_back(Pair("txid", wtx.GetHash().ToString()));
entry.push_back(Pair("account", strSentAccount)); entry.push_back(Pair("account", strSentAccount));
MaybePushAddress(entry, s.destination); MaybePushAddress(entry, s.destination);
entry.push_back(Pair("category", "name"));
entry.push_back(Pair("amount", ValueFromAmount(s.amount))); entry.push_back(Pair("amount", ValueFromAmount(s.amount)));
entry.push_back(Pair("vout", s.vout)); entry.push_back(Pair("vout", s.vout));
entry.push_back(Pair("fee", ValueFromAmount(nFee))); entry.push_back(Pair("fee", ValueFromAmount(nFee)));
@ -688,7 +698,14 @@ void ListNameClaims(const CWalletTx& wtx, const string& strAccount, int nMinDept
} }
entry.push_back(Pair("confirmations", wtx.GetDepthInMainChain())); entry.push_back(Pair("confirmations", wtx.GetDepthInMainChain()));
entry.push_back(Pair("is spent", pwalletMain->IsSpent(wtx.GetHash(), s.vout))); entry.push_back(Pair("is spent", pwalletMain->IsSpent(wtx.GetHash(), s.vout)));
entry.push_back(Pair("is in name trie", pclaimTrie->haveClaim(sName, wtx.GetHash(), s.vout))); if (op == OP_CLAIM_NAME)
{
entry.push_back(Pair("is in name trie", pclaimTrie->haveClaim(sName, wtx.GetHash(), s.vout)));
}
else if (op == OP_SUPPORT_CLAIM)
{
entry.push_back(Pair("is in support map", pclaimTrie->haveSupport(sName, wtx.GetHash(), s.vout)));
}
ret.push_back(entry); ret.push_back(entry);
} }
} }
@ -702,18 +719,20 @@ UniValue listnameclaims(const UniValue& params, bool fHelp)
if (!EnsureWalletIsAvailable(fHelp)) if (!EnsureWalletIsAvailable(fHelp))
return NullUniValue; return NullUniValue;
if (fHelp || params.size() > 2) if (fHelp || params.size() > 3)
throw runtime_error( throw runtime_error(
"listnameclaims activeonly minconf\n" "listnameclaims activeonly minconf\n"
"Return a list of all transactions claiming names.\n" "Return a list of all transactions claiming names.\n"
"\nArguments\n" "\nArguments\n"
"1. activeonly (bool, optional, not implemented) Whether to only include transactions which are still active, i.e. have not been spent. Default is false.\n" "1. includesupports (bool, optional) Whether to also include claim supports. Default is true.\n"
"2. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many time.\n" "2. activeonly (bool, optional, not implemented) Whether to only include transactions which are still active, i.e. have not been spent. Default is false.\n"
"3. minconf (numeric, optional, default=1) Only include transactions confirmed at least this many time.\n"
"\nResult:\n" "\nResult:\n"
"[\n" "[\n"
" {\n" " {\n"
" \"name\":\"claimedname\", (string) The name that is claimed.\n" " \"name\":\"claimedname\", (string) The name that is claimed.\n"
" \"value\":\"value\" (string) The value assigned to the name.\n" " \"claimtype\":\"claimtype\", (string) CLAIM or SUPPORT.\n"
" \"value\":\"value\" (string) The value assigned to the name, if claimtype is CLAIM.\n"
" \"account\":\"accountname\", (string) The account name associated with the transaction. \n" " \"account\":\"accountname\", (string) The account name associated with the transaction. \n"
" It will be \"\" for the default account.\n" " It will be \"\" for the default account.\n"
" \"address\":\"lbrycrdaddress\", (string) The lbrycrd address of the transaction.\n" " \"address\":\"lbrycrdaddress\", (string) The lbrycrd address of the transaction.\n"
@ -736,15 +755,18 @@ UniValue listnameclaims(const UniValue& params, bool fHelp)
string strAccount = "*"; string strAccount = "*";
bool fListSpent = true;
if (params.size() > 0)
fListSpent = !params[0].get_bool();
isminefilter claim_filter = ISMINE_CLAIM; isminefilter claim_filter = ISMINE_CLAIM;
if (params.size() < 1 || params[0].get_bool())
claim_filter |= ISMINE_SUPPORT;
bool fListSpent = true;
if (params.size() > 1)
fListSpent = !params[1].get_bool();
// Minimum confirmations // Minimum confirmations
int nMinDepth = 1; int nMinDepth = 1;
if (params.size() > 1) if (params.size() > 2)
nMinDepth = params[1].get_int(); nMinDepth = params[2].get_int();
UniValue ret(UniValue::VARR); UniValue ret(UniValue::VARR);
@ -771,6 +793,100 @@ UniValue listnameclaims(const UniValue& params, bool fHelp)
} }
UniValue supportclaim(const UniValue& params, bool fHelp)
{
if (!EnsureWalletIsAvailable(fHelp))
return NullUniValue;
if (fHelp || params.size() != 4)
throw runtime_error(
"supportclaim \"name\" \"txid\" nout amount\n"
"Increase the value of a claim. Whichever claim has the greatest value, including all support values, will be the authoritative claim, according to the rest of the rules. The name is the name which is claimed by the claim that will be supported, the txid is the txid of the claim that will be supported, nout is the transaction output which contains the claim to be supported, and amount is the amount which will be added to the value of the claim. If the claim is currently the authoritative claim, this support will go into effect immediately. Otherwise, it will go into effect after 100 blocks. The support will be in effect until it is spent, and will lose its effect when the claim is spent or expires. The amount is a real and is rounded to the nearest .00000001\n"
+ HelpRequiringPassphrase() +
"\nArguments:\n"
"1. \"name\" (string, required) The name claimed by the claim to support.\n"
"2. \"txid\" (string, required) The transaction id of the claim to support.\n"
"3. \"nout\" (integer, required) The transaction output of the transaction which contains the claim to be supported.\n"
"4. \"amount\" (numeric, required) The amount in LBC to use to support the claim.\n"
"\nResult:\n"
"\"transactionid\" (string) The transaction id of the support.\n"
);
string sName = params[0].get_str();
string sTxid = params[1].get_str();
uint256 txid;
txid.SetHex(sTxid);
std::vector<unsigned char> vchName (sName.begin(), sName.end());
std::vector<unsigned char> vchTxid (txid.begin(), txid.end());
std::vector<unsigned char> vchnOut = uint32_t_to_vch(params[2].get_int());
CAmount nAmount = AmountFromValue(params[3]);
CWalletTx wtx;
EnsureWalletIsUnlocked();
CScript supportScript = CScript() << OP_SUPPORT_CLAIM << vchName << vchTxid << vchnOut << OP_2DROP << OP_2DROP;
CreateClaim(supportScript, nAmount, wtx);
return wtx.GetHash().GetHex();
}
UniValue abandonsupport(const UniValue& params, bool fHelp)
{
if (!EnsureWalletIsAvailable(fHelp))
return NullUniValue;
if (fHelp || params.size() != 3)
throw runtime_error(
"abandonsupport \"txid\" \"lbrycrdaddress\" \"amount\"\n"
"Create a transaction which spends a txout which supported a name claim, effectively abandoning that support.\n"
+ HelpRequiringPassphrase() +
"\nArguments:\n"
"1. \"txid\" (string, required) The transaction containing the unspent txout which should be spent.\n"
"2. \"lbrycrdaddress\" (string, required) The lbrycrd address to send to.\n"
"3. \"amount\" (numeric, required) The amount to send to the lbrycrd address. eg 0.1\n"
"\nResult:\n"
"\"transactionid\" (string) The new transaction id.\n"
);
uint256 hash;
hash.SetHex(params[0].get_str());
CBitcoinAddress address(params[1].get_str());
if (!address.IsValid())
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid LBRYcrd address");
CAmount nAmount = AmountFromValue(params[2]);
isminefilter filter = ISMINE_SUPPORT;
UniValue entry;
if (!pwalletMain->mapWallet.count(hash))
throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid or non-wallet transaction id");
const CWalletTx& wtx = pwalletMain->mapWallet[hash];
int op;
std::vector<std::vector<unsigned char> > vvchParams;
CWalletTx wtxNew;
bool fFound = false;
for (unsigned int i = 0; !fFound && i < wtx.vout.size(); ++i)
{
if (filter & pwalletMain->IsMine(wtx.vout[i]))
{
if (DecodeClaimScript(wtx.vout[i].scriptPubKey, op, vvchParams))
{
EnsureWalletIsUnlocked();
AbandonClaim(address.Get(), nAmount, wtxNew, wtx, i); // not a type, they do the same thing
fFound = true;
}
}
}
if (!fFound)
throw runtime_error("Error: The given transaction contains no support scripts owned by this wallet");
return wtxNew.GetHash().GetHex();
}
static void SendMoney(const CTxDestination &address, CAmount nValue, bool fSubtractFeeFromAmount, CWalletTx& wtxNew) static void SendMoney(const CTxDestination &address, CAmount nValue, bool fSubtractFeeFromAmount, CWalletTx& wtxNew)

View file

@ -993,7 +993,7 @@ void CWalletTx::GetAmounts(list<COutputEntry>& listReceived,
COutputEntry output = {address, txout.nValue, (int)i}; COutputEntry output = {address, txout.nValue, (int)i};
// If we are debited by the transaction, add the output as a "sent" entry // If we are debited by the transaction, add the output as a "sent" entry
if (nDebit > 0 || filter == ISMINE_CLAIM) if (nDebit > 0 || filter | ISMINE_CLAIM || filter | ISMINE_SUPPORT)
listSent.push_back(output); listSent.push_back(output);
// If we are receiving the output, add it as a "received" entry // If we are receiving the output, add it as a "received" entry

View file

@ -41,10 +41,23 @@ isminetype IsMine(const CKeyStore &keystore, const CScript& scriptPubKey)
txnouttype whichType; txnouttype whichType;
isminetype spendable_type = ISMINE_SPENDABLE; isminetype spendable_type = ISMINE_SPENDABLE;
CScript strippedScriptPubKey = StripClaimScriptPrefix(scriptPubKey); int opcode;
CScript strippedScriptPubKey = StripClaimScriptPrefix(scriptPubKey, opcode);
if (strippedScriptPubKey != scriptPubKey) if (strippedScriptPubKey != scriptPubKey)
{ {
spendable_type = ISMINE_CLAIM; if (opcode == OP_CLAIM_NAME)
{
spendable_type = ISMINE_CLAIM;
}
else if (opcode == OP_SUPPORT_CLAIM)
{
spendable_type = ISMINE_SUPPORT;
}
else
{
spendable_type = ISMINE_NO;
}
} }

View file

@ -19,7 +19,8 @@ enum isminetype
ISMINE_WATCH_ONLY = 1, ISMINE_WATCH_ONLY = 1,
ISMINE_SPENDABLE = 2, ISMINE_SPENDABLE = 2,
ISMINE_CLAIM = 4, ISMINE_CLAIM = 4,
ISMINE_ALL = ISMINE_WATCH_ONLY | ISMINE_SPENDABLE | ISMINE_CLAIM ISMINE_SUPPORT = 8,
ISMINE_ALL = ISMINE_WATCH_ONLY | ISMINE_SPENDABLE | ISMINE_CLAIM | ISMINE_SUPPORT
}; };
/** used for bitflags of isminetype */ /** used for bitflags of isminetype */
typedef uint8_t isminefilter; typedef uint8_t isminefilter;