Il m'est arrivé de participer au développement d'un mécanisme d'exploration de données pour la crypto-monnaie, vous permettant d'utiliser différents algorithmes de hachage pour créer une blockchain. L'objectif est de permettre aux mineurs disposant de n'importe quel équipement (ASIC, GPU, CPU) de prendre en charge le réseau, couvrant tout le public possible des participants au réseau. Dans l'article, je vais vous dire quels résultats nous sommes arrivés, à propos de l'exploitation minière en bitcoin et d'autres crypto-monnaies utilisant l'exploitation minière hybride.

Outre le fait que l'exploitation minière est récompensée et que la récompense est la principale source d'émission de pièces dans la plupart des crypto-monnaies, la fonction la plus importante de ce mécanisme est de parvenir à un consensus parmi les participants au réseau. Le consensus est assuré par une loi simple - lors de la ramification d'une blockchain (fourche), la chaîne est considérée comme vraie, au cours de la construction de laquelle le plus grand nombre de hachages (travaux) a été effectué.
Pour construire une exploration multi-hybride, deux tâches doivent être résolues - le calcul de la cible pour chacun des algorithmes et la recherche d'un mécanisme de comparaison qui vous permet de faire la chose la plus difficile - pour comparer des chaînes composées de blocs avec différents algorithmes et, par conséquent, d'une ampleur de travail très différente.
L'exploration multihybride est un terme indéfini, dans l'article, il est utilisé pour désigner la preuve d'extraction (POW) sur plusieurs algorithmes. Dans les crypto-communautés anglophones et russophones, le nom généralement accepté est Multi-PoW. Il sera considéré sur l'exemple de la crypto-monnaie Verge
avec cinq algorithmes . L'exploitation hybride est un terme couramment accepté appliqué aux crypto-monnaies utilisant POW et le stockage de preuve de dépôt / équité (POS). Nous le considérerons sur l'exemple de l'un des pionniers d'une telle solution - Novacoin.
Pour comprendre le mécanisme d'exploration de données, vous devez comprendre les concepts fondamentaux suivants dans les crypto-monnaies - travail et objectif (cible). L'objectif est une valeur numérique définissant la limite supérieure des hachages appropriée pour créer un bloc dans une chaîne. Travail - statistiquement, le nombre moyen de recherches nécessaires pour trouver un hachage d'une cible plus petite ou égale.
Travaillez et visez avec les doigtsPrenons l'exemple d'un rouleau de cube D&D à 20 faces. Nous distribuerons les dés à chaque joueur D&D de la planète et leur demanderons de lancer. La moitié des dés aura des valeurs de 1 à 10, la seconde de 11 à 20. Supposons que pour l'événement souhaité dans le jeu, la valeur devrait être de 1 à 10. Laissez les joueurs continuer à lancer jusqu'à ce que tout le monde lance la valeur souhaitée. À chaque lancer, le nombre de joueurs restants est divisé par deux et il s'avère que le nombre moyen de lancers de dés par joueur sera calculé selon la formule suivante:
operatornamecountthrows= frac operatornamecountpossiblevalues operatornamecountappropriévaleurs
En supposant que 500 millions de joueurs jouent sur la planète, les joueurs les plus «chanceux» devront lancer les dés environ 29 fois, mais le nombre moyen de tirs par joueur sera de 2. Le nombre de lancers dans la formule est identique au nombre d'actes de génération de hachage et correspond au travail. Par conséquent, le nombre de valeurs de hachage appropriées est égal à la valeur cible + 1. La formule complète pour travailler avec des hachages 256 bits est:
w o r k = f r a c 2 256 t a r g e t + 1
Bitcoin l'utilise exactement et le code utilisant cette formule est
ici . Et
ici, le travail est utilisé pour atteindre un consensus - comparer les fourches blockchain et choisir la meilleure chaîne.
L'objectif principal de la cible est d'être fixé à une valeur telle que le temps de libération du bloc se produit dans un intervalle de temps donné. Pour le bitcoin, l'intervalle est de 10 minutes. Le recomptage cible en bitcoin se produit tous les blocs de 2016. Pour définir une nouvelle cible, Bitcoin détermine le taux de hachage moyen - la quantité de travail réseau par unité de temps pour les blocs 2016 précédents. Calcule le travail attendu en 10 minutes et en se fixant un objectif, définit sa valeur pour les prochains blocs 2016. Pour le bitcoin, le
calcul de la cible, compte tenu de l'égalité de la cible (et donc du travail) des blocs 2016 précédents, après réductions et approximations, est donné dans une formule assez simple.
targetnew= frac2256worknext−1= frac225610min cdothashrateaver−1= frac2256 frac10min cdotwork2016time2016−1=
= frac2256 cdottime201610min cdot2016 cdot frac2256targetprev+1−1= fractime2016 cdot left(targetprev+1 right)10min cdot2016−1 approx fractime2016 cdottargetprev10min cdot2016
En plus des crypto-monnaies, la tâche de cible, de travail et de taux de hachage (vitesse de génération de hachage) est résolue par des
pools . La piscine ne connaît pas la valeur de hachage directe d'un mineur individuel. Obtenir tous les hachages est impossible en raison des limitations de la bande passante et inutile - les vérifier pour les coûts équivaut à l'exploitation minière. Le pool reçoit des réponses des mineurs avec un objectif insuffisant pour former un bloc, détermine la part du mineur dans le pool, hashrate et définit un tel objectif pour chaque mineur afin que les réponses d'eux n'occupent pas tout le trafic.

Graphique de
lancement de
12 dés à facettes par un joueur avec un hashrate de 1 lancer / sec en 100 secondes. Chaque point est la valeur de la face dessinée, l'axe Y droit est le nombre de valeurs tombées dans la cible. On peut voir que 20 tirs tombent dans la cible 2 - les lancers avec une valeur de 1 et 2. L'évaluation du travail sera de 20 * 12/2 = 120 tirs, avec la cible 6 le travail est de 53 * 12/2 = 106. La propriété principale utilisée est pour tout Cible dans l'état de statistiques suffisantes recevoir proche de la valeur exacte du travail et du hashrate du participant.
Une crypto-monnaie avec plusieurs algorithmes, comme un pool, devrait évaluer le hachage de l'algorithme participant et sélectionner une cible qui fournirait l'intervalle de temps souhaité entre les blocs. Le mécanisme de calcul de cible correct, en plus de l'intervalle, devrait fournir les parts appropriées des différents blocs dans la blockchain.
Il vaut la peine de faire une digression dans l'histoire pour comprendre les caractéristiques du calcul de la cible dans les crypto-monnaies lancées après le bitcoin. Dans l'ancien temps du fringant, les courageux pionniers de l'altcoinstruction ont pris le code Bitcoin, ont apporté des modifications minimes et ont lancé le «Bitcoin killer». Il y avait même des générateurs en ligne de nouveaux dépôts de code altcoin. Cette approche a entraîné un certain nombre de problèmes, dont l'un concernait le calcul de la cible et s'est posé dans le scénario suivant. Un mineur dont le taux de hachage était considérablement plus élevé que les autres participants était connecté à l'extraction de crypto-monnaie. Étant donné que la cible a été rarement recomptée, un tel mineur a créé des blocs avec un intervalle très court et a réussi à créer un nombre hebdomadaire de blocs en quelques heures et, en conséquence, à collecter une récompense hebdomadaire. En atteignant le bloc sur lequel la cible a été recalculée, le mineur est allé vers un autre altcoin avec un taux de hachage approprié. Avec l'augmentation de la cible, les mineurs restants ne pouvaient pas générer un bloc à un temps raisonnable, sans parler de la génération de tous les blocs avant le nouveau recalcul de la cible et quitté l'altcoin. Les pièces de la blockchain se sont finalement arrêtées. La principale solution à ce problème était de recalculer la cible de chaque bloc.
À première vue, le
calcul de la cible dans Novacoin n'est pas très différent du calcul dans Bitcoin. Novacoin a correctement séparé le calcul du POS et du POW. La formule finale pour calculer la cible des blocs POS dans Novacoin est la suivante
targetnew=targetlast cdot frac7day−10min+2 cdottimepos intrerval7day+10min
ce qui n'a aucun sens par rapport au calcul du hachage moyen en bitcoin et des prévisions à ce sujet. Toutes les statistiques de cette formule sont impliquées indirectement - tout de même, la valeur cible précédente est calculée comme le résultat des résultats précédents dans la blockchain. Le mécanisme dans son ensemble est similaire au maintien d'une distance par une voiture, l'intervalle est inférieur à 10 minutes - on relâche la pédale d'accélérateur, plus - on appuie.
Le calcul du POW est presque le même, sauf que Novacoin revendique une fréquence différente pour les blocs POW et POS et elle est calculée à des intervalles de 10 minutes à 30 en fonction de la position dans la blockchain. Vous pouvez voir que si le réseau perd fortement son hachage POW ou POS, la cible restera valide jusqu'à ce qu'un nouveau bloc apparaisse sur le mécanisme de minage qui a perdu de la puissance.
Le calcul de la cible dans Verge utilise le mécanisme Dark Gravity Wave, qui est un développement des idées avancées par Kimoto Gravity Well. Sans entrer dans les mathématiques de toutes ces méthodes, l'objectif de ces mécanismes, sans doute nommés de manière poétique, est l'un - d'assurer la conversion de la cible assez rapidement pour répondre aux changements du taux de hachage du réseau. Malgré une
certaine ingéniosité du code , ses mathématiques se résument à des formules assez simples. Verge calcule la cible moyenne de 12 blocs de l'algorithme sélectionné, dans laquelle le dernier bloc est compté deux fois:
targetaver= frac2 cdottargetlast+targetlast−1+...+targetlast−1113
La question qui se pose immédiatement quant à la légitimité de l'ajout de la cible a cependant une justification mathématique. La cible résultante est une cible pour le travail moyen harmonique.
frac13 cdot(targetaver+1)2256= frac2 cdot(targetlast+1)2256+ fractargetlast−1+12256+...+ fractargetlast−11+12256
Le reste des calculs coïncident exactement avec le calcul via le taux de hachage moyen pour le bitcoin.
targetnew approx fractime12 cdottargetaver0.5min cdot5 cdot12
Il convient de noter que le hashrate dans Verge est calculé à partir du travail harmonique moyen et du temps moyen arithmétique, et par conséquent, l'
inégalité des moyennes aurait une valeur inférieure si le temps et le travail étaient pris avec les mêmes moyens.
Les mathématiques du calcul de la cible dans les projets avec des preuves / algorithmes mixtes diffèrent sensiblement de l'original en bitcoin. Le deuxième côté de la médaille du mécanisme cible et du travail est la solution du problème du consensus - la définition de la branche blockchain qui est considérée comme la vraie en cas de litige. Le problème fondamental pour les blockchains mixtes est l'impossibilité de choix lors de l'utilisation de la comparaison des sommes du travail des blocs pour tous les algorithmes / preuves. De toute évidence, les algorithmes / preuves ayant intrinsèquement un hashrate supérieur avec une telle logique primitive domineront la blockchain.
À Novacoin, malgré l'utilisation d'un certain score de confiance dans les commentaires et la dénomination des variables, une analyse détaillée de la logique se révèle être rien de plus qu'un travail.
Le calcul pour POS coïncide exactement avec la formule de travail, et le
calcul pour POW peut être considéré comme fonctionnant avec une sorte de
coefficient constant décroissant. Le reste des calculs supplémentaires ressemble à un ordre d'équilibrage supplémentaire des blocs par rapport au mécanisme cible. Il convient de noter que ce n'est pas la meilleure solution. Comme nous le verrons plus loin, seule une cible est suffisante pour équilibrer les blocs. De plus, les blocs POS et POW avec un parent commun peuvent être inégaux, bien que le fait d'apparaître des blocs valides avec un parent commun doit être défini comme leur égalité.
Avant d'examiner l'état actuel du mécanisme de consensus, Verge sera informatif pour se pencher sur son passé. Au printemps 2018, Verge a survécu à plusieurs attaques. Sans entrer dans les détails de la mécanique d'attaque, le
code de l'époque , responsable du choix d'une fourchette, contient une logique douteuse. Si nous supposons que la fonction IsProofOfStake () dans la crypto-monnaie POW peut retourner la vraie valeur, alors l'ajout de différents algorithmes, comme indiqué ci-dessus, conduira à la domination d'un algorithme avec un hashrate plus élevé. Sinon, le choix se fait simplement par la longueur de la chaîne, qui avec une cible correctement calculée (dont le but est l'apparence uniforme des blocs) peut conduire à l'égalité des branches avec des travaux vraiment très différents.
Dans le
code actuel, Verge utilise des
coefficients constants pour la comparaison. En supposant que ces coefficients prennent en compte une certaine pertinence des capacités des équipements miniers, la faiblesse évidente de ce choix est la perte de pertinence lors de l'apparition de nouveaux équipements.
Les propriétés natives des mathématiques et du travail cibles nous permettent de construire des modèles de calcul plus simples et plus compréhensibles sur la blockchain. Considérons un modèle et un
code émulant un calcul cible pour une blockchain avec quatre algorithmes. Laissez deux d'entre eux occuper un tiers des blocs. Pour simplifier la modélisation, nous pouvons supposer que le bloc avec le plus petit intervalle du précédent est le meilleur pour construire un circuit. Dans les crypto-monnaies réelles, un tel choix correspond au scénario le plus courant. Le modèle teste également l'augmentation et la diminution du taux de hachage de l'un des algorithmes.
Le calcul de la cible sera calculé à partir de la moyenne arithmétique du travail et du temps sur les statistiques des 300 derniers blocs. La formule de calcul finale:
target= frac2256k cdot60 cdothashrateaver−1
où k est le nombre d'intervalles pour lesquels un bloc de l'algorithme doit être pour lequel la cible est calculée.
Résumons dans le tableau les valeurs initiales et calculées pour 10 000 blocs.
Je veux noter que la valeur calculée du circuit est calculée par la formule:
workalgo=hashratealgo cdottimeallblock
Le calcul des hachages dans le réseau se produit au cours du temps des blocs de tous les algorithmes, et pas seulement aux intervalles des algorithmes individuels. Comme dans l'exemple avec un cube à vingt faces - quelle que soit la cible sélectionnée, l'évaluation du travail sera égale. Pour les calculs, il faut en tenir compte, par un coefficient k pour calculer la cible d'un nouveau bloc à travers un taux de hachage, et prendre tout le temps pour calculer le travail.
Comme vous pouvez le voir, les
résultats de l'émulation coïncident assez bien avec le calcul en fonction des données source.
Graphique à blocs 3850-4650
Graphique à blocs 5599-6399Sur les graphiques de l'évolution du travail au fil du temps, on voit comment la densité des blocs augmente et diminue lorsque le taux de hachage change. En principe, c'est un comportement logique et logique, mais il est également tout à fait approprié de le réguler en utilisant des techniques comme la Dark Gravity Wave - augmentant l'influence des derniers blocs, et d'autres.
En ce qui concerne la question de déterminer le consensus des fourches à partir de blocs avec différents algorithmes, il convient de noter la propriété de base suivante - les blocs avec un bloc précédent commun sont équivalents les uns aux autres. Leurs objectifs et leur évaluation des performances donnent des droits égaux à occuper une place dans la chaîne. Cette observation conduit immédiatement à l'idée d'utiliser l'équivalence - en utilisant la quantité de travail, des coefficients variant du rapport des cibles, etc. En omettant de prendre en compte les lacunes de toutes ces idées, nous passerons à la méthode qui répond le mieux aux exigences de la blockchain.
Si nous considérons les prédictions géométriques moyennes du travail de tous les algorithmes de blocs, la somme de ces travaux équivalents est la meilleure caractéristique pour comparer les fourches.
workequal= sqrt[k1]workalgo1 cdot sqrt[k2]workalgo2 cdot... cdot sqrt[kn]workalgon
Où k est le nombre d'intervalles sur lesquels un bloc de l'algorithme doit tomber, pour lequel la cible est calculée.
Un tel travail équivalent a les propriétés suivantes:
- lorsque le taux de hachage de tous les algorithmes est modifié n fois, l'estimation du consensus de chaîne changera également n fois
- en augmentant le hashrate de l'un des algorithmes et en diminuant les n autres fois avec des parts égales dans le minage, l'estimation consensuelle de la chaîne sera égale
- avec des proportions égales d'algorithmes et des taux de hachage égaux de ces algorithmes, le fonctionnement équivalent et le fonctionnement de tout algorithme seront égaux
Le mécanisme de fonctionnement équivalent complique considérablement l'attaque 51 sur la blockchain. La formule de travail équivalent, exprimée par un taux de hachage, vous permet d'estimer la puissance nécessaire à une attaque.
workequal= sqrt[k1]k1 cdott cdothashratealgo1 cdot sqrt[k2]k2 cdott c d o t h a s h r a t e a l g o 2 c d o t . . . c d o t s q r t [ k n ] k n c d o t t c d o t h a s h r a t e a l g o n
Si l'attaquant décide de mener l'attaque selon l'un des algorithmes et ne sera pas en mesure de calculer le reste, le hashrate nécessaire devra dépasser considérablement le hashrate du réseau.
Par exemple, une table d'attaque, le temps entre les blocs est de 60. Supposons qu'un attaquant ne peut fournir que 50% du hashrate dans trois algorithmes.
Pour atteindre l'égalité avec le réseau, il devra avoir un hashrate 4 fois plus élevé que le hashrate du réseau selon le premier algorithme.
Le graphique suivant montre le résultat de l'
émulation d'une attaque sur une blockchain.

L'attaque commence au bloc 1000.
La somme des emplois équivalents en émulation pour les deux branches diffère légèrement et montre l'égalité des branches.
En résumé, on peut noter que les mécanismes de consensus dans les crypto-monnaies avec des algorithmes / preuves mixtes peuvent être mathématiquement justifiés et que ces crypto-monnaies sont plus difficiles à attaquer 51.
Bonne blockchain à tous et merci pour votre attention sur le sujet.