2017年5月12日全球爆发了加密病毒WannaCry攻击事件,全球众多的高校、医院、政府机构等等都遭到了攻击,被攻击者的电脑数据被加密,勒索人员指定需要发送一定数量的比特币到指定的账户,才能解密电脑中的数据.从此比特币开始重新回到大众的视野,被各大媒体争相报道,由此也开启了加密数字货币的一轮超级大牛市.由于比特币的价格持续走高,越来越多的人也始关注这一领域,现在到处都在讲区块链,各大公司也在布局区块链,BAT小米京东等等都在研究区块链.那么到底区块链是什么?它有什么作用?
1.比特币是什么?它是如何运行的?
百度一下我们可以看到百度上对比特币的定义:一种P2P形式的数字货币.所以比特币的网络是一个由全球用户组成的庞大的P2P网络. P2P网络(点对点网络)我们每个人都应该接触过,以前经常使用的BT下载、种子下载等都是基于p2p的技术,它的核心就是每一个参与网络的节点都是对等的,它们都可以作为服务器也可以作为客户端.不同于我们使用的支付宝这种中心化的服务,服务器是由支付宝公司提供和维护,一旦支付宝公司提供的服务器被攻陷,那个整个服务就停止了.而p2p网络,即使某一个节点出现故障,它也不会影响整个网络的运行.

普通用户如何加入比特币的网络? 普通用户只需要下载一个比特币的钱包客户端,然后在自己的电脑上运行,就加入了比特币的网络中.当第一次运行比特币的客户端的时候,可以在客户端上生成一个比特币账户,然后客户端会同步网络中的区块数据.这个同步区块的作用就是把比特币网络中的历史交易数据下载到本地.当你区块同步完成之后,就可以使用钱包来进行发送交易,或者接收别人转账给你的比特币了.

区块链
区块链?钱包下载下来的区块数据其实就是区块链了(注:现在区块链的定义其实是已经发生了变化,基本上是泛指采用了类似比特币这种去中心化技术的相关产品).刚刚我们说到比特币钱包客户端第一次运行之后会把整个比特币网络的历史交易都下载到本地.这么多数据的数据是如何组织的,它的数据结构是什么样的?
比特币的交易都被存储在一个1M大小的文件中(上图是下载的以太坊区块它的区块大小是2M),这一个文件就叫一个区块.一个完整的区块结构主要由以下几部分构成:

可以看到一个区块主要由区块大小、区块头、交易计数器、和交易记录组成. 我们看看是如何记录交易记录的,交易记录的格式可以简单理解如下:
A发送给B账户100BTC
B账户收到100BTC
......
具体内容可以点击这里了解一个区块中包含的详细数据,可以在页面中选择json格式,方便阅读:
https://webbtc.com/block/0000000000000000000cdc0d2a9b33c2d4b34b4d4fa8920f074338d0dc1164dc
然后一个一个的区块是如何关联起来的,我们再看一下区块头中包含的数据.

每一个区块的区块头都会记录它的父区块头的哈希值,也就是上一个区块的id,这样每一个区块就通过区块头中的前一区块的id连起来了,所以这就就是区块链.这和数据结构中的链表结构是一样一样的.

现在比特币的完整区块链大小是151GB,并且随着时间的增长交易的增加,会一直增大
比特币区块增长情况
所以为了更少的占用用户的电脑存储资源,现在也有很多的轻钱包(lightweight)的客户端,它们大多数是只同步最近时间的区块数据,对历史数据,不同步或者只同步历史区块的头信息.还有一种是第三方的钱包,它们是由第三方的服务商维护一台服务器用来同步比特币的所有区块,然后提供的钱包,直接在它维护的服务器中查询数据,当然这样会减弱比特币的去中心化特性.
矿工
上面说完了,我们第一次运行客户端 讲历史区块同步完成之后,这个时候还会有新的交易记录产生.这个交易是如何写入到区块链中的,一个新的区块是如何生产的?
当我们下载好比特币客户端,假设创建了一个账户A,同步完成最新的区块数据之后,发送一笔交易给账户B,这个时候比特币客户端会把这一条交易信息广播到比特币的网络中.但是这个时候B不会立即就收到这一笔转账,这一笔交易必须被矿工写到一个区块中,并且这个区块被加到当前网络中的最长链上,这样B账户的客户端才会同步这一个区块,然后你的发送的信息B账户也就收到了.所以也说区块链是一个分布式账本,而矿工就是记账的人.矿工会使用挖矿软件,加入区块链网络,它的主要工作是挖矿,比特币的程序中规定每隔10分钟会产生一个区块,这个10分钟不是固定的是大约10分钟,它是根据当前挖矿的难度来的,挖矿的过程可以简单理解为,比特币程序为整个网络中的矿工出了一个数学题,解开这个题目的平均时间是10分钟.解开这个题目的矿工就挖到了一个新区块,同时也能得到12.5个比特币奖励,但是它同时需要把网络中等待写入区块的交易信息,写入到区块,并把该区块加入到最长的区块链中,然后广播到网络中,这些交易,以及矿工获得的奖励才生效.
现在随着挖矿设备的计算能力越来越强大,所以挖矿难度也在越来越难.普通的个人用户用个人计算机基本上是不可能再挖出比特币了.现在都是经过优化的ASIC矿机.当然由此也诞生了矿池,矿池的作用就是集合大家的算力,挖到矿之后,再根据算力贡献情况分给用户.
共识机制
上面我们提到了,比特币矿工需要记过无数次的计算,得出一个正确答案之后才能挖到一个新的区块得到记账权.得到记账权之后,还需要把交易信息写入到区块,写入到区块之后,需要把区块打包发送到网络.各个客户端接收到最新区块由于网络原因会出现前后顺序不一的情况,所以还要保证全网最长链数据一致性.这就需要一种算法或者机制来确保谁能够获得记账权,如何获得记账权,以及如何保证全网数据的一致性.这种机制就是共识机制.如果区块链是比特币运行的核心,那么共识机制就是比特币运行的灵魂.其实共识机制和传统的分布式数据库的共识机制是有一些相似的,它们都遵从下面的规则:
- Append only 只允许添加区块,不允许删除或者修改
- 强调序列化
- 少数服从多数原则
- 分离覆盖的问题:即长链覆盖短链区块,多节点覆盖少数节点日志
目前主流的共识机制有如下几种:
- 工作量证明机制(Proof of Work, POW),需要挖矿目(比特币使用的方式)
- 股权证明机制(Proof of Stake, POS)
- 授权股权证明机制(DPOS)
- PFBT(拜占庭共识算法)
不同的共识机制适用于不同的场景.现在也没有一种共识机制是完美的.每一种算法都有它的优缺点.
这里有主流共识机制的介绍:https://bitsharestalk.org/index.php?topic=4031.0
总结:
读完上面的内容相信你以及明白了什么是区块链.
所以为什么说比特币是去中心化的?就是因为它是基于p2p网络的,所有参与网络的客户端都即是客户端又是服务端.网络不会因为某一个节点的崩溃就发生瘫痪.
为什么说区块链上的数据是可信任的不可逆的?这也是因为区块链中的数据一旦记录,便不可删除,不可修改,只能添加新的数据.当然这里面其实也有51%攻击,分叉等情况,以及不同的共识算法可能系统能够稳定运行的节点要求也不一样.
PS :
区块链分叉是什么?
大区块是什么?
隔离见证&闪电网络是什么?
比特币解决了什么问题?
去百度一下吧.
网友评论