Bitcoin anonyme : devenir fournisseur de liquidité sur JoinMarket
La fongibilité de Bitcoin est un sujet bien trop sérieux pour être ignoré, et c’est pour cela que les outils de mélange de nos précieux satoshis fleurissent. Dernier en date, le processeur de paiement BTCPay, qui a récemment intégré l’implémentation PayJoin afin d’améliorer la confidentialité des transactions entre un acheteur et un commerçant.
Je vous avais présenté il y a quelque temps JoinMarket. C’est une solution décentralisée et non custodial permettant de mélanger ses fragments de bitcoins sans jamais avoir affaire à un tierce partie. Plus précisément, nous avions vu comment louer les services des fournisseurs de liquidité.
A présent, je vous propose d’aller encore plus loin, avec à la clef de précieux satoshis à gagner. Suivez-moi et devenez un fournisseur de liquidité !
Plus communément appelé un maker ou fournisseur de liquidité, sa mission est de mettre à disposition des fonds dormants afin d’aider ceux qui souhaitent mélanger leurs bitcoins.
Si vous être un habitué des masternodes et du proof of stake, cela peut vous rappeler quelque chose. Il n’en est rien, puisque vos fonds ne sont ni bloqués ni inactifs. Ces derniers vont devoir d’ailleurs travailler durement.
Un travail en apparence simple
Comme nous l’avions vu dans le précédent article, JoinMarket peut se résumer à un super wallet Bitcoin muni de scripts Python. En tant que fournisseur de liquidité, votre travail se résumera à déposer vos bitcoins dans votre wallet, lancer un de ces fameux scripts et attendre…
En pratique, il vous faudra trouver le bon paramétrage pour être profitable. Cet article ne vous donnera pas la solution clef en main pour gagner facilement des satoshis, mais vous donnera les moyens pour vous lancer plus sereinement.
Dernière chose, et si vous souhaitez réellement vous lancer dans l’aventure, allez-y franchement et ne vous contentez pas d’y déposer quelques dizaines de milliers de satoshis. Allez-y à coup de dizaines de millions.
Préparer son maker
Je ne reviendrai pas sur l’installation de JoinMarket, vous trouverez toutes les informations dans le précédent article. Retenez simplement qu’il vous faudra un environnement python et d’un full node correctement configuré.
Un bon maker doit être correctement paramétré afin de proposer une offre suffisamment lucrative et réaliste. Ceci passe par la configuration du script python yield-generator-basic.py. Comme tous les scripts, vous le trouverez dans le répertoire joinmarket-clientserver/scripts. Par défaut, il contient les variables suivantes :
txfee = 100 cjfee_a = 500 cjfee_r = '0.00002' ordertype = 'swreloffer' #'swreloffer' or 'swabsoffer' nickserv_password = '' max_minsize = 100000 gaplimit = 6
Retenez les biens car elles sont essentielles.
Un fournisseur de liquidité peut proposer son offre avec deux types de frais.
Ce choix se matérialise avec la variable ordertype. Configuré à swreloffer, le demandeur de la transaction jointe (taker) devra vous payer des frais proportionnels à la transaction. Ce pourcentage est défini par la variable cjfee_r qui est par défaut de 0.002% de la transaction jointe.
Vous pouvez choisir de définir un ordertype de type swabsoffer et dans ce cas, le demandeur devra vous payer un montant fixe qui devra être défini dans la variable cjee_a. Par défaut, le demandeur devra vous payer 500 satoshis quel que soit le montant de la transaction jointe.
Ce n’est pas tout ! Même si les frais de minage sont à la charge du demandeur de liquidité, le fournisseur peut y participer en précisant à quelle hauteur via la variable txfee. Par défaut, en tant que fournisseur de liquidité, vous payerez 100 satoshis.
A l’aide de l’ensemble de ses paramètres et du montant des fonds présent dans votre * wallet, le scripts yield-generator-basic.py générera une offre incluant notamment la capacité minimale et maximale du fournisseur de liquidité.
La capacité maximale sera toujours légèrement inférieure à votre solde.
La capacité minimale sera déterminée afin que le fournisseur de liquidité soit toujours profitable. Plus vos frais seront importants, et plus votre capacité minimale sera basse.
Il n’existe pas de configuration idéale, cependant je vous déconseille de miser sur des frais très faibles. En effet, vous remporterez sans doutes plus d’offres, mais pour des montants dérisoires et cela ne permettra pas de maximiser le blocage de vos fonds. Sans compter qu’il faudra déduire les frais de dépôt et de sortie de votre wallet. Nous y reviendrons un peu plus tard, mais dans tous les cas, il faudra miser sur le temps long. Comptez plusieurs mois.
Par ailleurs, je vous recommande d’aller comparer votre offre avec le carnet d’ordres que vous trouvez à l’adresse suivante : https://joinmarket.me/ob/.
Enfin, sachez, qu’il existe un script alternatif nommé yg-privacyenhanced.py. Il permet d’éviter l’identification d’un fournisseur de liquidité à travers les paramètres de son offre en modifiant légèrement les valeurs de cette dernière. Je vous le recommande d’ailleurs vivement.
Proposer son offre
Si vous venez du précédent article, vous devriez disposer d’une configuration fonctionnelle. Cependant, je vous invite à créer un nouveau wallet afin d’y déposer vos fonds.
Lancez l’environnement python en lançant la commande suivante dans le répertoire joinmarket-clientserver :
source jmvenv/bin/activate
Créer un nouveau wallet avec la commande suivante dans le répertoire scripts et donnez-lui un nouveau nom pour le différencier de votre précédent wallet :
python wallet-tool.py generate
Il ne vous restera plus qu’à envoyer vos fonds dans une des adresses du mixpeth 0. Vous pouvez la récupérer avec la commande suivante :
python wallet-tool.py NomDuWallet.jmdat
Petite astuce pour gagner un peu plus d’anonymat, je vous recommande de modifier votre fichier de configuration afin que le script se connecte au salon IRC à travers TOR. Pour ce faire, éditer le fichier joinmarket.cfg que vous trouverez dans le répertoire ~/.joinmarket/.
Retirez le caractère # des lignes suivantes afin de les dé-commenter :
- Dans la section [MESSAGING:server1] :
host = darksci3bfoka7tw.onion socks5 = true
- Dans la section [MESSAGING:server2] :
host = ncwkrwxpq2ikcngxq3dy2xctuheniggtqeibvgofixpzvrwpa77tozqd.onion port = 6667 usessl = false socks5 = true
Après 5 confirmations, votre wallet et fin prêt. Il ne vous reste plus qu’à lancer le script avec la commande suivante :
python yield-generator-basic.py NomDuWallet.jmdat
Après quelques secondes, ce dernier positionnera son offre de liquidité avec un message du type :
offerlist=[{'oid': 0, 'ordertype': 'swreloffer', 'minsize': 100000, 'maxsize': 907870980, 'txfee': 45, 'cjfee': '0.000728'}]
L’offre est valable tant que le script est actif. Chaque redémarrage impliquera une nouvelle offre.
Dès qu’il remportera une offre, vous verrez des messages décrivant la transaction auquel le script a participé ainsi que les frais engrangés avec des messages de ce type :
filling offer, mixdepth=0, amount=1000000 sending output to address=3xxxxxxxxxxxxxxxxxxxxxx potentially earned = 1000
Ces messages indiquent que le script a utilisé vos fonds à hauteur de 1000000 satoshis pour les envoyer sur l’adresse “3xxxxxxxxxxxxxxxxxxxxxx” de votre wallet. Cette transaction vous a fait gagner 1000 satoshis.
Sortir de JoinMarket
Contrairement à tumbler, le script du fournisseur de liquidité continuera d’utiliser vos fonds pour les envoyer dans les différends mixdepth de votre wallet. Pour rappel, ce sont des compartiments permettant de cloisonner vos fonds afin de préserver l’efficacité de vos transactions jointes.
Le problème arrive le jour où vous devrez récupérer vos fonds sur votre wallet matériel. Premier conseil, n’envoyez jamais vos fonds dans votre wallet de tous les jours. Si vous utilisez un Ledger, je vous recommande d’utiliser un nouveau compte à l’aide de Ledger Live.
Au vu du fonctionnement du wallet de JoinMarket, il vous faudra envoyer vos fonds compartiment par compartiment (mixdepth) sur des adresses différentes. Si vous souhaitez préserver votre anonymat gagné, je vous recommande d’utiliser la commande suivante et de faire appel à d’autres fournisseurs de liquidité pour mélanger vos satoshis :
La commande suivante enverra tous les fonds du compartiment 0 (mixdepth) à l’adresse 3xxxx dans une transaction jointe qui réunira entre 4 et 6 participants :
python sendpayment.py -m 0 wallet.jmdat 0 3xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Si vous ne souhaitez pas utiliser une transaction jointe, vous pouvez lancer la commande suivante :
python sendpayment.py -m 0 -N 0 wallet.jmdat 0 3xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Il vous faudra réaliser ces opérations pour l’ensemble de vos compartiments. Modifiez le paramètre -m pour le préciser.
Vous vous rendrez compte que ces transactions vont vous coûter assez cher. C’est pour cela qu’un fournisseur de liquidité doit être prêt à mobiliser ses fonds sur le long terme afin d’éviter d’être en perte sèche.
En conclusion, bien qu’en apparence simple, être fournisseur de liquidité implique d’avoir une bonne connaissance du protocole Bitcoin et d’être en possession de fonds suffisamment importants. En contrepartie, et si vous avez du temps devant vous, vous allez pouvoir mélanger vos précieux satoshis tout en accumulant ce qui est un véritable cadeau pour tout maximaliste Bitcoin !