浅说区块链基础
# 1. 到底什么才是区块链?
这一章主要聊一下区块链是什么,以及它的发展历程。
# 1.1 区块链和区块链行业
区块链是一个崭新的行业,这个行业是通过比特币形成的,比特币的代码通过 fork 修改再发布形成了莱特币、点点币等,早些时候这些币种被称为"山寨币"。除了比特币之外,一些大神,比如以太坊的创始人 V 神(Vitalik),再比如比特股、Steem 和 EOS 的创始人丹( Dan )等觉得比特币这棵树不够自己发挥的,于是相继种下了自己的"树",树变树林,最终形成了一个崭新的行业,称为区块链行业。
区块链让两类人趋之若鹜:
- 具有理想主义情怀的极客提出的去中心化
- 以赚钱为目标的投资人和生意人
前者为后者提供了极佳的赚钱土壤,后者为前者注入了赖以生存的资金。这两个也就是区块链行业通常所说的链圈和币圈。现在这两个圈子逐渐融合,也就形成了目前的区块链行业。
# 1.2 区块链究竟是什么
简单来说,区块链首先是一个分布式网络。比如你和你朋友异地开黑就可以看成一个分布式网络,朋友喊你开团战,你参与了团战,这就是达成共识并同意共识的过程。
区块链也是一样,让所有的独立节点想要达成共识去做同一件事情,是区块链在技术上首先要解决的问题,这就是我们常说的共识过程,也是“去中心化”这个概念的直接来源。
区块链在整个系统本身具有一个自己的 Token("通证"、"代币"等),其实最简单的理解就是“虚拟资产凭证”,它可以是我们的股权,也可以是票据,也可以是游戏积分,凡是需要资产记账的地方都可以用 Token 来做。下面用一个例子来解释这个 Token:
回头看上面那个例子。如果你参与了团战,你的朋友就要支付你 1 元,请问这个系统怎么做?注意,我这里说的不是银行卡转账,我就是指在游戏里面,你所在的这个分布式网络中,在你参加团战之后,对方通过这个分布式网络直接支付 1 元给你。
很多人就会说:“直接做到 App 里面呗”,可是你要知道,我并没有说支付“1 元人民币”啊,也有可能是 1 游戏积分,这个游戏积分未必是王者荣耀发行的,你有没有想过这个积分是你的朋友发行的?
你肯定会说,那我要这个积分有什么用呢?好,假设你的朋友是个超级富豪,他说你陪我玩游戏,但我不想支付你法币,我用我自己发的游戏积分给你,你看我老爸在国外开游戏积分交易所的,我的游戏积分在上面交易,你每次帮我开团,我就给你积分,你拿去自己交易换成其他资产,美元啊什么都可以。
想象一下,你的土豪朋友每次语音说“谢谢你帮我开团成功”,你就拿到 1 游戏积分,而这 1 游戏积分和腾讯没半毛钱关系,却又让这个语音与这 1 游戏积分同步生效,区块链其实就是在解决类似的事情。这里的积分可以理解为具有流动性的虚拟资产,但流动性又没有虚拟货币好,而且它不属于虚拟货币。
说了这么多,现在总结一下区块链是什么:
- 区块链是一个分布式网络;
- 区块链可以帮助多个节点达成共识去记录和 Token 相关的事情;
- 区块链可以帮助所有人无门槛地构建属于自己的小经济系统。
# 2. 区块链到底是怎么运行的?
这篇文章将以比特币区块链为例来讲解区块链到底是如何运行的。
# 1)中心化记账的问题
我们借鉴了一个区块链描述中的经典情景来模拟中心化记账。
假设有一个有百户居民的村子,其中有一位德高望重的村长,村长有一个儿子。村民们都把钱存到村长家,村长负责记账。比如,张三用 1000 买了李四家的牛,村长就把张三名下的存款减去 1000,李四家加上 1000。这就是中心化的记账,村民都相信村长,才愿意把钱存到村长家。
可惜好景不长,老村长由于操劳过度,驾鹤西去了。新上任的村长儿子铁蛋却会私下篡改账本,人们对他不信任。这时候有个叫中本聪的人站了出来,他说他设计了一套系统,可以不依赖任何人记账,于是,众人开始将目光集中到他的身上,分布式记账到来了。
# 2)公开记账
中本聪说他的系统稍微麻烦一点,需要干三件事儿。
- 每家每户都派发一只信鸽。这就是 P2P 网络,是一个点对点的分布式网络,如果不好理解,你先不用理会,我会在后面讲到。
- 每家每户都发一个特殊的印章和一个扫描器。这个扫描器有两个功效,一是识别他人的交易是否真实有效,二是识别这个交易是不是自己账号的,同时识别并解锁未花费的余额。这就是非对称加密。
- 每家每户可以参与记账,不过不再记余额,而是记交易本身的内容。这就是区块链中的交易,这个“交易”对应的英文单词是“Transaction”,这是个专有名词,专指一笔账,不同于金融交易的 Trade。
这三条总体来说其实是干一件事情,就是:
每家每户都记账,账簿上不再记载每户村民的余额,而只记载每一笔 Transaction,即记载每一笔交易的付款人、收款人和付款金额。
为了不让账本混乱,需要大家统一账本,保证大家的账本都是一致的,这就需要广播机制。
中本聪说,其实很简单,我们现在先把全村所有人的资产都加起来。还真巧了,刚好 100 万。
中本聪接着说:“只要账簿的初始状态确定,并且每一笔交易可靠并按照物理时间自然记录,并且只加不改不删,这样,当前每户持有多少资产是可以推算出来的。”
中本聪说我现在把我的印章给你们看,这个印章很特殊,盖的章有两块标记,第一块是一个可以识别的标记,比如我往纸上一敲,可识别的标记是 1MsTg2。这就是你们的代号,由于我们账本是公开的,使用真实姓名会很危险,所以你们记账的交易单上收款人、付款人都填这个码,不用写姓名。你的扫描器和你的印章生成的代号是关联的,有且仅有持有对应扫描器的人才能花费金额,这一步即为“解开交易”。
刚刚说印章有两块,这第二块内容配合这个扫描器才能看,肉眼看则都是乱码,扫描器一扫就知道第二块内容是否有效,这一步也就是“交易验证”。
并且所有交易大家都能接收,都能看到,但却解不开印章乱码部分的内容,仅仅收款方才能解开,因为你的扫描器和你印章生成的代号是关联的,有且仅有持有对应扫描器的人才能解开交易。
以上就是区块链中公开记账的过程。公开记账就是全网所有人都可以随时查看一套账本,然后按照规则透明公开地进行记账。
# 3)创建创世区块
创世区块是我们生成全村公开账本的第一笔交易的第一个信封,好比一篇文章总得有个开头一样。
于是乎,中本聪说我先生成第一个 Transaction,这个交易单的付款人为空,收款人是村长,付款金额是 100 万,因为是创世区块,产出多少个是可以随意规定的,由于我们上面统计了全村的账目情况,所以我就写了 100 万,待会儿付款给村长以后,我们可以按照原来的账本给大家发送对应的金额过去。
好了,我们有了第一笔交易,第一个信封也已经做好了。现在让村长把信封传给张三,张三复印一份,然后传给李四,李四继续传下去,一传十,十传百,直到传给全村人,这个步骤也就是“同步区块”,也就是全网都拿到这个信封,以及信封里面的 Transaction。
# 4)交易
由于上一节我们的创世区块把 100 万交给了村长,那么我们假设张三在村长那里的存款余额是 10 万,这时候村长要根据原来的旧账本,把这 10 万发送给张三,然后把旧账本上的账划掉。下面我们讨论一下如何构造这笔交易。
中本聪开始教村长写交易单,把 100 万分成两部分,第一部分 10 万,收款人是张三;第二部分是 90 万,收款人是自己;这样一个 Transaction 就做成啦:
100 万 10 万,张三
90 万,自己
2
前面我们说了,不能直接写名字,要写代号,这个代号也就是你的钱包地址,我们需要把收款人写名字的地方,让收款人拿出自己印章,把代号读出来,然后告诉村长即可。村长写好 Transaction 以后,还需要拿出自己的印章,在 Transaction 上盖章,这个盖章的过程也就相当于区块链中的签名。这个章,全村人都可以拿扫描器扫一下验证是否有效,即验证付款人的章是否有效。
100 万 10 万,张三的印章(1s25vR)
90 万,村长的印章(13gYip)
2
就这样,村长一共写了 10 份 Transaction,分别代表了发送给不同人的交易,张三一笔 10 万,李四一笔 1 万,等等。
# 5)打包 Transaction(挖矿)
现在我们有了 Transaction,但是还需要东西把 Transaction 装起来,我们用一个特殊的信封把 Transaction 装起来,这个信封就是区块链中的“区块”,这个封装过程就是“打包交易”。
为什么要封装起来呢?是为了让打包交易的人能够在信封上署名,表示这次打包是由某某某打包的,其次全村的交易可能非常多,需要装配标号,方便大家查询。
我们看到上述的 Transaction 虽然已经生成,但是有个问题,就是没有规定谁有权利把 Transaction 封装到信封里。我们在开篇的故事中看到了中心化操作肯定是不行的,假设在全村人中,这时候如何筛选出这些打包的人呢?
中本聪这时候说了,由于我们村的人口增长,100 万未来可能不够,我们暂定 150 万,那多余的 50 万,我们就当奖励给这些装信封的人了,当然不能一次性给,谁装一次信封就领 3 个币。
这时候大家伙儿来劲了呀,只要装信封就能够领钱了,我们在这里把符合条件的人称作矿工。
但是中本聪又说了,要获得这个装信封的权利,是有条件的。我给大家出一个难题,谁先解出这个难题的答案,谁就有权利把 Transaction 装到一个信封中,并且要在此信封上盖上自己的章。
这个难题是这样的,它有两大特性,第一是容易验证,第二是计算过程非常复杂。
例如,有种棋牌类游戏叫作“24 点”,玩法就是给出任意 4 个整数,通过整数运算得到 24,比如现在给出 2、9、1、5 四个数,答案是(5-2)*(9-1)= 24。当然,本处仅是举例,“24 点”游戏的答案空间非常小,是远远不够生成信封的。
答案非常好验证,但是计算过程是一个尝试的过程,需要耗费大量的精力。而在真实的比特币中,采用的是寻找符合条件的目标哈希,这也就是比特币矿工所做的事情。
好了,这时候大家开始计算给出的难题,刚好李四第一个计算出来,那么这次装信封的操作就由李四完成,李四把 10 份 Transaction 装到信封中,也就是打包 Transaction,并且要在信封背面写上一个信封的摘要信息。
比如上一个信封中的第一个交易是什么、信封封面长什么样,最后要在信封上盖上章,也就是“签名”,矿工签名的目的是为了领币,也就是 Coinbase 交易。
以上过程在区块链领域称作“打包 Transaction”,也就是大名鼎鼎的“挖矿”。
# 6)广播交易
来说说上文提到的广播交易,广播是为了让全村人知道当前时刻你产生了一笔 Transaction,或者是你装好了一个信封。
广播的内容分两种,一种是广播 Transaction,一种是广播信封。第一种广播是意味着还有未被打包的 Transaction,而第二种广播信封则意味着这个 Transaction 已经被某个矿工确认。
收到了广播的通知后,大家先验证信封上难题的答案是否正确,这样便可以验证出信封是否被伪造,接着验里面的每笔交易,最后还要验证信封背面的内容,即上一个信封的摘要是否正确。因为上一个信封大家都已经确认,所以这样可以极大地规避作弊的可能。如果觉得没问题,就可以存入本地数据库中了。
至此,全村人的记账问题就差不多解决啦。