Proof of work is hard to produce (expensive, tedious) but easy to verify for third parties and meeting certain requirements. Producing proof of work is a random process with a low probability, so that a lot of trial and error is required on average before a valid proof of work is generated. Bitcoin uses the Hashcash work proof system. One of the applications of this idea is to use Hashcash to prevent email spam by requiring proof of work on the email content on each email. Legitimate e-mails will be able to easily generate proof, but mass junk mailers will have trouble generating the required proofs (which would require huge computing resources). Hash proofs are used in Bitcoin for block generation. For a block to be accepted by network participants, miners must complete a proof of work that covers all the data in the block. The difficulty of this work is adjusted so as to limit the rate of generation of new blocks by the network to one every 10 minutes. Because of the very low probability of successful generation, it is impossible to predict which miner or mining pool will be able to generate the next block. Each block contains the hash of the previous block, so each block has a chain of blocks that together contain a large amount of work. Changing a block (which can only be done by creating a new block containing the same predecessor) requires regenerating all successors and redoing the job they contain. This protects the blockchain from tampering.