————文章出自极客时间《深入浅出区块链》   作者:元界 CTO 陈浩  

  上一次,我们聊到了区块链的概念及整个行业的发展过程,今天我想稍微深入一下,尽可能通俗地介绍一下:区块链到底是如何运行的?

  这一篇文章我将以比特币区块链为例来进行讲解,理由有两个:

  •   由于区块链发展到目前阶段,各个技术方向都有长足的发展,那么为了方便你理解,我在这里介绍最简单、最容易理解的比特币区块链;
  •   由于大部分区块链都是以比特币区块链为基础进行扩充的,所以首先了解比特币区块链有助于其他项目区块链的后续学习。

中心化记账的问题

  首先,我们借鉴了一个区块链描述中的经典情景来模拟中心化记账。

  假设有一个有百户居民的村子,其中有一位德高望重的村长,村长有一个儿子。村民们都把钱存到村长家,村长负责记账。比如,张三用1000买了李四家的牛,村长就把张三名下的存款减去1000,李四家加上1000。听起来是不是很像银行的操作?

  对,我们就是先从中心化的银行记账开始聊起。村民都相信村长,才愿意把钱存到村长家,他们相信村长不会作恶。

  可惜好景不长,老村长由于操劳过度,驾鹤西去了。新上任的村长儿子铁蛋很是聪明,但也有个毛病,就是粗心大意。他不但经常算错账,一次还被人偷改了账单。

  不过,幸好村民自己都有记账,但是由于铁蛋每次错账后都要和别人核对半天,导致村民对新村长的记账能力十分不满。

  时间就这么过着,然而最可怕的事情还是发生了,铁蛋的老婆竟然私下篡改账本,给铁蛋七大姑八大姨的余额全部偷偷加了好多,终于有一天事情暴露,村民们气冲冲地跑到铁蛋家里讨说法,于是一片混乱。

  这时候有个叫中本聪的人站了出来,他说他设计了一套系统,可以不依赖任何人记账,于是,众人开始将目光集中到他的身上。

1. 公开记账

  中本聪说他的系统稍微麻烦一点,需要干三件事儿。

  1. 每家每户都派发一只信鸽。这就是 P2P网络,是一个点对点的分布式网络,如果不好理解,你先不用理会,我会在后面讲到。
  2. 每家每户都发一个特殊的印章和一个扫描器。这个扫描器有两个功效,一是识别他人的交易是否真实有效,二是识别这个交易是不是自己账号的,同时识别并解锁未花费的余额。这就是非对称加密。
  3. 每家每户可以参与记账,不过不再记余额,而是记交易本身的内容。这就是区块链中的交易,这个“交易”对应的英文单词是“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、广播交易的几个步骤。

  因为篇幅所限,在表述上可能会有不精确的部分,但是大体意思是相通的,相信读完文本,你已经对区块链的原理有了一个大致的了解。

  

转载于:https://www.cnblogs.com/sueyyyy/articles/9630745.html

第2讲 | 区块链到底是怎么运行的?相关推荐

  1. 区块链到底是怎么运行的

    为了方便你理解,这一篇文章我将以比特币为例来进行讲解,因为比特币算是区块链应用中最简单.最容易理解的一个案例了. 中心化记账的问题 首先,举一个关于中心化记账的经典例子 - 银行转账.假设小明给小红转 ...

  2. 第4讲 | 区块链的应用类型

    我在前面的三篇文章中分别介绍了区块链是什么.区块链的运行原理.并且简述了区块链的共识机制,在这一篇文章中,我将为你讲解一下区块链的应用价值. 由于区块链本身发展处于早期阶段,成熟的应用并不是很多,我的 ...

  3. 区块链到底是什么?和普通人有什么关系?

    区块链到底是什么?和普通人有什么关系? 简单讲,区块链就是一个去中心化的信任机制. 本问答主要针对想了解区块链,无专业技术和金融背景的普通人.会尽量回避一切技术术语. 问:什么是区块链? 答:区块链( ...

  4. 区块链学习笔记:区块链到底能干什么

    来源:区块律动BlockBeats 作者:Jade 编者语: 区块链媒体被大量封号,BAT 联手全网封杀,再到昨天的国家互金举报平台将「代币发行融资」纳入举报范围,还有网上谣传的所谓「利箭行动」. 最 ...

  5. 用最简单易懂的方式告诉大家——区块链到底是什么?

    用最简单易懂的方式告诉大家--区块链到底是什么? 区块链是什么通俗解释,我们先看看区块链目前最成功的应用--比特币是什么?我们就别卖关子了,我们举最通俗的例子跟大家先说明白到底什么是比特币. 我花时间 ...

  6. 区块链到底能干什么?

    对于区块链从业者来说,最近一个多月的经历堪比过山车.许多币圈大佬们前脚刚感叹"幸福来得太突然",还未换好正规军马甲响应国家号召,后脚就被"剿匪",整个剧本颇有魔 ...

  7. 终于有人能够解释清楚区块链到底是什么了!

    据ResearchandMarkets据测,到2022年,全球区块链市场规模将达到139.6亿美元.2017至2022年间,该市场的年复合增长率为42.8%. 近日有消息称原<QQ炫舞>团 ...

  8. 互联网厂商抢着布局的“无币区块链”到底是什么?

    互联网厂商抢着布局的"无币区块链"到底是什么? 去年上半年,央视开始频繁报道区块链技术,主要内容为风险防范,以及提出了"无币区块链"的概念.近年来,国内各地不惜 ...

  9. 漫画告诉你:区块链到底是什么?

    区块链到底是什么? 一幅漫画让你秒懂 区块链技术是指一种全民参与记账的方式.所有的系统背后都有一个数据库,你可以把数据库看成是就是一个大账本.目前是各自记各自的账. 由于没有中心化的中介机构存在,让所 ...

  10. 从技术角度告诉你,区块链到底有哪些特点和运作机制

    从技术角度告诉你,区块链到底有哪些特点和运作机制 王思宇 • 2016-06-28 13:18 摘要: 区块链技术的核心是实现了沿时间轴记录数据与合约,并且一旦写入,就只能读取,不能修改和删除. 自从 ...

最新文章

  1. JAVA那点破事!并发、IO模型、集合、线程池、死锁、非阻塞、AQS....
  2. opencv imshow
  3. 程序员第一次相亲,因请女方吃肯德基而被怒删!
  4. 15合并两个排序的链表
  5. asp.net ajax1.0基础回顾(七):综合应用
  6. Ansys ——自定义不规则形状梁截面
  7. 前端开发常见的浏览器兼容性问题?
  8. python怎么备份列表_python实例:backup 备份
  9. mkenvimage
  10. Jmeter逻辑控制器-ForEach Controller
  11. 通过Zoopkeeper-BinaryOutputArchive类学习utf-8的实现
  12. 单CPU处理1s视频仅需37ms、GPU仅需10ms,谷歌提出TVN视频架构
  13. linux平台设备驱动模型是什么意思,Linux设备驱动模型之我理解
  14. linux中的rootfs/initrd/ramfs/initramfs
  15. 【BFS】迷宫问题c++代码详解(逐句分析)
  16. 100个人奇数枪毙Java,在JAVA中用for循环编写程序计算1~100之间的奇数之和
  17. 城轨车辆段联锁设备采用计算机联锁,车辆段计算机联锁设备
  18. SD卡驱动(详细介绍,不明白的人可以仔细看看了.有流程图)
  19. 计算机可以关闭家庭组,win10系统禁用(关闭)家庭组功能的具体方法
  20. android 获取默认字体,Android默认字体

热门文章

  1. 类加载与 Java主类加载机制解析
  2. 深入Linux设备驱动程序内核机制
  3. Google AdSense实战宝典
  4. 4.1 tensorflow2实现Kruskal - Wallis 检验 ——python实战
  5. python学生信息管理
  6. Scala:函数式编程之下划线underscore
  7. I’m stuck!
  8. SQL Server-【知识与实战V】视图
  9. ADT(Android)—Eclipse开发AndroidManifest.xml在哪里
  10. Eclipse — 如何导入包