Struktur ist sehr teuer, wie hier angegeben: Es scheint extrem teuer zu sein, wenn der Strukturtyp gespeichert wird.
https://www.cryptocompare.com/coins/guides/what-is-the-gas-in-ethereum/ :
sstore 100 Bezahlt für einen normalen SSTORE-Vorgang (manchmal verdoppelt oder erlassen).
[Q] Was hat entschieden, es zu verdoppeln?
Zum Beispiel habe ich folgende Struktur in einer Bibliothek definiert: Die folgende Operation insert()
kostet fast 150.000 Gas . Speichern string
und uint
unter byte
der Struktur.
Lib.sol
library Lib {
struct job {
string hash; // string hash_index_folderType;
uint index; //
byte folderType; //
}
}
Beispiel.sol
import "./Lib.sol"
contract Example{
using Lib for Lib.data;
function insert( string key, byte folderType ){
uint currentIndex = cluster.jobStatus[jobKey].length;
cluster.submittedJobs.push( Lib.job({hash: key, index:
currentIndex, folderType: folderType }) );
}
}
Ich weiß, dass das Speichern von Daten der teuerste Vorgang in einem Smart Contract ist.
Aber wie wir wissen, steigt der Ether weiter (sprang von 50 $ auf 240 $, was bedeutet, dass die Speicherkosten um das Fünffache gestiegen sind) und die Speicherpreise steigen auch für die Kunden schnell, da der Mining-Preis nicht sinkt. Also bin ich auf der Suche nach der kompaktesten und effizientesten Art, Speicher zu nutzen.
=> Während der Äther stieg, warum sinkt der Gaspreis nicht für die Erinnerung?
[F] Meine Frage bezieht sich auf das Speichern in der struct
Bibliothek, und wenn ich sie unter derselben Datei mit den insert()
vorhandenen speichere, verringert sich dadurch der Gasverbrauch? Wenn nicht: Ist es eine gute Idee, alle Variablen zu kombinieren, indem Sie sie an eine Zeichenfolge anhängen und sie als einzelne Zeichenfolgenvariable anstelle einer Struktur speichern, könnte dies helfen, den Gasverbrauch zu verringern?
Als Beispiel:
import "github.com/Arachnid/solidity-stringutils/strings.sol";
string hash_index_folderType = key.toSlice().concat(currentIndex.toSlice().concat(folderType.toSlice());