Ich habe einen einfachen Smart Contract erstellt, um große Datenmengen (13-20 kB) auf der Ethereum-Blockchain zu speichern. Aber wenn ich versuche, eine Transaktion durchzuführen, schlagen sie manchmal fehl (mit geringer Korrelation zur Datenmenge) mit der Fehlermeldung „Warnung! Fehler bei Vertragsausführung [Kein Gas]“.
Das Gaslimit beträgt 3000000 und es gibt keinen klaren Datenschwellenwert, der dazu führt, dass die Transaktion fehlschlägt. Zwei Transaktionen mit demselben Inhalt können sich unterschiedlich verhalten (eine gibt einen Fehler aus, die andere nicht).
Hier ist der Code, den ich verwende, um die Daten zu speichern:
contract SimpleStorage {
mapping(address => string) public Usersdata;
function Storedata(string data) public {
Usersdata[msg.sender] = data;
}
function getData() public view returns (string) {
return Usersdata[msg.sender];
}
}
Basierend auf dem Vertrag, den Sie kommentiert haben (und ich habe ihn bearbeitet, um ihn der ursprünglichen Frage hinzuzufügen), ist es nicht verwunderlich, dass Sie auf Gasprobleme stoßen. Die Vertragsspeicherung kostet 20.000 für die Initialisierung eines Slots, und jeder Slot speichert 32 Bytes. Das Speichern von 10 KB Daten im Speicher würde etwa 10000/32*20000 Gas kosten, was über 6 Millionen Gas ist. Dies ignoriert auch die Kosten der Daten als Eingabedaten, die nicht billig sind (obwohl sie viel billiger sind als die Speicherkosten). Insgesamt gilt die Speicherung großer Datensätze wie dieser in der Kette als schlechte Praxis.
natewelch_
Ron Berreby
natewelch_
Ron Berreby
natewelch_
Ron Berreby