mirror of
https://github.com/twisterarmy/twister-core.git
synced 2025-01-11 07:17:53 +00:00
RPC, cosmetic: de-indent getblocktemplate()
This commit is contained in:
parent
79f2525ab6
commit
ddd1ffb4f1
@ -1959,123 +1959,121 @@ Value getblocktemplate(const Array& params, bool fHelp)
|
|||||||
if (strMode != "template")
|
if (strMode != "template")
|
||||||
throw JSONRPCError(-8, "Invalid mode");
|
throw JSONRPCError(-8, "Invalid mode");
|
||||||
|
|
||||||
|
if (vNodes.empty())
|
||||||
|
throw JSONRPCError(-9, "Bitcoin is not connected!");
|
||||||
|
|
||||||
|
if (IsInitialBlockDownload())
|
||||||
|
throw JSONRPCError(-10, "Bitcoin is downloading blocks...");
|
||||||
|
|
||||||
|
static CReserveKey reservekey(pwalletMain);
|
||||||
|
|
||||||
|
// Update block
|
||||||
|
static unsigned int nTransactionsUpdatedLast;
|
||||||
|
static CBlockIndex* pindexPrev;
|
||||||
|
static int64 nStart;
|
||||||
|
static CBlock* pblock;
|
||||||
|
if (pindexPrev != pindexBest ||
|
||||||
|
(nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5))
|
||||||
{
|
{
|
||||||
if (vNodes.empty())
|
// Clear pindexPrev so future calls make a new block, despite any failures from here on
|
||||||
throw JSONRPCError(-9, "Bitcoin is not connected!");
|
pindexPrev = NULL;
|
||||||
|
|
||||||
if (IsInitialBlockDownload())
|
// Store the pindexBest used before CreateNewBlock, to avoid races
|
||||||
throw JSONRPCError(-10, "Bitcoin is downloading blocks...");
|
nTransactionsUpdatedLast = nTransactionsUpdated;
|
||||||
|
CBlockIndex* pindexPrevNew = pindexBest;
|
||||||
|
nStart = GetTime();
|
||||||
|
|
||||||
static CReserveKey reservekey(pwalletMain);
|
// Create new block
|
||||||
|
if(pblock)
|
||||||
// Update block
|
|
||||||
static unsigned int nTransactionsUpdatedLast;
|
|
||||||
static CBlockIndex* pindexPrev;
|
|
||||||
static int64 nStart;
|
|
||||||
static CBlock* pblock;
|
|
||||||
if (pindexPrev != pindexBest ||
|
|
||||||
(nTransactionsUpdated != nTransactionsUpdatedLast && GetTime() - nStart > 5))
|
|
||||||
{
|
{
|
||||||
// Clear pindexPrev so future calls make a new block, despite any failures from here on
|
delete pblock;
|
||||||
pindexPrev = NULL;
|
pblock = NULL;
|
||||||
|
|
||||||
// Store the pindexBest used before CreateNewBlock, to avoid races
|
|
||||||
nTransactionsUpdatedLast = nTransactionsUpdated;
|
|
||||||
CBlockIndex* pindexPrevNew = pindexBest;
|
|
||||||
nStart = GetTime();
|
|
||||||
|
|
||||||
// Create new block
|
|
||||||
if(pblock)
|
|
||||||
{
|
|
||||||
delete pblock;
|
|
||||||
pblock = NULL;
|
|
||||||
}
|
|
||||||
pblock = CreateNewBlock(reservekey);
|
|
||||||
if (!pblock)
|
|
||||||
throw JSONRPCError(-7, "Out of memory");
|
|
||||||
|
|
||||||
// Need to update only after we know CreateNewBlock succeeded
|
|
||||||
pindexPrev = pindexPrevNew;
|
|
||||||
}
|
}
|
||||||
|
pblock = CreateNewBlock(reservekey);
|
||||||
|
if (!pblock)
|
||||||
|
throw JSONRPCError(-7, "Out of memory");
|
||||||
|
|
||||||
// Update nTime
|
// Need to update only after we know CreateNewBlock succeeded
|
||||||
pblock->UpdateTime(pindexPrev);
|
pindexPrev = pindexPrevNew;
|
||||||
pblock->nNonce = 0;
|
|
||||||
|
|
||||||
Array transactions;
|
|
||||||
map<uint256, int64_t> setTxIndex;
|
|
||||||
int i = 0;
|
|
||||||
CTxDB txdb("r");
|
|
||||||
BOOST_FOREACH (CTransaction& tx, pblock->vtx)
|
|
||||||
{
|
|
||||||
uint256 txHash = tx.GetHash();
|
|
||||||
setTxIndex[txHash] = i++;
|
|
||||||
|
|
||||||
if (tx.IsCoinBase())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
Object entry;
|
|
||||||
|
|
||||||
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
|
||||||
ssTx << tx;
|
|
||||||
entry.push_back(Pair("data", HexStr(ssTx.begin(), ssTx.end())));
|
|
||||||
|
|
||||||
entry.push_back(Pair("hash", txHash.GetHex()));
|
|
||||||
|
|
||||||
MapPrevTx mapInputs;
|
|
||||||
map<uint256, CTxIndex> mapUnused;
|
|
||||||
bool fInvalid = false;
|
|
||||||
if (tx.FetchInputs(txdb, mapUnused, false, false, mapInputs, fInvalid))
|
|
||||||
{
|
|
||||||
entry.push_back(Pair("fee", (int64_t)(tx.GetValueIn(mapInputs) - tx.GetValueOut())));
|
|
||||||
|
|
||||||
Array deps;
|
|
||||||
BOOST_FOREACH (MapPrevTx::value_type& inp, mapInputs)
|
|
||||||
{
|
|
||||||
if (setTxIndex.count(inp.first))
|
|
||||||
deps.push_back(setTxIndex[inp.first]);
|
|
||||||
}
|
|
||||||
entry.push_back(Pair("depends", deps));
|
|
||||||
|
|
||||||
int64_t nSigOps = tx.GetLegacySigOpCount();
|
|
||||||
nSigOps += tx.GetP2SHSigOpCount(mapInputs);
|
|
||||||
entry.push_back(Pair("sigops", nSigOps));
|
|
||||||
}
|
|
||||||
|
|
||||||
transactions.push_back(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
Object aux;
|
|
||||||
aux.push_back(Pair("flags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end())));
|
|
||||||
|
|
||||||
uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256();
|
|
||||||
|
|
||||||
static Array aMutable;
|
|
||||||
if (aMutable.empty())
|
|
||||||
{
|
|
||||||
aMutable.push_back("time");
|
|
||||||
aMutable.push_back("transactions");
|
|
||||||
aMutable.push_back("prevblock");
|
|
||||||
}
|
|
||||||
|
|
||||||
Object result;
|
|
||||||
result.push_back(Pair("version", pblock->nVersion));
|
|
||||||
result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex()));
|
|
||||||
result.push_back(Pair("transactions", transactions));
|
|
||||||
result.push_back(Pair("coinbaseaux", aux));
|
|
||||||
result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue));
|
|
||||||
result.push_back(Pair("target", hashTarget.GetHex()));
|
|
||||||
result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1));
|
|
||||||
result.push_back(Pair("mutable", aMutable));
|
|
||||||
result.push_back(Pair("noncerange", "00000000ffffffff"));
|
|
||||||
result.push_back(Pair("sigoplimit", (int64_t)MAX_BLOCK_SIGOPS));
|
|
||||||
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SIZE));
|
|
||||||
result.push_back(Pair("curtime", (int64_t)pblock->nTime));
|
|
||||||
result.push_back(Pair("bits", HexBits(pblock->nBits)));
|
|
||||||
result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1)));
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update nTime
|
||||||
|
pblock->UpdateTime(pindexPrev);
|
||||||
|
pblock->nNonce = 0;
|
||||||
|
|
||||||
|
Array transactions;
|
||||||
|
map<uint256, int64_t> setTxIndex;
|
||||||
|
int i = 0;
|
||||||
|
CTxDB txdb("r");
|
||||||
|
BOOST_FOREACH (CTransaction& tx, pblock->vtx)
|
||||||
|
{
|
||||||
|
uint256 txHash = tx.GetHash();
|
||||||
|
setTxIndex[txHash] = i++;
|
||||||
|
|
||||||
|
if (tx.IsCoinBase())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Object entry;
|
||||||
|
|
||||||
|
CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
ssTx << tx;
|
||||||
|
entry.push_back(Pair("data", HexStr(ssTx.begin(), ssTx.end())));
|
||||||
|
|
||||||
|
entry.push_back(Pair("hash", txHash.GetHex()));
|
||||||
|
|
||||||
|
MapPrevTx mapInputs;
|
||||||
|
map<uint256, CTxIndex> mapUnused;
|
||||||
|
bool fInvalid = false;
|
||||||
|
if (tx.FetchInputs(txdb, mapUnused, false, false, mapInputs, fInvalid))
|
||||||
|
{
|
||||||
|
entry.push_back(Pair("fee", (int64_t)(tx.GetValueIn(mapInputs) - tx.GetValueOut())));
|
||||||
|
|
||||||
|
Array deps;
|
||||||
|
BOOST_FOREACH (MapPrevTx::value_type& inp, mapInputs)
|
||||||
|
{
|
||||||
|
if (setTxIndex.count(inp.first))
|
||||||
|
deps.push_back(setTxIndex[inp.first]);
|
||||||
|
}
|
||||||
|
entry.push_back(Pair("depends", deps));
|
||||||
|
|
||||||
|
int64_t nSigOps = tx.GetLegacySigOpCount();
|
||||||
|
nSigOps += tx.GetP2SHSigOpCount(mapInputs);
|
||||||
|
entry.push_back(Pair("sigops", nSigOps));
|
||||||
|
}
|
||||||
|
|
||||||
|
transactions.push_back(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object aux;
|
||||||
|
aux.push_back(Pair("flags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end())));
|
||||||
|
|
||||||
|
uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256();
|
||||||
|
|
||||||
|
static Array aMutable;
|
||||||
|
if (aMutable.empty())
|
||||||
|
{
|
||||||
|
aMutable.push_back("time");
|
||||||
|
aMutable.push_back("transactions");
|
||||||
|
aMutable.push_back("prevblock");
|
||||||
|
}
|
||||||
|
|
||||||
|
Object result;
|
||||||
|
result.push_back(Pair("version", pblock->nVersion));
|
||||||
|
result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex()));
|
||||||
|
result.push_back(Pair("transactions", transactions));
|
||||||
|
result.push_back(Pair("coinbaseaux", aux));
|
||||||
|
result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue));
|
||||||
|
result.push_back(Pair("target", hashTarget.GetHex()));
|
||||||
|
result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1));
|
||||||
|
result.push_back(Pair("mutable", aMutable));
|
||||||
|
result.push_back(Pair("noncerange", "00000000ffffffff"));
|
||||||
|
result.push_back(Pair("sigoplimit", (int64_t)MAX_BLOCK_SIGOPS));
|
||||||
|
result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SIZE));
|
||||||
|
result.push_back(Pair("curtime", (int64_t)pblock->nTime));
|
||||||
|
result.push_back(Pair("bits", HexBits(pblock->nBits)));
|
||||||
|
result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1)));
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
Value submitblock(const Array& params, bool fHelp)
|
Value submitblock(const Array& params, bool fHelp)
|
||||||
|
Loading…
Reference in New Issue
Block a user