Der Großteil der Gasausgaben von Ethereum konzentriert sich auf die Speicherung. Jeder Vorgang, der den Zustand (Speicher) des Ethereum-Netzwerks ändert, ist in der Regel kostspielig. Daher kann die Konzentration auf die Art und Weise, wie Daten aufbewahrt und zugänglich gemacht werden, zu erheblichen Kostensenkungen führen. In dieser Sitzung werden wir uns einige Möglichkeiten zur Speicheroptimierung mit Remix ansehen.
Die Ethereum-Blockchain bietet dauerhaften Speicher. Alles, was auf der Blockchain gespeichert ist, bleibt so lange verfügbar, wie die Blockchain überlebt, aber diese Beständigkeit hat ihren Preis. Die Optimierung der Speicherung senkt nicht nur die Kosten, sondern stellt auch sicher, dass der globale Zustand von Ethereum effizient genutzt wird.
Solidity speichert Variablen in Slots. Jeder Steckplatz ist 32 Byte groß. Wenn Variablen in einen einzelnen Slot passen, können sie mit einem einzigen SLOAD- bzw. SSTORE-Vorgang gelesen oder aktualisiert werden.
Betrachten Sie zwei Verträge:
Solidität
// Ohne Optimierung
Pragma-Solidität ^0.8.9;
Vertrag UnoptimizedStorage {
uint256 public value1;
uint256 public value2;
}
Solidität
// Mit Optimierung
Pragma-Solidität ^0.8.9;
Vertrag OptimizedStorage {
uint128 public value1;
uint128 public value2;
}
Stellen Sie beide Verträge in Remix bereit und beachten Sie die Gasunterschiede bei der Interaktion mit ihren Variablen.
In der optimierten Version teilen sich value1
und value2
einen einzigen 32-Byte-Slot.
Wenn Sie mit einem Speicherplatz (insbesondere temporärer Datenspeicherung) fertig sind, können Sie den Steckplatz löschen oder auf Null setzen, um eine Rückerstattung für Benzin zu erhalten.
Solidität
Pragma Solidität ^0.8.9;
Vertrag RefundExample {
uint256 public temporaryData;
Funktion storeTemporaryData(uint256 data) public {
temporaryData = data;
}
Funktion clearTemporaryData() public {
delete temporaryData;
}
}
Stellen Sie diesen Vertrag in Remix bereit.
Speichern Sie einige temporäre Daten und löschen Sie sie dann.
Überprüfen Sie die Gaskosten. Beachten Sie die Benzinrückerstattung, die Sie für den delete
erhalten.
Wenn auf Daten nicht in der Kette zugegriffen werden muss, sollten Sie erwägen, sie als Ereignis zu protokollieren, anstatt sie zu speichern. Veranstaltungen sind deutlich günstiger als Lagerbetriebe.
Solidität
Pragma Solidität ^0.8.9;
Vertrag EventExample {
event DataStored(uint256 data);
Funktion storeData(uint256 data) public {
emit DataStored(data);
}
}
Stellen Sie den Vertrag in Remix bereit und interagieren Sie mit ihm.
Beachten Sie die günstigeren Gaskosten im Vergleich zur Lagerung.
Jetzt, da Sie einige grundlegende Ansätze zur Speicheroptimierung beherrschen, ist es wichtig, dies zu üben. Beschäftigen Sie sich mit den angebotenen Beispielen und experimentieren Sie mit der Erstellung eigener Beispiele. In der folgenden Sitzung werden wir tiefer auf die Optimierung der Funktionssichtbarkeit und die Wiederverwendung von Code mit Bibliotheken eingehen. Bedenken Sie, dass Optimierung sowohl eine Kunst als auch eine Wissenschaft ist. Experimentieren Sie weiter!
Der Großteil der Gasausgaben von Ethereum konzentriert sich auf die Speicherung. Jeder Vorgang, der den Zustand (Speicher) des Ethereum-Netzwerks ändert, ist in der Regel kostspielig. Daher kann die Konzentration auf die Art und Weise, wie Daten aufbewahrt und zugänglich gemacht werden, zu erheblichen Kostensenkungen führen. In dieser Sitzung werden wir uns einige Möglichkeiten zur Speicheroptimierung mit Remix ansehen.
Die Ethereum-Blockchain bietet dauerhaften Speicher. Alles, was auf der Blockchain gespeichert ist, bleibt so lange verfügbar, wie die Blockchain überlebt, aber diese Beständigkeit hat ihren Preis. Die Optimierung der Speicherung senkt nicht nur die Kosten, sondern stellt auch sicher, dass der globale Zustand von Ethereum effizient genutzt wird.
Solidity speichert Variablen in Slots. Jeder Steckplatz ist 32 Byte groß. Wenn Variablen in einen einzelnen Slot passen, können sie mit einem einzigen SLOAD- bzw. SSTORE-Vorgang gelesen oder aktualisiert werden.
Betrachten Sie zwei Verträge:
Solidität
// Ohne Optimierung
Pragma-Solidität ^0.8.9;
Vertrag UnoptimizedStorage {
uint256 public value1;
uint256 public value2;
}
Solidität
// Mit Optimierung
Pragma-Solidität ^0.8.9;
Vertrag OptimizedStorage {
uint128 public value1;
uint128 public value2;
}
Stellen Sie beide Verträge in Remix bereit und beachten Sie die Gasunterschiede bei der Interaktion mit ihren Variablen.
In der optimierten Version teilen sich value1
und value2
einen einzigen 32-Byte-Slot.
Wenn Sie mit einem Speicherplatz (insbesondere temporärer Datenspeicherung) fertig sind, können Sie den Steckplatz löschen oder auf Null setzen, um eine Rückerstattung für Benzin zu erhalten.
Solidität
Pragma Solidität ^0.8.9;
Vertrag RefundExample {
uint256 public temporaryData;
Funktion storeTemporaryData(uint256 data) public {
temporaryData = data;
}
Funktion clearTemporaryData() public {
delete temporaryData;
}
}
Stellen Sie diesen Vertrag in Remix bereit.
Speichern Sie einige temporäre Daten und löschen Sie sie dann.
Überprüfen Sie die Gaskosten. Beachten Sie die Benzinrückerstattung, die Sie für den delete
erhalten.
Wenn auf Daten nicht in der Kette zugegriffen werden muss, sollten Sie erwägen, sie als Ereignis zu protokollieren, anstatt sie zu speichern. Veranstaltungen sind deutlich günstiger als Lagerbetriebe.
Solidität
Pragma Solidität ^0.8.9;
Vertrag EventExample {
event DataStored(uint256 data);
Funktion storeData(uint256 data) public {
emit DataStored(data);
}
}
Stellen Sie den Vertrag in Remix bereit und interagieren Sie mit ihm.
Beachten Sie die günstigeren Gaskosten im Vergleich zur Lagerung.
Jetzt, da Sie einige grundlegende Ansätze zur Speicheroptimierung beherrschen, ist es wichtig, dies zu üben. Beschäftigen Sie sich mit den angebotenen Beispielen und experimentieren Sie mit der Erstellung eigener Beispiele. In der folgenden Sitzung werden wir tiefer auf die Optimierung der Funktionssichtbarkeit und die Wiederverwendung von Code mit Bibliotheken eingehen. Bedenken Sie, dass Optimierung sowohl eine Kunst als auch eine Wissenschaft ist. Experimentieren Sie weiter!