aboutsummaryrefslogtreecommitdiff
path: root/src/pow.cpp
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2015-04-28 07:42:38 -0700
committerPieter Wuille <pieter.wuille@gmail.com>2015-04-28 07:46:27 -0700
commit7bf5d5efa60c89c0e0c353dddc2a76fe4f243808 (patch)
tree3cb358f18cc7642a65472aa19455508d3fefc481 /src/pow.cpp
parent9e06be2802eb731dfa3273abdf85e3c94d7c1e59 (diff)
parentf7303f97933be33e34d482cf8348d180c8da2a26 (diff)
downloadbitcoin-7bf5d5efa60c89c0e0c353dddc2a76fe4f243808.tar.xz
Merge pull request #5918
f7303f9 Use equivalent PoW for non-main-chain requests (Pieter Wuille)
Diffstat (limited to 'src/pow.cpp')
-rw-r--r--src/pow.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/pow.cpp b/src/pow.cpp
index fc6ed4f3d1..bb53ad204b 100644
--- a/src/pow.cpp
+++ b/src/pow.cpp
@@ -114,3 +114,20 @@ arith_uint256 GetBlockProof(const CBlockIndex& block)
// or ~bnTarget / (nTarget+1) + 1.
return (~bnTarget / (bnTarget + 1)) + 1;
}
+
+int64_t GetBlockProofEquivalentTime(const CBlockIndex& to, const CBlockIndex& from, const CBlockIndex& tip, const Consensus::Params& params)
+{
+ arith_uint256 r;
+ int sign = 1;
+ if (to.nChainWork > from.nChainWork) {
+ r = to.nChainWork - from.nChainWork;
+ } else {
+ r = from.nChainWork - to.nChainWork;
+ sign = -1;
+ }
+ r = r * arith_uint256(params.nPowTargetSpacing) / GetBlockProof(tip);
+ if (r.bits() > 63) {
+ return sign * std::numeric_limits<int64_t>::max();
+ }
+ return sign * r.GetLow64();
+}