diff --git a/src/coins.cpp b/src/coins.cpp index 82729c952..85bf791f5 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -385,7 +385,7 @@ const CScript &CCoinsViewCache::GetSpendFor(const CTxIn& input) const uint32_t komodo_txtime(uint256 hash); -CAmount CCoinsViewCache::GetValueIn(const CTransaction& tx,uint32_t prevblocktime) const +CAmount CCoinsViewCache::GetValueIn(const CTransaction& tx,uint32_t tiptime) const { uint32_t timestamp,minutes; if ( tx.IsCoinBase() != 0 ) @@ -395,11 +395,7 @@ CAmount CCoinsViewCache::GetValueIn(const CTransaction& tx,uint32_t prevblocktim { value = GetOutputFor(tx.vin[i]).nValue; nResult += value; - if ( (timestamp= komodo_txtime(tx.vin[i].prevout.hash)) != 0 && timestamp < prevblocktime-3600*24*7 && value >= COIN ) - { - minutes = (prevblocktime - timestamp) / 60; - fprintf(stderr,"GetValueIn %lld i.%d time.%u minutes.%d\n",(long long)value,i,timestamp,minutes); - } + nResult += komodo_interest(value,komodo_txtime(tx.vin[i].prevout.hash),tiptime); } nResult += tx.GetJoinSplitValueIn(); diff --git a/src/komodo.h b/src/komodo.h index 90e2527c8..e51a69df8 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -255,7 +255,7 @@ uint32_t komodo_txtime(uint256 hash) //printf("null GetTransaction\n"); return(tx.nLockTime); } - if (!hashBlock.IsNull()) { + /*if (!hashBlock.IsNull()) { BlockMap::iterator mi = mapBlockIndex.find(hashBlock); if (mi != mapBlockIndex.end() && (*mi).second) { @@ -264,9 +264,20 @@ uint32_t komodo_txtime(uint256 hash) return(pindex->GetBlockTime()); } //printf("cant find in iterator\n"); - } + }*/ //printf("null hashBlock\n"); - return(tx.nLockTime); + return(0); +} + +int64_t komodo_interest(uint64_t nValue,uint32_t nLockTime,uint32_t tiptime) +{ + int32_t minutes; + if ( nLockTime >= LOCKTIME_THRESHOLD && tiptime != 0 && nLockTime < tiptime && nValue >= COIN ) + { + minutes = (tiptime - nLockTime) / 60; + fprintf(stderr,"komodo_interest %lld nLockTime.%u tiptime.%u minutes.%d\n",(long long)nValue,nLockTime,tiptime,minutes); + } + return(0); } void komodo_nutxoadd(int32_t addflag,int32_t height,int32_t notaryid,uint256 txhash,uint64_t voutmask,int32_t numvouts) @@ -719,4 +730,5 @@ void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex,int32_t height) } } + #endif diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 4c92979b2..803fbd9d0 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -380,6 +380,7 @@ Value gettxoutsetinfo(const Array& params, bool fHelp) return ret; } +int64_t komodo_interest(uint64_t nValue,uint32_t pastlocktime,uint32_t tiptime); Value gettxout(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 3) @@ -451,6 +452,7 @@ Value gettxout(const Array& params, bool fHelp) else ret.push_back(Pair("confirmations", pindex->nHeight - coins.nHeight + 1)); ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue))); + ret.push_back(Pair("interest", ValueFromAmount(komodo_interest(coins.vout[n].nValue,coins.nLockTime,chainActive.Tip()->nTime)))); Object o; ScriptPubKeyToJSON(coins.vout[n].scriptPubKey, o, true); ret.push_back(Pair("scriptPubKey", o)); diff --git a/src/rpcrawtransaction.cpp b/src/rpcrawtransaction.cpp index 5cca9df9d..864acef4e 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -96,6 +96,7 @@ Array TxJoinSplitToJSON(const CTransaction& tx) { return vjoinsplit; } +int64_t komodo_interest(uint64_t nValue,uint32_t pastlocktime,uint32_t tiptime); void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) { entry.push_back(Pair("txid", tx.GetHash().GetHex())); @@ -123,6 +124,7 @@ void TxToJSON(const CTransaction& tx, const uint256 hashBlock, Object& entry) const CTxOut& txout = tx.vout[i]; Object out; out.push_back(Pair("value", ValueFromAmount(txout.nValue))); + out.push_back(Pair("interest", ValueFromAmount(komodo_interest(txout.nValue,tx.nLockTime,chainActive.Tip()->nTime)))); out.push_back(Pair("n", (int64_t)i)); Object o; ScriptPubKeyToJSON(txout.scriptPubKey, o, true); diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index c2b0a7017..e9df46152 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -522,7 +522,7 @@ BOOST_AUTO_TEST_CASE(test_Get) t1.vout[0].scriptPubKey << OP_1; BOOST_CHECK(AreInputsStandard(t1, coins)); - BOOST_CHECK_EQUAL(coins.GetValueIn(t1), (50+21+22)*CENT); + BOOST_CHECK_EQUAL(coins.GetValueIn(t1,0), (50+21+22)*CENT); // Adding extra junk to the scriptSig should make it non-standard: t1.vin[0].scriptSig << OP_11; diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 4d6608570..5a30e76ce 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -2259,6 +2259,7 @@ Value resendwallettransactions(const Array& params, bool fHelp) return result; } +int64_t komodo_interest(uint64_t nValue,uint32_t pastlocktime,uint32_t tiptime); Value listunspent(const Array& params, bool fHelp) { if (!EnsureWalletIsAvailable(fHelp)) @@ -2363,6 +2364,7 @@ Value listunspent(const Array& params, bool fHelp) } } entry.push_back(Pair("amount",ValueFromAmount(nValue))); + entry.push_back(Pair("interest",ValueFromAmount(komodo_interest(nValue,out.tx->nLockTime,activeChain.Tip()->nTime)))); entry.push_back(Pair("confirmations",out.nDepth)); entry.push_back(Pair("spendable", out.fSpendable)); results.push_back(entry);