2019 年 8 月 1 日晚 8 点半,InfoQ 极客 Live 直播邀请了微众银行 FISCO BCOS 底层开发工程师李陈希,以「Fintech 夜话——FISCO BCOS 开源平台开发训练营」为题,向开发者分享 FISCO BCOS 底层开放平台特性,解读关于如何基于 FISCO BCOS 平台开发一个区块链应用以及开发过程中的注意事项。本文根据分享内容整理而成。
步步为赢,解读 FISCO BCOS 新特性
FISCO BCOS 发展至今,已不再单单是一个区块链的底层平台,围绕着 FISCO BCOS 的周边,微众银行开发了一系列的组件,包括控制台,SDK,企业级部署工具,区块链浏览器、Sample、文档、合约编译器、隐私保护组件等。
目前,FISCO BCOS 已发展为 2.0 版本,相较于之前的版本,FISCO BCOS 2.0 新增了多群组、并行计算模型、预编译合约等特性。
群组架构
群组架构是 FISCO BCOS 2.0 众多新特性中的主线,采用群组架构的网络中,根据业务场景的不同,可存在多个不同的账本,区块链节点可以根据业务关系选择群组加入,参与到对应账本的数据共享和共识过程中。该架构的特点是:
各群组独立执行共识流程,由群组内参与者决定如何进行共识,一个群组内的共识不受其他群组影响,各群组拥有独立的账本,维护自己的交易事务和数据,使得各群组之间解除耦合独立运作,可以达成更好的隐私隔离;
机构的节点只需部署一次,通过群组设置即可参与到不同的多方协作业务中,或将一个业务按用户、时间等维度分到各群组,群组架构可快速地平行扩展,在扩大了业务规模同时,极大简化了运维复杂度,降低管理成本。
分布式存储
节点可将数据存储在远端分布式系统中,克服了本地化数据存储的诸多限制。该方案有以下优点:
支持多种存储引擎,选用高可用的分布式存储系统,可以支持数据简便快速地扩容;
将计算和数据隔离,节点故障不会导致数据异常;
数据在远端存储,数据可以在更安全的隔离区存储,这在很多场景中非常有意义;
分布式存储不仅支持 Key-Value 形式,还支持 SQL 方式,使得业务开发更为简便;
世界状态的存储从原来的 MPT 存储结构转为分布式存储,避免了世界状态急剧膨胀导致性能下降的问题;
优化了数据存储的结构,更节约存储空间。
并行计算模型
采用并行计算模型可提升合约的并发吞吐量。1.0 版本以及大部分业界传统区块链平台,交易是被打包成一个区块,在一个区块中交易顺序串行执行的。2.0 版本基于预编译合约,实现一套并行交易处理模型,基于这个模型可以自定义交易互斥变量。在区块执行过程中,系统将会根据交易互斥变量自动构建交易依赖关系图——DAG,基于 DAG 并行执行交易,最好情况下性能可提升数倍(取决于 CPU 核数)。
预编译合约
FISCO BCOS 2.0 提供预编译合约框架,支持采用 C++ 编写合约,其优势是合约调用响应更快,运行速度更高,消耗资源更少,更易于并行计算,极大提升整个系统的效率。FISCO BCOS 内置了多个系统级的合约,提供准入控制、权限管理、系统配置、CRUD 式的数据存取等功能,这些功能天然集成在底层平台里,无需手动部署。
FISCO BCOS 开发实战
首先,以搭建单群组 FISCO BCOS 链为例操作。使用 build_chain.sh 脚本在本地搭建一条 4 节点 的 FISCO BCOS 链。
准备环境
搭建单群组 4 节点联盟链
在 fisco 目录下执行如下指令,生成一条单群组 4 节点的 FISCO 链。
其中,-l 参数表示每个节点的 IP 以及监听的 IP,-p 选项指定起始端口,分别是 p2p_port,channel_port,jsonrpc_port。
命令执行成功会输出 All completed。如果执行出错,请检查 nodes/build.log 文件中的错误信息。
启动 FISCO BCOS 链
启动所有节点,成功会输出类似下面内容的相应。否则请使用 netstat -an | grep tcp 检查机器的 30300~30303,20200~20203,8545~8548 端口是否被占用。
检查进程
正常情况会有类似下面的输出;如果进程数不为 4,则进程没有启动(一般是端口被占用导致的)。
检查日志输出
如下,查看节点 node0 链接的节点数。
正常情况会不停地输出链接信息,从输出可以看出 node0 与另外 3 个节点有链接。
执行下面指令,检查是否在共识。
正常情况会不停输出 ++++Generating seal,表示共识正常。
接下来讲解与链的交互,以部署 Node.js SDK 为例:
环境要求
Node.js 及 npm: Node.js >= 8.10.0, npm >= 5.6.0 如果没有部署过 Node.js 环境,推荐使用 nvm 快速部署,使用 nvm 同时也能够避免潜在的导致 Node.js SDK 部署失败的权限问题。
拉取源代码
部署
如果网络中使用了代理,请先为 npm 配置代理。如果没有使用代理,请忽略。
如果使用的网络不能顺利访问 npm 官方镜像,请使用其他镜像代替,如淘宝:
使用 CLI 工具
Node.js SDK 自带一个 CLI 工具供用户在命令行中方便快捷地调用管理区块链的 Node.js API,同时 CLI 工具也能够方便地被应用到脚本中。CLI 工具在 Node.js SDK 提供的 API 的基础上开发而成,是一个展示如何使用 Node.js API 进行二次开发的范例。
CLI 工具的配置文件位于
配置文件中各字段的说明如下:
privateKey: obzject,必需。外部账户的私钥,可以为一个 256 bits 的随机整数,也可以是一个 pem 或 p12 格式的私钥文件,后两者需要结合 get_account.sh 生成的私钥文件使用。privateKey 包含两个必需字段,一个可选字段:
type: string,必需。用于指示私钥类型。type 的值必需为下列三个值之一:
ecrandom:随机整数
pem:pem 格式的文件
p12:p12 格式的文件
value:string,必需。用于指示私钥具体的值:
如果 type 为 ecrandom,则 value 为一个长度为 256 bits 的随机整数,其值介于 1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141 之间。
如果 type 为 pem,则 value 为 pem 文件的路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
如果 type 为 p12,则 value 为 p12 文件的路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
password:string。如果 type 为 p12,则需要此字段以解密私钥,否则会忽略该字段。
nodes: list,必需。FISCO BCOS 节点列表,CLI 工具在使用时会从该列表中随机挑选一个节点进行通信,要求节点数目必须 >= 1。每个节点包含两个字段:
ip: string,必需。FISCO BCOS 节点的 IP 地址
port: string,必需。FISCO BCOS 节点的 Channel 端口
authentication:object,必需。包含建立 Channel 通信时所需的认证信息,一般在建链过程中自动生成。authentication 包含三个必需字段:
key: string,必需。私钥文件路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
cert: string,必需。证书文件路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
ca: string,必需。CA 根证书文件路径,如果是相对路径,需要以配置文件所在的目录为相对路径起始位置。
groupID: number。CLI 所操作的链的群组 ID
timeout: number。CLI 工具所连节点可能会陷入停止响应的状态。为避免陷入无限等待,CLI 工具的每一项操作在 timeout 之后若仍没有得到结果,则强制退出。timeout 的单位为毫秒。
solc: string。Node.js SDK 已经自带 0.4.26 及 0.5.10 版本的 Solidity 编译器,如果有特殊的编译器需求,可以设置本配置项为编译器的执行路径或全局命令。
配置证书及 Channel 端口
CLI 工具需要使用证书来与 FISCO BCOS 节点通讯,证书文件默认放置于 packages/cli/conf/ 目录。如果使用了快速建链,则命令如下:
端口配置位于 packages/cli/conf/config.json 文件的 nodes.port 配置项中,需要根据连接 FISCO BCOS 节点的实际配置修改该配置项以指定要访问的端口。如果使用了快速搭链,可以跳过此步。
cp nodes/127.0.0.1/sdk/* packages/cli/conf
配置完成后,即可开始使用 CLI 工具,CLI 工具位于 packages/cli/cli.js,所有操作均需要在 packages/cli/ 目录下执行,需要先切换至该目录:
开启自动补全(仅针对 bash 及 zsh 用户)
为方便用户使用 CLI 工具,CLI 工具支持在 bash 或 zsh 中进行自动补全,此功能需要手动启用,执行命令:
便可启用自动补全。使用 CLI 工具时,按下 Tab 键(依据系统配置的不同,可能需要按两下)便可弹出候选命令或参数的列表并自动补全。
怎么样?是不是很简单?
一旦你开始从代码的入手,就真正踏上了 FISCO BCOS 学习之旅,区块链也将不再是一个高深莫测的概念,而是你可以真正触达,一个解决实际问题的技术武器。
评论