diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2015-04-28 07:42:38 -0700 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2015-04-28 07:46:27 -0700 |
commit | 7bf5d5efa60c89c0e0c353dddc2a76fe4f243808 (patch) | |
tree | 3cb358f18cc7642a65472aa19455508d3fefc481 /src/pow.cpp | |
parent | 9e06be2802eb731dfa3273abdf85e3c94d7c1e59 (diff) | |
parent | f7303f97933be33e34d482cf8348d180c8da2a26 (diff) | |
download | bitcoin-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.cpp | 17 |
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(); +} |