知识点辨析
区块链的链和c语言中的指针的区别:c语言中指针可以指向一个空的内存,而哈希值必然是根据前一个区块的区块头生成的,如果篡改了某一个区块的数据,那么它的hash一定会发生变化,如果不同步更改后面所有区块的数据,链接关系就会断开,这也是不可篡改性的其中一个保证。
公链网络一般是部署在互联网之上的,其一致性目前只能实现最终一致性,而无法实现完全确定的一致性。
梅克尔树是通过交易事务数据的hash生成的,而不是根据区块hash生成的(即区块头hash)
比特币对时间的校验条件是:必须大于过去11个区块的平均时间戳,并且小于当前网络时间两小时以内。
区块链中的数据的不可篡改性是取决于部署节点的广泛程度,如果是私链,还是可以篡改的,或者虽然是公链,但是节点稀少,被一家控制,那也是不能保证不可篡改的。
软分叉和硬分叉:软分叉一般是通过代码编写,设定到某个条件的时候自动激活新版本的功能,通常是向前兼容的,也就是说老的没有升级的节点程序依然可以和新的节点一起工作;硬分叉是指对底层协议进行大的改动,与老的节点完全分叉,产生了两条不一样的链。
交易数据发生后,首先会广播到网络中,并暂存到节点的内存池中等待确认。
共识机制必须是设计为可独立验证的,凡是不可独立验证的共识机制都会带来验证死循环的问题。比如比特币的工作量证明机制,其他节点接受到区块后只需要验证一下是否符合难度值就可以,并不需要去找其他的节点来交互信息。
在公链中,为什么区块数据要经过多个区块的确认后才保险:因为在公链系统中,根据FLP原理,它只能拥有最终一致性,经过多个区块的确认后,才能最大限度的保证他是出于主链中的,不会被竞争区块所覆盖掉。
孤块:区块链发现一个区块无法跟现有的账本衔接起来