Im gelben Papier von Ethereum heißt es :
codeHash: Der Hash des EVM-Codes dieses Kontos – das ist der Code, der ausgeführt wird, wenn diese Adresse einen Nachrichtenanruf erhält; es ist unveränderlich und kann daher im Gegensatz zu allen anderen Feldern nach der Konstruktion nicht geändert werden. Alle diese Codefragmente sind in der Zustandsdatenbank unter ihren entsprechenden Hashes zum späteren Abrufen enthalten. Dieser Hash wird formal als σ[a]c bezeichnet, und somit kann der Code als b bezeichnet werden, vorausgesetzt, dass KEC(b) = σ[a]c.
Später jedoch im Abschnitt Vertragserstellung, der das Vertragsbereitstellungsszenario darstellt (also keine externe Adresse):
Die Nonce des Kontos wird anfänglich als Null definiert, der Saldo als der übergebene Wert, der Speicher als leer und der Code-Hash als Keccak-256-Bit-Hash der leeren Zeichenfolge;
gibt an, dass codeHash nach der Vertragsbereitstellung auf einen Hash einer leeren Zeichenfolge festgelegt wird.
Die Frage ist: Was wird in der codeHash-Variablen nach der Vertragsbereitstellung festgelegt? Mir scheint, dass diese beiden Zitate widersprüchlich sind, wobei eines besagt, dass die codeHash-Variable den Hash des Vertragscodes enthält, das andere den Hash einer leeren Zeichenfolge.
Ich glaube, dass der Hash der leeren Zeichenfolge nur so lange der Code-Hash ist, bis der Konstruktor den Body-Code zurückgibt.
Ich finde das gelbe Papier immer schwer zu lesen, aber wenn Sie den Abschnitt zur Vertragserstellung weiterlesen, gibt es eine Gleichung 98, die den Code-Hash zu zeigen scheint, der mit dem vom Konstruktor zurückgegebenen Code gespeichert wird. Der Text, der dieser Gleichung folgt:
Die Ausnahme bei der Bestimmung von σ' schreibt vor, dass o, die resultierende Bytesequenz aus der Ausführung des Initialisierungscodes, den endgültigen Körpercode für das neu erstellte Konto angibt.
jojeyh
Benutzer3223162