Wie hoch wären die tatsächlichen Gaskosten einer Kartierung und gibt es Größenbeschränkungen?

Ich möchte eine Schätzung erhalten, wie viel es kosten würde, beliebig viele Elemente in einer Zuordnung des Formulars zu speichern BYTES32 -> BYTES32. Ich sehe hier , dass eine STORAGEADDOperation 20000 Gas kostet, was meiner Meinung nach die Anweisung ist, einem Mapping ein Element hinzuzufügen (ist es richtig?) .

Der Gaspreis beträgt heute 20 gwei, also 20 * 10^9 wei, was mir insgesamt 20000 * 20 * 10^9 * 10^-18 = 0,0004 Ether ~ 0,0048 USD (mit 1 ETH = 12 USD) ergibt.

Ist es richtig und gibt es eine Begrenzung, wie viele Elemente ich in das Mapping einfügen kann (ohne Berücksichtigung von Gaspreisbeschränkungen)?

Antworten (2)

Der Gesamtspeicher besteht aus 32-Byte-Slots, die mit 256 Bit adressiert werden. Dies gibt uns 2^256 * 32zu verwendende Bytes. Wenn Sie ein Element zu a hinzufügen mapping, wird es an einen zufälligen Ort im Speicher gesendet, der von berechnet wird sha3, siehe diese Antwort .

Das Hinzufügen eines Elements zu einer Zuordnung wird niemals fehlschlagen, da es immer einen sha3-berechneten Ort gibt, an dem die Informationen abgelegt werden können. Je näher Sie Einfügungen kommen, desto höher ist natürlich 2^256die Wahrscheinlichkeit, dass Sie schließlich etwas anderes überschreiben.

Eine gute Faustregel ist, dass Sie ungefähr sqrt(n) Einträge benötigen, bevor Sie eine Kollision erwarten, also 2^128 in diesem Fall. Das sind etwa 3,4e38, das sind 340 Millionen Millionen Millionen Millionen Millionen Millionen Millionen. en.wikipedia.org/wiki/Birthday_problem#Square_approximation Es gibt auch Mittel zur Korrektur von Hash-Kollisionen in Karten, die theoretisch unendliche Einträge ermöglichen, aber ich bin mir der genauen Implementierung in der EVM nicht sicher.

Siehe diese Antwort auf eine ähnliche Frage. Kurz gesagt: Sie können beliebig viele Elemente in einem Mapping speichern.