Bitcoin ABC 0.26.3
P2P Digital Currency
Loading...
Searching...
No Matches
stakecontender.h
Go to the documentation of this file.
1// Copyright (c) 2024 The Bitcoin developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef BITCOIN_AVALANCHE_STAKECONTENDER_H
6#define BITCOIN_AVALANCHE_STAKECONTENDER_H
7
8#include <arith_uint256.h>
9#include <hash.h>
10#include <uint256.h>
11
12#include <cmath>
13
14struct BlockHash;
15
16namespace avalanche {
17
18struct ProofId;
19
25struct StakeContenderId : public uint256 {
26 explicit StakeContenderId() : uint256() {}
27 explicit StakeContenderId(const BlockHash &prevblockhash,
28 const ProofId &proofid)
29 : uint256(Hash(prevblockhash, proofid)) {}
30
39 return (256.0 - std::log2(UintToArith256(*this).getdouble())) /
41 }
42};
43
44} // namespace avalanche
45
46#endif // BITCOIN_AVALANCHE_STAKECONTENDER_H
arith_uint256 UintToArith256(const uint256 &a)
double getdouble() const
256-bit opaque blob.
Definition uint256.h:129
uint256 Hash(const T &in1)
Compute the 256-bit hash of an object.
Definition hash.h:74
T GetRand(T nMax=std::numeric_limits< T >::max()) noexcept
Generate a uniform random integer of type T in the range [0..nMax) nMax defaults to std::numeric_limi...
Definition random.h:85
A BlockHash is a unqiue identifier for a block.
Definition blockhash.h:13
StakeContenderIds are unique for each block to ensure that the peer polling for their acceptance has ...
double ComputeProofRewardRank(uint32_t proofScore)
To make sure the selection is properly weighted according to the proof score, we normalize the conten...
StakeContenderId(const BlockHash &prevblockhash, const ProofId &proofid)