structure-and-interpretation-of-blockchain-前言

前言

区块链系统采用去中心化的组织形式,整个系统非常的扁平化不存在中心化的权威机构或者层级结构管理机构,通过分布式节点间博弈来达到整个系统的自适应,确保了系统整体的稳定性。区块链目前被普遍认为是一种”颠覆性”的新兴技术,其最大的创新性在于重构了弱信用主体间的信任关系,从而避免了之前依赖中心化的具有高信用的中介机构的方式。这种重建信用体系的方式并非基于个人或者权威机构,而是依赖于共识算法和密码学,具有公开透明的特点。

区块链甚至可以帮助建立全球的去中心化信用体系,让价值传递可以像互联网信息传递一样的便捷,基于这样的方式可以重新构建新型的经济生态体系。以金融行业的清算和结算业务为例,传统中心化的数据库因无法解决多方互信问题,使得每个参与方都需要独立维护一套承载自己业务数据的数据库,这些数据库实际上是一座座信息孤岛,造成清结算过程耗费大量人工进行对账,目前的清结算时间最快也需按天来计。如果存在一个多方参与者一致信任的数据库系统,则可显著减少人工成本及缩短结算周期。

区块链目前被业界认为是引发产业革命的核心要素之一,其去中心化,去中介化,及难篡改,可追溯性,安全可靠等特点以及其发展前景乃至对社会带来的深刻影响都已经获得了广泛的认可。本书将从技术角度分析区块链系统中的关键技能原理。

如果先看目录只能了解到区块链系统的各个组成部分,对其各个部分解决的问题,相互的联系还是无法探查,容易只见树木不见森林。本章的作用是对整书内容做一个梳理,带大家先鸟瞰整个系统,知道区块链系统的全貌与各个模块之间的关联后再深入其中探索细节。

区块链技术体系分类

一般来说业界会按照区块链中心化程度将区块链划分为公有链,联盟链和私有链三类。

公有链通常对加入网络的节点没有限制,节点可以*的加入或退出网络,每个节点具有平等的权利参与到整个区块链平台的运行中,同时公链的区块链网络也是完全去中心化分布式的组织结构。也正是由于这种组织结构的灵活性就需要对区块链系统的网络扩展能力、可支撑节点数量,共识机制的可扩展性、容错能力、效率方面提出了更高的要求。在公链中每个节点都共享整个区块链系统的账本,无疑对系统的隐私性,安全性构成了巨大的挑战。最后还要对节点进行一定的激励,促使节点可以持续的维护下去从而对整个网络的持续运行作出贡献。比特币和以太坊就是典型的公链。

联盟链则弱化了公链完全去中心化的特性,做到了部分中心化或者多中心化以此来换得更好的性能和更低的维护成本,以便更好的满足企业对于区块链平台的期许。联盟链中的节点通常分属于不同的组织或者联盟,对于想要加入的节点需要获得中心化或者权限较高节点的授权,区块链的维护规则需要由联盟链的参与方协调定制。联盟链适用于小范围的数据交换频繁的组织间共享数据服务等的应用场景,比如跨境汇款结算等业务。超级账本就是非常典型的联盟链平台。

私有链是一种中心化满足特定需求的区块链平台,不对外提供服务或者选择性的开放少许接口,重点满足组织内部的数据管理和审计的区块链平台。

本书通过对比特币,以太坊,超级账本三个典型的区块链系统的经典技术来讲解区块链的核心技术原理,以及三者在不同技术背景不同应用场景下的技术选择。

首先看一下三者的区块链架构体系;

网络层

区块链网络的P2P协议最主要的作用是节点间通信,将分布在不同地理位置的节点通过网络和P2P协议连接起来,节点间传输的内容主要是交易数据和区块数据。在区块链网络中,节点时刻监听网络中广播的数据,当接收到邻居节点发来的新交易和新区块时,其首先会验证这些交易和区块是否有效,包括交易中的数字签名、区块中的工作量证明等,只有验证通过的交易和区块才会被处理(新交易被加入正在构建的区块,新区块被链接到区块链)和转发,以防止无效数据的继续传播。

共识层

去中心化的区块链由多方共同管理维护,其网络节点可由任何一方提供,当缺乏准入机制时,部分节点可能并不可信,因而需要支持更为复杂的拜占庭容错(Byzantine Fault-Tolerant,BFT),像超级账本(Hyperledger Fabric)添加了准入机制,只有被授权的节点才能加入网络,因此采取更高效的不容错的RAFT算法。但是在公链场景下,并没有节点准入机制,并且节点数远远高于联盟链场景,导致并不适用BFT算法。同时也为了解决节点*进出可能带来的女巫攻击(sybil attack)问题,比特币应用了工作量证明(Proof of Work,PoW)机制。其是一种基于哈希函数的工作量证明算法。比特币要求只有完成一定计算工作量并提供证明的节点才可生成区块,每个网络节点利用自身计算资源进行哈希运算以竞争区块记账权,只要全网可信节点所控制的计算资源高于 51%,即可证明整个网络是安全的。

女巫攻击是指攻击者通过创建大量的假名身份来破坏网络服务的信誉系统,并使用它们获得不成比例的巨大影响力。

数据层

比特币、以太坊和超级账本在区块链数据结构、数据模型和数据存储方面各有特色。在数据模型的设计上,比特币采用了基于交易的数据模型,每笔交易由表明交易来源的输入和表明交易去向的输出组成,所有交易通过输入与输出链接在一起,使得每一笔交易都可追溯;以太坊与Hyperledger Fabric 需要支持功能丰富的通用应用,因此采用了基于账户的模型,可基于账户快速查询到当前余额或状态。

在数据存储的设计上,因为区块链数据类似于传统数据库的预写式日志,因此通常都按日志文件格式存储;由于系统需要大量基于哈希的键值检索(如基于交易哈希检索交易数据、基于区块哈希检索区块数据),索引数据和状态数据通常存储在Key-Value 数据库,如比特币、以太坊与超级账本都以 LevelDB数据库存储索引数据。

智能合约层

智能合约是一种用算法和程序来编制合同条款、部署在区块链上且可按照规则自动执行的数字化协议。由于早期计算条件的限制和应用场景的缺失,智能合约并未受到研究者的广泛关注,直到区块链技术出现之后,智能合约才被重新定义。区块链实现了去中心化的存储,智能合约在其基础上则实现了去中心化的计算。

比特币脚本是嵌在比特币交易上的一组指令,由于指令类型单一、实现功能有限,其只能算作智能合约的雏形。以太坊提供了图灵完备的脚本语言Solidity、Serpent与沙盒环境以太坊虚拟机(Ethereum Virtual Machine)简称EVM,以供用户编写和运行智能合约。超级账本的智能合约被称为链码(Chaincode),其选用 Docker 容器作为沙盒环境,Docker 容器中带有一组经过签名的基础磁盘映像及 Go 与 Java 语言的运行时和 SDK,以运行 Go 与 Java 语言编写的链码。本书只对比特币脚本和Solidity做相关介绍。

应用层

比特币平台上的应用主要是基于比特币的数字货币交易。以太坊除了基于以太币的数字货币交易外,还支持去中心化应用( Decentralized Application,Dapp),Dapp 是由 JavaScript 构建的Web 前端应用,通过 JSON-RPC 与运行在以太坊节点上的智能合约进行通信。超级账本主要面向企业级的区块链应用,并没有提供数字货币,其应用可基于 Go、Java、Python、Node.js 等语言的SDK 构建,并通过 gPRC 或 REST 与运行在超级账本节点上的智能合约进行通信。

简单来说,网络层保证了节点连通,共识层保证了节点间数据的一致性,数据层高效的组织了区块链中各种数据,智能合约层由用户定义了一套规则用于产生符合具体逻辑的数据,应用层则被用来对外提供各种服务。

本书的章节划分也基本按照上图的区块链系统架构体系所展开,增加了对不同架构体系优劣势的探索与分析。

上一篇:【poj2823】 Sliding Window


下一篇:python操作日期和时间的方法