Ich kann den Unterschied in Gas für das folgende Problem nicht verstehen. Ich habe einen sha256-Hashwert generiert und die Ausgabe habe ich als Hexadezimal-Kleinbuchstaben ausgewählt. Der Ausgabewert ist also eine hexadezimale Zeichenfolge mit 64 Zeichen. Dann habe ich diesen Wert in einer bytes32-Variablen in einem Smart Contract gespeichert. Der Code des Smart Contracts lautet:
pragma solidity ^0.4.23;
contract Project {
bytes32 public value;
function addValue(bytes32 val) public {
value = val;
}
}
Mit Remix habe ich festgestellt, dass die Operation zum Hinzufügen eines Werts 43629 für einige Werte und andere 43693 kostet. Die Differenz beträgt also 64 Gas. Kann mir jemand helfen zu verstehen, warum das passiert? Ich habe viele Werte getestet und der Unterschied war 64 Gas, war es Zufall? Ich habe auch getestet, um es als Zeichenfolge zu speichern. Dann waren die Kosten für alle Eingaben konstant, vielleicht weil die Werte die gleiche Länge haben, wie ich sagte, die Eingabewerte haben 64 Zeichen.
Aus dem Gelben Papier :
Gtxdatazero 4 Bezahlt für jedes Nullbyte an Daten oder Code für eine Transaktion.
Gtxdatanonzero 68 Bezahlt für jedes Nicht-Null-Byte an Daten oder Code für eine Transaktion
Wenn Sie also in Ihren Transaktionsdaten eine Nicht-Null durch eine Null ersetzen, reduzieren Sie die Kosten um 64 (68-4).
Beachten Sie, dass aufeinanderfolgende Nullen nicht unbedingt wichtig sind, nur wenn sie ein vollständiges Byte darstellen. Es ist einfacher zu sehen, wenn Sie Bytes trennen: d5 bf 2c b4 91 dd 63 f8 00 37 3f 16 ab 0f c4 86 ff e0 40 92 35 87 c0 0a dc ea d3 dc 4a 45 44 b6
. Der zweite Wert, den Sie in Ihrem Kommentar erwähnt haben, hat also genau ein Nullbyte.
Benutzer19510
Kathi
Benutzer19510
Kathi
Benutzer19510
Kathi
Kathi
Benutzer19510
Kathi
Benutzer19510