0% ont trouvé ce document utile (0 vote)
320 vues65 pages

Introduction à la Blockchain en 24H

Transféré par

Loma Wiam
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
320 vues65 pages

Introduction à la Blockchain en 24H

Transféré par

Loma Wiam
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Cours : Blockchain

Volume Horaire : 24 H

Pr. Ali EL KSIMI


Partie 1- Introduction à la
Blockchain

2
PLAN
1. Qu’est ce que la Blockchain?
2. Cas d’application
3. Définition de blockchain
4. Concepts de base de la blockchain
5. Création de la blockchain sous Python

3
1. Qu’est ce que la Blockchain

• Imaginez un livre sur lequel j’écris ce qu’il se passe.


• J’y écris combien d’argent j’ai donné à mon voisin.
• J’y écris quel temps a-t-il fait aujourd’hui.
1. Qu’est ce que la Blockchain

• Imaginez un autre livre sur mon voisin, écrit également tout ce qu’il se
passe.
• Il y écrit combien d’argent je lui ai donné;
• Il y écrit le temps qu’il a fait aujourd’hui.
1. Qu’est ce que la Blockchain

• Problème, nos deux livres ne racontent pas la même histoire…


• Dans mon livre il est écrit que je lui ai donné 2300 dh, alors que dans
le sien il est marqué que je lui ai donné 1700dh.
• Dans mon livre, il a plu le lundi le 6 Mars, dans le sien le temps était
juste couvert.
• C’est sa parole contre la mienne…..
1. Qu’est ce que la Blockchain

Tiers de confiance

• Pour éviter ce genre de problème, nous avons des tiers de


confiance, qui écrivent à notre place nos histoires de
transactions et de météo.
• Pour les transactions, ce sont les banques par exemple ou les
autres services de paiement comme Paypal.
1. Qu’est ce que la Blockchain

Tiers de confiance

• Le tiers de confiance centralise la sauvegarde, la vérification


et la validation des informations écrites dans les livres.
• On est dans un système centralisé.
1. Qu’est ce que la Blockchain

Tiers de confiance

• La blockchain est une technologie qui supprime le tiers de


confiance en décentralisant la sauvegarde, la vérification et
la validation.
1. Qu’est ce que la Blockchain
• Sur une Blockchain, quand je donne 100 dh à mon voisin, je
le fais publiquement devant tous les voisins de mon
immeuble.
1. Qu’est ce que la Blockchain
• Chaque voisin constate la transaction, et valide comme quoi
j’ai bien donné 100 dh. Une fois validée, la transaction est
réelle et chaque voisin, devant les autres et en même temps,
va l’écrire sur son livre.
1. Qu’est ce que la Blockchain
• Ce sont tous les voisins, qui valident les transactions.
• Dans les faits, il faut qu’un moins la majorité des voisins la
valident.
• Chacun écrit publiquement et en même temps sur son livre.
• Donc chacun garde une copie identique du livre.
• Ces livres sont consultables par tout le monde.
• Tout le monde peut vérifier les transactions écrites.
• Tout ce qui est écrit sur le livre est la vérité.
• On parle ici d’un système décentralisé. C’est plus
démocratique qu’un système centralisé, puisque ce sont les
utilisateurs eux même qui se chargent du rôle de tiers de
confiance.
1. Qu’est ce que la Blockchain
• Est-ce plus sécurisé?
• Le voisin qui a reçu mes 100 dh veut modifier la transaction
de son live et d’écrire que je lui ai donné 30 dh, afin de m’en
demander 70 dh.
• Dans un système centralisé, il doit s’introduire chez le tiers
de confiance pour modifier son livre.
• Techniquement compliqué, mais tout à fait faisable.
• La Blockchain est un système ultra sécurisé non pas grâce à
une technologie avancée mais tout simplement, et c’est là
toute la magie de cette révolution technologique par des
petites astuces.
1. Qu’est ce que la Blockchain
1. Décentralisation

• Dans un système décentralisé, il existe de nombreuses copies du livre:


chaque voisin de l’immeuble en a une.
1. Qu’est ce que la Blockchain
1. Décentralisation

• Le voisin doit donc entrer chez moi et modifier mon livre, le sien, mais
doit aussi réussir à s’introduire chez chaque voisin, et modifier la page
sur laquelle est écrite la transaction.
1. Qu’est ce que la Blockchain
2. Le Hash
• Chaque page du livre comporte un entête,
un corps et un pied de page.
• Règle 1: le corps ne peut contenir que 7
transactions. Dés qu’une page comporte 7
transactions, on tourne la page et on
commence à écrire sur une nouvelle.
• Règle 2 : au bout de 5 minutes, même si
uniquement 2 transactions ont été écrites,
on tourne la page.
• Ce qui rend la blockchain très sécurisée
est cette limite de nombre de transactions
par page, l’obligation de tourner la page
toutes les 5 minutes et le contenu de l’
entête et du pied de page.
1. Qu’est ce que la Blockchain
• L’entête de la première page est
vide.

• Une fois les 7 transactions écrites


dans le corps, il n’y a plus de place
pour écrire et on tourne la page.

• Le pied de page réécrit en tout petit


tout ce qui décrit sur la page.
1. Qu’est ce que la Blockchain
1. Qu’est ce que la Blockchain

• Grace à ce système, si le voisin veut modifier une transaction qui se


trouve sur la page 3, il doit modifier:
 Le corps et le pied de page de la page 3;
 L’entête et le pied de la page 4;
 L’entête et le pied de la page 5.
 Toutes les 5 minutes une nouvelle page s’ajoute. Si le voisin n’a pas
réussi à modifier ces 3 pages, sur tous les livres de l’immeuble, en 5
minutes, il devra cette fois ci modifier 4 pages.
1. Qu’est ce que la Blockchain
• 5 minutes pour s’introduire dans le domicile des 14 autres
voisins, modifier 3 pages…il est donc impossible de réécrire
les informations dans les livres, elles sont donc impossible à
modifier.
• Le voisin résigne à modifier les pages passées, mais il ne
perd pas de point de vue son envie de gagner plus d’argent
frauduleusement.
• Il décide d’écrire sur son livre des informations fausses:
1. Qu’est ce que la Blockchain
• Il écrit qu’il a reçu 30 dh au lieu de 100 dh que j’ai envoyés
pour faire croire que je lui en doives 70 de plus.
• Ou il écrit qu’il a reçu 1000dh. Si cette information est
vérifiée et validée, son compte sera effectivement crédité de
1000dh…
1. Qu’est ce que la Blockchain
3. Consensus

• Pour rappel, pour valider une transaction, il faut qu’au moins


la moitié des voisins la constate.
• Chaque voisin a le droit d’écrire et de valider lui-même ce
qu’il écrit, mais ce serait peine perdue dans la mesure où les
autres voisins ne valideraient pas la transaction.
1. Qu’est ce que la Blockchain
4. Preuve de marathon

• Pour décourager encore plus le voisin d’écrire une


transaction frauduleuse, on impose une règle: pour écrire
dans le livre, il faut avoir fait un marathon.

• L’énergie dépensée lors du marathon est si grande, que cela


décourage le voisin
1. Qu’est ce que la Blockchain
• La blockchain est donc un grand livre, distribué, inviolable,
infalsifiable, incorruptible, immuable, démocratique…

• Voisin=nœud=mineur
• Immeuble=réseau
• Livre=base de données
• Page=block
• Lien=chaine (d’ou blockchain)
• Texte minuscule dans l’entête et pied de page=hash SHA256
• 5 minutes=10 minutes
• 7 transactions= 1Mb
• Preuve de marathon= preuve de travail (proof of work)
• Valider=miner
2. Cas d’application
• Des exemples de la vie courante pour comprendre la
technologie de la blockchain.
2. Cas d’application
2. Cas d’application
2. Cas d’application
3. Définition de la blockchain
• La Blockchain est une technologie de stockage et de transmission
d'informations de manière transparente, sécurisée et décentralisée. Elle repose
sur un réseau d'ordinateurs interconnectés, appelés nœuds, qui collaborent
pour valider, enregistrer et sécuriser les transactions et les données.

• La Blockchain fonctionne par le biais d'un registre distribué, également appelé


registre des transactions ou grand livre (ledger). Ce registre enregistre de
manière chronologique et permanente toutes les transactions effectuées sur le
réseau. Chaque transaction est regroupée dans un bloc, qui est ensuite ajouté à
la chaîne de blocs, formant ainsi une séquence continue et immuable de
transactions.
3. Comment ça fonctionne?
 les transactions effectuées entre utilisateurs sont regroupées par blocs;
 Chaque bloc est validé par des nœuds appelés mineurs;
 Une fois le bloc est validé, il est ajouté à la blockchain;
 La transaction est alors visible par le récepteur ainsi que par l’ensemble du
réseau;
Ce processus prend un certain temps selon la blockchain.
3. Types de blockchain
 Publiques

 Une blockchain publique est ouverte à tous et peut être consultée et participée par
n'importe qui.
 Dans une blockchain publique, chaque nœud du réseau peut valider les transactions et
participer au processus de consensus. Un exemple bien connu de blockchain publique
est Bitcoin, où n'importe qui peut rejoindre le réseau, effectuer des transactions et
participer à l'exploitation minière.

 Les blockchains publiques sont généralement décentralisées et offrent un haut degré de


transparence et de sécurité, car les transactions sont enregistrées de manière
permanente et vérifiable. Cependant, elles peuvent avoir des limitations en termes de
confidentialité et de performances, car chaque nœud doit valider toutes les transactions.
3. Types de blockchain
 Privées

• Contrairement à la blockchain publique, une blockchain privée est réservée à un


groupe restreint d'entités ou d'organisations spécifiques. Elle est souvent utilisée dans
le cadre d'applications internes ou de consortiums où les participants sont connus et de
confiance. Dans une blockchain privée, les nœuds du réseau sont contrôlés par ces
entités et les règles du consensus peuvent être modifiées selon leurs besoins.

• Les blockchains privées offrent des avantages tels que des performances plus élevées,
une plus grande confidentialité des données et une meilleure évolutivité, car le nombre
de nœuds peut être contrôlé. Cependant, elles peuvent être moins décentralisées et
moins sécurisées que les blockchains publiques, car elles reposent sur un cercle
restreint d'acteurs.
3. Types de blockchain
 Hybrides

• Une blockchain hybride est une combinaison des deux types précédents, c'est-à-dire
une blockchain qui permet à la fois la participation publique et privée. Elle peut offrir
une certaine flexibilité en permettant à certains aspects d'être publics, accessibles à
tous, tandis que d'autres aspects peuvent être réservés à des acteurs spécifiques.

• Les blockchains hybrides sont souvent utilisées dans des cas d'utilisation où une partie
du réseau doit être publique pour permettre une vérification transparente des
transactions, tandis que d'autres parties nécessitent une restriction d'accès pour des
raisons de confidentialité ou de gouvernance.
4. Concepts de base: mineur
un mineur est un individu vérifiant les transactions et opérations
effectuées par les utilisateurs sur le réseau. Il les inscrit ensuite sur
la blockchain (registre public). La vérification des transactions
requiert de la puissance de calcul. Dans la mesure où le code
informatique de la blockchain est open-source, devenir mineur est
ouvert à tous.
4. Concepts de base: mineur
Qu'est-ce que le minage ?

Pour rappel, une blockchain prend la forme d'un registre


électronique public de transactions entre utilisateurs. Les
transactions sont successivement rassemblées dans des blocs, reliés
les uns à la suite des autres. Lorsqu'un utilisateur souhaite effectuer
un paiement, il émet une transaction et la diffuse sur tout le réseau.
Elle n'est effective qu'à partir du moment où elle est publiquement
inscrite et visible sur le registre distribué.
4. Concepts de base: mineur
Qu'est-ce que le minage ?

L'action de "miner" une crypto-monnaie pourrait se résumer ainsi :


1. Le mineur reçoit en temps réel toutes les transactions émises par
les utilisateurs sur le réseau.
2. Le mineur vérifie si la signature électronique apposée par
l'émetteur de la transaction est valide.
3. Le mineur vérifie si l'adresse de l'envoyeur est bien en possession
des fonds qu'elle prétend vouloir transférer sur une autre adresse.
4. Le mineur rassemble toutes les transactions validées dans un
bloc.
4. Concepts de base: consensus
• Le consensus est un accord entre les différents nœuds du réseau
sur la validité des transactions et la création de nouveaux blocs,
afin de garantir l’intégrité et la sécurité du système.
4. Concepts de base: consensus
• Proof of work (preuve de travail)
• Une blockchain utilisant la preuve de travail fait appel à des
mineurs pour vérifier les données entrantes sur le registre, valider
l’authenticité des transactions et créer de nouveaux blocs.
4. Concepts de base: consensus
• Proof of stake (preuve d’enjeu)
• Est un algorithme de consensus de blockchain où la validation de
nouveaux blocs est basée sur le montant de la cryptomonnaie
qu’un validateur détient et verrouille sur le réseau.
• En effet, sur les réseaux Proof of Stake (PoS), les
mineurs n'existent pas. Ce sont des noeuds
validateurs* qui se chargent afin de valider un
bloc
4. Cas pratique de la blockchain
[Link]
5. Création d’une blockchain sous
pyhton
• >>Import hashlib
• >>chaine1=« ceci est une blockchain »
• >>hash1=hashlib.sha256([Link]())
• >>hash1
• >><sha256 _hashlib.HASH object @ 0x036989B0>
• >>[Link]()
• >>'6276261979997636bf7576d368872e6930860361a86dfe896e173552970b4f0
1’
5. Création d’une blockchain sous
pyhton
• La classe Block
• class Block:

• def __init__(self, hash_block_prec, list_trx):

• self.hash_block_prec = hash_block_prec
• self.list_trx = list_trx

• self.block_data = f"{' - '.join(list_trx)} - {hash_block_prec}"


• self.block_hash = hashlib.sha256(self.block_data.encode()).hexdigest()
5. Création d’une blockchain sous
pyhton
Les transactions

trx1 = "Ahmed envoie 5 eth à Mohamed"


trx2 = "Adil envoie 3 BTC à Tarik "
trx3 = "Kamal envoie 4 eth à Issam"
trx4 = "Issam envoie 1 BTC à Ahmed«
5. Création d’une blockchain sous
pyhton
Les blocks

block1 = Block('firstblock', [trx1, trx2])

print(f"Block 1 data: {block1.block_data}")


print(f"Block 1 hash: {block1.block_hash}")

block2 = Block(block1.block_hash, [trx3, trx4])

print(f"Block 2 data: {block2.block_data}")


print(f"Block 2 hash: {block2.block_hash}")
TP1

45
5. Création d’une blockchain sous
pyhton
• Étape 1 : Création d'une classe Block
• Cette classe représente un bloc dans une blockchain, avec un mécanisme de minage qui
utilise un nonce pour trouver un hash qui satisfait une certaine difficulté. Le résultat final
est un bloc validé avec un hash répondant aux critères de sécurité définis par la difficulté.

1. Définissez une classe Block qui représentera chaque bloc de la chaîne avec les attributs
suivants :
• def __init__ (self, index, transaction, previousHash, difficulty):
• """Constructor for Block object"""
• [Link] = index
• [Link] = transaction
• [Link] = previousHash
• [Link] = difficulty
• [Link] = [Link]()
• [Link] = 0
• [Link] = [Link]()
5. Création d’une blockchain sous
pyhton
 La méthode __str__ retourne une représentation sous forme de chaîne de caractères des
attributs du bloc.
• Cette représentation inclut l'index, le timestamp, la difficulté, le nonce, les transactions,
le hash précédent, et le hash du bloc

 La méthode calculHash est utilisée pour calculer le hash du bloc en fonction de son
contenu et de la valeur du nonce.
 La méthode mineBlock est utilisée pour trouver un hash valide en ajustant la valeur du
nonce. Elle utilise une boucle while qui continue d'incrémenter le nonce jusqu'à ce que le
hash calculé ait un certain nombre de chiffres zéro en préfixe, défini par la difficulté
([Link]).
5. Création d’une blockchain sous
pyhton
• Étape 2 : Création de la classe Blockchain

1. Définissez une classe Blockchain qui gérera l'ajout de nouveaux blocs à la chaîne. Vous
devrez également implémenter des mécanismes pour la validation des blocs.

 Le constructeur __init__ prend un paramètre optionnel difficulty, avec une valeur par
défaut de 4.
• L'attribut [Link] est initialisé à 0, représentant l'index du bloc actuel dans la
chaîne.
• L'attribut [Link] est initialisé avec la valeur du paramètre difficulty,
définissant la difficulté de minage pour les blocs de la chaîne.
• Un bloc Genesis est créé et ajouté à la chaîne. Le bloc Genesis a un index de 0,
des transactions spécifiques ('Genesis Block'), un hash précédent composé de
64 zéros, et utilise la difficulté définie.
5. Création d’une blockchain sous
pyhton
• Étape 2 : Création de la classe Blockchain

 La méthode AjouterBlock prend un paramètre transaction représentant les transactions du
nouveau bloc à ajouter à la chaîne.
• L'index de la chaîne est incrémenté.
• Un nouveau bloc est créé avec l'index actuel, les transactions spécifiées, le hash
du dernier bloc dans la chaîne, et la difficulté définie.
• Ce nouveau bloc est ajouté à la chaîne.
La méthode getLastBlock renvoie le dernier bloc ajouté à la chaîne en accédant à l'élément à
l'index -1 de la liste [Link].
 La méthode checkChainValid parcourt la chaîne à partir du deuxième bloc.
• Pour chaque bloc, elle vérifie si le hash calculé du bloc est égal au hash
enregistré dans le bloc.
Elle vérifie également si le hash précédent du bloc actuel correspond au hash du bloc
précédent. Si une incohérence est détectée à l'une de ces étapes, la méthode retourne False,
indiquant que la chaîne est invalide. Si la vérification se déroule avec succès pour tous les
blocs, la méthode retourne True, indiquant que la chaîne est valide.
• def __init__(self, difficulty=4):
• """Constructor for the Blockchain
object"""
• [Link] = 0
• [Link] = difficulty
• # create Genesis Block on the chain of
Blocks
• [Link] = [Block([Link], 'Genesis
50
Block', '0'*64, [Link])]
def addBlock(self,transaction):
"""Add a new block to the Blockchain"""
[Link] += 1
newBlock = Block([Link], transaction,
[Link]().hash, [Link])
[Link](newBlock)

def getLastBlock(self):
"""Return the last block in the Blockchain"""
return [Link][-1]

51
52
53
TP1: Correction

54
• class Block(object):
• #Constructeur de la classe Block
• def __init__ (self, index, transaction, previousHash,
difficulty):
• [Link] = index
• [Link] = transaction
• [Link] = previousHash
• [Link] = difficulty
• [Link] = [Link]()
• [Link] = 0
• [Link] = [Link]()

55
• #Renvoie une représentation sous forme de chaîne du
contenu du bloc
• def __str__(self):
• block_string = ''.join([
• "index: " + str([Link]) + '\n',
• "timestamp: " + str([Link]) + '\n',
• "difficulty: " + str([Link]) + '\n',
• "nonce: " + str([Link]) + '\n',
• "transaction: " + str([Link]) + '\n',
• "previousHash: " + [Link] + '\n',
• "hash: " + [Link] + '\n'
• ])
• return block_string

56
• #Calcul de hash du block courant
• def calculateHash(self):
• hash_string = ''.join([
• str([Link]),
• str([Link]),
• str([Link]),
• str([Link]),
• [Link]
• ])
• return sha256(hash_string.encode('ascii')).hexdigest()

57
• #Trouver un hachage valide pour le contenu du bloc, en
fonction de la difficulté
• def mineBlock(self):

• while [Link]()[:[Link]] != ('0' *


[Link]):
• [Link] += 1
• return [Link]()

58
• #Methodes et attributs de la classe Blockchain
• class Blockchain(object):

• #Constructeur de la classe Blockchain


• def __init__(self, difficulty=4):

• [Link] = 0
• [Link] = difficulty
• # create Genesis Block on the chain of Blocks
• [Link] = [Block([Link], 'Genesis Block', '0'*64,
[Link])]

59
• #Ajouter un nouveau block à la blockchain
• def ajouterBlock(self,transaction):

• [Link] += 1
• newBlock = Block([Link], transaction,
[Link]().hash, [Link])
• [Link](newBlock)

60
• #Renvoie le dernier block de la blockchain
• def getLastBlock(self):

• return [Link][-1]

61
• #Vérifier l'intégrité de la blockchain
• def checkChainValid(self):

• for i in range(1, len([Link])):
• currentBlock = [Link][i]
• previousBlock = [Link][i - 1]
• if [Link] !=
[Link]():
• return False
• if [Link] !=
[Link]:
• return False
• return True]

62
• Main
• import blockchain
• # Initialiser la blockchain avec difficulé = 3
• myCoin = [Link](3)
• # Affichage du block genèse (le premier block)
• print(str([Link][0]) + '\n')
• transactions = [
• {'Sender':'abc@[Link]', 'Beneficiary':'xyz@[Link]',
'Amount':15},
• {'Sender':'def@[Link]', 'Beneficiary':'ghi@[Link]',
'Amount':10},
• {'Sender':'ali@[Link]', 'Beneficiary':'ahmed@[Link]',
'Amount':11},
• {'Sender':'jkl@[Link]', 'Beneficiary':'pqr@[Link]',
'Amount':8},
• {'Sender':'ali@[Link]', 'Beneficiary':'abd@[Link]',
'Amount':18}
• ] 63
• # Traitement des transaction et affichage le contenu des
blocs
• for transaction in transactions:
• [Link](transaction)
• print([Link][-1])
• print

64
• # Maintenant, manipulons les données des transactions
pour invalider la Blockchain
• [Link][1].transaction =
{'Sender':'abc@[Link]',
'Beneficiary':'xyz@[Link]', 'Amount':20}

• print('Vérification de la blockchain après modification


d''une transaction')
• # Vérfier si la chaine est valide
• print('Intégrité de la blockchain est valide? ' +
str([Link]()))

65

Vous aimerez peut-être aussi