learn-tech/专栏/深入浅出区块链/第02讲区块链到底是怎么运行的?.md
2024-10-16 09:22:22 +08:00

143 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
第02讲 区块链到底是怎么运行的?
上一次,我们聊到了区块链的概念及整个行业的发展过程,今天我想稍微深入一下,尽可能通俗地介绍一下:区块链到底是如何运行的?
这一篇文章我将以比特币区块链为例来进行讲解,理由有两个:
由于区块链发展到目前阶段,各个技术方向都有长足的发展,那么为了方便你理解,我在这里介绍最简单、最容易理解的比特币区块链;
由于大部分区块链都是以比特币区块链为基础进行扩充的,所以首先了解比特币区块链有助于其他项目区块链的后续学习。
中心化记账的问题
首先,我们借鉴了一个区块链描述中的经典情景来模拟中心化记账。
假设有一个有百户居民的村子其中有一位德高望重的村长村长有一个儿子。村民们都把钱存到村长家村长负责记账。比如张三用1000买了李四家的牛村长就把张三名下的存款减去1000李四家加上1000。听起来是不是很像银行的操作
对,我们就是先从中心化的银行记账开始聊起。村民都相信村长,才愿意把钱存到村长家,他们相信村长不会作恶。
可惜好景不长,老村长由于操劳过度,驾鹤西去了。新上任的村长儿子铁蛋很是聪明,但也有个毛病,就是粗心大意。他不但经常算错账,一次还被人偷改了账单。
不过,幸好村民自己都有记账,但是由于铁蛋每次错账后都要和别人核对半天,导致村民对新村长的记账能力十分不满。
时间就这么过着,然而最可怕的事情还是发生了,铁蛋的老婆竟然私下篡改账本,给铁蛋七大姑八大姨的余额全部偷偷加了好多,终于有一天事情暴露,村民们气冲冲地跑到铁蛋家里讨说法,于是一片混乱。
这时候有个叫中本聪的人站了出来,他说他设计了一套系统,可以不依赖任何人记账,于是,众人开始将目光集中到他的身上。
1. 公开记账
中本聪说他的系统稍微麻烦一点,需要干三件事儿。
每家每户都派发一只信鸽。这就是 P2P网络是一个点对点的分布式网络如果不好理解你先不用理会我会在后面讲到。
每家每户都发一个特殊的印章和一个扫描器。这个扫描器有两个功效,一是识别他人的交易是否真实有效,二是识别这个交易是不是自己账号的,同时识别并解锁未花费的余额。这就是非对称加密。
每家每户可以参与记账不过不再记余额而是记交易本身的内容。这就是区块链中的交易这个“交易”对应的英文单词是“Transaction”这是个专有名词专指一笔账不同于金融交易的Trade。
这三条总体来说其实是干一件事情,就是:
每家每户都记账账簿上不再记载每户村民的余额而只记载每一笔Transaction即记载每一笔交易的付款人、收款人和付款金额。
那么问题就来了:如果每户都记账,肯定每户的账都不统一啊,你记你的,我记我的,最后不全乱了么?
这个时候需要大家统一账本,保证大家的账本都是一致的。因为记录的交易是全村所有人有序产生的,所以这就需要有一个广播机制。这个广播机制,我先卖个关子,后面再讲。
中本聪说其实很简单我们现在先把全村所有人的资产都加起来。还真巧了刚好100万。
中本聪接着说:“只要账簿的初始状态确定,并且每一笔交易可靠并按照物理时间自然记录,并且只加不改不删,这样,当前每户持有多少资产是可以推算出来的。”
中本聪说我现在把我的印章给你们看这个印章很特殊盖的章有两块标记第一块是一个可以识别的标记比如我往纸上一敲可识别的标记是1MsTg2。
这就是你们的代号,由于我们账本是公开的,使用真实姓名会很危险,所以你们记账的交易单上收款人、付款人都填这个码,不用写姓名。你的扫描器和你的印章生成的代号是关联的,有且仅有持有对应扫描器的人才能花费金额,这一步即为“解开交易”。
刚刚说印章有两块,这第二块内容配合这个扫描器才能看,肉眼看则都是乱码,扫描器一扫就知道第二块内容是否有效,这一步也就是“交易验证”。
并且所有交易大家都能接收,都能看到,但却解不开印章乱码部分的内容,仅仅收款方才能解开,因为你的扫描器和你印章生成的代号是关联的,有且仅有持有对应扫描器的人才能解开交易。
以上就是区块链中“公开记账”的过程。“公开记账”就是全网所有人都可以随时查看一套账本,然后按照规则透明公开地进行记账。
2. 创建创世区块
创世区块是我们生成全村公开账本的第一笔交易的第一个信封,好比一篇文章总得有个开头一样。
于是乎中本聪说我先生成第一个Transaction这个交易单的付款人为空收款人是村长付款金额是100万因为是创世区块产出多少个是可以随意规定的由于我们上面统计了全村的账目情况所以我就写了100万待会儿付款给村长以后我们可以按照原来的账本给大家发送对应的金额过去。
好了我们有了第一笔交易第一个信封也已经做好了。现在让村长把信封传给张三张三复印一份然后传给李四李四继续传下去一传十十传百直到传给全村人这个步骤也就是“同步区块”也就是全网都拿到这个信封以及信封里面的Transaction。
3. 交易
由于上一节我们的创世区块把100万交给了村长那么我们假设张三在村长那里的存款余额是10万这时候村长要根据原来的旧账本把这10万发送给张三然后把旧账本上的账划掉。下面我们讨论一下如何构造这笔交易。
中本聪开始教村长写交易单把100万分成两部分第一部分10万收款人是张三第二部分是90万收款人是自己这样一个Transaction就做成啦。
前面我们说了,不能直接写名字,要写代号,这个代号也就是你的钱包地址,我们需要把收款人写名字的地方,让收款人拿出自己印章,把代号读出来,然后告诉村长即可。
100万  10万张三-
     90万自己
村长写好 Transaction 以后还需要拿出自己的印章在Transaction上盖章这个盖章的过程也就相当于区块链中的签名。这个章全村人都可以拿扫描器扫一下验证是否有效即验证付款人的章是否有效。
100万  10万张三的印章1s25vR-
     90万村长的印章13gYip
就这样村长一共写了10份Transaction分别代表了发送给不同人的交易张三一笔10万李四一笔1万等等。
4. 打包 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”也就是大名鼎鼎的“挖矿”。
5. 广播交易
来说说上文提到的广播交易广播是为了让全村人知道当前时刻你产生了一笔Transaction或者是你装好了一个信封。
广播的内容分两种一种是广播Transaction一种是广播信封。第一种广播是意味着还有未被打包的Transaction而第二种广播信封则意味着这个Transaction已经被某个矿工确认。
收到了广播的通知后,大家先验证信封上难题的答案是否正确,这样便可以验证出信封是否被伪造,接着验里面的每笔交易,最后还要验证信封背面的内容,即上一个信封的摘要是否正确。因为上一个信封大家都已经确认,所以这样可以极大地规避作弊的可能。如果觉得没问题,就可以存入本地数据库中了。
至此,全村人的记账问题就差不多解决啦。
总结
今天我用非常浅显的例子与你聊了比特币区块链其中包括区块链中公开记账、创建创世区块、交易、打包Transaction、广播交易的几个步骤。
因为篇幅所限,在表述上可能会有不精确的部分,但是大体意思是相通的,相信读完文本,你已经对区块链的原理有了一个大致的了解。
你也可以针对每个模块进行扩展比方更换矿工的计算方法可以推导出PoS共识机制不知道你还能想到哪些扩展呢欢迎留言探讨。
感谢你的收听,我们下次再见。
本文叙述模式参考链接:-
http://www.8btc.com/bitcoin-story?_t=1520884553