Browse Source

fix wallet code. Force daemon close and reccomend zapwallettxns for non staking chains.

z_createrawtransaction
blackjok3r 5 years ago
parent
commit
0bb8c5be22
  1. 40
      src/wallet/walletdb.cpp

40
src/wallet/walletdb.cpp

@ -30,6 +30,7 @@
#include "utiltime.h" #include "utiltime.h"
#include "wallet/wallet.h" #include "wallet/wallet.h"
#include "zcash/Proof.hpp" #include "zcash/Proof.hpp"
#include "komodo_defs.h"
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <boost/foreach.hpp> #include <boost/foreach.hpp>
@ -486,7 +487,6 @@ ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue,
auto verifier = libzcash::ProofVerifier::Strict(); auto verifier = libzcash::ProofVerifier::Strict();
if (!(CheckTransaction(0,wtx, state, verifier) && (wtx.GetHash() == hash) && state.IsValid())) if (!(CheckTransaction(0,wtx, state, verifier) && (wtx.GetHash() == hash) && state.IsValid()))
{ {
fprintf(stderr, "Removing corrupt tx from wallet.%s\n", hash.ToString().c_str());
deadTxns.push_back(hash); deadTxns.push_back(hash);
return false; return false;
} }
@ -951,23 +951,35 @@ DBErrors CWalletDB::LoadWallet(CWallet* pwallet)
result = DB_CORRUPT; result = DB_CORRUPT;
} }
if (!deadTxns.empty()) if ( !deadTxns.empty() )
{ {
int32_t reAdded = 0; if ( ASSETCHAINS_STAKED != 0 )
CWalletDB walletdb(pwallet->strWalletFile, "r+", false); {
BOOST_FOREACH (uint256& hash, deadTxns) { int32_t reAdded = 0;
if (!EraseTx(hash)) CWalletDB walletdb(pwallet->strWalletFile, "r+", false);
fprintf(stderr, "could not delete tx.%s\n",hash.ToString().c_str()); BOOST_FOREACH (uint256& hash, deadTxns)
uint256 blockhash; CTransaction tx;
if (GetTransaction(hash,tx,blockhash,true))
{ {
CWalletTx wtx(pwallet,tx); fprintf(stderr, "Removing corrupt tx from wallet.%s\n", hash.ToString().c_str());
pwallet->AddToWallet(wtx, false, &walletdb); if (!EraseTx(hash))
reAdded++; fprintf(stderr, "could not delete tx.%s\n",hash.ToString().c_str());
uint256 blockhash; CTransaction tx;
if (GetTransaction(hash,tx,blockhash,true))
{
CWalletTx wtx(pwallet,tx);
pwallet->AddToWallet(wtx, false, &walletdb);
reAdded++;
}
} }
fprintf(stderr, "Cleared %lu corrupted transactions from wallet. Readded %i known transactions.\n",(long)deadTxns.size(),reAdded);
fNoncriticalErrors = false;
deadTxns.clear();
}
else if ( (GetBoolArg("-zapwallettxes", false)) )
{
LogPrintf("Transactions are corrupted. Please restart daemon with -zapwallettxes=2\n");
fprintf(stderr,"Transactions are corrupted. Please restart daemon with -zapwallettxes=2\n");
return DB_CORRUPT;
} }
fprintf(stderr, "Cleared %lu corrupted transactions from wallet. Readded %i known transactions.\n",(long)deadTxns.size(),reAdded);
deadTxns.clear();
} }
if (fNoncriticalErrors && result == DB_LOAD_OK) if (fNoncriticalErrors && result == DB_LOAD_OK)

Loading…
Cancel
Save