Counos Coin

 

 CSC  Int. GmbH 

Switzerland

Counos Coin

Présentation

Une méthode de paiement exclusivement pair-à-pair permettrait d’envoyer des paiements en ligne directement d’une partie à une autre, sans passer par des institutions financières. Les signatures numériques sont une partie de la solution, mails les principaux avantages sont perdus si une partie tierce de confiance est requise pour éviter la double-dépense. Nous proposons une solution au problème de la double-dépense reposant sur le réseau pair-à-pair. Le réseau horodate les transactions en les hachant dans une chaîne continue de preuves de travail basées sur le hachage, formant un registre qui ne peut être modifié sans créer une nouvelle preuve de travail (PoW). La chaîne la plus longue sert non seulement de preuve pour la séquence d’évènements constatés, mais aussi de preuve qu’elle provient de la plus grosse réserve de puissance CPU. Tant que la majorité de la puissance CPU est contrôlée par des nœuds qui ne collaborent pas pour attaquer le réseau, ils généreront la chaîne la plus longue et seront plus rapides que les assaillants. Le réseau lui-même ne nécessite qu’une structure minimale. Des messages sont transmis dans le cadre d’une obligation de moyens, et les nœuds peuvent arbitrairement quitter et réintégrer le réseau, en acceptant la plus longue chaîne de preuves de travail comme preuve de ce qui s’est passé durant leur absence.

De manière très similaire à l’algorithme du bitcoin, plus de 16 800 000 Coins ont déjà été minés et moins de 4 800 000 Coins seront minés par des gens du monde entier.

Counos Coin n’a aucune autorité centrale ou intermédiaire. Mais dispose d’une équipe de professionnels pour le rendre très pratique dans un futur proche.

 

 


Transaction

Nous définissons une monnaie électronique (coin) comme une chaîne de signatures numériques. Chaque détenteur de coin le transfère au suivant en signant numériquement un condensé (hash) de la transaction précédente et la clef publique du prochain détenteur, et en ajoutant cela à la fin du coin. Le destinataire du paiement peut vérifier les signatures pour vérifier la chaîne de détenteurs.

Le problème, bien sûr, est que le bénéficiaire ne peut pas vérifier que l’un des détenteurs n’a pas dupliqué le coin. Une solution standard est d’introduire une instance centrale et fiable, ou « hôtel de la monnaie », qui vérifie chaque transaction pour éviter la double-dépense. Après chaque achat, le coin doit retourner à l’hôtel de la monnaie ou un nouveau coin est émis, seuls les Coins directement émis par l’hôtel de la monnaie sont réputés ne pas avoir été dupliqués. Le problème avec cette solution c’est que le sort de l’intégralité du système monétaire repose sur la société qui gère l’hôtel de la monnaie et que chaque transaction doit passer par elle comme une banque.

Nous avons besoin d’assurer au bénéficiaire que les propriétaires précédents n’ont pas signé de transactions antérieures. Pour nous, la première transaction est celle qui compte, nous n’avons donc pas à nous soucier des tentatives de doublements futurs. La seule façon de confirmer l’absence d’une transaction est de connaître toutes les transactions. Dans le modèle reposant sur un hôtel de la monnaie, celui-ci reconnaît toutes les transactions et peut déterminer celles effectuées en premier. Pour faire cela sans intervention d’une tierce partie, les transactions doivent être rendues publiques [1], et nous avons besoin d’un système dans lequel les acteurs acceptent le même historique concernant l’ordre dans lequel ces transactions sont effectuées. Le bénéficiaire a besoin d’une preuve qu’au moment de la transaction, la majorité des nœuds s’accorde à dire qu’elle a eu lieu en premier.

 

 

Serveur d’horodatage

La solution que nous proposons commence avec un serveur d’horodatage. Un serveur d’horodatage fonctionne en prenant le condensé d’un bloc de registres horodatés et en le publiant largement, comme dans un journal ou une publication Usenet [2-5]. L’horodatage prouve que les données existaient à ce moment-là, évidemment, car autrement il n’en existerait pas de condensé. Chaque horodatage contient l’horodatage précédent dans son condensé et forme une chaîne dans laquelle chaque horodatage renforce les précédents.

 

 

Preuve de travail

Pour mettre en place un serveur d’horodatage pair-à-pair distribué, nous devons utiliser un système de preuve de travail, similaire au système d’Adam Back [6], plutôt que d’avoir recours aux journaux ou à Usenet. La preuve de travail implique de trouver une valeur pour laquelle, lorsqu’elle est hachée, comme à travers le protocole SHA-256, le hash commence par un certain nombre de bits nuls. Le travail requis pour trouver le nombre de bits nuls nécessaire est nécessaire et peut être vérifié en exécutant un simple hachage. Pour notre réseau horodaté, nous mettons en place la preuve de travail en levant un nonce dans le bloc jusqu’à trouver la valeur qui donne au condensé du bloc le nombre nécessaire de bits nuls. Une fois que le CPU a alloué suffisamment de puissance à la preuve de travail, le bloc ne peut pas être modifié sans recommencer le processus. Comme les blocs ultérieurs y sont liés, le travail nécessaire pour remplacer le bloc impliquerait de recréer tous les blocs subséquents. La preuve de travail résout également le problème de la définition de la majorité lors du vote à la majorité. Si la majorité est définie sur le principe d’une voix par adresse IP, il peut être influencé par un acteur capable de réserver de nombreuses IP. Avec la preuve de travail, le principe d’un vote par CPU s’applique. La majorité des voix est représentée par la chaîne la plus longue dans laquelle le plus grand effort de preuve de travail a été investi. Si une majorité de la puissance CPU est contrôlée par des nœuds honnêtes, cette chaîne s’allongera plus rapidement et les chaînes concurrentes disparaîtront. Pour modifier un bloc passé, un assaillant devra recréer la preuve de travail du bloc, ainsi que celles des blocs subséquents, avant de rattraper et dépasser les nœuds honnêtes. Nous vous démontrerons par la suite que plus il y a de blocs subséquents, moins un assaillant plus lent peut les rattraper, plus le nombre de ces assaillants décroit de manière exponentielle. Pour compenser l’augmentation croissante du matériel et l’intérêt variable dans le fait de faire fonctionner un node, la difficulté de la preuve de travail est déterminée par une moyenne mobile, correspondant à un nombre moyen de blocs par heure. Si les blocs sont générés trop rapidement, la difficulté augmente.

 

 

Réseau

Les étapes pour faire fonctionner le réseau sont les suivantes :

 

1. De nouvelles transactions sont diffusées à tous les nœuds.

2. Chaque nœud collecte les nouvelles transactions en un bloc.

3. Chaque nœud travaille afin de trouver la preuve de travail correspondant à son bloc.

4. Lorsqu’un nœud trouve la preuve de travail, il transmet le bloc à l’ensemble des nœuds.

5. Les nœuds acceptent le bloc seulement si toutes les transactions qu’il contient sont valides et qu’elles n’ont pas déjà été émises.

6. Les nœuds expriment leur acceptation du bloc en travaillant à la création du nouveau bloc de la chaîne, en utilisant le hachage du bloc actuel comme celui du précédent.

 

Les nœuds considèrent toujours que la chaîne la plus longue est la bonne et œuvrent à son extension. Si deux nœuds transmettent simultanément différentes versions du bloc suivant, certains nœuds peuvent recevoir l’une des deux versions en premier. Dans ce cas, ils travaillent sur le premier qu’ils reçoivent, mais sauvegardent l’autre branche dans la chaîne au cas où elle soit plus longue. Cette égalité est brisée lorsque la preuve de travail est trouvée et qu’une branche devient plus longue ; les nœuds ayant travaillé sur l’autre branche basculeront alors sur la plus longue. La diffusion de nouvelles transactions ne doit pas nécessairement atteindre tous les nœuds. Tant qu’elle atteint une majorité de nœuds, elles seront tôt ou tard reprises dans un bloc. Les émissions de bloc sont également tolérantes vis-à-vis des messages perdus. Si un nœud ne reçoit pas un bloc, il le demandera dès qu’il recevra le suivant et s’apercevra qu’il manque un bloc.