区块链认识笔记

本文尚未完成

  • 区块链是啥?区块链它是一种无中心、分布式记录数据的技术。
  • 顾名思义,区块链由一个个区块组成链,在每个区块(除初始区块)中有自身的数据和上一个区块(父区块)的hash(和链表有相似之处)。因为父区块的hash是写在子区块中的,所以一旦子区块确定下来,父区块将不能被伪造或修改(目前sha1已经有办法碰撞了,不过sha256还是极难被碰撞到)。以比特币为例,一个区块包含区块头和区块体,区块头中有上个节点的hash、时间戳、Nonce、Merkle根等信息。
  • 由于区块链技术是无中心的,也不保证每个节点都是无恶意的,也就是说每个节点都需要达成一定的共识,通过这个共识来实现数据的记录。以比特币为例,每个节点都有全部的历史区块。假设大多数节点都是“理性”的,节点可以投入算力来新增区块来获得奖励,当一个新区块被发现并广播出去后,其余每个节点都会在新增的区块校验合法后加入到自己历史区块尾部并继续广播,如果有分叉,短的(算力弱的)分叉会被淘汰掉(6个节点之后),即恶意节点将无利可图。这样就有了能实现数据记录的共识,在无人掌控全网一半以上算力的情况下数据记录是可靠的。
    • “维护区块链的方式”(换言之就是写入区块链的资格)有POW(Proof of Work)、POS(Proof of Stake)等方式。比特币就是POW方式,谁的算大谁说了算,算力小的分支会被抛弃掉,它通过消耗算力获得话语权。PPCoin是POS方式,谁手里的币多,持有的时间长,谁就说了算。“币龄(coin days)”就多,它通过消耗币龄获得话语权(不用浪费电了:D)。
    • POW方式如何新增区块?以比特币为例,新增区块需要新区块头的hash符合条件即可。这个条件是hash值小于目标值,目标值由最大目标值(常量)除以难度系数得到的。通过改变区块头部的Nonce值(Nonce只有4字节,如果穷举Nonce后发现没有合适的值可以改变Merkle根的值,还不行就改变时间戳的值)来改变hash值,首先得到目标hash值的节点将得到一定数量(每4年减半,初始50个,现在是12.5个)的比特币(即节点自己写在Merkle树里的交易信息)。还有因为比特币设定每10分钟出现一个区块,所以难度系数会随着全网算力(即上个区块出现所花费的时间)调节。

参考资料

https://zh.wikipedia.org/wiki/%E5%8C%BA%E5%9D%97%E9%93%BE
http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html
http://zhibimo.com/read/wang-miao/mastering-bitcoin/index.html
http://www.8btc.com/what-is-blockchain