纸贵区块链的设计原则及应用架构
扫描二维码
随时随地手机看文章
目前,区块链应用构建者往往面临选择的难题,需要进行大量的取舍和开发工作,以实现自己预想中的产品形态。区块链底层的开发成本较为高昂,开发者通常需要基于合适的底层链进行二次开发,并对自己的应用进行适配性修改以适应该底层链的特点。同时,由于安全、效率、公平这三点存在矛盾而无法同时达到最优,能够适配所有场景的完美区块链底层并不存在。
例如,选定PoW作为共识算法的公链项目,在保证大量节点参与共识且达到50%容错的情况下,不得不牺牲吞吐量和交易确认速度,难以满足实时的应用需求,并耗费大量电能;选定有向无环图(DAG)作为共识基础的项目,虽然保证去中心化并获得吞吐量优势,但没有解决高能耗和交易确认慢的问题;选定Hyperledger Fabric作为底层链的项目,可以满足高吞吐量、快速确认、低能耗的需求,但引入了对中心化节点的依赖。
一个需要指出的问题是,不同平台上的开发往往不具有可复用性,在某个平台上付出的努力,通常无法直接迁移到另外的平台上,使得相比于业务功能的具体实现,初期的选择变得尤为重要。上述问题又被称为平台“锁定” 风险,区块链的应用开发者不得不在开始阶段就选择某种具体的区块链底层技术。并且在之后受到它一定程度上的限制。
纸贵区块链致力于提供适用于多种业务需求的区块链底层服务,以期在保证底层开发维持其理想的底层技术栈的同时。方使区块链的上层应用开发。纸贵区块链底层平台以通用性、模块化。可播拔、安全性为设计原则,使得区块链底层的搭建尽可能轻量级。在底层的组织上,各共识模块、功能模块可定制且可插拔,为适配具体场景提供使利。
设计原则
功能解耦原则
各个模块之间,特别是不同功能层之间的服务应当尽可能地实现功能解耦。例如,底层模块的任务是构建安全、满足一致性要求的去中心化系统,它不应为用户如何使用自己的私钥而烦恼;区块链应用应当更多地处理具体的业务逻辑,而将接口适配、账户管理、区块链信息查询等功能交给其他的专门模块处理,从而有效地避免架构过于复杂、错误耦合、调试困难等问题。
兼容性原则
区块链的基本模块在设计上应当遵循兼容性原则,使得不同的应用开发者能够快速而方便地进行集成。例如,数据的传输内容应当使用通用标准,便于使用者理解;账户系统应当满足绝大部分场景的需求即可,而不应当添加诸如个人信息、角色信息等内容。
可插拔原则
当兼容性原则无法满足,必须通过不同的模块来提供相同种类的功能时,应当考虑可插拔原则。例如,不同的共识引擎之间应当能够进行切换,使用者可以根据自身的需要对具体的功能模块进行组合,以达到特定的功能或性能要求。
安全性原则
区块链底层及应用在设计上应当遵循安全第一的原则。保证使用者的利益,使得系统在受到一定程度的恶意攻击时仍能保持健壮。在没有中心化管理系统的区块链底层及应用中,这一点尤为重要。
底层链架构
底层链是区块链系统的基石,为链上信息的分布式共识提供支撑。纸贵区块链产品的底层通用架构如下图所示:
共识引擎——共识引擎是底层链的运行基础。 其中,区块与状态是分布式节点之间通过一致性协议达成的共识内容,是区块链运行机制的基本数据存储; P2P网络协议是节点间自组织与通信的基础协议。这两个模块共同作用,奠定了区块链系统的运行基础。
链上系统——链上系统是底层链的功能核心。该部分包括一系列可插拔的、 与共识机制紧密结合的底层基础逻辑。该部分包括用于分布式实体识别与认证的密码学基础算法、链上资产、交易、跨链协议等。跨链协议是链与链之间资产的交互与连接、信息的传递与流转遵循的交互方式。此外,智能合约运行环境(如EVM、JVM、x86VM,以及Docker等)为支持智能合约的正常有序执行提供了适宜的环境。
链外交互——链外交 互是底层链的对外窗口,包括智能合约与交互接口。用户可以对合约进行安装、删除、初始化、冻结等操作,也可以通过接口与智能合约交互,从而实现所需的分布式业务逻辑,或者对合约请求、用户身份、其他合约的状态进行审核,对区块链进行治理等。
1.共识引擎
共识引擎是区块链分布式系统的运行基础,其核心的功能为对区块链网络中的交易进行定序。
区块与状态机
区块链网络是由多个节点构成的分布式系统。区块与节点的状态机共同构成了该系统的数据底层。其中,区块存储了系统中所有需要共识的操作(如交易) 的历史记录,这些操作的记录极难被篡改;节点的状态机存储了节点运行时的最新状态,是区块链底层维护自身状态的存储空间,它使得智能合约能够被正确执行。
如果将区块比作区块链的“硬盘”,那么状态机就是区块链各运行节点的“内存”。区块中记录了每笔操作的记录,通过整个链条的顺序回放便得到了区块链的当前状态。这种分离的设计使得智能合约的运行成为可能,否则,区块链将需要重放所有区块中的交易以获取用户的当前余额,在存在大量交易的场景中难以实用。由于状态机分别存储在每个节点上,单一节点机的状态机是有可能被篡改的,但是被篡改了状态的节点无法与其他节点达成共识,从而被整个网络所孤立。
共识算法
各个节点对区块和状态达成一致需要由共识算法保证。共识算法的选择往往受制于具体的应用环境和应用目的。例如,当区块链系统用于公司内相对独立的业务部门之间的协作时,可以选择CFT (Crash Fault Tolerance)类共识算法,更利于业务效率提升,降低各业务部门达成互信和共识的成本;当区块链系统用于联盟成员之间的共识时,可以选择PBFT (PracticalByzanTIne Fault Tolerance)、Tendermint 等可以防御一定的作恶节点,同时兼顾处理效率的共识算法;当区块链系统暴露于公网供所有人自由接入时,可能需要选择PoW (Proof ofWork)、PoS (Proof of Stake)等能够容纳大量用户,容忍低于50%作恶节点,安全维护分布式账本的算法。这些算法各有利弊,互相难以替代,只有面向具体业务场景,才能设计出真正合适的算法。
针对该问题,纸贵区块链采用可插拔的共识引擎,对共识算法进行统-接口封装,将上层业务逻辑与底层共识单元相分离。对于不同的共识方式,按照相同的共识接口进行开发,可实现兼容纸贵区块链的、上层模块,实现业务逻辑与共识引擎相互解耦,并针对不同场景的需要,替换不同类型的共识算法。
2.链上系统
链上系统包含节点的核心处理机制,在去中心化的场景下实现部分和区块链共识紧密相关的业务功能,并且其中的一些机制可以提供给开发者进行上层应用的开发工作。这些机制与共识引擎共同作用,完成底层链的基础功能。
密码学基础方法
区块链又被称为“System of Proof”,密码学基础方法则是支撑证明的强有力工具。它为各种去中心化功能的实现提供了可能性,也是分布式策略赖以实现的最基础的算法库与工具包。算法包主要包括但不限于以下几种开源的、经过理论推导与实验验证的密码学库。
哈希算法
哈希算法通过单向散列函数确保信息完整性,防止信息被篡改。在实现区块之间的链式结构、签名前对待签信息进行散列、产生链上唯一ID 等场景中均会用到哈希算法。
非对称加密与数字签名算法
非对称加密在区块链底层系统中主要提供数字签名与验签功能。签名验证工作存在于整个交易过程中,涉及到中间的每个节点,如提交与验证交易请求,提交与验证背书签名、提交与验正出块签名等。在用户自主生成和管理的匿名账户地址体系中进行的资产交易,也会涉及到非对称加密与数字签名。出于对用户账户私钥安全性的考虑,纸责提出了符合ISO 7816标准的安全硬件私钥保存方案,确保用户链。上资产的安全性。
环签名算法
纸贵通过提供环签名算法模块。满足用户对于交易匿名性的需求。通常情况下,一般的加密签名可以跟踪交易,得到发送人的公钥与地址。通过调用纸贵的环签名模块,可以实现对于任何交易,无法追踪其付款方是谁;对于向外发送的两笔交易,其他人无法证明其是否发给同一个收款人。
同态加密
用户在接受数据服务时,需要将数据以明文形式发送给数据服务提供方。在注重数据隐私的场景中,如何在保证用户数据机密性的前提下,使用户获得数据服务就十分重要。纸责通过提供同态加密组建,可以确保用户数据在整个服务过程中的机密性。用户将数据以密文形式发送给数据服务提供方。数据服务对密文进行特定形式的代数运算,得到仍然是加密的结果;用户得到加密结果后,将其解密所得到的结果,与对明文进行同样运算所得结果一样。 纸贵科技目前支持满足加法同态和满足乘法同态的加密算法,并将在未来进一步支持基于带扰动学习的多密钥全同态加密方案。
账户与交易
账户与交易是由密码学方法直接保证的数字资产模型,也是实现链上激励机制的基本元素。其保证了区块链能够成为自组织、自驱动的去中心化系统。对于任意账户资产体系而言,最核心的问题是安全,其次才是性能。
安全性是账户体系最基本也是最重要的要求。首先,由于区块链账本具有一定的透明性,所有共识节点均需要对交易进行确认并达成共识,传统的密码账户体系无法支撑区块链上的分布式应用。在此场景下,依赖非对称加密等密码学算法的去中心化账户体系应运而生,区块链应用得以在公开的环境确保每个人的资产权属。其次,由于区块链上的账本允许任何人访问,恶意操作难以控制和回滚,必须从机制上保证没有人能够作恶。其中最典型的一个要点是,去中心化账户体系应当确保可以抵抗双重花费攻击(DoubleSpending Attack)。例如,比特币采用未花费交易输出(Unspent TransacTIon Output)机制来保证资金的流动中流出始终等于流入;以太坊采用Nonce保证交易不会重放。不管采用何种方案,确保账户的资产安全,抵抗任何可能出现的攻击,是区块链账户体系最基本的要求。
由于账户系统与支付关系密切,去中心化的账户体系也应当支持高并发交易。去中心化账户体系中的交易在两个地方存在瓶颈。其一,所有交易必须经过分布式共识,共识的过程需要消耗时间;其二,区块链账户的账户状态根据每个区块的确认进行修改,如果某笔交易是根据当前区块的账户状态构建,而在下一个区块到来后被广播至区块链网络,这期间很有可能已经发生了账户状态的改变,从而产生冲突。去中心化账户体系应当能够正确并有效地处理这两个问题,支持高并发交易,从而能够获取更广泛的应用空间。
智能合约运行环境
智能合约具有特殊的分布式特性,其可进行的操作与可利用的资源应保证无法对宿主机造成任何损害。为了保证智能合约能够在资源受限的条件下正确执行,智能合约虚拟机是不可或缺的基础运行环境。它通过提供受限的指令集与特殊的资源调度策略,保证了智能合约的执行不会对底层链造成损害性的后果。
常见的智能合约运行环境包括以太坊的以太坊虚拟机(Ethereum Virtual Machine)、Fabric的Docker等,也有部分依赖于特定硬件或实现了特殊算法的虚拟机,可根据应用的需要定制化使用。
3.链外交互
链外交互层是区块链与外界进行沟通的窗口,由智能合约及其对外接口组成。
智能合约是区块链应用的开发者与链上机制进行沟通,实现去中心化业务逻辑的重要载体,也是区块链生态得以繁荣的根本所在。通过智能合约,工程师们可以在区块链的去中心化环境中构建可信的应用程序,实现具有分布式共识特性的业务逻辑。他们写的每-行代码,以及程序的每一次输入输出,都将被底层区块链忠实记录与存证。这些智能合约根据功能的不同可以被分为三类:第一类是链外交互的过程中存在的权限认证、正确性检查等保护机制。通过这些机制可以构建具有权限管理的许可链,在不少受限的场景下具有广泛的应用;第二类是链上治理合约。这些合约将提供链上审计、合约管理等功能,并且所有操作均将作链上记录;第三类则是业务合约,这些合约与链外系统一起,构成各式各样的去中心化应用程序。所有智能合约必须遵守接口开发规范,按照对外交互的协议要求实现调用接口从而对外提供服务。
智能合约的开发者们仿佛戴着镣铐在跳舞。一方面,为了实现去中心化的应用,他们必须遵循链上机制提出的种种限制,使用有限的操作方法与受限的计算资源对链上的信息进行处理;他们被禁止使用随机数等会影响共识达成的机制;他们必须保证自己的代码毫无差错。另一方面,合约工程师们要针对外部系统提出的种种要求,以全面的、系统的观点设计合约功能与应用结构,最终适配并交付对外交互层,供外部应用使用。智能合约工程师必须做到逻辑严密,代码严谨,既熟悉计算机的基本原理与算法的灵活应用,又通晓分布式系统的运行逻辑与应用系统的架构设计,这对应用开发者提出了很高的技术要求。
应用架构
对于一个完整的区块链应用而言,纸贵区块链的应用架构如下图所示:
其中,区块链底层与存储模块相配合,能够满足大多数业务场景的需求;区块链适配器是将不同底层的接口适配并统一在同一协议框架下的转换器,通过向下兼容不同底层、向上提供统一接口的方式,大大节省上层业务服务的集成开发成本;接口网关是统一交互入口,进行请求转发。负载均衡的辅助模块,也是隔离恶意攻击。记录问题操作的防火墙;区块链服务是通过对区块链底层接口的再次抽象与封装,对外提供的简化操作形式,并按需为上层应用实现用户管理、身份识别与验证的基础设施;通过对区块链服务的定制化调度与包装,最终集成为区块链应用供用户使用。
1.区块链适配器
区块链适配器使得上层应用的大部分功能可以不关心底层链的具体协议,而专心进行应用逻辑的开发。
区块链适配器是使得底层与应用解耦的关键模块。正如在对底层链的链外交互层进行阐述时指出的。底层的开发者更注重底层的处理性能、接口效率等指标,他们不希望被应用東缚而应用开发者则更注重业务逻辑的实现,他们不希望被具体的平台“锁定”。为了满足双方的需求,区块链适配器的存在必不可少。
区块链造配器可以将不同链的链外交互接口统一到相同的协议下, 使得应用开发者可以在相同的框架中构建应用。在区块链适配器的帮助下,开发者可以在不转变思维的情况下,上手在一个新的平台上进行开发;他们只需付出少量的学习成本去阅读某个具体链的扩展方法,就可以方便地集成该链的特殊功能。
2.服务中间件
服务中间件是以“扩展包”形式存在的基础功能模块,它完成了某个细粒度服务的具体实现。
例如,当某个应用开发者想要完成某个去中心化资产管理的功能时,他仅需引入区块链交互中间件,并对应用侧提供交易查询、账户查询、交易发起等接口,即可专心开发客户端的具体功能。
当某个应用开发者想要完成分布式数据管理的功能时,他需要引入存储管理中间件与区块链交互中间件,并对应用侧提供数据管理、数据摘要上链等功能,即可支持实现去中心化数据上链与存储的功能。
上述的服务中间件在初期将会以播件、独立项目的形式为开发者提供,后期将会以应用商城的形式存在。服务中间件可以大大加速区块链应用的开发,也是开发体系得以繁荣的根本所在。
3.区块链应用
区块链应用指的是某个基于区块链开发的应用实例。它是直接面对用户提供功能的服务。为方使人们使用区块链提供支持。常见的区块链应用包括区块链浏览器、区块链存证服务、区块链资产管理工具等等。这些应用在区块链诞生以来,为区块链的使用和普及发挥了巨大的作用,一些应用甚至成为了区块链项目的标配。
在与服务中间件的关系上,两者之间并没有严格的界限。当应用开发者认为时机成熟时,他使可以将自己的应用或其中的一部分包装成服务中间件。供其他应用开发者使用;开发者亦可以对不同的服务中间件进行封装,以实现特定的区块链应用。
纸贵科技在对区块链的探索过程中,亦积累了一系列的区块链应用,并将持续以行业应用或服务中间件的形式服务用户或回馈社区。