Blockchain technology itself is also developing continuously.For example,a later technical improvement is called smart contract.
Smart contracts are simple programs stored on blockchains.It can execute automatically based on the conditions recorded in the contract.As long as the conditions are established,the transaction will be completed automatically according to the contract
Blockchain also has a mechanism to protect its own security,which is distributed.
Compared with using a centralized entity to manage the blockchain network,blockchain adopts a peer-to-peer network,and everyone can join.When someone joins this network,he will get a copy of the whole blockchain.
This person can use this to verify whether all blocks are legal and not tampered with,that is,different nodes can also use this to verify each other.
区块中包含的第三个元素是前一个区块的哈希值,这个元素使得区块之间可以形成链接,并且能够使得区块链十分的安全。
假设我们有一条区块链包含3个区块:
每个区块包含了一个自己的哈希值以及前一个区块的哈希值;
3号区块指向2号区块,2号区块又指向1号区块;
1号区块有点特殊,它不能指向前一个区块,因为它是第一个;
我们把1号区块叫做创世区块。
现在假设我们篡改了第二个区块,这将导致第二个区块的哈希值改变,接下来这就会导致3号区块以及3号区块连接的所有的后续区块变得非法。因为现在它们存储的前一个区块号的都变得非法,所以单独改变一个块,将连带性地致使后面的所有内容都变成无效。
什么是哈希值?
哈希值是使用数学函数创建一个字符序列。V+MrsHu288这个序列的特点是具有高度的安全性,允许您安全地发送消息。最重要的是,它是目前市场上每一种加密货B的一部分,但可以说,它们都有不同的价值和质量。我们可以肯定的一点是,适当的哈希值是每个加密货B成功率的一部分。再简单的说哈希就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数,有了哈希函数,就可以将互联网上的数据以固定长度字符串的形式来保存。
区块包含的内容及验证
节点需要不断调整区块的内容,以尝试让其计算出的哈希值小于系统给定的目标哈希值。那么区块内包含了什么内容呢?
最重要的内容有两部分:一部分是区块包含的所有交易的明细信息,另一部分叫做区块头,区块头内又包含了4部分主要内容,分别是:
A.前一个区块的哈希值,用来定位其在区块链中的位置。
B.时间戳,用来定位创建该区块的时间。
C.MerkleRoot哈希值,V+MrsHu288即通过默克尔树算法得到的一个代表所有交易信息的唯一哈希值,用于防止对区块内记录的交易信息进行篡改。
D.一个名为nounce的随机数,由于其他内容都是固定的,所以主要靠调整这个随机数来调整该区块的哈希值。
在其他节点收到区块后,区块需要被验证通过才能被节点加到本地的区块链上。验证的主要内容有两个,一是重新计算区块头的哈希值,确认其确实比系统给出的目标哈希值小;二是利用默克尔树算法重新计算所有交易内容的哈希值,确认其与区块头中记录的默克尔根哈希值一致,即可说明区块中的交易信息没有被篡改过。
新区块通过广播传递的方式
由于并不是所有的节点随时都在线,在广播新区块时就必然有离线节点收不到消息,最终会导致每个节点上的区块链参差不齐,也就失去了分布式账本的意义。因此,必须要有一种规则将所有节点的数据同步。
因此,当离线节点再次上线时,首先要向其他节点同步数据以获得自离线至上线这段时间内错过的区块。离线节点会与其他节点发送并交换version消息及getblocks消息,其中version消息记载了本地区块链高度,getblocks消息记载了本地区块链顶端区块的哈希值。通过这两条信息,相关节点可以判断本地区块链是长链还是短链(理论上离线节点的区块链都是短链,因为区块链同步流程是自离线节点上线时自动启动的)。此时,长链会继续通过inv(inventory)消息将本地区块链中比短链多出的区块的哈希值传播出去,缺少这些区块的节点便可以通过各自发送getdata消息来得到缺失区块的全部信息。之后,通过验证收到的区块,判断是否将区块添加到本地的区块链上。
以上流程也是新区块的广播流程。当正在挖矿的节点收到新区块后,会发现新区块记录的父区块(即前一个区块)哈希值与自己现在正在挖的区块基于的父区块哈希值一致,从而确认新区块已经被挖出。然后正在挖矿的节点会放弃目前的工作,重新开始基于新区块的哈希值进行新一轮的挖矿。
让我们设想以下情景:
节点A和节点B几乎同时分别挖出新区块a、b,这时由于广播传播需要时间,靠近节点A的节点就会先收到区块a,靠近节点B的节点会先收到区块b,导致原来的区块链在这时会出现分叉,记录区块a的链L+a,和记录区块b的链L+b。
那这两条链会一直存在下去吗?后续会分裂成无数条不同的链吗?
答案是否定的,因为区块链世界还有一条重要原则:“最长链原则”,即节点永远认为最长链才是有效的区块链。因为最长的链条包含了最大的工作量证明,而最大的工作量证明意味着其价值越大,也越难更改(后面会提到51%攻击)。
所以,在出现等长的链L+a和链L+b后,就看下一个区块是基于哪条链被挖出的了。如果下一区块c是基于链L+a挖出的,那么两条链就变成了链L+a+c和链L+b,那些正在基于链L+b挖矿的矿工收到了最新的c区块后,发现链L+a+c已经比L+b链长了,他们就会放弃L+b链,重新基于L+a+c链开始下一轮的挖矿。之后,L+b链就作为分链被废弃,挖出b区块的节点的挖矿及手续费奖励也会被撤销(比特币挖矿奖励在区块上链以后就计入账户,但状态为不可用。在该区块后又新增5个区块,即有6个确认后,才会变更为可用转态,视为已到账)。
但要防止篡改,只有哈希是不够的,因为现在的计算机运算速度已经足够强大,并且能够每秒计算成千上万的哈希值。这样你完全可以篡改一个区块并且重新计算其他的区块的哈希值,使得你的区块再次变得合法。
所以为了减少这种风险,区块链还采用了一种技术,叫做工作证明。这是一种减缓新区块创建过程的机制。在比特币区块链中,大概需要花费10分钟来完成所要求的工作证明,并且添加一个新的区块到区块链中,这个机制使得区块链的篡改更加困难,因为一旦篡改了一个区块,就需要重新计算所有后续的区块的工作量证明。
所以区块链技术的安全性主要来自于哈希值以及工作量明机制。
It refers to the operation from input to output using hash function(also known as hash function).The input can be various,such as text,picture,video,audio,etc.,but the output is a string of fixed length string,that is,hash value.There are several very important characteristics of hash operation,which makes it the most basic algorithm in blockchain:first,certainty,that is,no matter how many hash operations are performed on the same input,the only hash value is obtained;The second is sensitivity,that is,the hash value of input with small difference will also be very different after hash operation;The third is irreversibility,that is,the input cannot be deduced from the output after hash operation.