区块链学习

区块链学习

比特币:记账由所有运行系统的人(即节点,可以简单理解为一台电脑)共同参与记录,每个节点都保存(同步)一份完整的账本。同时使用简单多数原则,来保证账本的一致性

区块链1.0

  • 记账

区块链在记账是会把账页信息(包含序号、记账时间、交易记录)作为原始信息进行Hash, 得到一个Hash值

在记第2个账页的时候,会把上一个块的Hash值和当前的账页信息一起作为原始信息进行Hash

所有这些区块组合起来就形成了区块链,这样的区块链就构成了一个便于验证(只要验证最后一个区块的Hash值就相当于验证了整个账本),不可更改(任何一个交易信息的更改,会让所有之后的区块的Hash值发生变化,这样在验证时就无法通过)的总账本。

  • 工作量证明

完成记账的节点可以获得系统给与的一定数量的比特币奖励,这个奖励的过程也就是比特币的发行过程——挖矿

为了保证10分钟左右只有一个人可以记账,就必须要提高记账的难度,使得Hash的结果必须以若干个0开头。同是为了满足这个条件,在进行Hash时引入一个随机数变量

Hash(上一个Hash值,交易记录集,随机数) = 0000xxxxxx

在运算Hash时,不断的改变随机数的值,总可以找的一个随机数使的Hash的结果以若干个0开头(下文把这个过程称为猜谜),率先找到随机数的节点就获得此次记账的唯一记账权。(对该值的验证即将矿工找到的随机数和上一个哈希值进行哈希后比对即可)(通过工作量证明就增加了发送信息的成本,降低节点发送消息速率,这样就以保证在一个时间只有一个节点(或是很少)在进行广播,同时在广播时会附上自己的签名。解决拜占庭将军问题,就像一位将军A在向其他的将军(B、C、D…)发起一个进攻提议一样,将军B、C、D…看到将军A签过名的进攻提议书,如果是诚实的将军就会立刻同意进攻提议,而不会发起自己新的进攻提议。)——提高了做叛徒的成本,因为大家都在算,你至少要比一般人算力强才能作假

在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。

如果验证通过,则表明已经有节点成功解迷,自己就不再竞争当前区块打包,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。

  • 交易记录验证

以BT下载为例,在下载真正的数据之前,我们会先下载一个哈希列表的(每个下小块计算出一个哈希),如果有一个小块数据在传输过程中损坏了,那我只要重新下载这一个数据块就行了,这时有一个问题就出现了,那么多的哈希,怎么保证它们本身(哈希列表中的哈希值)都是正确地呢?

答案是把每个小块数据的哈希值拼到一起,然后对这个长字符串在作一次哈希运算,得到哈希列表的根哈希。只要根哈希校对比一样就说明验哈希列表是正确的,再通过哈希列表校验小数据块,如果所有的小数据块验证通过则说明大文件没有被损坏

比特币使用Merkle树的方式进行验证,相对于哈希列表,Merkle树是一种哈希二叉树,每个叶子节点是每个交易信息的哈希,往上对相邻的两个哈希合并成字符串再哈希,继续类似的操作直到只剩下顶部的一个节点,即Merkle根,存入区块头。

  • 如何达成共识——选择最长链

共识最终目的是保证比特币不停的在工作量最大的区块链上运转,工作量最大的区块链就是权威的公共总帐本。

两个块都收到的节点,会把其中有更多工作量的一条会继续作为主链,另一条作为备用链保存(保存是因为备用链将来可能会超过主链难度称为新主链)。

比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易确认更快地完成,也会导致更加频繁地区块链分叉。与之相对地,长的间隔会减少分叉数量,却会导致更长的确认时间。(传播更广的链为主链)

区块链2.0-智能合约

原文地址:https://www.cnblogs.com/yueshangzuo/p/8759676.html