Also, zurück zum thema:
Grundsätzlich hat bitcoinfori einen guten möglichen Ansatz. Zunächst einmal die Problematik:
Der größte Rechenaufwand wird in die folgenden Rechenschritte gesteckt:
nonce = ?
block_header = version + prevBlockHash + rootHash + time + currTargetComp + nonce;
hash = sha2(sha2(block_header))
hash < target ?
D.h. man kann hier bei der Nonce drehen, oder der Zeit, oder ...
Jetzt kann man natürlich hingehen und zu brute forcen, aber das ist ja nicht das Thema. bitcoinfori möchte jetzt folgendes machen:
block_header = sha2
-1(sha2
-1(hash)
Klar, der Hash ist nicht so wichtig, es soll nur unter target bleiben, aber das ist so der grobe Weg.
Problem: SHA-2 ist eine Einwegfunktion, d.h. sie ist / sollte nicht injektiv sein, d.h. f(a) = f(b) = c , obwohl a != b
Jetzt könnte man die Menge einschränlen ( so wie bei den trigonometrischen Umkehrfunktionen), aber - oh wunder - diese Funktionsdefinition würde wohl so gegen 2^256 Abbildungen gehen,
weil das ist die Kernaufgabe einer HashfunktionZwar ist inzwischen bekannt, dass einige Runden von SHA-2 gebrochen werden können, aber das hilft nur wenig.
Lange Rede kurzer Sinn, wozu gibt es SAT Solving (= bitcoinfori's Magie), wenn nicht für genau sowas haha:
hash = sha2(sha2(block_header))
assume(hash[0] == 0 && hash[1] == 0 && ..) // assume(hash < target)
assert(hash > target)
Damit bekäme man einen nonce serviert, welcher der Annahme widerspricht und damit der Hash < Target ist.
Offensichtlich gibt es dazu schon einige wissenschaftliche
Arbeiten ...