Es scheint extrem teuer zu sein, den Strukturtyp zu speichern.

In meinem Vertrag gibt es einen Strukturtyp:

struct Claim{
 address healthcareProvider;
 uint amount;
 bool patientSig;
 bool paid;
 uint item;
}

Und die Initialisierungsfunktion lautet:

 function MakeClaim(uint _amount, uint _item, uint num) {
   Claim memory c;
   c.healthcareProvider = tx.origin;
   c.patientSig = false;
   c.paid = false;
   c.amount=_amount;
   c.item=_item;
}

Wenn ich diese Funktion aufrufe, um einen neuen Anspruchstyp zu erstellen, finde ich, dass der Preis 2,687 ETH (nicht Gas) beträgt. Dies ist viel mehr als die Kosten für die Bereitstellung des gesamten Vertrags! Ich teste es im Morden-Testnetz. Wo ist mein Problem?

Antworten (1)

Da der Datenspeicher in Blockchain eine knappe Ressource ist, ist er ziemlich teuer. Das Speichern von Daten ist der teuerste Vorgang in jedem Smart Contract.

sstore  100     Paid for a normal SSTORE operation (doubled or waived sometimes).

Sie können die ganze Liste sehen: https://www.cryptocompare.com/coins/guides/what-is-the-gas-in-ethereum/

Wenn Sie also komplexe Strukturen verwenden, vervielfachen sich die Kosten.

Zwei bools, zwei unsigned ints und eine Adresse kosten also jedes Mal über 30 USD, wenn Sie sie speichern oder aktualisieren möchten? Verstehe ich die Funktionsweise von Ethereum falsch?
30 USD scheinen sogar dafür so viel zu sein. Überprüfen Sie den Gaspreis und den geschätzten Gasverbrauch im Solidity-Online-Compiler ( ethereum.github.io/browser-solidity ). Führen Sie diesen Smart Contract im Live-Netz oder in einem privaten Testnetz aus?
Was meinen Sie mit komplexen Strukturen? Haben Sie ein Beispiel für einen einfachen Strukturfall? @KanekiDev
Eine komplexe Struktur kann zum Beispiel sein: wenn Sie eine Baumstruktur in Ihrem Smart-Contract aufbauen möchten.