El tipo predeterminado para Wei en Solidity es el entero sin signo de 256 bits. (por ejemplo, mensaje.valor)
Sin embargo, para rastrear 1.7e38 wei (1.7e20 ether) solo necesita un número entero de 127 bits. Es un número gigantesco que probablemente no se supere en ninguna aplicación del mundo real.
Siempre que no multiplique dos valores de Wei, ¿se considera razonablemente seguro rastrear Wei en enteros de 128 bits con signo para que dos valores puedan empaquetarse en una palabra de 256 bits para ahorrar costos de almacenamiento en gas?
¿Existen costos computacionales adicionales en la aritmética de media palabra que podrían consumir significativamente los ahorros de gasolina?
En mi opinión, sí uint128
es seguro rastrear los valores de wei y puede ahorrar la mitad de los costos de almacenamiento uint
(cuando Solidity puede optimizar). Internamente, probablemente se esté enmascarando para acceder a los 128 bits superior e inferior de la palabra de 256 bits, pero no creo que vaya a consumir mucho gas: por lo que el ahorro de gas de almacenamiento será mayor.
Sí.
Actualmente existen 77 millones de ether, y cada año se crean alrededor de 18 millones. En 20 años tendremos en total alrededor de (77m + 18*20m) * 10^18 wei.
Esto encaja en 89 bits. Para estar seguro, supongamos que su aplicación necesita realizar la multiplicación de cantidades de wei tan grandes, entonces, en teoría, podría necesitar 90 bits. Redondeando hacia arriba el tamaño entero de solidez más cercano da uint96. Si es necesario almacenar muchos valores, esto ahorraría algo de tamaño sobre uint128.
nessencia
pablo s