Remove whitespaces before double colon in errors and logs
This commit is contained in:
parent
3800135ad3
commit
5262fde0ec
28 changed files with 217 additions and 217 deletions
|
@ -149,7 +149,7 @@ bool CAlert::CheckSignature() const
|
||||||
{
|
{
|
||||||
CPubKey key(Params().AlertKey());
|
CPubKey key(Params().AlertKey());
|
||||||
if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig))
|
if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig))
|
||||||
return error("CAlert::CheckSignature() : verify signature failed");
|
return error("CAlert::CheckSignature(): verify signature failed");
|
||||||
|
|
||||||
// Now unserialize the data
|
// Now unserialize the data
|
||||||
CDataStream sMsg(vchMsg, SER_NETWORK, PROTOCOL_VERSION);
|
CDataStream sMsg(vchMsg, SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
|
40
src/db.cpp
40
src/db.cpp
|
@ -43,7 +43,7 @@ void CDBEnv::EnvShutdown()
|
||||||
fDbEnvInit = false;
|
fDbEnvInit = false;
|
||||||
int ret = dbenv.close(0);
|
int ret = dbenv.close(0);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
LogPrintf("CDBEnv::EnvShutdown : Error %d shutting down database environment: %s\n", ret, DbEnv::strerror(ret));
|
LogPrintf("CDBEnv::EnvShutdown: Error %d shutting down database environment: %s\n", ret, DbEnv::strerror(ret));
|
||||||
if (!fMockDb)
|
if (!fMockDb)
|
||||||
DbEnv(0).remove(path.string().c_str(), 0);
|
DbEnv(0).remove(path.string().c_str(), 0);
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
|
||||||
boost::filesystem::path pathLogDir = path / "database";
|
boost::filesystem::path pathLogDir = path / "database";
|
||||||
TryCreateDirectory(pathLogDir);
|
TryCreateDirectory(pathLogDir);
|
||||||
boost::filesystem::path pathErrorFile = path / "db.log";
|
boost::filesystem::path pathErrorFile = path / "db.log";
|
||||||
LogPrintf("CDBEnv::Open : LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string());
|
LogPrintf("CDBEnv::Open: LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string());
|
||||||
|
|
||||||
unsigned int nEnvFlags = 0;
|
unsigned int nEnvFlags = 0;
|
||||||
if (GetBoolArg("-privdb", true))
|
if (GetBoolArg("-privdb", true))
|
||||||
|
@ -102,7 +102,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
|
||||||
nEnvFlags,
|
nEnvFlags,
|
||||||
S_IRUSR | S_IWUSR);
|
S_IRUSR | S_IWUSR);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return error("CDBEnv::Open : Error %d opening database environment: %s\n", ret, DbEnv::strerror(ret));
|
return error("CDBEnv::Open: Error %d opening database environment: %s\n", ret, DbEnv::strerror(ret));
|
||||||
|
|
||||||
fDbEnvInit = true;
|
fDbEnvInit = true;
|
||||||
fMockDb = false;
|
fMockDb = false;
|
||||||
|
@ -112,7 +112,7 @@ bool CDBEnv::Open(const boost::filesystem::path& pathIn)
|
||||||
void CDBEnv::MakeMock()
|
void CDBEnv::MakeMock()
|
||||||
{
|
{
|
||||||
if (fDbEnvInit)
|
if (fDbEnvInit)
|
||||||
throw runtime_error("CDBEnv::MakeMock : Already initialized");
|
throw runtime_error("CDBEnv::MakeMock: Already initialized");
|
||||||
|
|
||||||
boost::this_thread::interruption_point();
|
boost::this_thread::interruption_point();
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ void CDBEnv::MakeMock()
|
||||||
DB_PRIVATE,
|
DB_PRIVATE,
|
||||||
S_IRUSR | S_IWUSR);
|
S_IRUSR | S_IWUSR);
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
throw runtime_error(strprintf("CDBEnv::MakeMock : Error %d opening database environment.", ret));
|
throw runtime_error(strprintf("CDBEnv::MakeMock: Error %d opening database environment.", ret));
|
||||||
|
|
||||||
fDbEnvInit = true;
|
fDbEnvInit = true;
|
||||||
fMockDb = true;
|
fMockDb = true;
|
||||||
|
@ -172,14 +172,14 @@ bool CDBEnv::Salvage(std::string strFile, bool fAggressive, std::vector<CDBEnv::
|
||||||
Db db(&dbenv, 0);
|
Db db(&dbenv, 0);
|
||||||
int result = db.verify(strFile.c_str(), NULL, &strDump, flags);
|
int result = db.verify(strFile.c_str(), NULL, &strDump, flags);
|
||||||
if (result == DB_VERIFY_BAD) {
|
if (result == DB_VERIFY_BAD) {
|
||||||
LogPrintf("CDBEnv::Salvage : Database salvage found errors, all data may not be recoverable.\n");
|
LogPrintf("CDBEnv::Salvage: Database salvage found errors, all data may not be recoverable.\n");
|
||||||
if (!fAggressive) {
|
if (!fAggressive) {
|
||||||
LogPrintf("CDBEnv::Salvage : Rerun with aggressive mode to ignore errors and continue.\n");
|
LogPrintf("CDBEnv::Salvage: Rerun with aggressive mode to ignore errors and continue.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (result != 0 && result != DB_VERIFY_BAD) {
|
if (result != 0 && result != DB_VERIFY_BAD) {
|
||||||
LogPrintf("CDBEnv::Salvage : Database salvage failed with result %d.\n", result);
|
LogPrintf("CDBEnv::Salvage: Database salvage failed with result %d.\n", result);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ CDB::CDB(const std::string& strFilename, const char* pszMode, bool fFlushOnClose
|
||||||
{
|
{
|
||||||
LOCK(bitdb.cs_db);
|
LOCK(bitdb.cs_db);
|
||||||
if (!bitdb.Open(GetDataDir()))
|
if (!bitdb.Open(GetDataDir()))
|
||||||
throw runtime_error("CDB : Failed to open database environment.");
|
throw runtime_error("CDB: Failed to open database environment.");
|
||||||
|
|
||||||
strFile = strFilename;
|
strFile = strFilename;
|
||||||
++bitdb.mapFileUseCount[strFile];
|
++bitdb.mapFileUseCount[strFile];
|
||||||
|
@ -246,7 +246,7 @@ CDB::CDB(const std::string& strFilename, const char* pszMode, bool fFlushOnClose
|
||||||
DbMpoolFile* mpf = pdb->get_mpf();
|
DbMpoolFile* mpf = pdb->get_mpf();
|
||||||
ret = mpf->set_flags(DB_MPOOL_NOFILE, 1);
|
ret = mpf->set_flags(DB_MPOOL_NOFILE, 1);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
throw runtime_error(strprintf("CDB : Failed to configure for no temp file backing for database %s", strFile));
|
throw runtime_error(strprintf("CDB: Failed to configure for no temp file backing for database %s", strFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = pdb->open(NULL, // Txn pointer
|
ret = pdb->open(NULL, // Txn pointer
|
||||||
|
@ -261,7 +261,7 @@ CDB::CDB(const std::string& strFilename, const char* pszMode, bool fFlushOnClose
|
||||||
pdb = NULL;
|
pdb = NULL;
|
||||||
--bitdb.mapFileUseCount[strFile];
|
--bitdb.mapFileUseCount[strFile];
|
||||||
strFile = "";
|
strFile = "";
|
||||||
throw runtime_error(strprintf("CDB : Error %d, can't open database %s", ret, strFile));
|
throw runtime_error(strprintf("CDB: Error %d, can't open database %s", ret, strFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fCreate && !Exists(string("version"))) {
|
if (fCreate && !Exists(string("version"))) {
|
||||||
|
@ -342,7 +342,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
|
||||||
bitdb.mapFileUseCount.erase(strFile);
|
bitdb.mapFileUseCount.erase(strFile);
|
||||||
|
|
||||||
bool fSuccess = true;
|
bool fSuccess = true;
|
||||||
LogPrintf("CDB::Rewrite : Rewriting %s...\n", strFile);
|
LogPrintf("CDB::Rewrite: Rewriting %s...\n", strFile);
|
||||||
string strFileRes = strFile + ".rewrite";
|
string strFileRes = strFile + ".rewrite";
|
||||||
{ // surround usage of db with extra {}
|
{ // surround usage of db with extra {}
|
||||||
CDB db(strFile.c_str(), "r");
|
CDB db(strFile.c_str(), "r");
|
||||||
|
@ -355,7 +355,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
|
||||||
DB_CREATE, // Flags
|
DB_CREATE, // Flags
|
||||||
0);
|
0);
|
||||||
if (ret > 0) {
|
if (ret > 0) {
|
||||||
LogPrintf("CDB::Rewrite : Can't create database file %s\n", strFileRes);
|
LogPrintf("CDB::Rewrite: Can't create database file %s\n", strFileRes);
|
||||||
fSuccess = false;
|
fSuccess = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +404,7 @@ bool CDB::Rewrite(const string& strFile, const char* pszSkip)
|
||||||
fSuccess = false;
|
fSuccess = false;
|
||||||
}
|
}
|
||||||
if (!fSuccess)
|
if (!fSuccess)
|
||||||
LogPrintf("CDB::Rewrite : Failed to rewrite database file %s\n", strFileRes);
|
LogPrintf("CDB::Rewrite: Failed to rewrite database file %s\n", strFileRes);
|
||||||
return fSuccess;
|
return fSuccess;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -418,7 +418,7 @@ void CDBEnv::Flush(bool fShutdown)
|
||||||
{
|
{
|
||||||
int64_t nStart = GetTimeMillis();
|
int64_t nStart = GetTimeMillis();
|
||||||
// Flush log data to the actual data file on all files that are not in use
|
// Flush log data to the actual data file on all files that are not in use
|
||||||
LogPrint("db", "CDBEnv::Flush : Flush(%s)%s\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started");
|
LogPrint("db", "CDBEnv::Flush: Flush(%s)%s\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started");
|
||||||
if (!fDbEnvInit)
|
if (!fDbEnvInit)
|
||||||
return;
|
return;
|
||||||
{
|
{
|
||||||
|
@ -427,21 +427,21 @@ void CDBEnv::Flush(bool fShutdown)
|
||||||
while (mi != mapFileUseCount.end()) {
|
while (mi != mapFileUseCount.end()) {
|
||||||
string strFile = (*mi).first;
|
string strFile = (*mi).first;
|
||||||
int nRefCount = (*mi).second;
|
int nRefCount = (*mi).second;
|
||||||
LogPrint("db", "CDBEnv::Flush : Flushing %s (refcount = %d)...\n", strFile, nRefCount);
|
LogPrint("db", "CDBEnv::Flush: Flushing %s (refcount = %d)...\n", strFile, nRefCount);
|
||||||
if (nRefCount == 0) {
|
if (nRefCount == 0) {
|
||||||
// Move log data to the dat file
|
// Move log data to the dat file
|
||||||
CloseDb(strFile);
|
CloseDb(strFile);
|
||||||
LogPrint("db", "CDBEnv::Flush : %s checkpoint\n", strFile);
|
LogPrint("db", "CDBEnv::Flush: %s checkpoint\n", strFile);
|
||||||
dbenv.txn_checkpoint(0, 0, 0);
|
dbenv.txn_checkpoint(0, 0, 0);
|
||||||
LogPrint("db", "CDBEnv::Flush : %s detach\n", strFile);
|
LogPrint("db", "CDBEnv::Flush: %s detach\n", strFile);
|
||||||
if (!fMockDb)
|
if (!fMockDb)
|
||||||
dbenv.lsn_reset(strFile.c_str(), 0);
|
dbenv.lsn_reset(strFile.c_str(), 0);
|
||||||
LogPrint("db", "CDBEnv::Flush : %s closed\n", strFile);
|
LogPrint("db", "CDBEnv::Flush: %s closed\n", strFile);
|
||||||
mapFileUseCount.erase(mi++);
|
mapFileUseCount.erase(mi++);
|
||||||
} else
|
} else
|
||||||
mi++;
|
mi++;
|
||||||
}
|
}
|
||||||
LogPrint("db", "CDBEnv::Flush : Flush(%s)%s took %15dms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started", GetTimeMillis() - nStart);
|
LogPrint("db", "CDBEnv::Flush: Flush(%s)%s took %15dms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started", GetTimeMillis() - nStart);
|
||||||
if (fShutdown) {
|
if (fShutdown) {
|
||||||
char** listp;
|
char** listp;
|
||||||
if (mapFileUseCount.empty()) {
|
if (mapFileUseCount.empty()) {
|
||||||
|
|
|
@ -977,7 +977,7 @@ bool AppInit2(boost::thread_group& threadGroup)
|
||||||
} catch (const boost::filesystem::filesystem_error& e) {
|
} catch (const boost::filesystem::filesystem_error& e) {
|
||||||
// Note: hardlink creation failing is not a disaster, it just means
|
// Note: hardlink creation failing is not a disaster, it just means
|
||||||
// blocks will get re-downloaded from peers.
|
// blocks will get re-downloaded from peers.
|
||||||
LogPrintf("Error hardlinking blk%04u.dat : %s\n", i, e.what());
|
LogPrintf("Error hardlinking blk%04u.dat: %s\n", i, e.what());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ bool CBasicKeyStore::AddKeyPubKey(const CKey& key, const CPubKey &pubkey)
|
||||||
bool CBasicKeyStore::AddCScript(const CScript& redeemScript)
|
bool CBasicKeyStore::AddCScript(const CScript& redeemScript)
|
||||||
{
|
{
|
||||||
if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE)
|
if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE)
|
||||||
return error("CBasicKeyStore::AddCScript() : redeemScripts > %i bytes are invalid", MAX_SCRIPT_ELEMENT_SIZE);
|
return error("CBasicKeyStore::AddCScript(): redeemScripts > %i bytes are invalid", MAX_SCRIPT_ELEMENT_SIZE);
|
||||||
|
|
||||||
LOCK(cs_KeyStore);
|
LOCK(cs_KeyStore);
|
||||||
mapScripts[CScriptID(redeemScript)] = redeemScript;
|
mapScripts[CScriptID(redeemScript)] = redeemScript;
|
||||||
|
|
190
src/main.cpp
190
src/main.cpp
|
@ -820,14 +820,14 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
|
||||||
{
|
{
|
||||||
// Basic checks that don't depend on any context
|
// Basic checks that don't depend on any context
|
||||||
if (tx.vin.empty())
|
if (tx.vin.empty())
|
||||||
return state.DoS(10, error("CheckTransaction() : vin empty"),
|
return state.DoS(10, error("CheckTransaction(): vin empty"),
|
||||||
REJECT_INVALID, "bad-txns-vin-empty");
|
REJECT_INVALID, "bad-txns-vin-empty");
|
||||||
if (tx.vout.empty())
|
if (tx.vout.empty())
|
||||||
return state.DoS(10, error("CheckTransaction() : vout empty"),
|
return state.DoS(10, error("CheckTransaction(): vout empty"),
|
||||||
REJECT_INVALID, "bad-txns-vout-empty");
|
REJECT_INVALID, "bad-txns-vout-empty");
|
||||||
// Size limits
|
// Size limits
|
||||||
if (::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE)
|
if (::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE)
|
||||||
return state.DoS(100, error("CheckTransaction() : size limits failed"),
|
return state.DoS(100, error("CheckTransaction(): size limits failed"),
|
||||||
REJECT_INVALID, "bad-txns-oversize");
|
REJECT_INVALID, "bad-txns-oversize");
|
||||||
|
|
||||||
// Check for negative or overflow output values
|
// Check for negative or overflow output values
|
||||||
|
@ -835,14 +835,14 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
|
||||||
BOOST_FOREACH(const CTxOut& txout, tx.vout)
|
BOOST_FOREACH(const CTxOut& txout, tx.vout)
|
||||||
{
|
{
|
||||||
if (txout.nValue < 0)
|
if (txout.nValue < 0)
|
||||||
return state.DoS(100, error("CheckTransaction() : txout.nValue negative"),
|
return state.DoS(100, error("CheckTransaction(): txout.nValue negative"),
|
||||||
REJECT_INVALID, "bad-txns-vout-negative");
|
REJECT_INVALID, "bad-txns-vout-negative");
|
||||||
if (txout.nValue > MAX_MONEY)
|
if (txout.nValue > MAX_MONEY)
|
||||||
return state.DoS(100, error("CheckTransaction() : txout.nValue too high"),
|
return state.DoS(100, error("CheckTransaction(): txout.nValue too high"),
|
||||||
REJECT_INVALID, "bad-txns-vout-toolarge");
|
REJECT_INVALID, "bad-txns-vout-toolarge");
|
||||||
nValueOut += txout.nValue;
|
nValueOut += txout.nValue;
|
||||||
if (!MoneyRange(nValueOut))
|
if (!MoneyRange(nValueOut))
|
||||||
return state.DoS(100, error("CheckTransaction() : txout total out of range"),
|
return state.DoS(100, error("CheckTransaction(): txout total out of range"),
|
||||||
REJECT_INVALID, "bad-txns-txouttotal-toolarge");
|
REJECT_INVALID, "bad-txns-txouttotal-toolarge");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -851,7 +851,7 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
|
||||||
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
||||||
{
|
{
|
||||||
if (vInOutPoints.count(txin.prevout))
|
if (vInOutPoints.count(txin.prevout))
|
||||||
return state.DoS(100, error("CheckTransaction() : duplicate inputs"),
|
return state.DoS(100, error("CheckTransaction(): duplicate inputs"),
|
||||||
REJECT_INVALID, "bad-txns-inputs-duplicate");
|
REJECT_INVALID, "bad-txns-inputs-duplicate");
|
||||||
vInOutPoints.insert(txin.prevout);
|
vInOutPoints.insert(txin.prevout);
|
||||||
}
|
}
|
||||||
|
@ -859,14 +859,14 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
|
||||||
if (tx.IsCoinBase())
|
if (tx.IsCoinBase())
|
||||||
{
|
{
|
||||||
if (tx.vin[0].scriptSig.size() < 2 || tx.vin[0].scriptSig.size() > 100)
|
if (tx.vin[0].scriptSig.size() < 2 || tx.vin[0].scriptSig.size() > 100)
|
||||||
return state.DoS(100, error("CheckTransaction() : coinbase script size"),
|
return state.DoS(100, error("CheckTransaction(): coinbase script size"),
|
||||||
REJECT_INVALID, "bad-cb-length");
|
REJECT_INVALID, "bad-cb-length");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
BOOST_FOREACH(const CTxIn& txin, tx.vin)
|
||||||
if (txin.prevout.IsNull())
|
if (txin.prevout.IsNull())
|
||||||
return state.DoS(10, error("CheckTransaction() : prevout is null"),
|
return state.DoS(10, error("CheckTransaction(): prevout is null"),
|
||||||
REJECT_INVALID, "bad-txns-prevout-null");
|
REJECT_INVALID, "bad-txns-prevout-null");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -922,7 +922,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
string reason;
|
string reason;
|
||||||
if (Params().RequireStandard() && !IsStandardTx(tx, reason))
|
if (Params().RequireStandard() && !IsStandardTx(tx, reason))
|
||||||
return state.DoS(0,
|
return state.DoS(0,
|
||||||
error("AcceptToMemoryPool : nonstandard transaction: %s", reason),
|
error("AcceptToMemoryPool: nonstandard transaction: %s", reason),
|
||||||
REJECT_NONSTANDARD, reason);
|
REJECT_NONSTANDARD, reason);
|
||||||
|
|
||||||
// Only accept nLockTime-using transactions that can be mined in the next
|
// Only accept nLockTime-using transactions that can be mined in the next
|
||||||
|
@ -942,7 +942,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
// timestamp applications where it matters.
|
// timestamp applications where it matters.
|
||||||
if (!IsFinalTx(tx, chainActive.Height() + 1))
|
if (!IsFinalTx(tx, chainActive.Height() + 1))
|
||||||
return state.DoS(0,
|
return state.DoS(0,
|
||||||
error("AcceptToMemoryPool : non-final"),
|
error("AcceptToMemoryPool: non-final"),
|
||||||
REJECT_NONSTANDARD, "non-final");
|
REJECT_NONSTANDARD, "non-final");
|
||||||
|
|
||||||
// is it already in the memory pool?
|
// is it already in the memory pool?
|
||||||
|
@ -991,7 +991,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
|
|
||||||
// are the actual inputs available?
|
// are the actual inputs available?
|
||||||
if (!view.HaveInputs(tx))
|
if (!view.HaveInputs(tx))
|
||||||
return state.Invalid(error("AcceptToMemoryPool : inputs already spent"),
|
return state.Invalid(error("AcceptToMemoryPool: inputs already spent"),
|
||||||
REJECT_DUPLICATE, "bad-txns-inputs-spent");
|
REJECT_DUPLICATE, "bad-txns-inputs-spent");
|
||||||
|
|
||||||
// Bring the best block into scope
|
// Bring the best block into scope
|
||||||
|
@ -1016,7 +1016,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
nSigOps += GetP2SHSigOpCount(tx, view);
|
nSigOps += GetP2SHSigOpCount(tx, view);
|
||||||
if (nSigOps > MAX_STANDARD_TX_SIGOPS)
|
if (nSigOps > MAX_STANDARD_TX_SIGOPS)
|
||||||
return state.DoS(0,
|
return state.DoS(0,
|
||||||
error("AcceptToMemoryPool : too many sigops %s, %d > %d",
|
error("AcceptToMemoryPool: too many sigops %s, %d > %d",
|
||||||
hash.ToString(), nSigOps, MAX_STANDARD_TX_SIGOPS),
|
hash.ToString(), nSigOps, MAX_STANDARD_TX_SIGOPS),
|
||||||
REJECT_NONSTANDARD, "bad-txns-too-many-sigops");
|
REJECT_NONSTANDARD, "bad-txns-too-many-sigops");
|
||||||
|
|
||||||
|
@ -1030,7 +1030,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
// Don't accept it if it can't get into a block
|
// Don't accept it if it can't get into a block
|
||||||
CAmount txMinFee = GetMinRelayFee(tx, nSize, true);
|
CAmount txMinFee = GetMinRelayFee(tx, nSize, true);
|
||||||
if (fLimitFree && nFees < txMinFee)
|
if (fLimitFree && nFees < txMinFee)
|
||||||
return state.DoS(0, error("AcceptToMemoryPool : not enough fees %s, %d < %d",
|
return state.DoS(0, error("AcceptToMemoryPool: not enough fees %s, %d < %d",
|
||||||
hash.ToString(), nFees, txMinFee),
|
hash.ToString(), nFees, txMinFee),
|
||||||
REJECT_INSUFFICIENTFEE, "insufficient fee");
|
REJECT_INSUFFICIENTFEE, "insufficient fee");
|
||||||
|
|
||||||
|
@ -1057,7 +1057,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
|
||||||
// -limitfreerelay unit is thousand-bytes-per-minute
|
// -limitfreerelay unit is thousand-bytes-per-minute
|
||||||
// At default rate it would take over a month to fill 1GB
|
// At default rate it would take over a month to fill 1GB
|
||||||
if (dFreeCount >= GetArg("-limitfreerelay", 15)*10*1000)
|
if (dFreeCount >= GetArg("-limitfreerelay", 15)*10*1000)
|
||||||
return state.DoS(0, error("AcceptToMemoryPool : free transaction rejected by rate limiter"),
|
return state.DoS(0, error("AcceptToMemoryPool: free transaction rejected by rate limiter"),
|
||||||
REJECT_INSUFFICIENTFEE, "rate limited free transaction");
|
REJECT_INSUFFICIENTFEE, "rate limited free transaction");
|
||||||
LogPrint("mempool", "Rate limit dFreeCount: %g => %g\n", dFreeCount, dFreeCount+nSize);
|
LogPrint("mempool", "Rate limit dFreeCount: %g => %g\n", dFreeCount, dFreeCount+nSize);
|
||||||
dFreeCount += nSize;
|
dFreeCount += nSize;
|
||||||
|
@ -1123,11 +1123,11 @@ bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock
|
||||||
fseek(file.Get(), postx.nTxOffset, SEEK_CUR);
|
fseek(file.Get(), postx.nTxOffset, SEEK_CUR);
|
||||||
file >> txOut;
|
file >> txOut;
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
hashBlock = header.GetHash();
|
hashBlock = header.GetHash();
|
||||||
if (txOut.GetHash() != hash)
|
if (txOut.GetHash() != hash)
|
||||||
return error("%s : txid mismatch", __func__);
|
return error("%s: txid mismatch", __func__);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1176,7 +1176,7 @@ bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos)
|
||||||
// Open history file to append
|
// Open history file to append
|
||||||
CAutoFile fileout(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION);
|
CAutoFile fileout(OpenBlockFile(pos), SER_DISK, CLIENT_VERSION);
|
||||||
if (fileout.IsNull())
|
if (fileout.IsNull())
|
||||||
return error("WriteBlockToDisk : OpenBlockFile failed");
|
return error("WriteBlockToDisk: OpenBlockFile failed");
|
||||||
|
|
||||||
// Write index header
|
// Write index header
|
||||||
unsigned int nSize = fileout.GetSerializeSize(block);
|
unsigned int nSize = fileout.GetSerializeSize(block);
|
||||||
|
@ -1185,7 +1185,7 @@ bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos)
|
||||||
// Write block
|
// Write block
|
||||||
long fileOutPos = ftell(fileout.Get());
|
long fileOutPos = ftell(fileout.Get());
|
||||||
if (fileOutPos < 0)
|
if (fileOutPos < 0)
|
||||||
return error("WriteBlockToDisk : ftell failed");
|
return error("WriteBlockToDisk: ftell failed");
|
||||||
pos.nPos = (unsigned int)fileOutPos;
|
pos.nPos = (unsigned int)fileOutPos;
|
||||||
fileout << block;
|
fileout << block;
|
||||||
|
|
||||||
|
@ -1199,19 +1199,19 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos)
|
||||||
// Open history file to read
|
// Open history file to read
|
||||||
CAutoFile filein(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION);
|
CAutoFile filein(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION);
|
||||||
if (filein.IsNull())
|
if (filein.IsNull())
|
||||||
return error("ReadBlockFromDisk : OpenBlockFile failed");
|
return error("ReadBlockFromDisk: OpenBlockFile failed");
|
||||||
|
|
||||||
// Read block
|
// Read block
|
||||||
try {
|
try {
|
||||||
filein >> block;
|
filein >> block;
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the header
|
// Check the header
|
||||||
if (!CheckProofOfWork(block.GetHash(), block.nBits))
|
if (!CheckProofOfWork(block.GetHash(), block.nBits))
|
||||||
return error("ReadBlockFromDisk : Errors in block header");
|
return error("ReadBlockFromDisk: Errors in block header");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1221,7 +1221,7 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex)
|
||||||
if (!ReadBlockFromDisk(block, pindex->GetBlockPos()))
|
if (!ReadBlockFromDisk(block, pindex->GetBlockPos()))
|
||||||
return false;
|
return false;
|
||||||
if (block.GetHash() != pindex->GetBlockHash())
|
if (block.GetHash() != pindex->GetBlockHash())
|
||||||
return error("ReadBlockFromDisk(CBlock&, CBlockIndex*) : GetHash() doesn't match index");
|
return error("ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1423,7 +1423,7 @@ void UpdateCoins(const CTransaction& tx, CValidationState &state, CCoinsViewCach
|
||||||
bool CScriptCheck::operator()() {
|
bool CScriptCheck::operator()() {
|
||||||
const CScript &scriptSig = ptxTo->vin[nIn].scriptSig;
|
const CScript &scriptSig = ptxTo->vin[nIn].scriptSig;
|
||||||
if (!VerifyScript(scriptSig, scriptPubKey, nFlags, CachingSignatureChecker(*ptxTo, nIn, cacheStore), &error)) {
|
if (!VerifyScript(scriptSig, scriptPubKey, nFlags, CachingSignatureChecker(*ptxTo, nIn, cacheStore), &error)) {
|
||||||
return ::error("CScriptCheck() : %s:%d VerifySignature failed: %s", ptxTo->GetHash().ToString(), nIn, ScriptErrorString(error));
|
return ::error("CScriptCheck(): %s:%d VerifySignature failed: %s", ptxTo->GetHash().ToString(), nIn, ScriptErrorString(error));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1438,7 +1438,7 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, const CCoinsVi
|
||||||
// This doesn't trigger the DoS code on purpose; if it did, it would make it easier
|
// This doesn't trigger the DoS code on purpose; if it did, it would make it easier
|
||||||
// for an attacker to attempt to split the network.
|
// for an attacker to attempt to split the network.
|
||||||
if (!inputs.HaveInputs(tx))
|
if (!inputs.HaveInputs(tx))
|
||||||
return state.Invalid(error("CheckInputs() : %s inputs unavailable", tx.GetHash().ToString()));
|
return state.Invalid(error("CheckInputs(): %s inputs unavailable", tx.GetHash().ToString()));
|
||||||
|
|
||||||
// While checking, GetBestBlock() refers to the parent block.
|
// While checking, GetBestBlock() refers to the parent block.
|
||||||
// This is also true for mempool checks.
|
// This is also true for mempool checks.
|
||||||
|
@ -1456,31 +1456,31 @@ bool CheckInputs(const CTransaction& tx, CValidationState &state, const CCoinsVi
|
||||||
if (coins->IsCoinBase()) {
|
if (coins->IsCoinBase()) {
|
||||||
if (nSpendHeight - coins->nHeight < COINBASE_MATURITY)
|
if (nSpendHeight - coins->nHeight < COINBASE_MATURITY)
|
||||||
return state.Invalid(
|
return state.Invalid(
|
||||||
error("CheckInputs() : tried to spend coinbase at depth %d", nSpendHeight - coins->nHeight),
|
error("CheckInputs(): tried to spend coinbase at depth %d", nSpendHeight - coins->nHeight),
|
||||||
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");
|
REJECT_INVALID, "bad-txns-premature-spend-of-coinbase");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for negative or overflow input values
|
// Check for negative or overflow input values
|
||||||
nValueIn += coins->vout[prevout.n].nValue;
|
nValueIn += coins->vout[prevout.n].nValue;
|
||||||
if (!MoneyRange(coins->vout[prevout.n].nValue) || !MoneyRange(nValueIn))
|
if (!MoneyRange(coins->vout[prevout.n].nValue) || !MoneyRange(nValueIn))
|
||||||
return state.DoS(100, error("CheckInputs() : txin values out of range"),
|
return state.DoS(100, error("CheckInputs(): txin values out of range"),
|
||||||
REJECT_INVALID, "bad-txns-inputvalues-outofrange");
|
REJECT_INVALID, "bad-txns-inputvalues-outofrange");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nValueIn < tx.GetValueOut())
|
if (nValueIn < tx.GetValueOut())
|
||||||
return state.DoS(100, error("CheckInputs() : %s value in (%s) < value out (%s)",
|
return state.DoS(100, error("CheckInputs(): %s value in (%s) < value out (%s)",
|
||||||
tx.GetHash().ToString(), FormatMoney(nValueIn), FormatMoney(tx.GetValueOut())),
|
tx.GetHash().ToString(), FormatMoney(nValueIn), FormatMoney(tx.GetValueOut())),
|
||||||
REJECT_INVALID, "bad-txns-in-belowout");
|
REJECT_INVALID, "bad-txns-in-belowout");
|
||||||
|
|
||||||
// Tally transaction fees
|
// Tally transaction fees
|
||||||
CAmount nTxFee = nValueIn - tx.GetValueOut();
|
CAmount nTxFee = nValueIn - tx.GetValueOut();
|
||||||
if (nTxFee < 0)
|
if (nTxFee < 0)
|
||||||
return state.DoS(100, error("CheckInputs() : %s nTxFee < 0", tx.GetHash().ToString()),
|
return state.DoS(100, error("CheckInputs(): %s nTxFee < 0", tx.GetHash().ToString()),
|
||||||
REJECT_INVALID, "bad-txns-fee-negative");
|
REJECT_INVALID, "bad-txns-fee-negative");
|
||||||
nFees += nTxFee;
|
nFees += nTxFee;
|
||||||
if (!MoneyRange(nFees))
|
if (!MoneyRange(nFees))
|
||||||
return state.DoS(100, error("CheckInputs() : nFees out of range"),
|
return state.DoS(100, error("CheckInputs(): nFees out of range"),
|
||||||
REJECT_INVALID, "bad-txns-fee-outofrange");
|
REJECT_INVALID, "bad-txns-fee-outofrange");
|
||||||
|
|
||||||
// The first loop above does all the inexpensive checks.
|
// The first loop above does all the inexpensive checks.
|
||||||
|
@ -1537,7 +1537,7 @@ bool UndoWriteToDisk(const CBlockUndo& blockundo, CDiskBlockPos& pos, const uint
|
||||||
// Open history file to append
|
// Open history file to append
|
||||||
CAutoFile fileout(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION);
|
CAutoFile fileout(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION);
|
||||||
if (fileout.IsNull())
|
if (fileout.IsNull())
|
||||||
return error("%s : OpenUndoFile failed", __func__);
|
return error("%s: OpenUndoFile failed", __func__);
|
||||||
|
|
||||||
// Write index header
|
// Write index header
|
||||||
unsigned int nSize = fileout.GetSerializeSize(blockundo);
|
unsigned int nSize = fileout.GetSerializeSize(blockundo);
|
||||||
|
@ -1546,7 +1546,7 @@ bool UndoWriteToDisk(const CBlockUndo& blockundo, CDiskBlockPos& pos, const uint
|
||||||
// Write undo data
|
// Write undo data
|
||||||
long fileOutPos = ftell(fileout.Get());
|
long fileOutPos = ftell(fileout.Get());
|
||||||
if (fileOutPos < 0)
|
if (fileOutPos < 0)
|
||||||
return error("%s : ftell failed", __func__);
|
return error("%s: ftell failed", __func__);
|
||||||
pos.nPos = (unsigned int)fileOutPos;
|
pos.nPos = (unsigned int)fileOutPos;
|
||||||
fileout << blockundo;
|
fileout << blockundo;
|
||||||
|
|
||||||
|
@ -1564,7 +1564,7 @@ bool UndoReadFromDisk(CBlockUndo& blockundo, const CDiskBlockPos& pos, const uin
|
||||||
// Open history file to read
|
// Open history file to read
|
||||||
CAutoFile filein(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION);
|
CAutoFile filein(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION);
|
||||||
if (filein.IsNull())
|
if (filein.IsNull())
|
||||||
return error("%s : OpenBlockFile failed", __func__);
|
return error("%s: OpenBlockFile failed", __func__);
|
||||||
|
|
||||||
// Read block
|
// Read block
|
||||||
uint256 hashChecksum;
|
uint256 hashChecksum;
|
||||||
|
@ -1573,7 +1573,7 @@ bool UndoReadFromDisk(CBlockUndo& blockundo, const CDiskBlockPos& pos, const uin
|
||||||
filein >> hashChecksum;
|
filein >> hashChecksum;
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify checksum
|
// Verify checksum
|
||||||
|
@ -1581,7 +1581,7 @@ bool UndoReadFromDisk(CBlockUndo& blockundo, const CDiskBlockPos& pos, const uin
|
||||||
hasher << hashBlock;
|
hasher << hashBlock;
|
||||||
hasher << blockundo;
|
hasher << blockundo;
|
||||||
if (hashChecksum != hasher.GetHash())
|
if (hashChecksum != hasher.GetHash())
|
||||||
return error("%s : Checksum mismatch", __func__);
|
return error("%s: Checksum mismatch", __func__);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1600,12 +1600,12 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
|
||||||
CBlockUndo blockUndo;
|
CBlockUndo blockUndo;
|
||||||
CDiskBlockPos pos = pindex->GetUndoPos();
|
CDiskBlockPos pos = pindex->GetUndoPos();
|
||||||
if (pos.IsNull())
|
if (pos.IsNull())
|
||||||
return error("DisconnectBlock() : no undo data available");
|
return error("DisconnectBlock(): no undo data available");
|
||||||
if (!UndoReadFromDisk(blockUndo, pos, pindex->pprev->GetBlockHash()))
|
if (!UndoReadFromDisk(blockUndo, pos, pindex->pprev->GetBlockHash()))
|
||||||
return error("DisconnectBlock() : failure reading undo data");
|
return error("DisconnectBlock(): failure reading undo data");
|
||||||
|
|
||||||
if (blockUndo.vtxundo.size() + 1 != block.vtx.size())
|
if (blockUndo.vtxundo.size() + 1 != block.vtx.size())
|
||||||
return error("DisconnectBlock() : block and undo data inconsistent");
|
return error("DisconnectBlock(): block and undo data inconsistent");
|
||||||
|
|
||||||
// undo transactions in reverse order
|
// undo transactions in reverse order
|
||||||
for (int i = block.vtx.size() - 1; i >= 0; i--) {
|
for (int i = block.vtx.size() - 1; i >= 0; i--) {
|
||||||
|
@ -1628,7 +1628,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
|
||||||
if (outsBlock.nVersion < 0)
|
if (outsBlock.nVersion < 0)
|
||||||
outs->nVersion = outsBlock.nVersion;
|
outs->nVersion = outsBlock.nVersion;
|
||||||
if (*outs != outsBlock)
|
if (*outs != outsBlock)
|
||||||
fClean = fClean && error("DisconnectBlock() : added transaction mismatch? database corrupted");
|
fClean = fClean && error("DisconnectBlock(): added transaction mismatch? database corrupted");
|
||||||
|
|
||||||
// remove outputs
|
// remove outputs
|
||||||
outs->Clear();
|
outs->Clear();
|
||||||
|
@ -1638,7 +1638,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
|
||||||
if (i > 0) { // not coinbases
|
if (i > 0) { // not coinbases
|
||||||
const CTxUndo &txundo = blockUndo.vtxundo[i-1];
|
const CTxUndo &txundo = blockUndo.vtxundo[i-1];
|
||||||
if (txundo.vprevout.size() != tx.vin.size())
|
if (txundo.vprevout.size() != tx.vin.size())
|
||||||
return error("DisconnectBlock() : transaction and undo data inconsistent");
|
return error("DisconnectBlock(): transaction and undo data inconsistent");
|
||||||
for (unsigned int j = tx.vin.size(); j-- > 0;) {
|
for (unsigned int j = tx.vin.size(); j-- > 0;) {
|
||||||
const COutPoint &out = tx.vin[j].prevout;
|
const COutPoint &out = tx.vin[j].prevout;
|
||||||
const CTxInUndo &undo = txundo.vprevout[j];
|
const CTxInUndo &undo = txundo.vprevout[j];
|
||||||
|
@ -1646,17 +1646,17 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
|
||||||
if (undo.nHeight != 0) {
|
if (undo.nHeight != 0) {
|
||||||
// undo data contains height: this is the last output of the prevout tx being spent
|
// undo data contains height: this is the last output of the prevout tx being spent
|
||||||
if (!coins->IsPruned())
|
if (!coins->IsPruned())
|
||||||
fClean = fClean && error("DisconnectBlock() : undo data overwriting existing transaction");
|
fClean = fClean && error("DisconnectBlock(): undo data overwriting existing transaction");
|
||||||
coins->Clear();
|
coins->Clear();
|
||||||
coins->fCoinBase = undo.fCoinBase;
|
coins->fCoinBase = undo.fCoinBase;
|
||||||
coins->nHeight = undo.nHeight;
|
coins->nHeight = undo.nHeight;
|
||||||
coins->nVersion = undo.nVersion;
|
coins->nVersion = undo.nVersion;
|
||||||
} else {
|
} else {
|
||||||
if (coins->IsPruned())
|
if (coins->IsPruned())
|
||||||
fClean = fClean && error("DisconnectBlock() : undo data adding output to missing transaction");
|
fClean = fClean && error("DisconnectBlock(): undo data adding output to missing transaction");
|
||||||
}
|
}
|
||||||
if (coins->IsAvailable(out.n))
|
if (coins->IsAvailable(out.n))
|
||||||
fClean = fClean && error("DisconnectBlock() : undo data overwriting existing output");
|
fClean = fClean && error("DisconnectBlock(): undo data overwriting existing output");
|
||||||
if (coins->vout.size() < out.n+1)
|
if (coins->vout.size() < out.n+1)
|
||||||
coins->vout.resize(out.n+1);
|
coins->vout.resize(out.n+1);
|
||||||
coins->vout[out.n] = undo.txout;
|
coins->vout[out.n] = undo.txout;
|
||||||
|
@ -1753,7 +1753,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
BOOST_FOREACH(const CTransaction& tx, block.vtx) {
|
BOOST_FOREACH(const CTransaction& tx, block.vtx) {
|
||||||
const CCoins* coins = view.AccessCoins(tx.GetHash());
|
const CCoins* coins = view.AccessCoins(tx.GetHash());
|
||||||
if (coins && !coins->IsPruned())
|
if (coins && !coins->IsPruned())
|
||||||
return state.DoS(100, error("ConnectBlock() : tried to overwrite transaction"),
|
return state.DoS(100, error("ConnectBlock(): tried to overwrite transaction"),
|
||||||
REJECT_INVALID, "bad-txns-BIP30");
|
REJECT_INVALID, "bad-txns-BIP30");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1783,13 +1783,13 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
nInputs += tx.vin.size();
|
nInputs += tx.vin.size();
|
||||||
nSigOps += GetLegacySigOpCount(tx);
|
nSigOps += GetLegacySigOpCount(tx);
|
||||||
if (nSigOps > MAX_BLOCK_SIGOPS)
|
if (nSigOps > MAX_BLOCK_SIGOPS)
|
||||||
return state.DoS(100, error("ConnectBlock() : too many sigops"),
|
return state.DoS(100, error("ConnectBlock(): too many sigops"),
|
||||||
REJECT_INVALID, "bad-blk-sigops");
|
REJECT_INVALID, "bad-blk-sigops");
|
||||||
|
|
||||||
if (!tx.IsCoinBase())
|
if (!tx.IsCoinBase())
|
||||||
{
|
{
|
||||||
if (!view.HaveInputs(tx))
|
if (!view.HaveInputs(tx))
|
||||||
return state.DoS(100, error("ConnectBlock() : inputs missing/spent"),
|
return state.DoS(100, error("ConnectBlock(): inputs missing/spent"),
|
||||||
REJECT_INVALID, "bad-txns-inputs-missingorspent");
|
REJECT_INVALID, "bad-txns-inputs-missingorspent");
|
||||||
|
|
||||||
if (fStrictPayToScriptHash)
|
if (fStrictPayToScriptHash)
|
||||||
|
@ -1799,7 +1799,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
// an incredibly-expensive-to-validate block.
|
// an incredibly-expensive-to-validate block.
|
||||||
nSigOps += GetP2SHSigOpCount(tx, view);
|
nSigOps += GetP2SHSigOpCount(tx, view);
|
||||||
if (nSigOps > MAX_BLOCK_SIGOPS)
|
if (nSigOps > MAX_BLOCK_SIGOPS)
|
||||||
return state.DoS(100, error("ConnectBlock() : too many sigops"),
|
return state.DoS(100, error("ConnectBlock(): too many sigops"),
|
||||||
REJECT_INVALID, "bad-blk-sigops");
|
REJECT_INVALID, "bad-blk-sigops");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1825,7 +1825,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
|
|
||||||
if (block.vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees))
|
if (block.vtx[0].GetValueOut() > GetBlockValue(pindex->nHeight, nFees))
|
||||||
return state.DoS(100,
|
return state.DoS(100,
|
||||||
error("ConnectBlock() : coinbase pays too much (actual=%d vs limit=%d)",
|
error("ConnectBlock(): coinbase pays too much (actual=%d vs limit=%d)",
|
||||||
block.vtx[0].GetValueOut(), GetBlockValue(pindex->nHeight, nFees)),
|
block.vtx[0].GetValueOut(), GetBlockValue(pindex->nHeight, nFees)),
|
||||||
REJECT_INVALID, "bad-cb-amount");
|
REJECT_INVALID, "bad-cb-amount");
|
||||||
|
|
||||||
|
@ -1843,7 +1843,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||||
if (pindex->GetUndoPos().IsNull()) {
|
if (pindex->GetUndoPos().IsNull()) {
|
||||||
CDiskBlockPos pos;
|
CDiskBlockPos pos;
|
||||||
if (!FindUndoPos(state, pindex->nFile, pos, ::GetSerializeSize(blockundo, SER_DISK, CLIENT_VERSION) + 40))
|
if (!FindUndoPos(state, pindex->nFile, pos, ::GetSerializeSize(blockundo, SER_DISK, CLIENT_VERSION) + 40))
|
||||||
return error("ConnectBlock() : FindUndoPos failed");
|
return error("ConnectBlock(): FindUndoPos failed");
|
||||||
if (!UndoWriteToDisk(blockundo, pos, pindex->pprev->GetBlockHash()))
|
if (!UndoWriteToDisk(blockundo, pos, pindex->pprev->GetBlockHash()))
|
||||||
return state.Abort("Failed to write undo data");
|
return state.Abort("Failed to write undo data");
|
||||||
|
|
||||||
|
@ -1995,7 +1995,7 @@ bool static DisconnectTip(CValidationState &state) {
|
||||||
{
|
{
|
||||||
CCoinsViewCache view(pcoinsTip);
|
CCoinsViewCache view(pcoinsTip);
|
||||||
if (!DisconnectBlock(block, state, pindexDelete, view))
|
if (!DisconnectBlock(block, state, pindexDelete, view))
|
||||||
return error("DisconnectTip() : DisconnectBlock %s failed", pindexDelete->GetBlockHash().ToString());
|
return error("DisconnectTip(): DisconnectBlock %s failed", pindexDelete->GetBlockHash().ToString());
|
||||||
assert(view.Flush());
|
assert(view.Flush());
|
||||||
}
|
}
|
||||||
LogPrint("bench", "- Disconnect block: %.2fms\n", (GetTimeMicros() - nStart) * 0.001);
|
LogPrint("bench", "- Disconnect block: %.2fms\n", (GetTimeMicros() - nStart) * 0.001);
|
||||||
|
@ -2055,7 +2055,7 @@ bool static ConnectTip(CValidationState &state, CBlockIndex *pindexNew, CBlock *
|
||||||
if (!rv) {
|
if (!rv) {
|
||||||
if (state.IsInvalid())
|
if (state.IsInvalid())
|
||||||
InvalidBlockFound(pindexNew, state);
|
InvalidBlockFound(pindexNew, state);
|
||||||
return error("ConnectTip() : ConnectBlock %s failed", pindexNew->GetBlockHash().ToString());
|
return error("ConnectTip(): ConnectBlock %s failed", pindexNew->GetBlockHash().ToString());
|
||||||
}
|
}
|
||||||
mapBlockSource.erase(inv.hash);
|
mapBlockSource.erase(inv.hash);
|
||||||
nTime3 = GetTimeMicros(); nTimeConnectTotal += nTime3 - nTime2;
|
nTime3 = GetTimeMicros(); nTimeConnectTotal += nTime3 - nTime2;
|
||||||
|
@ -2492,12 +2492,12 @@ bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool f
|
||||||
{
|
{
|
||||||
// Check proof of work matches claimed amount
|
// Check proof of work matches claimed amount
|
||||||
if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits))
|
if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits))
|
||||||
return state.DoS(50, error("CheckBlockHeader() : proof of work failed"),
|
return state.DoS(50, error("CheckBlockHeader(): proof of work failed"),
|
||||||
REJECT_INVALID, "high-hash");
|
REJECT_INVALID, "high-hash");
|
||||||
|
|
||||||
// Check timestamp
|
// Check timestamp
|
||||||
if (block.GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60)
|
if (block.GetBlockTime() > GetAdjustedTime() + 2 * 60 * 60)
|
||||||
return state.Invalid(error("CheckBlockHeader() : block timestamp too far in the future"),
|
return state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"),
|
||||||
REJECT_INVALID, "time-too-new");
|
REJECT_INVALID, "time-too-new");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -2517,14 +2517,14 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo
|
||||||
bool mutated;
|
bool mutated;
|
||||||
uint256 hashMerkleRoot2 = block.BuildMerkleTree(&mutated);
|
uint256 hashMerkleRoot2 = block.BuildMerkleTree(&mutated);
|
||||||
if (block.hashMerkleRoot != hashMerkleRoot2)
|
if (block.hashMerkleRoot != hashMerkleRoot2)
|
||||||
return state.DoS(100, error("CheckBlock() : hashMerkleRoot mismatch"),
|
return state.DoS(100, error("CheckBlock(): hashMerkleRoot mismatch"),
|
||||||
REJECT_INVALID, "bad-txnmrklroot", true);
|
REJECT_INVALID, "bad-txnmrklroot", true);
|
||||||
|
|
||||||
// Check for merkle tree malleability (CVE-2012-2459): repeating sequences
|
// Check for merkle tree malleability (CVE-2012-2459): repeating sequences
|
||||||
// of transactions in a block without affecting the merkle root of a block,
|
// of transactions in a block without affecting the merkle root of a block,
|
||||||
// while still invalidating it.
|
// while still invalidating it.
|
||||||
if (mutated)
|
if (mutated)
|
||||||
return state.DoS(100, error("CheckBlock() : duplicate transaction"),
|
return state.DoS(100, error("CheckBlock(): duplicate transaction"),
|
||||||
REJECT_INVALID, "bad-txns-duplicate", true);
|
REJECT_INVALID, "bad-txns-duplicate", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2534,22 +2534,22 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo
|
||||||
|
|
||||||
// Size limits
|
// Size limits
|
||||||
if (block.vtx.empty() || block.vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE)
|
if (block.vtx.empty() || block.vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE)
|
||||||
return state.DoS(100, error("CheckBlock() : size limits failed"),
|
return state.DoS(100, error("CheckBlock(): size limits failed"),
|
||||||
REJECT_INVALID, "bad-blk-length");
|
REJECT_INVALID, "bad-blk-length");
|
||||||
|
|
||||||
// First transaction must be coinbase, the rest must not be
|
// First transaction must be coinbase, the rest must not be
|
||||||
if (block.vtx.empty() || !block.vtx[0].IsCoinBase())
|
if (block.vtx.empty() || !block.vtx[0].IsCoinBase())
|
||||||
return state.DoS(100, error("CheckBlock() : first tx is not coinbase"),
|
return state.DoS(100, error("CheckBlock(): first tx is not coinbase"),
|
||||||
REJECT_INVALID, "bad-cb-missing");
|
REJECT_INVALID, "bad-cb-missing");
|
||||||
for (unsigned int i = 1; i < block.vtx.size(); i++)
|
for (unsigned int i = 1; i < block.vtx.size(); i++)
|
||||||
if (block.vtx[i].IsCoinBase())
|
if (block.vtx[i].IsCoinBase())
|
||||||
return state.DoS(100, error("CheckBlock() : more than one coinbase"),
|
return state.DoS(100, error("CheckBlock(): more than one coinbase"),
|
||||||
REJECT_INVALID, "bad-cb-multiple");
|
REJECT_INVALID, "bad-cb-multiple");
|
||||||
|
|
||||||
// Check transactions
|
// Check transactions
|
||||||
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
||||||
if (!CheckTransaction(tx, state))
|
if (!CheckTransaction(tx, state))
|
||||||
return error("CheckBlock() : CheckTransaction failed");
|
return error("CheckBlock(): CheckTransaction failed");
|
||||||
|
|
||||||
unsigned int nSigOps = 0;
|
unsigned int nSigOps = 0;
|
||||||
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
||||||
|
@ -2557,7 +2557,7 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo
|
||||||
nSigOps += GetLegacySigOpCount(tx);
|
nSigOps += GetLegacySigOpCount(tx);
|
||||||
}
|
}
|
||||||
if (nSigOps > MAX_BLOCK_SIGOPS)
|
if (nSigOps > MAX_BLOCK_SIGOPS)
|
||||||
return state.DoS(100, error("CheckBlock() : out-of-bounds SigOpCount"),
|
return state.DoS(100, error("CheckBlock(): out-of-bounds SigOpCount"),
|
||||||
REJECT_INVALID, "bad-blk-sigops", true);
|
REJECT_INVALID, "bad-blk-sigops", true);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -2576,28 +2576,28 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||||
// Check proof of work
|
// Check proof of work
|
||||||
if ((!Params().SkipProofOfWorkCheck()) &&
|
if ((!Params().SkipProofOfWorkCheck()) &&
|
||||||
(block.nBits != GetNextWorkRequired(pindexPrev, &block)))
|
(block.nBits != GetNextWorkRequired(pindexPrev, &block)))
|
||||||
return state.DoS(100, error("%s : incorrect proof of work", __func__),
|
return state.DoS(100, error("%s: incorrect proof of work", __func__),
|
||||||
REJECT_INVALID, "bad-diffbits");
|
REJECT_INVALID, "bad-diffbits");
|
||||||
|
|
||||||
// Check timestamp against prev
|
// Check timestamp against prev
|
||||||
if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast())
|
if (block.GetBlockTime() <= pindexPrev->GetMedianTimePast())
|
||||||
return state.Invalid(error("%s : block's timestamp is too early", __func__),
|
return state.Invalid(error("%s: block's timestamp is too early", __func__),
|
||||||
REJECT_INVALID, "time-too-old");
|
REJECT_INVALID, "time-too-old");
|
||||||
|
|
||||||
// Check that the block chain matches the known block chain up to a checkpoint
|
// Check that the block chain matches the known block chain up to a checkpoint
|
||||||
if (!Checkpoints::CheckBlock(nHeight, hash))
|
if (!Checkpoints::CheckBlock(nHeight, hash))
|
||||||
return state.DoS(100, error("%s : rejected by checkpoint lock-in at %d", __func__, nHeight),
|
return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight),
|
||||||
REJECT_CHECKPOINT, "checkpoint mismatch");
|
REJECT_CHECKPOINT, "checkpoint mismatch");
|
||||||
|
|
||||||
// Don't accept any forks from the main chain prior to last checkpoint
|
// Don't accept any forks from the main chain prior to last checkpoint
|
||||||
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint();
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint();
|
||||||
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
||||||
return state.DoS(100, error("%s : forked chain older than last checkpoint (height %d)", __func__, nHeight));
|
return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, nHeight));
|
||||||
|
|
||||||
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||||
if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, Params().RejectBlockOutdatedMajority()))
|
if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, Params().RejectBlockOutdatedMajority()))
|
||||||
{
|
{
|
||||||
return state.Invalid(error("%s : rejected nVersion=1 block", __func__),
|
return state.Invalid(error("%s: rejected nVersion=1 block", __func__),
|
||||||
REJECT_OBSOLETE, "bad-version");
|
REJECT_OBSOLETE, "bad-version");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2611,7 +2611,7 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
|
||||||
// Check that all transactions are finalized
|
// Check that all transactions are finalized
|
||||||
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
BOOST_FOREACH(const CTransaction& tx, block.vtx)
|
||||||
if (!IsFinalTx(tx, nHeight, block.GetBlockTime())) {
|
if (!IsFinalTx(tx, nHeight, block.GetBlockTime())) {
|
||||||
return state.DoS(10, error("%s : contains a non-final transaction", __func__), REJECT_INVALID, "bad-txns-nonfinal");
|
return state.DoS(10, error("%s: contains a non-final transaction", __func__), REJECT_INVALID, "bad-txns-nonfinal");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
|
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
|
||||||
|
@ -2621,7 +2621,7 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
|
||||||
CScript expect = CScript() << nHeight;
|
CScript expect = CScript() << nHeight;
|
||||||
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
||||||
!std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) {
|
!std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) {
|
||||||
return state.DoS(100, error("%s : block height mismatch in coinbase", __func__), REJECT_INVALID, "bad-cb-height");
|
return state.DoS(100, error("%s: block height mismatch in coinbase", __func__), REJECT_INVALID, "bad-cb-height");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2641,7 +2641,7 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc
|
||||||
if (ppindex)
|
if (ppindex)
|
||||||
*ppindex = pindex;
|
*ppindex = pindex;
|
||||||
if (pindex->nStatus & BLOCK_FAILED_MASK)
|
if (pindex->nStatus & BLOCK_FAILED_MASK)
|
||||||
return state.Invalid(error("%s : block is marked invalid", __func__), 0, "duplicate");
|
return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2653,10 +2653,10 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc
|
||||||
if (hash != Params().HashGenesisBlock()) {
|
if (hash != Params().HashGenesisBlock()) {
|
||||||
BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
|
BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
|
||||||
if (mi == mapBlockIndex.end())
|
if (mi == mapBlockIndex.end())
|
||||||
return state.DoS(10, error("%s : prev block not found", __func__), 0, "bad-prevblk");
|
return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk");
|
||||||
pindexPrev = (*mi).second;
|
pindexPrev = (*mi).second;
|
||||||
if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
|
if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
|
||||||
return state.DoS(100, error("%s : prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
|
return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ContextualCheckBlockHeader(block, state, pindexPrev))
|
if (!ContextualCheckBlockHeader(block, state, pindexPrev))
|
||||||
|
@ -2682,7 +2682,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex,
|
||||||
|
|
||||||
if (pindex->nStatus & BLOCK_HAVE_DATA) {
|
if (pindex->nStatus & BLOCK_HAVE_DATA) {
|
||||||
// TODO: deal better with duplicate blocks.
|
// TODO: deal better with duplicate blocks.
|
||||||
// return state.DoS(20, error("AcceptBlock() : already have block %d %s", pindex->nHeight, pindex->GetBlockHash().ToString()), REJECT_DUPLICATE, "duplicate");
|
// return state.DoS(20, error("AcceptBlock(): already have block %d %s", pindex->nHeight, pindex->GetBlockHash().ToString()), REJECT_DUPLICATE, "duplicate");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2703,12 +2703,12 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex,
|
||||||
if (dbp != NULL)
|
if (dbp != NULL)
|
||||||
blockPos = *dbp;
|
blockPos = *dbp;
|
||||||
if (!FindBlockPos(state, blockPos, nBlockSize+8, nHeight, block.GetBlockTime(), dbp != NULL))
|
if (!FindBlockPos(state, blockPos, nBlockSize+8, nHeight, block.GetBlockTime(), dbp != NULL))
|
||||||
return error("AcceptBlock() : FindBlockPos failed");
|
return error("AcceptBlock(): FindBlockPos failed");
|
||||||
if (dbp == NULL)
|
if (dbp == NULL)
|
||||||
if (!WriteBlockToDisk(block, blockPos))
|
if (!WriteBlockToDisk(block, blockPos))
|
||||||
return state.Abort("Failed to write block");
|
return state.Abort("Failed to write block");
|
||||||
if (!ReceivedBlockTransactions(block, state, pindex, blockPos))
|
if (!ReceivedBlockTransactions(block, state, pindex, blockPos))
|
||||||
return error("AcceptBlock() : ReceivedBlockTransactions failed");
|
return error("AcceptBlock(): ReceivedBlockTransactions failed");
|
||||||
} catch (const std::runtime_error& e) {
|
} catch (const std::runtime_error& e) {
|
||||||
return state.Abort(std::string("System error: ") + e.what());
|
return state.Abort(std::string("System error: ") + e.what());
|
||||||
}
|
}
|
||||||
|
@ -2739,7 +2739,7 @@ bool ProcessNewBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDis
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
MarkBlockAsReceived(pblock->GetHash());
|
MarkBlockAsReceived(pblock->GetHash());
|
||||||
if (!checked) {
|
if (!checked) {
|
||||||
return error("%s : CheckBlock FAILED", __func__);
|
return error("%s: CheckBlock FAILED", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store to disk
|
// Store to disk
|
||||||
|
@ -2749,11 +2749,11 @@ bool ProcessNewBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDis
|
||||||
mapBlockSource[pindex->GetBlockHash()] = pfrom->GetId();
|
mapBlockSource[pindex->GetBlockHash()] = pfrom->GetId();
|
||||||
}
|
}
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return error("%s : AcceptBlock FAILED", __func__);
|
return error("%s: AcceptBlock FAILED", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ActivateBestChain(state, pblock))
|
if (!ActivateBestChain(state, pblock))
|
||||||
return error("%s : ActivateBestChain failed", __func__);
|
return error("%s: ActivateBestChain failed", __func__);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2859,7 +2859,7 @@ CBlockIndex * InsertBlockIndex(uint256 hash)
|
||||||
// Create new
|
// Create new
|
||||||
CBlockIndex* pindexNew = new CBlockIndex();
|
CBlockIndex* pindexNew = new CBlockIndex();
|
||||||
if (!pindexNew)
|
if (!pindexNew)
|
||||||
throw runtime_error("LoadBlockIndex() : new CBlockIndex failed");
|
throw runtime_error("LoadBlockIndex(): new CBlockIndex failed");
|
||||||
mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first;
|
mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first;
|
||||||
pindexNew->phashBlock = &((*mi).first);
|
pindexNew->phashBlock = &((*mi).first);
|
||||||
|
|
||||||
|
@ -3005,24 +3005,24 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth
|
||||||
CBlock block;
|
CBlock block;
|
||||||
// check level 0: read from disk
|
// check level 0: read from disk
|
||||||
if (!ReadBlockFromDisk(block, pindex))
|
if (!ReadBlockFromDisk(block, pindex))
|
||||||
return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
// check level 1: verify block validity
|
// check level 1: verify block validity
|
||||||
if (nCheckLevel >= 1 && !CheckBlock(block, state))
|
if (nCheckLevel >= 1 && !CheckBlock(block, state))
|
||||||
return error("VerifyDB() : *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** found bad block at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
// check level 2: verify undo validity
|
// check level 2: verify undo validity
|
||||||
if (nCheckLevel >= 2 && pindex) {
|
if (nCheckLevel >= 2 && pindex) {
|
||||||
CBlockUndo undo;
|
CBlockUndo undo;
|
||||||
CDiskBlockPos pos = pindex->GetUndoPos();
|
CDiskBlockPos pos = pindex->GetUndoPos();
|
||||||
if (!pos.IsNull()) {
|
if (!pos.IsNull()) {
|
||||||
if (!UndoReadFromDisk(undo, pos, pindex->pprev->GetBlockHash()))
|
if (!UndoReadFromDisk(undo, pos, pindex->pprev->GetBlockHash()))
|
||||||
return error("VerifyDB() : *** found bad undo data at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** found bad undo data at %d, hash=%s\n", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks
|
// check level 3: check for inconsistencies during memory-only disconnect of tip blocks
|
||||||
if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= nCoinCacheSize) {
|
if (nCheckLevel >= 3 && pindex == pindexState && (coins.GetCacheSize() + pcoinsTip->GetCacheSize()) <= nCoinCacheSize) {
|
||||||
bool fClean = true;
|
bool fClean = true;
|
||||||
if (!DisconnectBlock(block, state, pindex, coins, &fClean))
|
if (!DisconnectBlock(block, state, pindex, coins, &fClean))
|
||||||
return error("VerifyDB() : *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** irrecoverable inconsistency in block data at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
pindexState = pindex->pprev;
|
pindexState = pindex->pprev;
|
||||||
if (!fClean) {
|
if (!fClean) {
|
||||||
nGoodTransactions = 0;
|
nGoodTransactions = 0;
|
||||||
|
@ -3034,7 +3034,7 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (pindexFailure)
|
if (pindexFailure)
|
||||||
return error("VerifyDB() : *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", chainActive.Height() - pindexFailure->nHeight + 1, nGoodTransactions);
|
return error("VerifyDB(): *** coin database inconsistencies found (last %i blocks, %i good transactions before that)\n", chainActive.Height() - pindexFailure->nHeight + 1, nGoodTransactions);
|
||||||
|
|
||||||
// check level 4: try reconnecting blocks
|
// check level 4: try reconnecting blocks
|
||||||
if (nCheckLevel >= 4) {
|
if (nCheckLevel >= 4) {
|
||||||
|
@ -3045,9 +3045,9 @@ bool CVerifyDB::VerifyDB(CCoinsView *coinsview, int nCheckLevel, int nCheckDepth
|
||||||
pindex = chainActive.Next(pindex);
|
pindex = chainActive.Next(pindex);
|
||||||
CBlock block;
|
CBlock block;
|
||||||
if (!ReadBlockFromDisk(block, pindex))
|
if (!ReadBlockFromDisk(block, pindex))
|
||||||
return error("VerifyDB() : *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** ReadBlockFromDisk failed at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
if (!ConnectBlock(block, state, pindex, coins))
|
if (!ConnectBlock(block, state, pindex, coins))
|
||||||
return error("VerifyDB() : *** found unconnectable block at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
return error("VerifyDB(): *** found unconnectable block at %d, hash=%s", pindex->nHeight, pindex->GetBlockHash().ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3093,18 +3093,18 @@ bool InitBlockIndex() {
|
||||||
CDiskBlockPos blockPos;
|
CDiskBlockPos blockPos;
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
if (!FindBlockPos(state, blockPos, nBlockSize+8, 0, block.GetBlockTime()))
|
if (!FindBlockPos(state, blockPos, nBlockSize+8, 0, block.GetBlockTime()))
|
||||||
return error("LoadBlockIndex() : FindBlockPos failed");
|
return error("LoadBlockIndex(): FindBlockPos failed");
|
||||||
if (!WriteBlockToDisk(block, blockPos))
|
if (!WriteBlockToDisk(block, blockPos))
|
||||||
return error("LoadBlockIndex() : writing genesis block to disk failed");
|
return error("LoadBlockIndex(): writing genesis block to disk failed");
|
||||||
CBlockIndex *pindex = AddToBlockIndex(block);
|
CBlockIndex *pindex = AddToBlockIndex(block);
|
||||||
if (!ReceivedBlockTransactions(block, state, pindex, blockPos))
|
if (!ReceivedBlockTransactions(block, state, pindex, blockPos))
|
||||||
return error("LoadBlockIndex() : genesis block not accepted");
|
return error("LoadBlockIndex(): genesis block not accepted");
|
||||||
if (!ActivateBestChain(state, &block))
|
if (!ActivateBestChain(state, &block))
|
||||||
return error("LoadBlockIndex() : genesis block cannot be activated");
|
return error("LoadBlockIndex(): genesis block cannot be activated");
|
||||||
// Force a chainstate write so that when we VerifyDB in a moment, it doesn't check stale data
|
// Force a chainstate write so that when we VerifyDB in a moment, it doesn't check stale data
|
||||||
return FlushStateToDisk(state, FLUSH_STATE_ALWAYS);
|
return FlushStateToDisk(state, FLUSH_STATE_ALWAYS);
|
||||||
} catch (const std::runtime_error& e) {
|
} catch (const std::runtime_error& e) {
|
||||||
return error("LoadBlockIndex() : failed to initialize block database: %s", e.what());
|
return error("LoadBlockIndex(): failed to initialize block database: %s", e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3204,7 +3204,7 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
LogPrintf("%s : Deserialize or I/O error - %s", __func__, e.what());
|
LogPrintf("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (const std::runtime_error& e) {
|
} catch (const std::runtime_error& e) {
|
||||||
|
@ -3268,7 +3268,7 @@ string GetWarnings(string strFor)
|
||||||
return strStatusBar;
|
return strStatusBar;
|
||||||
else if (strFor == "rpc")
|
else if (strFor == "rpc")
|
||||||
return strRPC;
|
return strRPC;
|
||||||
assert(!"GetWarnings() : invalid parameter");
|
assert(!"GetWarnings(): invalid parameter");
|
||||||
return "error";
|
return "error";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3835,7 +3835,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
vWorkQueue.push_back(inv.hash);
|
vWorkQueue.push_back(inv.hash);
|
||||||
vEraseQueue.push_back(inv.hash);
|
vEraseQueue.push_back(inv.hash);
|
||||||
|
|
||||||
LogPrint("mempool", "AcceptToMemoryPool: peer=%d %s : accepted %s (poolsz %u)\n",
|
LogPrint("mempool", "AcceptToMemoryPool: peer=%d %s: accepted %s (poolsz %u)\n",
|
||||||
pfrom->id, pfrom->cleanSubVer,
|
pfrom->id, pfrom->cleanSubVer,
|
||||||
tx.GetHash().ToString(),
|
tx.GetHash().ToString(),
|
||||||
mempool.mapTx.size());
|
mempool.mapTx.size());
|
||||||
|
@ -4297,7 +4297,7 @@ bool ProcessMessages(CNode* pfrom)
|
||||||
memcpy(&nChecksum, &hash, sizeof(nChecksum));
|
memcpy(&nChecksum, &hash, sizeof(nChecksum));
|
||||||
if (nChecksum != hdr.nChecksum)
|
if (nChecksum != hdr.nChecksum)
|
||||||
{
|
{
|
||||||
LogPrintf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n",
|
LogPrintf("ProcessMessages(%s, %u bytes): CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n",
|
||||||
strCommand, nMessageSize, nChecksum, hdr.nChecksum);
|
strCommand, nMessageSize, nChecksum, hdr.nChecksum);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -4315,12 +4315,12 @@ bool ProcessMessages(CNode* pfrom)
|
||||||
if (strstr(e.what(), "end of data"))
|
if (strstr(e.what(), "end of data"))
|
||||||
{
|
{
|
||||||
// Allow exceptions from under-length message on vRecv
|
// Allow exceptions from under-length message on vRecv
|
||||||
LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught, normally caused by a message being shorter than its stated length\n", strCommand, nMessageSize, e.what());
|
LogPrintf("ProcessMessages(%s, %u bytes): Exception '%s' caught, normally caused by a message being shorter than its stated length\n", strCommand, nMessageSize, e.what());
|
||||||
}
|
}
|
||||||
else if (strstr(e.what(), "size too large"))
|
else if (strstr(e.what(), "size too large"))
|
||||||
{
|
{
|
||||||
// Allow exceptions from over-long size
|
// Allow exceptions from over-long size
|
||||||
LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught\n", strCommand, nMessageSize, e.what());
|
LogPrintf("ProcessMessages(%s, %u bytes): Exception '%s' caught\n", strCommand, nMessageSize, e.what());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -332,7 +332,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn)
|
||||||
|
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
if (!TestBlockValidity(state, *pblock, pindexPrev, false, false))
|
if (!TestBlockValidity(state, *pblock, pindexPrev, false, false))
|
||||||
throw std::runtime_error("CreateNewBlock() : TestBlockValidity failed");
|
throw std::runtime_error("CreateNewBlock(): TestBlockValidity failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
return pblocktemplate.release();
|
return pblocktemplate.release();
|
||||||
|
@ -415,7 +415,7 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
|
||||||
{
|
{
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
if (pblock->hashPrevBlock != chainActive.Tip()->GetBlockHash())
|
if (pblock->hashPrevBlock != chainActive.Tip()->GetBlockHash())
|
||||||
return error("BitcoinMiner : generated block is stale");
|
return error("BitcoinMiner: generated block is stale");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove key from key pool
|
// Remove key from key pool
|
||||||
|
@ -430,7 +430,7 @@ static bool ProcessBlockFound(CBlock* pblock, CWallet& wallet, CReserveKey& rese
|
||||||
// Process this block the same as if we had received it from another node
|
// Process this block the same as if we had received it from another node
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
if (!ProcessNewBlock(state, NULL, pblock))
|
if (!ProcessNewBlock(state, NULL, pblock))
|
||||||
return error("BitcoinMiner : ProcessNewBlock, block not accepted");
|
return error("BitcoinMiner: ProcessNewBlock, block not accepted");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
18
src/net.cpp
18
src/net.cpp
|
@ -1020,7 +1020,7 @@ void ThreadMapPort()
|
||||||
catch (const boost::thread_interrupted&)
|
catch (const boost::thread_interrupted&)
|
||||||
{
|
{
|
||||||
r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port.c_str(), "TCP", 0);
|
r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port.c_str(), "TCP", 0);
|
||||||
LogPrintf("UPNP_DeletePortMapping() returned : %d\n", r);
|
LogPrintf("UPNP_DeletePortMapping() returned: %d\n", r);
|
||||||
freeUPNPDevlist(devlist); devlist = 0;
|
freeUPNPDevlist(devlist); devlist = 0;
|
||||||
FreeUPNPUrls(&urls);
|
FreeUPNPUrls(&urls);
|
||||||
throw;
|
throw;
|
||||||
|
@ -1797,21 +1797,21 @@ bool CAddrDB::Write(const CAddrMan& addr)
|
||||||
FILE *file = fopen(pathTmp.string().c_str(), "wb");
|
FILE *file = fopen(pathTmp.string().c_str(), "wb");
|
||||||
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
|
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION);
|
||||||
if (fileout.IsNull())
|
if (fileout.IsNull())
|
||||||
return error("%s : Failed to open file %s", __func__, pathTmp.string());
|
return error("%s: Failed to open file %s", __func__, pathTmp.string());
|
||||||
|
|
||||||
// Write and commit header, data
|
// Write and commit header, data
|
||||||
try {
|
try {
|
||||||
fileout << ssPeers;
|
fileout << ssPeers;
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
return error("%s : Serialize or I/O error - %s", __func__, e.what());
|
return error("%s: Serialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
FileCommit(fileout.Get());
|
FileCommit(fileout.Get());
|
||||||
fileout.fclose();
|
fileout.fclose();
|
||||||
|
|
||||||
// replace existing peers.dat, if any, with new peers.dat.XXXX
|
// replace existing peers.dat, if any, with new peers.dat.XXXX
|
||||||
if (!RenameOver(pathTmp, pathAddr))
|
if (!RenameOver(pathTmp, pathAddr))
|
||||||
return error("%s : Rename-into-place failed", __func__);
|
return error("%s: Rename-into-place failed", __func__);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1822,7 +1822,7 @@ bool CAddrDB::Read(CAddrMan& addr)
|
||||||
FILE *file = fopen(pathAddr.string().c_str(), "rb");
|
FILE *file = fopen(pathAddr.string().c_str(), "rb");
|
||||||
CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
|
CAutoFile filein(file, SER_DISK, CLIENT_VERSION);
|
||||||
if (filein.IsNull())
|
if (filein.IsNull())
|
||||||
return error("%s : Failed to open file %s", __func__, pathAddr.string());
|
return error("%s: Failed to open file %s", __func__, pathAddr.string());
|
||||||
|
|
||||||
// use file size to size memory buffer
|
// use file size to size memory buffer
|
||||||
int fileSize = boost::filesystem::file_size(pathAddr);
|
int fileSize = boost::filesystem::file_size(pathAddr);
|
||||||
|
@ -1840,7 +1840,7 @@ bool CAddrDB::Read(CAddrMan& addr)
|
||||||
filein >> hashIn;
|
filein >> hashIn;
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
filein.fclose();
|
filein.fclose();
|
||||||
|
|
||||||
|
@ -1849,7 +1849,7 @@ bool CAddrDB::Read(CAddrMan& addr)
|
||||||
// verify stored checksum matches input data
|
// verify stored checksum matches input data
|
||||||
uint256 hashTmp = Hash(ssPeers.begin(), ssPeers.end());
|
uint256 hashTmp = Hash(ssPeers.begin(), ssPeers.end());
|
||||||
if (hashIn != hashTmp)
|
if (hashIn != hashTmp)
|
||||||
return error("%s : Checksum mismatch, data corrupted", __func__);
|
return error("%s: Checksum mismatch, data corrupted", __func__);
|
||||||
|
|
||||||
unsigned char pchMsgTmp[4];
|
unsigned char pchMsgTmp[4];
|
||||||
try {
|
try {
|
||||||
|
@ -1858,13 +1858,13 @@ bool CAddrDB::Read(CAddrMan& addr)
|
||||||
|
|
||||||
// ... verify the network matches ours
|
// ... verify the network matches ours
|
||||||
if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp)))
|
if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp)))
|
||||||
return error("%s : Invalid network magic number", __func__);
|
return error("%s: Invalid network magic number", __func__);
|
||||||
|
|
||||||
// de-serialize address data into one CAddrMan object
|
// de-serialize address data into one CAddrMan object
|
||||||
ssPeers >> addr;
|
ssPeers >> addr;
|
||||||
}
|
}
|
||||||
catch (const std::exception& e) {
|
catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -89,11 +89,11 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits)
|
||||||
|
|
||||||
// Check range
|
// Check range
|
||||||
if (fNegative || bnTarget == 0 || fOverflow || bnTarget > Params().ProofOfWorkLimit())
|
if (fNegative || bnTarget == 0 || fOverflow || bnTarget > Params().ProofOfWorkLimit())
|
||||||
return error("CheckProofOfWork() : nBits below minimum work");
|
return error("CheckProofOfWork(): nBits below minimum work");
|
||||||
|
|
||||||
// Check proof of work matches claimed amount
|
// Check proof of work matches claimed amount
|
||||||
if (UintToArith256(hash) > bnTarget)
|
if (UintToArith256(hash) > bnTarget)
|
||||||
return error("CheckProofOfWork() : hash doesn't match nBits");
|
return error("CheckProofOfWork(): hash doesn't match nBits");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ CAmount CTransaction::GetValueOut() const
|
||||||
{
|
{
|
||||||
nValueOut += it->nValue;
|
nValueOut += it->nValue;
|
||||||
if (!MoneyRange(it->nValue) || !MoneyRange(nValueOut))
|
if (!MoneyRange(it->nValue) || !MoneyRange(nValueOut))
|
||||||
throw std::runtime_error("CTransaction::GetValueOut() : value out of range");
|
throw std::runtime_error("CTransaction::GetValueOut(): value out of range");
|
||||||
}
|
}
|
||||||
return nValueOut;
|
return nValueOut;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ bool CMessageHeader::IsValid() const
|
||||||
// Message size
|
// Message size
|
||||||
if (nMessageSize > MAX_SIZE)
|
if (nMessageSize > MAX_SIZE)
|
||||||
{
|
{
|
||||||
LogPrintf("CMessageHeader::IsValid() : (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand(), nMessageSize);
|
LogPrintf("CMessageHeader::IsValid(): (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand(), nMessageSize);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ CInv::CInv(const std::string& strType, const uint256& hashIn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == ARRAYLEN(ppszTypeName))
|
if (i == ARRAYLEN(ppszTypeName))
|
||||||
throw std::out_of_range(strprintf("CInv::CInv(string, uint256) : unknown type '%s'", strType));
|
throw std::out_of_range(strprintf("CInv::CInv(string, uint256): unknown type '%s'", strType));
|
||||||
hash = hashIn;
|
hash = hashIn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ bool CInv::IsKnownType() const
|
||||||
const char* CInv::GetCommand() const
|
const char* CInv::GetCommand() const
|
||||||
{
|
{
|
||||||
if (!IsKnownType())
|
if (!IsKnownType())
|
||||||
throw std::out_of_range(strprintf("CInv::GetCommand() : type=%d unknown type", type));
|
throw std::out_of_range(strprintf("CInv::GetCommand(): type=%d unknown type", type));
|
||||||
return ppszTypeName[type];
|
return ppszTypeName[type];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ public:
|
||||||
case CT_NEW:
|
case CT_NEW:
|
||||||
if(inModel)
|
if(inModel)
|
||||||
{
|
{
|
||||||
qWarning() << "AddressTablePriv::updateEntry : Warning: Got CT_NEW, but entry is already in model";
|
qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_NEW, but entry is already in model";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex);
|
parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex);
|
||||||
|
@ -124,7 +124,7 @@ public:
|
||||||
case CT_UPDATED:
|
case CT_UPDATED:
|
||||||
if(!inModel)
|
if(!inModel)
|
||||||
{
|
{
|
||||||
qWarning() << "AddressTablePriv::updateEntry : Warning: Got CT_UPDATED, but entry is not in model";
|
qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_UPDATED, but entry is not in model";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
lower->type = newEntryType;
|
lower->type = newEntryType;
|
||||||
|
@ -134,7 +134,7 @@ public:
|
||||||
case CT_DELETED:
|
case CT_DELETED:
|
||||||
if(!inModel)
|
if(!inModel)
|
||||||
{
|
{
|
||||||
qWarning() << "AddressTablePriv::updateEntry : Warning: Got CT_DELETED, but entry is not in model";
|
qWarning() << "AddressTablePriv::updateEntry: Warning: Got CT_DELETED, but entry is not in model";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);
|
parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1);
|
||||||
|
|
|
@ -212,14 +212,14 @@ static void ShowProgress(ClientModel *clientmodel, const std::string &title, int
|
||||||
|
|
||||||
static void NotifyNumConnectionsChanged(ClientModel *clientmodel, int newNumConnections)
|
static void NotifyNumConnectionsChanged(ClientModel *clientmodel, int newNumConnections)
|
||||||
{
|
{
|
||||||
// Too noisy: qDebug() << "NotifyNumConnectionsChanged : " + QString::number(newNumConnections);
|
// Too noisy: qDebug() << "NotifyNumConnectionsChanged: " + QString::number(newNumConnections);
|
||||||
QMetaObject::invokeMethod(clientmodel, "updateNumConnections", Qt::QueuedConnection,
|
QMetaObject::invokeMethod(clientmodel, "updateNumConnections", Qt::QueuedConnection,
|
||||||
Q_ARG(int, newNumConnections));
|
Q_ARG(int, newNumConnections));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NotifyAlertChanged(ClientModel *clientmodel, const uint256 &hash, ChangeType status)
|
static void NotifyAlertChanged(ClientModel *clientmodel, const uint256 &hash, ChangeType status)
|
||||||
{
|
{
|
||||||
qDebug() << "NotifyAlertChanged : " + QString::fromStdString(hash.GetHex()) + " status=" + QString::number(status);
|
qDebug() << "NotifyAlertChanged: " + QString::fromStdString(hash.GetHex()) + " status=" + QString::number(status);
|
||||||
QMetaObject::invokeMethod(clientmodel, "updateAlert", Qt::QueuedConnection,
|
QMetaObject::invokeMethod(clientmodel, "updateAlert", Qt::QueuedConnection,
|
||||||
Q_ARG(QString, QString::fromStdString(hash.GetHex())),
|
Q_ARG(QString, QString::fromStdString(hash.GetHex())),
|
||||||
Q_ARG(int, status));
|
Q_ARG(int, status));
|
||||||
|
|
|
@ -32,18 +32,18 @@ bool PaymentRequestPlus::parse(const QByteArray& data)
|
||||||
{
|
{
|
||||||
bool parseOK = paymentRequest.ParseFromArray(data.data(), data.size());
|
bool parseOK = paymentRequest.ParseFromArray(data.data(), data.size());
|
||||||
if (!parseOK) {
|
if (!parseOK) {
|
||||||
qWarning() << "PaymentRequestPlus::parse : Error parsing payment request";
|
qWarning() << "PaymentRequestPlus::parse: Error parsing payment request";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (paymentRequest.payment_details_version() > 1) {
|
if (paymentRequest.payment_details_version() > 1) {
|
||||||
qWarning() << "PaymentRequestPlus::parse : Received up-version payment details, version=" << paymentRequest.payment_details_version();
|
qWarning() << "PaymentRequestPlus::parse: Received up-version payment details, version=" << paymentRequest.payment_details_version();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
parseOK = details.ParseFromString(paymentRequest.serialized_payment_details());
|
parseOK = details.ParseFromString(paymentRequest.serialized_payment_details());
|
||||||
if (!parseOK)
|
if (!parseOK)
|
||||||
{
|
{
|
||||||
qWarning() << "PaymentRequestPlus::parse : Error parsing payment details";
|
qWarning() << "PaymentRequestPlus::parse: Error parsing payment details";
|
||||||
paymentRequest.Clear();
|
paymentRequest.Clear();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -83,17 +83,17 @@ bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) c
|
||||||
digestAlgorithm = EVP_sha1();
|
digestAlgorithm = EVP_sha1();
|
||||||
}
|
}
|
||||||
else if (paymentRequest.pki_type() == "none") {
|
else if (paymentRequest.pki_type() == "none") {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: pki_type == none";
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: pki_type == none";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: unknown pki_type " << QString::fromStdString(paymentRequest.pki_type());
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: unknown pki_type " << QString::fromStdString(paymentRequest.pki_type());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
payments::X509Certificates certChain;
|
payments::X509Certificates certChain;
|
||||||
if (!certChain.ParseFromString(paymentRequest.pki_data())) {
|
if (!certChain.ParseFromString(paymentRequest.pki_data())) {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: error parsing pki_data";
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: error parsing pki_data";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,12 +103,12 @@ bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) c
|
||||||
QByteArray certData(certChain.certificate(i).data(), certChain.certificate(i).size());
|
QByteArray certData(certChain.certificate(i).data(), certChain.certificate(i).size());
|
||||||
QSslCertificate qCert(certData, QSsl::Der);
|
QSslCertificate qCert(certData, QSsl::Der);
|
||||||
if (currentTime < qCert.effectiveDate() || currentTime > qCert.expiryDate()) {
|
if (currentTime < qCert.effectiveDate() || currentTime > qCert.expiryDate()) {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: certificate expired or not yet active: " << qCert;
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: certificate expired or not yet active: " << qCert;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
if (qCert.isBlacklisted()) {
|
if (qCert.isBlacklisted()) {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: certificate blacklisted: " << qCert;
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: certificate blacklisted: " << qCert;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -118,7 +118,7 @@ bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) c
|
||||||
certs.push_back(cert);
|
certs.push_back(cert);
|
||||||
}
|
}
|
||||||
if (certs.empty()) {
|
if (certs.empty()) {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: empty certificate chain";
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: empty certificate chain";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,7 +134,7 @@ bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) c
|
||||||
// load the signing cert into it and verify.
|
// load the signing cert into it and verify.
|
||||||
X509_STORE_CTX *store_ctx = X509_STORE_CTX_new();
|
X509_STORE_CTX *store_ctx = X509_STORE_CTX_new();
|
||||||
if (!store_ctx) {
|
if (!store_ctx) {
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : Payment request: error creating X509_STORE_CTX";
|
qWarning() << "PaymentRequestPlus::getMerchant: Payment request: error creating X509_STORE_CTX";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ bool PaymentRequestPlus::getMerchant(X509_STORE* certStore, QString& merchant) c
|
||||||
}
|
}
|
||||||
catch (const SSLVerifyError& err) {
|
catch (const SSLVerifyError& err) {
|
||||||
fResult = false;
|
fResult = false;
|
||||||
qWarning() << "PaymentRequestPlus::getMerchant : SSL error: " << err.what();
|
qWarning() << "PaymentRequestPlus::getMerchant: SSL error: " << err.what();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (website)
|
if (website)
|
||||||
|
|
|
@ -97,7 +97,7 @@ static QList<QString> savedPaymentRequests;
|
||||||
|
|
||||||
static void ReportInvalidCertificate(const QSslCertificate& cert)
|
static void ReportInvalidCertificate(const QSslCertificate& cert)
|
||||||
{
|
{
|
||||||
qDebug() << "ReportInvalidCertificate : Payment server found an invalid certificate: " << cert.subjectInfo(QSslCertificate::CommonName);
|
qDebug() << "ReportInvalidCertificate: Payment server found an invalid certificate: " << cert.subjectInfo(QSslCertificate::CommonName);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -171,7 +171,7 @@ void PaymentServer::LoadRootCAs(X509_STORE* _store)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qWarning() << "PaymentServer::LoadRootCAs : Loaded " << nRootCerts << " root certificates";
|
qWarning() << "PaymentServer::LoadRootCAs: Loaded " << nRootCerts << " root certificates";
|
||||||
|
|
||||||
// Project for another day:
|
// Project for another day:
|
||||||
// Fetch certificate revocation lists, and add them to certStore.
|
// Fetch certificate revocation lists, and add them to certStore.
|
||||||
|
@ -244,7 +244,7 @@ void PaymentServer::ipcParseCommandLine(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
// Printing to debug.log is about the best we can do here, the
|
// Printing to debug.log is about the best we can do here, the
|
||||||
// GUI hasn't started yet so we can't pop up a message box.
|
// GUI hasn't started yet so we can't pop up a message box.
|
||||||
qWarning() << "PaymentServer::ipcSendCommandLine : Payment request file does not exist: " << arg;
|
qWarning() << "PaymentServer::ipcSendCommandLine: Payment request file does not exist: " << arg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -368,10 +368,10 @@ void PaymentServer::initNetManager()
|
||||||
if (optionsModel->getProxySettings(proxy)) {
|
if (optionsModel->getProxySettings(proxy)) {
|
||||||
netManager->setProxy(proxy);
|
netManager->setProxy(proxy);
|
||||||
|
|
||||||
qDebug() << "PaymentServer::initNetManager : Using SOCKS5 proxy" << proxy.hostName() << ":" << proxy.port();
|
qDebug() << "PaymentServer::initNetManager: Using SOCKS5 proxy" << proxy.hostName() << ":" << proxy.port();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
qDebug() << "PaymentServer::initNetManager : No active proxy server found.";
|
qDebug() << "PaymentServer::initNetManager: No active proxy server found.";
|
||||||
|
|
||||||
connect(netManager, SIGNAL(finished(QNetworkReply*)),
|
connect(netManager, SIGNAL(finished(QNetworkReply*)),
|
||||||
this, SLOT(netRequestFinished(QNetworkReply*)));
|
this, SLOT(netRequestFinished(QNetworkReply*)));
|
||||||
|
@ -415,12 +415,12 @@ void PaymentServer::handleURIOrFile(const QString& s)
|
||||||
|
|
||||||
if (fetchUrl.isValid())
|
if (fetchUrl.isValid())
|
||||||
{
|
{
|
||||||
qDebug() << "PaymentServer::handleURIOrFile : fetchRequest(" << fetchUrl << ")";
|
qDebug() << "PaymentServer::handleURIOrFile: fetchRequest(" << fetchUrl << ")";
|
||||||
fetchRequest(fetchUrl);
|
fetchRequest(fetchUrl);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qWarning() << "PaymentServer::handleURIOrFile : Invalid URL: " << fetchUrl;
|
qWarning() << "PaymentServer::handleURIOrFile: Invalid URL: " << fetchUrl;
|
||||||
emit message(tr("URI handling"),
|
emit message(tr("URI handling"),
|
||||||
tr("Payment request fetch URL is invalid: %1").arg(fetchUrl.toString()),
|
tr("Payment request fetch URL is invalid: %1").arg(fetchUrl.toString()),
|
||||||
CClientUIInterface::ICON_WARNING);
|
CClientUIInterface::ICON_WARNING);
|
||||||
|
@ -585,10 +585,10 @@ bool PaymentServer::processPaymentRequest(PaymentRequestPlus& request, SendCoins
|
||||||
recipient.address = addresses.join("<br />");
|
recipient.address = addresses.join("<br />");
|
||||||
|
|
||||||
if (!recipient.authenticatedMerchant.isEmpty()) {
|
if (!recipient.authenticatedMerchant.isEmpty()) {
|
||||||
qDebug() << "PaymentServer::processPaymentRequest : Secure payment request from " << recipient.authenticatedMerchant;
|
qDebug() << "PaymentServer::processPaymentRequest: Secure payment request from " << recipient.authenticatedMerchant;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qDebug() << "PaymentServer::processPaymentRequest : Insecure payment request to " << addresses.join(", ");
|
qDebug() << "PaymentServer::processPaymentRequest: Insecure payment request to " << addresses.join(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -643,7 +643,7 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
|
||||||
else {
|
else {
|
||||||
// This should never happen, because sending coins should have
|
// This should never happen, because sending coins should have
|
||||||
// just unlocked the wallet and refilled the keypool.
|
// just unlocked the wallet and refilled the keypool.
|
||||||
qWarning() << "PaymentServer::fetchPaymentACK : Error getting refund key, refund_to not set";
|
qWarning() << "PaymentServer::fetchPaymentACK: Error getting refund key, refund_to not set";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -655,7 +655,7 @@ void PaymentServer::fetchPaymentACK(CWallet* wallet, SendCoinsRecipient recipien
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// This should never happen, either.
|
// This should never happen, either.
|
||||||
qWarning() << "PaymentServer::fetchPaymentACK : Error serializing payment message";
|
qWarning() << "PaymentServer::fetchPaymentACK: Error serializing payment message";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -694,7 +694,7 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
|
||||||
SendCoinsRecipient recipient;
|
SendCoinsRecipient recipient;
|
||||||
if (!request.parse(data))
|
if (!request.parse(data))
|
||||||
{
|
{
|
||||||
qWarning() << "PaymentServer::netRequestFinished : Error parsing payment request";
|
qWarning() << "PaymentServer::netRequestFinished: Error parsing payment request";
|
||||||
emit message(tr("Payment request error"),
|
emit message(tr("Payment request error"),
|
||||||
tr("Payment request cannot be parsed!"),
|
tr("Payment request cannot be parsed!"),
|
||||||
CClientUIInterface::MSG_ERROR);
|
CClientUIInterface::MSG_ERROR);
|
||||||
|
@ -712,7 +712,7 @@ void PaymentServer::netRequestFinished(QNetworkReply* reply)
|
||||||
QString msg = tr("Bad response from server %1")
|
QString msg = tr("Bad response from server %1")
|
||||||
.arg(reply->request().url().toString());
|
.arg(reply->request().url().toString());
|
||||||
|
|
||||||
qWarning() << "PaymentServer::netRequestFinished : " << msg;
|
qWarning() << "PaymentServer::netRequestFinished: " << msg;
|
||||||
emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR);
|
emit message(tr("Payment request error"), msg, CClientUIInterface::MSG_ERROR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -728,7 +728,7 @@ void PaymentServer::reportSslErrors(QNetworkReply* reply, const QList<QSslError>
|
||||||
|
|
||||||
QString errString;
|
QString errString;
|
||||||
foreach (const QSslError& err, errs) {
|
foreach (const QSslError& err, errs) {
|
||||||
qWarning() << "PaymentServer::reportSslErrors : " << err;
|
qWarning() << "PaymentServer::reportSslErrors: " << err;
|
||||||
errString += err.errorString() + "\n";
|
errString += err.errorString() + "\n";
|
||||||
}
|
}
|
||||||
emit message(tr("Network request error"), errString, CClientUIInterface::MSG_ERROR);
|
emit message(tr("Network request error"), errString, CClientUIInterface::MSG_ERROR);
|
||||||
|
|
|
@ -94,7 +94,7 @@ public:
|
||||||
*/
|
*/
|
||||||
void updateWallet(const uint256 &hash, int status, bool showTransaction)
|
void updateWallet(const uint256 &hash, int status, bool showTransaction)
|
||||||
{
|
{
|
||||||
qDebug() << "TransactionTablePriv::updateWallet : " + QString::fromStdString(hash.ToString()) + " " + QString::number(status);
|
qDebug() << "TransactionTablePriv::updateWallet: " + QString::fromStdString(hash.ToString()) + " " + QString::number(status);
|
||||||
|
|
||||||
// Find bounds of this transaction in model
|
// Find bounds of this transaction in model
|
||||||
QList<TransactionRecord>::iterator lower = qLowerBound(
|
QList<TransactionRecord>::iterator lower = qLowerBound(
|
||||||
|
@ -122,7 +122,7 @@ public:
|
||||||
case CT_NEW:
|
case CT_NEW:
|
||||||
if(inModel)
|
if(inModel)
|
||||||
{
|
{
|
||||||
qWarning() << "TransactionTablePriv::updateWallet : Warning: Got CT_NEW, but transaction is already in model";
|
qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_NEW, but transaction is already in model";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(showTransaction)
|
if(showTransaction)
|
||||||
|
@ -132,7 +132,7 @@ public:
|
||||||
std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(hash);
|
std::map<uint256, CWalletTx>::iterator mi = wallet->mapWallet.find(hash);
|
||||||
if(mi == wallet->mapWallet.end())
|
if(mi == wallet->mapWallet.end())
|
||||||
{
|
{
|
||||||
qWarning() << "TransactionTablePriv::updateWallet : Warning: Got CT_NEW, but transaction is not in wallet";
|
qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_NEW, but transaction is not in wallet";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Added -- insert at the right position
|
// Added -- insert at the right position
|
||||||
|
@ -154,7 +154,7 @@ public:
|
||||||
case CT_DELETED:
|
case CT_DELETED:
|
||||||
if(!inModel)
|
if(!inModel)
|
||||||
{
|
{
|
||||||
qWarning() << "TransactionTablePriv::updateWallet : Warning: Got CT_DELETED, but transaction is not in model";
|
qWarning() << "TransactionTablePriv::updateWallet: Warning: Got CT_DELETED, but transaction is not in model";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Removed -- remove entire transaction from table
|
// Removed -- remove entire transaction from table
|
||||||
|
@ -664,7 +664,7 @@ public:
|
||||||
void invoke(QObject *ttm)
|
void invoke(QObject *ttm)
|
||||||
{
|
{
|
||||||
QString strHash = QString::fromStdString(hash.GetHex());
|
QString strHash = QString::fromStdString(hash.GetHex());
|
||||||
qDebug() << "NotifyTransactionChanged : " + strHash + " status= " + QString::number(status);
|
qDebug() << "NotifyTransactionChanged: " + strHash + " status= " + QString::number(status);
|
||||||
QMetaObject::invokeMethod(ttm, "updateTransaction", Qt::QueuedConnection,
|
QMetaObject::invokeMethod(ttm, "updateTransaction", Qt::QueuedConnection,
|
||||||
Q_ARG(QString, strHash),
|
Q_ARG(QString, strHash),
|
||||||
Q_ARG(int, status),
|
Q_ARG(int, status),
|
||||||
|
|
|
@ -452,7 +452,7 @@ static void NotifyAddressBookChanged(WalletModel *walletmodel, CWallet *wallet,
|
||||||
QString strLabel = QString::fromStdString(label);
|
QString strLabel = QString::fromStdString(label);
|
||||||
QString strPurpose = QString::fromStdString(purpose);
|
QString strPurpose = QString::fromStdString(purpose);
|
||||||
|
|
||||||
qDebug() << "NotifyAddressBookChanged : " + strAddress + " " + strLabel + " isMine=" + QString::number(isMine) + " purpose=" + strPurpose + " status=" + QString::number(status);
|
qDebug() << "NotifyAddressBookChanged: " + strAddress + " " + strLabel + " isMine=" + QString::number(isMine) + " purpose=" + strPurpose + " status=" + QString::number(status);
|
||||||
QMetaObject::invokeMethod(walletmodel, "updateAddressBook", Qt::QueuedConnection,
|
QMetaObject::invokeMethod(walletmodel, "updateAddressBook", Qt::QueuedConnection,
|
||||||
Q_ARG(QString, strAddress),
|
Q_ARG(QString, strAddress),
|
||||||
Q_ARG(QString, strLabel),
|
Q_ARG(QString, strLabel),
|
||||||
|
|
|
@ -319,7 +319,7 @@ void SendMoney(const CTxDestination &address, CAmount nValue, CWalletTx& wtxNew)
|
||||||
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("SendMoney(): %s", strError);
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, strError);
|
throw JSONRPCError(RPC_WALLET_ERROR, strError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -333,7 +333,7 @@ void SendMoney(const CTxDestination &address, CAmount nValue, CWalletTx& wtxNew)
|
||||||
{
|
{
|
||||||
if (nValue + nFeeRequired > pwalletMain->GetBalance())
|
if (nValue + nFeeRequired > pwalletMain->GetBalance())
|
||||||
strError = strprintf("Error: This transaction requires a transaction fee of at 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 at least %s because of its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired));
|
||||||
LogPrintf("SendMoney() : %s\n", strError);
|
LogPrintf("SendMoney(): %s\n", strError);
|
||||||
throw JSONRPCError(RPC_WALLET_ERROR, strError);
|
throw JSONRPCError(RPC_WALLET_ERROR, strError);
|
||||||
}
|
}
|
||||||
if (!pwalletMain->CommitTransaction(wtxNew, reservekey))
|
if (!pwalletMain->CommitTransaction(wtxNew, reservekey))
|
||||||
|
|
|
@ -60,7 +60,7 @@ bool CastToBool(const valtype& vch)
|
||||||
static inline void popstack(vector<valtype>& stack)
|
static inline void popstack(vector<valtype>& stack)
|
||||||
{
|
{
|
||||||
if (stack.empty())
|
if (stack.empty())
|
||||||
throw runtime_error("popstack() : stack empty");
|
throw runtime_error("popstack(): stack empty");
|
||||||
stack.pop_back();
|
stack.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -391,7 +391,7 @@ public:
|
||||||
CScript& operator<<(opcodetype opcode)
|
CScript& operator<<(opcodetype opcode)
|
||||||
{
|
{
|
||||||
if (opcode < 0 || opcode > 0xff)
|
if (opcode < 0 || opcode > 0xff)
|
||||||
throw std::runtime_error("CScript::operator<<() : invalid opcode");
|
throw std::runtime_error("CScript::operator<<(): invalid opcode");
|
||||||
insert(end(), (unsigned char)opcode);
|
insert(end(), (unsigned char)opcode);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,7 +249,7 @@ uint64_t ReadCompactSize(Stream& is)
|
||||||
throw std::ios_base::failure("non-canonical ReadCompactSize()");
|
throw std::ios_base::failure("non-canonical ReadCompactSize()");
|
||||||
}
|
}
|
||||||
if (nSizeRet > (uint64_t)MAX_SIZE)
|
if (nSizeRet > (uint64_t)MAX_SIZE)
|
||||||
throw std::ios_base::failure("ReadCompactSize() : size too large");
|
throw std::ios_base::failure("ReadCompactSize(): size too large");
|
||||||
return nSizeRet;
|
return nSizeRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ public:
|
||||||
{
|
{
|
||||||
if (nReadPosNext > vch.size())
|
if (nReadPosNext > vch.size())
|
||||||
{
|
{
|
||||||
throw std::ios_base::failure("CDataStream::read() : end of data");
|
throw std::ios_base::failure("CDataStream::read(): end of data");
|
||||||
}
|
}
|
||||||
memcpy(pch, &vch[nReadPos], nSize);
|
memcpy(pch, &vch[nReadPos], nSize);
|
||||||
nReadPos = 0;
|
nReadPos = 0;
|
||||||
|
@ -244,7 +244,7 @@ public:
|
||||||
if (nReadPosNext >= vch.size())
|
if (nReadPosNext >= vch.size())
|
||||||
{
|
{
|
||||||
if (nReadPosNext > vch.size())
|
if (nReadPosNext > vch.size())
|
||||||
throw std::ios_base::failure("CDataStream::ignore() : end of data");
|
throw std::ios_base::failure("CDataStream::ignore(): end of data");
|
||||||
nReadPos = 0;
|
nReadPos = 0;
|
||||||
vch.clear();
|
vch.clear();
|
||||||
return (*this);
|
return (*this);
|
||||||
|
@ -374,18 +374,18 @@ public:
|
||||||
CAutoFile& read(char* pch, size_t nSize)
|
CAutoFile& read(char* pch, size_t nSize)
|
||||||
{
|
{
|
||||||
if (!file)
|
if (!file)
|
||||||
throw std::ios_base::failure("CAutoFile::read : file handle is NULL");
|
throw std::ios_base::failure("CAutoFile::read: file handle is NULL");
|
||||||
if (fread(pch, 1, nSize, file) != nSize)
|
if (fread(pch, 1, nSize, file) != nSize)
|
||||||
throw std::ios_base::failure(feof(file) ? "CAutoFile::read : end of file" : "CAutoFile::read : fread failed");
|
throw std::ios_base::failure(feof(file) ? "CAutoFile::read: end of file" : "CAutoFile::read: fread failed");
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAutoFile& write(const char* pch, size_t nSize)
|
CAutoFile& write(const char* pch, size_t nSize)
|
||||||
{
|
{
|
||||||
if (!file)
|
if (!file)
|
||||||
throw std::ios_base::failure("CAutoFile::write : file handle is NULL");
|
throw std::ios_base::failure("CAutoFile::write: file handle is NULL");
|
||||||
if (fwrite(pch, 1, nSize, file) != nSize)
|
if (fwrite(pch, 1, nSize, file) != nSize)
|
||||||
throw std::ios_base::failure("CAutoFile::write : write failed");
|
throw std::ios_base::failure("CAutoFile::write: write failed");
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -401,7 +401,7 @@ public:
|
||||||
{
|
{
|
||||||
// Serialize to this stream
|
// Serialize to this stream
|
||||||
if (!file)
|
if (!file)
|
||||||
throw std::ios_base::failure("CAutoFile::operator<< : file handle is NULL");
|
throw std::ios_base::failure("CAutoFile::operator<<: file handle is NULL");
|
||||||
::Serialize(*this, obj, nType, nVersion);
|
::Serialize(*this, obj, nType, nVersion);
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
@ -411,7 +411,7 @@ public:
|
||||||
{
|
{
|
||||||
// Unserialize from this stream
|
// Unserialize from this stream
|
||||||
if (!file)
|
if (!file)
|
||||||
throw std::ios_base::failure("CAutoFile::operator>> : file handle is NULL");
|
throw std::ios_base::failure("CAutoFile::operator>>: file handle is NULL");
|
||||||
::Unserialize(*this, obj, nType, nVersion);
|
::Unserialize(*this, obj, nType, nVersion);
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
@ -452,7 +452,7 @@ protected:
|
||||||
return false;
|
return false;
|
||||||
size_t read = fread((void*)&vchBuf[pos], 1, readNow, src);
|
size_t read = fread((void*)&vchBuf[pos], 1, readNow, src);
|
||||||
if (read == 0) {
|
if (read == 0) {
|
||||||
throw std::ios_base::failure(feof(src) ? "CBufferedFile::Fill : end of file" : "CBufferedFile::Fill : fread failed");
|
throw std::ios_base::failure(feof(src) ? "CBufferedFile::Fill: end of file" : "CBufferedFile::Fill: fread failed");
|
||||||
} else {
|
} else {
|
||||||
nSrcPos += read;
|
nSrcPos += read;
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -37,14 +37,14 @@ public:
|
||||||
if (!BN_copy(this, &b))
|
if (!BN_copy(this, &b))
|
||||||
{
|
{
|
||||||
BN_clear_free(this);
|
BN_clear_free(this);
|
||||||
throw bignum_error("CBigNum::CBigNum(const CBigNum&) : BN_copy failed");
|
throw bignum_error("CBigNum::CBigNum(const CBigNum&): BN_copy failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CBigNum& operator=(const CBigNum& b)
|
CBigNum& operator=(const CBigNum& b)
|
||||||
{
|
{
|
||||||
if (!BN_copy(this, &b))
|
if (!BN_copy(this, &b))
|
||||||
throw bignum_error("CBigNum::operator= : BN_copy failed");
|
throw bignum_error("CBigNum::operator=: BN_copy failed");
|
||||||
return (*this);
|
return (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ inline const CBigNum operator+(const CBigNum& a, const CBigNum& b)
|
||||||
{
|
{
|
||||||
CBigNum r;
|
CBigNum r;
|
||||||
if (!BN_add(&r, &a, &b))
|
if (!BN_add(&r, &a, &b))
|
||||||
throw bignum_error("CBigNum::operator+ : BN_add failed");
|
throw bignum_error("CBigNum::operator+: BN_add failed");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,7 +159,7 @@ inline const CBigNum operator-(const CBigNum& a, const CBigNum& b)
|
||||||
{
|
{
|
||||||
CBigNum r;
|
CBigNum r;
|
||||||
if (!BN_sub(&r, &a, &b))
|
if (!BN_sub(&r, &a, &b))
|
||||||
throw bignum_error("CBigNum::operator- : BN_sub failed");
|
throw bignum_error("CBigNum::operator-: BN_sub failed");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, un
|
||||||
static const uint256 one(uint256S("0000000000000000000000000000000000000000000000000000000000000001"));
|
static const uint256 one(uint256S("0000000000000000000000000000000000000000000000000000000000000001"));
|
||||||
if (nIn >= txTo.vin.size())
|
if (nIn >= txTo.vin.size())
|
||||||
{
|
{
|
||||||
printf("ERROR: SignatureHash() : nIn=%d out of range\n", nIn);
|
printf("ERROR: SignatureHash(): nIn=%d out of range\n", nIn);
|
||||||
return one;
|
return one;
|
||||||
}
|
}
|
||||||
CMutableTransaction txTmp(txTo);
|
CMutableTransaction txTmp(txTo);
|
||||||
|
@ -58,7 +58,7 @@ uint256 static SignatureHashOld(CScript scriptCode, const CTransaction& txTo, un
|
||||||
unsigned int nOut = nIn;
|
unsigned int nOut = nIn;
|
||||||
if (nOut >= txTmp.vout.size())
|
if (nOut >= txTmp.vout.size())
|
||||||
{
|
{
|
||||||
printf("ERROR: SignatureHash() : nOut=%d out of range\n", nOut);
|
printf("ERROR: SignatureHash(): nOut=%d out of range\n", nOut);
|
||||||
return one;
|
return one;
|
||||||
}
|
}
|
||||||
txTmp.vout.resize(nOut+1);
|
txTmp.vout.resize(nOut+1);
|
||||||
|
|
|
@ -141,7 +141,7 @@ bool CCoinsViewDB::GetStats(CCoinsStats &stats) const {
|
||||||
}
|
}
|
||||||
pcursor->Next();
|
pcursor->Next();
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stats.nHeight = mapBlockIndex.find(GetBestBlock())->second->nHeight;
|
stats.nHeight = mapBlockIndex.find(GetBestBlock())->second->nHeight;
|
||||||
|
@ -223,14 +223,14 @@ bool CBlockTreeDB::LoadBlockIndexGuts()
|
||||||
pindexNew->nTx = diskindex.nTx;
|
pindexNew->nTx = diskindex.nTx;
|
||||||
|
|
||||||
if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits))
|
if (!CheckProofOfWork(pindexNew->GetBlockHash(), pindexNew->nBits))
|
||||||
return error("LoadBlockIndex() : CheckProofOfWork failed: %s", pindexNew->ToString());
|
return error("LoadBlockIndex(): CheckProofOfWork failed: %s", pindexNew->ToString());
|
||||||
|
|
||||||
pcursor->Next();
|
pcursor->Next();
|
||||||
} else {
|
} else {
|
||||||
break; // if shutdown requested or finished loading block index
|
break; // if shutdown requested or finished loading block index
|
||||||
}
|
}
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
return error("%s : Deserialize or I/O error - %s", __func__, e.what());
|
return error("%s: Deserialize or I/O error - %s", __func__, e.what());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -192,7 +192,7 @@ private:
|
||||||
// Neither or both fee and priority sufficient to get confirmed:
|
// Neither or both fee and priority sufficient to get confirmed:
|
||||||
// don't know why they got confirmed.
|
// don't know why they got confirmed.
|
||||||
}
|
}
|
||||||
LogPrint("estimatefee", "Seen TX confirm: %s : %s fee/%g priority, took %d blocks\n",
|
LogPrint("estimatefee", "Seen TX confirm: %s: %s fee/%g priority, took %d blocks\n",
|
||||||
assignedTo, feeRate.ToString(), dPriority, nBlocksAgo);
|
assignedTo, feeRate.ToString(), dPriority, nBlocksAgo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,7 +658,7 @@ CTxMemPool::WriteFeeEstimates(CAutoFile& fileout) const
|
||||||
minerPolicyEstimator->Write(fileout);
|
minerPolicyEstimator->Write(fileout);
|
||||||
}
|
}
|
||||||
catch (const std::exception&) {
|
catch (const std::exception&) {
|
||||||
LogPrintf("CTxMemPool::WriteFeeEstimates() : unable to write policy estimator data (non-fatal)");
|
LogPrintf("CTxMemPool::WriteFeeEstimates(): unable to write policy estimator data (non-fatal)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -671,13 +671,13 @@ CTxMemPool::ReadFeeEstimates(CAutoFile& filein)
|
||||||
int nVersionRequired, nVersionThatWrote;
|
int nVersionRequired, nVersionThatWrote;
|
||||||
filein >> nVersionRequired >> nVersionThatWrote;
|
filein >> nVersionRequired >> nVersionThatWrote;
|
||||||
if (nVersionRequired > CLIENT_VERSION)
|
if (nVersionRequired > CLIENT_VERSION)
|
||||||
return error("CTxMemPool::ReadFeeEstimates() : up-version (%d) fee estimate file", nVersionRequired);
|
return error("CTxMemPool::ReadFeeEstimates(): up-version (%d) fee estimate file", nVersionRequired);
|
||||||
|
|
||||||
LOCK(cs);
|
LOCK(cs);
|
||||||
minerPolicyEstimator->Read(filein, minRelayFee);
|
minerPolicyEstimator->Read(filein, minRelayFee);
|
||||||
}
|
}
|
||||||
catch (const std::exception&) {
|
catch (const std::exception&) {
|
||||||
LogPrintf("CTxMemPool::ReadFeeEstimates() : unable to read policy estimator data (non-fatal)");
|
LogPrintf("CTxMemPool::ReadFeeEstimates(): unable to read policy estimator data (non-fatal)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -88,7 +88,7 @@ CPubKey CWallet::GenerateNewKey()
|
||||||
nTimeFirstKey = nCreationTime;
|
nTimeFirstKey = nCreationTime;
|
||||||
|
|
||||||
if (!AddKeyPubKey(secret, pubkey))
|
if (!AddKeyPubKey(secret, pubkey))
|
||||||
throw std::runtime_error("CWallet::GenerateNewKey() : AddKey failed");
|
throw std::runtime_error("CWallet::GenerateNewKey(): AddKey failed");
|
||||||
return pubkey;
|
return pubkey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,7 +619,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFromLoadWallet, CWalletD
|
||||||
wtx.nTimeSmart = std::max(latestEntry, std::min(blocktime, latestNow));
|
wtx.nTimeSmart = std::max(latestEntry, std::min(blocktime, latestNow));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LogPrintf("AddToWallet() : found %s in block %s not in index\n",
|
LogPrintf("AddToWallet(): found %s in block %s not in index\n",
|
||||||
wtxIn.GetHash().ToString(),
|
wtxIn.GetHash().ToString(),
|
||||||
wtxIn.hashBlock.ToString());
|
wtxIn.hashBlock.ToString());
|
||||||
}
|
}
|
||||||
|
@ -1616,7 +1616,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey)
|
||||||
if (!wtxNew.AcceptToMemoryPool(false))
|
if (!wtxNew.AcceptToMemoryPool(false))
|
||||||
{
|
{
|
||||||
// This must not fail. The transaction has already been signed and recorded.
|
// This must not fail. The transaction has already been signed and recorded.
|
||||||
LogPrintf("CommitTransaction() : Error: Transaction not valid");
|
LogPrintf("CommitTransaction(): Error: Transaction not valid");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
wtxNew.RelayWalletTransaction();
|
wtxNew.RelayWalletTransaction();
|
||||||
|
@ -1809,7 +1809,7 @@ bool CWallet::TopUpKeyPool(unsigned int kpSize)
|
||||||
if (!setKeyPool.empty())
|
if (!setKeyPool.empty())
|
||||||
nEnd = *(--setKeyPool.end()) + 1;
|
nEnd = *(--setKeyPool.end()) + 1;
|
||||||
if (!walletdb.WritePool(nEnd, CKeyPool(GenerateNewKey())))
|
if (!walletdb.WritePool(nEnd, CKeyPool(GenerateNewKey())))
|
||||||
throw runtime_error("TopUpKeyPool() : writing generated key failed");
|
throw runtime_error("TopUpKeyPool(): writing generated key failed");
|
||||||
setKeyPool.insert(nEnd);
|
setKeyPool.insert(nEnd);
|
||||||
LogPrintf("keypool added key %d, size=%u\n", nEnd, setKeyPool.size());
|
LogPrintf("keypool added key %d, size=%u\n", nEnd, setKeyPool.size());
|
||||||
}
|
}
|
||||||
|
@ -1836,9 +1836,9 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool)
|
||||||
nIndex = *(setKeyPool.begin());
|
nIndex = *(setKeyPool.begin());
|
||||||
setKeyPool.erase(setKeyPool.begin());
|
setKeyPool.erase(setKeyPool.begin());
|
||||||
if (!walletdb.ReadPool(nIndex, keypool))
|
if (!walletdb.ReadPool(nIndex, keypool))
|
||||||
throw runtime_error("ReserveKeyFromKeyPool() : read failed");
|
throw runtime_error("ReserveKeyFromKeyPool(): read failed");
|
||||||
if (!HaveKey(keypool.vchPubKey.GetID()))
|
if (!HaveKey(keypool.vchPubKey.GetID()))
|
||||||
throw runtime_error("ReserveKeyFromKeyPool() : unknown key in key pool");
|
throw runtime_error("ReserveKeyFromKeyPool(): unknown key in key pool");
|
||||||
assert(keypool.vchPubKey.IsValid());
|
assert(keypool.vchPubKey.IsValid());
|
||||||
LogPrintf("keypool reserve %d\n", nIndex);
|
LogPrintf("keypool reserve %d\n", nIndex);
|
||||||
}
|
}
|
||||||
|
@ -2086,11 +2086,11 @@ void CWallet::GetAllReserveKeys(set<CKeyID>& setAddress) const
|
||||||
{
|
{
|
||||||
CKeyPool keypool;
|
CKeyPool keypool;
|
||||||
if (!walletdb.ReadPool(id, keypool))
|
if (!walletdb.ReadPool(id, keypool))
|
||||||
throw runtime_error("GetAllReserveKeyHashes() : read failed");
|
throw runtime_error("GetAllReserveKeyHashes(): read failed");
|
||||||
assert(keypool.vchPubKey.IsValid());
|
assert(keypool.vchPubKey.IsValid());
|
||||||
CKeyID keyID = keypool.vchPubKey.GetID();
|
CKeyID keyID = keypool.vchPubKey.GetID();
|
||||||
if (!HaveKey(keyID))
|
if (!HaveKey(keyID))
|
||||||
throw runtime_error("GetAllReserveKeyHashes() : unknown key in key pool");
|
throw runtime_error("GetAllReserveKeyHashes(): unknown key in key pool");
|
||||||
setAddress.insert(keyID);
|
setAddress.insert(keyID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2303,7 +2303,7 @@ int CMerkleTx::SetMerkleBranch(const CBlock& block)
|
||||||
{
|
{
|
||||||
vMerkleBranch.clear();
|
vMerkleBranch.clear();
|
||||||
nIndex = -1;
|
nIndex = -1;
|
||||||
LogPrintf("ERROR: SetMerkleBranch() : couldn't find tx in block\n");
|
LogPrintf("ERROR: SetMerkleBranch(): couldn't find tx in block\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
src/wallet.h
14
src/wallet.h
|
@ -320,14 +320,14 @@ public:
|
||||||
CAmount GetCredit(const CTxOut& txout, const isminefilter& filter) const
|
CAmount GetCredit(const CTxOut& txout, const isminefilter& filter) const
|
||||||
{
|
{
|
||||||
if (!MoneyRange(txout.nValue))
|
if (!MoneyRange(txout.nValue))
|
||||||
throw std::runtime_error("CWallet::GetCredit() : value out of range");
|
throw std::runtime_error("CWallet::GetCredit(): value out of range");
|
||||||
return ((IsMine(txout) & filter) ? txout.nValue : 0);
|
return ((IsMine(txout) & filter) ? txout.nValue : 0);
|
||||||
}
|
}
|
||||||
bool IsChange(const CTxOut& txout) const;
|
bool IsChange(const CTxOut& txout) const;
|
||||||
CAmount GetChange(const CTxOut& txout) const
|
CAmount GetChange(const CTxOut& txout) const
|
||||||
{
|
{
|
||||||
if (!MoneyRange(txout.nValue))
|
if (!MoneyRange(txout.nValue))
|
||||||
throw std::runtime_error("CWallet::GetChange() : value out of range");
|
throw std::runtime_error("CWallet::GetChange(): value out of range");
|
||||||
return (IsChange(txout) ? txout.nValue : 0);
|
return (IsChange(txout) ? txout.nValue : 0);
|
||||||
}
|
}
|
||||||
bool IsMine(const CTransaction& tx) const
|
bool IsMine(const CTransaction& tx) const
|
||||||
|
@ -349,7 +349,7 @@ public:
|
||||||
{
|
{
|
||||||
nDebit += GetDebit(txin, filter);
|
nDebit += GetDebit(txin, filter);
|
||||||
if (!MoneyRange(nDebit))
|
if (!MoneyRange(nDebit))
|
||||||
throw std::runtime_error("CWallet::GetDebit() : value out of range");
|
throw std::runtime_error("CWallet::GetDebit(): value out of range");
|
||||||
}
|
}
|
||||||
return nDebit;
|
return nDebit;
|
||||||
}
|
}
|
||||||
|
@ -360,7 +360,7 @@ public:
|
||||||
{
|
{
|
||||||
nCredit += GetCredit(txout, filter);
|
nCredit += GetCredit(txout, filter);
|
||||||
if (!MoneyRange(nCredit))
|
if (!MoneyRange(nCredit))
|
||||||
throw std::runtime_error("CWallet::GetCredit() : value out of range");
|
throw std::runtime_error("CWallet::GetCredit(): value out of range");
|
||||||
}
|
}
|
||||||
return nCredit;
|
return nCredit;
|
||||||
}
|
}
|
||||||
|
@ -371,7 +371,7 @@ public:
|
||||||
{
|
{
|
||||||
nChange += GetChange(txout);
|
nChange += GetChange(txout);
|
||||||
if (!MoneyRange(nChange))
|
if (!MoneyRange(nChange))
|
||||||
throw std::runtime_error("CWallet::GetChange() : value out of range");
|
throw std::runtime_error("CWallet::GetChange(): value out of range");
|
||||||
}
|
}
|
||||||
return nChange;
|
return nChange;
|
||||||
}
|
}
|
||||||
|
@ -804,7 +804,7 @@ public:
|
||||||
const CTxOut &txout = vout[i];
|
const CTxOut &txout = vout[i];
|
||||||
nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE);
|
nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE);
|
||||||
if (!MoneyRange(nCredit))
|
if (!MoneyRange(nCredit))
|
||||||
throw std::runtime_error("CWalletTx::GetAvailableCredit() : value out of range");
|
throw std::runtime_error("CWalletTx::GetAvailableCredit(): value out of range");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -847,7 +847,7 @@ public:
|
||||||
const CTxOut &txout = vout[i];
|
const CTxOut &txout = vout[i];
|
||||||
nCredit += pwallet->GetCredit(txout, ISMINE_WATCH_ONLY);
|
nCredit += pwallet->GetCredit(txout, ISMINE_WATCH_ONLY);
|
||||||
if (!MoneyRange(nCredit))
|
if (!MoneyRange(nCredit))
|
||||||
throw std::runtime_error("CWalletTx::GetAvailableCredit() : value out of range");
|
throw std::runtime_error("CWalletTx::GetAvailableCredit(): value out of range");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,7 +210,7 @@ void CWalletDB::ListAccountCreditDebit(const string& strAccount, list<CAccountin
|
||||||
|
|
||||||
Dbc* pcursor = GetCursor();
|
Dbc* pcursor = GetCursor();
|
||||||
if (!pcursor)
|
if (!pcursor)
|
||||||
throw runtime_error("CWalletDB::ListAccountCreditDebit() : cannot create DB cursor");
|
throw runtime_error("CWalletDB::ListAccountCreditDebit(): cannot create DB cursor");
|
||||||
unsigned int fFlags = DB_SET_RANGE;
|
unsigned int fFlags = DB_SET_RANGE;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
@ -226,7 +226,7 @@ void CWalletDB::ListAccountCreditDebit(const string& strAccount, list<CAccountin
|
||||||
else if (ret != 0)
|
else if (ret != 0)
|
||||||
{
|
{
|
||||||
pcursor->close();
|
pcursor->close();
|
||||||
throw runtime_error("CWalletDB::ListAccountCreditDebit() : error scanning DB");
|
throw runtime_error("CWalletDB::ListAccountCreditDebit(): error scanning DB");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unserialize
|
// Unserialize
|
||||||
|
|
Loading…
Reference in a new issue