err = fmt.Errorf("invalid transaction root hash. received=%x calculated=%x", header.TxHash, txSha)return}// Tre receipt Trie's root (R = (Tr [[H1, R1], ... [Hn, R1]]))receiptSha := types.DeriveSha(receipts)ifreceiptSha != header.ReceiptHash { err = fmt.Errorf("...
// checkSiacoins counts the number of siacoins in the database and verifies// that it matches the sum of all the coinbases.func(cs *ConsensusSet)checkSiacoins()error{// Calculate the number of expected coins in constant time.deflationBlocks := types.InitialCoinbase - types.MinimumCoin...
As mentioned above, the hash is calculated on static data. In short it means that it is possible to calculate when a stake can be found at a future point of time. This includes years into the future. This has led to discussions about a so-called long range attack. To counter this lon...