中国国家队的联盟链中,还有一条级别很高、举足轻重的联盟链,这就是长安链。本文中笔者整理了长安链的相关资料,帮助读者全面了解长安链。
长安链背景资料
长安链ChainMaker由北京微芯研究院、清华大学、北京航空航天大学、腾讯、百度和京东等知名高校、企业共同研发。取名“长安链”,喻意“长治久安、再创辉煌、链接世界”。
长安链作为区块链开源底层软件平台,包涵区块链核心框架、丰富的组件库和工具集,致力于为用户高效、精准地解决差异化区块链实现需求,构建高性能、高可信、高安全的新型数字基础设施,同时也是国内首个自主可控区块链软硬件技术体系。
长安链生态
构建基于长安链ChainMaker的数字经济国家主链,以重大场景应用为牵引,构建长安链生态网络,汇集数据要素,增进业务协同,繁荣数字经济新生态。
自主可控
面向世界科技前沿,秉持自主创新原则,汇聚国内顶级工程师和科学家团队,长安链·ChainMaker构建了全球独创的底层技术框架,关键技术模块全部自研,成为国际区块链技术发展的新动能,为国家“新基建”提供自主、可控、安全的区块链数字经济基础设施。独创深度模块化、可装配、高性能并行执行的区块链底层技术架构,覆盖国产密码算法、基于国密证书的加密通讯和国产CA证书颁发认证机构。
开源开放
自诞生起,长安链践行开源、开放的理念,最大范围联合产、学、研、用各类科研力量,由顶尖高校、知名企业等优势力量共同开发,同时广泛拥抱个人和企业开发者,打造标准规范体系,共建开源开放充满活力的区块链技术生态;
采用友好的开源协议,开放软件源代码,推动多项技术体系标准化,建立标准化下的开发生态。
性能领先
长安链拥有高效并行调度算法、高性能可信安全智能合约执行引擎、流水线共识算法等国际领先的区块链底层技术,具备高并发、低延时、大规模节点组网等先进技术优势,交易吞吐能力可达10万TPS,位居全球领先水平。支持基于内存的数据系统,提升交易处理性能。
灵活装配
长安链将区块链执行流程标准化、模块化,推进区块链技术从手工作业模式演进到自动装配生产模式,方便用户根据不同的业务需求搭建区块链系统,为技术的规模化应用提供基础;可插拔、可分离的自主可控核心框架,可快速接入优势底层模块/单一定制化开发模块。
并行调度
在提案-验证整体框架下,支持基于DAG的块内交易并行调度提案和并行验证;调度支持确定性调度和随机调度等多种并行调度算法。
广域网络
基于PubSub机制,支持多链隔离下P2P网络的复用与数据隔离;支持NAT穿透,复杂网络拓扑下的大规模节点组网,支持网络节点动态治理。
多链架构
支持并行多链实现不同参与方间的数据隔离;可根据场景灵活扩展子链以支持业务和吞吐量的需求。
权限管理
为链上每个操作定义访问权限,支持细粒度权限管理策略;结合组织、角色等提供灵活的身份权限配置方案。
长安链逻辑架构
长安链逻辑架构如下图所示。主要包含以下元素:
共识节点(consensus node):参与区块链网络中共识投票、交易执行、区块验证和记账的节点。
同步节点 (sync node):或称见证节点,参与区块和交易同步、区块验证,交易执行,并记录完整账本数据,但不参与共识投票。
轻节点 (light node):参与同步和校验区块头信息、验证交易存在性的节点。
SDK:帮助用户通过RPC和区块链网络进行连接,完成合约创建、调用、链管理等功能。
区块链浏览器 (ChainMaker broswer):通过可视化界面为用户展示区块信息、交易信息、节点信息等区块链信息。
管理平台 (management platform):通过可视化界面方便用户对链进行管理、信息浏览和资源监控等。
合约IDE (contract IDE):智能合约在线开发环境,长安链所有合约支持语言均可在该IDE上开发和编译。
命令行工具集 (ChainMaker CLI, cmc):使用户可以用命令行的方式对链进行部署和管理操作,例如证书生成、链配置、交易发送等。
自下而上,长安链由以下层级构成:
基础设施层:公有云、私有云,包括虚拟机、物理机等,为长安链提供基础运行环境。
存储资源层:为长安链节点提供数据存储服务,具体情况可参见数据存储章节。
基础组件层:为长安链节点提供密码学、配置、日志、常用数据结构等通用技术组件,具体可见chainmaker-common项目。
核心模块层:长安链共识算法、核心引擎、虚拟机等核心模块,核心模块均采用可插拔设计,为可装配区块链奠定基础。
接入层:多语言链SDK,方便应用开发者与链交互。
前端应用层:包括区块链管理平台、区块链浏览器、合约开发IDE等,方便用户直接访问区块链底层平台。
长安链的区块产生流程
长安链区块产生的核心流程如下图所示,主要包括:
提议候选区块。区块提议节点从交易池选取一批交易,并行调度执行得到结果,生成DAG,并将区块和DAG广播。
共识候选区块。基于链上的共识机制,对候选区块进行共识投票。
验证候选区块。在共识过程中,网络中其他节点针对提议的候选区块进行正确性验证。
执行候选区块。将完成共识投票的区块提交记录至账本,并从交易缓存中移除。
长安链的虚拟机
长安链目前在软件上支持的虚拟机字节码包括两类:WASM(WebAssembly)和EVM字节码。
WebAssembly 有一套完整的语义,实际上 wasm 是体积小且加载快的二进制格式, 其目标就是充分发挥硬件能力以达到原生执行效率。WebAssembly 设计了一个非常规整的文本格式用来开发、调试、测试、优化。
EVM字节码是最初运用在以太坊上的一种虚拟机字节码,目前已经被广泛的运用在许多区块链平台上,有相对比较成熟的开发工具支持。
长安链的智能合约SDK
用户通过高级语言编写的智能合约一般情况而言,都需要存取区块链上的数据、API支持,ChainMaker为不同的高级语言提供了不同的SDK。当然,这些SDK提供的基本能力是相同的,包括读取数据、写入数据、查询区块链的一些状态等。
不同语言的SDK受限于语言本身特性和编译器的支撑能力,比如go语言支持函数同时返回多个数据,而tinygo编译器对垃圾回收支持存在缺陷,加上区块链系统本身为智能合约提供的运行内存大小受限、调用栈深度受限,用户编写合约时,需要注意这些特性。
目前ChainMaker已经支持的智能合约开发SDK包括Rust、Go、C++和Solidity。
长安链的共识协议
长安链自v1.1.0开源版本起支持Solo,Raft,TBFT,HotStuff 四种共识类型。四种共识对比如下:
长安链的点对点网络
长安链2.0版本的网络模块是基于libp2p的v0.6.4版本实现并改进的。节点的网络地址遵循libp2p地址格式协议;为了满足长安链网络消息在多链场景下的数据隔离需求,我们修改了libp2p-gossip-pubsub模块源码,加入节点白名单机制,精确控制路由表,并让节点上的每条链都独享一个独立的Pubsub服务,保证了广播数据只会在链内的节点传播的确定性;为了满足国密加密算法的支持,我们还修改了libp2p-core核心包,增加了对国密TLS证书的支持。
基于libp2p的改进:
核心包增加对国密SM算法的支持;
libp2p-gossip-pubsub功能模块增加白名单功能,实现对Gossip路由表的控制,达到广播消息隔离效果;
引入StreamPool,实现stream复用提高性能、网络吞吐能力自动扩容等特性。
点对点网络特性包含:
大规模节点组网;
动态节点和连接管理;
专有网络穿透连接;
多链网络隔离。
长安链的组网方式
长安链支持自动发现、自动连接的组网方式,默认在线的每个节点都可以作为种子节点为其他节点提供网络发现服务,每个种子节点都会记录网内节点地址信息。当有新节点连接到某个种子节点时,新节点会向该种子节点查询网内其他可连接节点的地址,拿到其他节点地址后,新节点会主动尝试与这些节点建立连接;另外,种子节点在接受了新节点链接后,会通过网络发现服务将该新节点的地址通知给其他在线的种子节点,其他节点在获得该新节点地址后,也会主动尝试与该新节点建立连接。
长安链理论上可实现上万甚至更多节点同时在线组网。
长安链的存储
长安链支持常用的数据库来存储账本数据,如LevelDB、RocksDB、MySQL等数据库,业务可选择其中任意一种数据库来部署区块链。
账本数据主要分为5类:
区块数据,记录区块元信息和交易数据:
区块元数据包括:区块头、区块DAG、区块中交易的txid列表,additionalData等;
交易数据,既序列化后的交易体,为了提供对单笔交易数据的查询,所以对交易数据进行了单独存储。
状态数据,记录智能合约中读写的链上状态数据,既世界状态。
历史数据,长安链对每笔交易在执行过程中的状态变化历史、合约调用历史、账户发起交易历史都可以进行记录,可用于后续追溯交易、状态数据的变迁过程。
合约执行结果读写集数据,长安链对每笔交易在执行过程中的所读写的状态数据集进行了单独保存,方便其他节点进行快速的数据同步。
事件数据,合约执行过程中产生的事件日志。
针对上述5类账本数据,长安链分别实现了5个DB类,分别是:Block DB、State DB、History DB、Result DB和Contract Event DB。采用多个数据库之后,就需要维护数据库之间的数据一致性,避免仅有部分数据库提交后,发生程序中断而导致不同数据库间的数据不一致,因此,长安链引入了Block binary log组件来持久化存储区块的原始内容,用于重启过程中的数据恢复,类似于数据库中的预写式日志(wal)的功能。需要注意的是,历史数据、结果数据并不是每个节点必须保存的,节点可以根据自己的业务需要在配置文件中启用或者关闭历史数据库和结果数据库。