Bitcoin ABC 0.31.1
P2P Digital Currency
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | Private Types | Private Attributes | List of all members
avalanche::StakeContenderCache Class Reference

Cache to track stake contenders for recent blocks. More...

#include <stakecontendercache.h>

Public Member Functions

 StakeContenderCache ()
 
void cleanup (const int requestedMinHeight)
 
bool isEmpty () const
 For tests. More...
 
bool add (const CBlockIndex *pindex, const ProofRef &proof, uint8_t status=StakeContenderStatus::UNKNOWN)
 Add a proof to consider in staking rewards pre-consensus. More...
 
void promoteToBlock (const CBlockIndex *activeTip, std::function< bool(const ProofId &proofid)> const &shouldPromote)
 Promote cache entries to a the active chain tip. More...
 
bool setWinners (const CBlockIndex *pindex, const std::vector< CScript > &payoutScripts)
 Set proof(s) that should be treated as winners (already finalized). More...
 
bool accept (const StakeContenderId &contenderId)
 Helpers to set avalanche state of a contender. More...
 
bool finalize (const StakeContenderId &contenderId)
 
bool reject (const StakeContenderId &contenderId)
 
int getVoteStatus (const StakeContenderId &contenderId, BlockHash &prevblockhashout) const
 Get contender acceptance state for avalanche voting. More...
 
size_t getPollableContenders (const BlockHash &prevblockhash, size_t maxPollable, std::vector< StakeContenderId > &pollableContenders) const
 Get the best ranking contenders, accepted contenders ranking first. More...
 
bool getWinners (const BlockHash &prevblockhash, std::vector< std::pair< ProofId, CScript > > &winners) const
 

Private Types

using ContenderSet = boost::multi_index_container< StakeContenderCacheEntry, bmi::indexed_by< bmi::hashed_unique< bmi::tag< by_stakecontenderid >, stakecontenderid_index, SaltedUint256Hasher >, bmi::hashed_non_unique< bmi::tag< by_prevblockhash >, bmi::member< StakeContenderCacheEntry, BlockHash, &StakeContenderCacheEntry::prevblockhash >, SaltedUint256Hasher >, bmi::ordered_non_unique< bmi::tag< by_blockheight >, bmi::member< StakeContenderCacheEntry, int, &StakeContenderCacheEntry::blockheight > > > >
 
using ManualWinnersSet = boost::multi_index_container< ManualWinners, bmi::indexed_by< bmi::hashed_unique< bmi::tag< by_prevblockhash >, bmi::member< ManualWinners, BlockHash, &ManualWinners::prevblockhash >, SaltedUint256Hasher >, bmi::ordered_unique< bmi::tag< by_blockheight >, bmi::member< ManualWinners, int, &ManualWinners::blockheight > > > >
 

Private Attributes

int lastPromotedHeight {0}
 
ContenderSet contenders
 
ManualWinnersSet manualWinners
 

Detailed Description

Cache to track stake contenders for recent blocks.

Definition at line 95 of file stakecontendercache.h.

Member Typedef Documentation

◆ ContenderSet

using avalanche::StakeContenderCache::ContenderSet = boost::multi_index_container< StakeContenderCacheEntry, bmi::indexed_by< bmi::hashed_unique<bmi::tag<by_stakecontenderid>, stakecontenderid_index, SaltedUint256Hasher>, bmi::hashed_non_unique< bmi::tag<by_prevblockhash>, bmi::member<StakeContenderCacheEntry, BlockHash, &StakeContenderCacheEntry::prevblockhash>, SaltedUint256Hasher>, bmi::ordered_non_unique< bmi::tag<by_blockheight>, bmi::member<StakeContenderCacheEntry, int, &StakeContenderCacheEntry::blockheight> >> >
private

Definition at line 98 of file stakecontendercache.h.

◆ ManualWinnersSet

using avalanche::StakeContenderCache::ManualWinnersSet = boost::multi_index_container< ManualWinners, bmi::indexed_by< bmi::hashed_unique<bmi::tag<by_prevblockhash>, bmi::member<ManualWinners, BlockHash, &ManualWinners::prevblockhash>, SaltedUint256Hasher>, bmi::ordered_unique< bmi::tag<by_blockheight>, bmi::member<ManualWinners, int, &ManualWinners::blockheight> >> >
private

Definition at line 118 of file stakecontendercache.h.

Constructor & Destructor Documentation

◆ StakeContenderCache()

avalanche::StakeContenderCache::StakeContenderCache ( )
inline

Definition at line 134 of file stakecontendercache.h.

Member Function Documentation

◆ accept()

bool avalanche::StakeContenderCache::accept ( const StakeContenderId contenderId)

Helpers to set avalanche state of a contender.

Definition at line 102 of file stakecontendercache.cpp.

Here is the caller graph for this function:

◆ add()

bool avalanche::StakeContenderCache::add ( const CBlockIndex pindex,
const ProofRef proof,
uint8_t  status = StakeContenderStatus::UNKNOWN 
)

Add a proof to consider in staking rewards pre-consensus.

Definition at line 45 of file stakecontendercache.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ cleanup()

void avalanche::StakeContenderCache::cleanup ( const int  requestedMinHeight)

Definition at line 16 of file stakecontendercache.cpp.

Here is the caller graph for this function:

◆ finalize()

bool avalanche::StakeContenderCache::finalize ( const StakeContenderId contenderId)

Definition at line 114 of file stakecontendercache.cpp.

Here is the caller graph for this function:

◆ getPollableContenders()

size_t avalanche::StakeContenderCache::getPollableContenders ( const BlockHash prevblockhash,
size_t  maxPollable,
std::vector< StakeContenderId > &  pollableContenders 
) const

Get the best ranking contenders, accepted contenders ranking first.

The output of this function is only reliable to select contenders to reconcile and should not be called after contender polling begins.

Definition at line 169 of file stakecontendercache.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getVoteStatus()

int avalanche::StakeContenderCache::getVoteStatus ( const StakeContenderId contenderId,
BlockHash prevblockhashout 
) const

Get contender acceptance state for avalanche voting.

Returns 0 for accepted, 1 for rejected, and -1 for not in cache. prevblockhashout gets set if the contender is in the cache.

Definition at line 139 of file stakecontendercache.cpp.

Here is the caller graph for this function:

◆ getWinners()

bool avalanche::StakeContenderCache::getWinners ( const BlockHash prevblockhash,
std::vector< std::pair< ProofId, CScript > > &  winners 
) const

Definition at line 227 of file stakecontendercache.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isEmpty()

bool avalanche::StakeContenderCache::isEmpty ( ) const
inline

For tests.

Definition at line 141 of file stakecontendercache.h.

Here is the caller graph for this function:

◆ promoteToBlock()

void avalanche::StakeContenderCache::promoteToBlock ( const CBlockIndex activeTip,
std::function< bool(const ProofId &proofid)> const &  shouldPromote 
)

Promote cache entries to a the active chain tip.

Definition at line 53 of file stakecontendercache.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ reject()

bool avalanche::StakeContenderCache::reject ( const StakeContenderId contenderId)

Definition at line 127 of file stakecontendercache.cpp.

Here is the caller graph for this function:

◆ setWinners()

bool avalanche::StakeContenderCache::setWinners ( const CBlockIndex pindex,
const std::vector< CScript > &  payoutScripts 
)

Set proof(s) that should be treated as winners (already finalized).

This should only be used for manually added winners via RPC.

Definition at line 88 of file stakecontendercache.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ contenders

ContenderSet avalanche::StakeContenderCache::contenders
private

Definition at line 116 of file stakecontendercache.h.

◆ lastPromotedHeight

int avalanche::StakeContenderCache::lastPromotedHeight {0}
private

Definition at line 96 of file stakecontendercache.h.

◆ manualWinners

ManualWinnersSet avalanche::StakeContenderCache::manualWinners
private

Definition at line 131 of file stakecontendercache.h.


The documentation for this class was generated from the following files: