stockage de la chaîne de blocs

Comment exactement la blockchain est-elle stockée ?

bloquer le disque de données

blocks/blk*.dat (dans le répertoire ~/.bitcoin.blocks') contenant : les données du bloc d'origine, ces données sont regroupées dans un bloc par plusieurs. Le nœud écrit d'abord le bloc reçu dans blk00000.dat, attend qu'il soit plein (128 Mo), puis commence à écrire le suivant, et ainsi de suite. (Le fichier est un fichier binaire)
Structure du fichier :
insérez la description de l'image ici

  1. Octets magiques : un est distribué par bloc, afin de distinguer la marque d'un bloc d'un autre bloc dans le processus de flux de données continu. La longueur est de quatre octets, qui varie en fonction des différentes balises réseau. 4 octets
    insérez la description de l'image ici

  2. taille : Il s'agit de la taille du prochain fichier entier. (La taille elle-même est de 4 octets)
    La limite de taille est contrôlée par MAX_BLOCKFILE_SIZE dans le code source, généralement 128 Mo.

  3. en-tête de bloc : 80 octets fixes, la structure est la suivante. Le hachage Merkle est une sorte de hachage.

en-tête de bloc
insérez la description de l'image ici
4. tx count : Indique le nombre de transactions dans le bloc.
5. Données de transaction : structure de la transaction :
insérez la description de l'image ici
le processus d'analyse à partir des données est à peu près le suivant :

Lire le numéro de version à 4 octets
Analyser le varint, obtenir la quantité d'entrée n,
exécuter 1~n cycles et analyser l'entrée de la transaction
Analyser le varint, obtenir la quantité de sortie m,
exécuter 1~m cycles et analyser la sortie de la transaction

insérez la description de l'image ici

blocs/index/* (métadonnées) Niveau DB

Il s'agit d'une base de données leveldb qui stocke les métadonnées des blocs actuellement connus, et les métadonnées enregistrent l'emplacement sur le disque correspondant au bloc.

chainstate/* Niveau DB

C'est aussi une base de données leveldb, le but est de vérifier si les nouveaux blocs et tx sont légaux. Les données stockées sont utxo : c'est-à-dire que chaque transaction a une entrée et une sortie, l'entrée enregistre la source des fonds et la sortie enregistre les fonds. La sortie générée est "sortie de transaction non dépensée", utxo, sortie de transaction non dépensée. Basé sur le compte,
il n'y a pas de concept de compte dans Bitcoin, et
toutes les transactions actuellement non dépensées et leurs métadonnées sont stockées sous une forme compacte. Les données ici sont nécessaires pour valider les nouveaux blocs et transactions entrants. En théorie, ces données peuvent être reconstruites à partir des données du bloc, mais cela prendra beaucoup de temps. La vérification des données peut être effectuée sans ces données, mais les blocs de données existants doivent être scannés, ce qui est lent.
Structure des données : arbre de Merkle. (Tant que le hachage racine est enregistré, les changements sur l'ensemble de l'arbre peuvent être détectés.)
Le bloc est organisé en un arbre Merkle.
La couche inférieure est : blocs de données, (transaction) chaque bloc est divisé en deux parties, bloc en-tête (hachage racine) ; corps du bloc.
Les nœuds complets, pas tous
les nœuds légers, ne bloquent que les en-têtes. Il doit être prouvé par la preuve Merkle. Vérifiez sur le téléphone mobile pour voir s'il a été écrit dans la blockchain.
Envoyez une requête à l'ensemble du nœud, tant que le hachage marqué en rouge est envoyé, puis vérifiez si ces hachages sont cohérents avec le hachage racine stocké par lui-même. Donnez-moi le contenu de la transaction, et donnez-moi le hachage sur cette branche, et je peux le prouver.
La complexité temporelle et spatiale de cette vérification, log(n).
Prouver, preuve des non-appartenances, que la transmission du contenu entier du nombre (n) est linéaire.
Pour les nœuds de page, effectuez un tri par hachage. Si vous savez qu'ils sont au milieu de ces deux nœuds, cela signifie que le milieu de ces deux nœuds n'existe pas, log(n)
L'arbre merkle trié est trié, c'est une preuve de non-existence, et il est plus rapide de chercher. (Ceci n'est pas utilisé dans le Bitcoin actuel, mais devrait-il être utilisé dans le système de résolution de noms de domaine ?)
Le hachage doit être acyclique.

La banque centrale émet de la monnaie numérique

Signature de clé privée pour vérifier si elle est authentique. Algorithme de chiffrement asymétrique, la clé privée est facile à fuir. La monnaie numérique est un fichier, mais elle peut être copiée.
Le problème du double paiement, des doubles dépenses, des doubles dépenses attaque.
Le numéro d'enregistrement de la banque centrale exige que la banque centrale confirme la propriété de l'argent.
1. Qui a le droit d'émettre de la monnaie
2. Comment éviter les doubles dépenses.
Structure des données : chaîne de blocs.
A obtient le droit de frapper des pièces et émet 10 bitcoins. —> sur la chaîne.
Distribution : A\B, et le signe, et l'adresse de b, hachage de la clé publique, qui équivaut à un numéro de compte bancaire.
Entrée : Expliquez la source de la pièce et le hachage de B. Le hachage de la clé publique de A, le hachage de la source et le hachage de la clé publique, la sortie contient le hachage de A.
A donne de l'argent à B, le chiffre avec la clé publique de B, et après avoir reçu l'argent, B le déchiffre avec la propre clé privée de B.
Deux types de pointeurs de hachage :
1. Le hachage de l'ensemble du contenu qui est enchaîné
2. La source de la devise (pour placer une attaque à double dépense)
Bitcoin, et divulguer leur code QR de paiement. En-tête de bloc
A—>B

  1. version
  2. pointeur vers le bloc précédent
  3. Le hachage racine de l'arbre merkle
  4. Cible de seuil de difficulté minière cible
  5. nonceNombre aléatoire. (requis pour l'exploitation minière)
    H (en-tête de bloc) <= cible

Seuls les hachages des en-têtes de bloc sont concaténés.

Nœuds pleins et nœuds légers. nœud complet et nœud léger (ne peut pas vérifier indépendamment la légitimité de la transaction)

Les nœuds complets doivent vérifier chaque information de transaction.
Nous ciblons principalement les nœuds complets, car les nœuds légers ne participent pas à la construction et à la maintenance de la blockchain, mais n'utilisent que certaines informations de la blockchain pour effectuer certaines requêtes.

Si vous souhaitez utiliser Bitcoin pour les transactions, il vous suffit d'utiliser des nœuds légers. (Comment correspondre au système de résolution de nom de domaine)

Comment leur faire générer un consensus distribué. table de hachage distribuée par consensus distribué
, table de hachage globale. Le contenu du consensus inclut ces paires de valeurs clés.
Système distribué
Dans un système asynchrone, le délai du réseau asynchrone n'est pas en ligne, il y a un
CAP défectueux théorème
cohérence cohérence disponibilité
disponibilité
partition tolérance partie

tissu hyperledger (chaîne de consortium) https://blog.csdn.net/ice_fire_x/article/details/104362219
adhésion

blocs/rev*.dat disque

Contient des données révoquées, comme un patch inversé.
A chaque fichier blockchain correspondra un fichier de révocation

Nombre total de connexions de stockage blockchain

https://www.blockchain.com/explorer/blocks/btc?page=1
https://blockchair.com/zh/bitcoin/blocks#

https://blockchair.com/zh/bitcoin

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41523437/article/details/114867007
conseillé
Classement