La structure de données interne de Git est un arbre d'objets de données, chaque objet ne faisant que pointer vers son prédécesseur. Chaque bloc de données est haché. La modification (erreur de bit ou attaque) d'un bloc intermédiaire sera notée lorsque le hachage enregistré et le hachage actuel s'écartent.
Comment ce concept est-il différent de la chaîne de blocs?
Git ne figure pas à titre d'exemple de chaîne de blocs, mais au moins dans les résumés, les deux descriptions de structure de données se ressemblent: bloc de données, liaison inverse unidirectionnelle, hachage, ...).
Alors, où est la différence, que Git ne s'appelle pas une chaîne de blocs?
git
n'est pas un exemple de technologie de blockchain pour plusieurs raisons (ce sont les premières qui me viennent à l'esprit):
Dans une implémentation blockchain, chaque bloc est vérifié indépendamment plusieurs fois avant d'être ajouté à la blockchain. C’est en effet l’un des aspects les plus importants de la technologie de la blockchain et en assure la "rigueur". D'autre part, de nombreux projets git
ne nécessitent pas de vérification indépendante et ne nécessitent, lorsqu'ils le font, qu'une seule personne pour approuver une modification avant que celle-ci ne soit validée dans le référentiel. Par conséquent, avec au plus un point de validation auquel vous devez faire confiance, git
enfreint l'un des principes fondamentaux de la technologie blockchain.
Un référentiel git
n'est pas nécessairement dupliqué sur de nombreux serveurs. Vous pouvez travailler à partir d'un référentiel git
localement et si votre disque local était corrompu, vous perdriez tout. La technologie Blockchain implique la reproduction du grand livre sur plusieurs serveurs.
Vous pouvez réécrire git
history. Un git Push <remote> <branch> --force
où <branch>
est défini sur un état antérieur à celui de <remote>
réécrirait l'historique. Dans les blockchains, le grand livre est une histoire immuable.
La raison pour laquelle Git et les chaînes de blocs semblent similaires est due au fait qu'ils utilisent tous les deux merkle trees comme structure de données sous-jacente. Un merkle est un arbre où chaque nœud est étiqueté avec la valeur de hachage cryptographique de son contenu, qui inclut les étiquettes de ses enfants.
Le graphe acyclique dirigé de Git est exactement cela: un arbre à pastilles où chaque nœud (balise, commit, arbre ou objet blob) est étiqueté avec le hachage de son contenu et l’étiquette de son "enfant". Notez que pour les commits, le terme "enfant" est en conflit avec la compréhension de Git des parents: les commits des parents sont les enfants des commits, il vous suffit de regarder au graphique comme un arbre qui continue à grandir en le ré-enracinant.
Les Blockchains ressemblent beaucoup à cela, puisqu'elles continuent également de croître et qu'elles utilisent également sa propriété merkle tree pour assurer l'intégrité des données. Mais, en général, les blockchains sont bien plus que de simples arbres à pastilles: c’est là où ils se séparent de "stupide" Git . Par exemple, blockchains signifie aussi généralement avoir un système hautement décentralisé au niveau des blocs (il n'est pas nécessaire que tous les blocs soient au même endroit).
Comprendre les blockchains est un peu difficile (personnellement, je suis encore loin d’avoir tout compris), mais j’estime que la compréhension des composants internes de Git est un bon moyen de comprendre les arbres à carreaux, ce qui permet de comprendre un aspect fondamental des blockchains.
Les cyber monnaies, comme Bitcoin, utilisent une chaîne de blocs cryptographiques à consensus généralisé (merkle tree). Un usage courant a abrégé cela en 'blockchain'
Bien que git utilise une chaîne de blocs (merkle tree), il lui manque les composants cryptographiques à consensus distribués que l’utilisation courante du terme 'BlockChain' implique.
Contrairement à blockchains de crypto-monnaie; git n'a pas de mécanisme de consensus p2p sans confiance.
Blockchain
est pas n'importe quelle chaîne de blocs.
Blockchain
est le moment où il existe un moyen de déterminer la chaîne principale lorsque deux ou plus sont détournés , et lorsqu'aucune autorité centrale n'est nécessaire détermination.