/* * Decompose CWallet transaction to model kernel records. */ vector<KernelRecord> KernelRecord::decomposeOutput(const CWallet *wallet, const CWalletTx &wtx) { vector<KernelRecord> parts; ::int64_t nTime = wtx.GetTxTime(); uint256 hash = wtx.GetHash(); std::map<std::string, std::string> mapValue = wtx.mapValue; ::int64_t nDayWeight = (min((GetAdjustedTime() - nTime), (::int64_t)(nStakeMaxAge+nStakeMinAge)) - nStakeMinAge); // DayWeight * 86400, чтобы был // правильный расчёт CoinAge if (showTransaction(wtx)) { for (unsigned int nOut = 0; nOut < wtx.vout.size(); nOut++) { CTxOut txOut = wtx.vout[nOut]; if( wallet->IsMine(txOut) ) { CTxDestination address; std::string addrStr; ::uint64_t coinAge = max( (txOut.nValue * nDayWeight) / (COIN * 86400), (::int64_t)0); if (ExtractDestination(txOut.scriptPubKey, address)) { // Sent to Bitcoin Address addrStr = CBitcoinAddress(address).ToString(); } else { // Sent to IP, or other non-address transaction like OP_EVAL addrStr = mapValue["to"]; } parts.push_back(KernelRecord(hash, nTime, addrStr, txOut.nValue, wtx.IsSpent(nOut), coinAge)); } } } return parts; }