Was ist der billigste und effizienteste Weg, um Daten an eine Struktur zu senden, und warum?

Ich habe Mühe, herauszufinden, wie Daten an eine Struktur gesendet werden können, die billiger und am effizientesten ist. Ich habe mir diese 2 verschiedenen Stile ausgedacht:

struct Database
{
   string name;
   string addressPerson; 
}

mapping (string => Database) idToDatabase;

function setPerson(string _id, string _name, string _address) external {
   Database storage person = idToDatabase[_id];
   person.name = _name;
   person.addressPerson = _address;
}  

Und

struct Database
{
   string name;
   string addressPerson; 
}

Database[] public people;

mapping (string => uint) idToPerson;

function setPerson(string _id, string _name, string _address) external {
   people.push(Database(_name,_address));
   idToPerson[_id] = people.length-1;           
}

Welche sollte ich verwenden und warum? Ich habe viel recherchiert und keine Antwort gefunden. Danke schön.

Welches verbraucht weniger Benzin? Meine Vermutung wäre die erste, weil es eine Sache weniger in den Speicher schreibt. (Das Schreiben in den Speicher ist so teuer, dass andere geringfügige Unterschiede wie Hashing oder das vorübergehende Speichern von etwas im Speicher wahrscheinlich keine Rolle spielen.) Aber wenn Sie nach dem suchen, was billiger ist, probieren Sie es einfach aus und sehen Sie.

Antworten (1)

Ich habe versucht, Musterverträge mit den beiden oben genannten Ansätzen zu erstellen. Ich habe Remix IDE verwendet , um die Kosten zu berechnen. Beachten Sie, dass es sich hierbei um ungefähre (aber dennoch hilfreiche) Kosten handelt, die sich abhängig von vielen Faktoren ändern können.

Wenn Sie den Vertrag bereitstellen und die Funktion SetPerson() aufrufen, werden Ihnen die Details der Transaktion im unteren Bereich angezeigt.

Erfahren Sie hier mehr über den Unterschied zwischen Transaktionskosten und Ausführungskosten

Ansatz 1 (Mapping auf Objekt)

  • Vertragsbereitstellung

    Transaktionskosten 179161 Gas

    Ausführungskosten 95141 Gas

  • Funktionsaufruf

    Transaktionskosten 65441 Gas

    Ausführungskosten 41609 Gas


Ansatz 2 (Zuordnung zu ID, Array)

  • Vertragsbereitstellung:

    Transaktionskosten 361519 Gas

    Ausführungskosten 232075 Gas

  • Funktionsaufruf

    Transaktionskosten 91228 Gas

    Ausführung kostet 67396 Gas

Vielen Dank. Ich schaue mir mal den Link an, den du geschickt hast. Da ich neu bei Solidity bin, habe ich viele Fragen zu Kosten und damit verbundenen Dingen.