Fusee ⚡ Profile picture
Mar 18 21 tweets 4 min read
[THREAD]

Aujourd’hui nous allons parler d’une vulnérabilité ultra classique des smarts contracts : l’overflow et l’underflow 🧵

N'hésite pas à RT si je t'ai appris quelque chose 😎

#Elrond #ElrondCommunity #Ethereum #Avalanche
Commençons par le commencement, en programmation, on se représente généralement les nombre en base 2, mais qu’est ce que la base 2 ?
Dans la vie courante nous comptons en base 10, c’est-à-dire que notre système de numérotation comporte dix chiffres (de 0 à 9)
Ainsi lorsque nous comptons et que nous arrivons à 9, on rajoute un chiffre à gauche et on continue : 9, 10, 11, 12, …
On peut par exemple compter en base 4, avec quatre chiffres de 0 à 3

0, 1, 2, 3, 10, 11, 12, 13, 20, …, 32, 33, 100, 101, …
On en vient donc à la base 2, dite binaire car nous avons deux chiffres : 0 et 1

0, 1, 10, 11, 100, 101, 110, 111, 1000, etc…
Si vous avez bien suivi, on a par exemple 7 en base 10 = 13 en base 4 = 111 en base 2

Simple non? On a fait le plus dur 🙂 Image
Dans un smart contract, lorsque nous déclarons une variable représentant un nombre entier, nous devons préciser sa taille, c’est-à-dire son nombre de bits ou plus simplement le nombre de chiffres de sa représentation en base 2
Pourquoi? Car cela permet d’utiliser le moins de mémoire possible, prenons un cas concret

Vous faites une simulation d’un lancer de dés et vous voulez stocker le résultat dans une variable, sachant que le nombre du dés sera au maximum 6, donc 110 en base 2
il ne sera pas nécessaire de réserver autant de mémoire qu'un un nombre de taille 256, une taille 4 suffira (même de taille 3 mais on aime bien les puissances de 2 en informatique)
On arrive donc au problème d’overflow, que se passe-t-il lorsque nous faisons une addition et que le résultat et trop grand pour être contenu dans la taille choisie?
Supposons que nous avons une variable de taille 4 qui vaut 15 en base 10 donc 1111 en base 2

Nous souhaitons ajouter 1 à cette variable
Problème 1 : 1111 + 1 = 10000, 5 chiffres donc ça ne rentre pas dans notre variable de taille 4

Problème 2 : aucune erreur ne sera visible, pour le smart contract 1111 + 1 = 0
En effet, lorsque le résultat dépasse la taille maximum allouée, on boucle et on recommence de 0, on a fait ce qu'on appelle un overflow
L’overflow est un problème majeur car il peut potentiellement toucher tout ce qui concerne des nombres : le nombre de tokens que détient une adresse, des rewards de staking, …
Parlons rapidement de l’underflow, c’est comme l’overflow mais avec la soustraction
Supposons vous avez une variable de taille 4 qui vaut 0 et vous lui retirez 1, on va boucler dans l’autre sens !

0 - 1 = 1111 en base 2 = 15 en base 10 (le max possible en taille 4)
Vous voyez le problème, énumérons les solutions possibles :

1) Utiliser des tailles plus grandes (on utilise souvent la taille 256)
2) Utiliser une règle mathématique permettant de vérifier s’il y a eu overflow

La librairie OpenZeppelin en Solidity s'en charge en fournissant les méthodes .add, .sub, .mul, .div qui empêchent l’overflow et l’underflow en générant une erreur
3) Utiliser des types insensibles à ces problèmes, qui vont gérer différemment la mémoire : BigUInt sur Elrond par exemple
Voilà qui conclut ce thread, n’hésitez pas à partager, liker et follow ça me fera grandement plaisir 💪

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Fusee ⚡

Fusee ⚡ Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @gfusee33

Mar 21
[THREAD]

Top 12 des raisons de se lancer dans le développement de smart contract sur Elrond, plus d’excuse 😎

N'hésite pas à partager, + il y a de dev + il y aura de projets qui seront build 🔥

#Elrond #ElrondCommunity #EGLD Image
1) Il ne faut pas un matos de fou pour se lancer : un pc, une connexion internet et c’est parti 💻
2) Pas de contraintes, tu peux bosser d’où tu veux : ton bureau, dans un café, à la plage (je recommande pas mais c’est possible), …
Read 14 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(