Profile picture for user Patrick Suiker

We kregen in de AllesOverCrypto Facebookgroep een mooie vraag binnen en ik zal hem hier met het daarbij horende antwoord plaatsen zodat jij er nu ook wat aan hebt.

De vraag:

Is er iemand die mij goed kan uitleggen wat de nonce is en hoe dit werkt? Ik lees overal hetzelfde maar ik wil het maar niet begrijpen of ik mis een stukje kennis om te begrijpen. Ik weet dat de nonce de oplossing is van de hashpuzzel gebasseerd op de restrictie. Maar wat ik dan niet begrijp is... Waar komen de nullen vandaan... worden deze mee berekent in de hash? of word de nonce mee berekent in de hash en deze geeft een hash waarde? of zit het anders in elkaar? Ik wil weten wanneer de puzzel is opgelost en waar dit op gebasseerd is met hoe het werkt.

Het antwoord:

De nonce is een 32-bits waarde die wordt meegenomen in de hashfunctie om er voor te zorgen dat er extra werk wordt gedaan om de juiste hash te berekenen (proof of work). Een 32-bits waarde heeft zo'n 4,3 miljard verschillende mogelijkheden (2^32). Als we er even voor het gemak even vanuit gaan dat de hash functies unieke hashes genereert dan betekent het dus dat je maximaal 4,3 miljard keer de hash functie moet uitvoeren om van een nonce tot een bepaalde hash te komen.

Bij Bitcoin hoeven miners echter niet een exacte hash te berekenen, maar een hash die kleiner of gelijk is aan een vooraf bepaalde waarde (de target hash). Deze target hash bepaalt daarmee de moeilijkheidsgraad.

Om te zorgen dat elke hash opnieuw voldoende werk vereist wordt deze nonce dus gebruikt. Daarnaast zitten er een aantal variabelen in de hash invoer die uniek zijn per blok zodat bestaande berekeningen niet hergebruikt kunnen worden.
Met de nullen bedoel je denk ik de eerste karakters van de uitgerekende hash. Omdat een winnende hash kleiner moet zijn dan de target hash moet je uitgerekende hash vaak starten met een aantal nullen om onder die target hash uit te komen. Stel de target hash is 00010 dan zal elke hash die niet begint met 3 nullen sowieso niet kleiner zijn dan de target hash. Voor een computer is het makkelijker om te vergelijken of de eerste x getallen allemaal een nul zijn, dan om meteen te gaan uitrekenen of de hele hash kleiner is dan de target hash.

Als de computer dus in de eerste getallen een waarde tegenkomt die niet nul is hoeft hij de rest ook niet meer uit te rekenen en kan hij alvast door met de volgende poging om de juiste hash te gokken.

Hopelijk heb ik je hiermee verder kunnen helpen!👍😁