Les contributeursLes ExpertsTECH

Bitcoin : comprendre et optimiser les fees de vos transactions

Par Marc Lebel, co-fondateur de LouerAgile

A la suite d’une discussion avec des membres d’un groupe Facebook, je me suis rendu compte que la notion de fee dans les transactions en bitcoin était mal comprise.

Les fees ne sont pas proportionnels au montant de la transaction.

C’est assez normal étant donné la complexité de cette monnaie, mais surtout elle échappe à une règle usuelle: les fees ne sont pas proportionnels au montant de la transaction. Explications.

Les mineurs veulent maximiser leur gain

Un «mineur» est quelqu’un qui va «travailler» pour ajouter un ensemble de transactions dans un block, qui si tout se passe bien sera ajouté à la fameuse blockchain.

Ce travail nécessite beaucoup de dépense de calcul et donc de dépense en énergie et en argent.

Si ce travail porte ses fruits (ajout à la blockchain), il est récompensé de 2 manières:

  • Via l’algorithme qui prévoit une création de bitcoins attribué au mineur. Actuellement il s’agit de 12,5 BTC par block. Ce montant est divisé par 2 tous les 4 ans (prochaine division en juin 2020).
  • Via les fees de chaque transaction: chaque transaction peut laisser un pourboire au mineur pour que celui-ci l’ajoute rapidement à un block.

La difficulté de ce travail ne dépend pas du nombre du transaction

Or point important, la difficulté de ce travail ne dépend pas du nombre du transactions. Il a donc tout intérêt à mettre le plus possible de transactions dans un block pour avoir le maximum de fees. Malheureusement comme le montre le diagramme ci-dessous, le nombre de transactions que l’on peut mettre est limité par la taille en octets des transactions:

Donc si un mineur veut maximiser ses revenus il doit mettre le plus possible des transactions qui ne sont pas grosses en terme d’octets et qui ont le plus possible de fee. C’est pourquoi un mineur regarde avant le tout dans une transaction le rapport fee/poids d’une transaction.

On l’exprime en général en Satoshi par Bytes (= octet) ou plus court Sat/B(Rappel 100 000 000 Satoshi = 1 BTC).

En ce moment les fee d’une transaction validée rapidement vous coûteront 14 euros.

A l’heure où j’écris ces lignes, pour être ajouté rapidement on doit mettre environ 400 Sat/Bytes dans une transaction. Une transaction classique faisant 226 bytes, cela représente actuellement plus de 14 euros par transaction.

Il peut donc être intéressant de comprendre comment ne pas faire des erreurs qui pourraient vous coûter tous vos bitcoins.

Calcul de la taille d’une transaction et optimisation

Première optimisation: avoir tout ses bitcoins sur une seule adresse

Pour recevoir des bitcoins vous avez besoin d’un pseudo que l’on appelle plus communément «bitcoin address».

Pour cela, il existe de nombreux logiciels qui reposent tous sur l’algorithme ECDSA.

Le point important est que vous pouvez vous créer autant de pseudo que vous voulez. Cela peut-être utile pour rester discret et anonyme mais cela peut avoir des conséquences sur vos fameux fees.

Imaginons que vous possédiez 2 BTC sur une adresse et 3 sur une autre (soyons fou!) et que pour acheter une Tesla vous avez besoin de 4 BTC. Cela se comporte comme des pièces (d’où le terme «coin» de bitcoin): vous devez donner 5 BTC et indiquer que vous souhaitez que l’on vous rende la monnaie, en précisant sur quelle adresse. Si vous le faîtes pas, le reste ira entièrement au mineur, c’est le fameux fee.

Dans cet exemple il n’y a pas de fee (3+2 = 4+1). Les adresses utilisées pour envoyer de l’argent sont appelées «input», et celles qui servent à les recevoir les «output». Notez bien ces termes car c’est justement eux qui définissent en grande partie la taille des transaction en octets.

On a approximativement:

L’exemple le plus classique c’est nb_input = 1 (tout l’argent provient d’une seule adresse) et nb_output = 2 (vous envoyez l’argent à une adresse mais vous récupérez la monnaie sur une autre). Ce qui donne 1*148 + 2*34 + 10 = 226 octets, valeur citée plus haut.

Pour les plus curieux l’input est plus volumineux car elle nécessite de définir l’origine de son gain et d’inclure un script de signature.

J’ai fait un excel que vous pouvez copier pour simuler les fees pour différentes valeurs d’input, d’output.

Ce tableau montre bien que pour réduire la taille de vos transactions (et donc vos fees) vous devez avoir votre argent sur une seule adresse. Cette adresse peut évidemment changer au court du temps. D’ailleurs quand vous indiquez l’adresse où vous souhaitez récupérer la monnaie la plupart des logiciels vous propose une nouvelle adresse pour plus discrétion.

Deuxième optimisation: investissez des montant importants par rapport aux fees en cours

Comme on vient de le voir les fee ne dépendent pas du montant de vos transactions. Plus cette dernière est importante, plus les fees seront proportionnellement faibles.

  • Pour 140 euros de BTC -> les 14 euros représentent 10% de la transaction
  • Pour 1400 euros de BTC -> les 14 euros représentent 1% de la transaction
  • Pour 14000 euros de BTC -> les 14 euros représentent 0,1% de la transaction

On le voit bien plus on mise de gros montant plus ces fees sont faibles en pourcentage (c’est au final ce qui compte le plus à mon sens). Il serait donc intéressant de jouer «grouper» pour minimiser les frais de transactions.

Troisième optimisation: anticipez vos transactions

Comme on l’a vu plus haut, plus vos transactions ont un rapport Sat/B important, plus les mineurs sont susceptibles d’ajouter rapidement votre transaction au prochain block. Il faut donc avoir un taux «Sat/B» qui correspondent au cours actuel. Si vous êtes trop haut, vous donnerez de l’argent pour rien, et si vous êtes trop bas votre transaction risque de mettre plusieurs jours à être validée.

Si on regarde ce site, on peut voir qu’en attendant 6 blocks (1h environ) on peut donc réduire en moyenne de 25% vos frais de transactions. Donc si vous n’êtes pas pressé et que vous envoyez le virement avant d’aller au lit vous pouvez même descendre un peu plus bas.

Attention de ne pas faire comme moi: j’ai tenté un taux à 42 Sat/B et cela fait presque une semaine que ma transaction n’est pas validée…

Conclusion

On comprend bien avec ces frais de transactions que le bitcoin n’est pas pour le moment adapté aux micro-paiements. Cela tombe bien car la taille d’un block (1Mo), d’une transaction (226 bytes en général), la durée entre 2 blocks (10 minutes) font que le système ne peut valider que 7 transactions par seconde seulement:

  • Par block on peut avoir 1024*1024 / 226 = 4640 transactions
  • Un block est ajouté toutes les 10 minutes (600 secondes), cela fait 7.7 transactions par seconde.

A comparer avec VISA qui valide plusieurs milliers de transactions par seconde.

L’article initial a été publié sur Medium.

Le contributeur :

 

Marc Lebel est le co-fondateur de LouerAgile.

Découvrez WE, le nouveau media d'intelligence économique consacré à l'innovation en europe. Retrouvez les informations de plus de 4500 startups et 600 fonds d'investissements Pour en savoir plus, cliquez ici
Bouton retour en haut de la page
Share This