Changeset View
Changeset View
Standalone View
Standalone View
src/rpc/mining.cpp
Show First 20 Lines • Show All 609 Lines • ▼ Show 20 Lines | static UniValue getblocktemplate(const Config &config, | ||||
// Update nTime | // Update nTime | ||||
UpdateTime(pblock, config, pindexPrev); | UpdateTime(pblock, config, pindexPrev); | ||||
pblock->nNonce = 0; | pblock->nNonce = 0; | ||||
UniValue aCaps(UniValue::VARR); | UniValue aCaps(UniValue::VARR); | ||||
aCaps.push_back("proposal"); | aCaps.push_back("proposal"); | ||||
UniValue transactions(UniValue::VARR); | UniValue transactions(UniValue::VARR); | ||||
std::map<uint256, int64_t> setTxIndex; | int index_in_template = 0; | ||||
int i = 0; | |||||
for (const auto &it : pblock->vtx) { | for (const auto &it : pblock->vtx) { | ||||
const CTransaction &tx = *it; | const CTransaction &tx = *it; | ||||
uint256 txId = tx.GetId(); | uint256 txId = tx.GetId(); | ||||
setTxIndex[txId] = i++; | |||||
if (tx.IsCoinBase()) { | if (tx.IsCoinBase()) { | ||||
continue; | continue; | ||||
} | } | ||||
UniValue entry(UniValue::VOBJ); | UniValue entry(UniValue::VOBJ); | ||||
entry.pushKV("data", EncodeHexTx(tx)); | entry.pushKV("data", EncodeHexTx(tx)); | ||||
entry.pushKV("txid", txId.GetHex()); | entry.pushKV("txid", txId.GetHex()); | ||||
entry.pushKV("hash", tx.GetHash().GetHex()); | entry.pushKV("hash", tx.GetHash().GetHex()); | ||||
UniValue deps(UniValue::VARR); | |||||
for (const CTxIn &in : tx.vin) { | |||||
if (setTxIndex.count(in.prevout.GetTxId())) { | |||||
deps.push_back(setTxIndex[in.prevout.GetTxId()]); | |||||
} | |||||
} | |||||
entry.pushKV("depends", deps); | |||||
int index_in_template = i - 1; | |||||
entry.pushKV("fee", | entry.pushKV("fee", | ||||
pblocktemplate->entries[index_in_template].fees / SATOSHI); | pblocktemplate->entries[index_in_template].fees / SATOSHI); | ||||
int64_t nTxSigOps = | int64_t nTxSigOps = | ||||
pblocktemplate->entries[index_in_template].sigOpCount; | pblocktemplate->entries[index_in_template].sigOpCount; | ||||
entry.pushKV("sigops", nTxSigOps); | entry.pushKV("sigops", nTxSigOps); | ||||
transactions.push_back(entry); | transactions.push_back(entry); | ||||
index_in_template++; | |||||
} | } | ||||
UniValue aux(UniValue::VOBJ); | UniValue aux(UniValue::VOBJ); | ||||
aux.pushKV("flags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end())); | aux.pushKV("flags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end())); | ||||
arith_uint256 hashTarget = arith_uint256().SetCompact(pblock->nBits); | arith_uint256 hashTarget = arith_uint256().SetCompact(pblock->nBits); | ||||
UniValue aMutable(UniValue::VARR); | UniValue aMutable(UniValue::VARR); | ||||
▲ Show 20 Lines • Show All 171 Lines • Show Last 20 Lines |