Wie werden die Bitcoin und Etherum Währungen beim Mining vor kaputtem RAM geschützt?



  • Wenn Hans und Joe auf ihren Desktoprechner Bitcoins oder Etherum minen und die alten Gurken kaputten Speicher haben, wie wird dann das Onlinegeld vor falschen Berechnungen geschützt?


  • Mod

    ECC schrieb:

    Wenn Hans und Joe auf ihren Desktoprechner Bitcoins oder Etherum minen und die alten Gurken kaputten Speicher haben, wie wird dann das Onlinegeld vor falschen Berechnungen geschützt?

    Weil jeder sofort sehen kann, dass ihre Rechenergebnisse nicht stimmen?



  • Dazu müsste es man nachrechnen, also doppelte bis mehrfache Arbeit wenn der gleiche Task mehrfach gemined werden muss.



  • Nein. Überprüfen ist einfacher. Sonst könnte man ja auch absichtliche Falsch-Miner nicht erkennen.



  • ECC schrieb:

    Dazu müsste es man nachrechnen, also doppelte bis mehrfache Arbeit wenn der gleiche Task mehrfach gemined werden muss.

    Mining ist so aufwändig weil man neue Blöcke nicht direkt bestimmen kann. Man kann nur Block nach Block generieren und diese dann überprüfen. Durchschnittliche PCs können schon mehrere Millionen Blöcke pro Sekunde prüfen. Da ist es gar kein Problem potentielle neue Blöcke zu überprüfen.


  • Mod

    Nochmal zur Erklärung für ganz Dumme: Das was man da mined, sind vereinfacht gesagt Zahlen, die einen bestimmten Hash erzeugen. Da der Hash nicht umkehrbar ist, kann man neue Coins nur durch Ausprobieren finden. Was ziemlich aufwändig ist, da es ziemlich viele Zahlen gibt, die man insgesamt durchprobieren muss. Der Hash selber ist aber jeweils ziemlich trivial zu berechnen, die Schwierigkeit kommt alleine aus der großen Zahlenmenge. Wenn also jemand behauptet, er hätte eine solche Zahl gefunden, dann kann jeder ganz einfach prüfen, ob das auch wirklich stimmt. Und das sollte auch jeder prüfen, nicht nur als Schutz gegen Rechenfehler, sondern vor allem auch, weil es notwendig ist. Denn sonst könnte ja jeder kommen und behaupten, er hätte etwas gefunden.



  • Tobiking2 schrieb:

    ECC schrieb:

    Dazu müsste es man nachrechnen, also doppelte bis mehrfache Arbeit wenn der gleiche Task mehrfach gemined werden muss.

    Mining ist so aufwändig weil man neue Blöcke nicht direkt bestimmen kann. Man kann nur Block nach Block generieren und diese dann überprüfen. Durchschnittliche PCs können schon mehrere Millionen Blöcke pro Sekunde prüfen. Da ist es gar kein Problem potentielle neue Blöcke zu überprüfen.

    Huch?

    Das schwierige am Mining hat mit den Blöcken nicht direkt was zu tun, sondern mit dem geforderten Proof-of-Work. Wenn man diesen erbracht hat (=genug Glück hatte eine gültige Lösung für die Proof-of-Work Aufgabe zu finden), dann kann man nen Block bauen und zusammen mit der Lösung signieren und submitten. Dieser Teil ist aber vergleichsweise trivial und billig. Genau so wie das Überprüfen der Lösung vergleichsweise trivial und billig ist.



  • @SeppJ
    Ist vielleicht wieder Haarspalterei, aber vielleicht auch nicht. Vielleicht auch nicht, weil z.B. ich hatte da lange Zeit ne falsche Vorstellung, dadurch dass es oft genau so beschrieben wird wie du es beschrieben hast.

    Der gefundene Hash "ist" keine Coin. Er ist bloss nötig damit andere Peers den Block akzeptieren. Und mit jedem neuen Block darf sich der Aussteller des Blocks selbst, aus dem nichts heraus, einen bestimmten Betrag Coins gutschreiben. Die Coins haben aber ansonsten mit der gefundenen Lösung des verwendeten Proof-of-Work nichts zu tun.


  • Mod

    Deswegen habe ich auch mit Absicht nirgendwo geschrieben, dass es eine Coin wäre, sondern nur, dass es das ist, was beim Miningvorgang gesucht wird. Ich hatte sogar zuerst angefangen eine andere Erklärung zu schreiben, die stärker der Populärerklärung ähnelte, und habe sie dann nochmals komplett geändert, weil mir genau die von dir beanstandete Ungenauigkeit ebenfalls unangenehm aufstieß.

    Falls bei meiner Erklärung immer noch unklar war, dass die gesuchte Zahl keine eigentliche Bitcoin ist, dann war das leider genau das Gegenteil meiner Absicht. Danke für die weitere Klarstellung.



  • Hmja, ich sehe deine Beschreibung kann man so oder so verstehen. Ich hatte den Satz "Da der Hash nicht umkehrbar ist, kann man neue Coins nur durch Ausprobieren finden." falsch verstanden. Also so als ob du damit Hash == Coin gleichsetzen wolltest.

    Aber schön dass ich dich damit nicht genervt habe, denn das war auch nicht meine Absicht 🙂


  • Mod

    hustbaer schrieb:

    Hmja, ich sehe deine Beschreibung kann man so oder so verstehen. Ich hatte den Satz "Da der Hash nicht umkehrbar ist, kann man neue Coins nur durch Ausprobieren finden." falsch verstanden. Also so als ob du damit Hash == Coin gleichsetzen wolltest.

    Oh, Mist, da steht noch Coins vom ersten Entwurf, bevor ich es geändert habe. Die Stelle habe ich übersehen beim Überarbeiten.



  • Hallo,

    eine Blockchain besteht aus einzelnen verlinkten Blöcken. Jeder einzelne Block sieht in etwa so aus:

    Struct Block
    {
    - Zeitstempel
    - Index
    - Daten
    - Proof of Work
    - Hash des Vorgängerblocks
    }

    Da der Hash des Vorgängerblocks mit eingeht schützt der jeweils aktuelle Block den Vorgängerblock, der wieder seinen Vorgängerblock schützt usw.

    Der "Trick" ist nun, dass für den Block ein Hashwert bestimmt werden muss, der bestimmte Regeln erfüllt. Damit diese Regel erfüllbar ist, ist der "Proof of Work" eine frei bestimmbare Zahl. Wie schon in vorherigen Posts angemerkt wurde, ist die Hashoperation nicht einfach umkehrbar. Die Vorgehensweise ist also, viele verschiedene Werte für "Proof of Work" auszuprobieren, wobei für jeden Versuch der Hashwert über den gesamten Block zu berechnen ist.

    Beispiel:
    Sagen wir mal die Regel würde besagen, es muss ein Hashwert < 1000 gefunden werden. Dann setzen wir als Proof of Work z.B 1 ein. Jetzt kommt als Hashwert blöderweise z.B. 345634 raus. Also setzen wir als Proof of Work nun 2 ein und berechnen wieder den Hashwert über den Block. Jetzt kommt z.B. 545234 raus. Dies wiederholt man mit neuen Poof of Work Werten, bis der Hash einen Wert < 1000 ergibt. Dies ist dann die Lösung.

    Hierfür können Milliarden (oder mehr) von Versuchen nötig sein. Wenn aber ein "Proof of Work" gefunden wurde der einen Hashwert < 1000 erzeugt ist die Überprüfung einfach. Setzte den gefunden Proof of Work ein und berechne den einen Hashwert. Ist dieser < 1000 ist es eine gültige Lösung.

    Findet man einen gültigen Proof of Work Wert, wird dieser bekannt gegeben. Einige andere Berechnen diesen einen Hashwert nach. Stellen fest, dass er korrekt ist (oder eben nicht), akzeptieren den neuen Block (oder eben nicht). Wurde der neue Block akzeptiert wird mit dem nächsten Block begonnen.

    Beim Mining von Ethereum setzt also der Computer stupide immer neue Zahlen für den "Proof of Work" ein berechnet den Hashwert und bestimmt ob das Ergebnis mit der Regel übereinstimmt. Da dies für jeden Versuch unabhängig von jedem anderen Versuch ist lässt sich das schön parallelisieren. Daher werden ja auch Grafikkarten (GPUs) verwendet.

    In der Realität ist es etwas komplizierter. So weit ich weiß muss das Ergebnis (Hashwert) in einem Bereich liegen [x,y]. Damit wird die "Schwierigkeit" des Mining angepasst. Um so mehr sich beteiligen, desto kleiner wird dieser Bereich in dem die Hashwerte akzeptiert werden.

    Aber was ist nun beim Pool Mining? Hier werden die zu überprüfenden "Proof of Work" an die Mitglieder des "Mining Pools" verteilt. Aber warum reicht dann der "Finder" nicht den gefundenen "Proof of Work" wert für sich alleine ein?

    Weil der Algorithmus abgewandelt wird. Vom Mining Pool werden nicht nur Hash Ergebnisse im Bereich [x,y] akzeptiert, sondern alle im Bereich [0,y]. Der Bereich wird also vergrößert. Ein "Proof of Work" der ein Hash in diesem weiteren Bereich generiert ist ein "Share". (Daher sieht man auch diese "Share" Accepted Nachrichten. Man bekommt also schon anteilig Belohnung ab, wenn man ein Ergebnis in diesem erweiterten Bereich findet. Der Mining Pool selbst berechnet dann von all den eintreffenden "Shares" ob diese auch die Wirkliche Regel mit Hashwerten im Bereich [x,y] erfüllen. Wenn dies so ist, wird der neue Block akzeptiert und die Belohnung an alle die mit "Shares" dazu beigetragen haben verteilt.

    Ein "Stale Share" ist dann einfach ein Share, der von einem Miner eingereicht wird, obwohl für den aktuellen Block schon ein Share mit einem Hashwert im Bereich [x,y] gefunden wurde. Der also "zu spät" eingereichte "Stale" Share wird abgelehnt (da nicht mehr nötig).

    Um zur eigentlichen Frage zurückzukommen. Wenn ein Miner falsche "Prof of Work" Werte (Shares) einreicht, muss jeweils nur ein Hashwert nachgerechnet werden. Dieser besagt dann, dass die Lösung falsch war. Daher ist das Nachrechnen von Ergebnissen um Größenordnungen "einfacher" als eine Lösung zu finden.


Log in to reply