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、
- 内存、
- 带宽、
- 存储
等,以及安全和权限的配置、网络策略配置、运维方式,达到轻松分发构建的同时,还能保持其稳定性和可用性。
二、区块链领域的基础知识栈
以下部分的知识和区块链或区块链某一个平台更加相关,从底到上依次如下:
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
以上是关于FISCO BCOS源码基本概念的主要内容,如果未能解决你的问题,请参考以下文章