¿Cuál sería el costo real del gas de un mapeo? ¿Existen limitaciones de tamaño?

Quiero obtener una estimación de cuánto costaría almacenar arbitrariamente muchos elementos en un mapeo del formulario BYTES32 -> BYTES32. Veo aquí que una STORAGEADDoperación cuesta 20000 de gas, que creo que es la instrucción para agregar un elemento a un mapeo (¿es correcto?) .

El precio de la gasolina hoy es 20 gwei, entonces 20 * 10^9 wei lo que me da un total de 20000 * 20 * 10^9 * 10^-18 = 0.0004 éter ~ 0.0048 USD (con 1 ETH = 12 USD).

¿Es correcto y hay algún límite en la cantidad de elementos que puedo incluir en el mapeo (sin tener en cuenta las limitaciones del precio del gas)?

Respuestas (2)

El almacenamiento total está formado por slots de 32 bytes direccionados con 256 bits. Esto nos da 2^256 * 32bytes para usar. Cuando agrega un elemento a un mapping, se envía a una ubicación aleatoria en el almacenamiento calculado por sha3, consulte esta respuesta .

Agregar un elemento a un mapeo nunca fallará porque siempre habrá una sha3ubicación calculada para colocar la información. Por supuesto, cuanto más se acerque a las 2^256inserciones, mayor será la probabilidad de que eventualmente sobrescriba algo más.

Una buena regla general es que necesita aproximadamente sqrt(n) entradas antes de esperar una colisión, por lo que 2^128 en este caso. Eso es alrededor de 3.4e38, que es 340 millones de millones de millones de millones de millones. en.wikipedia.org/wiki/birthday_problem#Square_approximation También hay medios para corregir las colisiones de hash en los mapas, lo que permite entradas teóricamente infinitas, pero no estoy seguro de la implementación exacta en el EVM.

Ver esta respuesta a una pregunta similar. En resumen: puede almacenar cualquier número de elementos en una asignación.