区块链技术的工作原理是什么?

问:玩了那么久的区块链,一直不知道区块链技术原理是什么,有可以帮我解释一下的吗?

收藏数

0

被浏览

37

立即邀请用户,更快获得回答
10个回答

区块链的基本原理理解起来并不难。基本概念包括:

交易(Transaction):一次操作,导致账本状态的一次改变,如添加一条记录;

区块(Block):记录一段时间内发生的交易和状态结果,是对当前账本状态的一次共识;

链(Chain):由一个个区块按照发生顺序串联而成,是整个状态变化的日志记录。

如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中所有交易内容导致状态改变的结果进行确认。

用通俗的话阐述:如果我们把数据库假设成一本账本,读写数据库就可以看做一种记账的行为,区块链技术的原理就是在一段时间内找出记账最快最好的人,由这个人来记账,然后将账本的这一页信息发给整个系统里的其他所有人。这也就相当于改变数据库所有的记录,发给全网的其他每个节点,所以区块链技术也称为分布式账本(distributed ledger)。

 


区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。

协议层

所谓的协议层,就是指代最底层的技术。这个层次通常是一个完整的区块链产品,类似于我们电脑的操作系统,它维护着网络节点,仅提供Api供调用。通常官方会提供简单的客户端(通称为钱包),这个客户端钱包功能也很简单,只能建立地址、验证签名、转账支付、查看余额等。这个层次是一切的基础,构建了网络环境、搭建了交易通道、制定了节点奖励规则,至于你要交易什么,想干什么,它一概不过问,也过问不了。典型的例子,自然是比特币,还有各种二代币,比如莱特币等,本书介绍的亿书币也是。这个层次,是现阶段开发者聚集的地方,这说明加密货币仍在起步当中。

从用到的技术来说,协议层主要包括网络编程、分布式算法、加密签名、数据存储技术等4个方面,其中网络编程能力是大家选择编程语言的主要考虑因素,因为分布式算法基本上属于业务逻辑上的实现,什么语言都可以做到,加密签名技术是直接简单的使用(请看书中相关的加密解密文章,不建议自由发挥,没有过多的编码逻辑),数据库技术也主要在使用层面,只有点对点网络的实现和并发处理才是开发的难点,所以对于那些网络编程能力强,对并发处理简单的语言,人们就特别偏爱。也因此,Nodejs开发区块链应用,逐渐变得更加流行,Go语言也在逐渐兴起。

我把这个层面进一步分成了存储层和网络层。数据存储可以相对独立,选择自由度大一些,可以单独来讨论。选择的原则无非是性能和易用性。我们知道,系统的整体性能,主要取决于网络或数据存储的I/O性能,网络I/O优化空间不大,但是本地数据存储的I/O是可以优化的。比如,比特币选择的是谷歌的LevelDB,据说这个数据库读写性能很好,但是很多功能需要开发者自己实现。目前,困扰业界的一个重大问题是,加密货币交易处理量远不如现在中心化的支付系统(银行等),除了I/O,需要全方位的突破。

分布式算法、加密签名等都要在实现点对点网络的过程中加以使用,所以自然是网络层的事情,也是编码的重点和难点,《Nodejs开发加密货币》全书分享的基本上就是这部分的内容。当然,也有把点对点网络的实现单独分开的,把节点查找、数据传输和验证等逻辑独立出来,而把共识算法、加密签名、数据存储等操作放在一起组成核心层。无论怎么组合,这两个部分都是最核心、最底层的部分,都是协议层的内容。

扩展层

这个层面类似于电脑的驱动程序,是为了让区块链产品更加实用。目前有两类,一是各类交易市场,是法币兑换加密货币的重要渠道,实现简单,来钱快,成本低,但风险也大。二是针对某个方向的扩展实现,比如基于亿书侧链,可为第三方出版机构、论坛网站等内容生产商提供定制服务等。特别值得一提的就是大家听得最多的“智能合约”的概念,这是典型的扩展层面的应用开发。所谓“智能合约”就是“可编程合约”,或者叫做“合约智能化”,其中的“智能”是执行上的智能,也就是说达到某个条件,合约自动执行,比如自动转移证券、自动付款等,目前还没有比较成型的产品,但不可否认,这将是区块链技术重要的发展方向。

扩展层使用的技术就没有什么限制了,可以包括很多,上面提到的分布式存储、机器学习、VR、物联网、大数据等等,都可以使用。编程语言的选择上,可以更加自由,因为可以与协议层完全分离,编程语言也可以与协议层使用的开发语言不相同。在开发上,除了在交易时与协议层进行交互之外,其他时候尽量不要与协议层的开发混在一起。这个层面与应用层更加接近,也可以理解为B/S架构的产品中的服务端(Server)。这样不仅在架构设计上更加科学,让区块链数据更小,网络更独立,同时也可以保证扩展层开发不受约束。

从这个层面来看,区块链可以架构开发任何类型的产品,不仅仅是用在金融行业。在未来,随着底层协议的更加完善,任何需要第三方支付的产品都可以方便的使用区块链技术;任何需要确权、征信和追溯的信息,都可以借助区块链来实现。我个人觉得,这个目标应该很快就能实现。

应用层

这个层面类似于电脑中的各种软件程序,是普通人可以真正直接使用的产品,也可以理解为B/S架构的产品中的浏览器端(Browser)。这个层面的应用,目前几乎是空白。市场亟待出现这样的应用,引爆市场,形成真正的扩张之势,让区块链技术快速走进寻常百姓,服务于大众。大家使用的各类轻钱包(客户端),应该算作应用层最简单、最典型的应用。很快,亿书将基于亿书网络推出文档协作工具,这个就是典型的应用层的产品。

限于当前区块链技术的发展,亿书只能从协议层出发,把目标指向应用层,同时为第三方开发者提供扩展层的强大支持。这样做既可以避免贪多,又可以避免无法落地,是真正理性的开发路线。因为纯粹的开发协议层或扩展层,无法真正理解和验证应用层,会脱离实际,让第三方开发者很难使用。如果仅仅考虑应用层,市面上又找不到真正牢固、易用的协议层或扩展层的产品。所以,我们只好全面发力,采取完全开源开放的态度,通过社区的力量,共同去做一件有意义的事情,也算为中国区块链技术发展做点技术积累和微薄贡献。


区块链技术原理

如今的区块链技术概括起来是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术。其实,区块链技术并不是一种单一的、全新的技术,而是多种现有技术(如加密算法、P2P文件传输等)整合的结果,这些技术与数据库巧妙地组合在一起,形成了一种新的数据记录、传递、存储与呈现的方式。简单的说,区块链技术就是一种大家共同参与记录信息、存储信息的技术。过去,人们将数据记录、存储的工作交给中心化的机构来完成,而区块链技术则让系统中的每一个人都可以参与数据的记录、存储。区块链技术在没有中央控制点的分布式对等网络下,使用分布式集体运作的方法,构建了一个P2P的自组织网络。通过复杂的校验机制,区块链数据库能够保持完整性、连续性和一致性,即使部分参与人作假也无法改变区块链的完整性,更无法篡改区块链中的数据。区块链技术涉及的关键点包括:、去中心化、集体维护、时间戳、可靠数据库、去信任、非对称加密等。

区块链技术重新定义了网络中信用的生成方式:在系统中,参与者无需了解其他人的背景资料,也不需要借助第三方机构的担保或保证,区块链技术保障了系统对价值转移的活动进行记录、传输、存储,其最后的结果一定是可信的。

区块链技术原理的来源可归纳为一个数学问题:拜占庭将军问题。拜占庭将军问题延伸到互联网生活中来,其内涵可概括为:在互联网大背景下,当需要与不熟悉的对手方进行价值交换活动时,人们如何才能防止不会被其中的恶意破坏者欺骗、迷惑从而做出错误的决策。进一步将拜占庭将军问题延伸到技术领域中来,其内涵可概括为:在缺少可信任的中央节点和可信任的通道的情况下,分布在网络中的各个节点应如何达成共识。区块链技术解决了闻名已久的拜占庭将军问题——它提供了一种无需信任单个节点、还能创建共识网络的方法。

 


第一:机器信任

过去网络上流行“怎么证明我妈是我妈”的新闻,这其实是一个直接用区块链就能解决的问题。

过去,我们的出生证、房产证、婚姻证等,需要一个中心的节点比如政府备书,大家才能承认。但一旦跨国,你就会遇到无穷的麻烦,跨国以后合同和证书可能就失效了,因为缺少全球性的中心节点。

区块链技术不可篡改的特性从根本上改变了中心化的信用创建方式,通过数学原理而非中心化信用机构来低成本地建立信用。我们的出生证、房产证、婚姻证都可以在区块链上公证,变成全球都信任的东西,当然也可以轻松证明 “我妈是我妈”。

人是善变的,而机器是不会撒谎的,区块链有望带领我们从个人信任、制度信任进入到机器信任的时代。

第二:价值传递

人类正处于一场从物理世界向虚拟世界迁徙的历史性运动中,而不能否认一个事实,人类的财富也将渐渐往互联网转移,这已经是既成事实。

传统的互联网不是为传递价值而生,互联网上信息的传输,本质是信息的拷贝。而现实中的货币流通要依靠中心化的组织做背书来维护运行,比如微信支付、支付宝、银联等。但现在有哪家公司能活1000年以上的吗?所以,依靠中心化的方式实现价值传递,弊病很多。

而区块链是第一个能够实现价值传递的网络,区块链技术有望带领人类从信息互联网过渡到了价值互联网的伟大时代。

区块链的价值传递应该按照两层意思来理解:

第一层是简单的价值传输,我们可以发送一个比特币给任何一个人。代币的全球性流通,让价值传输无比便利。

这个虽然看起来简单,但意义可能是巨大。我们这么来看,微信、支付宝小额移动支付的便利激活了一个万亿级别的知识付费行业(方便地打赏和购买),这是支付的便利带来的行业变革,而区块链带来的价值流动的便利性必然会对全球带来更巨大的影响。

第二层则是代币的流通或者说代币经济学带来的价值吸纳。

首先,代币发行让融资更加便利,这个在很多海外项目 ICO 的疯狂上就可以看到。

其次,代币的流通会吸纳价值。购买代币背后不是简单的购买服务,而是购买了整个生态。

举个例子,比如基于区块链的内容平台 Steemit,发行了代币 STEEM 来奖励内容生产者。Steemit 平台上每一个内容资产的增加,都会带来新价值的产生,又会吸引更多的用户,用户越多,STEEM 代币的消费也增加了,STEEM 代币的价值也相应增加,可以吸引更多的内容生产者,这种正向循环,从而形成生态效应。

由于代币STEEM的限量流通,代币STEEM能够吸纳整个Steemit生态的价值。

对于价值传递,价值流动越快,社会就越有活动。因为价值互联网,人类社会也必将迎来一场更完美的革命。


1、 每个账房先生对应的是每个网络节点,如果一个节点有改变,会广播通知其他的节点(这种互相通信的功能叫做“网络路由”)

2、 前一章的“掷骰子”成为“共识算法”(一种大家都认同的遵守的筛选方案),选出一个节点之后,数据在一段时间内以这个节点为准。此节点如果发生改变,会广播通知其它节点,其它的节点验证没问题后,就存储到各自的账本中。

3、 被选中的节点肯定是要处理很多事情的,于是设计了一个激励机制,像论坛积分一样增加,这样很多的节点都会去抢着干,这种竞争的过程,称之为“挖矿”。

 


如今的区块链技术概括起来是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术。其实,区块链技术并不是一种单一的、全新的技术,而是多种现有技术(如加密算法、P2P文件传输等)整合的结果,这些技术与数据库巧妙地组合在一起,形成了一种新的数据记录、传递、存储与呈现的方式。简单的说,区块链技术就是一种大家共同参与记录信息、存储信息的技术。过去,人们将数据记录、存储的工作交给中心化的机构来完成,而区块链技术则让系统中的每一个人都可以参与数据的记录、存储。区块链技术在没有中央控制点的分布式对等网络下,使用分布式集体运作的方法,构建了一个P2P的自组织网络。通过复杂的校验机制,区块链数据库能够保持完整性、连续性和一致性,即使部分参与人作假也无法改变区块链的完整性,更无法篡改区块链中的数据。

    区块链技术涉及的关键点包括:去中心化(Decentralized)、去信任(Trustless)、集体维护(Collectively maintain)、可靠数据库(ReliableDatabase)、时间戳(Time stamp)、非对称加密(AsymmetricCryptography)等。

    区块链技术重新定义了网络中信用的生成方式:在系统中,参与者无需了解其他人的背景资料,也不需要借助第三方机构的担保或保证,区块链技术保障了系统对价值转移的活动进行记录、传输、存储,其最后的结果一定是可信的。


区块链技术原理的来源可归纳为一个数学问题:拜占庭将军问题。拜占庭将军问题延伸到互联网生活中来,其内涵可概括为:在互联网大背景下,当需要与不熟悉的对手方进行价值交换活动时,人们如何才能防止不会被其中的恶意破坏者欺骗、迷惑从而做出错误的决策。进一步将拜占庭将军问题延伸到技术领域中来,其内涵可概括为:在缺少可信任的中央节点和可信任的通道的情况下,分布在网络中的各个节点应如何达成共识。区块链技术解决了闻名已久的拜占庭将军问题——它提供了一种无需信任单个节点、还能创建共识网络的方法。

    区块链技术的本质是一种互联网协议。

    设想一下,如果现在我们想要在互联网世界中建立一套全球通用的数据库,那么我们会面临三个亟待解决的问题,这三个问题也是设计区块链技术的核心所在:

    问题一:如何建立一个严谨的数据库,使得该数据库能够存储下海量的信息,同时又能在没有中心化结构的体系下保证数据库的完整性?

    问题二:如何记录并存储下这个严谨的数据库,使得即便参与数据记录的某些节点崩溃,我们仍然能保证整个数据库系统的正常运行与信息完备?

    问题三:如何使这个严谨且完整存储下来的数据库变得可信赖,使得我们可以在互联网无实名背景下成功防止诈骗?

    针对这三个核心问题,区块链构建了一整套完整的、连贯的数据库技术来达成目的,解决这三个问题的技术也成为了区块链最核心的三大技术。此外,为了保证区块链技术的可进化性与可扩展性,区块链系统设计者还引入了“脚本”的概念来实现数据库的可编程性。我们认为,这四大技术构成了区块链的核心技术。


一般说来,区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点


区块链的9个技术原理

01.区块

区块作为区块链的的基本结构单元,由包含元数据的区块头和包含交易数据的区块主体构成。

区块头包含三组元数据:

(1)用于连接前面的区块、索引自父区块哈希值的数据

(2)挖矿难度、Nonce(随机数,用于工作量证明算法的计数器)、时间戳

(3)能够总结并快速归纳校验区块中所有交易数据的Merkle树结构

(注:以上涉及的几个艰难术语在后文部分会相应解释)

02点对点技术(peer-to-peer)

点对点技术又称“对等互联网络技术”,依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。P2P网络的一个重要的目标就是让所有的客户端都能提供资源,包括带宽,存储空间和计算能力。因此,当有节点加入且对系统请求增多,整个系统的容量也增大。

03.哈希算法

哈希算法(hash)是区块链中保证交易信息不被篡改的单向密码机制。哈希算法接收一段明文后,以一种不可逆的方式将其转化成一段长度较短,位数固定的散列数据。

它有两个特点:(1)加密过程不可逆,意味着我们无法通过输出的散列数据倒推原本的明文是什么;(2)输出的明文与输出的散列数据一一对应,任何一个输入信息的变化,都必将导致最终输出的散列数据的变化。

在区块链中,通常使用SHA-256(安全散列算法)进行区块加密,这种算法的输入长度为256位,输出是一串长度为32字节的随机散列数据。

04.共识机制—工作量证明机制

当前主流的共识机制包括:工作量证明、权益证明、工作量证明与权益证明混合、股份授权证明、瑞波共识证明等。

重点了解比特币使用的工作量证明机制POW(Proof of Work )。POW的基本步骤:

(1)节点监听全网数据记录,通过基本合法性验证的数据记录将其暂存。

(2)节点消耗自身算力尝试不同的随机数,进行制定的哈希计算,并不断重复该过程直至找到合理的随机数。

(3)找到合理的随机数后,生成区块信息,首先输入区块头信息,然后是数据记录信息。

(4)对外部广播出新产生的区块,其他节点验证通过后,链接至区块链中,主链高度加一,然后所有节点切换至新区块后面继续进行工作量证明和区块产生。

每一个验证节点通过随机的散列运算,争夺区块链的记账权,避免双重支付,这一过程需要消耗电力、算力来完成,因此验证节点也称为“矿工”,计算过程称为“挖矿”。

挖矿的过程简单描述为:将交易集合到一个区块里——投入资源——解决问题——达成共识——保存完整账本的副本。

POW中,平均每10分钟有一个节点找到一个区块,一般情况下,需要6个区块的生成时间进行确认,因此一般交易在6个区块(1个小时)后被认为是安全确认且不可逆的。

05.时间戳

时间戳(timestamp),通常是一个字符序列,唯一的标识某一刻的时间。每个加盖时间戳生成的区块都独一无二。区块链中的时间戳从区块生成的一刻起就存在于区块链中,它对应的是每一次交易记录的认证,证明交易记录的真实性。时间戳是直接写在区块链中的,而区块链中已经生成的区块不可篡改,一旦篡改,生成的哈希值就会发生变化,从而变成一个无效的数据。

06.节点信任机制

在信息不对称的情况下,无需相互担保信任或第三方(所谓的中心)核发信用证书,采用基于互联网大数据的加密算法创设的节点普遍通过即为成立的节点信任机制:节点越多,需要的算力越强,超过51%的节点都通过,才能确立新区块。

07.非对称加密算法

我们经常听到的“公钥和私钥”,就是俗称的非成对加密方式,是对以前的对称加密方式(使用用户名和密码)的提高。

在区块链信息传递中,信息传递双方的公钥和私钥的加密与解密往往是不成对出现的。

信息发送者:用私钥对信息进行签名,使用信息接收方的公钥对信息加密。

信息接收方:用信息发送者的公钥验证信息发送者的身份,使用私钥对加密信息进行解密。

08.分布式网络

《失控》一书中,凯文.凯利解释了分布式网络的特性:没有强制性的中心控制;次级单位具有自治的性质;次级单位之间彼此高度连接;点对点间的影响通过网络形成了非线性因果关系。

区块链的核心是分布式而不是去中心,分布式系统弱化了中心控制,而不是消灭了中心控制。

09.Merkle tree 梅克尔树结构

Merkle Tree,是一种树(数据结构中所说的树),是区块链的基本组成部分。虽说从理论上来讲,没有梅克尔树的区块链当然也是可能的,只需创建直接包含每一笔交易的巨大区块头就可以实现,但这样做从长远发展来看,可能最后将只有那些最强大的计算机,才可以运行区块链。

区块链利用Merkle树的数据结构存放所有叶子节点的值,并以此为基础生成一个统一的哈希值。区块中任意一个数据的变更都会导致Merkle树结构发生变化,在交易信息验证比对的过程中,Merkle树结构能够大大减少数据的计算量,只需验证Merkle树结构生成的统一哈希值即可。


关于作者

区块链话题的优秀回答者

回答 0 文章 0 关注数 3

我要提问

添加标题(最多输入50个字)

添加描述

添加图片(最多3张)

点击此处上传图片

我要提问

添加标题(最多输入50个字)

添加描述

添加图片(最多3张)

点击此处上传图片
举报回答
回答质量差,答非所问
广告
重复,旧闻
格式问题
低俗
与事实不符
疑似抄袭
其他问题,我要吐槽
举报
取消