之前文章说过区块链就是通过密码学的方式形成的一个由集体维护的分布式数据库。
首先,区块链,字面上理解就是由多个“区块”连接成为的一种“链式”的数据结构。
就像这样:
对于初步了解区块链的人来说,可以简单的把区块链理解为分布式数据库(实际上是不同的),一种点对点的网络。它的网络结构是分布式的:
下面来详细说一下具体一个区块是什么样的数据结构:
区块高度:可以理解为每个区块的唯一ID,从零开始的“创世块”(即块高度为0),一段时间生成一个块,块高度加1。
头哈希:每一个区块都有一个唯一哈希值,依据上一个区块的头哈希+数据块哈希+随机数生成
父哈希:上一个高度区块的哈希值
merkle根:区块中每一笔交易对应一个哈希,呈树状结构,生成的最终值(根),代表了该区块中的交易。
难度:难度不是固定不变的,会随着网络现有算力的变化而自动调节
Nonce:挖矿所要达到的目标值
区块体:一定时间内所生成的交易信息,即账本。
说到这里,一定还有头脑中没有形成区块链的概念,所以我下面描述一个比特币中交易的“全流程”:
小明和小红每人有一个比特币的地址(公钥:相当于是我们银行卡的卡号 )和一个私钥(相当于银行卡密码或者说你的签名),像这个样子:
1JQMpgRThCJjKbs7P8Ht6x142zjPJFmZVY
我们需要填写转账的金额和对方的比特币地址,就像我们平时用银行卡转账一样的操作,一段时间后,对方即可收到你的转账金额。
这是作为用户能感知到的,看上去和我们平时的转账交易没什么不同,只是“卡号”看起来奇怪了一点,交易时间变长了一点。
那么当你按下“转账”按钮时,背后的区块链系统到底发生了什么?
使用私钥对这笔即将发生的交易进行签名
从你的客户端把你的这笔交易提交到区块链网络
由已经开启“挖矿”程序的计算机(称为矿机)把10分钟内的交易打包成一个数据块(相当于一个账本,其中就包含了小明的这笔交易)
这个数据块就是上图中的“区块主体”,而此时,这些区块主体中的交易并未生效。
那么如何使这些交易生效呢?每个区块中都有一个哈希值,通过不断哈希运算,不断哈希运算(可能是几亿次)最终找到一个比当前哈希小的值,就认为这个区块被确认。即为交易生效,这个过程就称为“挖矿”。
那谁来做这个哈希呢?全球那么多交易,如果只是一家公司的几台计算机是远远不够的。所以,比特币有“激励机制”,当一台计算机确认了一个区块,就可以奖励12.5个比特币。为了得到Money,越来越多矿工就有动力造更大更多算力的矿机来“挖矿 ”。越多的人参与挖矿的竞争,算力就越分散,比特币系统就越不可能被某一个人控制。这就形成了“双赢”的局面,对于矿工来说,想想你每天游山玩水,有一台机器每天帮你赚钱,源源不断地打到你的账户#滑稽脸。对于创造比特币的人来说,几乎不花钱一分钱就能常年安全稳定地运行一套这么牛X的系统,一样可以去游山玩水而不用担心系统的维护。
下图是一幅比特币交易流程图:
区块链、比特币相关概念及工作原理解释: