本文整理汇总了C++中CBlock::GetFuelRate方法的典型用法代码示例。如果您正苦于以下问题:C++ CBlock::GetFuelRate方法的具体用法?C++ CBlock::GetFuelRate怎么用?C++ CBlock::GetFuelRate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBlock
的用法示例。
在下文中一共展示了CBlock::GetFuelRate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateNewBlock
CBlockTemplate* CreateNewBlock(CAccountViewCache &view, CTransactionDBCache &txCache, CScriptDBViewCache &scriptCache){
// // Create new block
auto_ptr<CBlockTemplate> pblocktemplate(new CBlockTemplate());
if (!pblocktemplate.get())
return NULL;
CBlock *pblock = &pblocktemplate->block; // pointer for convenience
// Create coinbase tx
CRewardTransaction rtx;
// Add our coinbase tx as first transaction
pblock->vptx.push_back(make_shared<CRewardTransaction>(rtx));
pblocktemplate->vTxFees.push_back(-1); // updated at end
pblocktemplate->vTxSigOps.push_back(-1); // updated at end
// Largest block you're willing to create:
unsigned int nBlockMaxSize = SysCfg().GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE);
// Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity:
nBlockMaxSize = max((unsigned int) 1000, min((unsigned int) (MAX_BLOCK_SIZE - 1000), nBlockMaxSize));
// How much of the block should be dedicated to high-priority transactions,
// included regardless of the fees they pay
unsigned int nBlockPrioritySize = SysCfg().GetArg("-blockprioritysize", DEFAULT_BLOCK_PRIORITY_SIZE);
nBlockPrioritySize = min(nBlockMaxSize, nBlockPrioritySize);
// Minimum block size you want to create; block will be filled with free transactions
// until there are no more or the block reaches this size:
unsigned int nBlockMinSize = SysCfg().GetArg("-blockminsize", DEFAULT_BLOCK_MIN_SIZE);
nBlockMinSize = min(nBlockMaxSize, nBlockMinSize);
// Collect memory pool transactions into the block
int64_t nFees = 0;
{
LOCK2(cs_main, mempool.cs);
CBlockIndex* pIndexPrev = chainActive.Tip();
pblock->SetFuelRate(GetElementForBurn(pIndexPrev));
// This vector will be sorted into a priority queue:
vector<TxPriority> vecPriority;
GetPriorityTx(vecPriority, pblock->GetFuelRate());
// Collect transactions into block
uint64_t nBlockSize = ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION);
uint64_t nBlockTx(0);
bool fSortedByFee(true);
uint64_t nTotalRunStep(0);
int64_t nTotalFuel(0);
TxPriorityCompare comparer(fSortedByFee);
make_heap(vecPriority.begin(), vecPriority.end(), comparer);
while (!vecPriority.empty()) {
// Take highest priority transaction off the priority queue:
double dPriority = vecPriority.front().get<0>();
double dFeePerKb = vecPriority.front().get<1>();
shared_ptr<CBaseTransaction> stx = vecPriority.front().get<2>();
CBaseTransaction *pBaseTx = stx.get();
//const CTransaction& tx = *(vecPriority.front().get<2>());
pop_heap(vecPriority.begin(), vecPriority.end(), comparer);
vecPriority.pop_back();
// Size limits
unsigned int nTxSize = ::GetSerializeSize(*pBaseTx, SER_NETWORK, PROTOCOL_VERSION);
if (nBlockSize + nTxSize >= nBlockMaxSize)
continue;
// Skip free transactions if we're past the minimum block size:
if (fSortedByFee && (dFeePerKb < CTransaction::nMinRelayTxFee) && (nBlockSize + nTxSize >= nBlockMinSize))
continue;
// Prioritize by fee once past the priority size or we run out of high-priority
// transactions:
if (!fSortedByFee && ((nBlockSize + nTxSize >= nBlockPrioritySize) || !AllowFree(dPriority))) {
fSortedByFee = true;
comparer = TxPriorityCompare(fSortedByFee);
make_heap(vecPriority.begin(), vecPriority.end(), comparer);
}
if(uint256() != std::move(txCache.IsContainTx(std::move(pBaseTx->GetHash())))) {
LogPrint("INFO","CreatePosTx duplicate tx\n");
continue;
}
CTxUndo txundo;
CValidationState state;
if(pBaseTx->IsCoinBase()){
ERRORMSG("TX type is coin base tx error......");
// assert(0); //never come here
}
if (CONTRACT_TX == pBaseTx->nTxType) {
LogPrint("vm", "tx hash=%s CreateNewBlock run contract\n", pBaseTx->GetHash().GetHex());
}
CAccountViewCache viewTemp(view, true);
CScriptDBViewCache scriptCacheTemp(scriptCache, true);
pBaseTx->nFuelRate = pblock->GetFuelRate();
if (!pBaseTx->ExecuteTx(nBlockTx + 1, viewTemp, state, txundo, pIndexPrev->nHeight + 1,
txCache, scriptCacheTemp)) {
continue;
}
// Run step limits
//.........这里部分代码省略.........