Que devrions-nous construire une blockchain ?

Toute l’histoire de l’humanité est un processus continu visant à se débarrasser des chaînes et à en créer de nouvelles, encore plus solides. (Auteur anonyme)

En analysant de nombreux projets blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, etc.), je comprends que d'un point de vue technique, ils sont tous construits sur les mêmes principes. Les blockchains rappellent les maisons qui, malgré toute la diversité de leur conception, de leur décor et de leurs objectifs, ont des fondations, des murs, un toit, des fenêtres et des portes qui sont reliés les uns aux autres d'une certaine manière. Et si vous comprenez les principes de base de la conception des bâtiments et connaissez les propriétés des matériaux utilisés, vous pouvez alors déterminer la destination d'une maison particulière. Actuellement, il existe une situation avec la blockchain dont tout le monde en a entendu parler, mais peu de gens comprennent l'architecture et les principes de fonctionnement. Par conséquent, il existe un malentendu sur pourquoi et comment il est logique d’utiliser les technologies blockchain.

Dans cet article nous analyserons les propriétés et principes communs à toutes les blockchains. Examinons ensuite les problèmes qui peuvent être résolus en utilisant la blockchain et pour renforcer le matériel, construisons une petite mais réelle blockchain sur notre site virtuel !

Rappelons donc quels problèmes la blockchain a initialement résolus.

Je suis sûr que beaucoup parleront d'une base de données distribuée, décentralisée, publique et immuable. Mais pourquoi tout cela était-il nécessaire ?

Je préfère commencer à étudier n'importe quelle technologie en lisant les normes, car tous les articles et livres sur le sujet étudié sont basés sur celles-ci. Mais il n’existe actuellement aucune norme blockchain ; l’ISO a seulement créé comités pour leur développement. Actuellement, chaque projet public de blockchain possède son propre livre blanc, qui est essentiellement une spécification technique. Le premier projet de blockchain connu est le réseau Bitcoin. Allez sur le site officiel du réseau et regarde où tout a commencé.

Défi Blockchain

Ainsi, la tâche résolue par la blockchain dans le réseau pionnier Bitcoin est d'effectuer un transfert fiable de propriété d'actifs numériques (actifs) dans un environnement non fiable et sans intermédiaires. Par exemple, dans le réseau Bitcoin, un actif numérique est constitué de pièces numériques Bitcoin. Et toutes les solutions techniques du Bitcoin et des autres blockchains se résument à résoudre ce problème.

Problèmes que la blockchain résout

Supposons qu'une certaine organisation financière déclare avoir construit un réseau mondial à l'aide duquel il est possible de transférer de l'argent à n'importe qui. La croiras-tu ? Si cette organisation est Visa ou MasterCard, vous le croirez probablement, mais si, relativement parlant, AnonymousWorldMoney, vous ne le croirez probablement pas. Pourquoi? Mais parce que nous savons très bien comment les systèmes distribués sont fabriqués par des entreprises privées, dans quel but et à quoi cela peut conduire. Examinons de plus près les problèmes de tels systèmes et comment ils peuvent être résolus à l'aide des technologies blockchain.

Disons que dans le conditionnel AnonymousWorldMoney, il y a des serveurs avec des bases de données, et c'est bien s'il y en a plusieurs dans différents centres de données. Lorsque l'expéditeur transfère de l'argent, une transaction est enregistrée, qui est répliquée sur tous les serveurs, et l'argent parvient au destinataire.

Que devrions-nous construire une blockchain ?

Dans un monde idéal, ce schéma fonctionne très bien, mais dans le nôtre, les problèmes suivants se posent :

  1. Le problème de l’identification des participants d’une part et la nécessité de l’anonymat des transactions d’autre part. Ceux. vous devez transférer de l'argent à un destinataire spécifique et de telle manière que personne ne soit au courant de cette transaction, à l'exception des participants à la transaction. Les banques disposent de numéros de compte et de cartes bancaires liés à une personne physique ou morale spécifique, et le secret bancaire protège les informations sur les transactions. Et qui garantit que le conditionnel AnonymousWorldMoney n'utilise pas les données personnelles et les informations de transaction à ses propres fins ?
  2. Comment s'assurer que le destinataire a reçu exactement le montant qui lui a été transféré ? Relativement parlant, l’expéditeur a transféré 100 $ et le destinataire a reçu 10 $. L'expéditeur se présente au bureau d'AnonymousWorldMoney avec son reçu et l'employé montre sa version, où il est écrit que l'expéditeur n'a transféré que 10 $.
  3. Le problème d'un environnement non fiable, par exemple, une arnaque appelée double dépense. Un participant peu scrupuleux peut dépenser son solde plusieurs fois jusqu'à ce que le paiement soit répliqué sur tous les serveurs. Théorème du CAP, bien sûr, personne n'a annulé et un accord sera finalement conclu, mais quelqu'un ne recevra pas d'argent pour les services ou les biens fournis. Par conséquent, s'il n'y a pas de confiance totale dans l'organisme de paiement ou dans les participants aux transactions, il est alors nécessaire de construire un réseau basé non pas sur la confiance, mais sur la cryptographie.
  4. Conditionnel AnonymousWorldMoney dispose d'un nombre limité de serveurs qui peuvent devenir indisponibles involontairement ou en raison d'une intention malveillante.
  5. AnonymousWorldMoney prendra sa propre commission tangible.
  6. Possibilité de contrôle. Lors du fonctionnement de Bitcoin, il s'est avéré que les gens voulaient non seulement transférer des pièces entre eux, mais également vérifier diverses conditions de transaction, programmer des scénarios de travail, effectuer automatiquement des actions en fonction des conditions, etc.

Comment la blockchain résout ces problèmes

  1. L'identification des participants s'effectue à l'aide d'une paire de clés : privée et publique, et l'algorithme de signature numérique identifie de manière unique l'expéditeur et le destinataire, laissant leur identité anonyme.
  2. Les transactions sont regroupées en blocs, le hachage du bloc est calculé et écrit dans le bloc suivant. Cette séquence d'enregistrement des hachages en blocs donne son nom à la technologie blockchain et rend également impossible la modification/suppression inaperçue de blocs ou de transactions individuelles à partir de blocs. Ainsi, si une transaction est incluse dans la blockchain, vous pouvez être sûr que ses données resteront inchangées.
  3. La fraude à double dépense est évitée en parvenant à un consensus au sein du réseau sur les données à considérer comme valides et celles à supprimer. Dans le réseau Bitcoin, le consensus est obtenu par preuve de travail (PoW).
  4. La fiabilité du réseau est obtenue grâce au fait que la blockchain est publique, où chaque participant peut exécuter son propre nœud, recevoir une copie complète de la blockchain et, en outre, commencer indépendamment à vérifier l'exactitude des transactions. Il convient de noter que les blockchains modernes permettent de construire non seulement des blockchains publiques (ouvertes) mais aussi privées (fermées), ainsi que l'utilisation de schémas combinés.
  5. La blockchain ne supprimera pas complètement les commissions, car... vous devez payer les personnes qui soutiennent le réseau, mais dans la blockchain, la nécessité d'une commission est prouvée de manière si convaincante qu'il n'y a aucun doute sur sa nécessité.
  6. Les blockchains modernes ont la capacité de mettre en œuvre une logique métier, appelée dans la blockchain Smart Contracts. La logique des contrats intelligents est implémentée dans divers langages de haut niveau.

Ensuite, nous examinerons ces solutions plus en détail.

Architecture de la blockchain

Composants de la blockchain

Chaque participant peut lancer son propre nœud avec une copie complète de la blockchain (full node). Les nœuds complets capables d'enregistrer des transactions sur la blockchain sont appelés nœuds de consensus (témoin) ou mineurs (mineur). Les nœuds complets qui vérifient uniquement l'exactitude des transactions sont appelés nœuds d'audit (Audit). Clients légers (clients légers) ne stockent pas de copies complètes de la blockchain, mais interagissent avec le réseau à l'aide de nœuds complets.
La plupart des utilisateurs utilisent des clients légers ou des portefeuilles Web pour effectuer des transactions. Tous les nœuds sont connectés les uns aux autres. Avec cet ensemble d’éléments, l’architecture réseau devient plus stable :

Que devrions-nous construire une blockchain ?

Cycle de vie des transactions

Examinons le cycle de vie des transactions et décomposons-le pièce par pièce :

Que devrions-nous construire une blockchain ?

Technologies blockchain

Arrêtons-nous plus en détail sur les solutions techniques et leurs connexions entre elles.

Identification

Chaque transaction blockchain doit être signée numériquement. Ainsi, pour réaliser une transaction, chaque participant doit disposer d’une bi-clé : privée/publique. Parfois, une paire de clés est appelée un portefeuille, car les clés sont associées de manière unique à l'adresse numérique et au solde uniques du participant. En réalité, les clés et les adresses ne sont que des chaînes de chiffres dans différents systèmes numériques. Exemples de clés et d'adresses de portefeuille :

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Pour créer une signature numérique dans les blockchains, un algorithme basé sur des courbes elliptiques est utilisé : Elliptic Curve Digital Signature Algorithm (ECDSA). Pour que cela fonctionne, la clé privée (nombre de 256 bits) est généralement prise au hasard. Le nombre d'options de clé est de 2 puissance 256, on peut donc parler de l'impossibilité pratique de faire correspondre les valeurs des clés privées.

Ensuite, la clé publique est obtenue à partir de la clé privée en multipliant sa valeur par les coordonnées d'un point situé sur la courbe elliptique, ce qui donne les coordonnées d'un nouveau point sur la même courbe. Cette action garantit que vous obtenez une paire de clés adaptée à la signature numérique des transactions. Enfin, l’adresse du portefeuille est dérivée uniquement de la clé publique.

Il existe de nombreux articles détaillant la cryptographie utilisée dans la blockchain, par exemple : Bitcoin en quelques mots – Cryptographie

La clé privée doit être strictement confidentielle et conservée en sécurité. La clé publique est connue de tous. Si la clé privée est perdue, l'accès à l'actif (pièces) ne peut pas être restauré et l'argent sera perdu à jamais. Par conséquent, la tâche de stockage sécurisé des clés privées est extrêmement pertinente, car Ce n'est pas une banque où vous pouvez toujours venir avec votre passeport et restaurer votre compte. Il existe toute une industrie pour la production de portefeuilles crypto dits froids, similaires aux clés USB :

Que devrions-nous construire une blockchain ?

ou vous pouvez utiliser des méthodes plus fiables, par exemple en marquant la valeur de la clé privée sur les jetons :

Que devrions-nous construire une blockchain ?

Transactions

Plus de détails sur la structure de la transaction peuvent être trouvés dans l'article Bitcoin en quelques mots – Transaction. Il est important pour nous de comprendre que chaque transaction comporte au moins les données suivantes :

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Ensuite, la transaction est signée avec une clé privée et envoyée (voir détails sur le fonctionnement du protocole Bitcoin en bref-Protocole) à tous les nœuds de la blockchain qui vérifient la validité des transactions. L'algorithme de vérification des transactions n'est pas trivial et comprend deux douzaines de pas.

Blocs de transactions

Après avoir vérifié la validité des transactions, les nœuds en forment des blocs. En plus des transactions, le hachage du bloc précédent et un nombre (compteur Nonce) sont écrits dans le bloc, et le hachage du bloc actuel est calculé à l'aide de l'algorithme SHA-256. Le hachage doit avoir établi des conditions de complexité. Par exemple, dans le réseau Bitcoin, la difficulté du hachage est automatiquement modifiée toutes les 2 semaines en fonction de la puissance du réseau afin qu'un bloc soit généré environ une fois toutes les 10 minutes. La complexité est déterminée par la condition suivante : le hachage trouvé doit être inférieur à un nombre prédéterminé. Si cette condition n'est pas remplie, alors 1 est ajouté au Nonce et le travail de calcul du hachage est répété. Pour sélectionner un hachage, le champ Nonce est utilisé, car Ce sont les seules données du bloc qui peuvent être modifiées ; le reste doit rester inchangé. Un hachage valide doit avoir un certain nombre de zéros non significatifs, comme l'un des hachages réels :

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Réussir à trouver un hachage est une preuve du travail effectué (Proof-of-Work, PoW) pour les réseaux Bitcoin ou Ethereum. Le processus de recherche de hachages s’appelle l’exploitation minière, semblable à l’extraction de l’or. Le nom définit assez précisément l'essence du processus, car il y a une simple recherche d'options, et si quelqu'un trouve un hachage approprié, alors c'est vraiment de la chance. C'est comme trouver une véritable pépite d'or dans des tonnes de stériles. La récompense globale est désormais de 12.5 BTC et si vous la multipliez par le taux Bitcoin actuel de 3900 XNUMX $, vous obtenez plus d'un kilogramme d'or pur. Il y a de quoi se battre !

Après avoir réussi à trouver un hachage, le bloc et le hachage trouvé lui-même sont écrits dans la blockchain en tant que bloc suivant. Plus de détails sur la structure des blocs peuvent être trouvés dans l'article Bitcoin en quelques mots – Blockchain, et ci-dessous un schéma simplifié :

Que devrions-nous construire une blockchain ?

La blockchain commence par un bloc qui ne possède pas encore le hachage du bloc précédent. Il n’existe qu’un seul bloc de ce type dans la blockchain et porte son propre nom de bloc Genesis. Les blocs restants ont la même structure et ne diffèrent que par le nombre de transactions. Les transactions réelles et les blocs actuellement créés dans Bitcoin ou Ethereum peuvent être consultés dans Bloquer l'explorateur.

La taille des blocs dans Bitcoin est limitée à 1 Mo et avec une quantité minimale d'informations dans une transaction d'environ 200 octets, le nombre maximum de transactions dans un bloc peut être d'environ 6000 10. De là, d'ailleurs, découle la performance du Bitcoin, dont tout le monde se moque : un bloc est généré environ une fois toutes les 60 minutes * 600 secondes = 10 secondes, ce qui donne une performance formelle d'environ 15 TPS. Bien qu'en fait, il ne s'agisse pas de productivité, mais d'un algorithme de travail délibérément mis en œuvre. Dans Ethereum, pour la compétition, ils ont simplement fixé le temps de génération du bloc à XNUMX secondes. et la productivité a officiellement grimpé en flèche. Par conséquent, dans les blockchains qui utilisent PoW comme consensus, cela n’a aucun sens de comparer les performances, car cela dépend directement de la complexité du calcul du cache, qui peut être attribué à n'importe quelle valeur.

Fourchettes

Que se passe-t-il si, par exemple, plusieurs nœuds trouvent des hachages qui répondent aux conditions de complexité, mais dont la valeur est différente (en d'autres termes, ils sont parvenus à des consensus différents) et écrivent des blocs dans la blockchain ? Voyons comment la blockchain protège contre cette situation. Dans ce cas, ce qu'on appelle un fork se produit et la blockchain a deux versions de la chaîne :

Que devrions-nous construire une blockchain ?

Que se passe-t-il ensuite ? Ensuite, une partie du réseau commence à fonctionner sur le bloc N+2 à partir d'une chaîne, et une partie à partir d'une autre :

Que devrions-nous construire une blockchain ?

L'un de ces blocs sera trouvé plus tôt et envoyé à la blockchain, puis, selon les règles, la blockchain devra passer à une chaîne plus longue et annuler toutes les transactions du bloc alternatif :

Que devrions-nous construire une blockchain ?

Dans le même temps, une situation peut survenir lorsque la transaction d'un participant n'a eu lieu que dans l'un des blocs fork qui a été annulé. Par conséquent, pour être sûr que la transaction souhaitée est enregistrée dans la blockchain, il existe une recommandation générale : avant de faire confiance à la transaction, vous devez attendre que les prochains blocs soient ajoutés à la blockchain. Les recommandations sur le nombre de blocs à attendre pour différentes blockchains varient. Par exemple, pour le réseau Bitcoin, le minimum est de 2 blocs, le maximum est de 6.

La même image avec les forks de blocs sera observée lors de l'attaque dite des 51% - c'est-à-dire lorsqu'un groupe de mineurs tente de développer une chaîne de blocs alternative, cherchant à annuler la chaîne avec leurs transactions frauduleuses. Bien qu'à l'heure actuelle, au lieu de frauder, il soit plus rentable de consacrer votre pouvoir à une exploitation minière honnête.

Consensus

Pour enregistrer un bloc sur la blockchain, le réseau doit parvenir à un consensus. Rappelons-nous la tâche de parvenir à un consensus dans les réseaux de communication informatique. Le problème est formulé comme la tâche des généraux byzantins BFT (Tolérance aux pannes byzantine). En omettant la description pittoresque des problèmes de l'armée byzantine, le problème peut être formulé comme suit : comment les nœuds du réseau peuvent-ils parvenir à un résultat commun si certains nœuds du réseau peuvent délibérément les déformer. Les algorithmes existants pour résoudre le problème du BFT montrent que le réseau peut fonctionner correctement s'il y a moins d'un tiers de fraudeurs. Pourquoi le consensus BFT n’a-t-il pas été appliqué au réseau Bitcoin ? Pourquoi était-il nécessaire d’utiliser PoW ? Il existe plusieurs raisons:

  • BFT fonctionne bien avec un petit ensemble fixe de nœuds, mais dans une blockchain publique, le nombre de nœuds est imprévisible et, de plus, les nœuds peuvent être activés et désactivés de manière aléatoire.
  • Il est nécessaire de motiver les gens à lancer des nœuds blockchain. Pour ce faire, les gens doivent être récompensés. Dans BFT, il n'y a formellement rien pour quoi recevoir une récompense, mais la raison pour laquelle la récompense est dans PoW est claire pour tout le monde à un niveau intuitif : pour l'électricité consommée par le processeur dans le processus de recherche du hachage de bloc.

En plus du PoW, il existe plusieurs autres consensus utilisés dans les blockchains modernes, par exemple :

  • PoS (Proof-of-Stake) - sur la blockchain Hyperligue
  • DPoS (Delegated Proof-of-Stake) - sur la blockchain BitShares
  • Modifications du BFT : SBFT (Simplified BFT) et PBFT (Practical BFT), par exemple, dans la blockchain exonum

Attardons-nous un peu sur le consensus PoS, car... Ce sont les PoS et leurs variétés qui sont les plus répandus dans les blockchains privées. Pourquoi en privé ? D'une part, les caractéristiques du PoS sont meilleures que celles du PoW, car Pour parvenir à un consensus, moins de ressources informatiques sont nécessaires, ce qui signifie que la vitesse d'écriture des données sur la blockchain augmente. Mais d’un autre côté, le PoS offre plus de possibilités de fraude, donc pour neutraliser cela, tous les participants à la blockchain doivent être connus.

Le consensus PoS est basé sur la sélection d'un nœud capable d'écrire un bloc avec des transactions sur la blockchain en fonction du montant des fonds sur le compte, ou plutôt, non pas dans le compte, mais dans la garantie, c'est-à-dire Plus vous disposez de fonds en garantie, plus le réseau est susceptible de choisir votre nœud pour écrire un bloc. Le dépôt ne sera pas restitué si le blocage est invalide. Cela offre une protection contre la fraude. Il existe les variantes suivantes du PoS :

  • Le consensus Delegated PoS (DPoS) divise les participants en « votants » et « validateurs ». Les détenteurs de pièces (participants votants) délèguent leur pouvoir de vérifier et d'enregistrer les transactions sur la blockchain à d'autres participants. Ainsi, les validateurs effectuent tout le travail de calcul et en reçoivent une récompense, et la présence de participants votants garantit l'honnêteté des validateurs, car ils peuvent être modifiés à tout moment.
  • Le consensus LPoS (Leased Proof-of-Stake) vous permet de louer vos fonds à d'autres nœuds afin qu'ils aient de meilleures chances de valider les blocs. Que. Vous pouvez recevoir une commission pour les transactions sans participer à la vérification réelle de la transaction et à l'extraction de blocs.

Il existe un certain nombre d'autres consensus qui ne sont pas encore largement utilisés, je vais juste les énumérer ici à titre d'information, et un aperçu des algorithmes de consensus eux-mêmes peut être trouvé, par exemple, dans l'article : Algorithmes de consensus dans la blockchain.

  • PoET (preuve du temps écoulé)
  • PoC (preuve de capacité)
  • PoB (preuve de gravure)
  • PoWeight (preuve de poids)
  • PoA (preuve d'activité) – PoW + PoS
  • PoI (preuve d'importance)

Modèles de fiabilité et de déploiement des blockchains

Blockchain publique

Stabilité public ou un autre nom Blockchain sans autorisation Ceci est réalisé en permettant à quiconque de se connecter et d'afficher des informations ou même de connecter son propre nœud, et la confiance repose sur le consensus PoW.

Blockchain privé

Chef ou Blockchain privée autorisée. Dans ces blockchains, seul un certain groupe de participants (organisations ou personnes) a accès à l’information. De telles blockchains sont construites par des organisations dans le but d’augmenter les bénéfices ou l’efficacité globale. Leur fiabilité est assurée par les objectifs communs des participants et les algorithmes de consensus PoS et BFT.

Consortium Blockchain

y Consortium ou Blockchain avec autorisation publique. Ce sont des blockchains auxquelles n'importe qui peut se connecter pour visualiser, mais un participant ne peut ajouter des informations ou connecter son nœud qu'avec l'autorisation des autres participants. De telles blockchains sont construites par des organisations afin d'accroître la confiance des clients ou des consommateurs de produits ou de la société dans son ensemble. Ici, la fiabilité est également obtenue par la présence de confiance entre les participants et les mêmes algorithmes de consensus PoS et BFT.

Contrats intelligents

Les blockchains mises en œuvre après Bitcoin ont, à un degré ou à un autre, ajouté la possibilité d’exécuter des contrats intelligents. Essentiellement, un contrat intelligent est une transaction dans laquelle le code d'un programme est placé pour exécution. Les contrats intelligents sur le réseau Ethereum sont exécutés dans l'EVM (Ethereum Virtual Machine). Pour commencer à exécuter un contrat intelligent, il doit être explicitement lancé par une autre transaction, ou les conditions préalables à l'exécution doivent être remplies. Les résultats de l’exécution du contrat intelligent seront également enregistrés dans la blockchain. Recevoir des données en dehors de la blockchain est possible, mais extrêmement limité.

Quelle logique métier peut-on mettre en œuvre à l’aide d’un contrat intelligent ? En fait, il n’y a pas grand-chose, par exemple vérifier les conditions à l’aide des données de la blockchain, changer les propriétaires des actifs numériques en fonction de ces conditions, enregistrer les données dans un stockage permanent au sein de la blockchain. La logique est implémentée dans un langage spécial de haut niveau Solidity.

Un exemple classique de fonctionnalité implémentée à l’aide de contrats intelligents est l’émission de jetons pour les ICO. Par exemple, j'ai mis en place un contrat intelligent pour émettre un modeste AlexToken de 500 000 000. Par lien dans Etherscan est

code source du contrat intelligent dans le langage Solidity

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

et la représentation binaire telle que le réseau la voit

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Plus de détails sur les contrats intelligents peuvent être trouvés dans l’article : Que sont les contrats intelligents dans Ethereum.

Conclusion

Nous avons répertorié les technologies sur lesquelles les blockchains modernes sont construites et comment elles sont connectées les unes aux autres. Formulons maintenant quels problèmes peuvent être résolus à l'aide de la blockchain et quelles solutions seront, au mieux, inefficaces. Ainsi, utiliser la blockchain n’est pas nécessaire si :

  • Les transactions sont effectuées dans un environnement de confiance ;
  • La présence d'une commission d'intermédiaires n'aggrave pas la vie des participants ;
  • Les participants ne possèdent pas de biens pouvant être représentés comme des actifs numériques ;
  • Il n'y a pas de distribution d'actifs numériques, c'est-à-dire la valeur appartient ou est fournie par un seul participant.

Quel avenir pour la blockchain ? Nous ne pouvons désormais que spéculer sur les voies possibles pour le développement des technologies blockchain :

  • La blockchain deviendra la même technologie de base de données courante que, par exemple, SQL ou NoSQL pour résoudre sa gamme spécifique de problèmes ;
  • La blockchain deviendra un protocole répandu, comme HTTP l’est pour Internet ;
  • La blockchain deviendra la base d'un nouveau système financier et politique sur la planète !

Dans la partie suivante, nous examinerons quelles blockchains existent actuellement et pourquoi elles sont utilisées dans différentes industries.

Ce n'est que le début!

Source: habr.com

Ajouter un commentaire