diff options
author | Alex Morcos <morcos@chaincode.com> | 2017-02-15 15:48:48 -0500 |
---|---|---|
committer | Alex Morcos <morcos@chaincode.com> | 2017-04-10 13:56:50 -0400 |
commit | 5ba81e54e0390ec0be7dbc8ebea0c35933442a8a (patch) | |
tree | 614058d4426ef86d836b017db769327402706ea0 /src/policy | |
parent | 14e10aa842b8583f9648accd5d151dbdf342b9dc (diff) | |
download | bitcoin-5ba81e54e0390ec0be7dbc8ebea0c35933442a8a.tar.xz |
Read and Write fee estimate file directly from CBlockPolicyEstimator
Diffstat (limited to 'src/policy')
-rw-r--r-- | src/policy/fees.cpp | 44 | ||||
-rw-r--r-- | src/policy/fees.h | 6 |
2 files changed, 35 insertions, 15 deletions
diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp index 66da753a8b..eed71089e4 100644 --- a/src/policy/fees.cpp +++ b/src/policy/fees.cpp @@ -7,6 +7,7 @@ #include "policy/policy.h" #include "amount.h" +#include "clientversion.h" #include "primitives/transaction.h" #include "random.h" #include "streams.h" @@ -173,7 +174,7 @@ double TxConfirmStats::EstimateMedianVal(int confTarget, double sufficientTxVal, return median; } -void TxConfirmStats::Write(CAutoFile& fileout) +void TxConfirmStats::Write(CAutoFile& fileout) const { fileout << decay; fileout << buckets; @@ -464,21 +465,40 @@ CFeeRate CBlockPolicyEstimator::estimateSmartFee(int confTarget, int *answerFoun return CFeeRate(median); } -void CBlockPolicyEstimator::Write(CAutoFile& fileout) +bool CBlockPolicyEstimator::Write(CAutoFile& fileout) const { - LOCK(cs_feeEstimator); - fileout << nBestSeenHeight; - feeStats.Write(fileout); + try { + LOCK(cs_feeEstimator); + fileout << 139900; // version required to read: 0.13.99 or later + fileout << CLIENT_VERSION; // version that wrote the file + fileout << nBestSeenHeight; + feeStats.Write(fileout); + } + catch (const std::exception&) { + LogPrintf("CBlockPolicyEstimator::Write(): unable to read policy estimator data (non-fatal)\n"); + return false; + } + return true; } -void CBlockPolicyEstimator::Read(CAutoFile& filein, int nFileVersion) +bool CBlockPolicyEstimator::Read(CAutoFile& filein) { - LOCK(cs_feeEstimator); - int nFileBestSeenHeight; - filein >> nFileBestSeenHeight; - feeStats.Read(filein); - nBestSeenHeight = nFileBestSeenHeight; - // if nVersionThatWrote < 139900 then another TxConfirmStats (for priority) follows but can be ignored. + try { + LOCK(cs_feeEstimator); + int nVersionRequired, nVersionThatWrote, nFileBestSeenHeight; + filein >> nVersionRequired >> nVersionThatWrote; + if (nVersionRequired > CLIENT_VERSION) + return error("CBlockPolicyEstimator::Read(): up-version (%d) fee estimate file", nVersionRequired); + filein >> nFileBestSeenHeight; + feeStats.Read(filein); + nBestSeenHeight = nFileBestSeenHeight; + // if nVersionThatWrote < 139900 then another TxConfirmStats (for priority) follows but can be ignored. + } + catch (const std::exception&) { + LogPrintf("CBlockPolicyEstimator::Read(): unable to read policy estimator data (non-fatal)\n"); + return false; + } + return true; } FeeFilterRounder::FeeFilterRounder(const CFeeRate& minIncrementalFee) diff --git a/src/policy/fees.h b/src/policy/fees.h index 2299144b94..d11de81ee3 100644 --- a/src/policy/fees.h +++ b/src/policy/fees.h @@ -156,7 +156,7 @@ public: unsigned int GetMaxConfirms() const { return confAvg.size(); } /** Write state of estimation data to a file*/ - void Write(CAutoFile& fileout); + void Write(CAutoFile& fileout) const; /** * Read saved state of estimation data from a file and replace all internal data structures and @@ -226,10 +226,10 @@ public: CFeeRate estimateSmartFee(int confTarget, int *answerFoundAtTarget, const CTxMemPool& pool) const; /** Write estimation data to a file */ - void Write(CAutoFile& fileout); + bool Write(CAutoFile& fileout) const; /** Read estimation data from a file */ - void Read(CAutoFile& filein, int nFileVersion); + bool Read(CAutoFile& filein); private: CFeeRate minTrackedFee; //!< Passed to constructor to avoid dependency on main |