codeHash-Variablenwert

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.

Sind Sie sicher, dass die zweite Aussage nicht nur von einer leeren Kontakterstellung spricht?
Ich würde sagen, es handelt sich nicht um einen leeren Vertrag, das schließe ich aus der Aussage: "Es gibt eine Reihe von intrinsischen Parametern, die beim Erstellen eines Kontos verwendet werden: Absender (e), ursprünglicher Händler (o), verfügbares Gas (g), Gaspreis (p), Ausstattung (v) zusammen mit einem Bytearray beliebiger Länge, i, der EVM-Initialisierungscode und schließlich die aktuelle Tiefe des Nachrichtenruf-/Vertragserstellungsstapels (e)."

Antworten (1)

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.

Dies würde Sinn machen. Und ich denke, Gleichung 98. spezifiziert es. Danke schön.