Weekly backup.
This commit is contained in:
92
20220529102607-blockchain.org
Normal file
92
20220529102607-blockchain.org
Normal file
@@ -0,0 +1,92 @@
|
||||
:PROPERTIES:
|
||||
:ID: badea9d7-57cd-4734-98de-343f619ffe70
|
||||
:mtime: 20220529123703
|
||||
:ctime: 20220529102607
|
||||
:END:
|
||||
#+title: Blockchain
|
||||
|
||||
* Introduction
|
||||
Blockchain est une *technique de stockage de données* presque impossible à modifier, hacker ou manipuler les données
|
||||
stockées :
|
||||
* Basée sur la /Distributed Ledger Technology/ (DLT),
|
||||
* Principalement utilisée dans les domaines des cryptomonnaies et NFTs.
|
||||
|
||||
Il s'agit d'un *registre numérique de transactions* généralement partagé entre tous les noeuds du réseau. Celui-ci est
|
||||
composé d'une série de blocs incluant plusieurs transactions et à chaque fois qu'une nouvelle transaction est réalisée,
|
||||
un enregistrement de celle-ci est ajouté dans le registre de chaque participant.
|
||||
|
||||
Les données stockées dans la chaine de blocs est sécurisé par des signatures cryptographiques (hash des blocks respectifs).
|
||||
|
||||
* Les blocs
|
||||
Les blocs sont les éléments de base d'une /blockchain/ et sont constitués de :
|
||||
1) Transactions,
|
||||
2) Le /hash/ du précédent bloc,
|
||||
3) Le /hash/ de son propre contenu.
|
||||
|
||||
Le premier /block/ d'un chaine est appelé /genesis block/.
|
||||
|
||||
#+BEGIN_SRC python :results output
|
||||
from rich import print
|
||||
from hashlib import sha256
|
||||
from json import dumps
|
||||
|
||||
def hash_string_256(string):
|
||||
"""Create a SHA256 hash for a given input string.
|
||||
Arguments:
|
||||
:string: The string which should be hashed.
|
||||
"""
|
||||
return sha256(string).hexdigest()
|
||||
|
||||
def hash_block(block):
|
||||
"""Hashes a block and returns a string representation of it.
|
||||
Arguments:
|
||||
:block: The block that should be hashed.
|
||||
"""
|
||||
return hash_string_256(dumps(block, sort_keys=True).encode())
|
||||
|
||||
genesis_block = {
|
||||
"previous_hash": "",
|
||||
"transactions": []
|
||||
}
|
||||
genesis_block_hash = hash_block(genesis_block)
|
||||
print(f'{genesis_block_hash = }')
|
||||
|
||||
block = {
|
||||
"previous_hash": genesis_block_hash,
|
||||
"index": 1,
|
||||
"transactions": [{"sender": "A", "receiver": "B", "amount": 0.5}],
|
||||
"proof": 9,
|
||||
}
|
||||
|
||||
block_hash = hash_block(block)
|
||||
print(f'{block_hash = }')
|
||||
|
||||
block['new_hash'] = block_hash
|
||||
print(f'{block = }')
|
||||
#+END_SRC
|
||||
#+RESULTS:
|
||||
: genesis_block_hash =
|
||||
: '26cfa5c318d1195b72ecc139f11a740c5a71300dc1f3d4656188c684ac8ad01e'
|
||||
: block_hash = '25cdb202d88ccc0d1c3eae6d27af4c231e7e9f889885f1feb40c85128aac7c37'
|
||||
: block = {'previous_hash':
|
||||
: '26cfa5c318d1195b72ecc139f11a740c5a71300dc1f3d4656188c684ac8ad01e', 'index': 1,
|
||||
: 'transactions': [{'sender': 'A', 'receiver': 'B', 'amount': 0.5}], 'proof': 9,
|
||||
: 'new_hash': '25cdb202d88ccc0d1c3eae6d27af4c231e7e9f889885f1feb40c85128aac7c37'}
|
||||
|
||||
** /hash/
|
||||
Un /hash/ (sha256) est une /str/ de longueur fixe qui apporte une couche de chiffrement autour du /block/, rendant impossible la
|
||||
manipulation de la /blockchain/ (modification des transactions ou manipulation de la /blockchain/).
|
||||
|
||||
** /Proof of work/
|
||||
/Proof of work/ est un algorithme propre à une /blockchain/ :
|
||||
* C'est le mécanisme qui définit la difficulté à ajouter un /block/ à la /blockchain/,
|
||||
* Il s'agit d'un nombre devant satisfaire une condition en utilisant un /hash/, /hash/ différent des /hash/ contenu dans les /block/ existant,
|
||||
* Généralement, ce /hash/ est calculé ainsi : sha256((/transactions/ + /hash/ du /block/ précédent) + /proof of work/),
|
||||
* /Proof of work/ est ajouté aux /metadata/ du /block/ si le /hash/ calculé satisfait une ou plusieurs condition(s) arbitraire(s) (2
|
||||
premiers digits égaux à 0 par exemple), dans le cas échant /proof of work/ est incrémenté et le /hash/ recalculé
|
||||
jusqu'à satisfaction des conditions,
|
||||
|
||||
* Références
|
||||
* [[https://medium.com/@seaflux/getting-started-with-blockchain-and-programming-it-in-python-d7663b7cc3ef][Getting started with blockchain and programming it in python - Medium]]
|
||||
|
||||
|
Reference in New Issue
Block a user