Overig > Hulp

Hoe werkt de e-Gulden?

(1/2) > >>

AmazingDreams:
Dit stuk is opgedeeld in 3 delen:


* Algemene inleiding
* Niet technisch verhaal
* Technisch verhaal
Ik zou echter zeggen dat je alles moet lezen :) Mocht iemand fouten of verbeterpunten zien, laat het aub weten.

1. Algemene inleiding
Bitcoin is de eerste cryptovaluta, ontwikkeld door de persoon - of team - Satoshi. Bitcoin is een munt die decentraal uitgegeven wordt. Zonder vooroordelen en zonder arbitraire ideeen of beslissingen van enkele personen.
De e-Gulden is hiervan afgeleid. Het onderstaande verhaal is een poging duidelijk te maken hoe een cryptomunt werkt.

2. Niet technisch verhaal
2.1 Lokale kopie
Iedereen houdt zijn eigen lokale kopie bij van de transacties die gemaakt zijn. Een soort scoreboard waar per adres staat hoeveel dat adres ontvangen en verstuurd heeft en dus hoeveel dat adres in bezit heeft.

2.2 Transacties
Op het moment dat bijvoorbeeld Jan een transactie maakt moet hij de transacties noemen die samen de waarde van zijn nieuwe transactie hebben. Deze informatie stuurt hij de wereld in, iedereen controleert of Jan wel echt die transactie kan maken, of hij wel genoeg geld heeft. Dit gebeurt allemaal softwarematig, niets in dit verhaal wordt met de hand gedaan. Hij heeft bijvoorbeeld een keer 2 en een keer 3 EFL ontvangen en wil 5 versturen. Zijn software noemt dan deze transacties (input) van 2 en 3 EFL met de output van 5 EFL. Iedere 'input' transactie kan maar 1 keer gebruikt worden.

Nu kan het zijn dat Jan meerdere keren refereert naar dezelfde input transactie. Deze transacties zijn dus niet geldig, ze zijn immers al gebruikt! Jan is echter heel erg slim bezig (denkt 'ie) en probeert met hetzelfde geld meerdere rekeningen te betalen. 1 bij de groenteboer en 1 bij de bakker. Hij stuurt de informatie over de ene transactie eerst naar de bakker en een andere transactie eerst naar de groenteboer. De groenteboer en de bakker zien allebei het geld binnenkomen van Jan (wat dus niet klopt!). Overigens is dit in de praktijk erg lastig.

Na een tijdje komt de informatie binnen over de andere transacties bij de bakker en de groenteboer, deze zullen door de software van de groenteboer en de bakker geweigerd worden. Want Jan had al aangegeven die inputs gebruikt heeft om te betalen. Jan is blij, hij heeft twee rekeningen betaald met hetzelfde geld! De transactie naar de groenteboer wordt niet geaccepteerd door de software van de bakker en de transactie naar de bakker wordt niet geaccepteerd door de software van de groenteboer. Zij zien dit dus niet!

2.3 Mining
Wat nu? Wat doen we om dit soort synchronisatieproblemen te voorkomen? We minen! We hebben afgesproken dat, eenmaal in de zoveel tijd, de huidige status van het netwerk wordt gebruikt van een enkele miner, als je je niet aan deze afspraak houdt kun je niet meedraaien met het netwerk. We zullen later ingaan op de details, maar eerst op de grote lijnen en wat het betekend voor het netwerk.
Piet was aan het minen en had het geluk om het volgende blok te vinden. Toevallig kreeg hij de transactie naar de groenteboer eerder binnen, de transactie naar de bakker werd dus niet geaccepteerd en staat niet in zijn lokale scoreboard. Op het moment dat het blok gevonden wordt, wordt zijn scoreboard verpakt in een blok en uitgezonden naar het netwerk.
De groenteboer is blij; hij ziet dat de transactie inmiddels een bevestiging heeft! De bakker is niet blij: Jan is duidelijk niet te vertrouwen, hij heeft hem geprobeerd op te lichten. Maar weet ook dat hij geen vals geld heeft gekregen waardoor hij later zelf in de problemen zou komen.

2.4 Incentief om te minen
Het incentief om te minen bestaat in feite uit 3 delen.

Ik wil m'n geld!
De bakker en de groenteboer hebben beide motivatie om te minen, zij willen immers hun geld krijgen/kunnen uitgeven. Dit kan alleen als de transacties worden bevestigd door middel van een blok.

Ik wil meer geld! #1
Als je een blok vind krijg je een beloning, deze beloning bestaat op dit moment uit 25 EFL en wordt iedere 210.000 blokken gehalveerd.

Ik wil meer geld! #2
Bovenop de normale blokbeloning krijg je transactie fees die betaald worden door degenen die een transactie hebben gemaakt. Dit is per transactie een klein bedrag maar wordt opgestapeld toch redelijk wat geld. 1000 transacties met allemaal een 0.001 EFL aan fees is samen toch weer 1 EFL.

3. Technisch verhaal
3.1 Hashes
Een hash is een bepaalde manier om data te bewerken die niet om te keren is. Het is praktisch onmogelijk om de oorspronkelijke data uit de hash te halen. Belangrijk om te weten is dat een kleine verandering aan de input waarde een grote verandering in de output hash geeft. Enkele voorbeelden met een sha256 hash:


--- Code: ---waarde: egulden
hash:   f6ce2516edc4a2465c45435a2e6aad5ef2814ef6aac1b08031a52a2bc6cd3d8a

--- Einde van code ---

--- Code: ---waarde: e-gulden
hash:   0b4cdfa4a13708690db7b19b55b8ce5a5261f0956f322e4fabf5b869eecee95a

--- Einde van code ---

De enige manier om te achterhalen wat de oorspronkelijke data was is door een 'brute force' aanval te doen op de hash. Een brute force aanval is een 'domme' aanval die gewoon net zo lang de waarde veranderd tot de hash hetzelfde is:


--- Code: ---waarde: a
hash:   ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
waarde: ab
hash:   fb8e20fc2e4c3f248c60c39bd652f3c1347298bb977b8b4d5903b85055620603
waarde: abc
hash:   ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

--- Einde van code ---
enzovoort.

Deze hashes worden veelvuldig gebruikt door cryptocurrencies. Maar ook bijvoorbeeld bij het opslaan van wachtwoorden.

3.2 Transacties, gedetailleerd(er)
Zoals hierboven genoemd houd iedereen een eigen kopie bij van de status van het netwerk (het scoreboard). Dit scoreboard is niet 'hard', in de zin dat het wordt opgebouwd door de som van alle transacties van en naar een adres. Zo heeft een adres bijvoorbeeld tweemaal 5 e-Gulden gekregen en 2 gestuurd, hij heeft dus 8 e-Gulden in totaal. Als je in je wallet ziet dat je 8 EFL hebt, heeft je wallet deze berekening dus gemaakt. Letterlijk gezien is het dus niet zo dat je dat 'hebt', maar dat de som van alle transacties op dat getal uit komt. En dat dit het bedrag is wat je kan uitgeven.
Stel dat je nu deze van deze 8 EFL er 4 gebruikt om iets te kopen. Je wallet zoekt naar de meest efficiƫnte manier om dit te doen. In dit geval maakt de wallet twee transacties aan: de wallet refereert naar een transactie van 5 EFL en zegt dat 4 hiervan verstuurd worden naar adres A, en 1 naar een eigen adres B. Dit moet gebeuren om te zorgen dat het transactionele systeem klopt. Want je balans wordt 'opgebouwd', en is niet 'hard' maar liquide. Zonder de transactie van 1 EFL naar adres B ben je deze EFL kwijt.

De hash van een transactie:

--- Code: ---waarde: hoeveelheid:4,van:adresA,naar:adresB
hash:   af436033bf9d9ce539b4a13ad38729de93abc1f72a48c5fa938c321adb20dae5

--- Einde van code ---

Om te bewijzen dat degene die de adresA bezig daadwerkelijk de eigenaar is van de 4 EFL's, wordt de transactie ondertekend met behulp van de private keydie bij dat adres hoort. Er is een wiskundige verbinding tussen de public key (adresA) en de private key, die geheim moet blijven.

Stel dat de eigenaar van adresB meer wil hebben, hij past de transactie aan zodat er staat dat er 10 verstuurd moet worden en zendt deze uit naar het netwerk.

--- Code: ---waarde: hoeveelheid:10,van:adresA,naar:adresB
hash:   27107823a23bd5330ade6a9d1dd6a566fc2d1b2e1cea1f4b9c48816d9019f960

--- Einde van code ---
De hash is nu anders! De handtekening klopt niet met de transactie! Deze is dus ongeldig.

Limbo
Als een transactie wordt gemaakt is deze in 'limbo' (niemand kan nog bij de coins) tot deze in een blok is opgenomen.

3.3 Mining, gedetailleerd(er)
Minen is het proces van het oplossen van zeer ingewikkelde problemen. Deze problemen zijn moeilijk op te lossen, maar makkelijk te bewijzen dat ze correct zijn opgelost. De moeilijkheidsgraad van deze problemen varieert, we willen dat er iedere 2 minuten zo'n probleem wordt opgelost. Als er relatief veel oplossingen gevonden worden zal de moeilijkheidsgraad omhoog gaan, als er relatief weinig oplossingen worden gevonden zal de moeilijkheidsgraad omlaag gaan.

Een blok bestaat uit de waardes van alle transacties die op dat moment in limbo zijn, plus de hash van het vorige blok. Hier moet alleen nog een hash op geplakt worden die past bij de huidige moeilijkheidsgraad. Om dit te realiseren moet er een variabele zijn in het blok. De zogenaamde nonce. Deze nonce bestaat uit 4 bytes (karakters) en is de enige variabele in een blok. Miners berekenen deze nonce zodat de hash van alles bij elkaar past bij de huidge moeilijkheidsgraad.

Een blok moet het vorige blok vermelden, waar dit blok op is gebouwd
Om te voorkomen dat iemand van te voren een aantal blokken kan maken en op een willekeurig moment aan het netwerk kan geven moet een blok altijd de hash van het vorige blok bevatten. Zoals ik hierboven heb laten zien veranderd de hash aanzienlijk bij zelfs een kleine verandering in de data. Je kunt dus niet vast een paar blokken maken en hier later de hashes in passen. Alle blokken die gemaakt zijn bevatten dus het resultaat van de vorige berekening. Iedere keer dat er een nieuw blok wordt gevonden begint het berekenen opnieuw.

Een blok moet gegenereerd zijn met een bepaalde moeilijkheidsgraad
We willen niet te snel blokken achter elkaar, en ook niet te weinig, de hash/nonce moet passen bij de moeilijkheidsgraad. Deze nonce wordt verpakt bij het blok en is dus bekend voor eenieder die het blok ontvangt. De ontvanger gooit alles nogmaals bij elkaar en kijkt of de hash klopt met de moeilijkheidsgraad, als dit zo is wordt het blok geaccepteerd.

3.4 Wat als er een 'fork' is?
De situatie die geschetst werd bij de simpele uitleg van de transactie kan ook gebeuren bij blokken. Het kan zijn dat er twee blokken op ongeveer hetzelfde moment gevonden worden en deze beide naar delen van het netwerk worden gestuurd. Wat nu?
De langste keten wint: sommige miners zullen op blok A gaan bouwen en anderen op blok B. Op het moment dat er eerder een blok C wordt gevonden op blok A wordt deze het netwerk in gestuurd en zullen de clients blok B niet meer zien als een geaccepteerd blok. De transacties in dat blok zullen teruggaan in de limbo totdat ze weer verpakt worden in een blok.

Dit proces kan zich onbeperkt herhalen. Een ding is dat als een bepaalde miner maar genoeg kracht heeft hij sneller blokken kan bouwen dan de rest van het netwerk en bijvoorbeeld een chain maakt van 20 blokken in de tijd dat de rest van het netwerk er maar 10 heeft gemaakt. Deze 20 blokken laat hij pas later los. Die blokken zijn dus de langste keten en de overige 10 worden vergeten. Zo kan het dus voorkomen dat een transactie met meer dan 6 bevestigingen (wat de norm is voor acceptatie) toch niet geldig is. Om deze reden is het belangrijk zoveel mogelijk te minen, zodat kwaadwillenden mee moeite moeten doen om dit te kunnen bereiken.

AmazingDreams:
Misschien dat iemand anders nog iets kan vertellen over hoe het ondertekenen van transacties precies werkt.

Nelis:
Daarvoor hebben we Gerrit nodig ben ik bang

bitwise-shifted:
 :)

bitwise-shifted:
Het ondertekenen van transacties gebeurt in de "catacomben" van de software en is een briljant stuk software dat niet eenvoudig is uit te leggen. Als je het echt wilt weten moet je eerst dit lezen : https://en.bitcoin.it/wiki/Transactions , Daarna dit : http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html en daarna mag je de code zelf ontrafelen op Github.

Toch even wat licht op de zaak en terug naar het verhaal van AmazingDreams :
Je bent in het bezit van e-Guldens als iemand anders een of meerdere oude transacties die hij zelf heeft binnengekregen naar jou heeft doorgestuurd (geheel of deels). Dat doorsturen gebeurt  door te bewijzen dat jij op dit moment de eigenaar bent (de bestemming van een oude transactie).

Dat bewijs kun je leveren door het principe van asymetrische versleuteling, waarmee een heel interessant spel gespeeld gespeeld kan worden, namelijk doordat je kunt bewijzen dat je de eigenaar bent van een sleutel zonder de sleutel zelf prijs te geven (http://nl.wikipedia.org/wiki/Asymmetrische_cryptografie). Dit spel gaat uit van een sleutelpaar (de public key en de private key die Amazing Systems noemde). Zo'n sleutelpaar ontstaat doordat je een groot willekeurig getal verzint (de private key, een combinatie van 51 cijfers en letters) en dat middels een wiskundige formule omzet in een een ander getal (de public key). Als je nu een willekeurig bericht versleutelt met een private key kun je dat bericht ontsleutelen met de publieke sleutel (en eventueel andersom). Het verschil tussen versleutelen en hashen (dat door Amazing systems is beschreven) is dat hashing niet omkeerbaar is en versleutelen wel.

Nu is asymetrische versleuteling een erg kostbaar proces omdat het veel rekenkracht vergt.  Daarom wordt niet de hele transactie versleuteld met de private key, maar alleen de hash van de oorspronkelijke transactie.  Die versleutelde hash kan iedereen ontsleutelen omdat met een uitgaande transactie de public key wordt meegeleverd. Na het ontsleutelen komt de hash zelf dus beschikbaar en iedereen kan dan weer controleren dat dat de werkelijke hash is van de oorspronkelijke transactie.

Het bovenstaande is slechts een eenvoudige voorstelling van zaken. Weinigen weten bijvoorbeeld dat het openbare adres (dat bij de e-Gulden met een L begint (voorlopig nog)) niet de echte public key is, maar een hash daarvan. De echte public key komt pas in beeld als een daaraan gekoppelde transactie wordt gespendeerd. Dat gebeurt uit veiligheidsoverwegingen. Hoewel het op dit moment onmogeljik is om uit een publieke sleutel een privesleutel af te leiden heeft Satoshi bedacht dat dat in een verre toekomst met quantum-computers misschien wel mogelijk gaat worden (als de public key via diverse transacties in beeld komt). Daarom komt de echte publieke sleutel pas in beeld als geld dat eraan is gekoppeld wordt gespendeerd. Dat is ook de reden dat de e-Gulden software een adres niet twee keer gebruikt. Zelfs als een grote hoeveelheid e-guldens is gekoppeld aan een adres en je geeft er een fractie van uit, dan gaan alle e-guldens naar buiten, gaat de fractie naar zijn bestemming en komt de rest terug in je portemonnee op een kersvers nieuw adres.

Een andere wetenswaardigheid is dat het bewijs dat geleverd moet worden om aan te tonen dat je de ontvanger bent/was van een transactie niet in de walletsoftware is gecodeerd maar in de transactie. De transactie bevat het programma waarmee het bewijs moet worden geleverd. Dit maakt het bitcoin-protocol geschikt voor veel meer doeleinden dan waar het momenteel voor wordt gebruikt.

Kortom, het merendeel van de mensheid moet maar geloven dat het werkt. Briljante hoofden hebben al vijf jaar geprobeerd om het protocol te dwarsbomen en hebben het geleidelijk opgegeven.  Het lijkt er sterk op dat Bitcoin (en daarmee e-Gulden) een lange veilige toekomst beschoren is.

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie