# A Compute and Wait in PoW (CW-PoW) Consensus Algorithm for Preserving Energy Consumption
## 3 Consensus Protocol Overview
To avoid centralization (the richest member would always have an advantage) and the Nothing at Stake attack, many alternatives exist for a move towards more comprehensive consensus mechanisms which use random allocation methods taking into account the age of the coin (as in the case of Peercoin) and depending on the velocity [16] used by the ReddCoin cryptocurrency. The variant that is often considered as one of the most balanced protocols between security, decentralization and network scalability is Delegated Proof of Stake used by the BitShares cryptocurrency [17]. Its selection is based on votes in which the block validator is randomly selected from a group of 101 delegates who have the highest stakes. Proof of Burn (PoB), or Proof of Destruction [18], is an algorithm very similar to PoS. In PoS, the participant sequesters a certain amount of cryptocurrency, which is a necessary collateral to participate in the validation of the network, but if he wishes to leave this network it is possible to recover his initial stake. What PoB and PoS have in common is the fact that block validators must invest their own coins in order to participate in the consensus mechanism. At PoB, this will involve destroying the coins that the participant provided to gain the right to validate network transactions. This system is similar to PoS in that the more coins it burns, the more likely it is to obtain the associated reward. Proof of Burn is offered as an alternative to the classic Proof of Work, but this young technique is criticized by some detractors who consider it a simple waste of tokens. It is the idea of destroying cryptocurrency in order to create it. There are also many challenges that attempt to replace \"Work\" in PoW. For example, Proof of eXercise (PoX) in [19], where the challenge is to solve a real eXercise, a scientific computation problem based on a matrix. The authors chose matrix problems because matrices have interesting composability properties that help to solve the difficulty, collaborative verification and pool-mining, and also that matrix problems cover a wide range of useful real-world problems, being a primary abstraction for most scientific computing problems. The miner must solve the following equation:  
\[X_{1}\circ X_{2}\circ...\circ X_{p}=Y \tag{1}\]  
where \(X_{i}\) and \(Y\) are matrices, \(\circ\) is an operator, e.g., a product, a sum, etc. Another challenge proposed is Primecoin [20] which, as its name indicates, consists of finding prime numbers instead of finding the nonce. Proof of Space [21] or Proofs of Capacity (PoC) is a protocol between a prover \(P\) and a verifier \(V\) which has two distinct phases. After an initialization phase, \(P\) is supposed to store data \(F\) of size \(N\), while \(V\) contains only a few information. At any later time, \(V\) can initiate an execution phase of the proof, and at the end, \(V\) outputs reject or accept. The authors demanded that \(V\) be very efficient in both phases, while \(P\) is very efficient in the execution phase as long as it is stored and has random access to the data \(F\). The simplest solution would be for the verifier \(V\) to generate a pseudo-random file \(F\) of 100 GB and send it to the prover \(P\) during an initialization phase. Later, \(V\) can ask \(P\) to return a few bits of \(F\) at random positions, making sure that \(V\) stores (at least a large part of) \(F\). Unfortunately, with this solution, \(V\) still has to send a huge 100 GB file to \(P\), which makes this approach virtually useless in practice. The PoC scheme which they proposed is based on graphs that are difficult to engrave. During the initialization phase, \(V\) sends the description of a hash function to \(P\), which then labels the nodes of a graph that is difficult to engrave using this function. Here, the label of a node is calculated as the hash of the labels of its children. \(V\) then calculates a Merkle hash of all the labels and sends this value to \(P\).