Solo-Miner schafft das Unfassbare und findet gültigen Block

Das Teil ist sowas von extrem zu teuer für die mickrige Hashrate. Das ist rausgeschmissenes Geld. Vor allem der Energieverbrauch ist viel zu hoch für die Leistung.

1 „Gefällt mir“

Gibt es Alternativen für die „Wohnzimmer“ mit max. 300 Watt? Das Teil ist gleichzeitig eine Node! Ich kenne mich was BTC Mining :pick: betrifft fast garnicht aus, dachte so ein „all in“ Paket wäre nice ?:woman_shrugging: Wie gesagt, es geht nicht unbedingt um Profit, eher um Netzwerk Unterstützung/Dezentralisierung.

Es währe nice wenn der Energieverbrauch zu Hashrate ein sinnvolles Verhältnis hätte. Aber in dem Fall ist der Energieverbrauch 5 - 10 mal höher als bei einem modernen ASIC Miner. Ich vermute mal das dort ‚antike‘ ASICs verbaut sind.

Das Netzwerk unterstützen ist eine gute Idee, aber zur Veranschaulichung mal eine Analogie.

Ein Wald brennt. Überall sind Feuerlöschgerät und spritzen Wasser in die Flammen. Du bist dort mit einem Glas Wasser aufgetaucht. Auf dem Weg dahin hast du aber von deinem Glas Wasser schon über die Hälfte selbst getrunken. Die Handeln stört aber niemanden.

Eventuell hat ja jemand eine bessere Analogie. Ich bin nicht wirklich kreativ. Schon gar nicht um die Zeit.

Für den Miner Hersteller ist das aber ein Geiles Geschäft. Für Hardware 1000 Kröten zu kassieren die maximal 200 in der Herstellung kostet ist ein gutes Geschäft.

2 „Gefällt mir“

:joy::joy::joy:das ist echt guter Vergleich mit n Glas Wasser :droplet::joy::joy::joy: , da wird erstmal bewusst wie sinnlos und unbedeutend so ein miner ist :+1: dann bleibe ich erstmal beim Stick, teste wie das ganze in Solo funktioniert…lass mich raten, der Stick ist auch total überteuert :sweat_smile: und in Solo stehen die Chancen zur ca. 1:18 Milliarden, also praktisch 0. Würde gerne wissen mit welchem Gerät die Solominer den Block gefunden haben, das war doch erst vor kurzem?

1 „Gefällt mir“

Stehen die Chancen wirklich so schlecht? Wie berechnet man das? Wenn ich mir die Tabelle beim Kanopool ansehe (KanoPool - Solo) finde ich die Chance/Tag gar nicht so schlecht.
Bei 25GH/s wäre das ca. 1:60Millionen. Die Chance den Lotto Jackpot zu knacken sind geringer. Ich mein das Teil verbraucht ja nicht viel Strom.
Schade das solche kleineren USB Miner nicht mehr gebaut werden.
Den Miner von Futurebit hab ich auch schon gesehen, finde den aber wirklich zu teuer. Also wenn man wirklich Solo Minen möchte, finde ich sollten die Anschaffungskosten und auch die laufenden Kosten möglichst gering sein, damit es auch nicht schlimm ist, wenn dabei nix rum kommt. Und das ist ja ziemlich wahrscheinlich.

Ich denke die Solominer, die oben erwähnt sind, werden schon die größeren Geräte haben, bei der Hashrate.
Aber man muss auch bedenken, das die meisten wahrscheinlich ehr in einem Pool minen und es somit natürlich auch seltener „Solo-Miner“ gibt, die einen Block finden.
Bei den teureren Geräten muss man auch irgendwie das Geld wieder raus bekommen und da finde ich Solo-Minen schon ehr riskant.
Also grundsätzlich kann man schon sagen, dass sich das Solo-Minen mit hoher Wahrscheinlichkeit nicht lohnen wird. Aber wenn keine großen Kosten entstehen, kann man es ja auch einfach nebenbei laufen lassen.

2 „Gefällt mir“

Deine Überlegung ist schon richtig. Das Problem ist halt das man sehr wahrscheinlich niemals etwas bekommt. Das ist wie Lotto wo man nur was mit 6 Richtigen bekommt. Kann man machen.

1 „Gefällt mir“

Das stimmt. Und das sollte einem dann schon bewusst sein.

Außerdem kann man im Pool theoretisch sogar effizienter Minen, einfach durch Kenntniss der Anwesenheit von anderen Minern.

Beispiel der Nonsins-Werte: Ein Einzelminer muss 1 bis 4294967296 Werte durchsuchen und jeden einzelnen Wert testen. Zwei Einzel Miner würden genau das gleiche tun.

Wenn man aber jetzt Zwei miner zusammenhängt und sagt, dass der Erste 1 bis 2147483648 Berechnet und der Zweite 2147483648 bis 4294967296 berechnet dann haben die Miner im Verbund eine Höhere Chance auf einen Treffer ans Zwei Miner die unabhängig voneinander Minen, alleine weil sie kommunizieren können welche Werte schon durchgetestet wurden und nicht nochmal getestet werden müssen.

Auf größeren Skalen (wo eh alle Werte innerhalb von millisekunden durchgetestet sind) kann man aber das gleiche Prinzip mit der Permutation der Transaktionen machen.

Diese Koordination zwischen den Minern ist natürlich auch kostenaufwendig und deswegen will der Pool auch bezahlt werden.

2 „Gefällt mir“

Was das angeht frage ich mich, wieviel das im Endeffekt wirklich ausmacht. Es gibt doch kein wirkliches System für die Berechnung. Das ist doch reiner Zufall wie ich das verstehe. Der Vergleich mit dem Würfel kommt mir da wieder in den Sinn.
Klar es würde nicht 2mal die gleiche Berechnung vorkommen, aber bei der enorm großen Zahl, wie oft kommt das da wirklich vor?

Sagen wir mal so: Jeh nachdem wie du im Suchbereich suchst kann es häufiger zu Kollisionen kommen.

Wenn zwei Miner zB. so eingestellt sind, dass sie systematisch von unten anfangen hochzuzählen dann machen sie unabhängig voneinander in der Suche zwischen 1 bis 4294967296 exakt das selbe.
In diesem Fall würde der schnellere Miner oder bei Gleichstand der mit der schnelleren Internetverbindung immer alle Rewards bekommen.
Wenn du in diesem Beispiel aber mit Zufallszahlen loslegst, dann kannst du dir nach 4294967296 Würfen ziemlich sicher sein, dass du nicht alle Zahlen durchprobiert hast und einige doppelt getroffen hast.

Ohne genau die Miningsoftware zu kennen denke ich dass die Anordnung der transaktionen mehr oder weniger zufällig gewählt wird aber die Nonsence-Werte einfach von 0 bis voll durchprobiert werden, weil dass eben recht fix geht mit guten Minern.

Aber die Minensoftware hat mit sicherheit noch gute andere Trix drauf, die relevant im Poolmining sind.
Ich sage ja nur mit den Beispielen, dass es möglich ist im Verband einen Vorteil zu haben. Das kann man sich auch ganz schnell mit einer eigenen Miningsimmulation beweisen.

package de.phpie.sha256testjava;

/**
 * Created by DasPie on 03.05.2015.
 *
 * Diese Klasse simuliert einen Miningprozess mit 4 verschiedenen teilnehmern.
 * Die Einzelpersonen P1 und P2 minien komplett unabhängig voneinander.
 * Die Personen P3 und P4 haben sich zusammengeschlossen.
 *
 * Die Miningregeln sind einfach: wer einen Hashwert beginnend mit 0 erhällt bekommtdie Belohnung.
 * Jeder teilnemer kann pro Zeit (Looptime) genau einmal Hashen, es herschen also exakt gleiche bedingungen.
 * Der zu hashende String ist {blocknummer}+{nonsenz}
 *
 * Wer wird langfristig gewinnen?
 *
 */

public class miningtest{

    private boolean forcestop;//mit false wird die Zeitschleife unterbrochen
    private final int LOOPTIME;//wie lange wird nach einem Tick gewartet

    public miningtest( int looptime){
        LOOPTIME = looptime;
    }

    public void run(){
        forcestop = true;

        Sha256 tohash;

        long p1einzelgewinn = 0; // zählt den gewinn von P1
        long p2einzelgewinn = 0; // zählt den Gewinn von P2
        long poolgewinn = 0; // zählt den Einzelgewinn von P3 und P4

        long wertebereich = 20; // der Bereich in dem gültige Blöcke gesucht werden dürfen. Es kann vorkommen, dass dieser Wertebereich kein Erfolg bring, dann wird der Block als ungültig gezählt.

        long blocknr = 0; // die Anzahl an Blöcken, die gefunden wurde
        long poolnr = 0; // temporäre Nummer, mit der der Pool mined
        long ungultig = 0; // zählt die Anzahl von ungültigen Blockbereichen

        while(forcestop) {

            //p1 einzel
            tohash = new Sha256(blocknr + " " + ((int)(Math.random()*wertebereich)));
            if(tohash.output(true).charAt(0) == '0'){
                p1einzelgewinn+=2;
                blocknr++;
                poolnr = 0;
                System.out.println("P1 gewinnt ("+p1einzelgewinn + " | "+ p2einzelgewinn + " | "+ poolgewinn +")");
            }
            //p2 einzel
            tohash = new Sha256(blocknr + " " + ((int)(Math.random()*wertebereich)));
            if(tohash.output(true).charAt(0) == '0'){
                p2einzelgewinn+=2;
                blocknr++;
                poolnr = 0;
                System.out.println("P2 gewinnt ("+p1einzelgewinn + " | "+ p2einzelgewinn + " | "+ poolgewinn +")");
            }

            poolnr++;
            tohash = new Sha256(blocknr + " " + poolnr);
            if(tohash.output(true).charAt(0) == '0'){
                poolgewinn+=1;
                blocknr++;
                poolnr = 0;
                System.out.println("P3 gewinnt ("+p1einzelgewinn + " | "+ p2einzelgewinn + " | "+ poolgewinn +")");
            }

            poolnr++;
            tohash = new Sha256(blocknr + " " + poolnr);
            if(tohash.output(true).charAt(0) == '0'){
                poolgewinn+=1;
                blocknr++;
                poolnr = 0;
                System.out.println("P4 gewinnt ("+p1einzelgewinn + " | "+ p2einzelgewinn + " | "+ poolgewinn +")");
            }
            if(poolnr>20){
                // es gibt keinen Gültigen Block im Wertebereich.
                // Wir nemen an, dass ein anderer Miner den Block nun gemeint hat.
                // Er fällt aus der hier betracteten Miningstatistik einfach raus
                blocknr++;
                poolnr = 0;
                ungultig++;
                System.out.println("Kein Gewinn möglich. Das ist bei "+blocknr+ " Blöcken genau "+ungultig + " mal passiert. ("+(100f*(float)ungultig/(float)blocknr)+"%)");
            }


            try {
                Thread.sleep(LOOPTIME);
            } catch (InterruptedException e) {
                if (forcestop) {//wenn das spiel nicht unterbrochen werden sollte
                    e.printStackTrace();
                    System.out.println("unerwarteter Zeitfehler, spiel stoppt");
                }//ansonsten wurde es nur früher beendet
                return;
            }
        }

    }

    public void stopgame(){
        forcestop = false;
    }

}

Nur weil zwei Miner die Nonce genau gleich zählen sind andere Parameter im Input doch unterschiedlich und führen zu völlig unterschiedlichen Hashwerten. Die Transaktionen und deren Reihenfolge, der Timestamp, die Coinbase Transaktion (inkl. extraNonce, Poolinfo, OP_RETURN, …) und die Nonce sind niemals bei zwei Minern exakt gleich, und wenn, dann nur zufällig.

Die Nonce wird sowieso mehrfach innerhalb einer Sekunde komplett durchgezählt. In der extraNonce wählen die Miner dann individuelle Werte.

1 „Gefällt mir“

Du hast recht, wenigstens die Ausschüttungsaddresse der Belohnung ist für jeden Einzelminer unterschiedlich und somit zwangsweise der Merkletree :innocent:
Damit ist die Nonce komplett egal weil ja schon ein Unterschied reicht für komplett andere Hashes.
Ja mein Beispiel ist damit etwas zu einfach gewählt.

Edit: Aber wie läuft es bei Pools, da ist doch die Ausschüttungsaddresse für alle Miner im Verbund doch dieselbe?
Dann kann und sollte man doch einen Nutzen daraus ziehen dass man keine zwei Miner die gleiche Transaktionsreihenfolge vorgibt um Kollisionen auszuschließen?

Ich kenn mich da jetzt auch nicht genauer aus, aber jeder Miner spielt sowieso lokal mit dem Timestamp (dieser kann ausgereizt werden und muss nicht exakt der aktuellen Uhrzeit entsprechen – Siehe dieser Thread) und der Coinbase Transaktion.

Die bereits angesprochene extraNonce wird soweit ich weiß unterteilt in eine Nonce die vom Miner inkrementiert wird (sobald die Nonce im Header ausgereizt ist) und einen Teil den er vom Pool als Konstante gestellt bekommt. Damit kann der Miner eindeutig identifiziert werden und das sorgt auch für einzigartige Hashwerte bei jedem Miner im Pool.

Sonstige Informationen in der Coinbase Transaktion, wie der Poolname oder Output Adresse, sind natürlich bei allen Minern im Pool gleich.

2 „Gefällt mir“

Ich grübel schon länger darüber nach, wie Mining Pools die Hash Power ihrer Nutzer verifizieren. Gibt es eine mathematische Möglichkeit, vielleicht eine Art Check Summe, um schnell Hashes zu validieren?

Andersherum wäre es auch für jeden einzelnen Teilnehmer interessant zu wissen wie stark die Hash Rate des restlichen Pools ist, um die Höhe der eigenen Belohnung validieren zu können.

Du meinst wie die Hashrate von einzelnen Teilnehmern im Pool bestimmt wird?

Der Pool setzt intern ein höheres Target (also eine niedrigere Difficulty), sodass es für einzelne Miner innerhalb des Pools einfach ist einen „gültigen“ Block, das nennt man dann auch einen Share, zu finden. Wird dann ein Block gefunden der das Target vom Bitcoin Netzwerk erfüllt, werden alle Teilnehmer entsprechend der Shares die sie gefunden haben belohnt.

So können die Rewards fair verteilt werden. Hashrate kann man schließlich nicht einfach „messen“.

Das ist näher und ausführlicher in Mastering Bitcoin Kapitel 10 erklärt:

4 „Gefällt mir“