Du libre, du code, des idées, du mélange d’ArraKISS…

De l’épice pour la pensée

Il y a à peu près un mois, j'ai ajouté sur mon site un petit bout de javascript pour intégrer coinhive et proposer aux visiteurs de miner du monero pour moi.
L'idée me semblait intéressante sur plusieurs points et je voulais savoir ce que ça pourrait donner.

Aujourd'hui, cela a fait gagner 0.00418 XMR, soit environ 5 centimes d'euros par mois, alors que certains ont fait tourner leur processeur rien que pour "me récompenser". Par ailleurs, il faut savoir que la somme minimale que l'on peut retirer à coinhive est de 0.5 XMR. On en est très loin donc.
Je met donc fin à cette expérience car :

  • Cela me gêne que des lecteurs de bonne foi pensent récompenser l'auteur alors que seul coinhive en profite;
  • Le côté abusif de coinhive qui tournait de façon cachée, en prenant toutes les ressources, peu importe s'il s'agit d'un mobile ou non a été pris en compte en amont;
  • Ce n'est pas rentable ni pour moi, et décevant pour ceux qui souhaitent bien faire;
  • Les autres méthodes de remerciement sont beaucoup plus efficaces ("merci", "coucou", ...);
  • Je n'aime pas dépendre d'un service tiers.

Alors qu'il avait été annoncé un modèle économique alternatif aux publicités pour récompenser les créateurs, je n'y crois pas du tout (ou alors il faut clairement abuser des ressources des visiteurs). Les dons récurrents via liberapay, les virements bancaires, l'envoi postal d'une carte avec un petit mot sont beaucoup plus efficaces (surtout en terme d'énergie).

J'avais déjà parlé des cryptomonnaies et je terminais par duniter. Cette dernière est pensée autour d'une philosophie captivante qui correspond davantage à mes valeurs que les autres. Cependant, et je me demande encore pourquoi, je me fourvoyais complètement sur la façon de l'utiliser, c'est pourquoi j'ai envie d'écrire ce petit guide. Entre la version desktop, la version server, le logiciel à utiliser pour échanger des sous, puis les inscriptions à faire alors que je croyais avoir un portefeuille... Bref, il est temps de poser ça à plat comme on dit. :)

Notez que je vais décrire la procédure sous OpenBSD. Avant de vous lancer dans les compilations, vérifiez si un binaire n'existe pas déjà.

1. Avant tout, il faut bien comprendre...
Contrairement aux autres cryptomonnaies, il y a une différence entre le logiciel et la monnaie.
"duniter", c'est le logiciel libre qui permet les transactions.
"Ğ1" est une monnaie disponible via duniter. Il est possible d'utiliser d'autres monnaies, mais c'est cette dernière qui est actuellement la plus utilisée. De plus, c'est libre ! :)
Un troisième logiciel est nécessaire pour échanger de la monnaie. Ce dernier est spécifique à la monnaie utilisée. Ce sera dans l'exemple cesium, mais il en existe d'autres.

Cela peut paraître excessif, mais c'est en réalité toute la force du logiciel libre. Pour résumer :

  • Un démon/protocole : duniter
  • Plusieurs monnaies : on s'intéressera à Ğ1
  • Une interface pour échanger des sous : cesium

2. Échanger des Ğ1
Téléchargez et décompressez l'archive de cesium qui est un logiciel nous permettant d'échanger de la monnaie. Je vous conseille la version "-web" qui ne nécessite qu'un navigateur pour s'en servir.

Décompressez l'archive .zip, puis ouvrez le fichier index.html dans un navigateur (Firefox ;) ).

Je vous conseille de suivre la visite guidée très bien faite pour découvrir cesium.

Lors du premier lancement, on vous propose de créer un compte. C'est nécessaire pour être inscrit dans le registre public du Ğ1. Cela vous crée un portefeuille. Si vous n'avez pas de compte, créez un compte "membre" pour pouvoir plus tard participer au dividende universel.
Si on ne vous propose rien, cliquez sur le lien "créer un compte"

Notez bien votre mot de passe, récupérez le certificat de révocation (on ne sait jamais), puis cliquez sur "mon compte" à gauche pour noter votre clé publique et modifier les informations vous concernant.

Vous voilà prêts à échanger des Ğ1 en cliquant sur le bouton "Virement" à gauche :

(bon, il faudra en recevoir avant... ;P )

Voir aussi l'excellent tutoriel suivant : http://www.le-sou.org/inscription-tuto/

3. Participer à l'utilisation des Ğ1 en étant un nœud

Vous pouvez héberger un noeud et participer aux calculs nécessaires aux échanges de Ğ1. Je reprends ici les explications pour OpenBSD (oh le fainéant). Tant qu'à faire, je vous propose une méthode pour, autant que possible, séparer les permissions et faire les choses proprement.
Je vais créer un utilisateur "_duniter" dont le seul rôle sera de faire tourner duniter, afin d'éviter de faire tourner le démon en tant que root.
Ensuite on installe node.
On s'identifie comme _duniter, puis on télécharge et compile duniter.

useradd -m -d /var/duniter
pkg_add node
npm install --global yarn
ln -s /usr/local/bin/python2.7 /usr/local/bin/python
su _duniter
cd /var/duniter
ftp -o duniter.tar.gz https://github.com/duniter/duniter/archive/v1.5.9.tar.gz
tar xvzf duniter.tar.gz
mv duniter-* duniter
cd duniter
yarn

On peut maintenant l'utiliser en suivant les recommandations situées ici.

On indique quelle clé utiliser : je me sert de la même clé que pour mon inscription précédente sous cesium par facilité.

./bin/duniter wizard key
? Modify you keypair? (y/N) y   
? Key's salt ********************************************   (clé publique précédente)
? Key's password *************************************************   (mot de passe du compte précédent)

Configurez ensuite le réseau. Dans le doute, laissez par défaut.

./bin/duniter wizard network
? IPv4 interface trunk0 192.168.1.64  (interface réseau à utiliser)
? IPv6 interface None
? Port 10901
? Remote IPv4 Enter new one
? Remote IPv4 109.190.193.124 (ici, c'est votre [IP publique|http://ipecho.net])
? Remote port 10901
? Does this server has a DNS name? n (répondez "y" si vous voulez héberger le noeud sur un serveur disponible avec un nom de domaine)

Enfin, lancez la synchronisation :

./bin/duniter sync g1.duniter.org 443

Vous pouvez maintenant lancer duniter et participer aux calculs :

./bin/duniter direct_start

ou pour qu'il tourne en arrière plan :

./bin/duniter start

Si vous faîtes tourner ce noeud sur un serveur, veillez à bien ouvrir les ports 10901. De plus, créer un CNAME pour un nom de domaine dédié à duniter sera sans doute pratique.

Afin d'avoir un service à lancer au démarrage sous OpenBSD, vous pouvez créer le fichier /etc/rc.d/duniter_daemon pour gérer le démon avec rcctl.

#!/bin/sh
#
# $OpenBSD: duniter.rc,v 1.0 2017/11/08 17:58:46 Thuban$

daemon="/var/duniter/duniter/bin/duniter"
daemon_user="_duniter"

. /etc/rc.d/rc.subr

rc_start() {
        ${rcexec} "${daemon} ${daemon_flags} start"
}

rc_stop() {
        ${rcexec} "${daemon} ${daemon_flags} stop"
}


pexp="node: duniter.*"
rc_reload=NO

rc_cmd $1

La suite, c'est comme n'importe quel service sous OpenBSD :

  • Activer le service : "rcctl enable duniter_daemon"
  • Démarrer le noeud : "rcctl start duniter_daemon"
  • Arrêter le noeud : "rcctl stop duniter_daemon"

Pour avoir des infos sur duniter, vous pouvez lancer :

su -l _duniter -c "/var/duniter/duniter/bin/duniter logs"

N'est-ce point merveilleux ? :

2017-11-09T19:00:19+01:00 - info: Pulling blocks from the network...
2017-11-09T19:00:22+01:00 - info: Block resolution: 0 potential blocks after current#67928...
2017-11-09T19:00:22+01:00 - info: Will pull blocks from the network in 0 min 20 sec
2017-11-09T19:00:26+01:00 - info: ⬇ PEER LFoG1wup
2017-11-09T19:00:26+01:00 - info: ✔ PEER LFoG1wup
2017-11-09T19:00:26+01:00 - info: POST Peer LFoG1wupku#67905
2017-11-09T19:00:26+01:00 - info: ⬇ PEER LFoG1wup
2017-11-09T19:00:26+01:00 - info: ✘ PEER LFoG1wup
2017-11-09T19:00:26+01:00 - error:  httpCode=400, ucode=2023, message=Peer document already known
2017-11-09T19:00:26+01:00 - warn: Could not reach duniter.fiat-tux.fr:10901
2017-11-09T19:00:26+01:00 - info: ⬇ PEER LFoG1wup
2017-11-09T19:00:27+01:00 - info: ✘ PEER LFoG1wup

Voir aussi la documentation d'installation

Vous pouvez activer l'interface web ainsi.

./bin/duniter plug duniter-ui@1.4.x 
sed -i "s/duniter\//..\/..\/..\/..\//g" node_modules/duniter-ui/server/controller/webmin.js

Cependant, j'ai tenté de modifier le fichier /etc/rc.d/duniter_daemon pour mettre "webstart" au lieu de "start", mais il ne semble pas trouver le module duniter-ui dans ce cas, donc ça ne fonctionne pas. Une histoire de chemin d'accès je suppose :/
Mais vous pouvez toujours lancer le noeud duniter et son interface web après vous être connecté avec le compte _duniter.
Si vous avez activé l'interface web, au lieu d'ouvrir et rediriger des ports sur votre serveur, créez un tunnel ssh ainsi à partir de votre ordinateur de bureau :

ssh -L 9999:127.0.0.1:9220 utilisateur@votreserveur.com

Ensuite, sur votre ordinateur, ouvrez un navigateur à l'adresse http://localhost:9999 pour voir l'interface de duniter :

Une fois le serveur configuré, je vous conseille de désactiver les connexions vers le compte _duniter

# usermod -s /sbin/nologin _duniter

Conclusion
Plus je m'y intéresse, plus je trouve cette alternative intéressante. Le seul, (mais vraiment le seul) point sur lequel je m'interroge, c'est le côté public de toutes les transactions. Je n'ai pas envie de savoir ce que vous achetez, ni de publier publiquement à qui je donne des sous. Par contre, côté vitesse de calcul, rendement énergétique et toute la théorie du Dividende Universel, je suis conquis. Et vous? :)

Curieux de cette cryptomonnaie, je voulais tester duniter sous OpenBSD. Voici la marche à suivre :

Récupérez une archive de duniter sur github : https://github.com/duniter/duniter/releases/tag/v1.5.9

Ensuite, suivez la procédure suivante ("#" veut dire que c'est à lancer avec les droits super utilisateur, "$" en user normal) :

# pkg_add node
# npm install --global yarn
# ln -s /usr/local/bin/python2.7 /usr/local/bin/python
$ ftp -o duniter.tar.gz https://github.com/duniter/duniter/archive/v1.5.9.tar.gz
$ tar xvzf duniter.tar.gz
$ cd duniter*
$ yarn

On peut maintenant l'utiliser en suivant les recommandations situées ici.

./bin/duniter wizard key
./bin/duniter wizard network
./bin/duniter sync

Et ça tourne...

Vos clés sont dans le fichier ~/.config/duniter/duniter_default/keyring.yml

Je n'arrive cependant pas à avoir l'interface web comme indiqué dans la doc, comme si elle n'existait plus. En fait, la documentation est soit incomplète soit peu à jour, soit sous forme de vidéo ce qui est très peu pratique à mon avis. Il faudra peut-être améliorer ces points pour que duniter soit plus utilisée. La prochaine étape serait de se faire certifier par d'autres utilisateurs, mais là aussi je bloque : où est-ce que ça se passe?

EDIT : suite aux commentaires, pour avoir l'interface web :

./bin/duniter plug duniter-ui@1.4.x
sed -i "s/duniter\//..\/..\/..\/..\//g" node_modules/duniter-ui/server/controller/webmin.js
./bin/duniter direct_webstart

Il semble que les droits administrateur soient requis.

Puis direction https://localhost:9220

Une semaine après l'intégration de code sur mon site pour permettre aux visiteurs de miner via coinhive sans exploiter à 100% leurs ordinateurs, voici un petit bilan.

L'équivalent de 0.00157 XMR on été produits, soit environ 0,12€.

On voit bien le grand nombre de tests à la sortie de l'article:

Autant dire que si on n'abuse pas des ressources des visiteurs, ou qu'on ne détourne pas les bloqueurs de pubs, ce n'est pas énorme comparé aux publicités. À noter que je n'ai reçu aucune plainte indiquant que le processeur chauffait ou qu'il y avait un ralentissement de la machine en venant sur mon site. Suis-je trop raisonnable avec les valeurs introduites dans mon script ?

J'espère que ce résultat pourra alimenter la réflexion sur ces modes de financement.
Je vais attendre un mois pour faire un nouveau point et terminer l'expérience. À suivre ☺️

Lorsque j'ai parlé de miner du monero, j'ai reçu quelques commentaires et des mails indiquant que les cryptomonnaies, on n'y comprends rien, on est méfiants, c'est bizarre... Les cryptomonnaies, de quoi s'agit-il en guelques mots? Dans cet article, je vais essayer de décortiquer tout ça et d'expliquer comme à ma petite fille (virtuelle) l'intérêt de ces concepts.

(cet article a été écrit à deux reprises, suite à une sombre histoire de cache Firefox pas mis à jour lors d'un changement de version... Pardon! 😇)


Pour échanger entre eux, les humains ont utilisé le troc, puis des monnaies parce que c'était quand même plus pratique. Récemment, certains ont eu l'idée de cryptomonnaies. On va en regarder quelques unes pour voir pourquoi elles sont intéressantes, mais pas toutes car il y en a trop.

Pourquoi c'est cool les cryptomonnaies ?

  • On peut en envoyer partout dans le monde, il n'y a pas de frais de change comme quand on va dans un pays étranger.
  • Quand on envoie des sous, ils sont reçus quasiement aussitôt.
  • Les états et les banques ne contrôles pas ces échanges. Comme ça, tu peux acheter l'intégrale de twilight sans te taper la honte chez le banquier quand tu seras grande.

Quelques mots compliqués que je vais utiliser ensuite :

  • Blockchain ou chaîne de blocs : C'est un grand livre de compte où sont enregistrées les échanges d'argent.
  • Portefeuille : Chaque utilisateur a un portefeuille pour contenir son argent cryptographique, mais aussi des "clés" pour permettre aux échanges d'être authentiques. Pour envoyer des sous à Toto, je vais mettre un cadenas (clé publique) dont il est le seul à avoir la clé (clé privée).
  • Cryptographique ou cryptomonnaie : Quand je fais un chèque, je le signe. De même, lors d'une transaction de cryptomonnaie, on applique une signature numérique. Attention, "crypter" ne veut pas forcément dire "chiffrer" dans le sens "rendre incompréhensible si on n'a pas la clé du cadenas".

Bitcoin

Notre histoire commence avec le bitcoin, sans doute la plus connu à l'heure actuelle. C'est en 2008, sois près de 10 ans qu'un développeur dont l'identité réelle est inconnue publie du code open-source permettant d'utiliser cette nouvelle monnaie qui a pour principales caractéristiques :

  • La quantité maximale de bitcoin est fixée. C'est comme ça, il faut se les partager.
  • Les échanges de monnaie sont enregistrés dans un "fichier commun" appelé blockchain partagé entre tous les utilisateurs. Il n'y a pas de banque centrale qui contrôle ces échanges. On peut voir cette "chaîne de blocs" comme un grand livre de comptes public (eh oui, le bitcoin n'est pas privé).
  • Lorsqu'un utilisateur participe aux échanges en contribuant aux calculs nécessaires, il est récompensé en bitcoin. Lorsque quelqu'un calcule avec pour objectif de se faire des bitcoins, on dit qu'il "mine". Ces calculs sont obligatoires pour qu'une transaction ait lieu : il faut enregistrer dans la chaine de blocs : qui envoie de l'argent, à qui, combien, quel jour...

Malheureusement...

  • Le code source de la monnaie était adapté en 2007, lorsque le nombre d'échanges était peu nombreux. Depuis, bitcoin est victime de son succès et des monnaies alternatives basées sur bitcoin sont apparues pour pouvoir faire plus de 7 transactions par seconde.
  • Puisque tous les utilisateurs partagent la "blockchain", il est possible de savoir qui a acheté quoi et combien.
  • Le système Bitcoin ne chiffre aucune des données qu'il utilise. La cryptographie est uniquement utilisée pour créer des signatures non falsifiables et mettre en œuvre des fonctions à sens unique (extrait de l'article wikipedia. C'est pas tip top quand même.
  • Les bitcoins obtenus par les mineurs à son lancement ont aujourd'hui une valeur très importante comparée à celle des bitcoins qu'un nouvel utilisateur pourrait miner. :/

Litecoin

Le Litecoin ressemble beaucoup au Bitcoin. On peut noter quand même quelques différences intéressantes :

  • La licence sous laquelle est publiée Litecoin est MIT/X11 license, plus permissive.
  • Les algorithmes utilisés permettent de meilleures performances qu'avec Bitcoin.
  • La limite maximale des Litecoins est plus grande que pour les Bitcoins.

Et c'est à peu près tout. Pourtant , cette monnaie a eu et a encore beaucoup de succès.

Ethereum

Ethereum est la seconde cryptomonnaie la plus utilisée actuellement. C'est aussi celle qui a le plus souvent été "piratée". Comparé au Bitcoin, Ethereum ajoute l'idée de "contrat" qui sont des scripts permettant d'échanger des richesse en échange d'ether : la monnaie.
Il n'y a pas grand chose de nouveau par rapport aux monnaies précédentes point de vue concept, mis à part peut être le fait qu'une personne minant de l'ether peut choisir combien elle doit recevoir en échange de l'effort fourni.

Monero

Monero est aussi une monnaie OpenSource qui reprend les idées du Bitcoin mais corrige plusieurs points :

  • Un monero garde toujours la même valeur : c'est fongible. Cela veut dire qu'un monero miné aujourd'hui aura la même valeur d'échange dans un an. (Pas comme les cartes Panini de Papy qu'il collectionne pour les revendre hyper cher).
  • La quantité maximale de monero en circulation augmente de façon régulière au rythme de 0,3 XMR par minute, pas plus.
  • L'accent est mis sur la confidentialité des échanges. On ne peut pas savoir qui échange des moneros avec qui.
  • Les échanges sont chiffrés. On ne peut pas savoir combien de moneros sont donnés ou reçus.
  • Monero ne doit pas demander de plus en plus d'effort au fur et à mesure que cette monnaie se développe.

Duniter

Duniter reprend les mêmes concepts que bitcoin mais est plutôt pensée en termes d'économie que de code informatique. Cela lui permet d'être un peu plus humaine. La théorie complète peut être trouvée ici.

  • C'est libre (et pas seulement opensource) !
  • Avec duniter, ce ne sont pas les mineurs qui sont récompensés mais tout le monde. C'est une forme de salaire universel qui permet de ne pas pénaliser les nouveaux arrivants.
  • Il n'y a pas une quantité limite de duniter afin d'éviter la spéculation : des persones qui
  • Pour participer à duniter, il faut être reconnu par 5 autres utilisateurs comme étant "de confiance". Ça permet d'être tranquille, seuls des élus peuvent faire des transactions. Cependant, je trouve que c'est d'autant plus difficile d'utiliser cette monnaie, et je ne comprends pas bien comme faire pour être certifié, sauf de mettre partout sur les réseaux sociaux "qui m'aime me certifie". Il y a peut-être un risque aussi que les personnes sans amis soient exclues de ces échanges 😕

Bisous

Cette dernière monnaire est peu connue, et pourtant ses avantages sont vraiment géniaux :

  • À chaque fois qu'un bisou est envoyé, il disparaît aussitôt. Personne ne peut stocker des bisous pour les revendre plus cher ensuite.
  • Il n'y a pas de mineur de bisous. Chaque personne peut en produire une quantité infinie. Ainsi, personne n'est pauvre.
  • Les transferts de bisous sont instantanés.
  • Cette monnaie ne pourra jamais disparaître et tout le monde peut s'en servir.
  • Chaque bisou a une valeur inestimable et unique.
  • C'est très difficile de voler un bisou (et c'est interdit par la loi).

Alors ma puce, quelle monnaie vas-tu choisir ?