今天在扣扣群冲浪,看到有人在说区块链和比特币,于是想查资料把这东西的原理大致搞清楚,总结为本文


文章目录

区块链

区块链到底是什么?一句话总结为: 一种去中心化的分布式数据库

分布式数据库

区块链到底是个啥_概率论

区块链是一种分布式的数据库,全球任何一个终端都可以拷贝这个数据库的全部内容,并且成为这个网络中的一个结点(node)。这个数据库的核心内容可以是任意内容,比特币交易所用的数据库就是区块链,里面的核心内容是比特币的交易记录。根据交易记录可以计算得到每个用户(对应比特币的public key)持有的数量

对区块链的名词解释

区块链(blockchain)这个词可以分开解释:

  • 区块(block),所谓区块,其实就是一种struct,或者说一个class。它含有两个部分
  • HEAD: 这部分存储一些Hash、时间等信息,后面会说到
  • BODY: 存储数据库的具体条目。在比特币所用的区块链中,存储的是比特币的交易记录
  • 链(chain): 其实就是链表,一个个区块连接起来形成的链表,就叫做区块链

整个区块链表中BODY的内容聚合起来形成一个大型的数据库

区块链到底是个啥_区块链_02

对HEAD和BODY的一些描述

这个BODY中的内容就是数据库中的一行行内容。从而用链表构建了一个数据库

区块链到底是个啥_机器学习_03

矿工

前面说到区块链是一种分布式的数据库,并且每个人都可以拷贝,并且一旦数据库有更新,就会同步到每个区块链数据库中。那么是不是每个人都可以随便修改数据库呢?显然是不能的,因为如果每个人都能随便修改数据库内容,也就意味着这个数据库毫无安全性可言。

实际上如果想要修改数据库,也就是在区块链表上添加新的结点(区块),需要计算一个非常复杂的Hash,这也就是矿工在做的事情

不可修改性–达成了其去中心化的特点

区块的设计很巧妙,它的HEAD中包含这个区块的区块体(BODY)的SHA256 Hash,也包含当前时间的Hash(也是SHA256算法),还有上一个区块的Hash。把这些Hash字符串组合起来再计算一次SHA256 Hash,就得到当前区块的Hash

这种设计的目的,是让对整个区块链表的修改的计算量非常大,从而导致没人能修改整个链表

总结:整个区块链表不能像一般的链表一样随便修改,例如随意插入node,减掉node,都办不到,而只能从末尾添加新的node。这样的设计使得区块链没有管理的中心


交易用的数据库就是区块链。一个区块最大为1MB,大约能存2000多条交易记录。这个区块放到链表的最前边就ok了

挖矿的人就在算最新的区块的Hash,这样它才能把新区块连到整个区块链上。算出Hash以后他负责把交易记录加到区块中,再连到整个区块链上。同时,他也会获得奖励,获得一些比特币

Git与区块链

git和区块链其实还蛮有相似性,Git 和 区块链都是去中心化的链式数据分布式存储方案

都是分布式存储。但git不要求强一致性,可以人工合并冲突;区块链要求强一致性,自动废除较短的链

参考