Solidity est un langage typé statiquement, orienté contrat, compilé vers du bytecode EVM. C'est le langage dans lequel l'écrasante majorité du code DeFi, NFT et de gouvernance on-chain est écrite.
En sécurité, Solidity a un historique qu'il faut connaître :
- Les versions pré-0.8 avaient un overflow et underflow silencieux des entiers. La plupart des exploits majeurs de reentrancy et d'arithmétique entre 2016 et 2020 ont eu lieu sur ces versions.
- 0.8.x a introduit des vérifications d'overflow nativement mais a gardé beaucoup de footguns :
tx.origin,callavec calldata arbitraire, proxies basés surdelegatecall,selfdestruct(aujourd'hui retiré). - Les versions récentes (0.8.20+) ont fait évoluer les layouts de stockage, le comportement de l'optimiseur, et les immutables d'une façon qui a causé de vrais incidents quand des bibliothèques ont été upgradées sans précaution.
Bien lire du Solidity est une compétence distincte de bien en écrire. Les auditeurs passent leur carrière à apprendre à voir ce qui n'est pas dans le code, checks manquants, modificateurs manquants, reverts manquants.