Beim Mining von Bitcoin wird die Nonce in den Header aufgenommen, der dann gehasht und überprüft wird, um festzustellen, ob er unter dem Zielschwellenwert liegt.
Jeder kann überprüfen, ob der Header tatsächlich unterhalb des Schwellenwerts hasht. Beim Merged Mining ist jedoch laut Wiki der Hash des Headers der Hilfskette im Coinbase-Txin-Skript der übergeordneten Kette enthalten, ohne dass die Möglichkeit besteht, die Nonce in der Hilfskette zu ändern. Die Nonce des Elternteils wird wie üblich inkrementiert, aber der Aux-Hash bleibt gleich.
Wie können wir dann die Hilfskette verifizieren?
Liegt es daran, dass die übergeordnete Nonce durch den Hash des übergeordneten Headers in die Hilfskette gelangt? Trotzdem scheint dies für die Überprüfung nicht hilfreich zu sein, da der Hash der Aux-Kette keine Schwellenwertkriterien mehr erfüllen muss.
Um die Hilfskette zu verifizieren, müssen Sie nachweisen, dass am letzten Block in dieser Hilfskette eine bestimmte Menge an Arbeit geleistet wurde. Wie bei jeder Form des Minings beinhaltet dies die Berechnung eines Hashs, der unter einem Schwellenwert liegt.
Es spielt jedoch keine Rolle, dass das Pre-Image des Hashs auch viele andere irrelevante Daten enthält, solange es irgendwo den relevanten Hilfsblock-Header enthält. Dh aus Proof-of-Work-Sicht macht es keinen Unterschied, wenn Sie dies berechnen:
while(h > aux-threshold) {
h = hash(aux-header + nonce)
nonce++
}
result = nonce
dagegen:
container = hash(hash(aux-header) + other-data)
while(h > aux-threshold) {
h = hash(container + nonce)
nonce++
}
result = nonce
Beide werden die gleiche Menge an Arbeit in Anspruch nehmen und beide werden beweisen, dass die Arbeit am erledigt wurde aux-header
. Dies liegt daran container
, dass der Aux-Header nachweislich enthalten ist, und da aux-header
und other-data
im Aux-Chain-Block gespeichert sind und der Hash jederzeit neu berechnet werden kann.
Für Merged Mining container
ist es also tatsächlich der gehashte Header des übergeordneten Kettenblocks und aux-header
muss nur irgendwo in den übergeordneten Block aufgenommen werden. Es könnte wirklich überall eingefügt werden, solange der übergeordnete Block den Überprüfungsprozess besteht. Beispielsweise könnten Sie den Aux-Chain-Header-Hash als Adresse in eine Multisig-Transaktion einfügen oder als Datenelement, das auf dem Stack abgelegt, aber nie in einer der Transaktionen abgelegt wird. Am einfachsten lässt es sich jedoch im txin-Skript der Coinbase-Transaktion platzieren. Diese enthält sowieso immer beliebige Daten, und ihre Position an der Spitze der Kette bedeutet, dass other-data
sie die geringste Anzahl von Merkle-Zweigen enthalten kann.
Sie überprüfen die Hilfskette auf genau die gleiche Weise, außer dass Sie auch überprüfen müssen, ob der Header der Hilfskette ordnungsgemäß in der Coinbase der übergeordneten Kette enthalten ist. Aus Sicht der Hilfskette kann man sich den gesamten Header der Primärkette als Teil einer riesigen Nonce vorstellen.
Müllhausen
Murch