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

De l’épice pour la pensée

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 ☺️

Merci aux développeurs de Gimp de m'offrir un outil beaucoup trop complet pour moi mais qui me permet quotidiennement :

  • Ouvrir n'importe quelle image
  • Ouvrir les pages d'un PDF pour les modifier
  • Améliorer la netteté des photos et fichiers scannés
  • Découper des images scannées dans les livres pour mettre dans mes cours
  • Changer les textes dans les BD afin de créer des situations déclenchantes pour mes élèves
  • De t'utiliser sur n'importe quel système, même OpenBSD ou en version portable
  • Modifier les images en quelques clics, sans pour autant être graphiste.
logo gimp

Gimp a d'ailleurs besoin d'aide pour se financer. Visitez cette page pour en apprendre plus sur cet appel.

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 ?

Dans la série, je voudrais remercier les développeurs de PosteRazor.

Cet outil qui n'a pas bonne mine est extrêment pratique. Il permet de répartir une image sur plusieurs pages. En gros, on lui donne une image à manger, on lui dit sur combien de feuilles A4 elle doit être répartie, et il nous donne un PDF à imprimer avec une marge pour pouvoir coller les feuilles. Je l'utilise très souvent pour créer des affichages en grand dans ma classe.

aperçu de posterazor

Certes, c'est sans doute plus pratique à un prof qu'à un PDG...

Vous avez peut-être déjà entendu parler de l'idée consistant à remplacer les encarts de publicité sur un site web par un bout de code javascript qui permet au visiteur de générer de la cryptomonaie pour le webmaster. Korben en a déjà parlé, et je dois avouer trouver le concept intéressant, mais pas pour les mêmes raisons que lui.

Tout d'abord, permettre à un site de financer son hébergement ne peut que l'encourager à améliorer le contenu. Jusqu'à présent, cela se fait par des publicités, à l'insu du visiteur, c'est envahissant et énervant.

Coinhive propose donc une alternative intéressante et beaucoup moins envahissante. Ce service propose notamment :

  • Remplacer les captchas par la génération d'un peu de cryptomonnaie. C'est pas mal, mais déjà que les captchas normaux m'énervent, si je dois attendre 30s pour pouvoir poster un commentaire, ça va vite me saouler.
  • Lancer la génération de cryptomonnaie lorsque le visiteur visite la page. Si c'est automatique, je trouve ça carrément irrespectueux, le visiteur n'a jamais demandé qu'on fasse cracher son CPU, il veut juste lire une page web.
  • Chacune de ses solutions réclame qu'on désactive un bloqueur de pub. Ben non justement, si le visiteur en a un, c'est pas pour qu'on vienne lui chier dans les bottes avec un message anti-adblock.
  • Par ailleurs, ces deux idées font travailler le pc du visiteur au maximum de ses capacités par défaut, sans fin pour la seconde. En ce qui me concerne, j'ai vite fait de fermer un onglet qui bouffe toutes mes ressources.

Non satisfait par les solutions proposées par coinhive, mais pourtant séduit par le concept, me voilà parti pour javascripter (si si ça se dit) en lisant la doc donnée. Laisser de la doc, je trouve ça vachement cool!
Voici les idées que je souhaite mettre en place :

  • Limiter la charge processeur et prendre soin des ventilos des visiteurs.
  • Proposer un bouton "Super article", qui va hasher une certaine quantité (un peu comme le captcha) et s'arrêter ensuite. C'est le visiteur qui clique s'il a envie de "récompenser".
  • Autre possibilité, lancer le minage de cryptomonnaie après un certain délai, pour une durée limitée. Cela suppose que si le visiteur reste à lire un article pendant un certain temps, c'est que l'article a de l'intérêt et qu'il ne fait pas autre chose en même temps demandant de la charge processeur.

Je pars du principe que c'est intéressant d'afficher la progression du hashage au visiteur, on prévoit dont un petit bout de html qui contiendra nos mesages :

<div id="coinhive"></div>

On démarre le minage après un certain délai en arrière-plan avec cette fonction :

function start_miner_after(delay, to_compute) 
{
	setTimeout(function(){
		start_miner(to_compute, showmsg=false);
	}, delay*1000);
}

Si on veut ajouter un bouton pour que le visiteur lance le hashage par lui-même, on peut mettre le code html suivant dans sa page en précisant la quantité à hasher:

<div id="coinhive"><button onclick="start_miner(1024)">Start mining</button></div> 

La fonction qui lance le minage est la suivante :

function start_miner(hash, throttle=0.5, showmsg=true)
{
	// 'hash' is the number of hash you want the user to compute. 
	// Must be a multiple of 256

	var miner = new CoinHive.Anonymous(public_key);
	miner.setThrottle(throttle);
	console.log('Start mining using ' + throttle * 100 + '% of CPU');
	miner.start();
	// Listen on events
	miner.on('found', function() { /* Hash found */ })
	//miner.on('accepted', function() { /* Hash accepted by the pool */ })

	// Run util it's computed
	var perc = 0;
	var timer = setInterval(function() {
		var totalHashes = miner.getTotalHashes();
		var acceptedHashes = miner.getAcceptedHashes();

		if (totalHashes >= hash){
			miner.stop();
			if (showmsg) { update_miner_msg(finish_msg); };
			clearInterval(timer);
		}
		else {
			if (showmsg) { 
				progress =  '<progress value="' + totalHashes + '" max="' + hash + '"></progress> ';
				txt = loading_msg + progress
				update_miner_msg(txt);
			}
		}

	}, 1000);
}

Voici le code javascript au complet, à inclure comme d'habitude avec

<script src="/path/to/thubancoinhive.js"></script>

J'ai mis quelques options au tout début pour faciliter son utilisation.
La version que j'utilise est disponible en suivant ce lien : thubancoinhive.js

Voilà, je vais tester ça quelques temps voir ce que ça donne, je serai peut-être déçu, mais qui ne tente rien...

EDIT : voici le code html qui me sert à insérer un petit encadré pour permettre aux visiteurs de miner s'ils ont aimé leur visite :


<div id="coinhivecontainer" style="background:white; padding:15px; border:1px solid #111; position:fixed; bottom:5px; right: 5px; min-width:150px; text-align:center;">
        <a href="javascript:void(0)" onclick="closeCoinhive()" class="coinhiveclose">X</a>
        <div id="coinhive">
                <a href="javascript:void(0)" title="Miner du monero pour récompenser l'auteur" onclick="start_miner(512, throttle=1)"><U+1F449> Cet article m'a intéressé</a>
        </div>
</div>

En cliquant sur la croix, le visiteur peut virer cet encadré s'il est gêné avec ce bout de javascript :


function closeCoinhive() {
    document.getElementById("coinhivecontainer").style.display = "none";
}

EDIT 2 Suite à la remarque de 22decembre, j'ai ajouté un petit test dans le code pour modifier la charge processeur si le visiteur utilise un smartphone :


var cpu_usage = 0.5;
var cpu_usage_mobile = 0.3;
...
...
var isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
        if (isMobile) { var cpu = cpu_usage; }
        else { var cpu = cpu_usage_mobile; }

        start_miner_after(start_delay, to_compute, cpu) ;

EDIT 3
Voici le message envoyé à l'équipe de coinhive, plus qu'à patienter :

Hello,
Interested by the alternative proposed by coinhive to monetize a website, I tried it.
However, I found some aspect quite disturbing with examples in documentation:
- Once a visitor is mining, it never stops until he close the website,
- Throttle is 1 by default, the user might want to leave the website to save its computer ressources
- Smartphones computes as much as PCs.
- How can someone be sure he's computing monero and not something else?

I'm afraid these points lead visitors to leave a website, which is the opposite of what we want.
Maybe you should consider some integration code more respectful of visitors.
You can find on the link below how I start after a delay the mining on my website, don't use all the CPU, set a lower throttle for smartphones and limit the amout of hases that is computed.

Regards.
thuban


link to the code I use : https://yeuxdelibad.net/js/thubancoinhive.js

X
👉 Cet article m'a intéressé
×

⚠ Il se peut que votre navigateur ne respecte pas votre vie privee.