技术版·白话区块链(二)


640?wx_fmt=png


 华正皓

渡鸦区块链专栏作者


640?wx_fmt=png


之前文章说过区块链就是通过密码学的方式形成的一个由集体维护的分布式数据库。

首先,区块链,字面上理解就是由多个“区块”连接成为的一种“链式”的数据结构。    
就像这样:

对于初步了解区块链的人来说,可以简单的把区块链理解为分布式数据库(实际上是不同的),一种点对点的网络。它的网络结构是分布式的:


640?wx_fmt=png


下面来详细说一下具体一个区块是什么样的数据结构:


640?wx_fmt=png



  • 区块高度:可以理解为每个区块的唯一ID,从零开始的“创世块”(即块高度为0),一段时间生成一个块,块高度加1。

  • 头哈希:每一个区块都有一个唯一哈希值,依据上一个区块的头哈希+数据块哈希+随机数生成

  • 父哈希:上一个高度区块的哈希值

  • merkle根:区块中每一笔交易对应一个哈希,呈树装结构,生成的最终值(根),代表了改区块中的交易。

  • 难度:难度不是固定不变的,会随着网络现有算力的变化而自动调节

  • Nonce:挖矿所要达到的目标值

  • 区块体:一定时间内所生成的交易信息,即账本。


说到这里,一定还有头脑中没有形成区块链的概念,所以我下面描述一个比特币中交易的“全流程”:
小明和小红每人有一个比特币的地址(公钥:相当于是我们银行卡的卡号 )和一个私钥(相当于银行卡密码或者说你的签名),像这个样子:


1JQMpgRThCJjKbs7P8Ht6x142zjPJFmZVY


我们需要填写转账的金额和对方的比特币地址,就像我们平时用银行卡转账一样的操作,一段时间后,对方即可收到你的转账金额。
这是作为用户能感知到的,看上去和我们平时的转账交易没什么不同,只是“卡号”看起来奇怪了一点,交易时间变长了一点。
那么当你按下“转账”按钮时,背后的区块链系统到底发生了什么?

  1. 使用私钥对这笔即将发生的交易进行签名

  2. 从你的客户端把你的这笔交易提交到区块链网络

  3. 由已经开启“挖矿”程序的计算机(称为矿机)把10分钟内的交易打包成一个数据块(相当于一个账本,其中就包含了小明的这笔交易)

  4. 这个数据块就是上图中的“区块主体”,而此时,这些区块主体中的交易并未生效。

  5. 那么如何使这些交易生效呢?每个区块中都有一个哈希值,通过不断哈希运算,不断哈希运算(可能是几亿次)最终找到一个比当前哈希小的值,就认为这个区块被确认。即为交易生效,这个过程就称为“挖矿”。

  6. 那谁来做这个哈希呢?全球那么多交易,如果只是一家公司的几台计算机是远远不够的。所以,比特币有“激励机制”,当一台计算机确认了一个区块,就可以奖励12.5个比特币。为了得到Money,越来越多矿工就有动力造更大更多算力的矿机来“挖矿 ”。越多的人参与挖矿的竞争,算力就越分散,比特币系统就越不可能被某一个人控制。这就形成了“双赢”的局面,对于矿工来说,想想你每天游山玩水,有一台机器每天帮你赚钱,源源不断地打到你的账户#滑稽脸。对于创造比特币的人来说,几乎不花钱一分钱就能常年安全稳定地运行一套这么牛X的系统,一样可以去游山玩水而不用担心系统的维护。


下图是一幅比特币交易流程图:


640?wx_fmt=png


区块链、比特币相关概念及工作原理解释:


640?wx_fmt=jpeg



作者Q&A时间:


Q :刺客

楼主写的很清晰,看完之后有两个问题没想明白
1、当买家用私钥签名交易后,发送到网络,网络中的计算机怎么认证该用户就是合法的?
2、某个计算机最早算出满足前几位是0的hash后,生成cionbase,确定区块,然后该计算机账户获得50比特币奖励,那么网络中其他参与计算hash值的计算机,但又没计算出满足条件的hash值,它们的计算是不是就算白费力气?是不是不需要大型的挖矿机,使用个人pc挖矿也是有可能计算出hash?


A  :华正皓 

第一个问题:在区块链上只认私钥,它只知道私钥对应的公钥,无法辨认用户是否合法。所以拿到私钥就代表一切(当然,是可以通过一些用户画像做个体认证,只是那不在区块链的范畴)


第二个问题:一个区块只能被一个“矿工”最终验证,其他没挖到的也不算白费力气,毕竟为整个网络做了贡献,只是没得到奖励而已。这也说明了个体在这个网络是比较难以生存的,所以需要矿池,大家组团干活,这样保证每个人都能得到与其努力相符的收入。
用个人电脑也是可以的,只不过就像小学生和博士,都会算数,但“引擎”不是一个级别的。个人电脑CPU,GPU的运算远远不如矿机,如果你用一般的pc机挖一年可能也没有收获……然后电费爆表……所以放弃吧


Q :大坏蛋

楼主你好,看过你的文章后有两点不是很明白
1、创世块的数量,是否存在多个创世块的可能?
2、交易信息的存储格式,就是区块内容中的格式是如何记录每笔交易的?


A :华正皓 

1,创世块就是区块序号为零的区块,所以每一条链只要一个创世块
2,一段时间内的交易信息会存在每一个区块体里面,除了区块体还有区块头,主要是区块的哈希,默克尔树的根等等用于验证和追溯的


Q :胡萝卜须

疑问1:如果比特币合法流通了,全世界的人都开着电脑挖矿赚钱,最后大家都有钱了,但是没有人生产食物,衣服等实际的物质,那么全世界的人吃啥喝啥? 挖矿挖来挖去都是一些数字而已,有什么用? 能吃能喝还是能穿? 不是纯属浪费计算机资源吗?


疑问2:如果比特币合法流通了,全世界的人都开着电脑挖矿赚钱,最后大家都有钱了,但是没有人生产食物,衣服等实际的物质,那么全世界的人吃啥喝啥? 挖矿挖来挖去都是一些数字而已,有什么用? 能吃能喝还是能穿? 不是纯属浪费计算机资源吗?


A :华正皓 

你的想法是不可能发生的。蛋糕只有一块,即使全世界的人来抢,最后获得的只是少数人而已。并且比特币的挖矿成本是很高的,打个比方:你买了某某矿机挖比特币,如果你只是一个人挖,可能1年颗粒无收,因为你的矿机可能为1,别人的是1亿。如果是加入矿池和别人合伙挖,每天得到的可能连电费都交不起(比特币挖矿是非常耗电的),最后说一下,比特币是有上限的,不能无限挖下去。


Q :风中追风

请问:
1、一个交易是否是要发到全网中的所有电脑上,也就是所有矿机上。
2、如果是发到所有矿机上,那全世界每时每刻都会产生很多交易,问题是每个矿机是要获取某个时间段内所有的交易还是部分交易


A :华正皓 

1.所有电脑都同步
2.同步所有交易
当然这是在POW的共识协议下,就是比特币和以太坊的模式。这也是比较经典的分布式系统的特点。


作者简介:华正皓([email protected]

乐视金融区块链研究开发者

渡鸦区块链专栏作者


研究并实践多个国内国际的区块链项目,参与多个区块链开源项目。

参与编写工信部中国区块链应用参考架构及应用等白皮书,致力于区块链应用项目的落地。


640?wx_fmt=png


加入渡鸦

(全职记者∕实习生):[email protected]


转载/投稿/进群 请扫描以下二维码联系

640?wx_fmt=png

阅读更多

更多精彩内容