Wie man Daten aus der 'getblocktemplate'-Anfrage hasht

Ich habe viele Artikel gelesen und versucht zu verstehen, wie man die von getwork; habe ich aber total übersehen getblocktemplate.

Ich versuche nur zu verstehen, wie alle folgenden Daten zusammengesetzt werden, um Hashes zu generieren, um einen gültigen Block zu bilden (unter Verwendung verschiedener Nonces).

Entschuldigung, falls dies bereits beantwortet wurde. Ich weiß, dass es viele Artikel darüber gibt, wie man einen Block-Header zusammenstellt und Midstate verwendet, etc. Das meiste davon verstehe ich; aber die Datenzusammensetzung von getblocktemplateist ein bisschen anders und hat mich wirklich umgehauen.

Wenn jemand so freundlich wäre, den gesamten Hashing-Prozess (aus Mining-Sicht) zu erklären, würde ich mich sehr darüber freuen. Eine programmatische Erklärung wäre ideal, da ich versuche, meinen eigenen Mining-Client zu erstellen.

{
    "result":{
        "version":2,
        "previousblockhash":"00000000000000075f2f454573766ffae69fe41d6c7ccfcabbf8588fcd80ed52",
        "transactions":[
                  {     
                        "data":"0100000001cba672d0bfdbcc441d171ef0723a191bf050932c6f8adc8a05b0cac2d1eb022f010000006c493046022100a23472410d8fd7eabf5c739bdbee5b6151ff31e10d5cb2b52abeebd5e9c06977022100c2cdde5c632eaaa1029dff2640158aaf9aab73fa021ed4a48b52b33ba416351801210212ee0e9c79a72d88db7af3fed18ae2b7ca48eaed995d9293ae0f94967a70cdf6ffffffff02905f0100000000001976a91482db4e03886ee1225fefaac3ee4f6738eb50df9188ac00f8a093000000001976a914c94f5142dd7e35f5645735788d0fe1343baf146288ac00000000",
                        "hash":"7c90a5087ac4d5b9361d47655812c89b4ad0dee6ecd5e08814d00ce7385aa317",
                        "depends":[],
                        "fee":10000,
                        "sigops":2
                  },
                  ...
            ],
        "coinbaseaux":{
            "flags":"062f503253482f"
        },
        "coinbasevalue":2501100000,
        "target":"0000000000000026222200000000000000000000000000000000000000000000",
        "mintime":1379549850,
        "mutable":[
            "time",
            "transactions",
            "prevblock"
        ],
        "noncerange":"00000000ffffffff",
        "sigoplimit":20000,
        "sizelimit":1000000,
        "curtime":1379553872,
        "bits":"19262222",
        "height":258736
    },
    "error":null,
    "id":"curltest"
}

Antworten (2)

Das Wiki hat eine extrem gute Erklärung, mit einem Python-Durchlauf, der Sie von der GBT-Ausgabe zur gemeinsamen Einreichung führt. Sie können sich auch einige der Implementierungen in Luke-Jrs "gmp-proxy" ansehen, der GBT-Antworten in eine getworkkompatible Schnittstelle übersetzt.

https://en.bitcoin.it/wiki/Getblocktemplate

https://gitlab.com/bitcoin/eloipool/blob/master/gmp-proxy.py

Ich habe mir das durchgelesen, aber viele Begriffe sind neu für mich und schwer zu verstehen. Zum Beispiel erklärt es nicht die übergebenen Parameter und deren Bedeutung - {"capabilities": ["coinbasetxn", "workid", "coinbase/append"]}. Auch bei den Rückgabedaten - '"mutable":["time","transactions","prevblock"]vs "mutable": ["coinbase/append"]. In meiner GBT-Antwort hat es coinbaseaux flagsstatt coinbasetxn data- was bedeutet das? Was bedeutet genau height? Wie setzt sich das alles zusammen? Es erklärt nicht die kleineren Details.
Vielen Dank für das Posten des gmp-Proxy - ich werde mir das ansehen.
Leider kenne ich mich im Umgang mit GBT noch nicht einmal so gut aus. Die Dokumentation enthält nur sehr wenige Details, und es ist tatsächlich ziemlich ungewöhnlich, so viele Details zu einem internen Thema im internen Wiki zu haben. Ich würde vorschlagen, mit einem der Entwickler auf freenode#bitcoin zu sprechen, vielleicht versuchen Sie, Luke-Jr zu fangen, wenn er in der Nähe ist. Wenn jemand weiß, wie GBT funktioniert, dann derjenige, der es entwickelt hat.
Ja, ich bin gerade diesem Kanal beigetreten, aber alle scheinen untätig zu sein. Hoffentlich sieht jemand meinen Hilferuf.
#bitcoin-dev wäre dafür der richtige Kanal.

Sie möchten sich wahrscheinlich die BIPs 22 und 23 sowie den Quellcode von libblkmaker ansehen (der ein Anwendungsbeispiel enthält).