一文读懂区块链技术
一文读懂区块链技术 用户通过区块链和传统银行系统转账流程的区别。
一文读懂区块链技术
在没有中央机构监督的情况下,分布式账本技术 (DLT) 在通过预定网络协议同意的一组用户之间保存通过密码学验证的信息。将这些技术结合起来可以促进人们或各方之间的信任,否则他们将没有这样做的动机。它们使区块链网络能够在用户之间安全地交换价值和数据。
什么是区块链可扩展性?
系统每秒处理的事务数称为“吞吐量”。虽然 Visa 的 VisaNet 电子支付网络每秒可以处理超过 20,000 笔交易,但比特币 (BTC) 的主链每秒无法处理超过 7 笔交易。
区块链三元悖论(三难困境)
计算机科学家在 1980 年代设计了一致性、可用性和分区容差 (CAP) 定理,以表达这些困难中可能最重要的一个。 CAP 定理指出:去中心化数据存储,例如区块链,只能同时满足上述三个保证中的两个。
- 区块链的可扩展性是指其处理更多交易的能力。
- 安全性是指保护区块链上的数据免受各种攻击的能力以及区块链对双花的防御。
- 去中心化是一种网络冗余,可确保网络不受较少实体的控制。
可扩展性、安全性和去中心化之间的相互作用
区块链架构的分层结构
硬件基础设施层
区块链的内容存储在这个可爱的地球上某处数据中心的服务器上。客户端在浏览 Web 或使用任何应用程序时从应用程序服务器请求内容或数据,这称为客户端-服务器架构。
客户端现在可以与对等客户端连接并共享数据。对等 (P2P) 网络是一大群共享数据的计算机。区块链是一个点对点的计算机网络,在共享账本中以有序的方式计算、验证和记录交易。结果,创建了一个分布式数据库,存储所有数据、事务和其他相关数据。节点是 P2P 网络中的计算机。
数据层
指针是引用另一个变量位置的变量,链表其中包含数据和指向前一个块的指针。 Merkle 树是哈希的二叉树。每个区块都包含 Merkle 树的根哈希和前一个区块的哈希、时间戳、随机数、区块版本号和当前难度目标等信息。
网络层
这个 P2P 层确保节点可以找到彼此并进行交互、传播和同步,以保持区块链网络处于合法状态。 一文读懂区块链技术 P2P网络是一种计算机网络,其中节点分布并分担网络的工作量以达到共同的目的。区块链的交易由节点执行。
共识层
应用层
智能合约、链码和去中心化应用程序 (DApps) 构成了应用程序层。应用层协议进一步细分为应用层和执行层。应用层包括最终用户用来与区块链网络通信的程序。脚本、应用程序编程接口 (API)、用户界面和框架都是其中的一部分。
区块链网络充当这些应用程序的后端技术,它们通过 API 与其通信。智能合约、底层规则和链码都是执行层的一部分。
区块链层解释
第 0 层
区块链零层由有助于使区块链成为现实的组件组成。它是允许比特币、以太坊和其他区块链网络运行的技术。第 0 层组件包括互联网、硬件和连接,这些组件将使第 1 层能够顺利运行。
第一层
第一层的问题
可能的解决方案
权限证明是以太坊 2.0 将采用的另一种共识。这种共识方法根据网络参与者的抵押品来认证新的交易数据块,从而产生更有效的程序。
第二层
位于基础层之上的重叠网络称为 L2 解决方案。协议通过从基础层移除一些交互来利用第二层来增加可扩展性。因此,主区块链协议上的智能合约只处理存款和取款,并确保链下交易遵守规定。比特币的闪电网络是第二层区块链的一个例子。
第二层扩展解决方案
近年来,第二层协议的流行程度呈爆炸式增长,尤其是它们被证明是解决 PoW 网络扩展问题的最有效方法。下面的部分解释了各种第二层缩放解决方案。
嵌套区块链
管理不是让一个人(例如经理)负责所有工作,而是将任务委托给下属,然后他们在完成后向管理层汇报。结果,管理人员的工作量减少了,而可扩展性得到了提高。例如,OMG Plasma 项目作为以太坊一级协议的二级区块链,允许更便宜、更快的交易。
大白话,通俗易懂,一文读懂什么是区块链技术!
首先,我们明确一个概念,区块链就是一个工具,它本身没有任何价值,也无所谓好坏,就像一个锄头,单独往那一放,产生不了什么价值。但是你用锄头耕作,种菜,种出来的菜有价值。一些加密数字资产,比如比特币,它是利用了区块链这个工具,产出的一个产品,这个产品在很多人心中有价值。很多人认同比特币,那比特币在他们眼里就有价值。但是我们要搞清楚,比特币是个产品,这个产品是用区块链这个工具生产出来的。这是两回事,不要搞混了。
于是,六个账本一同记账,为了方便对账,张三全家约定,每天的收支记到一张纸上,一天一张纸。这张纸我们可以把它叫做一个区块,一天天的,一个区块接着一个区块记下去,连到一起就叫做 区块链 。
这个例子接地气吧,什么是不是容易理解?它就能把区块链解释得清清楚楚。六个账本,同时记录张三一家的收支情况,每天的记录打包成一个区块,这就是区块链。
区块链我们再总结一下,第一,它是个数据库,记录的是张三一家的收支情况。第二,它是去中心的,六个账本,没有一个是唯一的,六个账本里的数据如果相同,都是有效的。第三,它是分布式的,六个账本在六个人手里,不可能同时被毁,数据是绝对安全的。
另外就是数据的纠错问题,区块链的纠错原则就是以大多数为准,只要结果,不论对错。大多数原则怎么理解呢?还是张三一家的例子。
从概念到底层技术,一文看懂区块链架构设计!
从用到的技术来说,协议层主要包括网络编程、分布式算法、加密签名、数据存储技术等 4 个方面,其中网络编程能力是大家选择编程语言的主要考虑因素,因为分布式算法基本上属于业务逻辑上的实现,什么语言都可以做到,加密签名技术是直接简单的使用(请看书中相关的加密解密文章,不建议自由发挥,没有过多的编码逻辑),数据库技术也主要在使用层面,只有点对点网络的实现和并发处理才是开发的难点,所以对于那些网络编程能力强,对并发处理简单的语言,人们就特别偏爱。也因此,Nodejs 开发区块链应用,逐渐变得更加流行,Go 语言也在逐渐兴起。
选择的原则无非是性能和易用性。我们知道,系统的整体性能,主要取决于网络或数据存储的 I/O 性能,网络 I/O 优化空间不大,但是本地数据存储的 I/O 是可以优化的。比如,比特币选择的是谷歌的 LevelDB,据说这个数据库读写性能很好,但是很多功能需要开发者自己实现。目前,困扰业界的一个重大问题是,加密货币交易处理量远不如现在中心化的支付系统(银行等),除了 I/O,需要全方位的突破。
在开发上,除了在交易时与协议层进行交互之外,其他时候尽量不要与协议层的开发混在一起。这个层面与应用层更加接近,也可以理解为 B/S 架构的产品中的服务端(Server)。这样不仅在架构设计上更加科学,让区块链数据更小,网络更独立,同时也可以保证扩展层开发不受约束。
这个层面类似于电脑中的各种软件程序,是普通人可以真正直接使用的产品,也可以理解为 B/S 架构的产品中的浏览器端(Browser)。这个层面的应用,目前几乎是空白。市场亟待出现这样的应用,引爆市场,形成真正的扩张之势,让区块链技术快速走进寻常百姓,服务于大众。
这两个语言是无法逾越的,任何开发遇到瓶颈,基本上都会找到它们,自然应该排在第一位要介绍的。同时,区块链技术的鼻祖,比特币(协议层)就是用 C++ 语言开发的,而且目前为止,没有比比特币更加成功的区块链产品。所以,无论你使用什么语言开发,在正式进入这个行业的过程中,都应该先研究研究比特币。
比特币官方客户端钱包用的 Qt,第三方钱包有 Python 语言开发的,特别是第三方整理的开发库(API 包)很多是 Nodejs 设计的。
比特币的架构,与上面的架构设计基本相同,另外,因为共识算法采用的是工作量证明机制(PoW:Proof of work),还有一些特殊的挖矿的过程。
Nodejs 平台强大的网络编程能力,以及 JS 脚本语言的简单快捷,在区块链领域自然少不了它的身影。
亿书便是这样一个区块链产品,亿书币是它的协议层,使用了著名的 Express 开发框架,基于 HTTP 协议开发而成。同时,它采用了授权股权证明机制(DPoS),算法上的改进,让它在处理交易时更加轻量,处理能力大大提升。它提供了强大的协作机制,为数字出版、版权保护提供了便利;扩展了侧链功能,可以基于它开发任何去中心化的应用,从而为专业作者、博客爱好者和开发者提供很多方便。
如果是 Python 语言爱好者,我建议研究研究以太坊(Ethereum)的 Python 实现。尽管因为 The Dao 事件闹得沸沸扬扬,但从技术实现的角度来说,仍然值得参考学习。
以太坊给出了 Go、Java、Python 等多语言的实现。其中以 Python 为基础的实现主要包括三个部分:Pyethapp 是客户端部分;Pyethereum 是核心库,实现了区块链、以太坊模拟机和挖矿等功能;pydevp2p 是点对点网络库,实现了节点发现、合约代码传输、加密签名等功能,这三者组合在一起就是完整的区块链实现,后面两个核心库共同组成了协议层。
另外,go-ethereum 是 Go 语言的完整实现;Ethereum(J) 是纯 Java 实现,它作为可以嵌入任何 Java/Scala 项目的库提供。
客户端方面,还有 Rust、Ruby、Javascript 等语言的实现。
在多核时代,Go 语言备受喜爱,它可以让你用同步方式轻松实现高并发,特别是在分布式系统、网络编程等领域,应用非常广。所以,在区块链开发领域,也有很多使用 Go 语言的项目。
其中,由 Linux 基金会主导的超级账本(HyperLeger),版本库的名字叫 Fabric,就是其中一个。该项目试图为新一代的事务应用创建一种开放的分布式账本标准,支持许可式区块链(这种方式可能无法再现比特币那种强大的网络效应)。
Fabric 的开发环境建立在 VirtualBox 虚拟机上,部署环境可以自建网络,也可以直接部署在 BlueMix上,部署方式可 Docker 化,支持用 Go 和 JavaScript 开发智能合约。