不要去思考十年之后什么会改变,而是去思考十年之后什么东西是不变的--杰夫贝索斯
为什么-Why?
为什么比特币?为什么区块链?
这个题目,我是有点蹭热点的,这篇文章讨论更多的是区块链存在的意义。就像每个产品都是对一个问题的答案,区块链是对一个问题非常有代表性的答案。如果我们想要搞清楚“为什么是区块链?”,我们首先先问“为什么比特币?”或许是一个非常好的开端。所以,为什么是比特币?比特币解决了什么问题?
梦回2008
《Bitcoin: A Peer-to-Peer Electronic Cash System》这篇比特币的白皮书是在2008年10月31日发表。2008年在大家脑海里除了北京奥运,还有就是金融海啸从美国地产开始。维基百科还有专门的主页网络上其他地方也有很多相似的文章,另外也有一个非常有名的电影《大空头》也是讲2008年金融危机的。
总结来说,很多工作不稳定的人从银行都借到了钱买了大别墅,借到了钱没钱还,那么就会违约。借款人违约了贷款人,贷款人手里的借款人违约的多了,就违约了他的贷款人,层层套娃最后整个金融市场被破坏。
在这里面问题是,为什么一个工作都不稳定的人都能借到那么多钱?这里其中一个原因就是,评级机构出现了腐败,对于高风险的债评估为低风险。我们要知道,当对方在评估我们的风险时,我们也在评估对方。对于一个权威的评级机构,我们理应信任权威评级机构出具的结果。但是在这次事件之后,我们对评级机构产生了不信任。信任出现问题,是一个非常大的问题。
信任
人类,作为物种,唯一的目标是更长的存在。那么对于个体,人,唯一的目标也会是更长的存在。在此目标下,人以群体生活,最开始是家庭,后来是部落慢慢变大,成为一个国家,国际化的最终目标则是人类整个群体作为一个群体进行合作。
对于群体,无论这个体系会有多大,人作为群体的最大的需求都是信任。一个群体内没有信任的话那么这个群体就不会存在下去。
但是,这里面信任如何定义? 假设你的朋友张三每天说十分钟到地点,但是他每次都是15分钟到地点。另一个朋友李四每天说十分钟到地点,但是他有的时候4分钟到,有的时候16分钟。假设一种情况,你中了一种毒素,15分钟以内你就会死掉,张三和李四都有解药但是你的电话只能够打一通电话,那么在这种情况下你会打电话给张三还是打电话给李四?
在我看来,我在十五分钟的时候打电话给张三,因为虽然他肯定说十分钟是骗我,但是他会在十五分钟到地点。而李四我不确定他会不会在15分钟以内到地点。
所以在我看来,信任的本质是一种确定性,你对张三或李四在未知未来的行为的确认性。
那么回到2008年,资产评级机构对整个金融体系有绝对的话语权,整个房地产资产估值都是围绕着少数有权威的评估机构建立。
当危机来临,我们首先发现,评估机构说的也不一定对。我们对美国的金融系统中的权威产生了质疑。
怎么做-How?
好了,假设你在2008年初,我们发现了存在于美国社会上巨大的问题,美国社会中拥有权威,拥有权利的人基本可以指鹿为马。如何解决这个问题?有人说我们通过民主,有人通过暴动,但是也有一些人就说,我们需要设立一个全新的金融系统。这个系统,就叫比特币。
是什么-What?
现在,才是最困难的问题,我们需要开发一个更好的系统取代现有的金融系统。现有的金融系统为一个中心化系统,最中心节点是权威,来处理所有信息和储存所有信息。
拿银行举例,我们转账都要向银行发送申请转账,由银行进行判定、记录、操作,将钱转到目的地账户。我们查询我们自己的余额,其实本质上就是向银行问我们的记录。在这里,判定、记录、操作完全处于黑箱状态。我们完全不知道里面发生了什么。我们如果要做一个取代金融系统的,那么我们的系统一定是点对点的转账,而且所有转账信息都会公开。
比特币的方案就是,在体系内所有的节点都拥有记录和查询交易的权限。
如何实现?假设系统中有张三,李四,王五每个人都有个记账本。张三把2块钱转给李四,为了这个转账信息让所有人都知道,张三就在本上记录下来然后在群里面喊一声,这样大家在自己的账本上更新数据。
1. 张三偷偷写下李四转给张三自己钱怎么办?
要解决这个问题,我们每个约定每条转账都需要当事人进行签名。李四转账给张三,李四需要在交易上签名。在软件系统上实现签名,就需要非对称加密的方式,每个人都有自己的一个私钥,也有一个公钥。公钥(PK)可以被所有人看到,私钥(SK)为不公开的钥匙。
交易的信息会根据发起人的PK进行hash,只有发起人用自己的SK才可以进行解码。这时,我们约定只有成功解码的标准信息才能够写入到系统数据库当中。
2. 如果张三没这2块钱怎么办?
就如同玩大富翁一样,开始系统的时候,每个人都有初始的游戏币,这里的所有转账都是用游戏币进行交易。而且在每次交易当中,核实的人需要将记账本从头看到尾,来判定是否张三有余额转账给李四。
因为把记账本从头看到尾会让人非常痛苦,而且三个人又会写代码所以他们决定建立一个软件系统。首先,系统开始的时候会给每个人记录相应的余额,
{
"timestamp": 0,
"transaction": "从系统转到张三、李四、王五"
"state":{
"张三": 100,
"李四": 100,
"王五": 100
}
}
交易按时间进行,每笔交易都在系统数据库中按时间排列
[{"timestamp": 0, "transaction":"..."}, { "timestamp": 1, "transaction": "张三转给李四2块钱", "state":{ "张三": 98, "李四": 102, "王五": 100 } }]
这里面每个项目都是一个“区块”,以时间为签子串在一起,就是“区块链”。
3. 谁来做审核?
上面说道,每个区块按照时间排列来串联。
那么假设一个情况,张三向李四转账60块钱这样李四就有162块钱,接着李四就转给王五160块钱,但是张三因为离得比较远网速比较差,所以李四的区块比张三的区块更先发送到系统里面。
那么,我们怎么建立一个机制保证区块的顺序是按照时间排列?
这里在比特币的白皮书中,介绍了一个非常重要的机制就是“proof of work”。
首先来看,我们现在设计的区块当中有时间,有交易信息。为了让区块串联起来,我们也需要在区块中包含上一个时间节点的区块的数据。
[{"timestamp": 0, "transaction":"..."}, { "timestamp": 1, "previous_block": {"timestamp": 0, "transaction":"..."}, "transaction": "张三转给李四2块钱", "state":{ "张三": 98, "李四": 102, "王五": 100 } }]
上面这个情况下,每个区块都非常容易被篡改和伪造,比如张三和李四同时都跟大家说我的这个区块是timestamp=1的区块。
在这种缺少有决定权的角色的系统下,我们听谁的?
在这样一个软件系统当中,现有最好的模式就是谁的声明成本最高就听谁的。张三声明的时候还押了一块金表,李四声明的时候直接押了一套房上去。那我们就听李四的,把李四的区块放到系统账本上去。
如何在软件系统中实现这一个机制?比特币的实现方式借鉴了SHA256的机制。张三和李四同时去猜一个值,用这个值hash区块,hash结果会以若干个0开头。谁先找到这个值,就听谁的。这个过程中文叫挖矿,这个hash结果在比特币中叫“nonce”。
与此同时,因为这个活不能白干,所以谁先得出这个值,谁就能得到金钱奖励。所以也就解释了为什么挖矿赚钱了。
自己的一点想法
我非常讨厌以去中心化来描述区块链这个产品/系统。
在刚才的问题中,我们看到了proof-of-work这个机制本质上是在推举那个花了更多成本的人作为权威。而且要劫持这个系统的话理论上需要50%(有些链更少)的算力。从这里我们其实可以看到,在不改变这个机制的情况下,只要比特币的影响力在扩大不久的将来总会有一个非常富有的组织,或者个体控制整个区块链。
区块链的本质我个人认为在于披露,去中心化只是一个阶段,不是这个产品的身份。