比特币的去中心化记账法是如何实现的?

感谢邀请。

如果对分布式,去中心化有所了解的话,这个问题其实不难理解,去中心化的记账法的实现主要是通过共识算法、P2P的结构以及账本链式的结构来实现,通过共识算法让所有节点共同维护一个账本。那么共识算法有那么多,如说常见的Paxos算法,Raft算法,ZAB算法,BFT算法等等。那具体到比特币,它采用的是什么算法呢,答案是POW(proof of work)工作量证明算法。

比特币规则是这样定的,算出区块的哈希必须大于等于目标值,这个区块才能被大家认可接受,然后将这个区块加入到各自的账本中,如果有人发送了一个错误的区块,那么这个人就会被加入到黑名单,别人不再接收你信息。

你可能就要问了,那么多的节点如果每个节点能随便生成区块那么账本还会一致吗?首先生成区块是有一定的代价的,你的区块哈希值必须符合难度的要求,以第510000个区块为例,区块的哈希是 000000000000000000152678f83ec36b6951ed3f7e1cc3b04c5828cab8017329,它得 上一个区块是0000000000000000002292de0d9f03dfa15a04dbf09102d5d4552117b717fa86,而它的下一个区块是0000000000000000003afdbe40a9f5f3d92bc20e65fd41afd6e2ee47b7aa3ead。要知道哈希前面的零越多哈希越难算出;

其次,你生成区块必须依赖上一个区块,否则这这个区块就不会被大家所认可,并不能添加到账本中。区块必需组成链式的结构,一个接着一个,中间不能重复或者跳跃。生成一个区块大约是十分钟,十分钟内的全网算力来就算这个符合条件的哈希值,如果说生成区块的的速度太快则容易导致分叉,就是我们说的账本数据不一致,如果生成区块的速度太慢则交易的确认和系统处理交易的时间花费比较多。

最后每个节点生成的区块其他节点接收后会对其进行严格的验证,包括区块高度,难度,交易的签名等等,这样全网的账本才能保证一致。