// Init list of block items
foreach (var item in blockTreeItems)
{
+ item.nStakeModifierChecksum = StakeModifier.GetModifierChecksum(item);
+
blockMap.TryAdd(item.Hash, item);
if (item.IsProofOfStake)
}
itemTemplate.SetStakeModifier(nStakeModifier, fGeneratedStakeModifier);
+ itemTemplate.nStakeModifierChecksum = StakeModifier.GetModifierChecksum(itemTemplate);
- var nChecksum = StakeModifier.GetModifierChecksum(ref itemTemplate);
- if (!ModifierCheckpoints.Verify(itemTemplate.nHeight, nChecksum))
+ if (!ModifierCheckpoints.Verify(itemTemplate.nHeight, itemTemplate.nStakeModifierChecksum))
{
return false; // Stake modifier checkpoints mismatch
}
/// </summary>
/// <param name="cursorBlock">Block cursor.</param>
/// <returns>Checksum value.</returns>
- public static uint GetModifierChecksum(ref CBlockStoreItem cursorBlock)
+ public static uint GetModifierChecksum(CBlockStoreItem cursorBlock)
{
Contract.Assert(cursorBlock.prev != null || (uint256)cursorBlock.Hash == NetInfo.nHashGenesisBlock);
// Hash previous checksum with flags, hashProofOfStake and nStakeModifier
if (cursorBlock.prev != null)
{
- var prevCursor = cursorBlock.prev;
- bw.Write(GetModifierChecksum(ref prevCursor));
+ bw.Write(cursorBlock.prev.nStakeModifierChecksum);
}
bw.Write((uint)cursorBlock.BlockTypeFlag);
hashChecksum >>= (256 - 32);
- return hashChecksum.Low32;
+ return (uint)hashChecksum.Low64;
}
public static bool CheckProofOfStake(CTransaction tx, uint nBits, out uint256 hashProofOfStake, out uint256 targetProofOfStake)