区块链

简单介绍区块链技术。

什么是区块链

区块链实际是一种去中心化的分布式数据库(记账系统)。

区块链的主要特点:

  • 去中心化:无中心节点,系统内节点的权利和义务是均等的
  • 集体维护:系统中数据块由整个系统中所有节点共同维护
  • 高度透明:源代码开源,保证了记账和规则的公开透明
  • 去信任:从技术上保证在没有第三方机构的情况交易的信任问题
  • 匿名:由于信任问题不需要考虑,所以交易可以在匿名下进行

中心化

区块链本质上是一个去中心化的巨大账本数据库。作为比特币的底层技术,区块链是由一串使用密码学相关联所产生的数据块组成,每一个数据块中包含了多次比特币网络有效确认(一次有效交易检验被称为一次确认)的信息。

集体维护

随着交易不断产生,矿工需要不断创造新的区块来记录最新的交易,因此会导致这个帐本会一直增长延长。

每一个节点(每台连击到区块链网络上的电脑)都有一份完整的已有区块链备份记录,而且区块链上保留有所有关于每个节点的比特币交易信息,这些信息也被记录在完整的区块链上。

区块链帐本完全对外公开,这意味着区块链的区块生成和交易都可以自行查询。

新区块的生成将奖励给首次挖取次区块的矿工,这使得矿工有利可图,从而成为了矿工挖矿的主要动机。

值得注意是:矿工挖矿会得到奖励,从而激励矿工不断挖矿,挖矿的过程中会记录交易信息从而不断重复这个过程。

去信任

首先,交易信息要写入到当前最先产生的区块中。

有了区块链之后,当一个用户想要进行历史交易的验证时,可以通过一系列基于密码学与数据结构学的运算追踪交易所属的区块,从而完成验证。

此外,对于随机数答案难度的调整可以控制新区块的生成速度;私钥的保密性可以保证和实现匿名交易;对于历史交易数据的剪枝可以实现硬盘空间的回收:经过中本聪的测算,经过完全剪枝的区块链数据一年只生成4.2MB的数据量。

区块链系统同任何一个数字系统一样,都离不开计算机硬件的支持。区块链集体记账的特点要求每个支持交易的节点都能够为系统提供计算能力,由此提出了一种鼓励节点竞相提供计算能力的机制挖矿

每个节点接收到交易信息以后,生成新的区块并计算该区块的随机数答案,最快得到答案的节点将促成这笔交易的实现,完成交易的区块记录,并将该区块广播至所有节点。同时该节点将有可能获得一枚新的电子货币作为奖励。由于其过程很像矿工挖矿,因此节点提供算力的过程也叫作挖矿。通过挖矿,可以强制性保证块链中的数据按时间顺序存储,保持比特币网络的中立性,且允许比特币网络上不同的计算机对系统状态达成一致。

区块链原理

区块链是由多个区块构成的一个链式结构。

区块计算方式

哈希值是固定长度的数值,用来标识唯一数据。

哈希通过将索引、前个哈希、时间戳、数据、随机数作为输入后计算得出。

1
CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)

哈希值类似于:0000018035a828da0…

开头的四个 0 是有效哈希的基本要求,开头 0 的个数被称为难度值(difficulty),这就是众所周知的工作量证明系统(Proof-of-Work)。

如何避免区块修改

由于每一个块的哈希值都是根据前一个块来计算的,而且

如果我们有一个这样的区块链 A → B → C,有人想修改区块 A 上的数据。会发生下面情况:

修改区块 A 上的数据。
区块 A 的哈希变动,因为计算哈希所用的数据变化了。
区块 A 无效,因为它的哈希不是四个 0 开头。
区块 B 的哈希变动,因为计算区块 B 的哈希所用到的区块 A 的哈希值变化了。
区块 B 无效,因为它的哈希不是四个 0 开头。
区块 C 的哈希变动,因为计算区块 C 的哈希所用到的区块 B 的哈希值变化了。
区块 C 无效,因为它的哈希不是四个 0 开头。
修改一个区块的唯一方式就是重新开采这个区块以及它之后的所有区块。因为新的区块不断增加,基本不可能修改区块链。

思考

比特币是有限的?

由于比特币总值是有限的,所以不能允许无穷无尽的通过挖矿来新增比特币,所以协议设定的挖矿所得新币数目会逐渐减少,而且该设计也使得新币是按照约定速率而产生的。

那么问题来了,如果当所有块都被挖出后,比特币将无法进行交易,那剩下的比特币改怎样?

怎么确保一份交易账单真实有效?

如何在一个没有信任中心的系统中认证一个事情的真假?这里有个假定,就是好人比坏人多,即整个系统内百分之五十以上的人会严格遵守比特币协议的规则。比特币对交易是由矿工来确认的,也就是说我们认为好矿工比坏矿工多,对于错误的账单,好矿工都是会拒绝的。那么坏人就无法进行伪造、篡改。

比特币的交易认证包含两个事情:一是各路矿工对新区块数学难题的求解,一是全体同志对求解出答案的矿工的答案进行验证。

挖矿的难度设计出了一个基本固定的十分钟时间,当你提出一笔交易,接下来这十分钟时间内比特币系统对你的这笔交易申请进行验证,看看你是不是有这笔钱。矿工们会努力进行求解,第一个算得结果的人会把结果广播出去,让大家来评判对错,如果对的话,大家就会认可这笔交易。

账单的确认实际上是在试图向区块链添加新的区块,也就是要计算出新的区块。

比特币的神秘发明人

比特币的发明人一直是个迷。2009年一个网名叫中本聪的人在密码学邮件列表里发了一篇论文,讲述了这种不依赖于信任关系的金融交易系统,随后中本聪开发了第一款比特币系统。可是没人知道他的真实身份,他有意隐藏自己的一切身份信息。无数技术牛人试图通过各种方式寻找这个天才黑客数学家的线索,都没能如愿。

目前来讲,我们不知道他是一个人还是一个团队,不知道他所在的地区和时区,只知道他精通英语、数学、计算机。

如何看点比特币的疯狂?

荷兰郁金香也不过如此,都是人性的贪婪造成的现象。

参考

http://blog.jobbole.com/112551/
http://blog.jobbole.com/110860/
https://www.jianshu.com/p/214acff6c9bd
http://bitcoin-on-nodejs.ebookchain.org/1-%E4%BA%86%E8%A7%A3%E5%8A%A0%E5%AF%86%E8%B4%A7%E5%B8%81/5-%E5%8A%A0%E5%AF%86%E8%B4%A7%E5%B8%81%E5%B0%B1%E6%98%AF%E8%B4%A7%E5%B8%81.html
http://www.ruanyifeng.com/blog/2017/12/blockchain-tutorial.html
http://lucky521.github.io/blog/design/2015/12/26/bitcoin.html#%E6%AF%94%E7%89%B9%E5%B8%81%E5%8D%8F%E8%AE%AE
https://www.jianshu.com/p/e710a389a3f1
https://program-think.blogspot.com/2017/08/GFW-Resilio-Sync.html
https://program-think.blogspot.com/2017/09/Introduction-DHT-Kademlia-Chord.html