区快链是通过密码技术保护的分布式数据库这是比特币背后的技术。
本文将逐步带您了解区块链。
1 区块链BLOCKCHAIN的类的定义
区块链有一个区块列表。
它从一个单独的块开始,称为 genesis block【创世区块】
2 区块链BLOCK的类的定义
第一个区块叫做 Genesis[创世] block,每个块存储以下信息:
- Index
- Timestamp
- Hash
- Previous Hash
- Data
- Nonce(挖矿原理,比特币难度举例)
3 区块链中创世区块
创世区块(genesis block)是区块链中的第一个区块,其区块序号是0。它是区块链中唯一一个不指向前一个区块的区块,因为没有前一个区块。它也不包含交易,因为还没产生任何以太币。
只有网络中的两个节点有相同的创世区块,它们才会彼此配对,也就是说,如果两个对等节点有相同的创世区块才会进行同步 区块,否则它们将彼此拒绝。不同的创世区块有较高难度值也不能替代难度值较低的。每一个节点生成自己的创世区块。对于不同的网络,创世区块被硬编码到客户端里。
4 区块Block6个属性的说明
(1)Index
该索引是链中的块的位置。
【创世区块】的索引是0。下一个区块的索引是1。
(2)Timestamp
创建块的时间记录。
时间戳有助于保持区块链的顺序。
(3)HASH
哈希看起来像一堆随机数。它是唯一标识数据的数值,或数据的"数字指纹"。
Hash属性:
-
哈希具有固定的长度
-
相同的数据结果相同的hash值。
-
器实际上不同的数据会导致不同的hash值。
-
图 Hash值很容易计算。
-
不可能将Hash值转换为数据。[不可逆]
-
个数据的小改变会导致Hash值的巨大变化。
-
VALID HASH(有效散列)
有效的Hash是满足特定要求的Hash。对于这种区块链,哈希前面的三个前导零是对有效散列的要求。
注意:所需的前导零的个数是困难或难度系数,个数越多,难度系数越大。
- BLOCK HASH CALCULATION(块散列计算 )
Hash函数将数据作为输入,并返回一个唯一的Hasn值。
f(data) = hash
由于哈希是整个块的"数字指纹",因此数据是索引,时间截,以前的哈希,块数据和随机数的组合
f(index+previous hash+timestamp+data+nonce)= hash
替换我们的起源块的值,我们得到
f(o+"o"+1508270000000+"Welcome to Blockchain Demo 2.!"+604) =ooodc75a315ca1f9c9816247do3ddieid219939d3810hd98ed2
(4)Previous Hash
Previous Hash是前一个Hash,为前一个块的Hash。 由于没有以前的块,因此[创世区块]的前一个散列值为"0"。
(5)Data
Data为存储在块上的数据。在诸如比特币这样的加密货币中,数据将包括货币交易。如果数据发生更改,由于数据是输入变量的Hash,因此更改数据将更改Hash值。新的散列将失去三个前导零,并且变得无效。需重新挖矿生成有效的Hash值。
数据更改后,后续的区块也将无效。Hash更改将导致后续块的前一个Hash值发生变化。由于之前的Hash值用于计算Hash值,因此后面的Hash值会改变。这将导致区块的级联失效。
所以说,挖矿是查找有效Hash值的过程。
(6)Nonce(重点说明:挖矿原理,比特币难度举例)
nonce是用于查找有效散列的数字。nonce从0开始迭代,直到找到有效的散列。这用到了处理能力【工作量证明】!
随着难度的增加,可能的有效散列数量会减少。,使用较少可能的有效哈希值,需要更多的处理能力才能找到有效的哈希。