FISCO BCOS源码基本概念

Posted 软件工程小施同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FISCO BCOS源码基本概念相关的知识,希望对你有一定的参考价值。

作者:张开翔|FISCO BCOS 首席架构师

首先需要熟练的Linux操作系统知识。

大多数区块链系统是可以跑在Linux上的,包括CentOS和Ubuntu等,你至少要会一些基本的Linux操作指令,比如

  • ls查看目录、
  • ps或top查看进程、
  • find查找文件、
  • netstat查看网络、
  • ulimit检查系统参数限制、
  • df/du查看磁盘空间、
  • 用apt/yum安装软件

等等,如果这些基本命令都不掌握,在Linux上操作肯定是举步维艰的。

要有清晰的网络概念。

区块链本来是分布式系统,节点之间一定是通过网络相连的,只是跑起来的话,不需要多高深的网络知识,只需要

  • 了解什么是TCP/IP;
  • 公网、内网、本地地址的区别;
  • 端口如何配置;
  • 节点和节点、SDK和节点之间的互联是否会被防火墙和网络策略挡住;
  • 采用ifconfig、telnet、ping、netstat等命令检查网络信息和进行探测、定位网络问题。

一般来说,Linux书籍也都会介绍这部分内容。

区块链周边的支持,如浏览器、中间件、业务应用,会依赖一些第三方基础软件,如mysql/MariaDB数据库、nginx服务、Tomcat服务等,至少懂得怎么去安装指定版本的软件,掌握修改这些软件的配置文件并使之生效的基本操作,了解各款软件的密码、权限配置和网络安全策略,以保护自身安全。

如果是基于云、docker或者k8s等容器环境构建,需要了解使用的服务商或容器的功能、性能、配置方式,包括对资源的分配:

  • CPU、
  • 内存、
  • 带宽、
  • 存储

等,以及安全和权限的配置、网络策略配置、运维方式,达到轻松分发构建的同时,还能保持其稳定性和可用性。

二、区块链领域的基础知识栈

以下部分的知识和区块链或区块链某一个平台更加相关,从底到上依次如下:

../../../_images/IMG_4891.JPG

HASH(哈希算法)、签名、证书

严格来说,这并不是区块链领域的专有知识,只是必须具备的基础知识,包括

  • SHA3/SHA256/RIPEMD160等摘要算法,
  • 这些算法和“区块链地址”的关系,
  • 基于公私钥的数字签名和验证方法,
  • 数字证书的概念和格式,比如X.509证书,
  • 保存证书/公私钥的文件格式,如PEM文件、keystore文件等。

基础应用密码学

基础应用密码学其实范围很广,作为入门者,至少要了解对称和非对称加密的常见算法,如

  • AES对称加密,
  • RSA、ECDSA椭圆曲线等非对称加密算法,

以及这些算法在签名验签、数据加密、通信协商和保护方面的作用。

如果要使用国密,那么需要了解SM2~SM9一系列算法的概念和使用。

分布式网络结构

区块链是先天的“分布式网络系统”,

  • 节点和节点通过网络的P2P端口互连,
  • 客户端、SDK通过RPC/Channel端口互连,

首先要保证网络之间是互通的,监听的地址和端口是对的,端口是开放的,防火墙和网络策略是正确的,用于安全连接的证书已经到位,才能保证区块链的“通则不痛”。

这也要求使用者具备基本的网络知识、网络工具,同时了解区块链特有的节点类型(共识节点、观察节点、轻节点等)、互连方式(点对点双向连接、JSON RPC的HTTP短连接Channel长连接等)。详情点击参考《FISCO BCOS网络端口讲解》

智能合约

智能合约可说是应用开发者直面区块链的一道大门,入得此门,精彩无穷。流行的智能合约语言是Solidity语言,这门源自以太坊,从诞生开始就是为区块链而来的。

Solidity语言更新活跃、文档完备,具有良好的一致性和事务性,功能足够实现中型的商业应用。

当然,它在实时调试、第三库支持、运行速度等方面还比不上成熟的语言,如果开发者想要用C++等语言编写智能合约,那就要对区块链上的计算范式进行深入了解,避免写出无法共识的智能合约来,一般是建议有深入的了解后再采用Solidity之外的其他语言编写合约。

要掌握Solidity合约,当然是通读文档,并动手尝试。具体参考以下文:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/smart_contract.html

ABI接口原理

在采用EVM作为虚拟机的区块链上,EVM执行的是Solidity语言的合约。合约编译会生成后缀名为ABI的文件,其实里面就是该合约接口定义的JSON文本,可以用文本查看器查阅,了解你写的合约如何翻译成ABI里的接口,接口返回类型,参数列表,参数类型等,

只要有合约的ABI文件,就可以调用区块链SDK的接口,解析这个合约相关的交易、返回值、回执等。

区块数据结构

区块(Block)有区块头和区块体。

区块体有交易列表,交易列表里的每个交易(Transaction或Tx)有

  • 发起方、
  • 目标地址、
  • 调用方法
  • 参数,
  • 发送者签名。
  • 交易的结果会生成一个“回执(Receipt)”,回执里包含被调用方法的返回值、运行过程生成的EventLog等……

了解这些,基本上就掌握了区块链数据的脉络,还可以继续深究数据结构里的merkle root以及对应的merkle tree是如何生成的,有什么作用(如用于SPV:Simplified PaymentVerification)。具体参考以下文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/protocol_description.html

RPC接口

这里把区块链节点暴露的功能接口统称为“RPC接口”

  • 查看链上数据,包括区块、交易、回执、系统信息、配置信息,
  • 向链上发起交易,以调用智能合约、修改系统配置等,
  • 通过AMOP协议发送消息、监听事件,

都是通过RPC接口。

几十个RPC接口建议一一走读,或善用搜索,以发现自己想要的接口。

接口通信采用的协议可能是JSON RPC,或者是FISCO BCOS独创的Channel协议,SDK基本上已经对接口和协议进行了良好的包装,也可以在深入理解ABI和RLP等编码模式前提下自行开发接口客户端。具体参考以下文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/api.html

准入和权限模型

联盟链强调安全可控,节点准入是第一步

在链初始化后,其他节点或者SDK配置了相应的证书,才能接入到既有的联盟链上

链上的角色用权限模型控制,包括管理员权限、发布合约的权限、创建表的权限、参数配置权限等,以避免角色之间操作混淆,某些角色既当运动员又当裁判员。

初学者需要仔细阅读区块链平台提供的技术文档了解原理,遵循操作手册的步骤进行操作。具体参考以下文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/permission_control.html

数据存储模型

区块链节点会采用文件数据库(LevelDB或RocksDB),或者关系型数据库如MySQL保存数据,所以,链上是真的有“数据库”的。

写入数据库的数据包括区块、交易、回执、合约产生的状态数据等,

是否写入“调用合约产生的历史数据”根据不同的平台而定,FISCO BCOS默认只保存最新的状态值,可以选择性地将修改记录写入“回执”或“历史表”里进行追踪。

FISCO BCOS还提供方案,将历史数据导出到链下数据库进行关联分析。具体参考以下文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/storage/index.html

共识机制原理

联盟链通常采用插件化共识机制实现,FISCO BCOS提供PBFT和RAFT两种高效共识算法,而不会采用“挖矿”这些高耗能低效率的共识。

共识机制是区块链的灵魂,对共识机制进行深入学习,才可以深入理解区块链通过多方协作、达成高度一致性、支持交易事务性、防篡改防作恶的功效。具体参考以下文档:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/consensus/index.html

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/articles/2_required/practical_skill_tree.html?highlight=%E6%BA%90%E7%A0%81#id15

以上是关于FISCO BCOS源码基本概念的主要内容,如果未能解决你的问题,请参考以下文章

FISCO BCOS源码代码目录结构

安装FISCO-BCOS的那些坑

FISCO BCOS源码启动顺序

FISCO BCOS源码第三方依赖和模块

FISCO BCOS权限控制一览

FISCO BCOS权限控制一览