今天在扣扣群冲浪,看到有人在说区块链和比特币,于是想查资料把这东西的原理大致搞清楚,总结为本文
文章目录
- 区块链
区块链
区块链到底是什么?一句话总结为: 一种去中心化的分布式数据库
分布式数据库
区块链是一种分布式的数据库,全球任何一个终端都可以拷贝这个数据库的全部内容,并且成为这个网络中的一个结点(node)。这个数据库的核心内容可以是任意内容,比特币交易所用的数据库就是区块链,里面的核心内容是比特币的交易记录。根据交易记录可以计算得到每个用户(对应比特币的public key)持有的数量
对区块链的名词解释
区块链(blockchain)这个词可以分开解释:
- 区块(block),所谓区块,其实就是一种struct,或者说一个class。它含有两个部分
- HEAD: 这部分存储一些Hash、时间等信息,后面会说到
- BODY: 存储数据库的具体条目。在比特币所用的区块链中,存储的是比特币的交易记录
- 链(chain): 其实就是链表,一个个区块连接起来形成的链表,就叫做区块链
整个区块链表中BODY的内容聚合起来形成一个大型的数据库
对HEAD和BODY的一些描述
这个BODY中的内容就是数据库中的一行行内容。从而用链表构建了一个数据库
矿工
前面说到区块链是一种分布式的数据库,并且每个人都可以拷贝,并且一旦数据库有更新,就会同步到每个区块链数据库中。那么是不是每个人都可以随便修改数据库呢?显然是不能的,因为如果每个人都能随便修改数据库内容,也就意味着这个数据库毫无安全性可言。
实际上如果想要修改数据库,也就是在区块链表上添加新的结点(区块),需要计算一个非常复杂的Hash,这也就是矿工在做的事情
不可修改性–达成了其去中心化的特点
区块的设计很巧妙,它的HEAD中包含这个区块的区块体(BODY)的SHA256 Hash,也包含当前时间的Hash(也是SHA256算法),还有上一个区块的Hash。把这些Hash字符串组合起来再计算一次SHA256 Hash,就得到当前区块的Hash
这种设计的目的,是让对整个区块链表的修改的计算量非常大,从而导致没人能修改整个链表
总结:整个区块链表不能像一般的链表一样随便修改,例如随意插入node,减掉node,都办不到,而只能从末尾添加新的node。这样的设计使得区块链没有管理的中心
交易用的数据库就是区块链。一个区块最大为1MB,大约能存2000多条交易记录。这个区块放到链表的最前边就ok了
挖矿的人就在算最新的区块的Hash,这样它才能把新区块连到整个区块链上。算出Hash以后他负责把交易记录加到区块中,再连到整个区块链上。同时,他也会获得奖励,获得一些比特币
Git与区块链
git和区块链其实还蛮有相似性,Git 和 区块链都是去中心化的链式数据分布式存储方案
都是分布式存储。但git不要求强一致性,可以人工合并冲突;区块链要求强一致性,自动废除较短的链