Description de l'étiquette luggage
Bitcoind depuis 0.8 gère deux bases de données, l'index de bloc (en $DATADIR/blocs/index) et le chainstate (en $DATADIR/chainstate). L'index de bloc conserve les informations pour chaque bloc, et où il est stocké sur le disque. La chaîne état conserve des informations sur l'état résultant de la validation comme un résultat de la plus connue de la chaîne.
À l'intérieur de l'index de bloc, les paires clé/valeur sont les suivants:
- 'b' + 32 octets de hachage du bloc -> index de bloc d'enregistrement. Chaque magasins:
- Le bloc d'en-tête.
- De la hauteur.
- Le nombre de transactions.
- Dans quelle mesure ce bloc est validé.
- Dans quel fichier, et où, dans ce fichier, le bloc de données est stockée.
- Dans quel fichier, et où, dans ce fichier, l'annulation de stockage des données.
- 'f' + 4-byte numéro de fichier -> informations sur le fichier d'enregistrement. Chaque magasins:
- Le nombre de blocs stockés dans le fichier de bloc avec ce numéro.
- La taille du fichier de bloc avec le nombre ($DATADIR/blocs/blkNNNNN.dat).
- La taille du fichier d'annulation avec ce numéro ($DATADIR/blocs/revNNNNN.dat).
- Le plus bas et le plus élevé de la hauteur des blocs stockés dans le fichier de bloc avec ce numéro.
- La plus haute et la plus horodatage de blocs stockés dans le fichier de bloc avec ce numéro.
- 'l' -> 4 octets numéro de fichier: le dernier bloc du numéro de fichier utilisé.
- 'R' -> 1-octets booléen ('1' si la valeur est true): si nous sommes dans le processus de réindexation.
- "F" + 1 octet indicateur de longueur de nom + drapeau chaîne de nom -> 1 octets booléen ('1' si la valeur est true, '0' si la valeur est false): indicateurs différents qui peut être allumé ou éteint. Il est actuellement défini drapeaux comprennent:
- 'txindex': Si la transaction à l'indice est activé.
- 't' + 32 octets opération de hachage -> transaction enregistrement d'index. Ces options sont facultatives et n'existent que si 'txindex' est activé (voir ci-dessus). Chaque magasins:
- Qui fichier de bloc du numéro de la transaction est enregistrée dans.
- Ce qui a contrebalancé dans ce fichier le bloc de l'opération est la partie de l'est stocké à l'.
- Le décalage à partir du début de ce bloc à l'endroit où la transaction elle-même est stocké.
À l'intérieur de la chaîne de base de données d'état, à la suite de paires clé/valeur sont stockées:
- 'c' + 32 octets opération de hachage -> non dépensés opération d'enregistrement de sortie pour cette transaction. Ces enregistrements sont uniquement présents pour les transactions qui ont au moins un non dépensés de sortie gauche. Chaque magasins:
- La version de la transaction.
- Si l'opération a été un coinbase ou pas.
- Hauteur de bloc contient de la transaction.
- Les résultats de cette opération sont inutilisés.
- Le scriptPubKey et le montant non dépensé sorties.
- 'B' -> 32 octets de hachage du bloc: le bloc de hachage jusqu'à laquelle la base de données représente les excédents des transactions sorties.
La dernière version de bitcoind(veuillez ajouter la compatibilité de version) utilise l'obscurcissement de la valeur d'une paire clé/valeur . Si vous avez besoin de XOR avec la dissimulation de la clé pour obtenir la valeur réelle.
Je n'entrerai pas dans la sérialisation des détails des enregistrements particuliers. Ils sont spécialement conçus pour être compacts sur le disque, et pas vraiment prévu pour être facilement utilisable par d'autres applications (LevelDB ne prend pas en charge l'accès simultané de plusieurs applications de toute façon). Il existe plusieurs méthodes RPC pour l'interrogation de données à partir de bases de données (getblock
, gettxoutsetinfo
, gettxout
) sans avoir besoin d'un accès direct.
Comme vous pouvez le voir, seuls les en-têtes sont stockés à l'intérieur de cette base de données. La réelle blocs et les transactions sont stockées dans le bloc des fichiers, qui ne sont pas des bases de données, mais seulement des brutes ajouter seulement les fichiers qui contiennent les blocs dans le format de réseau.
Quant à votre deuxième question: qu'est-ce que n
? Si vous souhaitez simplement accéder à certains dossiers, bien sûr, effectuer une itération sur les touches et arrêtez-vous quand vous avez lu assez.