X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fkernelrecord.cpp;h=3a0b2dbc9f4fff00b5ac22397f7321c9b6da757a;hb=63e4509c569f16145ab861717baf865fc6d05af1;hp=54f71e987867bb914f83f0ee2a9f51659cb49bd9;hpb=0adb53d61133271fad88acb23b019e98e954acc0;p=novacoin.git diff --git a/src/kernelrecord.cpp b/src/kernelrecord.cpp index 54f71e9..3a0b2db 100644 --- a/src/kernelrecord.cpp +++ b/src/kernelrecord.cpp @@ -2,7 +2,6 @@ #include "wallet.h" #include "base58.h" -#include "main.h" using namespace std; @@ -30,10 +29,10 @@ bool KernelRecord::showTransaction(const CWalletTx &wtx) vector KernelRecord::decomposeOutput(const CWallet *wallet, const CWalletTx &wtx) { vector parts; - int64 nTime = wtx.GetTxTime(); + int64_t nTime = wtx.GetTxTime(); uint256 hash = wtx.GetHash(); std::map mapValue = wtx.mapValue; - int64 nDayWeight = (min((GetAdjustedTime() - nTime), (int64)(nStakeMaxAge+nStakeMinAge)) - nStakeMinAge); // DayWeight * 86400, чтобы был + int64_t nDayWeight = (min((GetAdjustedTime() - nTime), (int64_t)(nStakeMaxAge+nStakeMinAge)) - nStakeMinAge); // DayWeight * 86400, чтобы был // правильный расчёт CoinAge if (showTransaction(wtx)) { @@ -44,7 +43,7 @@ vector KernelRecord::decomposeOutput(const CWallet *wallet, const CTxDestination address; std::string addrStr; - uint64 coinAge = max( (txOut.nValue * nDayWeight) / (COIN * 86400), (int64)0); + uint64_t coinAge = max( (txOut.nValue * nDayWeight) / (COIN * nOneDay), (int64_t)0); if (ExtractDestination(txOut.scriptPubKey, address)) { @@ -70,20 +69,41 @@ std::string KernelRecord::getTxID() return hash.ToString() + strprintf("-%03d", idx); } -int64 KernelRecord::getAge() const +int64_t KernelRecord::getAge() const { - return (GetAdjustedTime() - nTime) / 86400; + return (GetAdjustedTime() - nTime) / nOneDay; +} + +uint64_t KernelRecord::getCoinDay() const +{ + int64_t nWeight = GetAdjustedTime() - nTime - nStakeMinAge; + if( nWeight < 0) + return 0; + nWeight = min(nWeight, (int64_t)nStakeMaxAge); + uint64_t coinAge = (nValue * nWeight ) / (COIN * nOneDay); + return coinAge; +} + +int64_t KernelRecord::getPoSReward(int nBits, int minutes) +{ + int64_t PoSReward; + int64_t nWeight = GetAdjustedTime() - nTime + minutes * 60; + if( nWeight < nStakeMinAge) + return 0; + uint64_t coinAge = (nValue * nWeight ) / (COIN * nOneDay); + PoSReward = GetProofOfStakeReward(coinAge, nBits, GetAdjustedTime() + minutes * 60); + return PoSReward; } double KernelRecord::getProbToMintStake(double difficulty, int timeOffset) const { //double maxTarget = pow(static_cast(2), 224); //double target = maxTarget / difficulty; - //int dayWeight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge) / 86400; - //uint64 coinAge = max(nValue * dayWeight / COIN, (int64)0); + //int dayWeight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64_t)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge) / 86400; + //uint64_t coinAge = max(nValue * dayWeight / COIN, (int64_t)0); //return target * coinAge / pow(static_cast(2), 256); - int Weight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge); - uint64 coinAge = max(nValue * Weight / (COIN * 86400), (int64)0); + int64_t Weight = (min((GetAdjustedTime() - nTime) + timeOffset, (int64_t)(nStakeMinAge+nStakeMaxAge)) - nStakeMinAge); + uint64_t coinAge = max(nValue * Weight / (COIN * nOneDay), (int64_t)0); return coinAge / (pow(static_cast(2),32) * difficulty); } @@ -100,13 +120,13 @@ double KernelRecord::getProbToMintWithinNMinutes(double difficulty, int minutes) // Probabilities for the first d days for(i = 0; i < d; i++) { - timeOffset = i * 86400; - p = pow(1 - getProbToMintStake(difficulty, timeOffset), 86400); + timeOffset = i * nOneDay; + p = pow(1 - getProbToMintStake(difficulty, timeOffset), nOneDay); prob *= p; } // Probability for the m minutes of the last day - timeOffset = d * 86400; + timeOffset = d * nOneDay; p = pow(1 - getProbToMintStake(difficulty, timeOffset), 60 * m); prob *= p;