Mapeo en solidez

Los mapeos no tienen una longitud, ni tienen el concepto de clave o valores que se establecen.

¿Es esta declaración verdadera o falsa?

Por favor proporcione la explicación también.

Los documentos de solidez dicen: "Las asignaciones se pueden ver como tablas hash que se inicializan virtualmente de modo que existen todas las claves posibles y se asignan a un valor cuya representación de bytes es todo ceros

Respuestas (1)

True, porque tenemos el concepto de claves y valores en las asignaciones , pero en realidad no se configuran dentro de la asignación , solo se usa su keccak256hash para buscar el valor.


Por qué usan keccak256hash en lugar de valor real en las asignaciones (según los documentos ):

Los tipos que no ocupan los 32 bytes completos pueden contener "bits sucios de orden superior". Esto es especialmente importante si accede msg.data; plantea un riesgo de maleabilidad: puede crear transacciones que llamen a una función f(uint8 x)con un argumento de byte sin procesar de 0xff000001y con 0x00000001. Ambos se alimentan al contrato y ambos se verán como el número 1en lo que xrespecta, pero msg.data será diferente, por lo que si lo usa keccak256(msg.data)para algo, obtendrá resultados diferentes.


Si desea leer más información y desea comprender cómo funciona internamente, debe intentar leer -> ¿ Cómo puede borrar las asignaciones?

¿Has podido reproducir el ejemplo que mencionas? Cuando intento pasar 0xff000001a un uint8parámetro, aparece el error Error encoding arguments: Error: value out-of-bounds (argument=null, value="0xff000001", code=INVALID_ARGUMENT, version=abi/5.5.0). Esto fue en Remix.