区块链

简介:


 结构

区块链是一个公共账本、公开的数据库,同时也是一个点对点的协作网络。协作方(节点)共同维护数据,每个节点都有一份完整的数据备份,所有节点的数据内容必须完全一致,每个节点都可以在本地查找交易记录,每个节点也可以在本地添加交易。

这里简单介绍一下区块链以及区块的结构,更多信息,见《区块链-区块结构》。

1  区块链结构

区块链是由一个个的区块连接起来组成的;每一个区块包括区块大小、区块头、交易列表、交易计数器组成;每一个区块头包括版本、前一个块的hash、merkle root、时间戳、难度系数、随机数组成;事务列表包括CoinBase交易和普通交易。如下所示:

e55dc11c8ec22ed315e62a8aaa86c6e6565cefa3

 

2  区块示例

从公共账本中我们可以看到整个区块链的所有信息,地址:https://www.blockchain.com/zh-cn/explorer

1)   摘要

95d3bd64751067505ad71c59569d3e6424f12a2a

 

Height是用来标示区块在区块链中的位置。区块链中每加一个区块,高度+1。注意Height并不是唯一标识符,当区块链出现临时分叉时,会有两个区块的高度值相同的情况。

 

2)   交易信息

ff849f02ae25ec222ea61561e9de9962ccf7d27b

 

 

 区块链生成

区块的生成过程就是矿工挖矿的过程。简单而言就是:有权打包交易的节点,将打包的交易(区块)放在既有的数据库(区块链)上,并向全网广播,其他节点收到信息,验证区块无误,就会同步这个新打包的交易。每个打包的交易叫作一个区块,区块不断叠加,形成区块链。其流程如下:

c250d64abcd59ed3dab60bc9813cbd1ad053eee6

1  监听交易广播

矿工接入区块链网络以后,第一件事是从其他节点将区块链的历史记录同步下来,完成这个操作以后,就可以监听网络中的交易信息了。

从区块的数据结构中我们可以看到,每一个区块都存储了大量的交易信息,这些信息就是矿工在此环节监听到的有效交易数据。

2  验证交易信息

当节点收到一个交易消息,如果验证通过,会将交易放入一个交易池,并将这个交易信息广播给其他节点。如果节点接收到的交易消息已经存在于交易池中,就不会再把它传播出去,这样就确保一个交易消息不会一直在网络中传播下去。

此过程主要验证一下内容:

  -  验证交易在当前区块链中是有效的,节点会针对每个前序交易的输出运行核验脚本,确保脚本的返回值为真。这一阶段最重要的目的是确保交易的输入是UTXO。

  -  检查是否有双重支付。

  -  校验此交易是否已经被本节点接收了。用于防止交易消息在网络中一直传播。

  -  节点只会接收和传播在白名单上的标注脚本。

说明:自动2013年起,矿工的省却行为变成了:费用替代策略,即节点在遇到有冲突的交易时,会将交易手续费更高的交易放进自己的交易池,把交易手续费低的踢出去,不过这种策略是可以更换的。不过现实中的策略会更加复杂一些,不是所有的交易都需要支付服务费,而且也会考虑到账龄信息,有兴趣可以看看相关内容,这里暂不讨论。

 

3  组装备选区块

将交易池中的交易进行组合并放进一个新的区块,确保其中的所有交易都是有效的。

比特币网络中,每10分钟左右产生一个区块,一个区块大小为1MB,每个交易最小250字节,所以一个区块最多不超过4000条交易记录(一般来说一个区块大概保存2000左右条交易记录),那么如果网络在10分钟内网络中的交易数据超过4000条时,矿工如何组装交易生成备选区块呢?矿工组装备选区块的原则是:优先将服务费高的交易打包为备选区块。这么做的原因是鼓励矿工挖矿,即:谁出的钱多,矿工就优先为他们服务,这是一个非常符合经济利益的举措。

4  生成有效区块

生成备选区块后,需要进行hash运算,找出一个合适的随机数,让这个备选区块成为一个有效的区块,这就是我们经常听说的工作量证明,原理如下:

矿机系统中有一个固定的常数;每个区块中都有一个难度系数difficulty,通过他们可以算出一个目标值target(target=固定的常量值/difficulty)。区块的头部中有一个随机字符串Nonce,矿机每次对头部信息进行hash计算,如果hash结果小于target,那么认为是有效区块,可以进行后续添加区块的操作;如果hash结果不小于target,那么认为是无效区块,修改nonce后重新计算hash。

Nonce是一个32位的二进制数字,因此它的取值范围就是0到21.47亿。那么命中target其实就是一个穷举的数学过程了,一个矿机可能幸运很快算出来,也有可能算满了21.47亿次都不能命中,这时候框架就得重新同步区块链数据,重新计算。

如果计算到一个有效区块,对于当前节点而言,会将当前区块挂在当前节点的区块链的后面。

5  广播区块

当矿工生成一个有效区块后,就可以将这个区块广播出去了,目前矿工的工作动力主要来自两个方面:挖矿奖励、交易服务费。越早算出一个有效区块,越早公布出去,就越有可能被其他节点接受并认可,这样就越有可能获取当奖励和服务费。

不过这也不是必定的事情,如果有兴趣可以翻阅一下:临时保留区块攻击。

6  验证区块

校验一个区块要比校验一笔交易复杂很多,除了检查区块头部,确认hash值在一个可接受的范围(即校验随机数满足生成备选区块的条件),还必须确认区块里的每一笔交易的合理性,最后确保此区块必须是最长链上新加入的区块。

最后一步是为了防止区块链分叉,关于分叉是一个比较复杂的内容,后面找时间详细讲述。

 

7  加入区块链

对于非生成此区块的节点,在通过“验证区块”这一步骤以后,就可以将这个区块挂到区块链的尾部了。

在去中心化的点对点网络中存在很多异常和不可靠的场景,例如:网络延迟、重复支付等,所以一个区块加入链尾后,并不代表着高枕无忧了,还要等待一段时间,方可在全网中达成共识。

举一个异常的场景:当矿工A计算出一个有效的区块(Block A)时,矿工B也生成了一个有效的区块(Block B),如果A所在的网络延迟比较大,即便是周围有一些节点认可了A节点生成的区块Block A,但是全网中绝大多数节点认可了Block B,并在Block B的基础上继续挖矿,产生更长的链,那么Block A对应的区块将会被舍弃。

 

三  共识机制

区块链是一个去中心化的点对点网络,在这种网络中必须解决各个节点间的共识问题。在区块链的网络中的共识机制的核心是:按照既定规则参与协作,代码代替权威,奖励协作者,博弈驱逐破坏者。

1  谁有权向区块链中添加新区块?

目前有多种机制,不过最常见的是:POW, POS和 DPOS。

1)   POW (Proof of Work) 工作量证明

在上面讲述生成有效区块的过程,其实就是工作量证明的过程。每个节点都去计算一个随机数,让他满足hash值小于target(target=固定的常量值/difficulty),这个过程其实是一个枚举Nonce的过程,需要大量的工作量计算。最先得到这个随机数的节点,将打包的交易区块添加到既有的区块链上,并向全网广播,其他节点验证、同步。

 

2)   POS (Proof of Stake) 权益证明

POS是系统根据节点持有的Token(代币)的数量及时间的乘积(币天数)分配相应的记账权,拥有的越多,获得记账权的概率越大。Token就相当于区块链系统的权益(Stake),因此被称为基于权益的证明。

3)   DPOS (Delegated Proof of Stake) 权益授权证明

POS是拥有Token就拥有获得记账的权利,而DPOS是指拥有Token的人投票给固定的节点,这些节点作为权益人的代理去行使记账的权利。这些获得投票认可的代表根据一定的算法依次获得记账权。不同于POW和POS理论上全网都可以的参与记账竞争,DPOS的记账节点在一定时间段内是确定的。

 

2  如何确保每个节点上的区块链都是一致的?

由于各个节点都在自发地记账或者同步,在点对点相互通信下的情况下存在较高的网络延迟,因此各个节点收到数据的先后顺序是不一致的,那么如何保证每个节点副本数据的一致性?

区块链的共识是:以最长链作为主链,每个节点总是选择并尝试延长主链,也就是各节点都以区块最多的那条链上添加区块,即大家都在主链上继续挖矿。

当多个矿工同时算出一个有效区块,谁能成为最终的共识区块,基于最长链原则这取决于新区块后面能否尽快产生新的有效区块,新的有效区块后越快产生新的区块,那么对应的链就越长,这个有效区块就越可能成为最终的共识区块,这条链也就越可能成为主链。最终其他的链上的那些区块会被废弃,同步主链数据,保持和主链一致。

 

3  如何让矿工有动力持续挖矿?

比特币奖励和服务费奖励。

 

4  如何防止他人恶意破坏?

去中心化最根本的特征在于,消除了信息的不对称!而犯罪的根源则在于,利用信息的不对称进行作恶。如果大家掌握的信息相同,我便不会铤而走险去做损你利我的事情,因为这在比特币网络中将带来最差的结果,即损人不利己!

比特币并不是一个零和的游戏,比特币的技术原理以及激励机制引导了参与者的博弈偏向,它激励人们为了利益去做诚实的事情,去维护并促进整个比特币网络的健康发展。在比特币网络中,做诚实的事情相比作恶更简单(技术因素),做诚实的事情更可能会得到奖励(非技术因素)。

如果想攻击比特币,那么主要有两个方式:操纵比特币生成,双花问题(一笔钱花多次)。

如果想操作比特币生成,那么需要掌握比特币网络中51%的算力,虽然理论上可行,但实际上成本非常之高,从目前看来基本上不太现实。

对于双花问题,各个矿工收到交易信息以后会检查交易的合法性,确保每个交易只会使用一次,即所有交易的输入必须是UTXO的。如果要操作区块链中交易,破坏原有的规则,必须掌握51%的算力,而且这种破坏的收益很低,绝大多数情况下收益远不够补偿这些矿机消耗的电力成本。

最差情况,如果真的有人或机构能够操纵比特币了,那么大家必然对比特币失去信任和信心(如果你账户的钱能够被人随意修改,你还能相信这些钱具有价值么?),比特币的价值也就不存在了。

 

 

 

相关文章
|
存储 监控 供应链
表妹问:区块链是啥?
表妹问:区块链是啥?
|
安全 区块链 数据库
想更了解自己吗?区块链可以帮助
想更了解自己吗?区块链可以帮助
|
传感器 供应链 安全
区块链的4个实际应用
区块链的4个实际应用
|
区块链
什么是区块链
深挖区块链背后的本质
480 0
什么是区块链
|
存储 编解码 算法
区块链做机了解一下?
关注互联网的人应该都知道,区块链技术是今年的关键词之一,虽然看得懂的人没多少,但只要任何产品套上这个东西,好像就代表着未来。
114 0
区块链做机了解一下?
|
安全 区块链 数据库
安全才是区块链的未来
安全才是区块链的未来 在区块链野蛮生长的此时此刻,人们虽期待著去中间机构的新模式,但是在那个未来到达以前,我们回头来看区块链技术里,那一行行的代码,是不是能够担任如此重要的角色,是不是这些代码跟架构,能够保护人类社会已经非常岌岌可危的信任? 而今天,我们将与链安这家专门做区块链安全的公司对谈,让大家对于安全有更深一层的认识,对于想要找区块链安全公司合作的机构,也可以从这边多了解一些,帮助大家做些判断。
1301 0
|
算法 安全 网络协议
区块链初探
区块链[&比特币]概念 拜占庭问题:讨论如何在远程协商且有干扰信息的情况下整个系统达成正确决策的问题。 拜占庭将军问题深入探讨 。一般地,把故障(不响应)的情况称为“非拜占庭错误”,恶意响应的情况称为“拜占庭错误”,对应的节点称为拜占庭节点。
1455 0