2017 年即将过去,如果要问你 2017 年最后悔的一件事是什么?也许你会说,没有买比特币。

随着在 2017 年的一轮大涨,比特币再一次回到了舆论的风口浪尖,在本文写作时刻(2017 年 12 月 15 日),1 个比特币一度逼近 2 万美刀。

Bitcoin USD Prices
Bitcoin USD Prices

这是在上一次(2013 年)比特币的那次大涨之后的又一次大涨,人们不禁疑惑,为什么在 2013 年的那次大涨大跌并且一度陷入沉寂之后的比特币会再次喧嚣起来,并且达到了令人瞠目介绍的价格?比特币究竟是什么?它是不是所谓的庞氏骗局?它是不是传销?如今繁荣的比特币市场是不是在重现当年的郁金香泡沫?

Bitcoin Baidu Index
Bitcoin Baidu Index

随着人们对比特币的关注和讨论越来越多,不仅中国大妈和美国大妈纷纷杀入了比特币的交易市场,甚至像美联储和中国人民银行这样的央行也纷纷在研究数字货币。而比特币背后的区块链技术,早在 2016 年被列入了中国“十三五”规划。

信息技术创新代际周期大幅缩短,创新活力、集聚效应和应用潜能裂变式释放,更快速度、更广范围、更深程度地引发新一轮科技革命和产业变革。物联网、云计算、大数据、人工智能、机器深度学习、区块链、生物基因工程等新技术驱动网络空间从人人互联向万物互联演进,数字化、网络化、智能化服务将无处不在。

Bitcoin Google Trends
Bitcoin Google Trends

比特币到底是什么?区块链又是什么?现在网上各处也已经有了零散的资料,有的是 以一个故事的形式讲解比特币,有的也深入到技术细节,但是总是不明所以。本文将尽量从一个程序员的视角来解析比特币和区块链,以期望作为一个程序员能够较为舒适的理解比特币背后的技术。文末附有参考资料和我在组会上给做的展示的报告。

Overview

货币的起源

货币本身源于商品交换,早在货币和国家产生之前,以物易物的贸易就已经出现。人们生产出自己最擅长的物品,并将剩余用于交换。每件产品都有以其他产品表示的交换价值,人人都可以通过换取其更加需要的产品而获益。

Alice 是以农业为生,生产了很多大米,多到吃不完;而 Bob 靠打猎为生,猎到了很多牛羊。Alice 大米吃多了想吃点羊肉补充补充营养,而 Bob 也想吃点大米换换口味。于是 Alice 跟 Bob 说,“嘿,Bob,我用这一袋大米换你一只羊怎么样?”。Bob 听了想,反正自己羊也吃不了,而且换一袋大米听起来还很划算,于是就决定和 Alice 交换。这就是最早的 以物换物, 也就是所谓的 Barter Economy

sequenceDiagram
    Alice->Bob: A bag of rice for your sheep
    Note right of Bob: Sounds reasonable:)
    Bob-->Alice: I will give you my sheep for you rice

然而,以物换物这种方法有着严重的缺陷,它限制了交易规模和生产规模。在以物换物开始之前,甲方首先要找到卖方乙方,而同时,乙方也必须正好对甲方手中的产品有需求。还是以上面的例子为例,Alice 现在想用自己的大米换来一双鞋子,而 David 正好做了多余的鞋子。但是 David 手中已经有了足够的大米,这个时候 Alice 手中的大米对 David 的吸引力并不是很大。这个时候以物换物这种交易就不容易达成。

通过上面的例子,可以看到需求的 双重巧合(double coincidence of wants) 是交易达成关键要素。除此之外,物品的不可分割性(indivisibilities) 也是以物换物的另一大难题。如果在黄油、鸡蛋、鱼之类的商品之间进行交换还好说,但如果是房子之类的商品呢?假设 Eve 拥有一座房子,他想要卖掉房子,用以购买一辆汽车、一台洗衣机或者几匹马之类,那么要怎样完成这笔交易呢?显然,Eve 不可能把房子分成二十多份,然后每份分别用于交换不同商品,因为如果把房子分成二十多份,那么每份都不再具有价值,所以房子等商品的不可分割性如何解决就成为物物交易的另一难题。拖拉机、机器和其他大件物品也是如此。进一步地,如果房子等大件物品因为这个原因而在市场上卖不出去,那么人们就不会生产大量房子用以交换,生产规模也就被限制住了。

为了克服这个问题,人们创造性的发明了 货币 。大家都同意,将 便于分割且稀有的东西 ,比如黄金,作为 一般等价物, 将其他物品的价值和黄金的数量关联起来,比如一克黄金对应一只羊,一克黄金对应一袋大米。这个时候 Alice 再也用拿着一袋大米到 Bob 那里去换羊了,他只要从家里拿出一克黄金就可以从 Bob 那里换回一只羊。

sequenceDiagram
    Alice->Bob: One gram of gold for your sheep
    Note right of Bob: Sounds reasonable:)
    Note right of Bob: I can use the gold to buy other things!
    Bob-->Alice: I will give you my sheep for you gold

再后来,人们觉得黄金也麻烦,还要花费人力开矿冶炼啥的,于是这个时候出现了 纸币。纸币一般是具有足够黄金储备的中央银行发行。中央银行说,“你拿着我这一张 100 面额的纸币,可以在任何银行换取 1 克黄金”。于是这个时候人们可以直接用纸币进行交易了,这就是所谓的 金本位体制 。金本位体制是以政府的信用作为保障的,如果政府大量滥发纸币,便会造成通货膨胀,纸币急剧贬值。

sequenceDiagram
    Alice-->Bob: I will give 100$ paper money for your sheep
    Note right of Bank: Many Many Gold...
    Bob-->Bank: 100$ paper money
    Bank->Bob: 1 gram gold
    Bob-->Alice: I will give you my sheep for your paper money

到了电子支付时代,人们发现甚至连纸币都可以不需要。Alice 从 Bob 那里买来一只羊,只需要通过银行转账。也就是 Alice 自己的银行账户上减少 100 块,而 Bob 自己的银行账户上增加 100 块,这就完成了交易的支付过程。在这个中心化的系统中,人们信任银行能够诚实的执行转账任务。

sequenceDiagram
    Alice-->Bob: I will transfer 100$ for your sheep
    Alice->Bank: transfer 100$ to Bob
    Note right of Bank: Account_Alice - 100$
    Note right of Bank: Account_Bob + 100$
    Bank->Bob: Alice transfer 100$ to you
    Bob-->Alice: I will give you my sheep for transfer

货币的本质

​```flow

​```

从上面货币的起源我们可以看到,货币本身是作为交换的媒介而出现的。经济学家米塞斯认为,货币唯一的、基本的职能就是充当交换媒介。人们之所以取得它,是因为他们想在今后的交换中使用它。他指出,“在人与人之间,交换货物和劳务之间,如果插入一种或者几种交换媒介,那就是间接交换,当做交换媒介而被普遍使用的叫做货币”。只要一个物品有交换媒介的功能,就可以说你是某种程度上的货币,只不过我们还要区分它是不是大家普遍使用的交换媒介。唯有普遍使用的交换媒介才是充分程度的货币。

黄金因为其 稀有而便于分割 的特性而被选择成为了人们所公认的货币。与之相同,具有同样特性的白银也可以作为货币。从某种意义上来说,黄金只是一堆石头,而不具有任何实际的价值,不能当做粮食,也不能作为住房。

货币的特性

当前货币存在的问题 => 2008 年金融危机爆发出来的问题

比特币概貌

为了解决上述系统的问题,中本聪(Satoshi Nakamoto)在 2008 年 11 月提出了 bitcoin 的构想,并在 2009 年 1 月挖出了 50BTC,并在创世区块上写下了下面这句话。

The Times 03/Jan/2009 Chancellor on brink of second bailout for banks.

比特币到底是什么呢?下面这张图可以大体反应比特币的主要构成元素。每个用户都有自己的钱包,所有的用户构成了一个 P2P 的网络。不同用户之间可以实现比特币的转账,称之为 交易(transaction)。在这个比特币网络中,有的节点作为 矿工(Miner) 对整个网络上的交易进行确认,并将其写到 区块(block) 中,从而获得比特币奖励。所有的区块链接起来,就构成 区块链(BlockChain) 。比特币可以和现有的法定货币之间进行交易,也可以用比特币购买商品。

Bitcoin Overview
Bitcoin Overview

其中最重要的就是 区块链(BlockChain) 。我们其实可以将区块链理解为基于密码学技术的分布式数据库,也就是 共享账簿(Public Ledger) 。在这个账簿中记载了所有人的交易历史,假定所有人的初始资产为 0,如果这份账簿对所有人都是一致的话,那么自然就可以推出当前时刻每个人手中的资产数目。

比特币的问题

Crypto

###Hash 函数

Hash 算法是能将任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash 值),并且不同的明文很难映射为相同的 Hash 值。Hash 值在应用的时候又被称为 指纹(fingerprint) 或者是 摘要(digest)

例如计算一段话"hello world"的 SHA256 的 Hash 值

1
2
$ echo "hello world" | sha256sum
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447

这意味着我们只要对某文件进行 SHA256 Hash 计算,得到结果为a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447 这就说明文件内容极大概率上就是 “hello world”。可见,Hash 的核心思想十分类似于基于内容的编址或命名。

一个优秀的 hash 算法,将能实现:

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。
  • 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文。
  • 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。
  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)。

目前常用的 Hash 算法包括 MD5、SHA-1 和 SHA-2。

###公钥加密体系

###数字签名

The Bitcoin Network

Transaction

交易过程

BlockChain

Future

也许它永远成不了货币,但它将改变很多东西。

More Material

Presentation

这里是我在组会上给老师和同学们的报告和附带的源码

Reference

  1. 比特币通俗解释
  2. Mastering Bitcoin
  3. http://www.weidai.com/ https://libbitcoin.dyne.org/ https://www.slideshare.net/Ferdinando1970/20161110-rome-icc-intro-to-blockchain http://ethfans.org/topics/235 https://en.bitcoin.it/wiki/Main_Page http://www.michaelnielsen.org/ddi/how-the-bitcoin-protocol-actually-works/ https://pdos.csail.mit.edu/6.824/papers/bitcoin-faq.txt https://pdos.csail.mit.edu/6.824/notes/l-bitcoin.txt http://www.imponderablethings.com/2013/07/how-bitcoin-works-under-hood.html https://app.pluralsight.com/player?name=bitcoin-decentralized-technology-m0&mode=live&clip=0&course=bitcoin-decentralized-technology&author=scott-driscoll https://letstalkpayments.com/blockchain-bitcoin-as-a-mainstream-case-study/ http://blog.csdn.net/stonesharp/article/details/50382507 https://medium.com/@micheledaliessi/how-does-the-blockchain-work-98c8cd01d2ae https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg?&MsgID=4506795225283581804&skey=%40crypt_4bb9c429_7a69757ee862b1f7943c654f3b330071