Wo kann ich eine Eingabe sehen, die zu einer Lösung führt?

Nach meinem Verständnis muss also eine Eingabe (Blockheader) geändert werden (über eine Nonce oder einen anderen Mechanismus), die durch einen SHA256 geleitet wird, um eine Ausgabe mit einer X-Anzahl führender Nullen zu generieren.

Ich habe (manuell) versucht, nur zum Spaß, eine Eingabe zu finden, die ohne Glück sogar 2 aufeinanderfolgende führende Nullen ergibt.

Wo finde ich eine Eingabe, damit ich sie zu einer korrekten Ausgabe hashen kann?

Ich glaube, es ist ein Blob, der gehasht ist. Vielleicht zeigt der "Rohblock" von BlockExplorer jedoch die Daten aus dem Blob: - blockexplorer.com/rawblock/…

Antworten (3)

Die Bytes, aus denen ein Block besteht, so zu ordnen, dass Sie sie hashen können, scheint ziemlich komplex zu sein, aber wenn Sie nur nach einer beliebigen Zeichenfolge suchen, die zu etwas gehasht wird, das mit ein paar Nullen beginnt, können Sie mit einem einfachen Shell-Befehl suchen :

$ i=0; while true; do echo -n $i | sha256sum | grep -q '^000' &&
      echo $i $(echo -n $i | sha256sum); ((i++)); done
  886 000f21ac06aceb9cdd0575e82d0d85fc39bed0a7a1d71970ba1641666a44f530 -
 1039 00037f39cf870a1f49129f9c82d935665d352ffd25ea3296208f6f7b16fd654f -
 3633 00039a15178b11924de22fd1a02f6efb00d8af33c171a6b67614871e8d6012da -
 5848 000c15d0ea8224c9649c9adee30c3030ee769b2b5f6d6594f94d446adf60396b -
12823 000b07fd81c1770b514fb2998527b682c4600e0e76868011bae89a265505f652 -
20069 0002dc999ce736640267221e6a004da4b837667ca7de5c8eb92832927495013f -
21098 0007256972781977cbceab0e2cbdc57e20512a6f2975296852029da5bc8aad30 -
21244 0002a1cf14e9c1acaa8255fd6777d916d3aec6bc1f3c8a3d0a3a89a5eba87970 -
22244 00092cab56c063b7dadedbb2282decacf40d6eb31319a7ef9a6e7e7a5e0d49b7 -
23452 000f910e13e5d1b34df0a3a0fb537acaf513be60d650286e45dcdbd3d8e698f6 -
30050 000954408f96d137e3cfe0711be7856f44c4b6821d5a5d4955c87748a34118ed -
32754 000faf0e6178d6edb8490f90dcbbc33d33bf0de4783b5722bdcefff05d8748b1 -
41697 000580eb995f2a45fffce7c2651e542668ea65c1b4b89f5057601698894009ae -
48559 000eb4a177d716901148633ce477d51675b2677ba45fbc0da5125d35e1feb52b -
51623 0006412efdac205d9da274bf441e567da353fc59ee098239255bf532c9562e90 -
53278 0006220135126a47891f08c4dea54763bcb3675d322e49f064ed80c1491a422a -
60147 000f008e65121d99595e27fcb7a6ba12bc85db5289bd36b00a2654170d8d8404 -
64478 00060ae0df51bd4b2a190eb8d8bd927426601899b2bbee136a4d06dd1f39159b -
65565 000b1e1a1268f245d534e7c9ea2cef6c7123e66c9ffa5ea8848e2319d163662f -
77379 00064a5ab8c2a955d74b6b1e537d76314c61811323c803dd38cbe1c9ed111620 -
84057 0006da78c87d0454d102ec03e609a7b1a22381693e020ab1ebdf0050af9f7a7c -
86423 0009d671d687b1e712a501a25b1887bb93d091144d294a03e7368df35faeebfc -
88484 0000a456e7b5a5eb059e721fb431436883143101275c4077f83fe70298f5623d -
90947 000318ec4d26f57a5facb03401d2f879a4b5c3cb95bc2bdca378ce078833733d -
91415 0001528a3705455624f234a9066cca979b7516cdc417f5e39845b32eb107d467 -
94286 000846f85c9630becba208506e1585d2b09340e33860887403a56fd4eeaa7ea0 -
96635 0001da624eada828c3f744b73bacd8e15cf0d3e288bd092d68167dd1bab66e76 -
96952 00064ea7e7d6798cc16d9e7723150ee9a170416f05a61b7d45edd2c28ecd69f6 -

Hier hash ich Ziffernfolgen und suche nach Hashes, die mit mindestens drei Nullen beginnen. Sie würden erwarten, im Durchschnitt alle 4096 Versuche einen zu finden, aber wir hatten Glück und fanden drei in den ersten 4096 Versuchen. Der Shell-Befehl würde ewig laufen. Ich habe die Ausgabe nach den ersten 100.000 Versuchen einmal abgebrochen.

Wir würden erwarten, alle 65.536 Versuche einen Hash zu finden, der mit 4 Nullen beginnt, und wir brauchen tatsächlich 88.484 Versuche, um den ersten zu finden:

$ echo -n 88484 | sha256sum
0000a456e7b5a5eb059e721fb431436883143101275c4077f83fe70298f5623d  -

Das '-n'-Flag zum Echo bedeutet, 'nur 88484 ausgeben, kein Zeilenumbruch am Ende setzen'. Der Zeilenumbruch würde den Hash ändern.

Wir können auch die Liste der Wörter im offiziellen Scrabble-Wörterbuch durchsuchen, um die fünf mit Hashes zu finden, die mit vier oder mehr Nullen beginnen:

$ cat ~/sowpods.txt | tr A-Z a-z | while read x; do echo -n "$x" |
      sha256sum | grep -q '^0000' && echo $x $(echo -n $x | sha256sum); done
debearded 0000fa20ee307c4f15a53bf69ae0ca1c66c675b0ae94781ff5b6f8cff90ebcca -
goaltenders 00002e68c9d3d1fc5d3178bee91040efbeb4ac9ea7722c834fa5d71b2e3845cd -
guilefulness 0000d79e1c6964e6806e9bbdaaaecb63dfabdb498f72bf28944119de1fe90d63 -
mismatchment 0000bb6ede9f29a01d35e15320229aa0fbd73cf8eb8bc0aac80d6a97fba63fee -
santalins 00008514dabda7cffdb10f57e492fadbd8e0cab00427e0bfa4f54248b602a4f0 -

und dasselbe für Großbuchstaben:

$ cat ~/sowpods.txt | while read x; do echo -n "$x" |
      sha256sum | grep -q '^0000' && echo $x $(echo -n $x | sha256sum); done
APPLICANT 0000ca01adc973c2a5a8e6a30134f07396d088b6d65025292f6ff97b237cab4d -
JACKEROOED 0000182955fd82edd0acc949ea5050a0f8c7107c5dbed07f94f474cc1c31be90 -
KYE 0000331b9f8ffef05bbee59dca2a7b03e281e22bf1d3d9324f607ad8eb1fbb64 -
RECREANCES 0000392b2a9f2d9ff2bbc35b8fddfdbb91f73cb7a43602782280ae69d13146e3 -
SCHILLERIZE 000010f44bb61a7805f10dbd90c3c51a67da52001858ee45e0d015c38a344fb1 -
STRIVINGLY 000034f8005572e686cc2f4628107bd16e339d86cbe4d5309105ebb42e8b07dd -
UNDETERRED 00006433ddbde4028b88a4ca8d6c578641462697134bd1936693a1f1b05b4224 -
WIDDIES 000000c71f1bda5b63f5165243e10394bc9ebf62e394ef7c6e049c920ea1b181 -

Notice WIDDIESist das einzige mit einem Hash, das mit fünf Nullen beginnt (es beginnt tatsächlich mit sechs Nullen – eine Chance von 1 zu 16,7 Millionen), was es zum (offiziellen britischen Scrabble-)Wort mit dem niedrigsten sha256-Hash macht.

Ich hatte das gleiche Problem vor etwa einem Jahr. Sie sollten sich vielleicht mit dem Hashing des Genesis-Blocks befassen . In seiner Hex-Form sieht es so aus:

0100000000000000000000000000000000000000000000000000000000000000000000003BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A29AB5F49FFFF001D1DAC2B7C0101000000010000000000000000000000000000000000000000000000000000000000000000FFFFFFFF4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73FFFFFFF0100F2052A01000000434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC00000000

Wenn es richtig gehasht ist, sollte es folgende Form annehmen:

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f (kann in umgekehrter Reihenfolge erscheinen).

Beachten Sie nur, dass die Hashing-Funktion manchmal etwas knifflig sein kann.

Siehe das Merkle-Baum-Beispiel:

Beachten Sie, dass die Byte-Reihenfolge für die Anzeige dieser Hashes im Grunde genau umgekehrt ist als die normale Notation. Ich verwende Hex-Strings ohne Anführungszeichen, um Bytes anzuzeigen, wie sie im Speicher sein würden, und in Anführungszeichen, um uint256s in Hex wie in anzuzeigen blockexplorer oder von bitcoin rpc zurückgegeben

2dd3ce205cf8d03f773d46d24becfd72c766deaa0d1327d7e4c810265f59a313 Lesen Sie es noch einmal rückwärts, weil wir Sachen in Little-Endian anzeigen, und ... machen Sie dasselbe für "d173 ..." und "59d1 ..." und ... "f6ae335dc2d2aecb6a255ebd03caaf6820e6c0534531051066810080e0d822c8" letztes Paar ... "a751efbeabe73bdf9d08df5760104feff915d9d807dc283d80c283d80c6"

now we only have 3, so last one gets concat'd with itself "13a3595f2610c8e4d727130daade66c772fdec4bd2463d773fd0f85c20ced32d" "f6ae335dc2d2aecb6a255ebd03caaf6820e6c0534531051066810080e0d822c8" gives "59545fd8dfdd821ca7accecab0655d77437f5bba5aaa5ea8c042a26bc9ae514b"

"a751efbeabe73bdf9d08df5760104feff915d9d807d4c62178cdeb98d8c25f43" "a751efbeabe73bdf9d08df5760104feff915d9d807d4c62178cdeb98d8c25f43" gives "15eca0aa3e2cc2b9b4fbe0629f1dda87f329500fcdcd6ef546d163211266b3b3"

and final level of the tree "59545fd8dfdd821ca7accecab0655d77437f5bba5aaa5ea8c042a26bc9ae514b" "15eca0aa3e2cc2b9b4fbe0629f1dda87f329500fcdcd6ef546d163211266b3b3" gives "9cdf7722eb64015731ba9794e32bdefd9cf69b42456d31f5e59aedb68c57ed52"