区块链是由一个个的区块按照一定的顺序组成的链。
每个区块都包含以下信息:
时间戳 :当前区块记账的时间戳
交易记录:一系列的转账记录
上一个区块的HASH:每个区块都包含了上一个区块的HASH值(创世区块没有上一个区块的HASH值)
随机数:基于POW工作量证明的随机数(挖矿就是要找到这个随机数)
当前区块HASH:根据当前区块的数据算出的HASH
这里还有一个概念就是创世区块,就是区块链上的第一个区块,所以创世区块没有上一个区块的HASH,或者可以认为创世区块的上一个HASH都是0。
或许大家会问 随机数是什么鬼?是不是随便一个数字都可以?比特币的挖矿和随机数有什么关系?
来,干货哥要开始表演了,请自备板凳了!
说随机数前必须要了解另一个概念,hash算法。
所谓hash算法,简单来讲就是不同内容得到的hash值都是不一样的,而且hash值一般都是定长的,根据hash值也不能反推出原文,当原文中哪怕是只有一个字母的变化,hash值也是发生翻天覆地的变化。但是同样的内容多次计算出来的hash都是相同的。
根据以上hash算法的特点,在一个区块中,时间戳是确定的,交易记录也是确定的,上一个区块的hash值也是确定的,现在就是需要找到这么一个随机数,使得当前区块的hash满足一定的条件,比如 目前比特币的hash需要前面是18个0,所以就需要不停的穷举这个随机数,计算这个随机数的过程就是挖矿。第一个找到这个随机数的就可以得到相应的奖励(俗称挖矿成功)。
根据以上的特点,当有人篡改前面的区块记录时,当前区块的hash就发生了变化,它的下一个区块的hash也得跟着发生变化,同时也得重新计算随机数,而且就算你很幸运的改了下一个区块的随机数和hash(实际上这种情况应该不会发现,无效旷工除了没得到奖励外还要受到处罚),根据共识算法可以确定少数人服从多数人的原则,全网只有你一个人的数据是这样,别人的都不是这样,对不起,你的记录别人不认可。
有同学又开始问了,如果同一时间有2个人同时算出这个随机数怎么办?
那就要看谁的链更长了,以长的链为准。如果很不幸,此时大家的链都一样长,那就都记吧,等到下一次的时候看谁先算出随机数,哪个先算出根据最长链原则,另一个就要被淘汰了。其它旷工也会自觉的只记录最长的链,因为记录短的链是没有任何意义的,除了浪费磁盘网络和内存外没有任何用处。
所以比特币转完账一般需要6次确认(即在后面有6个区块),以太币转完币一般需要12次确认(即在后面有12个区块)。
这里还有个小细节,不管是比特币还是以太币,每个区块的大小都有限制,出块时间也有一定的要求,所以如果你转账给的手续费很低,恰巧此时主网上又要很多帐需要处理时,你的交易记录有可能就要被推迟到下次甚至永远排不上队,就是说转账有可能会失败。
好了,干货哥今天就先讲到这里啦。想及时了解更多干货可以关注干货哥的公众账号:开发者那些事
领取专属 10元无门槛券
私享最新 技术干货