区块链架构设计简述

区块链架构设计简述

广义区块链

首先要理清晰这里的区块链的范围,如果只是讲狭义的区块链,仅仅涉及到数据存储技术,数据库或文件操作等。而我们要谈的是广义的区块链,包含以下几个技术点:

  • 点对点网络设计(P2P)
  • 加密技术应用(椭圆曲线加密)
  • 分布式算法的实现(PoW/DPoS/...)
  • 数据存储技术(LevelDB/BoltDB/IPFS/...)
  • 区块链构建(Block/Blockchain)
  • 虚拟机和智能合约(V8/Smart Contract)
  • 数据外界查询界面(RPC)

以上几个方面,还有往外延伸到分布式存储,分布式计算,机器学习,VR,物联网,大数据等。

架构图

从架构设计来看,区块链可以简单分为三个层次,协议层、扩展层和应用层。其中,协议层可以细分为存储层和网络层。

image

协议层

协议层,是最底层的技术,基本就是一个完整的区块链产品,类似电脑的操作系统,维护着网络节点,对外仅仅暴露API调用,一般是提供一个简单的钱包客户端来调用这些API,如果采用分层的设计理念,这个协议层只是负责主资产(主链代币)的结算,不包括侧链的功能,那么这个客户端的功能将是非常克制简单的,只会建立地址,验证签名,转账支付,查看余额等。

这个协议层是一切的基础,构建了网络环境,搭建了交易通道,制定了节点挖矿奖励规则,设计实现了地址等。

这一层的开发包括网络编程(P2P),分布式共识算法,加密签名,数据存储技术等4个大的板块,其中分布式共识算法有比较成熟的PoW,PoS和DPoS可以借鉴,而加密签名技术是直接简单的调用,数据库存储也是可以拿来即用,只有点对点网络的实现和并发是开发的难点,这方面,go语言天生的优势就体现出来了。

整个协议层包括存储层和网络层,数据存储的技术选型从两个维度去考虑,一个是性能,一个是易用性。整个系统的性能取决于网络和数据存储的IO性能,网络IO优化空间不大,但本地数据存储的IO是可以优化的。我们可以选择google的LevelDB,这个数据库的读写性能就很好,基于上面的一些功能可以借鉴btcd的ffldb实现。

扩展层

如果说底层的协议层是电脑的操作系统,那么这个扩展层就相当于电脑的驱动程序,是为了让区块链产品更加实用。我们的扩展层主要是两个方向,一个是虚拟机和智能合约,另外一个是侧链技术。

在开发扩展层的时候,除了在交易时与协议层进行交互之外,其他时候尽量不要与协议层的开发混在一起。这个扩展层跟上面的应用层更加接近,如果用中心化的思维去理解,就好比B/S架构中的服务端(Server)。

这样解耦的设计是有明显好处的,可以让主链的数据更小,网络更独立,同时保证扩展层开发不受约束。

智能合约需要跑在一个独立的虚拟机上面,而虚拟机是不在协议层的,而采用分层设计的话,就不能跑在结算层的主链上,而需要在扩展层开发一条可以让大家跑智能合约的侧链,当然用户也可以发行自己的业务公链,然后上面可以跑智能合约。

扩展层的侧链需要跟结算层的主链进行双向挂钩绑定。

应用层

这个层类似电脑中的各种软件程序,是普通用户可以直接使用的产品,可以理解为B/S架构中的浏览器(Browser)。

现在应用层最多的是钱包服务,但这是最基础最简单的服务,跟每个用户所需的服务还有很大空间待挖掘。

在已有的钱包服务之外,我们主要提供四大类服务:

  • 存储服务

    已有的专注分布式存储的公链项目比较多,比较成功的有IPFS+Filecoin的组合,然而此种设计也有优化空间,主要是两个方向:

    • 激励层Filecoin网络将所有节点都当成存储挖矿和检索挖矿的平等节点,而没有考虑到不同节点的网络和存储环境。网络最好的节点负责存储订单抢单,然后进行订单分配,更多便宜的存储节点进行存储,这样的模型更加符合真实环境和合理。
    • 存储数据形成Merkle DAG,对于计算是不友好的,如果要在存储节点同时进行计算,需要数据本地化保存。
  • 计算服务

    将节点加入GPU,就能让分布式的众多节点拥有强大计算能力,同时配合分布式存储的本地数据,进行计算服务。这一层需要将计算任务量化,并且能够公平定价且防止作弊,构建一个计算任务订单网络,进行计算订单匹配,同时还需要证明计算完成,验证计算完成,交易打包在侧链上出区块。

  • DAPP

    在侧链上运行不同的虚拟机,在不同虚拟机上跑不同的DAPP,同时要打通智能合约之间数据的交互,智能合约和外部数据的交互,有利于对接外部的先知机,让不同的智能合约和虚拟机在性能和安全性两个维度取得平衡。

  • 发链服务

    对于特定的业务形态,需要特定的区块链来提供服务,这都是侧链所要完成的工作,给用户一个友好的界面发布一条基础公链,将技术细节封装起来,用户只需要按照需要进行参数选定,一键发布一条属于自己的公链,在这条公链上,可以跑虚拟机智能合约,可以发行自己的Token,可以规划自己的经济体系等。

编程实现

在多核时代,Go是我们的选择,优势是很明显的,可以用同步方式轻松实现高并发,特别是在分布式系统,网络编程等领域,应用非常广泛。

可以选用V8虚拟机作为智能合约的环境,这样可以支持JavaScript来编写开发智能合约。

选用DPoS来构建共识算法,网络编程方面选用gRPC来做P2P通讯,使用Protocol Buffer来序列化要传递的数据结构。

你可能感兴趣的:(区块链架构设计简述)