引言
作为“新基础设施”的重要组成部分,区块链越来越受到技术爱好者的关注。区块链极客接受它。法典就是法律;相信你可以通过代码构建一个值得信任的世界。
作为一门综合性学科技术,区块链是以数学、密码学、计算机理论、分布式网络、博弈论等众多基础学科为基础的。底层代码通常有数十万行。如果你不知道方法,完全掌握代码是极具挑战性的。
本文希望给读者提供一种阅读区块链源代码的方法,使读者在面对区块链底层项目时能够从容地说出;让我看看密码;。
基本知识储备
区块链是一门综合性学科,涉及多个专业领域,涵盖了广泛的基础知识。在深入研究区块链之前,需要有一定的知识储备广度。请注意,这是关于广度,而不是深度,这意味着您只需要对基础如何工作有一个大致的概念。
密码学相关:了解哈希、对称加密、非对称加密和数字签名的基本原理和功能;
计算机操作系统相关:了解多进程、多线程、互斥和并行的概念和功能;
数据结构相关:了解队列、栈、树等基本数据结构及使用场景;
计算机网络相关:了解TCP/IP、心跳包、消息流等基本概念。
数据库相关:了解数据库的基本概念,了解KV数据库的基本原理;
与计算机原理相关:了解程序编译、解析、执行和字节码、虚拟机等概念。
分布式系统相关:了解点对点网络、分布式一致性、CAP等概念和基本原理;
程序开发相关:掌握相关编程语言、构建工具等,了解项目建设的基本流程。
多维的一天
掌握了基础知识之后,就可以打开底层区块链代码的真实副本,通过git克隆可以快速下载到项目代码中。
但是,数十万行代码从哪里开始呢?
Huijun解决方案为***的牛,手触摸,肩膀依靠的地方,鞋的脚,膝盖被华跑到玩刀?,素质alto:适合“帝尧”舞蹈,是“第一”的意志。
庄子和米德;健康的主
一个**的区块链底层项目,必须有一个**的工程代码,这个代码有其合理的组织结构和纹理逻辑。日读代码应该以chop为例,先理解区块链的基本结构和逻辑,然后才开始日读,可以达到事半功倍的效果。
本文建议从四个不同的角度来阅读,从您自己的需要来看待代码,而不是被大量的代码所支配。这四个视角分别是功能视角、系统视角、用户视角和开发视角,分别从逻辑层面、操作层面、使用层面和开发层面阐明了代码体系结构和关键算法。
功能角度
在深入区块链代码之前,首先要通过项目官方网站、技术文档、github wiki等渠道获取项目设计文档,了解项目的基本功能设计。
一般情况下,每个项目都会提供一个核心功能列表、总体架构图、功能模块图等介绍文档,通过这些文档,您可以掌握项目的基本功能。即使您真的找不到它,也没关系,大多数底层区块链项目在功能设计方面差别不大,而且核心功能模块大致相同。
以FISCO BCOS为例,基本代码如下:
核心层核心代码如下:
接口层核心代码如下:
从功能的角度,首先定位核心功能模块的代码位置,然后深入到每个功能代码中。从单个函数模块开始,您可以继续递归地采用分解函数透视图和遍历宽度的方法,直到您理解了全局。
系统的角度
从整个区块链网络运行的角度,考虑了参与整个生命周期的区块链节点的系统行为。
问题包括从启动节点的命令开始,节点执行什么初始化步骤,以及如何与其他节点构建点对点网络,以及实现分布式协作。
由于不同区块链的部署架构略有不同,系统的操作模式也有所不同,但所有的变化都是一样的。从系统的角度来看,每个区块链系统都要经历节点初始化、点对点网络建立、分布式交互完成等过程。
从系统区块链的角度来看,首先要注意的是初始化工作。以FISCO BCOS为例,区块链节点从主函数入口开始,通过libinitializer模块对每个模块进行初始化和启动,顺序如下:
fiscobcos最重要的特征之一是质数序列。AMPL 支持多个分类账组,每个分类账组是一个单独的分类账模块,每个分类账具有单独的存储、同步和一致处理功能。
初始化工作同时,系统将启动的线程数量(或流程、协同程序原则),这些线程包括同步网络监控、共识,新闻,等等,可以运行代码分析和系统命令来查看节点合作确定关键线程是什么,明确关键工作线程机制能掌握基本块链系统操作机制。
以FISCO BCOS为例,节点启动后的关键线程及其关系如下:
初始化完成后,网络模块的主机线程将根据配置列表积极建立与其他节点的连接,并持续监听来自其他节点的连接。同步线程开始互相发送块高度,当它们发现块高度低于其他节点时,下载逻辑就会被激活。RPC和通道线程等待客户机发送请求,然后将接收到的事务插入txpool。Sealer线程从txpool获取交易,而Consensus线程开始处理Consensus消息包。
通过这种方式,整个区块链系统以有序的方式运行,以完成客户端请求和分布式协作。
用户的角度
从用户的角度来看,他们专注于操作界面和事务生命周期、接口和协议的设计,编码和解码方法,核心数据结构,错误代码规范,等等,以及如何发送一个事务链,以及处理流程事务经历了链,直到到达整个网络的共识。
通常,区块链的底层项目会给出交互协议的描述文档,其中通常包括onRPC、gRPC、Restful和其他不同类的交互协议。
接口因项目而异,但它很可能包括发送事务、部署契约、调用契约、查看块、查看事务和返回收据以及查看区块链状态的接口。数据编码会因项目而异,有些是on格式,有些是protobuf格式,等等。
当知道从技术文档通信协议、接口设计解码和错误代码的细节,然后最重要的是,通过发送交易,部署,称这些关键接口,代码的蜘蛛网,贯穿整个生命周期中,交易表明底部的核心逻辑块链。
以FISCO BCOS为例,整个事务生命周期通过多个模块的协作进行处理:
发展的角度
开发视角关注整个代码项目,包括第三方依赖关系、源代码模块之间的相互关系、单元测试框架和测试用例、如何编译和构建、持续集成和基准测试,以及如何参与社区源代码贡献。
有不同语言的推荐构建方法和单一测试框架。通常,块链项目的源目录可以快速定位到第三方依赖库。例如,用cmake构建的c++项目有cmakelists.txt文件,go项目有go。mod文件,生锈的项目有货。
以FISCO BCOS为例,您可以从cmakist中看到。TXT的依赖库包括:
项目核心源代码包括fisco-bcos程序入口代码,以及libxxx模块代码,根据模块名称可以快速识别其相应的功能,这里也体现了项目源代码的质量,高质量的代码应该是“代码是一个注释。
单元测试代码在测试目录下,使用boost单元测试框架,子目录unittests单测试代码和源目录,很容易找到对应的单元测试代码的源代码。
构建和持续集成工具代码在工具目录、子目录ci中为不同的场景维护多个持续集成用例,并且在github上提交的每个pr (pull request)将触发这些持续集成用例,当且仅当每个用例成功通过时。
关于FISCO BCOS规范和贡献,CODING_STYLE。Md和贡献。Md文件有详细描述,鼓励用户积极参与社区贡献。
结论
区块链涉及到很多领域和知识,需要深入到源细节,才能真正全面掌握区块链的核心技术。所谓的他者;重剑没有优势,非常方便。,掌握了阅读源代码的基本方法,才能在大量的代码面前不变色心不跳。
本文提出了从功能、系统、用户和开发四个方面来解读区块链底层代码的方法。一般来说,建议选择不同的视角来通读,或者根据个人喜好和能力模来选择视角的顺序。
**,本文中的示例都是FISCO BCOS,但是这个演练方法可以应用于任何其他底层区块链项目。我希望这篇文章能对你有所帮助。
文章链接:https://www.btchangqing.cn/28075.html
更新时间:2020年05月29日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。