Personne ne veut dépenser bêtement des bitcoins – Le batching, une solution pour l’avenir de Bitcoin
La question de la scalabilité transactionnelle du Bitcoin est en constante itération et développement depuis que le protocole fut mis en marche en 2009. Deux écoles de pensées principales ont divisé les usagers, soit celle de l’augmentation de la taille des blocs et celle de l’optimisation de l’espace de bloc et la scalabilité à travers les secondes couches, telles que le réseau Lightning.
Les plus vifs des débats se déroulent durant les guerres de scalabilité de 2015 à 2017, qui s’atténuent avec la création de Bitcoin Cash et l’implémentation de Segwit dans le protocole Bitcoin le 23 août 2017. Cette dernière méthode permet l’augmentation de la taille des blocs tout en suivant le principe de rétrocompatibilité, considéré donc comme un compromis entre les deux camps. À travers ce principe, les nœuds du réseau Bitcoin ne sont pas obligés d’opter pour le nouveau client de Bitcoin Core afin de demeurer compatibles avec le réseau.
De plus, Segwit a permis l’avènement du Lightning Network, une seconde couche de micropaiements Bitcoin, grâce à la résolution du problème de malléabilité de transactions.
Retour sur l’optimisation de l’espace de bloc (on-chain)
La majeure technologie de scalabilité, le Lightning Network, est une méthode efficace pour augmenter la capacité transactionnelle du Bitcoin sans que les règles originales du protocole ne doivent être modifiées.
Par contre, cette technique est très complexe et requiert encore énormément de développement avant d’être totalement prête. De nombreuses autres techniques de scalabilité ont été explorées jusqu’à une certaine mesure, et ce dès l’implémentation du Bitcoin.
La capacité transactionnelle (transactions par seconde) est non seulement dépendante de la fréquence et de la taille des blocs, mais également directement corrélée à la taille des transactions. Il suffit donc de rendre les transactions plus légères en taille (bytes) et non en volume Bitcoin afin de pouvoir en insérer un plus grand nombre dans chaque bloc.
Une des techniques les plus répandues et connue pour cet effet est le Batching de transactions.
Batching, késaco ?
Pour comprendre ce qu’est le Batching, il est très utile de comprendre tout d’abord le modèle transactionnel du Bitcoin qui repose sur les UTXO (Unspent transaction outputs).
Chaque transaction Bitcoin est au minimum composé de deux champs d’entrée, soit un input (expéditeur) et un output (récipient).
Afin qu’un input puisse être dépensé par son expéditeur, il faut qu’il signe celui-ci avec la clé privée correspondante. Le même processus prévaut au niveau du récipient de la transaction, qui ne pourra que dépenser l’output s’il détient lui également la clé privée correspondant à celui-ci.
Une transaction habituelle par contre va souvent détenir au moins deux outputs, dont un va être destiné à l’expéditeur de la transaction pour le change restant de l’input utilisé dans celle-ci (comme illustré ci-dessous).
Vous pouvez voir que dans cette transaction, l’input (à gauche) renferme 0.6066744 BTC et que les deux outputs sont de 0.08281911 BTC et 0.52380329 BTC.
L’input doit donc être déconstruit en deux outputs afin que la transaction se réalise.
Par contre, il est également possible qu’une transaction soit composée de plusieurs inputs qui s’assembleront afin de former l’output désiré.
Cela dit, une transaction Bitcoin peut être composé de multiples inputs et outputs au désir du créateur de celle-ci. La plupart des usagers ne se préoccupent pas de la construction d’une transaction, car leur portefeuille le fera à leur place. Il est possible également de le faire manuellement à des fins d’optimisation transactionnelle.
Pour en revenir au Batching, il n’y a pas de définition officielle pour le processus de Batching, par contre il est communément accepté qu’une transaction ayant plus de 3 outputs est une transaction “batchée”.
Et oui, c’est aussi simple que cela. Le but est de mettre en lots des transactions individuelles afin d’optimiser l’espace qu’elles auraient prises si construites séparément.
Disons qu’un expéditeur veut envoyer du Bitcoin à trois adresses différentes. Il pourrait procéder à l’envoi de trois transactions distinctes, mais il ne s’agirait certainement pas de la manière optimale de procéder. Sachant qu’une transaction régulière prend par défaut 346 bytes, il pourrait simplement greffer les deux outputs additionnels à la première transaction qui eux ne rajoutent que 34 bytes d’espace chacun à la transaction.
Donc au lieu de prendre 1038 bytes pour trois transactions individuelles, la transaction batché ne pèserait que 414 bytes, représentant une économie incroyable de 60.11%.
Les possibles économies sont encore plus apparentes lorsqu’un ajoute un grand nombre d’output à une transaction puisque les 346 bytes de transactions initiales deviennent de plus en plus négligeables.
À qui sert le Batching?
Est-ce que vous avez déjà envoyé plusieurs transactions Bitcoin de suite ? Si oui, le batching pourrait vous servir à économiser en frais de transaction Bitcoin. Si vous trouvez que ça ne vaut pas la peine, je dois vous rappeler qu’envoyer des fonds pouvait coûter jusqu’à 50$ en décembre 2017 quand le Bitcoin a atteint une valeur de $20 000 USD. Que pensez-vous qu’arrivera la prochaine fois ?
À vrai dire, le batching est surtout utile aux compagnies telles que des plateformes d’échange, des processeurs de paiements et des sites de jeux de hasard utilisant Bitcoin. Ce sont les principaux utilisateurs du réseau Bitcoin pour qui la dépense de ces frais est loin d’être négligeable. Aussi, c’est à travers l’adoption de batching par ses entreprises que beaucoup d’espace de bloc sera libéré et permettra l’utilisation du Bitcoin par plus d’usagers. L’optimisation à l’infini est la vision de la scalabilité du Bitcoin.
Veriphi a construit un tableau de comparaison des fonctionnalités des portefeuilles Bitcoin que vous pouvez trouver ici en français. Rares sont les portefeuilles qui offrent la fonctionnalité de batching à leurs usagers, il n’y que Bitcoin Core, Blue Wallet, BTCPay, Electrum, Samourai, Bitpie & Bitpay qui le font. Tous sont recommandés par Veriphi sauf les 2 derniers, respectivement par un manque de transparence du code source et pour leur support à l’initiative controversée de Segwit2x.
L’outil de Batcher de Bull Bitcoin
Vu que l’utilisation du Batching est surtout bénéfique aux entreprises œuvrant dans des activités commerciales en ligne et utilisant le Bitcoin dans leurs transactions, cette technique doit se faire implémenter de manière programmatique en le connectant au portefeuille de l’entreprise et à leurs applications.
Bull Bitcoin est une de ces entreprises : ils vendent et achètent du Bitcoin aux Canadiens à grande échelle et avec plusieurs fonctionnalités dans leur service. En fin de 2018, ils ont rendu public le code source de Cyphernode, un logiciel de serveur API pour que les développeurs et entrepreneurs l’utilisent afin de construire leurs applications Bitcoin.
Beaucoup de travail s’est fait depuis et beaucoup de développeurs en ont bénéficié, dont nous-même chez Veriphi. Le 9 septembre 2020, ils ont annoncé Batcher, un logiciel plugin à Cyphernode qui permet de programmer des transactions de Batching selon les besoins de l’entreprise avec une technologie de Webhooks qui se connecte bien aux applications modernes. Ce lancement est le premier de son genre, souvent ces outils sont propriétaires et les compagnies ne les partagent pas. Cet article rédigé par le PDG, Francis Pouliot, explique le logiciel en profondeur (mais en anglais !).
Le mot de la fin
Le Batching est disponible depuis 2011 mais c’est seulement en Mars 2020 qu’une plateforme d’échange énorme comme Coinbase l’a adopté. Ceci démontre qu’il reste du chemin à faire pour une adoption plus étendue, donc le lancement d’outils tels que Batcher par Bull Bitcoin est utile.
L’équipe Veriphi a publié une étude de cas en Avril 2020 sur le Batching et Segwit et leur utilisation actuelle dans le réseau. Nous avons découvert que si leur adoption avait été instantanée depuis que ces techniques sont disponibles, un demi-milliard de dollars américains aurait pu être économisés par les utilisateurs. Vous pouvez consulter un article d’introduction sur la recherche ici (en français, promis !).