CheckStakeKernelHash function

From Peercoin Wiki
Jump to: navigation, search

Source code

The CheckStakeKernelHash function code can be found in the kernel.cpp file (v0.4.0ppc).


 ppcoin kernel protocol
 coinstake must meet hash target according to the protocol:
 kernel (input 0) must meet the formula
     hash(nStakeModifier + txPrev.block.nTime + txPrev.offset + txPrev.nTime + txPrev.vout.n + nTime) < bnTarget * nCoinDayWeight
 this ensures that the chance of getting a coinstake is proportional to the
 amount of coin age one owns.
 The reason this hash is chosen is the following:
       (v0.3) scrambles computation to make it very difficult to precompute
              future proof-of-stake at the time of the coin's confirmation
       (v0.2) nBits (deprecated): encodes all past block timestamps
   txPrev.block.nTime: prevent nodes from guessing a good timestamp to
                       generate transaction for future advantage
   txPrev.offset: offset of txPrev inside block, to reduce the chance of 
                  nodes generating coinstake at the same time
   txPrev.nTime: reduce the chance of nodes generating coinstake at the same
   txPrev.vout.n: output number of txPrev, to reduce the chance of nodes
                  generating coinstake at the same time
   block/tx hash should not be used here as they can be generated in vast
   quantities so as to generate blocks faster, degrading the system back into
   a proof-of-work situation.



Name Type Description
nBits unsigned int The POS target we want to check against
blockFrom const CBlock& The block the stake coins are originating from
nTxPrevOffset unsigned int The tx offset in originating block
txPrev const CTransaction& The related tx in originating block
prevout const COutPoint& The stake OutPoint from originating tx
nTimeTx unsigned int The coinstake tx time
hashProofOfStake uint256& The returned calculated hash
fPrintProofOfStake bool Flag for logging

Return value

Type Description
bool true if the stake kernel hash was successfully checked, otherwise false


What is the GetKernelStakeModifier function and what is it used for?
The GetKernelStakeModifier function is described in detail here

Feel free to add your own questions in this FAQ