Weekly backup.

This commit is contained in:
2022-06-04 12:57:39 +02:00
parent e552583393
commit 015b896f65
68 changed files with 3530 additions and 27 deletions

View 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]]