生活
调查类问题
货币
金融
区块链(Blockchain)

区块链是什么,如何简单易懂地介绍区块链?

关注者
44,319
被浏览
13,224,769

1,522 个回答

更新在20191025之后,说一些新的关于区块链的发展:

1,区块链的应用。

首先先说央行数字货币——央行数字货币的技术其实早就成熟了,都用不到区块链,因为区块链的目的是去中心化,而央行数字货币用不到这个。当然,采用区块链的央行数字货币技术也早就有了(参见RSCoin),这里面可能会在某些环节采用区块链技术去中心化——例如货币的发行仍旧是中心化的,但是流转中的管理和验证可以通过区块链技术去中心化到其他银行。同时,据我所知,官方早就有一个数字货币研究所在研究这个很久了。我在很早就写过,从大势上,货币的数字化是必然的,但这和比特币是两码事,看起来可能会更像支付宝。然后,现在facebook来了一出libra(请参见我关于libra的文章 zhuanlan.zhihu.com/p/69),我觉得从很大程度上推动了这次区块链的新闻,也推动了央行数字货币的推出。libra本身只代表facebook的野心,目前来看,他们的野心很有可能不会成功,但是也许是这种野心和指明的技术方向让国家产生了紧迫感——因为就算现在libra的所有成员都退出得差不多了,libra本身也前途未卜,但是万一类似的框架被搭起来又吸引了其他的重量级成员加入,那么国家在这上面就失去了主导权。因此,根据最近的新闻,央行的数字货币应该已经非常接近了。

但这点,并不足以突然让“区块链”成为国家战略,这里说的区块链,一定是包含数字货币之外的其他应用的。

区块链最引人遐想的应用,无疑是以“以太坊”为代表的,用区块链来做一个“全球计算机”,然后,用“智能合约”来编写在这台全球计算机上运行的软件(又被称为Dapp,即去中心化应用)。简单来说,这个全球计算机的好处在于,你可以把一切想要“去掉中间商赚差价”的事情,全都搬到这上面来做,而不需要依赖于某个大企业作为可信中心,例如银行或者互联网巨头。关于这个问题,可参见这篇 zhuanlan.zhihu.com/p/28

然而,这种全球计算机的设想在这两年间暴露出了非常多的问题,让人看不到短期的解决希望。

于是,从这次区块链的新闻中透露出来的应用方向,“不可篡改”这个区块链的特点,以及它在存证、溯源、防伪、征信等方面的作用。这个,是目前在落地上做的最成熟,也是能够实打实地看出来区块链对比于传统中心化系统优势的应用。

2,区块链技术

这次战略中最主要提出的,是“要掌握区块链核心技术”,那么区块链的核心技术是什么呢?

区块链相关技术有很多方面,我可以把它大致分成4类:1),共识算法;2),隐私保护技术和相应密码学技术;3),智能合约相关技术;4),面向应用相关技术。其中,前三者可以认为是底层,后两者是上层。

1),其中,共识算法是区块链最核心,也是整个技术发展和学术界最热衷的领域:大量的公链项目都追求共识算法的创新,同时,大量的研究者也投身于这个领域,然而,大多在国外(我之前主要研究方向也是这个领域)。这点其实并不意外——众所周知,国内很少人愿意搞基础理论研究。

但是共识算法中的涵盖面非常广,其中有一个概念非常重要——有许可和无许可,有许可共识算法要求所有参与节点的身份已知,主要采用类BFT算法。而无许可共识算法则允许任何节点只要达到某些条件就能进入,无需事先在任何系统中注册身份,而POW和后来衍生出的POS以及其他许多POx类算法都在此列。前者,多用于联盟链,而后者多用于公有链。其中,两者发展至今日,在速度和延迟上的差异已经不大了,归根结底的差别就是前面说的有无许可的差别。而无许可共识算法由于无许可的特性,又引出了一个很重要的概念叫“激励机制”,比如比特币的挖矿,于是,又衍生出了“货币”。于是,就又衍生出许多非常有趣的方向,例如:ASIC矿机,链上治理,加密经济学等等。

以上,哪些方向可能会被认为是这次战略中的“核心技术”呢?

我个人更看好许可共识算法的相关技术,而且,这类共识算法也可能布上支付宝的道路,会摒弃很多意识形态方面的需求,追求速度更快,规模更大,使用更方便,更标准化。而非许可类的共识算法,则面临着更高的风险——首先,对于“币”这个事的政策并不明确;其次,在之前所说的应用方向上,公有链相对于联盟链并没有显著的优势。

2),其实区块链技术本身采用的密码学技术并不高深也不复杂,无非是哈希函数和数字签名这两个非常经典和简单的密码学工具而已。然而,由于区块链技术和密码学天生的契合性(大部分早期研究区块链的学者都来自于密码学领域),同时,由于“加密货币”这个词,即:cryptocurrency,(注:在英文中,这个词被用来指代所有类似于比特币之类的货币,而不是中文领域中常用的“数字货币”),导致大部分人都认为密码学天生和区块链是联系到一起的。

实际上,区块链技术本身并用不到特别先进的密码学工具(当然,一些新的共识算法中采用了一些新的密码学工具)。但是,其中最重要的密码学挑战,是隐私保护技术,而其中,可能会用到的,包括零知识证明,同态加密等目前还在发展之中的密码学工具。这点,其实并不是区块链本身的需求,但又和区块链紧紧联系在一起——原因,还得说回之前区块链的性质和区块链的应用上:

首先,区块链最大的特点是所有上链的数据必须通过所有节点的验证,然而,如果区块链得到了大规模应用,这就代表了所有的节点都会获取所有的数据。好吧,我们现在不信任中心,有很大的一部分原因是中心获取了我们所有的数据,而现在倒好,用了区块链去中心之后,所有人都可以获取我们所有的数据了。

因此,如何在能够保证隐私的同时还可以享受区块链带来的去中心化优势呢?这需要所有节点能够在不知道数据内容的情况下,还能够对数据的有效性进行验证,例如:在不知道你是谁,具体有多少钱,你想要支出多少钱的情况下,验证你确实有一笔钱可以来完成这笔支出……

这听起来像是天方夜谭,然而,实际上我们有一种密码学工具可以实现它——叫做零知识证明。

然而,目前零知识证明尽管一直在发展,但是目前仍存在很大的局限性,这种局限性是效率——我们有了一些高效的证明方式,例如:我们可以很快地证明某个未知的数比另一个已知数大,或者我们可以证明某个未知的值来自于某个集合。然而,这些高效的零知识证明,还不足以覆盖区块链的所有应用。因此,可想而知,这些新加密技术,尽管不是区块链技术中的必须品,却是区块链技术能够得到广泛应用的必需品,所以一定是“核心技术”中的一部分。

3),智能合约相关的技术,实际上包括语言,包括编译……这些,实际上相当于是当我们已经有了区块链作为底层之后,如何使用它的问题。在这上面目前还没有一个非常明确的方向,因为,其实目前在尝试的思路有几种:

i,以太坊式的,高度自由的图灵完备的系统。然而问题是,写程序太容易出错了,而且出错的代价太大。

ii,Hyperledger-fabric式的,高度模块化的系统,然而,极度复杂,复杂到想要采用HF的公司,要么放弃,要么花钱请IBM的人帮他们做。

iii,Libra式的,专注于某项应用的系统,例如libra的move语言就明白地说了,我们不追求图灵完备,我们的目标是做一个更方便于实现各种金融场景的语言——这可能是个趋势,但是还没有经过足够的检验。

这些方向,在目前的尝试还很少。大部分区块链项目仍旧采用以太坊式的系统,或者加以改进。然而,我认为这一点很有可能成为“区块链的核心技术”中最重要的部分——因为一旦区块链上升到了国家战略的高度,那么势必会诞生大量的需求、场景和用户,于是才会有充分的尝试和实现的平台。由此,可能会衍生出一个最适合区块链的语言和开发工具,而这个,会如同OS一样,成为一个新的世界范围内的标准。而从目前来看,在其他的区块链项目都在挣扎着寻求落地的时候,可能只有中国有这样的土壤能够诞生出这样的标准。这大概就是把区块链作为国家战略的原因。

4),应用相关的技术。其实在区块链应用方面最大的技术难点并不在技术上。例如:区块链存证,如果我们做一条联盟链将相关各方作为共识节点然后把证据上链,那么,这个证据就是无法篡改的了。这道理大家都懂,然而问题在于:谁来做这个事呢?证据怎么数字化?怎么运行区块链?给出数据我的好处在哪里?最重要的是,谁掏钱?

区块链目前落地最大的难点,在于其相比传统的中心化方案,除了在存证,溯源方面的一些场景下,找不到明显的优势,也就找不到可行的商业模式。于是,也就很难通过市场的方式推行出去,近两年币市的低迷已经证明了这一点。然而,这一切都会在国家的支持下产生变化,于是,就如同中国互联网产业从模仿学习国外到开始向外输出抖音一样,中国希望能在区块链领域,能够激发出更多的尝试和场景。于是,在这些场景中,我们会积累相关的经验、技术和商业模式,从而将这种模式在出口到国外去,而这点,也会是区块链核心技术中非常重要的部分。

——————————————————————————————

首先要搞清一个问题——比特币是区块链,但是区块链并不是比特币。

于是,在区块链的这个问题回答里,提到“矿工”,“挖矿”,“最长链”,“分叉”等等词的,其实都不准确。

写一点上个月讲课的内容——个人觉得大部分的回答,包括google搜出来的或者wiki的,都不能很好地解释区块链是个什么东西。因为讲比特币的人很多,懂比特币的人也很多,但是具体到区块链,现在并没有一个很清楚的定义说什么是区块链,基本上所有的介绍里都是这样的:

比特币——〉区块链是比特币的底层技术。

或者

比特币——〉比特币是一种区块链。

具体到什么是区块链的问题,目前没有看到很好的定义和介绍,更多的是大而化之地讲区块链的意义在哪里的空泛文章,要不然就是一水的矿工和挖矿。所以我来从纯理论角度说一下我个人对区块链的定义:

1,区块链是一个放在非安全环境中的分布式数据库(系统)。

2,区块链采用密码学的方法来保证已有数据不可能被篡改。

3,区块链采用共识算法来对于新增数据达成共识。

具有以上三个性质的系统,就是区块链。



1,区块链是一个放在非安全环境中的分布式数据库(系统)。

这里的要点有两个:(1)分布式,(2)非安全环境。

首先,这是一个分布式的,去中心化的系统。所以,有一个中心服务器或者节点的,不是区块链。节点都是安全的,无恶意的,那这不是区块链。同理,从应用的角度讲,如果你的应用必须要使用中心节点(例如要用超级计算机做深度学习)或者没必要考虑节点不安全的情况(例如某个安全的工厂里的传感器),那么并不需要考虑区块链技术。

至于后面的词“数据库”,目前大部分成熟的区块链都是数据库,例如比特币就是一个分布式账本,而账本其实就是数据。然后,根据数据的格式,又可以分三种——1,数据是完全不相关的,只是达成的共识,没有有效无效之分;2,数据有某些逻辑结构,例如账本中,一笔交易实际上除了金额,还有输入和输出,连接到之前的交易,这些数据需要通过逻辑验证(例如交易中,节点需要验证输入的交易是否有效);3,数据拥有图灵完备的逻辑,而验证的时候需要通过节点使用算力运算,每笔交易可以有不同的输出和状态,每个节点要做的不仅仅是验证交易的真实性和输入的正确性,还要根据交易里的逻辑读入数值,进行验算然后再验证结果。

比特币的系统就是第二种,又叫分布式账本;以太坊是第三种。第三种可以支持智能合约。

用比特币举例的话,1,它是一个完全去中心化的系统,2,它放在一个非安全的环境,它并不要求所有使用比特币的人都没有恶意。


2,区块链采用密码学的方法来保证已有数据不可能被篡改。

这个是误解最多的部分,因为很多人一提到区块链就只觉得是这个。诚然,这部分很重要,而且确实区块链也因此得名,但这只是区块链的定义的一部分。

这个部分的两个核心要点是:(1)密码学哈希函数,(2)非对称加密。

两个都是密码学的基础概念,网上都有非常清晰的定义,我只简单说下:

(密码学)哈希函数:一个函数Y=H(X),有如下性质:1,有X可以很容易算出Y;2,有Y不可能算出X;3,有Y不可能找到另一个X'使得H(X')=Y;3.5,如果X和X'相差很小,H(X)和H(X')则完全不相关。

这东西主要用于验证信息完整性——在一个信息后面放上这个信息的哈希值,这个值很小,例如256bit,而且计算方便。收到信息之后收信人再算一遍哈希值,对比两者就知道这条信息是否被篡改过了。如果被篡改过,哪怕只有一bit,整个哈希值也会截然不同。而根据哈希函数的性质,没有人能够伪造出另一个消息具有同样的哈希值,也就是说篡改过的数据完全不可能通过哈希校验。

非对称加密:这东西很好理解——对称加密就是有个密钥,可以理解成保险箱钥匙,你把消息加密变成密文,没有人能看懂这是啥,然后同一把钥匙解密成原来的消息。

非对称加密就是有两把钥匙,一把叫公钥,一把叫私钥,用其中一把加密的话,只能用另一把解密,反之亦然。另一个重要的性质是,给你密文,明文和其中一把钥匙,你还是解不出来另一把钥匙是啥。原理基本上是基于一些困难数学问题,例如因数分解和离散对数,常用的有RSA,Diffie-Hellman和ECC(椭圆曲线),比特币用的是椭圆曲线。

非对称加密除了和对称加密一样用于信息加密之外,还有另一个用途,就是身份验证。因为通常情况我们假设一对公私钥,公钥是公开的,而私钥只有本人有,于是一个人如果有对应的私钥,我们就可以认定他是本人。其中一个重要的应用就是数字签名——某个消息后面,发信人对这个消息做哈希运算,然后用私钥加密。接着收信人首先对消息进行哈希运算,接着用相应的公钥解密数字签名,再对比两个哈希值,如果相同,就代表这个消息是本人发出的而且没有被篡改过。


以上是基础知识,至于区块链怎么实现的,很简单:

交易(数据)写在区块里。

第一个区块叫创世区块,写啥都行。

从第二个区块开始,每个区块的第一部分有前一区块的哈希值。此外,区块里的每一笔交易(数据),都有发起人的数字签名来保证真实性和合法性。于是,先前区块里的任何数据都不可被篡改,原因见上。


到这为止有人可能会问:为什么要弄个链啊?直接所有数据加个哈希值不就行了?

因为——这个数据库并不是静止的啊。

数据库的数据是会增加的,而每次增加的数据,就是一个区块,于是这些生成时间不同的区块,就以这种形式链在一起了。

至于如何增加区块,就涉及到第三个部分——共识算法。


3,区块链采用共识算法来对于新增数据达成共识。


共识算法的目的,就是让所有节点对于新增区块达成共识,也就是说,所有人都要认可新增的区块。对于有中心的系统,这事很简单,中心说什么大家同意就好了,但是放到去中心化系统里,尤其是当有些节点有恶意的时候,这东西非常复杂,计算机科学里有个相应的问题,叫做“拜占庭将军问题”或者“拜占庭容错”(BFT)。

有很多用Lamport给出的那个例子来讲BFT的东西,我在这里换一个角度。

Lamport大神当年提出这个问题的时候在斯坦福研究中心给NASA做项目,他提出这个问题的原因并不是考虑类似比特币的应用场景(整个互联网成千上万个用户),而是考虑特殊背景下的一个简单的系统——

航天飞机的控制系统。

如果有航空背景的同学可能知道,飞机有三套独立的控制系统,为什么呢?因为任何系统都不可能完全不出故障,就算飞机控制系统的故障率已经极低了,还是有飞到一半这东西坏了的可能。于是我们可以弄两套独立的系统,同时坏掉的几率就会大大降低。

可是两套独立的系统还是不足以容下一个系统的错误——一架飞机迎面飞来,两套系统一个说要躲,一个说不躲,那到底是躲还是不躲呢?所以我们需要三台独立的系统,这样,如果有一个系统有故障了,还有两台能正常工作,能少数服从多数给出正确的结果。学过纠错码的同学对这个应该不陌生,这个系统的输出之间的汉明间距是3,所以可以纠正一位的错误。

然而,对于航天飞机,在冷战的背景下,万一某个系统不是坏掉了,而是被敌人控制了呢?三套系统还够吗?

答案是否定的,因为不同于单纯只是坏掉的节点,恶意节点可以做一些别的事来阻止整个系统达成共识。

这个部分略复杂要讲的话要单开一帖,所以我们只说最简单的情况(无签名同步系统)。

我们管三个系统叫ABC,正常工作流程是三个人每次得出结果就互相告诉一下,然后每个人选多数人同意的结果。这是个没有中央节点的分布式系统,也就是说三人不能聚在一起开个会啥的,仨人只能两两通信。这个时候,假设C有恶意,它的目标是破坏这个系统。于是,假设正确的读数是1,A和B都得出了1这个结果,这个时候C这个小婊砸告诉A说“我的结果是0,B也觉得是0”,同时打个电话跟B说“哎我觉得是0,A也这么说”,于是A和B就懵逼了。假设你是A,你听到了两个不同版本的B的答案,B说自己选了1,C说B选了0,可是A这个时候没法知道B和C谁才是那个骗了自己的小婊砸,因为如果B真的告诉A选了1然后告诉C是0,他听到的结果和现在是一模一样的。

于是结论是,拜占庭容错,也就是需要容下一个恶意系统而非错误系统,需要4个独立系统。

(当然,签名可以解决这个问题,但是这只是同步系统的情况,在异步系统里这问题会变得更加复杂,原因是正常节点的回答有延迟,而恶意节点可以不回复,所以,正常节点一方面要等另一个节点的回复,但是它又不知道对方会不会回复因为对方有可能会有恶意,而在收到回复之前,它完全没法判断对方是正常节点还是恶意节点,这个问题叫异步BFT,也是BFT的最复杂的情况,这里不再做更多的解释,下文提到的BFT算法,其实都是异步BFT的算法)

Lamport提出这个问题之后,有无数的算法被提出来,统称BFT(拜占庭容错)算法,其中最有代表性的叫PBFT,然后由于最近区块链的热度,无数针对区块链应用场景优化过的BFT算法也涌现出来,但是一个重要的问题是,所有目前的BFT算法,都只能应用在小型网络里。原因很简单——因为BFT这个问题是设计给类似于航天飞机控制系统这样的场景的,早期的算法考虑的也主要是这种场景。PBFT论文里考虑的就是一个5个节点的系统。就算算上新提出的BFT算法,也最多应用在不超过100个节点的网络里。

这个问题被搁置了很久,直到比特币的诞生——中本聪从某种意义上简化了这个问题,在比特币中,同样是共识问题,中本聪引入了一个重要的假设——奖励,他之所以能这样做的原因是,他考虑的是一个数字货币,也就是说共识这个东西是有价值的。

于是在这样的系统上,他提出了工作证明机制。

所有挖矿,矿工,最长链,分叉等等等等,都可以归结为一句话:

说话是要有代价的,说真话是有好处的,说假话是要扣钱的……

这就是目前两类共识算法的核心区别:

BFT共识模型:恶意节点可以干任何事。

比特币共识模型:模型中有公认的“价值”,每个节点说话都需要一定代价,诚实节点会受到奖励,而恶意节点由于只付出代价而收不到奖励,变相受到了惩罚。

也就是说,BFT共识模型其实涵盖了比特币共识模型的场景,比特币共识其实放宽了BFT共识模型的限制。

比特币共识对于BFT的优势在于,由于给恶意节点的能力做了限制,恶意节点所能造成的破坏大大降低了,尤其是对于异步系统——BFT共识里恶意节点可以一直拒绝相应而诚实节点还需要一直等它(因为不知道它是不是恶意的),而对于比特币共识,随你便,你不响应就没有奖励可拿。于是,比特币共识算法可以应用于成千上万个节点,而且,任何人随时都可以加入,不需要预先在网络里注册自己的身份(而BFT算法里,网络中节点的数量和身份都必须是已知的)。

但比特币共识的缺陷在于,首先,得有个有价值的东西,也就是说放在比特币里这东西还行,以太坊的话现在可能也凑合,但是其他数字货币嘛……BFT共识有个严格的限定,就是恶意节点不能超过总数的1/3,然而其实比特币共识没有这样的限制,唯一的限制就是假定大部分节点都是理性的,是逐利的,也就是会采用最佳的策略来赚取最大的价值。所以,严格来说,自私挖矿这种行为在比特币共识里是允许的,而多数攻击,其实也算不上一种攻击,因为这些都没有突破比特币共识的框架——如果这个价值无限大,比特币共识是非常可靠的。然而这并不是事实,因为并不是每个虚拟货币都和比特币一样值钱,而在价值不高的情况下,比特币共识的前提就站不住脚了——当损失可能是几千上万块钱的时候,假定每个人都是理性的是合理,但是如果损失就几分钱这个假设就相当扯淡了,事实上也发生过一个比特币矿池跑到另一个货币恶意挖矿搞垮对手的情况。

此外,比特币共识是最长链共识,也就是说最长链-->大多数-->理性,于是分叉是允许的。于是导致了一些附带的问题,例如,如果网络有延迟,你怎么知道你手里那条链是整个网络里当前的最长链呢?于是,如果需要传输的数据多,那么延迟加大。延迟加大,那么越多的人手里的链并不是全网络的最长链。于是,全网络的最长链,就没法代表大多数。这就打破了比特币共识的根本,这也是为什么比特币区块频率是10分钟一块的原因。比特币目前有个著名的7币交易每秒的上限,而现在扩容闹得很厉害,以太坊的交易格式不同,也用了新的工作证明,想要改成权益证明,但这些都不本质。真正本质的是,在目前的网络条件下,如果适用全网的话,比特币共识的交易量基本上超不过100笔交易每秒这个量级。

上面这几段有可能太深了,简单来说,BFT共识和比特币共识的区别可以这么理解:


BFT共识:来,大家开个会讨论一下集思广益啊,讨论出大家都满意的结果为止。

问题:开会的效率大家都懂,人越多越不容易出结果。只能用于少数节点,用于上千个节点的话……大家想象一下一天开一次人大的场景。


比特币共识:你的诗念得不错,组织已经决定了,今天就你来当领导了,做得好有奖,做不好扣钱。

问题:奖励几千块钱还好,奖励几分钱谁好好干?



而区块链也就因此被分成了泾渭分明的两类,很多人都听过什么公有链私有链联盟链,但是,如果你们以为这是根据应用区分的就大错特错,其实,这两种区块链最本质的区别,还是因为共识模型或者说算法不同——BFT算法没法应用于大量节点,所以用BFT算法的就没法做公有链。而比特币共识得有个价值体系,这东西去做私有链联盟链就很不靠谱,因为一个单纯逐利的人的假设还算靠谱,但是如果对象是公司的话,公司的利益就太复杂了,不能简单认为他们只追逐区块链上那点价值。

1,公有链,以比特币,以太坊和所有虚拟货币为代表,都采用比特币共识,共识算法基本上都采用工作证明机制,也就是挖矿那些,这种机制其他回答里已经讲得够清楚了,就略过。工作证明一切都好,除了费电……费多少电呢?差不多和一个百万人级别的城市那么多。此外以太坊的创始人特别喜欢权益证明,似乎很快要小范围投入使用(100个区块里一个用权益证明)。但是目前为止,大家对这东西的可靠性还持观望态度。

2,私有链和联盟链。以IBM的hyperledger-fabric,以及一大堆其他的类似于tendermint,甚至R3 corda和ripple为代表,都用BFT共识。其实这方面的应用已经很多了,问题是,1,目前基本上所有应用给人的感觉都还是为了做区块链而区块链,真的觉得这东西好到不可或缺的应用还基本没有。2,由于为了区块链而区块链,其实很多场景的安全性和可靠性还值得怀疑,这点经常被被公有链的支持者诟病。


嘛,以上就是个人定义的区块链了,顺带概述一下现在区块链领域的发展。

之所以写这个帖子,就是因为发现明明是问区块链的问题,所有人都在讲比特币,都在讲挖矿,都在讲工作证明……工作证明不能说过时,也的确是现在公有链唯一可靠的共识算法,但是这东西确实是业界除了比特币死忠之外谁都不想要的东西好吗……

编辑于 2019-10-28 14:29

友情提醒:比特币采用区块链技术,但是区块链并不等同于比特币;全篇基于比特币底层区块链技术讲述,所以,部分模型可能不适用于以太坊等。另外,由于文章采用了一定的抽象、类举的叙事方式,中间或多或少有些地方会跟区块链底层严谨的技术实现有出入,如果让你觉得困惑,可以在评论下方留言或者私信我一起探讨。最后,也是受限于自己知识结构的不完整,这篇文章会随着我对区块链更深入认识后,随时进行修订,最后更新时间可参考该回答下方的时间戳。


另外,作为一篇科普性文章,大家可以随意转载,注明这篇文章的出处和作者即可,无需再单独私信询问。


---


首先不要把区块链想的过于高深,他是一个分布在全球各地、能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器节点的人都可以参与其中。来自全球各地的掘金者在当地部署了自己的节点,并连接到区块链网络中,成为这个分布式数据库存储系统中的一个节点;一旦加入,该节点享有同其他所有节点完全一样的权利与义务(去中心化、分布式的特征)。与此同时,对于在区块链上开展服务的人,可以往这个系统中的任意的节点进行读写操作,最后全世界所有节点会根据某种机制的完成一次又依次的同步,从而实现在区块链网络中所有节点的数据完全一致。

上图中,高亮的点就是区块链系统中分布在全球各地的一个个节点;而这些节点可以简单理解为一台服务器服务器集群

为了更简单的阐述那篇文章所构建的世界观,文中所讨论的节点全部粗暴的理解为官方参考实现节点,即最标准的一种节点类型,这些节点不仅可以参与挖矿共识、还可以数据存储和数据点对点传递;不涉及其他复杂的节点类型。关于节点的分类,可以阅读我的专栏文章《 区块链节点与钱包的分类、边际和使命,看这篇文章就足够了》


# 问题的由来

我们反复提到区块链是一个去中心化的系统,确实,「去中心化」在区块链世界里面是一个很重要的概念,很多模型(比如账本的维护、货币的发行、时间戳的设计、网络的维护、节点间的竞争等等等等)的设计都依赖于这个中心思想,那到底什么是去中心化呢?在解释真正去中心化之前,我们还是先简单了解下什么是中心化吧。


中心化?


回忆一下你在网上购买一本书的流程:

  1. 第一步,你下单并把钱打给支付宝
  2. 第二步,支付宝收款后通知卖家可以发货了;
  3. 第三步,卖家收到支付宝通知之后给你发货;
  4. 第四步,你收到书之后,觉得满意,在支付宝上选择确认收货;
  5. 第五步,支付宝收到通知,把款项打给卖家。流程结束。


你会发现,虽然你是在跟卖家做交易,但是,所有的关键流程都是在跟支付宝打交道。这样的好处在于:万一哪个环节出问题,卖家和买家都可以通过支付宝寻求帮助,让支付宝做出仲裁。这就是一个最简单的基于中心化思维构建的交易模型,它的价值显著,就是建立权威,通过权威背书来获得多方的信任,同时依赖权威方背后的资本和技术实力确保数据的可靠安全。


你一定会摆出一个巨大的问号脸 ⊙.⊙?——“通过权威背书来获得多方的信任,同时依赖权威方背后的资本和技术实力确保数据的可靠安全”,真的可以嘛?!


假如说,支付宝程序发生重大BUG,导致一段时间内的转账记录全部丢失,或者更彻底一点,支付宝的服务器被ISIS恐怖组织的一个导弹全部炸毁了。而我刚刚转出去的100元找谁说理去,这个时候,你就成了刀殂上的鱼肉;支付宝有良心,会勉为其难承认你刚刚转账的事实,但他不承认你也没辙,因为确实连他自己也不知道这笔转账是否真实存在。


上述就是中心化最大的弊端——过分依赖中心和权威,也就意味着逐渐丧失自己的话语权。


去中心化?


那么去中心化的形态是什么样子呢?还是拿刚才那个例子继续,我们构建一个极简的去中心化的交易系统,看看我们是如何在网络上从不认识的卖家手里买到一本书的。

  1. 第一步,你下单并把钱打给卖家;
  2. 第二步,你将这条转账信息记录在自己账本上;
  3. 第三步,你将这条转账信息广播出去;
  4. 第四步,卖家和支付宝在收到你的转账信息之后,在他们自己的账本上分别记录;
  5. 第五步,卖家发货,同时将发货的事实记录在自己的账本上;
  6. 第六步,卖家把这条事实记录广播出去;
  7. 第七步,你和支付宝收到这条事实记录,在自己的账本上分别记录;
  8. 第八步,你收到书籍。至此,交易流程走完。


刚才“人为刀俎我为鱼肉”的情况在这个体系下就比较难发生,因为所有人的账本上都有着完全一样的交易记录,支付宝的账本服务器坏了,对不起卖家的账本还存在,我的账本还存在;这些都是这笔交易真实发生的铁证。


当然,在这套极简的交易系统中,你已经发现了诸多漏洞和不理解,比如说三方当中有一个是坏人,他故意记录了对他更有利的转账信息怎么办;又比如说消息在传递过程中被黑客篡改了怎么办等等等等。这在以往的计算机概论或者计算机网络书本上中可能都有提及到——“类两军”和“拜占庭将军”问题。这里就不打算赘述,因为暂时跟主线不相关,感兴趣的同学可以去Google或者百度一下,你只需要知道,在我们下面即将展开讲到的区块链系统中,通过巧妙的设计,足以解决上述存在的BUG。


既然话已说到这份上,相信了解一点技术、特别是有运维背景的同学大概能够从极简交易系统中窥视到了更多区块链的一些影子——

  1. 分布式存储,通过多地备份,制造数据冗余
  2. 让所有人都有能力都去维护共同一份数据库
  3. 让所有人都有能力彼此监督维护数据库的行为


在我看来,你猜测的基本上没错。其实这些就是区块链技术最核心的东西,外人看起来高大上、深不可测,但探究其根本发现就是这么简单和淳朴。当然,这里面肯定会有很多很多很多细枝末节的技术需要重构。


如果你差不多认同上面的观点,那我们应该基本上可以达成共识,分布式部署肯定是构建去中心化网络理所当然的解决方向——通过P2P协议将全世界所有节点计算机彼此相互连接,形成一张密密麻麻的网络;以巧妙的机制,通过节点之间的交易数据同步来保证全球计算机节点的数据共享和一致。


哈哈,说的轻巧,“交易数据这么重要的东西,在一个完全不信任的P2P网络节点中以一种错综复杂的方式传递,数据的一致性和安全性谁来保证,如果说互相监督,他们到底怎么做到?”


好了,不卖关子了,下面让我们围绕这个最最最最直接的问题开始进入到真正区块链的世界,抽丝剥茧看看它到底是如何一步一步形成的,又是如何一步一步稳定运转。


# 从全球节点到交易数据

这张图的制作的意义为的是帮助你在宏观上先快速理解区块链中所涉及到的相关名词以及他们的层级关系。同时,文章的知识结构和设计思路也大抵上也会按照:

  1. 首先,将区块作为最小单位体,讲述极简区块链系统是如何运转的;
  2. 接着,进入到比区块更小单位体——交易记录,理解区块链是如何处理数据的;
  3. 最后,将所有知识点柔和在一起,重回到区块和区块链,完整讲述整个工作流程。


希望你在这个引导和结构下有一个比较好的阅读体验。Let's go~


# 区块,混沌世界的起源


既然已经达成共识,所以,我们事先构建好了一个去中心化的P2P网络;同时,为了让读者朋友们听起来更轻松,我先粗暴的规定在这个极简的区块链系统里,每十分钟有且仅产生一笔交易。


故事继续,在节点的视野里,大概每十分钟会凭空产生一个建立在自己平行宇宙世界的神奇区块(你可以将区块想象为一个盒子),这个区块里放着一些数字货币以及一张小纸条,小纸条上记录了这十分钟内产生的那唯一一笔交易信息,比如说——“小A转账给了小B100元”;当然,这段信息肯定是被加密处理过的,为的就是保证只有小A和小B(通过他们手上的钥匙)才有能力解读里面真正的内容。


这个神奇的区块被创造出来之后,很快被埋在了地底下,至于埋在哪里?没有一个人知道,所以需要所有计算机节点一起参与进来掘地三尺后才有可能找到(找到一个有效的工作量证明)。显然,这是一件工作量巨大、成果随机的事件。但是呢,对于计算机节点来说,一旦从地底下挖出这个区块,他将获得区块内价值不菲的数字货币,以及“小A转账给了小B100元”过程中小A所支付的小费。同时,对于这个节点来说,也只有他才有权利真正记录小纸条里的内容,这是一份荣耀,而其他节点相当于只能使用它的复制品,一个已经没有数字货币加持的副本。当然这个神奇的区块还有一些其他很特别的地方,后面我们会再细细聊。


为了更好的描述,我们将计算机节点从地底下挖出区块的过程叫做「挖矿」,刚才说了,这是一件工作量巨大、运气成分较多、但收益丰厚的事儿。


过了一会儿,来自中国上海浦东新区张衡路上的一个节点突然跳出来很兴奋的说:“ 我挖到区块了!里面的小纸条都是有效的!奖励归我!” 。虽然此刻张衡路节点已经拿到了数字货币,但对于其他计算机节点来说,因为这里面还涉及到其他一些利益瓜葛,他们不会选择默认相信张衡路节点所说的话;基于陌生节点彼此不信任的原则,他们拿过张衡路节点所谓挖到的区块(副本),开始校验区块内的小纸条信息是否真实有效等等。在区块链世界里,节点们正是通过校验小纸条信息的准确性,或间接或直接判断成功挖出区块的节点是否撒谎。(如何定义小纸条信息真实有效,后面会讲解,这里暂不做赘述)。


在校验过程中,各个节点们会直接通过下面两个行为表达自己对张衡路节点的认同(准确无误)和态度:

  • 停止已经进行了一半甚至99.99%的挖矿进程;
  • 将张衡路节点成功挖出的区块(副本)追加到自己区块链的末尾。


你可以稍微有点困惑:停止可能已经执行了99.99%的挖矿行为,那之前99.99%的工作不是就白做了嘛?!然后,区块链的末尾又是个什么鬼东西?


对于第一个困惑。我想说,你说的一点没错,但是没办法,现实就是这么残酷,即便工作做了99.99%,那也得放弃,这99.99%的工作劳苦几乎可以视为无用功,绝对的伤财劳众。第二个困惑,区块链和区块链的末尾是什么鬼?这里因为事先并没有讲清楚,但是你可以简单想象一下:区块是周期性不断的产生和不断的被挖出来,一个计算机节点可能事先已经执行了N次“从别人手上拿过区块 -> 校验小纸条有效性”的流程,肯定在自己的节点上早已经存放了N个区块,这些区块会按照时间顺序整齐的一字排列成为一个链状。没错,这个链条,就是你一直以来认为的那个区块链。如果你还是不能够理解,没关系,文章后面还会有很多次机会深入研究。


# 走进区块内,探索消息的本质


上面我们构建了一个最简单的区块链世界的模型,相信大多数同学都已经轻松掌握了。但是别骄傲也别着急,这还只是一些皮毛中的皮毛,坐好,下面我们准备开车了。


前面我们说到“大概每十分钟会凭空产生一个神奇的区块,这个区块里放了一张小纸条,上面记录了这十分钟内产生的这唯一一笔交易信息”。显然,十分钟内产生的交易肯定远不止一条,可能是上万条,这上万条数据在区块链世界是如何组织和处理的呢?另外,为什么在纸条上记录的只是某一次的交易信息,而不是某一个人的余额?余额好像更符合我们现实世界的理解才对。


既然存在这样那样的疑问。现在我们就把视线暂时从“区块”、“区块链”这些看起来似乎较大实体的物质中移开,进入到区块内更微观的世界里一探究竟,看看小纸条到底是怎么一回事,它的产生以及它终其一生的使命:

  1. 发起交易的时候,发起人会收到一张小纸条,他需要将交易记录比如说“盗盗转账给张三40元”写在纸上。说来也神奇,当写完的那一刹那,在小纸条的背面会自动将这段交易记录格式化成至少包含了“输入值”和“输出值”这两个重要字段;“输入值”用于记录数字货币的有效来源,“输出值”记录着数字货币发往的对象。
  2. 刚刚创建的小纸条立马被标记成为“未确认”的小纸条。从地下成功挖出区块并最终连接到区块链里的小纸条一开始会被标记为“有效”。若这条有效的小纸条作为其他交易的输入值被使用,那么,这个有效的小纸条很快会被标记为“无效”。因为各种原因,区块从链上断开、丢弃,曾经这个区块内被标记为“有效”的小纸条会被重新标记为“未确认”。
  3. 区块链里面没有账户余额的概念,你真正拥有的数字资产实际上是一段交易信息;通过简单的加减法运算获知你数字钱包里的余额。


上面的1、2、3仅仅作为结论一开始强行灌输给你的知识点,其中有几个描述可能会有点绕,让你觉得云里雾里,没有关系,因为我们立刻、马上就开始会细说里面的细枝末节。


上图,是区块内,盗盗在一张小纸条上记录下的交易信息,后被格式化的呈现


上图就是从无数打包进区块内的小纸条中,抽取出来的一张,以及它最终被格式化后的缩影。单看右侧的图可能很容易产生误会,虽然看起来有多行,但实际上就是“盗盗转账给张三40个比特币”这一条交易数据另外的一种呈现形态。因为区块链世界里面这么规定,每一条交易记录,必须有能力追溯到交易发起者 发起这笔交易、其中所涉及金额的上一笔全部交易信息;即这笔钱从何而来的问题。这其实很容易理解,在去中心化的网络中,通过建立交易链、和通过交易链上的可溯源性间接保证数据安全和有效。


我们继续看,在区块链世界里,我们是如何仅通过“盗盗转账给张三40个比特币” 这条交易信息完成转账流程的。其实跟现实中你在路边买一个包子的流程大抵上相同。


第一步:判断是否有足够的余额完成交易

这里我们再一次重申,在比特币的区块链世界里是没有余额的概念(以太坊的底层区块链有余额概念),余额是通过简单数字的加减最终获得,你拥有所谓的数字货币实际上是因为你拥一条交易记录,即 “盗盗转账给张三40个比特币”!这里,我们还是拿这条记录说事:


追溯“输出值”是“盗盗”相关的全部有效交易记录作为,对有效交易中的数字进行简单求和,判断是否大于等于40,如果确实大于等于,则将这些有效的交易记录合并形成一条新的交易记录(如下图)。如果小于40,其实可以不需要再继续往下探讨。


就上图的例子,我们追溯到曾经转账给盗盗的有效交易记录有“小A转账给盗盗10 btc”、“小B转账给盗盗20 btc”、“小C转账给盗盗 25 btc”,我们需要将这三条交易记录合并成一条更复杂描述的交易记录,即 “( 小A转账给盗盗10 btc + 小B转账给盗盗20 btc + 小C转账给盗盗 25 btc ) 转账给张三40 btc ”


第二步:判断是否需要找零

对追溯到的有效交易数字求和,如果发现大于需要支付的金额,需要将多出的数字重新支付给自己,相当于找零。对应生成了一条全新的交易记录(如下图)。


就上图例子来说,我们最后合并成的交易记录 “( 小A转账给盗盗10 btc + 小B转账给盗盗20 btc + 小C转账给盗盗 25 btc + 盗盗转账给盗盗15 btc ) 转账给张三40 btc ” 事实上等同于“盗盗转账给张三40 btc”。其中“盗盗转账给盗盗15 btc”就可以理解找零。


第三步:发出去,让全球节点认同和备份小纸条

这条内部重新处理过的复杂交易记录被塞进区块,埋到地下,等待节点挖出来,一旦区块被挖矿成功,并且该区块最终被连在了区块链的主链上。张三将最终拥有了这条交易记录,而先前的“小A转账给盗盗10 btc” 、“小B转账给盗盗20 btc” 、“小C转账给盗盗25 btc”都将被视为已经使用过的交易记录——从此被贴上“无效”的标签,意味着这些交易记录将永远不会再被追溯到。


我们最后一次重申,只是希望让你加深印象:拥有数字货币=拥有交易记录!


通过设计巧妙的精巧密码学保证数据安全


记录着交易信息的小纸条借助区块这个载体,在分布式的网络中以不同的轨迹错综复杂的传递,我们前面说了,你真正拥有的数字资产实际上是一段交易信息,而不是你常规意义上理解的货币。所以这个过程就需要重点解决两个问题:

  • 接受到的这条交易记录在传输过程没有被其他人所篡改
  • 接受到的这条交易记录确实是由发起交易的人所创造


在这里,我们需要事先引入两个知识点,可能稍微有点难消化,但都是计算机领域较为成熟的和基础的概念。


第一个知识点:SHA256()函数。你只需要知道,任意长度的字符串、甚至文件体本身经过SHA256函数工厂的加工,都会输出一个固定长度的字符串;同时,输入的字符串或者文件稍微做一丢丢的改动,SHA256() 函数给出的输出结果都将发生翻天覆地的改变。注意,SHA256()函数是公开的,任何人都能使用。

上图,仅仅一个小数点的变化,输出的结果已经翻天覆地


第二个知识点:非对称加密。你也只需要了解,任何人手里都有两把钥匙,其中一把只有自己知道,叫做“私钥”,以及一把可以公布于众,叫做“公钥”;通过私钥加密的信息,必须通过公钥才能解密,连自己的私钥也无解。公钥可以通过私钥生成多把。


有了这些知识点的加持,上面两个问题开始变得有解。下面我们来看下内部是如何扭转和工作的吧,这里拿“小A 转账给了小B 100元钱” 举例:

  1. 第一步:小A会先用SHA256函数对自己的小纸条进行处理,得到一个固定长度的字符串,这个字符串就等价于这张小纸条。
  2. 第二步:小A使用只有自己知道的那一把私钥,对上面固定长度的字符串进行再加密,生成一份名叫数字签名的字符串,这份数字签名能够充分证明是基于这张小纸条的。你可以这么理解,在现实中,你需要对某一份合同的签署,万一有人拿你曾经在其他地方留下的签名复制粘贴过来怎么办?!最好的办法,就是在你每一次签名的时候,故意在字迹当中留下一些同这份合同存在某种信息关联的小细节,通过对小细节的观察可以知道这个签名有没有被移花接木。步骤一和步骤二的结合就是为了生成这样一份有且仅针对这条小纸条有效的签名。
  3. 第三步:小A将「明文的小纸条」、刚刚加密成功的「数字签名」,以及自己那把可以公布于众的「公钥」打包一起发给小B。
  4. 第四步:当小B收这三样东西,首先会将明文的小纸条进行SHA256()处理,得到一个字符串,我们将其命名为“字符串2”。然后,小B使用小A公布的公钥,对发过来的数字签名进行解密,得到另外一个“字符串1”。通过比对“字符串1”和“字符串2”的一致性,便可充分证明:小B接受到的小纸条就是小A发出来的小纸条,这张小纸条在中途没有被其他人所篡改;且这张小纸条确实是由小A所编辑。


可以看得出来,加解密的过程几乎是一环套一环,中途任何环节被篡改,结果都是大相径庭。借助这一连串的机制,其实已经能够很好的在公开、匿名、彼此不信任的分布式网络环境中解决数字交易过程中可能遇到的很多问题。这个环节可能确实有点难理解,现在,我需要你停下来,静下心,花上几分钟闭目慢慢回味其中设计精湛的地方。


掌握了这部分知识以后,我们在这里回答一下前面没有解释清楚的问题,「节点对区块的检验」检验的到底是什么?实际上就是:

  • 检验区块内的交易记录签名是否准确(是否被篡改)
  • 检验区块内的交易记录输入值是否“有效”(是否使用过)
  • 检验区块内的交易记录输入值的数字之和是否大于等于输出值的数字


# 重回“区块”和“区块链”的世界


好了,对小纸条和交易记录的研究我们点到为止,其实信息量已经是巨大的了,让我们合上盖子,重回较大的实体、继续聊聊“区块”和“区块链”的话题。还记得,咱们在一开始讲到关于区块的特征吗?区块创造后被埋在地下,需要经过节点们马不停蹄的挖采、而且是凭运气的挖采才有可能获得——不仅仅如此,事实上他还有其他很多神奇的地方,比如说:

  1. 凭空产生的区块在刚刚创建的时候会形成一股强大的黑洞效应,它会尝试将这段时间全世界各个节点上产生的所有小纸条(交易记录)统统吸进来;在合上区块盖子之前,同时会在区块内放上一些数字货币以及其他一些东西。
  2. 区块拥有一个唯一的ID,但它只会在这个区块被节点成功从地下挖出来之后创建。这个ID至少会跟「区块内所有小纸条的集合」、「即将与之相连的上一个区块ID」以及「挖矿节点的运气值」等因素相关。既然前面我们已经简单了解了“SHA256()函数”这个东西,这里不妨透露给大家:“区块ID = SHA256(‘区块内所有小纸条的集合’+’即将与之相连的上一个区块ID’+‘挖矿节点的运气值’+’…’)” ;基于先前掌握的知识,然后你应该知道区块内任意一张小纸条的信息稍微做改动、或者节点挖矿运气好一点坏一点等等,当前区块的ID都会 “ biu~ ”的发生改变。


基于上述1、2点,如果阅读足够仔细的同学可能会有些头大。在文章开头为了更好的描述,我在设计简化区块链系统的时候故意模棱两可了几个概念,这也许已经误导到了部分同学。这里不得不停下来和你一起修正下之前在你大脑中已经构建的区块链世界观。我们前面讲道,“在节点的视野里,大概每十分钟会凭空产生一个建立在自己平行宇宙世界的神奇区块”。如何正确去理解这句话呢?——拥有上帝之眼的你,可以这么拆解问题、看待问题:

  1. 同一个周期内,全网并不是产生唯一的一个区块等待挖掘;每个节点事实上都在周期性的创造区块和挖出区块;只是在某一个节点的视野里,它不能感知到另外一个节点上区块的产生。为何这里要特别强调“在某一个节点的视野里”,就是因为我们刚刚讲到,从区块的视角来说,区块的凭空产生,是基于即将与之相连的上一个区块ID;而从节点的视角来看,区块的凭空产生是基于当前节点区块链末尾的那个区块ID产生的。
  2. 全网会尽力控制在一个周期内只有一个节点能够成功挖出区块,但是不能够完全避免多个节点同时挖出区块的可能性;如何尽力控制?比如说,当大伙挖矿的热情高涨、工作效率提高,区块会被埋在更深更广的地方等。简而言之,通过提高工作难度,来维持这个平衡。另外,值得注意的:产生区块、挖出区块、校验区块,他们的时间周期近乎相同。


对于想从技术角度更加深入理解“区块”、“挖矿”本质的同学们,你们可以移步至我的专栏《 探索比特币“挖矿”和“区块”的数学本质》,其中涉及到一些比较复杂的数学和技术细节,相信阅读完那部分内容之后,你对区块链会有更加透彻的认知。当然,对于绝大多数的吃瓜群众,看完那边内容可能会让你更加困惑,如果你不是十分的喜欢追根究底的话,我建议你还是直接选择跳过那块吧。至少在我看来,即便少了那部分内容,也不影响我们去理解区块链的魅力。


分叉


现在,我们终于对“区块”这个概念有了更全面的认识,文章开头讲的故事就可以继续展开来絮叨絮叨:


假如几乎同一时间,「中国上海浦东新区张衡路」上的节点和「美国纽约曼哈顿第五大道」上的节点异口同声喊出来:“我挖到区块了!里面的小纸条都是有效的!奖励归我!”。其他节点也几乎同时参与了对这两个区块的校验,结果发现这俩都没毛病,各节点也开始犯困,因为在他们的视野里他们并不清楚最后哪一个区块应该会被主链接纳。算了!都连在自己区块链尾巴上吧,这时尴尬了,区块链硬生生的被分叉了!

产生分叉


你肯定在想,那还得了,这种情况继续下去,每个节点的区块以及他们整理维护的小纸条都将变得不一样,这已经严重违背了区块链世界里第一大最基本原则——所有节点共同维护同一份数据。所以,为了解决这个问题,区块链世界引入了一条新的规则——拥有最多区块的支链将是真正被认可有价值的,较短的支链将会被直接Kill掉。


我们大伙都知道挖矿的过程存在巨大的工作量(如果没有任何难度,把区块扔在人群中,必然同一时间发现区块的节点数量将大大增加,也就会产生无数的支链,通过这个例子,你大概也就能够明白,比特币的区块链世界为什么需要设置工作难度了吧),并且在计算机的硅基世界里,不可能出现所谓 “同时” 的概念,哪怕纳秒的差别,那也总是会有先后顺序。所以理论上,“分叉”的这种僵局很快会在下一个区块被挖掘出来(以及校验区块)的时候被打破,实在不行下下个,或者下下下个……总之机制可以让整个分叉的区块链世界迅速稳定下来。


“分叉”这种僵局在确认下一个区块(以及校验小纸条)的时候被打破,从而整个区块链世界迅速稳定下来


就上图而言,所有基于张衡路节点挖矿获得的区块以及后续区块的那条分支被视为有价值,最终会全部保留了下来;其他节点会统一效仿那个拥有更长分支链的节点所做的决策。另外,值得一提的是,同一时间,较短分支上的区块会立即丢弃,而里面的小纸条也会随之释放出来,被重新标记上“未确认”。


“双花”与“51%攻击”


你可能已经开始困惑或者有点兴奋,末尾几个区块的排序在修复过程中,因为时间差肯定会产生一些模棱两可的地方,这往往会给数据安全埋下一颗雷。一个最简单的假设——我记录的一张小纸条很不巧地被归在了一条较短的支链上,这条支链在竞争过程中理所当然输掉了比赛,区块被丢弃、小纸条被无情的贴上“未确认”的标签。在等待下次区块重新确认的过程中,这个时间差内,我,好像、似乎可以做点什么坏事 ԅ(¯﹃¯ԅ) ,就比如说“双花”(双花,花两次,双重支付的意思)


你脑海中也许很快浮过的这样的构想,可不可能通过下面这种方法触发双花问题的产生,从而让我不劳而获:


  1. 假设有一个名叫X-Man的坏家伙,他控制了一个计算机节点,这个节点拥有比地球上任何一个节点算力都强大的计算机集群。
  2. 首先,X-Man事先创造了一条独立的(不去广而告之)、含有比较多区块的链条。其中一个区块里放着“X-Man转账给X-Man 1000元”的纸条。
  3. 接着,X-Man跟张三购买了一部手机,他在小纸条上记录下“X-Man转账给张三1000元”。张三已经比一般的卖家谨慎了,他在这条信息被三次确认后(即三个区块被真实挖出、校验和连接)才将手机给了X-Man。按照我们之前的理解,这条交易记录已经板上钉钉永远无法被串改。
  4. X-Man拿到手机之后,按下机房的开关,试图将先前已经创造的区块链条连接在自己这个节点区块链的末尾。
  5. 大功告成,X-Man拥有了一条更长的区块链条,那些较短、存放着“X-Man转账给张三1000元”的区块链,以及在区块链世界里那则真实转账行为被一同成功销毁。(???)


事实真的如此吗?在这里我可以很负责任的说,too young too simple,区块链世界规则的制定远比我们想象的要健全很多,还记得我们之前讲的“区块的ID至少会跟区块内所有小纸条的集合、即将与之相连的上一个区块ID、当前产生区块的时间戳以及挖矿节点的运气值等因素相关”。 在这里,正是因为打算连接到主链的过程中,主链会立马意识到,那条事先准备的链子(的第一个区块)的时间戳存在异常,不属于当前区块链世界里线性增长的时间戳,于是马上意识到这个事先准备的链子(的第一个区块)是无效的,需要重新计算。


在区块链的世界,重新计算的行为等同于把自己(节点)置身于同一个起跑线,跟世界上其他所有的节点一同竞争挖矿。你会说,我拥有更强大的计算能力,但是对不起,跟你竞争的对象并不是第五大道、南京西路、香榭丽舍大道上的某一个节点,而是全球所有算力的集合,在这个集合中,你拥有的算力永远都只是一个很小的子集。所以,根据区块链算力民主、少数服从多数的基本原则,这个构想将永远不会成立。


除非....


你控制着全球51%的算力,这也就是区块链世界里另外一个著名的概念,叫做“51%攻击”,但这也仅仅是一个理论值,在真实世界里这样的攻击我个人觉得是很难发动起来的,这里面就牵涉到很多经济、哲学甚至政治的因素。举个最简单的例子:X-Man为了回滚刚刚发生的一笔交易记录,成功发起了51%攻击,这意味着很快整个区块链系统将会崩盘,因为这次攻击已经严重伤害到人们对这套系统的信任,接着比特币开始暴跌至几乎一文不值;但是这个拥有51%算力的X-Man原本完完全全可以通过挖矿的方式获取更多收益,购买无数的iPhone手机。那他不是脑袋不是坏了还能是啥?对51%攻击话题感兴趣的同学可以阅读这篇文章《 什么是比特币51%攻击?》。


至此,我觉得区块链最基础、最核心的知识已经全部讲完了(除了挖矿内部实现原理,作为一个遗憾留在这里,有时间会完善掉),相信你已经对它有了一个宏观的认识。另外,由于这篇文章采用了适当抽象、类举的叙事方式,中间或多或少有些地方会跟区块链底层严谨的技术实现有出入,欢迎大家来纠错。另外,也是受限于自己知识结构的缺失,这篇文章会随着我对区块链更深入认识后,随时进行修订,最后更新时间可参考该回答下方的时间戳。


--

问答部分


去中心化的系统中,到底是谁在发行货币?是无限量发行吗?

比特币的货币是通过挖矿(工作量证明)来发行的,总数量是通过程序写死了2100万个,而第一笔区块奖励也是硬编码写死的。矿工挖出一个区块所获得的奖励,每隔21万个区块将减少一半,按照平均10分钟挖出一个区块的执行效率,也就就说差不多每四年会锐减一次。2009年1月起每个区块奖励50个比特币,2012年11月减半为每个区块25个比特币,2016年7月减半为12.5个比特币。基于这个规则,到2140年,所有比特币(20,999,999,980)将全部发行完毕,之后不会再有新的比特币产生。


矿工节点的收益除了挖出区块以外还有哪些?

矿工节点的收益主要由两部分组成:1)挖出新区块的奖励;2)挖出新区块内所含交易的交易费。但就目前来说,一个区块内的交易费大概只占到矿工总收入的0.5%甚至更少,大部分收益主要还是来自于挖矿所得的比特币奖励。然而,随着挖矿奖励的递减,以及每个区块中包含的交易数量增加,交易费在矿工收益中所占的比重将会逐渐增加。在2140年之后,所有的矿工收益将完全由交易费构成。


是不是只有成为节点才能进行交易?、钱包、尤其是轻钱包是不是也可以挖矿?

这个问题是读者问出的,可能之前也有同学提出过类似的问题,但是没有引起我足够的重视,后来发现其实我也把概念混淆了。我一并去查阅了相关资料,对节点和钱包有一些更完整的理解和定义。详细请阅读我的专栏文章《 区块链节点与钱包的分类、边际和使命,看这篇文章就足够了》


参考

  • 中心化与去中心化 douban.com/note/6244212
  • 图说区块链 book.douban.com/subject
  • 区块链是什么,如何简单易懂地介绍区块链? zhihu.com/question/3729
  • 什么是比特币51%攻击? 8btc.com/article-1949-1
  • 区块链与新经济:数字货币2.0时代 book.douban.com/subject
  • 詳解比特幣原理和運行機制 youtube.com/watch?
  • 区块链是什么:从技术架构到哲学核心 v.qq.com/x/page/x0518nu
  • 区块链核心算法解析 book.douban.com/subject
  • 深入理解比特幣的安全性及程式交易安全性與相關的密碼學原理 youtube.com/watch?
  • 深度了解区块链——拜占庭将军问题深入探讨 wallstreetcn.com/articl
  • 精通比特币-挖矿与共识 zhibimo.com/read/wang-m
编辑于 2022-08-16 09:47

更新:将私信问答放在了最后


-----正文-----


事情是这样的,最近我的室友Hasaki一直在问我区块链和比特币的事情,我尝试了很多种不通的姿势以求简单通俗形象生动地跟他解释什么是区块链技术,但是最后都失败了。因此我萌生了要写一篇BlockChain for Babies(又名:如何向你的弱智室友解释区块链)的想法,以求能简单直观生动形象地向对区块链技术不了解但是想知道区块链是什么的人介绍区块链技术或者比特币。


因为面向的读者是不想知道具体技术实现只想了解区块链的人群,因此本文避开了一些底层和算法细节,采用比较主观的方式来展示笔者对区块链技术的感性认识。如果你只是对区块链感兴趣,并没有深入学习的打算,或者只是想像我一样在别人问起来的时候装逼,本文应该是一篇很好的“导论”。


总览

区块链本质上是一个去中心化的分布式账本数据库(感谢 @程剑宇指出:在与比特币相关的区块链应用中可使用这一术语,但区块链技术可能并不包含“账本”)。其本身是一串使用密码学相关联所产生的数据块,每一个数据块中包含了多次比特币网络交易有效确认的信息。

这是区块链的定义,因此要逐步了解区块链,我们需要一步步了解如下东西。


去中心化

先来考虑一个中心化集中式处理的过程。你要在某宝上买一部手机,交易流程是:你将钱打给支付宝-支付宝收款后通知卖家发货-卖家发货-你确认收货-支付宝把钱打给卖家。

图1: 中心化集中式交易模式

在这个过程中,虽然你是在和卖家交易,但是这笔交易还牵扯到了除了你和卖家的第三方,即支付宝,你和卖家的交易都是围绕支付宝展开。因此,如果支付宝系统出了问题便会造成这笔交易的失败。并且虽然你只是简单的买了一个手机,但是你和卖家都要向第三方提供多余的信息。因此考虑极端情况,如果支付宝跑路了或者是拿了钱不却不承认你的交易或者是支付宝所在的城市因为开G20把所有人都赶走了(?),那么你就悲剧了。


而去中心化的处理方式就要显得简单很多,你只需要和卖家交换钱和手机,然后双方都声称完成了这笔交易,就OK了。


可以看出在某些特定情况下,去中心化的处理方式会更便捷,同时也无须担心自己的与交易无关的信息泄漏。


其实如果只考虑两个人的交易并不能把去中心化的好处完全展示出来,设想如果有成千上万笔交易在进行,去中心化的处理方式会节约很多资源,使得整个交易自主化、简单化,并且排除了被中心化代理控制的风险。


去中心化是区块链技术的颠覆性特点,它无需中心化代理,实现了一种点对点的直接交互,使得高效率、大规模、无中心化代理的信息交互方式成为了现实。


当然,上述的例子有一个很大的潜在问题:没有了权威的中心化代理,怎样保证每笔交易的准确性和有效性呢?比如:如果没有了权威的中心化代理,张三某一天借了我100块钱,但是不还钱还不承认怎么办?这里就引出了区块链的其它特性。


两个基础难题

在去中心化以后,整个系统中没有了权威的中心化代理,信息的可信度和准确性便会面临问题。


问题1:类两军问题

第一次听说这个问题居然是在TCP的课上,大致说的是有两个相距很远的军队要传递信息,红军派遣一个信使去跟蓝军说:“你他娘的把意大利炮拿出来!”。蓝军收到信息后又派了一个信使去红军说:“收到指令!”。然后红军又派一个信使去蓝军说:“知道你收到指令了!”。然后蓝军又派一个信使去红军说:“知道你知道我收到指令了!”。然后红军又派一个信使去蓝军说:“知道你知道我知道你收到指令了!”……然后就没完没了了。

图2:在分布式计算中在异步系统和不可靠的通道上达到一致性是不可能的

在这种情况下,因为是点对点的通信,双方不可能在这种情况下达到信息的一致性。严谨一点,就是“在分布式计算上,试图在异步系统和不可靠的通道上达到一致性是不可能的”。


问题2:拜占庭将军问题

拜占庭罗马帝国在军事行动中,采取将军投票的策略来决定是进攻还是撤退,也就是说如果多数人决定进攻,就上去干。但是军队中如果有奸细(比如将军已经反水故意乱投票,或者传令官叛变擅自修改军令),那怎么保证最后投票的结果真正反映了忠诚的将军的意愿呢?


拜占庭将军问题反映到信息交换领域中来,可以理解为在一个去中心的系统中,有一些节点是坏掉的,它们可能向外界广播错误的信息或者不广播信息,在这种情况下如何验证数据传输的准确性。


区块链技术的诞生

现在让我们来一步一步在去中心化的系统中解决这些问题,见证区块链技术雏形的诞生。


1

我们先来建立一个去中心化的系统,为了方便理解,我们来看一个简单的去中心化借贷模型:如果A借了B 100块钱,这个时候,A在人群中大喊“我是A,我借给了B 100块钱!”,B也在人群中大喊“我是B,A借给了我100块钱!”,此时路人甲乙丙丁都听到了这些消息,因此所有人都在心中默默记下了“A借给了B100块钱”。你看,这个时候一个去中心化的系统就建立起来了,这个系统中不需要银行,也不需要借贷协议和收据,严格来说,甚至不需要人与人长久的信任关系(比如B突然又改口说“我不欠A钱!”,这个时候人民群众就会站出来说“不对,我的小本本上记录了你某天借了A100块钱!”)。

图3:去中心化借贷模型

2

可能你已经发现了,在上述的模型中,所谓的“100块钱”已经不重要了。换句话说,任何东西都可以在这个模型中交换,甚至你可以凭空杜撰一个东西,只要大家承认,你就可以让你杜撰的东西流通。比如:我在人群中高喊一声“我创造了10个查克拉!”,我甚至不需要知道查克拉是什么,也不需要关心世界上是不是真的有查克拉,只要大家都听到,然后在自己的小本本上记下“LaiW3n有10个查克拉”,于是我就真的有100个查克拉了。从此以后,我便可以声称我给了某人1个查克拉,只要路人甲乙丙丁都收到并且承认了这一信息,那我就算完成了这次交易,哪怕世界上没有查克拉。

你现在脑海中是不是浮现出了三个字——“比特币”?由于真正的区块链和比特币比我上述的模型复杂太多,细节也丰富太多,因此以下还是以查克拉举例,毕竟本文是Blockchain for Babies.(笑)


3

假设过了很长一段时间,我凭空创造的查克拉已经在这个系统中流通了起来,大家都开始认可了查克拉。但是这个系统中一共就只有10个查克拉,于是有人动了坏心思,他在人群中高呼“我有10个查克拉!”怎么办?大家是直接在本本上记下他有10个查克拉么,这样不是人人都可以伪造查克拉了么?

为了防止这种现象发生,我决定在我创造查克拉的时候给我的查克拉打上标记(更准确地说,我是给我喊的那句“我创造了10个查克拉”打上标记,比如标记为001),这样以后在每一笔交易的时候,我在高喊“我给了某某1个查克拉!”的时候,会附加上额外的一句话:“这1个查克拉的来源是记为001的那条记录,我的这句话标记为002!”。我们再抽象一点,某人喊话的内容的格式就变成了:“这句话编号xxx,上一句话的编号是yyy,我给了某某1个查克拉!”,这样就解决了伪造的问题。其实上述模型就变成一个简化的中本聪第一版比特币区块链协议:

图4:查克拉模型和中本聪第一版区块链协议对比图

好了,看到这里你基本已经能够生动形象又不涉及任何细节地向你的弱智室友解释区块链了。但是也许你的室友是一个有打破沙锅问到底精神求是学子,因此你最好继续准好回答以下这几个问题。


1. “凭啥?”

你室友可能会问:“凭啥你喊一句话我就帮你记?我的小本本不要钱么?”。为了激励大家帮我传话和记账,我决定给第一个听到我喊话并且记录在小本本上的人一些奖励:第一个听到我喊话并记录下来的人,你就凭空得到了1个查克拉,这个查克拉是整个系统对你幸苦记账的报酬,而你记录了这句话之后,要马上告诉其它人你已经记录好了,让别人放弃继续记录这句话,并给你自己的记录编号让别人有据可查,然后你再把我的话加上你的记录编号一起喊出来,供下一个人记账。


当这个规则定下以后,这个系统中一定会出现一批人,他们开始竖着耳朵监听周围发出的声音,以抢占第一个记账的权利。对的,你脑海中是不是又浮现出了“比特币挖矿”的字眼?


值得一提的是,关于比特币挖矿, @玲珑邪僧举了一个很形象的例子:

单身汪们要找女票,国民岳母说我有好多女儿,这样吧我给你们出点题目,解出一个就给其中一个姑娘的微信号。

单身汪们疯狂竞争,想破脑袋去解题。只要其中一只汪解出一道题,就立马得意洋洋地昭告天下,示威全部单身汪,这个姑娘是我的啦,你们放弃吧。其他单身汪们即使不服也没有办法,惆怅懊恼也不是个事儿啊,还是麻溜地立马去解下一道题目吧。这只喜赢姑娘的幸运小汪被岳母认可后还能得到25个货币单位的彩礼,简直人生赢家。


2. “听谁的?”

在这个系统中,如果我和另一个人C几乎同时地喊出一句:“为了艾泽拉斯!”。由于听众所处的位置不同,一定会有人先听到我说的那句话,而另外一些人则先听到C的那句话,如果我们规定只能有一个人说出这句话,那到底这句话是谁说的?


如果不加任何条件,那么上述的情况一定会这样发展:一部分人认为这句话是我说的,在听到这句话之后开始记账,之后他们所做的所有事情都是基于这个事实,并且随着这个信息一次次的传下去,这条信息链会越来越深;而另外一群认为是C先说这句话的人,也会按照这样的趋势发展。这样,原本是一条唯一的信息链,在我们喊出“为了艾泽拉斯”这句话之后,分叉了!?

图5:“区块链”分叉


这会导致怎样的情况呢?按照我们的设想,应该每个人的小本本上记录的东西都是一样的,都是一条可以把所有信息串联起来的链条。但是在这一刻,他们小本本上记录的东西不一样了!这还玩毛啊?以后还怎么确定交易和信息的真实性!?


为了解决这个问题,我又追加了新的规则:每个人在记录小本本的时候,需要脱鞋然后用脚拿笔,在小本本上用正楷体书写!有了这个规定,由于用脚写字难度很大,每个人至少需要10分钟才能写完,而且由于每个人用脚写字的熟练度不通,写完这句话所用的时间也不同,因此一定会有人先写完然后高呼“我写完了!那句话是LaiW3n喊的!”,这样其它正在写这句话的人便会停笔,然后在小本本上重新开始写“那句话是来文写的,上一句的编号是xxx”。


如果你对上述我的解决方法感兴趣,你可以对照我上面的比喻去了解以下知识:

“听谁的”——中本聪破解“拜占庭将军问题”的算法

“在小本本上记录”——比特币挖矿

“脱鞋用脚写字”——比特币挖矿难度

“脱鞋写字速度”——算力

“新的规则”——工作量证明链


3. “双花”问题

这个时候你的室友可能又要问:如果我同时宣布我给了A一个查克拉和我给了B一个查克拉,但是我只有一个查克拉,那咋整?是A和B都收到了查克拉还是咋地?


这个时候你只需要托起他的下巴,温柔地看着他的眼睛,用手刮刮他的鼻子,说:“小妖精,你把这种情况带到上面的规则中去试试?”


--------------

一些私信问题讨论:


1. 为何目前还鲜有区块链和实体商业业务对接的案例?

从理论上:区块链是一门新技术,保守大众(包括我)还处在观望阶段,只有少数激进或者目标明确的实体开始向区块链进军,而这些少数的实体在现阶段发声的强度还不够。

从应用上:区块链技术要与实体商业对接,在技术和规则上还需要进一步开拓,区块链解决的所谓“不信任”问题其对象也只局限于区块链上的数据。因此如果区块链要与实体业务对接,还需要进一步推动实体与数据之间跨域的“游戏规则”的建立。


2. 虚拟加密货币最终是否会走向庞氏骗局?

这个问题我也不太好回答,毕竟我是一个技术人员而非这个领域的弄潮儿。我个人的看法是:对于普通人,不建议长期持有某种数字货币,应将数字货币作为法币之间转换的桥梁;对于投机者,“炒币”需谨慎,应将风险控制在自己能够承受的范围内。PS:其实我真的不关心这个问题。


3. 为什么听你一讲,感觉区块链很弱智的样子?

我在文中已经说明,这只是一篇关于区块链技术的新人导论,其目的在于帮助你快速对区块链有一个感性的认识;如果真的想了解区块链技术细节,请阅读相关文献或访问区块链社区。


4. 工作机会

感谢各位热情的HR,但我现在暂无跳槽的打算。


5. 转载

个人可以转载,请注明来源并告知我一声;商业组织或作为商业用途,请私信。

编辑于 2016-09-29 16:03

关于这个问题,大家技术层面上已经说了不少,网上也有很多文章,但对于普罗大众来说,要理解这个技术性问题还是比较难。在这里我尝试从经济学和常识的角度说一下自己的理解,看能不能让外行人明白个大概:

区块链:一个颠覆旧模式的新技术


就像人们很容易忽略看不见却倏忽不可或缺的氧气一样,人们也经常会忽略市场经济中一样至关重要的东西,这就是“信任”。

假如没有信任,任何交易都不可能成立。你到菜场买菜,如果你怀疑蔬菜中农药含量过高,你就不会跟那个菜贩子交易;你到小店买瓶水,假如店员质疑你给的是假钞,就不会把水卖给你。

传统小农经济是熟人经济,交易规模仅限于村镇范围内比较熟悉的人们之间,出了交通因素外,“信任”也是很大的因素。一旦超出熟人范围,信任成本急剧增大,将阻碍交易的发生,限制交易范围的扩大。此外,不同种族、民族、文化、宗教信仰等等,都会形成信任的鸿沟。

陌生人之间由于缺乏相互了解,缺乏必要的信任,交易难于发生。市场经济却是大量发生在陌生人之间。市场经济之所以发生、发展,在于诞生了新的机制,解决了陌生人间的信任问题。

到目前为止,解决信任问题的最重要的机制,就是“信任中介”机构和模式。你和陌生人间都信任的第三者是信任中介,政府是信任中介,银行是信任中介。你把辛苦生产出来的商品卖给一个陌生人,收到几张花花绿绿的纸钞,如果没有发钞银行的信用、政府权威的保证,你是不会接受的。

到了如今全球村时代、互联网时代,你把商品卖给甚至永远不会见面、千里之外的陌生人,没有信任中介的保证,交易更是不可能发生。支付宝承担起信任中介作用,所以淘宝等电商在短短十几年间快速繁荣起来。

信任中介在整个庞大的交易体系中,扮演着一种中心化的重要角色。这是一种中心化的机制或模式,已经存续了几千年,帮助人际间降低信任成本,从而促进交易的发生、交易频率的增加、交易范围的扩大。

然而,信任中介本身也是需要成本的,而且常常还很巨大。设想一下:每年交给政府的税收,占到一般人收入的30~40%;如今最赚钱的行业是哪个?金融服务业;拥有支付宝的蚂蚁金服年利润超过百亿,马云成了中国首富。所有这些现象反过来想,对于普通人来说,就意味着极为庞大的信任成本。(当然交易成本中不全是信任成本,但信任成本占了很大一块。)

如果有什么办法,能取消或者大幅降低这种信任成本,那么普通大众的交易费用可减少,可享受的福利可大幅增加。在互联网时代,区块链技术上场了。

是的,区块链本质上是一种解决信任问题、降低信任成本的信息技术方案。区块链技术的应用,可以取缔传统的信任中介,颠覆传统上存在了几千年的中心化旧模式,在不需要中心化信任中介的情况下,解决陌生人间的信任问题,大幅降低信任成本。

这也是通常几乎所有关于区块链的介绍文章中,都会提到的“去中心化、去信任”的意思。但是“去信任(trustless)”的说法容易误导,会让普通人感到莫名其妙,因为任何时候的交易都必须基于信任。实际上,把“去中心化、去信任”,理解成“去除信任中介”,就会容易明白得多。

区块链技术所改变的,不是去除信任,而是将传统上交易中对中心化信任中介的信任,变成对区块链系统本身、对于记录在区块链上的数据的信任。基于区块链技术的交易模式中,不存在任何中心机构,不存在中心服务器。所有交易都发生在每个人的电脑或手机上安装的客户端应用程序中。

假如未来普遍使用区块链技术,今后你不用再跑去银行证明你的收入和资产,也不用跑去派出所证明你是否已婚,不用让单位人事证明你的雇佣关系,也不用再去敲没完没了的红色公章和看各种难看的脸色……所有这些都记录在不可篡改的区块链上,在你需要和授权的时候,似乎全世界都能成为你的证人。

这是如何实现的?这涉及到技术层面,说来话长,但简单地说,从区块链技术的第一个应用(所谓的区块链1.0),也就是大众比较熟悉的比特币(Bitcoin)的工作原理可以大致明了。

区块链的概念最早于2008年在比特币创始人,中本聪的论文《比特币:一种点对点的电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)》中首次提出。区块链可以理解为一种公共记账的技术方案,其基本思想可以这样理解:通过建立一个互联网上的公共账本,由网络中所有参与的用户共同在账本上记账与核账,每个人(计算机)都有个一样的账本,所有的数据都是公开透明的,并不需要一个中心服务器作为信任中介,在技术层面就能保证信息的真实性、不可篡改性,也就是可信性。

数据的不可篡改性至关重要。因为系统会自动比较,会认为相同数量最多的账本是真的账本,少部分和别人数量不一样的账本是虚假的账本。在这种情况下,任何人篡改自己的账本是没有意义的,除非你能够篡改整个系统里面大部分节点。对于一个由成千上万个、分布在全球各个角落的客户端组成的区块链系统,除非某个人能控制世界上大多数的电脑,否则不太可能篡改这样大型的区块链。

在这种情况下,在区块链上记录的每一笔交易,都保持真实可靠,同时公开透明,能够被其他人查看(但交易者个人或机构可以是匿名的),所以就形成了一种不需要对陌生交易对手了解和信任,只需看到区块链上交易对手的货币、资产等本身是可信的,就可以放心地交易。这里不需要任何信任中介,也就是所谓的“去信任”的真实含义。

因为区块链具有可大规模扩展、数据公开透明、以及因为每个客户端数据一致,即使部分客户端被毁也不影响数据安全的可靠性等技术特点,特别是能有效解决陌生人间的信任问题,所以这个技术可推广到所有可以数字化的领域,比如数字货币、支付清算、数字票据、权益证明、征信、政务服务、医疗记录等。可以说,区块链技术如果发展起来,将来会跟每个人息息相关。


这是近期一篇长文章中的第二节科普内容。全文请见链接: 22岁辍学生,创下全球最高众筹记录,他会是下一个扎克伯格?

发布于 2016-05-25 17:16

前两天有个混金融圈的发小微信问我,现在区块链创业靠不靠谱。聊了几句后我告诉他,区块链靠不靠谱我不知道,但我知道你对区块链有着严重的误解。


于是我就简单跟他讲了讲区块链是什么,之后意犹未尽,打算写出来让更多人看到。当然,我个人不是专业学者,理解或许有偏差,力求严谨,但如有错误烦请告知我。


我理解的区块链是对以往中心式记账体系的颠覆,也就是实现了『去中心化』。这个概念最早在”比特币之父“中本聪在2008年发表的论文”Bitcoin: A Peer-to-Peer Electronic Cash System“(比特币:一种对等网络电子现金系统)里提出:

所以想了解区块链,就必须了解比特币。而我久仰比特币的大名,于是拜读过这篇文章,也查过一些背景资料。这个回答就基于我的这些有限了解,谈一谈区块链。同时也推荐有能力的朋友,亲自读一读这篇文章。


为了便于区块链的介绍,我打算讲一个故事。


【1:一个公共账本】


假如你现在在上大学,你们寝室是标准的四人寝,除了你之外还有小王,小黄和小白三个室友。平时你们亲是内部的活动很多,于是经常会有人垫付饭钱,车费,还有水电费。你们大家发现,如果每次消费后,都要一一计算交结非常麻烦,于是你们决定采用记账的方案。


于是乎,你们买了一个公共的账本,本次产生消费后,就由付钱的人在账本上记清楚,谁应付给自己相应的金额。如此一来,只要每月月末统一结算即可,大大节省了时间精力。


时间一长,你们发现在纸上记账还是麻烦。于是你们决定”升级“这个账本,改成在电脑种建立一个excel表格,比如这个样子:


但问题是,如果你们寝室里有个人不厚道,偷偷修改账本怎么办呢?


例如小王把自己要付钱记在了小白头上。如果这个问题不能得以解决,那这个账本的信用就将会大大折扣。


【2:每个人都有账本】

区块链采用的解决方案就是,给四个人每人都配备一个账本。需要记录时,就由对应的操作人高喊交易内容,广播给寝室里的所有人。


例如,小王高喊,”小王需要支付给小白30元 “。然后寝室里其他人听到了,就在各自的小本本上记下,”小王需要支付给小白30元 “。


如此一来,就算小王故意使坏,把自己要付的钱记在别人身上,那也只能是篡改自己的账本。这样到月底时,小王的账本和其余三个人对应不上,便能知道小王的账本有问题。


但这个系统仍然存在一个问题,那就是如果小王恶作剧,不负责任的乱喊“小白需要支付给小王100元”。如此一来,很可能会有不明真相的舍友记录下来。


因此,分布式的账本还由一个急需解决的问题,如何确认收到的一笔交易记录是否有效?


【3:在交易记录后签名】

这个问题在纸质帐本里很好解决,那就是在每一条记录后,由需付款的一方加上自己的手写签名,以示自己认可这笔记录。这个思路换到计算机中就是数字签名,所以我们要求每一笔记录后面,都要由需付款的一方加上自己的数字签名。

数字签名在这里就不具体解释了,大家只需要知道,帐本系统里的任何人都可以验证数字签名是否正确可信。


【4:账本的改进,比特币的诞生】

上面这个账本还存在一些问题,使得只适合小范围使用,如果扩大到更大的范围,比如整个学校使用,这个时候交易量和用户数剧增,记录就会变得非常麻烦。


比特币正式为了解决这个问题而对前面介绍的账本系统的改进。


4.1改进一:交易单位为比特币BTC

我们之前用的账本里面的交易单位是人民币,但在比特币系统中,我们的交易单位变为比特币。


4.2改进二:讲记账改为事实交易支付

之前的账本我们越好是月底结账,而现在我们把交易单位改成了虚拟的比特币,交易也由月底统一交割改为事实交割。而比特币就像是账本上的数字,随时都可以视大家的意见进行”套现“,即在现实中交割。


如此一来,我们就需要确保每个人的账户里有足够的比特币进行交易。也就是确定任何一笔交易的前提就是付款方的比特币账户中有足够的比特币用于支付。


传统银行系统中,银行会记录储户的账余额,判断储户是否能够进行转载。这个很好理解,我在网银里操错向某账户转账一个亿,但我账户里显然没有这么多钱,因此银行系统会认定交易失败。


但比特币系统并没有一个“银行式”的权威中心,所以不能像银行这种操作方式。比特币的解决方案是,每笔交易不以余额为基础,而是以以前的交易为基础。


比如,“小王支付给小黄50BTC”的前提是自己曾经收到过多余50BTC。因此小王的交易记录需要包含自己之前的交易信息,举个例子:

  • 小白支付给小王40BTC
  • 你支付给小王20BTC
  • 小王支付给小黄50BTC

我们忽略比特币的源头,及它是如何产生的事,先继续往下看。这个时候小王需要广播的交易信息就是:

  • 之前交易:小白支付给小王60BTC,你支付给小王60BTC-->
  • 当前交易:小白支付给小黄20BTC,你支付给小黄10BTC,你支付给小黄10BTC。

这里说一句,“你支付给小王20BTC”中的20BTC是一个整体,无法分割,因此无法只从中拿出10BTC交易。

我从Bitcoin Explorer上找个例子,见上图。这是一个实际交易记录,用户A从自己的62.69个BTC中,转给了用户B和C分别0.048和0.498BTC,然后把剩下的62.15BTC转给了自己。


4.3改进三:不留证明,改留比特币账号

如上图,用户A并不用留下自己的名字,而是用一个字符串来代表自己进行交易:

  • 1H6ZZpRmMnrw8ytepV3BYwMjYYnEkWDqVP

同理,用户B和C也是如此,只留下了一个字符串。所以你们室友在帐本里都不写名字,而是写下跟各自对应的字符串,即比特币账户。虽然对于你们四个人的寝室这纯属脱裤子放屁,但如果对于规模更大的系统,比如前文提到的整个学校而言,这种操作可以极大提升隐私性。

我们只能知道每个账户,而无法知道谁拥有这个账户,这就保证了隐私性。


【5:交易记录的存储:区块链】

从这一节开始进入正题。前面我们提到了这个账本是分布式存储的,每个人都有一个自己独立管理的账本。


当这个账本系统变得很大时,一致性问题就必须要考虑。比如,如果你有室友在交易记录发布时不在寝室,那么他就错了这次消息,使得这次消息不会出现在他的帐本里。


换回比特币系统,也就是部分电脑可能处于关机或者未联网状态,会错过部分交易。此外,还可能会有黑客入侵部分电脑,篡改交易记录。


此外,还有一个更严重的问题就是,实际网络拓扑非常复杂,链路质量的随机性很大。因此,如果用户A(假设账户里有10BTC)连续广播两条相互矛盾的消息,比如:

  • 交易信息1:用户A支付10BTC给B;
  • 交易信息2:用户A支付10BTC给C;


有的读者应该会觉得,那我们就采信先收到的交易信息1,忽略与之矛盾的脚印信息2不就行了。


但问题是,因为网络链路的复杂性,所以很可能存在部分用户先收到交易信息1,又有部分用户先收到交易信息2。如果依靠先后顺序辨别有效性,那么就会存在不同用户记录的交易信息不一致。


为了解决这个问题,中本聪提出了区块链的概念。


每个用户如果愿意,都可以整理自己从网络中接收到的交易信息,然后检查其是否合理(每笔交易是否由足够余额?数字签名是否正确?)后,再将交易记录打包成一个区块。


因此每个交易记录都是以区块的形式存储,然后再广播到系统中的其他用户中。而区块之间相互连接,形成一条由系统内全体用户共同维护的区块链。



因此其他用户收到广播的区块时,就会把这个区块加到自己维护的账本,也就是区块链的尾部。


但如果只是这样,并没有解决任何问题。互联网节点遍布全球,广播过程也需要时间,因此肯定会存在不同节点收到不同区块存储的问题。

以此图为例,设备A和设备B几乎同时发布了自己的区块,两者的区块并不相同。很好理解:

  • 红色区域中的用户离设备A近,会先收到设备A发的区块甲;
  • 蓝色区域中的用户离设备B近,会先收到设备B发的区块乙;

然后,不同的用户会将不同的区块加入到自己维护的区块链尾部,生产不同的区块链。


如此一来这个网络就乱套了。为了降低传播时间的影响,一个简单粗暴的方式就是从系统设计中就限制区块生成的速度。比特币系统的核心思想采就是用算力限制区块的生成速度。


比特币系统要求,每个用户在发布新区块前,必须先完成一个任务。这个任务就是:

  • 根据前一区块的一些信息加上新区快的一些信息,生成一个字符串S;
  • 选择一个字符串B,与S合并成“BC”,且要求“BC”的哈希映射满足某个条件,比如映射结果的前72位为0(概率:2^(-72));

上面的第2步,除了一个个试以外是没有捷径的,而且结果是否满足要求可以快速试出。举个例子就相当于给你一个银行卡,让你挨个试密码。那你没有任何办法,只能000000-999999挨个试验,最后虽然能试出来,但也会花费大量时间。而且你把试出来的结果告诉别人后,别人可以很快验证你的结果是否正确。


时间恰好是我们宇宙中最稀缺的资源。因此我们可以调节这个难度,比如使得系统中所有平均每20分钟才会有一台设备完成要求的任务,猜出符合要求的字符串B。如此一来,撞车的概率就会大大降低。补充一句,这个难度是不断调节的,以适应硬件算力的提升。


虽然概率大大降低,但仍然无法排除存在撞车的概率。因此,区块链验证中最核心的思想就是

——相信最长的区块链;


我们拿上图举例,在原有的到区块链N的情况后,短时间内出现了两个不同的区块,分别用蓝色和红色表示。


如此一来,就会有:

  • 部分用户的区块链:原区块链+蓝色区块
  • 部分用户的区块链:原区块链+红色区块


这个时候,我们需要做的只有一件事情,那就是『等待』。因为同时产生区块的小概率事件,总不可能连续发生。这样我们只需要等下一个区块产生,看这个新区块是连在蓝色后还是红色后。


图例里是有个新区块连在了蓝色区块后面,这个时候:

  • 链长度(原区块链+蓝色区块+新区块)>链长度(原区块链+红色区块)


因此,我们选择长度更长的“原区块链+蓝色区块+新区块”作为大家共同维护的主链。


【6:记录的安全性:几乎不可能造假】

如果有人想对区块链造假,那么他就需要一直抢先生成假的新区块,并广播出去。


这就要求造假者生产新区块的速度,要快于系统中的其他所有用户的生成能力之和。换句话说,造假者需要用户有和其他用户算力之和匹敌的算力。


假设这个造假者拥有系统总算力的80%,而剩下用户拥有20%(注:这个假设显然不可能)。如此一来,在造假者广播了一个假的区块后,就有80%的概率先于其他用户生成新区块,然后连在自己之前生成的假区块后。此时造假才有可能成功。


但实际是,每个用户用的算力相比系统总算力都是微不足道的。这就使得造假变得不可能,也使得造假的成本变得无法接受。


【7:挖矿:比特币的发行】

系统为了鼓励大家生成新的区块,于是在开始时就定下规则:

  • 每当一个新区块加入主链,这个区块的发行者就会被赠与50个BTC;
  • 每21万个区块后,奖励额度缩水一半;

这也就解释了,为什么BTC的发行上限是:

210000\times 50\times(1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\ldots)=210000\times 50 \times 2=21000000 也就是21000万个。这个机制牢牢限制死了比特币的总量,使得比特币不可能超发,滥发。


截至到我下笔时,比特币区块链的长度为504011,所以现在每个区块的奖励时12.5BTC,已发行的比特币数量为16800137.5。

而目前区块链的生成速度是15分钟左右一个,算下来一天就是100个左右。


以上就是我个人对比特币和区块链的理解,希望对大家有所帮助。

编辑于 2021-09-17 10:40

@陈剑 IBM中国开发中心创新技术研究院区块链和认知计算高级架构师,帮着回答了该问题:)

———————————————————————————————————————————

区块链究竟是什么呢?简而言之,区块链是一种分布式账本技术(DLT, Distributed Ledger Technology)。

谈到“区块链”这个概念,绕不开的一个话题就是比特币。比特币大家都知道,是近年非常火的一个“加密货币”,也是这几天被制造勒索病毒的黑客所要求的支付货币。近期比特币的单价甚至已经被炒高到突破一万人民币的水平。区块链究竟是个什么东西呢?区块链跟比特币是什么关系呢?

区块链其实是比特币底层的一种技术,比特币这个网络之所以存在,网络上互相不认识的人,能通过比特币网络进行数字货币的转账和交易,在底层就是通过区块链这个技术来驱动的。所有比特币的交易都是记录在区块链这个账本上的。从某种意义上来说,在比特币这个应用中,区块链就相当于现在银行交易系统的底层数据库。其目的都是在于“记账”。虽然把区块链直接称为“数据库”不是特别的严谨,但是为了大家理解方便,我们还是姑且称它为一种去中心化的、共享和加密的数据库。区块链用比较严谨的术语来讲,是一种分布式账本技术。它有如下几个非常显著的特点:1.去中心化、2.可追溯、3.不可篡改。当然,要实现这些特征需要用到很多相关的技术,包括:P2P、密码学、智能合约、共识算法。

我们下面通过一个实际的案例,给大家解说一下区块链在实际项目落地中的一些情况。比如IBM最近公布的一个区块链项目,就是和全球最大的跨国远洋船运公司马士基合作利用区块链来提升跨境供应链的效率、节省成本、降低风险。马士基是全球最大的船运公司。其主要业务就是把货物从一个国家运到另一个国家。大家经常都看到在大洋上漂泊的那些万吨巨轮,上面是成千上万个集装箱。马士基的工作就是把一个集装箱从一个国家运到另一个国家,虽然听起来商业模式非常简单,但是要完成这件事情,其中牵涉的参与方是非常多的。最近马士基和IBM一起用区块链做了试验项目,其内容就是利用区块链来追踪记录非洲和欧洲之间的鲜花进出口贸易。

在肯尼亚的蒙巴萨,很多花农以种花为生。而大家知道全球最大的花卉交易市场是在荷兰。肯尼亚的花农种出的话,就需要通过马士基的远洋货运邮轮,从肯尼亚运到荷兰去销售。从花种出来到能够上市销售,在这整个过程中,除了马士基的海运服务之外还有很多的相关参与方。比如:这个鲜花能够被种出来出口,花农和出口商势必要跟银行贷款,通过融资来支撑这个业务;鲜花出口前需要经过检验检疫部门的检验;要通过当地的海关的验关。在这个过程中,鲜花需要经过第三方物流公司、陆上的货运公司、到达蒙巴萨港。只有等集装箱运到港口装船后,马士基才开始大显身手。它们的万吨巨轮满载装满鲜花的集装箱从肯尼亚的蒙巴萨港出发,经过十多二十天的海上航行,途经红海、地中海等海域,最后到达荷兰鹿特丹港上岸。上岸以后,之前在肯尼亚发生的一系列事件还要再发生一次,只是这次换成了荷兰的海关、荷兰的检验检疫和荷兰的运输和物流公司以及荷兰的银行等参与方。

据统计,在这个历时近二十天的跨国供应链流程中,相关的不同参与方近10个、不同的参与角色大概有30个,而且相关的文档不管是纸质的还是电子的,大概有200多个。所以这中间的参与方和环节非常多,这是一个非常经典的跨境贸易的案例。

在这个鲜花贸易的产业链和物流体系中,非常重要的一个方面是作为货物的鲜花本身的流动。伴随鲜花的流动,还有相应的这些文档的流动,这就是我们常讲的物流和信息流。当然,因为牵涉银行的贷款融资,还有现金流。这就是物流、信息流和资金流的三流合一。在传统的解决方案中,所有的相关参与方(生产商、销售商、银行、港口、海关、物流公司、运输公司、海运公司马士基),各家基本都有自己的业务系统,相关的数据和信息都存放在自己的数据库。由于其对业务的极端重要性,在像金融这样的行业里,这类系统甚至被称为核心系统。在我们这个鲜花跨国贸易过程中,跟鲜花相关的信息和文档,它可能会存在与不同参与方的各自不同的数据库。这些数据库和业务系统,在一定的程度上有部分的对接和整合。但是,在传统数据库和B2B场景中,这类跨系统的整合相对来讲是比较松散的,而且也存在着一些不可避免的缺点,比如:流程周期比较长、环节多、透明性差;有些环节可能还没有数字化,甚至需要人工操作,效率很低;数据存在于不同参与方的数据库中,容易出现数据不一致导致的争议;数据本身的安全性和被篡改的风险较大,导致参与方之间出现信任问题。区块链技术的引入,就是通过利用密码学保护的共享和同步的账本,以 “去中心”或者 “弱中心”的方式,使得数据和资产在不同的实体之间的共享和流动过程做到透明、可追溯和不可篡改。

在上面提到的鲜花跨境贸易的案例中,鲜花出口要有相应的检验检疫的文件和各种进出口证明文件,只有这些齐备以后,海关和检疫部门才能批准它的出口。鲜花在货运公司被装上集装箱,会生成相应的货单、经过海关的通过程序,又有相关的报关文件等等,所以之前我们提到:这个流程中会有两三百种不同的文档要跟踪处理。很多文件在整个跨国供应链流程里面可能是多方都会去用到的,不管是去跟踪、去查看,还是去审批。在传统技术实现中,这种多方参与的场景不是说完全无法实现。但是常常实现效率比较低、参与方之间的信任比较难以建立、数据的的隐私性、安全性保障得也不是特别好,安全顾虑和隐患都比较大。引入区块链技术以后,相当于大家一起来维护和更新同一个共享的数据库账本。所有的参与方,都拥有和更新自己的一个Copy,相关的数据和文档都会写入共享账本。P2P技术保证了这些账本的内容同步、密码学的机制保证了数据的隐私性和不可篡改、智能合约机制提供了业务逻辑的自动执行机制。

回到我们的例子,在整个贯穿近20天的跨国物流运输的过程中,由于所有与货物相关的数据和文档都是随时写入区块链的,而区块链的各个参与节点的数据又是保持同步的,因此相关的参与方,不管是生产商、销售商,还是海关、银行等,都能随时随地了解掌握货物的位置、状态、甚至是温度、湿度等信息(可能需要GPS、RFID、物联网等技术)。在交货以后,相应的支付、结算工作,可以利用区块链上的智能合约自动实现,这样,就能比传统方式相对更高效的实现,做到账期的大大压缩,甚至可以做到接近实时的支付结算。这些区块链技术带来的好处,正是马士基选用该技术来开发新一代跨境供应链系统的根本的原因。

通过以上这个例子,大家可以看到区块链在商业应用中的价值。正是基于这样的原因,区块链技术在全球范围内的发展如火如荼,影响力和关注度都非常高,未来的发展前景一片光明。除了供应链场景,区块链技术还可以广泛应用于金融、身份认证、数字版权、公证和医疗等众多应用领域。

编辑于 2017-05-18 15:42

区块链就是把加密数据(区块)按照时间顺序进行叠加(链)生成的永久、不可逆向修改的记录。

想象一个封闭岛国的房地产市场,只允许岛民购买和出售岛上房屋;所有交易记录都有岛国唯一的地产中介进行打印和保存(因为其他人没有打印机)。每座房子的产权交易记录都是一条信息链;房子过往每一次交易的信息按照时间顺序形成了一个链条。假如每份纪录都被锁在一个独立的信箱里,只有房屋所有人拥有钥匙;新的交易记录可以被塞进信箱里,成为信息链的最新一环,但是一旦塞进信箱里,纪录就不可以再被取出丢弃,或者被修改。

此时,这所有信箱合起来就是一个非数字化的区块链--信息加密,每个秘钥持有人仅可以看到或者授权他人看到自己房屋的交易信息;而每次给房屋添加交易信息都是永久不可逆的过程。不会丢失,不能修改。

再想象:如果岛上并没有中介,而是每家各有一个打印机和一面对应岛上所有房产的信箱墙,各家人依然只可以打开自家墙上跟自己房产有关的信箱。如果每次有一座房子被交易,交易人要跑遍岛上所有人家,给对应的信箱里添一页纪录。那这时候,即使有几家发生了火灾,丢掉了交易纪录,或者有人偷偷把自己家信箱里的纪录撤换掉,整体交易记录也不会出现偏差--居民只要在每次交易之前拿出每个人那里保存的交易记录副本,根据多数原则确定统一的交易历史,并纠正错误的副本,就可以在无监督的情况下运行区块链。这也就是常常被与区块链混为一谈的另一技术:分布式账本(distributed ledger)。

区块链是一种可以完全改变金融系统底层设计的技术,因为可以实现所有市场参与人对市场中所有资产的所有权与交易记录的无差别记录,所以可以完全消灭掉清算和托管这些在交易前中后进行所有权确认的中间环节;另外,区块链作为一种电子信息记录,可以结合计算机算法实现交易的自动化,即智能合约。区块链结合其他金融技术有许多衍生应用,每种均可以将一类市场中介替代。区块链之于金融服务,如同TCP/IP之于互联网:一旦底层标准得到认可与普及,类似比特币和R3的具体应用将会出现在金融服务的每个角落里。

编辑于 2016-03-14 20:23

最近在学习区块链技术,很多科普文章的确写的很赞,但是缺乏一个比较直观的角度,这篇就从用户需求的角度出发,一步一步发明区块链技术(或者说比特币,因为两者互相依存),也在文中探讨了关比特币与金融,ICO,竞争币等等,其中很多观点可能有谬误或者不妥请多指正和交流讨论

观看超清图+排版更加Fancy的版本欢迎光临我的博客: 链接


因为贪婪,所以信任


1、加密货币

在一步一步发明发明比特币之前,解释几个直观的认知:

我们常说的比特币,是加密货币(Cryptocurrency)的一种,而加密货币实现去中心化的最关键的技术是区块链

有些地方可能把加密货币又称为数字货币(或称电子货币),但实际上,加密货币是数字货币的子集,同为子集的还有虚拟货币(如Q币),加密货币的称谓要更加专业

加密货币一定具有下列三个特点

  • 去中心的清算
  • 分布式的记账
  • 离散化的支付

为了实现这些特点,需要使用到区块链技术。这里的区块链技术是一个很广义的范畴,它包含了密码学,算法等很多不同的内容,其中最精彩的点子,可算是工作量证明 = 共识信用


2、一步一步发明比特币

2.1、第一个用户需求 - 账本和电子签名的由来

第一个用户需求描述了中心化清算系统几个关键内容的由来,只对区块链感兴趣的读者可以跳过

经济体的蓬勃发展离不开交易。在交易过程中,人们早已发现使用一般等价物(如金银)十分麻烦,发明了纸币(最早的来自中国,北宋时代四川地区的纸币交子的清算体系,是生产力发展的必然产物,最终的目标是提高生产效率),现如今,人们发现,携带现金也很麻烦

这是第一个基本用户需求:摆脱现金进行交易带来的不便

【解决办法】几个用户使用公共账本记录转账记录,月底结算账本公开,每个人都可以修改,也就是说可以在上面添加新行(一笔交易),如小明转账给小红10块钱

2.1.1、产生的问题1:身份问题

在这个账本条目上我们无法确认交易双方小明和小红是否是本人,可能出现伪造(逍遥法外电影中的伪造支票)

【解决办法】使用电子签名,即公钥 - 私钥对

记住,电子签名被发明的核心目的是希望在电子文档也能有一个类似与现实中个人笔迹的签名,目的一定是:确认写这个签名的人是本人,即身份确认(验证)

私钥顾名思义,也叫做密钥,是你本人需要需要妥善保管和保存的

Sign(\text{信息},私钥) = \text{电子签名}

Sign在这里是一个函数,可以理解为一连串计算(变换),这一连串计算有一个特点,就是输入值只要改变一点点,输出就会完全改变。信息和私钥一起,可以得到一个电子签名。并且这个电子签名不能被轻易的复制到其他信息里,原因是因为每一个电子签名都和这一段信息有关联。

Verify(\text{信息},\text{电子签名},\text{公钥}) = \text{真/假}

在进行验证的时候,Verify也是一个函数,输入值是信息,电子签名,公钥,输出是一个True or False,来判断这个电子签名是真的还是假的。

这个时候可能有人就要问了,这个电子签名我难道不能试出来吗?很不幸,这是一个有256bit的1/0字符串,可能性是 2^{256} ,无穷大。

解释完电子签名,我们来看看实例。小明使用自己的私钥加上小明转给小红10块钱的文字通过Sign函数生成一个签名(256位),把签名放在这条转账信息的后面,通过之前的讲解,这个签名就能保证小明已经过目了,并且说:“这真的是我小明,不用怀疑了!肯定是我

直观结果是,我们可以利用密码学的手段,只要有对应人的数字签名,我们保证小明和小红的身份能被100%确认真实

但是这个解决方案有一个小漏洞:可以复制同一行信息来伪造交易记录,解决的办法是添加一个这笔交易独有的信息(比如时间戳)

2.1.2、产生的问题2:欠债跑路问题

如果小明在此时账户上已经没有足够的余额进行支付,就会出现超支问题

【解决办法】添加余额记录,此时就不可避免的需要一个中间担保人(国家?信誉机构?银行?)为小明进行余额担保

2.1.3、一个大家都遵守的协议

此时,现代金融体系的框架基本建立完毕,协议内容是

  • 任何人都可以在账本上添加新行
  • 固定时间间隔时用真金白银进行清算
  • 只有有签名的交易是有效的
  • 中间担保的人保证不可超支

此时发现一个很有趣的结论,这个比较严谨的协议有一个特点:如果所有人都按照这个协议来办事,我们可以用任何形式的东西来代替人民币了,换句话说,就是我根本不关心你在账本上添加的新行的交易内容是什么,可以是任何东西

利用这个提出需求再解决问题的过程,强化一个认知货币 = 交易记录(账本),即货币的本质是交易记录,在这背后,有一个前提是,货币的另一个本质是一种共识,我们都信任它有价值的共识

2.2、第二个用户需求:账本放在哪里?

传统的(现在的)解决方案当时是,使用中心代理-银行,来存放账本

既然是第二个用户需求,那肯定就是因为现在的解决方案大家都不满意

2.2.1、核心需求:去中心化

中心化的痛点大致可以说几点

  • 银行效率低下,一笔跨国转账的等待时间较长
  • 胖银行金融体系因部分准备金制度等等方便的规则,能抬升杠杆,产生金融泡沫,进一步诱发金融危机
  • 私有财产神圣不可侵犯是精英与平民,剥削与被剥削者几个世纪以来博弈的风暴中心

当然还有很多没有提到(比如好处,控制经济发展速度,调控供需平衡等),总之,是一种一直饱受诟病的清算方式,此时,中本聪在2009年横空出世,他提出了一种全新的清算方法,并且真正解决了陌生人间信用的问题!接下来就是真正的一步一步的发明比特币了

2.2.2、如何实现分布记账(去中心化)

为了去中心化,我们可以反其道而行之:每个用户保存账本,分布记账。用户产生一笔交易就将这笔交易广播到到网络上所有的节点上,这样不就完美的去中心化了?

只要是明眼人都能发现,太天真的,这个方法行不通。若行不通,那就把行不通的原因总结出来

遇到问题,总结不可行的原因,寻找解决方案。这是整个人类不断前进的核心最小单位

2.2.2.1、问题核心

如何让所有人都同意这个新账本?如何保持这些账本同步?有一笔交易发生时,如何让其他人都听到并相信这一笔交易呢?

这些问题才是真正的核心:是否能在协议(办法,规则)中添加几行,找到办法,来决定是否接受交易,并确定交易顺序,使你可以放心的相信,世界上遵守同一协议的所有人手上的账本都和你的一模一样呢?(问题描述值得品读,只有抽象出问题才能更好的去寻找解决方案)

2.2.2.2、☆解决方案

解决的思路是:哪个账本的计算工作量大,就信任哪个账本。换个角度来说是【让交易欺诈和账本不一的情形的计算力成本高到不能接受甚至完全不可行】

1、密码学:哈希函数

哈希函数,输入可以是任意信息或者文件,输出是固定长度的比特串。例如256bit的1/0串,这个输出叫做这个信息的“哈希值”或者“摘要”(digest)。SHA256就是一个哈希函数

密码哈希函数有几个特点

  • 特点是输入值稍微变化后,结果就会有很大的不同,完全无法预测不同输入间的规律
  • 逆向计算不可行,只能使用试错法(穷举法),解空间2^{256}

在每一个账本后添加一个特殊数字,对整个列表使用SHA256,我们要求这个特殊数字可以使得输出值的开头有30个零(关于如何确定0的个数问题,在后面部分有详细的说明)

根据之前说过SHA256的性质:输入变化输出不可预测,找到这个特殊数字唯一的办法就是穷举。换言之,你很容易就证明了他们进行了海量的计算。而这个特殊数字就叫做工作量证明(proof of work)

这就意味着,所有的工作量证明就对应了交易列表(账本 Ledger),如果你修改了一个交易,哪怕只是其中一个字符,就会完全改变哈希值,就得重做工作量证明,直观动图如下

2、区块链 - 信任与共识的基石

每一个小账本被称为区块每一个不同的区块链协议(产生不同的加密货币)都会规定每一个区块的大小(最初比特币为1M)

账本组成区块,区块构成链表,区块的头包含前一块的哈希值,这就是区块链

如此一来,任何人就不能随意修改其中的内容,或者交换顺序。如果你这么做,意味着你需要重新计算所有的特殊数字

规定,允许世界上的每一个人建造区块。每一个新建区块的人(找到了这个特殊数字 - SHA256值有30个零)都能获得奖励,对于新建区块的这部分人(矿工)来说

  • 没有发送者信息,不需要签名
  • 每一个新区块都会给整个币种增加新的虚拟(加密)货币
  • 新建区块的过程又被称为“挖矿”:需要大量工作量并且可以向整个经济体注入新的货币
  • 挖矿的工作是:接受交易信息,建造区块,把区块广播出去,然后得到新的钱作为奖励
  • 对每个矿工来说,每个区块就像一个小彩票,所有人都在拼命快速猜数字,直到有一个幸运儿找到了一个特殊数字使得整个区块的哈希值开头有许多个零,就能得到奖励。我记得有一个知乎答主给了一个形象的比喻,区块链就像一个拥有貌美如花女儿(区块)的国王,有很多的青年翘首以盼,而国王的方法是出了一道很难得题目让所有的青年计算(学习改变人生),谁算的快(在计算哈希值过程也可能是运气好)就能抱得美人归
  • 对于想用这个系统来收付款的用户来说,他们不需要收听所有的交易,而只要收听矿工们广播出来的区块,然后更新到自己保存的区块链中就可以了

3、51%算力-共识攻击

这里有一个小漏洞,因为网络的延迟或者有人在篡改区块链等因素,你作为一个收听网络广播的用户,如果同时接受到两条不同的区块链怎么办?其中的交易信息发生了冲突

注:区块链本身就是最终的大账本,发生交易的唯一方法就是把你的交易加入到大账本上。具体来说,就是让矿工把你的交易记录加入它新挖到的区块中,并把这个区块链接到区块链上。链表的纽带,当然就是工作量证明

对于上面的问题,用户的解决方案也比较简单:即,只保留最长的,也就是包含的工作量最大的那一条

这里有一个Trick,即所谓信任工作量最大不仅仅是出【一道难题】,还通过等待多个区块的产生引入世界上所有矿工之间的博弈(吃瓜群众,坐看大戏,谁厉害我选谁,你们尽管斗)

个人观点:区块链的Idea最核心的创新就是从技术上把信任和贪婪画了等号。因为贪婪(希望去竞争建立区块的建立和交易费)所以信任(全网算力越大,用户越放心),这句话甚至带上了些许哲学和传奇的色彩

对于用户来说,是这样一种情景

其中的原因是,你可以假设Alice希望篡改一个交易信息,那么就意味着Alice需要不断的通过计算维护这个区块链了。也就是说每一次有新的区块链产生,Alice都需要不断的抢到这个彩票,理论上来说,他至少必须拥有全网51%以上的算力才能做到这一点,更多的,随着用户等待区块的增加,这个难度,幂次上升,在7-8个区块链产生后,概率上来讲,就是绝对信任

此时

  • 我们用数字签名保证了不能伪造交易记录
  • 区块链及工作量证明保证了不能篡改其中的信息

这两点,就完成了:证明区块链的每一条交易记录都是可信的这一终极目标

2.2.3、总结 - 系统可行性分析

只需给出一个命题来思考:我们如何才能在这个系统下骗人呢

  • 如果你想篡改一笔不存在的交易记录,那么你必须比所有人都算的快,赢得这个彩票
  • 所有用户会继续收听其他矿工的广播
  • 所以为了让所有用户继续相信这个伪造的区块
  • 你必须投入自己所有的工作量,不断给篡改后的区块链分叉增添新的区块
  • 记住:根据协议,所有用户会一直信任他所知道的最长的链
  • 是的,你持续的竞争过世界上所有的矿工的概率或者说代价,实在太大了,得不偿失(其实法律也是一样的道理,它强制给违法的人给予惩罚,让违法者付出他们不能承受的代价了保证公平和社会稳定运行)
  • 注意,作为一个用户,你不能立马相信你所听到的最新区块,而是应该等待多几个区块被创建过后,再确认这的确是世界所有人都在使用的区块链

2.3、发明过程中的关键点

  • 电子签名 Digital Signatures
  • 公共账本就是货币 The Ledger is the currency
  • 去中心化 Decentralize
  • 工作量证明 Proof of work
  • 区块链 Block Chain

3、比特币技术

到这里,已经发明了比特币,解决了去中心化的信任这一难题。只对比特币和区块链是什么这个问题感兴趣的读者,可以停在这里了,希望大家可以在我的叙述中解决一些困惑!鞠躬!

针对比特币的一些实现的内在细节,继续在探索和学习的道路上披荆斩棘。新技术,新点子,要拥抱它,使用它,判断它,必须先追根究底了解它

我们知道区块链中记载的核心内容,对于比特币(加密货币)来说就是转账记录。但是,一个概念真正落地成大众可以用的服务,有很多技术上,协议上的细节。接下里的部分主要探讨一些比特币具体实现方面的细节,如网络节点构成,比特币的计算难度系数,比特币总量的由来,比特币一笔交易发生的内部细节等

3.1、比特币网络节点的构成

比特币网络是一种点对点的数字现金系统(P2P),网络节点中每台机器都彼此对等。P2P网络不存在任何服务端、层级关系或者中心化服务。

3.1.1、节点类型与分工

一个全功能节点包含上述4个模块【钱包Wallet】【矿工Miner】【完整区块链fullBlock-chain database】【网络路由节点Network routing】

  • 【网络路由节点】使得节点具有参与验证并传播交易与区块信息,发现监听并维持点对点的链接的能力
  • 【完整区块链】具有此模块的节点被称为:全节点。它能够独自自主的校验所有交易,不需要任何其他信息。
  • 【钱包】比特币的所有权是通过数字密钥、比特币地址和数字签名来确定的,数字密钥实际上并不是存储在网络中,而是由用户生成并存储在一个文件或简单的数据库中,称为钱包。有些节点仅仅保留区块链的一部分,通过一种”简易支付验证“(SPV Simplified Payment Verification)的方法来完成交易
  • 【矿工】挖矿节点以相互竞争的方式创造新的区块。有一些挖矿节点也是全节点,可以独立挖矿;还有一些参与矿池挖矿的节点是轻量级节点,必须依赖矿池服务器维护全节点进行工作

拥有全部四个模块被称之为核心客户端(Bitcoin Core),除了这些主要节点类型外,还有一些服务器及节点运行其他协议,如特殊矿池挖矿协议、轻量级客户端访问协议。

下表为扩展比特币网络的不同节点类型

3.1.2、扩展比特币网络

要在全世界的网络中完成整个的交易,下图描述了一个扩展比特币网络,它包含了多重类型的节点、网关服务器、边缘路由器、钱包客户端以及它们互相连接所需要的各类协议,比特币互相连接的接口一般使用8333端口

可以参看这个文章了解Stratum协议, Stratum协议详解

3.2、如何控制区块产生速度恒定

3.2.1、难度系数

我们在发明比特币的过程已经详细说明了工作量证明寻找一个特殊数字使得SHA256函数的输出字符串的前n位是零

对于每一种不同的加密货币来说,都有一个值需要在建立货币的时候时候被定义,即每一个新区块在当前全网算力的条件被发现的【平均时间】,这也是难度系数的由来

比特币10分钟;以太坊15秒;瑞波币3.5秒;莱特币2.5分钟

抛开代码算法层面来说,实现方法就是通过找前n位是0的方法。从概率角度来说,n值越大,意味找到这个这个数的解范围越小。

随着需求0的数目一个一个增加,需要的计算时间将会程指数增长

那么肯定会问,这个难度值如何动态调整?由谁调整?

3.2.2、难度调整方式

难度的调整实在每个完整节点中自动发生的。如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。

例如比特币中的是这样定义的:每2016个区块后计算生成它们花费的时长,比上20160(14天)调整一次。有人可能会问,如果在这十四天内计算能力暴涨怎么办,其实这个10分钟的区块新建间隔的规定也只是一个估计要求,真实情况下,这个时间会偏离10分钟这个设定值很多,但是这种偏差并不会对整个区块链的运行产生影响

3.3、比特币总量的由来

我们已经知道,矿工没新建一个区块就可以得到一定数量的比特币作为奖励,最开始,一个区块可以得到50BTC的奖励,之后每210000个区块,奖励减半,直到2140年,所有的比特币将会发放完毕,可以得到公式Total = 210000 \times(50 + 25 + 12.5 + \ldots) = 20999999980 \approx \text{2100万}

而这个规则不同的竞争币种都可以自由设置。但是因为交易费的存在,挖矿的人还是会有收益,否则无法建立新的区块,那么整个比特币网络就瘫痪了

3.4、比特币的交易处理能力

3.4.1、现在比特币区块链的区块信息

我现在直接从 BLOCKCHAIN上,在我写下这句话的时候,最新的区块是情况

其中的重量是指的实际存储的大小,这个值和交易协议有关,其实可以忽略。非常幸运的是,这几个区块放佛是专门为讲解这一节而出现的,这可能是天意吧

另外插一句,你会发现平均区块建立间隔时间,的确和10分钟这个设计值差距很大吧

3.4.2、区块容量

比特币从被创建时,或者说源代码中规定了,区块容量是1M。最初设计成1M的原因一方面,防止DOS攻击。另一方面,当年中本聪在创建区块链的时候的容量是32M,但是他通过一个说明为”Clear up“这样毫不起眼的Commit把区块容量改成了1M,为防止区块链体积增长过快,为区块容量这个问题添加了些神秘色彩。好吧,我承认,中本聪就已经非常具有神秘色彩了,是在神秘色彩上添上了些故事

通过上表我们知道,1M的容量意味着比特币最大的处理交易数量在约2400(486882区块1034.39的大小很接近了),在给出 一张时间和每秒交易数量的关系图表(交互表格点击链接)

这是一张对数图,纵坐标是每秒交易数量,横坐标是时间。其中,蓝色圆圈的大小代表的是比特币内存池(mempool)的大小(交易在等待矿工处理之前都会暂时存在这里)。

一句话总结,这是一个拥堵的网络,已经重负不堪。

再来看一张 比特币交易费和区块使用率之间的关系图(交互表格可以点击链接)

蓝色的圈大小是Mempool的大小。横坐标是区块容量的使用情况,纵坐标是每一个区块的可以得到的交易费用。

手续费随区块使用率开始增长,甚至出现了4BTC一个区块2400笔交易的情况,意味着挖到这个区块的人通过交易费得到的汇报接近了本身建立区块的回报

有一个结论是,扩容后,因为每一个区块的交易承载量增加,矿工的交易费收入肯定会减少。因为,通过上表可以发现,只有当区块使用程度接近95%时候,交易费才有明显的增长

再看一张 用户执行交易需要等待的时长和区块使用比例间关系的图表(交互图表点击链接)

蓝色的圈大小是Mempool的大小。横坐标是区块容量的使用情况,纵坐标是用户平均需要等待的时间,单位是分钟。

通过上面三张表我们可以知道,矿工的计算力是整个区块链信用的基石(记住贪婪=信任),所以对矿工的激励不能少,而对于用户来说,当然希望自己的交易越快速完成越好。

对于矿工来说,区块使用率超过95%是一个很好的信号,那意味着我可以拿到更多的奖励。奖励太低,在区块建立奖励越来越少的情况下,安全性(信任)就慢慢的得不到保障。这么说来,这也就变成了一个Trade-off博弈过程

分析下来,类似门罗币(menero)实现的根据网络负载来动态调整区块容量的设计似乎很合理

3.4.3、比特币扩容之争

这是一场复杂的博弈斗争,使用隔离见证增长区块容量,并出现了比特币现金这个新的币种。

如果想要了解这里面的很多技术,英文是必须过硬的,因为比特币代码开源,可以随意fork,只要英文功底过硬,阅读白皮书,文档等,这些不同技术的处理方法都是能够学到的

3.5、比特币的一笔交易过程中到底发生了什么

我们可以确认的是,每一笔都将记录在大账本中,那么我们需要研究的内容,就是区块中交易内容内的具体数据结构

3.5.1、交易结构

每一个交易块包含的内容如下表所示

最后这个值是解锁时间,定义了能被加到区块链里的最早交易时间。大多是时候设为0,表示立马执行

一笔比特币交易是一个含有输入值输出值数据结构。该数据结构包含了将一笔资金从初始点(输入值)转移至目标地址(输出值)的代码信息。比特币交易的输入值和输出值与账号或者身份信息无关。可以把它理解为一种被特定秘密信息锁定的一定数量的比特币。只有拥有者或者知道这个秘密信息的人可以解锁

3.5.2、交易的输入和输出

比特币交易的基本单位是未经使用的一个交易输出,简称UTXO(unspent transaction outputs)

可以把UTXO类比为我们使用的人民币1,5,10,20,50,100的面值,对于UTXO来说,它的面值可以是一”聪“的任意倍数(1BTC等于一亿聪)但是这个有着任意面值的”人民币“不能随意打开,还被加上一道类似红包支付口令的密码,只有拥有这个密码的人才可以使用这个UTXO,UTXO包含,币值+一段代码(锁,只有有钥匙的人才能打开)

被交易消耗的UTXO被称为交易输入,由交易创建的UTXO被称为交易输出

3.5.2.1、交易输出

不同面值的UTXO是由交易输出来提供的。你可以想象你需要购买一个3.1BTC的物品,你并不能从你的钱包中找到几个UTXO来得到3.1BTC,但是你刚好拥有一个4BTC的UTXO,你使用这个UTXO作为付款,那么你需要自己手动构建一个0.9的UTXO返还给你自己

一个交易输出包含两个部分

  • 一定量的比特币。被命名为“聪”(satoshis)
  • 一个锁定脚本。给这个UTXO上锁,保证只有收款人地址的私钥才可以打开

3.5.2.2、交易输入

每个交易输入是在构造的一笔交易(使用UTXO),比如你需要支付0.015BTC,钱包会寻找一个0.01BTC和0.005BTC的UTXO来组成这一笔交易。交易输入中还会包含一个解锁脚本,这是一个签名,可以类比成支付宝红包密码的口令

3.5.2.3、交易费

交易费 = 求和(所有输入) - 求和(所有输出)

这里有一个比较有意思的地方,就是因为找零的输出UTXO是交易的发起这自己构建的,如果很不幸,你忘记了自己构建找零的UTXO,那么这些多余的BTC就会变成矿工的劳务费

例如,我需要和小明进行交易,需要购买一个商品,花费0.8BTC,为了确保这笔交易能被更快的处理(添加到大账本上),我要在其中添加一笔交易费,假设0.01BTC(忽略人傻钱多),那就意味着这笔交易会需要我从钱包中找到几个UTXO能组成0.81BTC。但如果我的钱包内找不出这样的UTXO,只有一个1BTC的UTXO可用,那么我就需要构建一个0.19BTC的UTXO作为找零回到自己的钱包

交易费只和交易字段使用的字节大小有关,与参与交易的比特币币值无关。UTXO是有尺寸的,比如某人想支付一笔很大的BTC交易,但是他的钱包中有很多小尺寸的UTXO,如果加入了很多个UTXO,就以为这他的交易会变复杂且尺寸大。

3.5.2.4、解锁和锁定脚本

在实际实现的时候,这个“支付宝红包口令”被称为脚本,是一种基于逆波兰表示法的基于堆栈的执行语言。具体细节感兴趣的读者可以去 比特币的Github研究代码。关于脚本有很多细节上的定义和实现方法,这里限于篇幅不展开描述了

3.5.3、矿工费和优先级

我们知道,每一笔交易都是广播到区块链上,由矿工决定是不是加入到新区块上的。那么这里就会涉及到一个问题,谁的交易的优先级更高,是先来后到?还是谁给前多谁就能加入到新区块中?

在 区块容量一节中,有一张图表直观的展示了现在网络中一笔交易的等待时间,其中最长的,也就是30分钟,如果你不是一个超级急性子,很多时候还是可以接受的(毕竟跨国转账1-2个工作日)

优先级 = 输入值块龄 * 输出值块龄 / 交易总长度

一个交易想成为“较高优先级”,需满足条件:优先值大于57600000,等价于1个BTC,年龄为1天,交易的大小为250字节

区块中前50KB的字节是保留给“较高优先级”的,其实这一机制也保证了一笔交易不会等待时间无现长。但是我们要知道,内存池(存放待处理交易的位置)中的交易,如果在没有处理后消失,所以钱包必须拥有不断重新广播未被处理交易的功能

3.5.4、创币交易 - Coinbase

每一个新建立的区块,都会有新的比特币作为奖励被产生,这个交易是一个特殊交易,被称为创币交易(Coinbase奖励)

创币交易中不存在解锁脚本(也叫ScriptSig字段),被Coinbase的数据取代,长度最小2字节,最大100字节,除了开始的几个自己以外,矿工可以任意使用Coinbase的其他部分。比如创世区块中,Coinbase的输入中的字段是:The Times 03/Jan/2009 Chancellor on brink of second bailout for banks,是泰晤士日报当天的头版文章标题:财政大臣将再次对银行施以援手。

3.6、Merkle树

每个区块中的所有交易,都是用Merkle树来表示的。换句话说,交易的存储数据结构是,Merkle树

3.6.1、什么是Merkle树

Merkle树是一种哈希二叉树,它可以用来进行快速查找和检验大规模数据完整性。对于比特币网络来说,使用Merkle树来存储交易信息的目的是为了高效的查找和校验某笔交易的信息是否存在

当N个数据元素经过加密(使用两次SHA256算法,也称double-SHA256),至多计算2log\_2(N)次就能检查出任意某元素是否在树中

3.6.2、构造Merkle树

假设我们有A B C D四笔交易字段,首先需要把这四个数据Hash化。然后把这些哈细化的数据通过串联相邻叶子节点的哈希值然后哈希化。基本过程如下图所示

叶子节点必须是偶数(平衡树),如果遇到奇数的情况,把最后一个节点自身复制一个,凑偶

3.6.3、Merkle树的效率

下表显示了证明区块中存在某笔交易所需转化为Merkle路径的数据量

可以发现,即使区块容量达到16MB规模,为证明交易存在的Merkle路径长度增长也极其缓慢(幂指数增长取对数变为线性增长)

3.6.4、Merkle应用 - 简单支付验证节点(SPV)

我们知道,每当一笔新的交易产生的时候,我们必须验证这笔交易是否真的存在,在SPV节点中,不保存区块链,仅仅保存区块头。使用认证路径或者Merkle路径来验证交易是否存在于区块中

例如,一个SPV节点需要处理一笔支付,它需要验证这笔交易在某个区块中是否存在,才能决定是不是把这笔交易添加到这个区块中,那么它只需要接收少于1KB大小的,有关区块头和Merkle路径的信息,比接收完整区块(大约1MB)大小少了1千倍。简单来说,可以想象,Merkle树类似一个数组(这也是哈希表的最简单表示),下标是区块字段,下标对应数组存储的内容是这笔交易是否存在的值(True or False)


4、区块链(比特币)与金融

因为比特币具有价值,那就必须谈到它和金融的关系。

限于篇幅(太长了太可怕了,一个博客写2万字莫不是有病),这部分另起一篇: 链接(直接点不会打开新标签),如果对ICO和金融方面感兴趣的读者欢迎移步讨论


5、竞争币和其他技术创新

所谓竞争币当然是利用区块链技术为即使,仿照比特币的基本协议架构进行的创新后的新币种,或者是新的区块链实现模式。这篇文章围绕什么是区块链展开,这部分的内容请移步(持续更新) 如何评估竞争币的价值与新技术创新(直接点不会打开新标签)

其中谈到了工作量证明的其他替代手段;到底什么是智能合约;以太坊开发技术栈等


6、总结

感谢您看到这里,写这篇文章的目的一方面也是回答区块链(比特币)到底是什么这个困扰了自己很久的问题,另一方面,也是因为最近区块链技术非常火,需要一些接地气的科普文

比如最近最新的消息称一家保险公司,使用区块链技术来赔偿航班晚点2小时,基于以太坊智能合约第一款落地应用。

如果你已经对区块链的实现原理有了初步的认知,就明白这些应用利用了区块链的分布式特点。说到底,并没有贪婪=信任工作量证明核心,只是一种基于云的新型运用,也很有想法,但是和比特币之类就没什么关系了(当然,这是我的个人看法,最近区块链方面的有很多突破性技术,比如侧链,闪电网络等等,太多的新概念,新名词,新技术,对此,也只能不断学习)。

但你只需牢记,贪婪=信任,以太坊也是利用以太币这个媒介来实现了合约价值,中本聪用人内核的贪婪来给陌生人之间加上了信任的纽带,这个代价是永远不会变的。换句话说,如何抵抗共识攻击和安全漏洞是一个永远不会消失的议题。

一句话来说,万变不离其宗,道生一,一生二,二生三,三生万物。中本聪给了道,是个妙人,但是万物依旧有无穷可能。信任作为一个人类社会一直以来的重要问题(痛点),为了解决它,出现了权威机构进行信任背书(中心化)。建立信任,一定要付出代价,天底下没有免费的午餐,最终这些技术都会回归于一个投入产出的博弈过程(Trade-off),梳理主干,抓住要点,才能游刃有余!

那么如何才能梳理主干,抓住要点,提升学习能力呢?见谅加一个软广告

幕布是一款笔记本软件,博主参与了部分研发工作,如果你喜爱沉浸式层次化输入,并喜欢思维导图,还喜爱记录总结整理各种书籍或文章,幕布完美切合这三类人群的需求:一键生成思维导图,极简输入界面,快捷键操作,全平台支持!Organize your brain by mubu

点我一键微信注册,一个月9块钱,良心商家, 这是一篇自己写的有关幕布的介绍文章

以上!鞠躬!


除了 江卓尔 知乎回答等优秀的知乎答主的回答,附参考文献出处:
【1】文章中引用多个Gif的出处: 比特币原理-3B1B,这也是让我真正弄懂比特币的一个视频,不得不说,外国人在让门外汉入行这件事上,领先了很多

【2】一本入门教材。包含代码和实现,以及很多数据结构,具体实现方式的细节,如果想成为加密货币(区块链)开发者,这本书5星推荐: 精通比特币

【3】宋老师的 鸿观125期(需要优酷会员)

【4】只能膜拜之的创世区块作者的论文: 比特币白皮书

【5】 ICO科普文章中的例子引用

编辑于 2018-02-09 13:08

看到一些争论区块链定义的回答, 突然意识到自己这篇解释原理的回答其实是一直是对着比特币撸的, 介于区块链的定义业界并没有一个特别明确和唯一的回答, 这里先给出个人根据所读论文而总结出的“区块链”应有特质:

  • 使用了具有 "哈希链" (下文有解释) 形式的数据结构保存基础数据
  • 有多个结点参与系统运行(分布式)
  • 通过一定的协议或算法对于基础数据的一致性达成共识(共识协议/算法)。

介于比特币目前是区块链最典型且最有影响力的应用之一理解比特币如何使用区块链后, 再去理解其他形式各样的区块链应用就会容易很多。

---------------------2017.07.25 更

看到这么多答案,不管是懂的人还是不懂的人,感觉没有一个能够把外层的复杂性剥离, 只谈简单本质的,如下答案,给大家一个真正通俗易懂的区块链解释。 本文提到的区块链技术细节,为了通俗, 就只能说的比较简略,难免有不严谨之处,欢迎大家指正有伤大雅的问题

在谈应用之前,最重要的是先理解它的技术本质是什么, 所有介绍区块链的答案里, 都最先提到了区块链不可篡改的特性, 所以第一个要理解的是它到底是怎么实现不可篡改性的。

  • 先修知识;
    • 密码学Hash()函数的单向性: Hash(x) =y , 通过y很难找到x
    • 哈希链: 假如现在有顺序产生的数据块 A, B , C 。 那么我们可以这样计算一个hash 。 注意 “||” 表示拼接
h0=  Hash(A) 
h1 = Hash(B || h0)
h2 = Hash(C || h1)


  • h2是我们计算的hash头部,现在来看, 为什么我们管这个东西叫Hash链, 因为h2 的值依赖于之前一系列数据的内容和计算顺序。 假如说现在你知道了h2 , 别人拿着A,B, C, 他不管是修改A,B, C的任一点内容还是A,B, C的出现顺序,你都无法再次计算出正确的h2


  • 好的, 其实到这里区块链的概念就有点感觉了不是吗, 它其实就是一个哈希链的变种。 怎么变? 添加一个随机数(Nonce)
    • 假如现在有顺序产生的数据块 A, B , C 。 我们来这样计算hash头。 注意 “||” 表示拼接
h0=  Hash(A || Nonce1) 
h1 = Hash(B || h0 || Nonce2)
h2 = Hash(C || h1 || Nonce3)



  • 这里我们还添加一个额外的要求, 就是 h0, h1, h2 必须都得是以指定数目的0 bit开头的,例如要求每个哈希值都必须以5个0开头,则h0,h1,h2都应该是这样的形式(00000*****************)
  • 添加了这个要求以后, h0, h1, h2就都不是那么容易计算的了, 因为你不能根据输出的形式来反推输入是什么, 而A, B, C又是给定的, 那只能不断更改Nonce来穷举计算, 然后找到一个可以满足要求的Nonce值 ,使得h0, h1, h2符合要求
  • 到这里大家就知道所谓的矿工是在干什么了, 就是接受广播出来的数据块,然后计算当前最新的哈希链的头部, 当成功计算出了一个符合要求的Hash后, 就告诉所有人,自己找到了, 让别人再去计算下一个哈希头部。


  • 其实到这里, 区块链的本质就已经差不多了, 假如网络中大家都默认遵守协议, 只在最长的哈希链后计算新的头部,那么一切都很好, 但是如果有人想搞不一样,那他就得拥有更强的计算能力, 在诚实者都遵守规则的情况下, 自己能够计算出一个链条分叉甚至说直接计算出一个新的链条,让大家都承认。
  • 至于这个难度的证明,中本聪就是建立了一个泊松分布的概率模型, 假设了诚实结点计算出新的哈希头的概率p和不诚实结点计算出新的Hash头的概率q后,算出了一个N值。
    • 这个N值的含义是给出了当一个新的哈希头部 h1 计算出来后,其后追加N个头部(h2,h3,h4....)后,网络才应该承认这个新的头部 h1. 因为此时, 攻击者要想成功发动攻击, 至少需要计算出一个长度大于N的分支, 这个概率在攻击者没有掌握全网算力50%的时候是很小很小的


所以到这里, 区块链就已经清楚了,就是一个密码学工具的一种巧妙应用而已, 没什么神奇的 。

那这里思考一下, 不可篡改性其实并不是一个什么神奇的特性,密码学的签名技术就能提供不可篡改性呀, 区块链到底解决了一个什么问题。答案是


  • 信任问题


    • 区块链提供了一种方案, 让一个网络中,所有的结点都可以用计算能力投票, 从而保证了得到承认的结果是大多数人公认的结果, 不会因为少数结点作恶,而修改结果
    • 传统的交易建立在什么基础上, 我们对于金融机构的信任, 对于中央银行的信任, 或者对于交易对手的信任, 对于第三方中间人的信任。
  • 这里其实就引出了很多安全技术应用,或者说很多制度建立的本质:信任越多, 需要做的工作就越少。
  • 区块链就是因为不想信任网络中的任意一个单一结点, 所以让大多数人具有公平的投票权利, 而这个投票权利,不是按人头算的, 是按CPU算的, 每个CPU有一票。



  • 区块链(采用工作量证明方式维护的公有链)最难以克服的缺点1: 效率问题
    • 前面说过, 当你信任的越多, 需要做的工作越少, 就好比你和一个人做生意, 如果你完全信任对方, 那么合同都不用签, 口头约定就行。 如果不太信任, 签一个简单的合同, 规定最重要的事项。 如果特别不信任, 让律师对交易中所有存在风险的地方列出条款,规定责任, 签一个大大的合同。
    • 所以看出来了吧, 信任越多, 效率越高。 信任越少, 效率越低。
    • 区块链也是一样,因为没有单一结点可以信任,通过计算来换取信任。 所以简单的一个承认交易的操作, 需要大量的计算参与进来, 结果是什么, Bitcoin平均交易速度只有7笔每秒。
  • 比特币(公有区块链应用)的最难以克服的缺点2: 宏观金融的适应性
    • 金融学和经济学作为人类多年来发展出来的科学具有不可替代的地位, 比特币的流通货币量是存在上限且增加速度基本固定的, 这符合经济规律吗? 显然不符合。 因为学过经济的人都知道, 货币只是对实物财富的衡量, 货币增长速度快于商品增长数量, 则发生通胀, 货币增长速度慢于商品增长速度则发生通缩。


  • 比特币(公有区块链应用)的最难以克服的缺点3: 匿名引发的安全性
    • 想一想匿名对于罪犯的好处,就不难理解比特币的洗钱风险
    • 比特币作为信息安全学者的发明产物, 现在常被应用于黑客入侵之后勒索的交易手段, 想起来也真是讽刺
  • 比特币(公有区块链应用)的最难以克服的缺点4: 用户的易用性
    • 比特币的技术是基于密码学签名技术的, 你的账户安全由你的私钥保护, 如果不添加别的手段,比如在别人那里备份, 或者在别的地方备份, 你丢失了密钥, 账户里的 钱是没有人能给你找回来的。 想想人们丢银行卡, 忘记密码的频率, 这个问题有多大, 不用我说大家也懂


说了这么多缺点, 区块链技术和比特币技术就不行了吗? 显然不是,不然那些国际金融机构也不会下大功夫研究它, 但是, 和其他所有的技术一样, 大家都只是在寻找一种能够更高效解决信任问题的手段而已。 金融机构的核心是什么, 交易投资与风险控制呗。 其实也都是围绕信任问题展开的。信任问题的解决在金融机构本来就是耗费了大量的成本的, 只不过很多成本在后台, 或者在人工的耗费上, 很多人看不到而已。

总结 :

区块链的技术有望以一个更低的成本解决更广泛的信任问题所以被受人关注


最后说点闲话, 本人是硕士阶段出来留学的, 对比国内外,发现中国人的技术分享氛围真的比国外差很多, 不是国内的人水平没有,懂的人都自己掖着 , 或者说也懒得做清晰的分享, 我想这一点也不能怪我们国人自己, 毕竟是由于人太多, 资源匮乏导致的竞争心态过于强烈。 但是衷心希望, 随着国家实力的进步, 咱们中国人可以有一天不需要再把英语当成学习技术道路上的必须逾越的坎。

编辑于 2017-07-25 22:00

以下全部是个人对区块链的认知,为了避免广告嫌疑,很多的地方我只能写的模糊点啦。因为自己发过一篇类似的文章,结果被举报是有广告嫌疑,唉,真心的分享,希望知乎大哥大姐明察。

最近一直在研究区块链,之前做了3年的php开发,感觉最近区块链来的有点猛啊,太火了,很多美国知名大学把区块链技术加入课程列表。现在各领域涌现出对区块链专业知识的需求,区块链可以应用在金融行业、征信系统、供应链、在线音乐、房地产、医疗等等各个行业。关键现在是没有相关区块链人才啊,弄的自己都想去学习区块链了,现在国内国外很多的公司都是百万年薪招区块链人才。

为什么会出现这样的用工荒,其实原因很简单,就是懂区块链的太少了,先给大家普及一下区块链的知识。区块链技术是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术,可以用4个关键词去形容:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(Reliable Database)。

区块链又分为以下几种:

1、公开区块链(public blockchain) 例子:比特币,Ethereum Frontier。公开区块链上的数据所有人都可以访问,所有人都可以发出交易等待被写入区块链。共识过程的参与者(对应比特币中的矿工)通过密码学技术以及内建的经济激励维护数据库的安全。公开区块链是完全的分布式。

2、协作区块链(federated blockchain) 例子:Hyperledger以及德勤等会计所尝试的审计系统。参与区块链的节点是事先选择好的,节点间很可能是有很好的网络连接。这样的区块链上可以采用非工作量证明的其他共识算法,比如有100家金融机构之间建立了某个区块链,规定必须67个以上的机构同意才算达成共识。这样的区块链上的数据可以是公开的也可以是这些节点参与者内部。部分意义上的分布式。

3、私有区块链(private blockchain) 例子:Eris Industries。参与的节点只有用户自己,数据的访问和使用有严格的权限管理。近期部分金融机构公布的内部使用的区块链技术大都语焉不详,不过很可能都在这个范围内。

关于区块链本身的知识就说到这里吧,网上和知乎上有很多的文章在介绍,我就不在此累赘了。因为自己最近也在学习研究区块链,接下来就给大家分享一下自己关于区块链学习的一些经验。以下共3种学习的方式,大家可以根据自己的实际情况去选择:(1)看书;(2)看视频;(3)找人带或者参加培训


第一:看书


给大家说一些自己曾经看过的,感觉比较有价值的书目


(1).《精通比特币》原版名《Mastering Bitcoin》,了解比特币的最佳之选。在线阅读:介绍 | 精通比特币


(2).《区块链——从数字货币到信用社会》 了解区块链概念的不错的一本书,多位行业大咖倾力合作而成。


(3).《深入浅出以太坊》 对以太坊研究较深的汪晓明所做,可以系统了解和学习以太坊。


(4).《区块链开发者指南(待出版)》 期待已久,由申屠青春和汪晓明两位行业大牛主编,可以盯着,出版买一本学习学习。


除了看书,再给大家推荐一些文章

(1)【区块链之菜鸟入门】系列文章

1) 亲,你淘的区块链到了!

2) 区块链发展史:从拜占庭将军问题到智慧契约

3) 来来来,这篇科普告诉你“区块链”到底是个啥?

4) 区块链——颠覆式创新技术

(2)【区块链之技术进阶】系列文章

1) 区块链:通往互联网第二纪元的革命

2) 金融的未来,区块链将用于何方?

3) 让这篇技术贴告诉你区块链是怎么运行的

4) 扒一扒某乎上面对于区块链的理解(一)

5) 扒一扒某乎上面对于区块链的理解(二)

6) 从技术现实理解区块链:基于SQL模型创建BQL

7) 掰一掰区块链共识机制与分布式一致性算法

8) Attention please!区块链技术的风险!

(3)【区块链之技术实战】系列文章

1) 群雄激辩区块链

2) 颠覆银行基础架构的区块链

3) 在金融领域,区块链该咋用呢?

4) 区块链开源项目合集:Hello,BlockChain!

5) 有了区块链做公益,再也不用担心我的捐款啦

4)【区块链与未来】系列文章

1) 区块链只与互联网+金融有关?让法律人和你聊聊

2) “区块链+”火花四溅的未来

3) "公共记账簿"?哼,区块链远比你想象的强大的多

4) 区块链技术将重塑我们的世界


第二:看视频


(1)火币网李林的区块链是什么

m.youku.com/video/id_XM

(2)比特币原理概要–非技术版

video.8btc.com/video/34

(3)比特币底层原理

video.8btc.com/video/31

(4)以太坊技术视频系列(汪晓明)

ethcast.com/

(5)小蚁的价值体现在哪里

https://m.v.qq.com/x/page/c/m/v/c0319zih9mv.html?ptag=v.qq.com%23v.play.adaptor%232&mreferrer=http%3A%2F%2Fv.qq.com%2Fvplus%2Fbec429068169e2ea1599f137e94888bc%3F_wv%3D1031


第三:找人带或者参加培训


(1)小蚁开发学院


技术出身的可以去小蚁开发学院 https://www.antsh.org/school,适合有一定基础的开发工作者去学习。


(2)朵朵学院


老蘑菇独撑的朵朵学院 wanbizu.com/p/37467.htm,在淘宝可以买到系列教程,课程不贵,对大家还是比较有用的。


(3)海绵学堂

海绵学堂 www.51haimian.cn是最近刚发现的一所线下培训机构,号称是全国首家做区块链培训的机构,比较适合系统的学习一下区块链,找个老司机带,上手会快一些,入行容易些。


以上就是自己总结的学习区块链技术的一些方法和手段,自己自学了有3个月,发现自学是一件非常痛苦的事情,关键是自己的自控力差啊,希望找个志同道合一起学习交流,相互督促,有想法的和小窗私我。

编辑于 2017-08-12 16:48

谢邀,知乎首答,就献给我接触和从事了5年的区块链吧。


我的新书《白话区块链》,开头讲述了这么一个故事:


早些时候,农村一般都会有个账房先生,村里人出个工或者买卖些种子肥料等,都会依靠这个账房先生来记账,大部分情况下其他人也没有查账的习惯,那个账本基本就是这个账房先生保管着,到了年底,村长会根据账本余额购置些琐碎物件给村里人发发,一直以来也都是相安无事,谁也没有怀疑账本会有什么问题。账房先生因为承担着替大家记账的任务,因此不用出去干活出工,额外会有些补贴,仅此一点,倒也是让一些人羡慕不已。下图便是当时账本的记账权图示:

终于有一天,有个人无意中发现了账房先生的那本账。看了下账面,发现数字不对,最关键的是支出、收入、余额居然不能平衡。对不上,这可不行,立即报告给其他人,结果大家都不干了,这还得了。经过一番讨论,大家决定,轮流来记账,这个月张三,下个月李四,大家轮着来,防止账本被一个人拿在手里。于是,账本的记账权发生了如下图所示的变化:

通过上图我们可以看到,村里的账本由大家轮流来保管记账了,一切又相安无事了,直到某一天,李四想要挪用村里的公款,可是他又怕这个事情被后来记账的人发现,怎么办呢?李四决定烧掉账本的一部分内容,这样别人就查不出来了,回头只要告诉大家这是不小心碰到蜡烛,别人也没什么办法。

果然,出了这个事情以后,大家也无可奈何。可是紧接着,赵六也说不小心碰到蜡烛了;王五说不小心掉水里;张三说被狗啃了……终于大家决定坐下来重新讨论这个问题。经过一番争论,大家决定启用一种新的记账方法:每个人都拥有一本自己的账本,任何一个人改动了账本都必须要告知所有其他人,其他人会在自己的账本上同样地记上一笔,如果有人发现新改动的账目不对,可以拒绝接受,到了最后,以大多数人都一致的账目表示为准。

果然,使用了这个办法后,很长一段时间内都没有发生过账本问题,即便是有人真的不小心损坏了一部分账本的内容,只要找到其他的人去重新复制一份来就行了。

然而,这种做法还是有问题,时间长了,有人就偷懒了,不愿意这么麻烦地记账,就希望别人记好账后,自己拿过来核对一下,没问题就直接抄一遍。这下记账记得最勤的人就有意见了。最终大家开会决定,每天早上掷骰子,根据点数决定谁来记当天的账,其他人只要核对一下,没问题就复制过来。

我们可以看到,在这个时候,账本的记账权变成了这样:

通过上图,我们可以看到,经历了几次风雨之后,大家终于还是决定共同来记账,这样是比较安全的做法,也不怕账本损坏丢失了。后来大家还决定,每天被掷到要记账的人,为了补偿一下他的劳动投入,奖励给他一些收益。这时,一个去中心化的账本系统就形成了,而这就是区块链的雏形。


比特币正是使用了这样的原理,来不断地发行新的比特币出来,而奖励给打包的那个人的,就是新发行的比特币——当然,关于比特币的诞生,就是另一个故事了。

发布于 2017-12-20 23:24

区块链,是一种技术,它解决的是市场经济中最核心的“信任”问题,把陌生人之间的信任成本降到极低的水平。

市场经济中有一样至关重要的东西,这就是“信任”。假如没有信任,任何交易都不可能成立。

你到菜场买菜,如果你不相信蔬菜里农药含量达标,你就不会跟那个菜贩子交易;你到小店买瓶水,如果店员不相信你给的是真钞,也不会把水卖给你。

传统的小农经济是熟人经济,交易规模仅限于居住范围附近比较熟悉的人们之间,因为熟人骗你,他就会失去你这个社交关系,并且弄坏他在整个熟人圈子里的名声。相比陌生人,我们相信熟人欺骗我们的可能性比较低。

所以,一旦超出熟人范围,我们需要用很高的成本来识别一个陌生人会不会骗我,我怎么规避被骗的风险。这种情况就会阻碍交易,限制交易。

此外,不同种族、民族、文化、宗教信仰等等,都会天然存在这种信任问题。

那么我们现在身处的市场经济,为什么能有那么多陌生人之间的交易呢?因为诞生了新的机制,解决了陌生人间的信任问题。

到目前为止,解决信任问题的最重要的机制,就是“信任中介”机构和模式。

只要你和陌生人,都信任一个第三方机构,那可以通过这个第三方机构来解决你们之间的信任问题。

这个第三方机构,我们把它叫做信任中介。政府、银行都是信任中介

你辛苦生产出来的商品卖给一个陌生人,换来一叠人民币纸钞,你觉得没问题,那是背后有因为发钞银行的信用、政府权威的保证,保证了纸钞的币值和有效性。否则,卖东西,换来几张普通纸头,谁愿意?

在全球村时代、互联网时代,买你东西的人可能是不会见面、千里之外的陌生人。信任度更低了,因此支付宝承担起信任中介作用,买家先把货款付到支付宝的账上,等到收到货了,确认没问题,再同意把货款打给卖家。淘宝等电商在短短十几年间快速繁荣起来。

信任中介在交易体系中,处于一个中心位置,所有的交易,都要通过它来解决信任问题。

但是,信任中介本身的成本,往往很巨大。

政府作为信任中介,每年要收多少交易税?最赚钱的行业是哪个?金融服务业。拥有支付宝的蚂蚁金服年利润超过百亿。

这意味着什么呢?市场的交易双方,实际上付出了极为庞大的信任成本。

如果有什么办法,能取消或者大幅降低这种信任成本,那么普通大众的交易费用可减少,所得利润就能大幅增加了。

于是在互联网时代,区块链技术上场了。

它让交易方甩开中介,解决陌生人间的信任问题,大幅降低信任成本。



区块链的概念最早于2008年在比特币创始人,中本聪的论文《比特币:一种点对点的电子现金系统(Bitcoin: A Peer-to-Peer Electronic Cash System)》中首次提出。

区块链可以理解为一种公共记账的技术方案,其基本思想可以这样理解:通过建立一个互联网上的公共账本,由网络中所有参与的用户共同在账本上记账与核账,每个人(计算机)都有个一样的账本,系统会自动比较,会认为相同数量最多的账本是真的账本,少部分和别人数量不一样的账本是虚假的账本。

在这种情况下,任何人篡改自己的账本是没有意义的,除非你能够篡改整个系统里面大部分节点。同时,所有的数据都是公开透明的,并不需要一个中心服务器作为信任中介。因此,区块链技术在技术层面就能保证信息的真实性、不可篡改性,也就是可信性。


这段话有点生涩,我们打个比方,就好理解了。

它就相当于让每个人有个神奇的小本本。当任意两个人之间做了一笔交易,交易的全部信息就会被记录在这两个人的小本本上。同时,自动复制到所有人的小本本上。

交易生效后,你想反悔了。对不起,这笔交易因为有所有人作证,你是赖不掉的。哪怕你把自己的小本本上的记录篡改掉,也没用。因为每个人本子上都记录了,不可能把所有人的本子都改掉。

其他所有人都自动地为你们的交易做公证,谁也别想赖账。


因为区块链可以大规模扩展、数据公开透明,每个客户端数据一致,即使部分客户端被毁也不影响数据安全,这些高度可靠的技术特点,能用低成本解决陌生人间的信任问题。

这个技术,可以推广到所有可以数字化的领域,比如数字货币、支付清算、数字票据、权益证明、征信、政务服务、医疗记录等。

从中长期看,区块链会是一项革命性的技术,会像现有的互联网一样带来巨大的社会变革,是有巨大的投资价值和赚钱机会的。

未来,那些能把区块链结合到不同场景推广应用的公司,可能是下一群BAT,下一个谷歌、微软和苹果。

而比特币作为区块链技术的第一个现实应用,已经在全世界广泛接受和使用,数百万用户、数以万计的商户接受了比特币这种数字货币的支付,作为货币的交换价值在增长,甚至由于总量固定,长期价值看涨的共识,成为类似黄金的避险资产,价格暴涨。

但是!这种暴涨,不是完全基于它的价值,更多是大众基于无知和非理性情绪,而炒作出来的价格泡沫。

现在不要抱着暴富的心态去追高数字货币,结局会很惨!

也不要轻易跟着股市炒概念,否则你就是下一个被割的韭菜!

编辑于 2018-01-12 17:21

先讲个小故事。说有这么一个岛,叫做雅浦岛(Yap),位于太平洋西部加罗林群岛中,这个岛上一共只有数千人,这个岛估计没几个普通人知道,然而对于经济学家来说,这个岛上的货币体系则相当有启发意义。

这个岛上的货币叫做“费币”,不是“废”,而是“费”。这种币有个什么样的特点呢:都是又大又厚的石轮,从 1 英尺 到 12 英尺不等(感谢 @lixin liu 大佬的指正),中间有孔洞。

就像这样。

这种币,我猜没法放在口袋里兜着到集市上买东西,但实际上岛上的居民有很频繁的交易,他们是怎么使用这种币的呢:通过在币上记账。交易过程一般都是债务互相低效的过程,账款通常留待以后的交易中进行转结。

即使到了最后的清算时刻,也几乎没人会去搬这个币,毕竟吃饱了也不能瞎干。当地人只是在上面做标记,以显示所有权的转移,却无须持有(搬到自己家门口)。

甚至有的币偶尔需要运输被掉进海里,人们也承认这块石币的价值不应该受到影响,William Henry Furness 讲了一个例子,说有一家人,比较有钱,不过他家的币爷爷辈就丢了,孙子都没见过这个币,但依然自信地认为自己家就是这么有钱。

这个故事说明了什么呢,「也许货币不是一种商品,而是信用和清算构成的一套记账体系」。

而区块链,就相当于这个账本,区块就相当于这个账本的一页,区块中所承载的信息,就是这一页上记载的交易内容。

以比特币为例,大约每十分钟就行一次「算力竞赛」来竞争这个记账的权利。就好比说,你的算力牛逼,算得多,就像肌肉更结实,更会打,我们都服你,让你来记这个帐,即向区块链这个总账本写入一个区块(注意不是区块里的内容)的权利。

不过需要说明的一点是,计算能力只能决定赢得竞争的概率。就好比说,一共有若干张彩票,算力多的可以买更多张提高中奖概率,然而买得多的人,也不一定最后就中奖了,毕竟就像太极能够一打十嘛(滑稽)。

算力竞争通过工作量证明机制(Proof of Work,PoW)来判定。另外还有权益证明(Proof of Stake,PoS)、沉淀证明(Proof of Deposit,PoD)等。

然后,根据比特币的设计,每轮竞争胜出的人就可以获得一定数量的比特币奖励。这就把竞争记账机制和货币的发行结合在一起了,哇,是真的优美。

所以说区块链其实不等同于虚拟货币,更精确的说法是:由于在创造比特币时,并没有现成的、可以支持比特币系统运行的底层技术架构,所以中本聪创造了区块链。所以说,虚拟货币只是区块链的一种应用。

而这个公开、透明、几乎不可能篡改的去中心化大账本其实还有很多其他的应用,比如媒体、社交、交易,甚至医疗出版等等。

最后借 Robert Wolinsky 的话给我们学经济学的吹一波NB:要了解区块链(比特币)的内在优雅,不是软件使得比特币如此有效,而是经济学。(逃

编辑于 2017-07-09 00:22

2019年10月25日,北京时间晚7点的新闻联播,用了最宝贵的前五分钟,只讲了一件事情:国家要大力发展区块链技术

朋友微信问我,不是前段时间还打击数字货币吗,怎么这就要大力发展了?这意味着什么。我说,这意味着数字时代货币战争的号角已经吹响。美国自布林顿森林体系瓦解后建立的美元霸权主义将面临来自神秘东方力量的强力挑战。

鉴于我的很多朋友还没搞清楚什么是区块链,就更无法理解其中的联系。那么请允许我,不讲废话套话,不忽悠无套路,先用三分钟把区块链究竟是什么这件事讲清楚。

我保证,我说的,和你在网上搜到的那些废话,完全不一样。

1 区块链是什么?

回答这个问题的关键就是:先别管区块链是什么。

很多人搞不懂区块链是什么就是因为上来就死抠“区块链是什么?”这个概念,然后被各种“区块”、“挖矿”、“去中心化”、“双花攻击”、“拜占庭将军问题”等等概念搞晕了。

就比如说我问你“手机是什么?”

你先别往下看,你先想一想。定义一下“手机”。

你给出来的答案一定不是“可以在较广范围内使用的便携式电话终端”(取自百度百科)。这种定义我读都读不通畅。

你会说:手机是用来打电话的,发微信的,刷抖音的,看朋友圈的

同理,我们先不要纠结区块链的技术原理是什么,先问“区块链是用来干嘛的呢?”

区块链是用来共同记录公共数据的,或者更狭义的说,用来记账的。

你说记账用电脑自己记就可以啊,为什么要区块链记呢?

因为你自己记的账别人不信。你谁啊?凭什么你记的别人就信?

比如,你在你的电脑里记了张三欠你1万块钱,张三说我电脑里还记了你欠我100万呢。那怎么办?

以前这么解决:找一个公证人,你俩的账都记在公证人这里,出现纠纷以公证人的账本为准。比如银行就是干这个的。你俩的钱都存他那里,转账、借款都有记录。

区块链这么解决:你在自己的电脑里记账的时候,张三也在自己电脑里记一下同样的数据,记好之后,你俩互相检查一下,都认可了,这账就算正式记下了。中间不需要第三方或者所谓“权威机构”、“认证机构”的参与。

大家共同记账的方式,也被称为“分布式”或“去中心化”,因为人人都记账,且账本的准确性由程式算法决定,而非某个权威机构

这就是区块链,核心讲完了,区块链就这么简单,一个共同记账的账本。

当然,区块链在实际应用中,参与人数可多可少,也会应用在包括数字金融、物联网、数字资产等等多个领域。比如应用在游戏领域就是大家一起记录游戏道具的所有权、道具属性等等。

比特币,就是区块链在数字金融和数字货币领域最大的应用。

你说:啊?就这么简单吗?是的,就这么简单。

剩下的都是技术怎么实现的问题,你不需要了解。就像你只要知道4G比3G快就行了,不需要知道4G是什么原理一样。只会把自己搞晕。

2 下面具体讲讲比特币

现在要记账的不仅仅有你和张三了,还有李四王五赵六吴七以及他们数以百万计的子子孙孙们。几百万上千万个人要一起记账。

怎么记?和前面一样,每转一笔账,所有人的电脑都记录一遍,然后相互检查,保证几百万台电脑的账都一模一样,这账就算正式记下了。

为了奖励提供电脑来记账的人,每隔几分钟就会在所有记账的电脑中随机奖励一次积分。电脑性能越好,中奖概率就越高。这个记账的过程,就叫做“挖矿”,这个积分,就叫做比特币

这就是比特币,核心讲完了,比特币就这么简单。几百万台电脑一起记一本账,本本都一样,账上记录了每个人有多少钱(比特币)。

剩下的都是技术怎么实现的问题。怎么实现的也不需要具体了解,你只要知道,比特币网络运行了10年,没出什么大问题就好了。

3 金融即账本

你会说,按你这么说,比特币就记个账而已,为什么这么值钱啊?

因为,金融世界本就只是一个巨大的账本啊。

你仔细想想,你的存款、你的股票、你的基金,都只是别人账本里的一串数字。

不同的是,这支记账的笔,在谁的手里。

稍微扯远一点,目前中美在区块链金融发力狂飙、军备竞赛的真正原因,就是要拿下给全世界记账的这支笔。这个我们后面详细解释。

你把钱存银行,这支记账的笔,就在银行手里

你可以深想一下,如果哪天,银行的系统出问题了,你账户里的钱余额变成了0,你怎么证明你账户里曾经有过那三万八千六?

或者如果哪天,被人诬陷,所有银行账户被冻结,你该怎么办?明明是属于你的钱,如果不存进银行就不可能被冻结。现在存进去了反而就不再属于你的了。这种设定是不是很奇怪?

当然,这种事情,是不会发生在法制健全、科技发达的我国的。不过在银行随时可能倒闭,本地货币随时可能一文不值的一些贫穷落后国家呢?

区块链可以如何改变这种情况呢?

如果这笔账是在运行正常的区块链上记录的,那么当银行说自己的电脑坏了查不到你的存款记录的时候,你可以告诉他,没关系,我的电脑里有记录,而且不仅仅我的电脑里有,另外的几百万台电脑里也有和我电脑一模一样的记录

同样,在正常运行的区块链上,银行也无法冻结你的账户。因为你的资产不再是只存在它电脑里的一串字符,而是在千万台电脑里都广泛被承认的

同时,区块链具有极其顽强的生命力。比特币,之所以在被众多国家严令禁止的情况下还能够存活这么多年,并且价格越来越高,就是因为它太难被禁了。世界上数十万台记录着同一本比特币账本的计算机,分布在数十个国家的学校机房、普通民宅、深山老林、旷野深处。不管如何打击,只要世界上还有一台机器还在跑着比特币账本,它就不会真正死去

关于区块链是什么这个问题,到此就回答完毕了。下面是我关于中美未来在区块链金融领域发力的一些看法。这比区块链本身,要精彩的太多!

4 下一代世界货币

我在这里讲这么多区块链的优点,并不是为了给比特币唱赞歌。诚然,比特币是一个非常成功的经济学结合计算机技术的实验,它的成功也让这世界上最聪明的人看到了区块链颠覆当前世界货币体系和经济格局的可能性。比如说Facebook的扎克伯格。我们要理解昨天新闻的深刻用意,也需要将自己的眼光至少拔高到扎克伯格一样的高度。

我们在提到区块链的洗钱风险、难以监管、难以控制的时候,往往会不自觉地想到国家一定会对其进行打压,因为它不利于国家的经济秩序。

但是,如果我们不是总想着怎么去防守它对我们可能的伤害,而是把它打磨成一柄利刃,用于开疆拓土、远播华夏文明呢?如果,我只是说如果,我们不把区块链金融用在本国经济体系中,而是用于整个世界经济体系呢?

正如之前所述,区块链金融和银行相比,有三个非常突出的优势:

  1. 一键开立账户,无需身份证明等任何手续
  2. 发行量公开透明可控制,无需担心币价大幅贬值
  3. 抗审查抗冻结

这三个特点对本国经济体系可能会带来负面影响,但如果用于进入他国经济体系,却是三把极其锋利的尖刀

我们大胆的想象一下,无比方便好用的支付宝/微信移动支付加上杀不死的区块链金融/比特币,我们可以得到什么:

无需设立任何银行网点,无需和任何国家达成协议,就可以让全世界各个角落的人,仅通过一部手机,就使用人民币或者由中国控制的数字货币进行结算。而且最狠的是:其他国家想禁止也禁止不了。

我们可以得到这么一种新型世界通用货币和新型APP产品:

  • 手机一键免费开立账户
  • 无国界转账
  • 用户体验极佳
  • 安全性极高
  • 抗审查、抗冻结
  • 抗通胀、汇率稳定
  • 大国背书

远的不说,这至少可以马上大幅改善全球数十亿尚无银行账户的人们的生活方式。他们将可以一键获得自己的全球通用免费账户,货币将无需担心突然贬值或账户被冻结。

5 号角吹响

毋庸置疑,这个新型世界通用货币将是未来货币的新形态,也是这次数字世界货币战争的终极战利品。谁将是新的世界金融规则制定者?

人民币国际化已经进行了很多年,但其终究还是在原有世界格局下的存量竞争,需要一国一洲攻城拔寨。如果,我们能够用用户体验和民心,而不是航母舰队和轰炸机,来成为新型世界货币的规则制定者,从下至上颠覆整个世界货币格局,会不会更有趣?

就在两天前,美国国会对Facebook的数字货币Libra计划进行了长达六小时的问询。期间,扎克伯格说:“我不知道我能不能搞成,但支付宝和微信都在拼命搞区块链,我们再不搞,中国就搞出来了。”

数字世界货币战争的号角已经吹响,各位勇士们,准备好了吗?


关于以人民币为基础的数字货币,更多想法写在了以下答案。


看了大家的回复以及其他关于区块链的答案,想讨论一个问题:

区块链真的去中心化吗?有多去中心化呢?

我先给我的观点,区块链的去中心化是一个美好的设想,目前在实际应用中,远远没有大家想象的那么去中心化。

绝大多数情况,都是一个人,或者个位数的中心化组织或个人垄断了51%以上的算力。

就拿大家熟悉的比特币来说,几乎所有的人都在说比特币是去中心化的,有几万几十万台分布在世界各地的矿机,几乎杜绝了串谋舞弊的可能性。

但真实情况果真如此吗?下图是我随手在网上找的2018年比特币矿池算力占比图。

算力分布的概念和矿池的概念我就不展开讲了。百度和知乎都有很好的答案。但通过这张图你可以很明显的看到,即使是被吹上了天的去中心化数字货币比特币,也并不是一个理想中人人平等,完全去中心化的状态,而是由几个资金实力极为雄厚的大矿池和大矿主垄断了算力。

我无意去抨击矿池和矿场的老板,因为这其实是事物发展所必然的结果。而且他们很多都是区块链行业的先驱,为区块链的发展实实在在的做了很多贡献。但我只是想说明一个事实,即:区块链不等于极度分散和完全去中心化。也没有这个必要。

那么为什么无法完全去中心化会是比特币的必然结果呢?

因为比特币挖矿可以赚钱,而规模效益可以提高这个赚钱的效率

最早的时候比特币卖不了钱,所以算力很分散,大家都是玩玩的。但随着比特币越来越值钱,越来越多的人就开始算经济账了。

比特币挖矿拼的是机器的算力,好的机器可以只用一百度电就可以挖100美元的比特币,不好的机器要一千度电才能挖100美元。而好的机器,需要资本投入去研发、生产。

同理,挖矿所产生的电费,一般人是6毛钱一度,而有规模效应的大矿场,可以做到2毛到4毛。

在这种情况下,必然会造成强者恒强,弱者不断被淘汰,算力越来越集中。

那么你也许会问,比特币是这样,那其他的区块链项目呢?

很遗憾,都差不多。

而且每隔段时间就会有新的人跳出来说自己解决了这个问题,但一旦开始赚钱了,就还是逃不过规模效益这个简单又强大的经济学定律

编辑于 2019-10-29 22:34

区块链、比特币、人工智能将会是 2018 年人们讨论最多的问题。轻芒杂志请来 CSDN 网站副总裁孟岩,讨论了这些概念之间的关系,并解答了如区块链是什么、区块链会在多大程度上会影响我们的生活这样的问题。更多关于区块链的干货,你可以通过微信搜索轻芒杂志小程序,订阅孟岩主编的 #区块链 杂志来了解。


孟岩,CSDN 副总裁,多年技术媒体总编,IBM 8 年传播战略,现致力于培养区块链应用型人才。


区块链是什么?如何简单易懂地介绍区块链

区块链本质上是一个分布式的公共账本,任何人都可以对这个公共账本进行核查,但不存在一个单一的用户可以对它进行控制。在区块链系统中的参与者们,会共同维持账本的更新:它只能按照严格的规则和共识来进行修改,这背后有非常精妙的设计。- 区块链,将如何重新定义世界?


要搞懂区块链,没有捷径。你必须先从基础开始,区块链作为一个数据结构、从哈希函数、哈希指针,然后到区块链、到这个所谓的默克尔数。然后再理解区块链通过 P2P 网络实现去中心化的设计、理解它的共享式账本技术设计,理解中本聪对于一系列的挖矿、记账啊、包括奖励呀的这些设计。

把区块链的技术基础和技术实现搞清楚——为什么它拥有一些所谓的不可篡改呀、可追溯啊、去中心化的这样的一些特点,为什么能够拥有这样一些特点。只有把这个这一条路不折不扣地走下去,才能真正懂区块链。

到了那一步之后我们可以谈一些比较虚的问题,比如说它是不是一个分布式账本技术,它是不是一个价值互联网,它是不是我们所说的通证(token)的运行平台啊,或者它是不是一个全球计算机。只有具备的前面我说的这些技术基础之后,我们再谈这些更高的或者更抽象的一些话题才是有意义的。


区块链和比特币之间究竟是什么关系

比特币跟区块链就像是 Facebook 之于社交网络这么一个关系。Facebook 是第一个社交网络,而且它证明了社交网络的巨大威力,比特币是第一个区块链,它证明了区块链的巨大的潜力。

2009 - 2017 年比特币价格变化图

比特币是区块链技术的第一个实现。比特币出来的时候,还没有人把它的技术称之为区块链,应该这么讲,是比特币在创新的过程当中自然而然地形成了区块链这样的设计。当人们对比特币的神奇感到非常惊讶的时候,就去研究它背后的技术。从那么多的保障当中挖出了区块链这样一个核心的保障,然后命令为区块链。然后我们期望同样的技术可以用于其他的领域。

但我认为,相比于社交网络而言,区块链、比特币所开创的这个新时代要更宏大,对我们的影响、对我们整个商业、我们生活的影响,会更加深远。


区块链技术是什么?未来可能应用在什么方面

我认为区块链可以从四个角度来定义,第一,它是一种数据结构。第二,它是一个分布式账本技术。第三,它是价值互联网或者叫通证经济互联网的一个协议。第四,它是一种全球超级计算机。

区块链的应用非常地广泛,从我们一般熟知的比如说供应链系统的追踪、共享账本、共享数据库这些领域开始,一直到我们想象比较科幻的,比如你可以用区块链来追踪食品和药品,使得那些试图造假的人几乎非常难造假。

据腾讯科技,6 月 9 日,京东宣布成立「京东品质溯源防伪联盟」,将运用区块链技术搭建「京东区块链防伪追溯开放平台」,逐步通过联盟链的方式,实现线上线下零售的商品追溯与防伪。
科尔沁牛业是其中一个应用试点,消费者在京东商城购买的部分科尔沁牛业产品,可以实现从牛肉养殖源头全程追溯的信息查询。(图片来自 Quartz)


你也可以把区块链上的货币或数字货币或者通证当成一种投资工具,就像现在很多币圈的人在炒币一样;你也可以把区块链当成是一个智能合约的执行平台;你也可以用区块链来控制自动驾驶汽车控制未来的机器人,区块链将会为未来的人工智能立法。

因此在我们圈子有这么一个说法,不管这个说法是对是错,大家赞成还是反对——就是人工智能是更先进的生产力,而区块链是更先进的生产关系。还有一种说法说人工智能关注的是每个人的能力的提升,而区块链关注的是权力和利益如何调整。

未来,区块链会成为互联网的一次全面升级。在我们区块链社区里面很多非常信任区块链的拥趸,他们认为相比于区块链,互联网只是区块链时代到来之前的一段小序曲而已,区块链才是真正改变人类社会、改变生产关系、改变社会制度的真正巨大的东西。互联网只是为区块链奠定了基础设施而已。


读者可以怎么从你主编的 #区块链 杂志里了解到哪些知识

我编辑这本杂志是用业余时间,在手机阅读平台上看到优秀的、有启发性的文章。我会把它挑出来推荐给读者。

那我会挑一些什么样的文章呢,第一是有比较精彩的技术分析的文章,第二,有这个比较高水平的见解和主张的一些文章,包括一些洞察一些有启发性的观点的文章。第三,我会挑选各国各个国家和地区对于区块链的政策的一些变化。

马克图片来自 轻芒 #区块链 杂志

那我不会做什么呢,我在杂志里原则上绝不做任何区块链项目的推荐,很多区块链项目跟所谓的发币——就是发自己的数字货币搅在一起的,而发币这个事情我们不得不承认里面已经夹杂了很多的炒作,有一些空气币,甚至是传销和欺诈。杂志里面绝不会向大家推荐任何的这种炒作项目。

微信搜索轻芒杂志小程序,订阅 #区块链 杂志

区块链这种新的社会结构和分配方式,对未来社会会有什么样的影响

区块链这个技术脱胎于比特币,比特币的技术是来自于一个特别不同寻常的一个社区或者一个社会运动,叫密码朋克运动

密码朋克运动发源于七十年代的,属于美国社会角落当中的一个社会运动。他跟原来的黑客运动,嬉皮士运动、开源运动同时发展,精神上有很多相通的地方。

他们认为密码学是上帝赐给人类的这个最好的礼物之一,用密码学保护个人隐私是最重要的武器,要用密码学来对抗大型组织企图窃取个人隐私、干涉、破坏个人自由的企图和用心。因此他们开发了一系列的软件密码学的软件来保护个人自由。

1993 年是个大年,Eric Hughes, Tim May 和 John Gilmore 一起坐在咖啡馆里,一起讨论出《密码朋克宣言》,宣告密码朋克正式成为了一项运动。同年还发生了一件大事,Bruce Schneier 出版了一本书叫做《应用密码学》,这本书对当时所有军用民用的密码学做了一个总结,并且这本书可以在全世界发行。- 聊聊「密码朋克」运动与区块链发展路径


区块链这个技术脱胎于这样一个社会运动,天然地就具有很多特点,比如说去中心化、通过加密的方式进行强力的信息隐私的保护、对等通讯的技术。这些技术应用在我们的生产生活当中给我们传统的、中心化的、等级的一个社会体系,用一个重要的技术手段和工具来进行根本性调整。

区块链是一种重新调整权力和利益分配的技术,会在现实生活中会引起非常剧烈的波澜。因为他瞄准的是这个人类社会最根本的人与人之间的关系、协作的一种模式。所以它能带来的这种影响,往大了说是匪夷所思的、我们现在很难预料的。


请给「区块链」杂志写一段创刊

一百年后回望我们所在的历史阶段,人们会不假思索的认为,互联网只是一个前奏,一个小插曲,真正的大浪是区块链。这是我们区块链人的信仰。我来跟大家一起冲浪。


如果你也对 #区块链 领域感兴趣,或者有所研究,欢迎和孟岩一起来编辑这本杂志。

如果你觉得自己在某些领域内有长期的体验与心得、有专业知识的背景、有与人不同的见识,也可以通过轻芒杂志内首页右上角的对话框与我们联系,申请主编职位,贡献独特的内容。我们最终的期待是轻芒杂志有一千名、一万名主编,人人都在贡献自己的知识和独特体验。这就是我们的初衷,用内容来丰富人与世界的关系,在人与人之间建立一种隐密而韧性的纽带。

- 为什么我们邀请了 100 位主编入驻轻芒杂志?

在全新的轻芒杂志中,我们用一个简洁普世的符号 ⭕️ 来表示「马克」,也在 logo 上为「轻芒」两个字「马克」了重点。至于「让理想生活的样子清晰可见」,我认为内容是人和世界之间的桥梁。不论你是需要一些灵感想把刚刚租来的新屋布置得有品位每周都插一束新的花却不想花掉半年的积蓄,还是想找一些 idea 给即将生日的好友送出一份特别的 DIY 礼物、做一道喜欢的菜肴,抑或是背起行囊到东京的街头散步、快速解读日本科技新品的最新趋势……

- 卷首语〡轻芒杂志 iOS 全新版本正式发布

编辑于 2017-12-20 11:14