&gt; The nonce is an integer value?<p>An array of bytes <i>is</i> an integer value - just an arbitrarily large one. You could also just tack the bytes of a 64-bit uint onto the end of the nonce instead of incrementing the nonce (I&#x27;m not sure if that is secure, it&#x27;s just an explanation).<p>A real example of this is RSA. The length of the key is in bits (and therefore bytes) but is still a representation of a really big integer.<p>&gt; how does the client know it has finished the work ?<p>Let&#x27;s remove hashing from the equation. I, as the server, say to you I&#x27;ve got the following equation:<p><pre><code>    Y = (5 + X) * 10
</code></pre>
Please solve it so that the last 3 digits of Y are greater than 100 and tell me what you used for X. The simplicity of this equation means that you can easily solve for Y and respond with `12335`. With that response I can just plug X into the equation and see that you&#x27;ve done the work. Now, imagine that there is no such thing as division. Being unable to solve the equation, you&#x27;d be forced to brute force each value of X - but <i>proving</i> that you&#x27;ve found X only requires that you run the equation once because we can still multiply:<p><pre><code>    Y = (5 + 12335) * 10
</code></pre>
With POW, you say that you are looking for a specific pattern of bits or bytes. The pattern can be quite arbitrary: &quot;I want the last 8 bytes to be a 64-bit integer larger than 12345&quot; or even just &quot;the last 64 bits must all be 0.&quot; The client will have to try multiple values of X to see which satisfies that constraint. Once the client knows X you no longer need to go through the effort of finding out the value for yourself, you just need to plug X into the equation and see that they found a valid value for X:<p><pre><code>    POW = HASH(NONCE &amp; X)
</code></pre>
It&#x27;s like salting a password, but requiring that a portion of the final result has a specific pattern. This forces the client to do a lot of work in a way that is cheap to verify from a computational standpoint.