Die Schwierigkeit oder das Ziel wird durch den Kettenverlauf impliziert, warum muss es also explizit im Header angegeben werden? Ich nehme an, es legt die vom Bergmann beabsichtigte Schwierigkeit offen, aber ich sehe nicht, warum das ohne Kettenkontext relevant wäre.
Es stellt also scheinbar redundante Daten im Header dar, es sei denn, es gibt historische Gründe für diese Designwahl?
Sie sind nicht wirklich notwendig. Der Grund, warum sie enthalten sind, kann nur Satoshi bekannt sein, und AFAIK hat er nicht angegeben, warum er sich dafür entschieden hat, nBits in den Blockheader aufzunehmen (oder viele andere Dinge, die nur willkürlich sind). Dies ist eines der vielen Dinge, für die sich Satoshi entschieden hat, und niemand weiß wirklich warum. Es verbleibt heute im Block-Header, da das Entfernen eine Hard Fork erfordern würde und es wirklich keinen großen Nutzen bringt, es zu entfernen.
Das nBits-Feld kann nützlich sein und wurde wahrscheinlich aus praktischen Gründen hinzugefügt. Anstatt den vollständigen Kettenverlauf zu haben, um die aktuelle Schwierigkeit zu kennen, können Sie sich stattdessen die nBits ansehen. Aber das ist nur Spekulation, und vollständige Knoten verwenden die nBits nicht, um die aktuelle Schwierigkeit zu bestimmen (außer denen des Genesis-Blocks).
Wenn Sie sich direkt auf die nbits festlegen, können Sie feststellen, wie viel Arbeit verwendet wurde, um den Header zustandslos zu erstellen, bevor Sie nach Informationen über frühere Header suchen (oder diese abrufen).
Dies kann helfen, DOS-Angriffe abzuwehren, die Junk-Header senden, um Sie zu zwingen, ihre Vorfahren zu ermitteln oder abzurufen.
Jakob C.
Nate Eldredge
Jakob C.
Nate Eldredge
Jakob C.