Nachdem bereits gezeigt wurde, dass man Bitcoins kaufen kann, folgt hier nun ein Artikel über die Berechnung von Bitcoins.
Berechnung von BTC
Wie bereits erwähnt gibt es auch die Möglichkeit, sich BTC durch Aufwendung von Rechenzeit (sog. Mining) selbst zu berechnen. Man berechnet sich nicht wirklich BTC sondern signiert bisherige Transaktionen in sogenannten Blöcken und erhält als Anerkennung hierfür auf zweierlei Arten BTC:
- Vergütung für die Signierung: Ein fester Betrag, der momentan bei 50BTC pro Block liegt, jedoch in festen Zeiträumen immer wieder halbiert wird
- Fees: Alle für eine Transaktion ausgelobten (freiwilligen) Gebühren erhält derjenige, der diese Transaktion zuerst signiert. Weitere Signierungen schütten keine weiteren Gebühren aus
Der erste Punkt begründet auch, dass eine maximale Obergrenze von möglichen BTC vorhanden ist. Diese liegt bei 21 Mio BTC. Zu diesem Zeitpunkt erhält man für die Signierung von Transaktionen BTC nur noch in Form von Gebühren. Auch zeigt sich, dass das Berechnen von Blöcken immer unlukrativer wird, solange der Großteil der Transaktionen ohne Gebühr erfolgen.
Was geschieht nun bei einer solchen Blockberechnung? Vereinfacht gesagt versucht der Benutzer mittels einer zweifachen SHA256 Funktion (SHA256(SHA256(text)) einen Hash-Wert zu finden, der unterhalb eines bestimmten Grenzwertes, dem sogenannten Target liegt.
Um zu verhindern, dass es zu einer Geldschwemme kommt, wird dieses Target als Stellschraube genutzt. Je nach Rechenleistung des Netzwerkes wird die Schwierigkeit (Current Difficulty) und damit das Target (Current Target) angepasst. Die gewünschte Zielwert liegt hierbei bei 6 Blöcken pro Stunde.
Alle 2016 Blöcke wird die Difficulty so angepasst, dass mit der aktuellen Leistung des Netzwerkes weiterhin durchschnittlich 6 Blöcke pro Stunde berechnet werden.
Die für die Berechnung eines Blocks benötigten Werte werden im Block-Header kombiniert.
| Name |
Inhalt |
Update sobald… |
Größe (Bytes) |
| Version |
Block-Version |
…der Client eine neue Version spezifiziert |
4 |
| Vorheriger Block |
Hash des letzten Blocks |
…ein neuer Block berechnet wurde |
32 |
| Merkle root |
256-bit Hash über alle bisherige Transaktionen |
…eine neue Transaktion akzeptiert wird |
32 |
| Timestamp |
Aktueller Zeitstempel |
…eine neue Zeit vorliegt |
4 |
| Target |
Aktuelles Target |
…die Difficulty angepasst wird |
4 |
| Nonce |
32-bit Zahl |
…ein Hash berechnet wurde (inkrementiert) |
4 |
Aus diesen Werten berechnen nun die Benutzer einen Hash-Wert und vergleichen ihn mit dem Target. Liegt der Hash-Wert über dem Target, wird Nonce angepasst und der nächste Wert berechnet. Da jede dieser Berechnungen unabhängig von vorangegangenen Berechnungen ist, lässt sich der Algorithmus gut auf mehrere Rechenkerne skalieren. Dies machen sich v.a. GPU-Miner zu nutzen (s.u.)
Sobald der Benutzer Werte gefunden hat, die einen passenden Hash generieren, kann er diesen Block sowie die für die Berechnung genutzten Werte veröffentlichen. Die auf diese Art berechneten Hash-Werte sind eindeutige Bezeichner des Blocks und für jeden nachvollziehbar, es ist also nicht möglich, fehlerhafte Blöcke als valide auszugeben.
Der Berechner eines Blockes kann eine beliebige Adresse angeben, welche die Belohnung erhält. Hierzu wird für den neuen Block eine neue Transaktion generiert, welche folgenden Inhalt besitzt:
Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
Coinbase:07456c696769757303d98c00
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG
Es wird hier also keine Quell-Adresse für den Input angegeben sondern das Coinbase Parameter genutzt. Die hier eingefügten Daten werden nicht benötigt, können daher beliebig gesetzt werden.
Durch die Verkettung von Blöcken über den Hash wird eine Block-Chain erzeugt, welche sich bis zum ersten Block des Bitcoin-Systems (dem sog. Genesis-Block) nachvollziehen lässt. Hierdurch kann die Validität aller bisher berechneten Blöcke jederzeit überprüft werden.
Da ein neuer Block eine gewisse Zeit benötigt, bis jeder Teilnehmer des Systems von dessen Existenz erfährt, kann es vorkommen, dass zu einem bestehenden Block nicht nur ein Nachfolger sondern zwei gefunden werden. Dies wird Fork genannt. Für die weitere Berechnung der Block-Chain wird immer der Block, welche die längste Kette zum Genesis-Block besitzet, verwendet. Die Länge der Kette wird hierbei nicht über die Anzahl der Blöcke sondern die akkumulierte Difficulty definiert.
Auf diese Weise werden Forks der Block-Chain nach kurzer Zeit nicht mehr weitergeführt. Benutzer, die trotzdem Folgeblöcke für diese Äste berechnen, erhalten keine BTC als Vergütung.
Bereits getätigte Berechnungen werden unnütz, sobald von einem anderen Benutzer ein Block berechnet wurde. Zu diesem Zeitpunkt muss wieder mit dem ersten Nonce begonnen werden. Daher kann nicht davon ausgegangen werden, dass man sicher nach einer gewissen Zeit einen Block gefunden hat.
Der durchschnittliche Aufwand für die Berechnung eines einzelnen Blocks lässt sich mit der folgenden Formel berechnen:
time in seconds = difficulty * 2^32 / hash per second
Beispiel:
Difficulty = 20000
Mhash/s = 400
20000 * 2^32 / 400 * 10^6 = 214748,3648 Sekunden = 59,65 Stunden
Da die aktuelle Difficulty aber bereits bei >850000 liegt, würde man bereits 2535 Stunden benötigen.
Um ein Gefühl für die Leistungsfähigkeit der eigenen Hardware zu bekommen lohnt sich ein Blick in die Bitcoin-Wiki:
Vergleich von Mining-Hardware
Anhand der Beispieldaten für die Leistungsfähigkeit von CPUs und Grafikkarten sieht man, dass Grafikkarten (GPU) eine um ein vielfaches höhere Rechenleistung besitzen. Dies liegt an der guten Skalierbarkeit des Rechenvorganges auf mehrere Rechenkerne. GPUs besitzen viele einfache Rechenkerne, die die benötigten Berechnungen relativ langsam, jedoch parallel durchführen.
So kann ein typischer CPU-Kern zwischen 4 (128Bit SSE) und 8 (256Bit AVX) 32-bit Instruktionen pro Taktzyklus durchführen. Eine Grafikkarte kann nur eine einzelne Instruktion durchführen, besitzt dafür aber z.B. 1600 Rechenkerne (HD5870).
Im Vergleich schneidet also eine Quad-Core CPU mit 3Ghz gegenüber einer ATI HD5870 sehr schlecht ab (1:15).
4 Kerne * 3 Ghz * 8 Instruktionen/Takt = 96000000000 Instruktionen/Sekunde
1600 Kerne * 900 Mhz * 1 Instruktion/Takt = 1440000000000 Instruktionen/Sekunde
Um dem Problem des hohen Rechenaufwands sowie der Unsicherheit des Erfolgs zu begegnen, rechnen die meisten Benutzer in Pools. Hierbei wird der Block auf alle teilnehmenden Rechner verteilt und somit der geringer. Sobald ein Block berechnet wurde, erhalten die Teilnehmer prozentual an der geleisteten Arbeit eine Ausschüttung.
Deepbit.net 3000 Ghash/s
Bitcoin.cz 1600 Ghash/s
Liste von Pools
Für Bitcoin.cz ergibt sich eine durchschnittliche Rechenzeit von 40 Minuten.
Nachdem bereits gezeigt wurde, dass man Bitcoins kaufen kann, folgt hier nun ein Artikel über die Berechnung von Bitcoins.
Berechnung von BTC
Wie bereits erwähnt gibt es auch die Möglichkeit, sich BTC durch Aufwendung von Rechenzeit (sog. Mining) selbst zu berechnen. Man berechnet sich nicht wirklich BTC sondern signiert bisherige Transaktionen in sogenannten Blöcken und erhält ...