Nettoyer les variables

Lorsqu’une valeur est inférieure à 256 bits, dans certains cas, les bits restants doivent être nettoyé. Le compilateur Solidity est conçu pour nettoyer ces bits restants avant toute opération qui pourraient être affectés par les déchets potentiels dans les bits restants. Par exemple, avant d’écrire une valeur en mémoire, les bits restants doivent être effacés car le contenu de la mémoire peut être utilisé pour le calcul hachages ou être envoyés en tant que données d’un appel de fonction. De même, avant de stocker une valeur dans le stockage, les bits restants doivent être nettoyés car sinon des valeurs brouillées peuvent être observées.

Notez que l’accès via assembly dans le code Solidity n’est pas considéré comme une telle opération : Si vous utilisez assembly dans votre code pour accéder aux variables Solidity plus court que 256 bits, le compilateur ne garantit pas que la valeur est correctement nettoyée.

De plus, nous ne nettoyons pas les bits si l’opération suivante n’est pas affectée par l’opération actuelle. Par exemple, puisque tout valeurs non nul est considérée comme true par l’instruction JUMPI, nous ne nettoyons pas les valeurs booléennes avant qu’elles ne soient utilisées comme condition pour JUMPI.

En plus du principe ci-dessus, le compilateur Solidity nettoie les données d’entrée lorsqu’elles sont chargées sur la stack.

Différents types ont des règles différentes pour nettoyer les valeurs non valides :

Type

Valeurs valides

Valeurs invalides

enum of n members

0 until n - 1

exception

bool

0 or 1

1

signed integers

sign-extended word

currently silently wraps; in the future exceptions will be thrown*

unsigned integers

higher bits zeroed

currently silently wraps; in the future exceptions will be thrown*

  • enveloppe actuellement silencieusement ; à l’avenir, des exceptions seront levées