11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

45 分钟,如何从 0 到 1 开发一款区块链应用?

  • 2019-08-22
  • 本文字数:4346 字

    阅读完需:约 14 分钟

45分钟,如何从0到1开发一款区块链应用?

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 链。


bash build_chain.sh -l "127.0.0.1:4" -p 30300,20200,8545
复制代码


其中,-l 参数表示每个节点的 IP 以及监听的 IP,-p 选项指定起始端口,分别是 p2p_port,channel_port,jsonrpc_port。


命令执行成功会输出 All completed。如果执行出错,请检查 nodes/build.log 文件中的错误信息。


  • 启动 FISCO BCOS 链


bash nodes/127.0.0.1/start_all.sh
复制代码


启动所有节点,成功会输出类似下面内容的相应。否则请使用 netstat -an | grep tcp 检查机器的 30300~30303,20200~20203,8545~8548 端口是否被占用。


try to start node0try to start node1try to start node2try to start node3node1 start successfullynode2 start successfullynode0 start successfullynode3 start successfully
复制代码


  • 检查进程


ps -ef | grep -v grep | grep fisco-bcos
复制代码


正常情况会有类似下面的输出;如果进程数不为 4,则进程没有启动(一般是端口被占用导致的)。


fisco       5453     1  1 17:11 pts/0    00:00:02 /home/fisco/fisco/nodes/127.0.0.1/node0/../fisco-bcos -c config.inifisco       5459     1  1 17:11 pts/0    00:00:02 /home/fisco/fisco/nodes/127.0.0.1/node1/../fisco-bcos -c config.inifisco       5464     1  1 17:11 pts/0    00:00:02 /home/fisco/fisco/nodes/127.0.0.1/node2/../fisco-bcos -c config.inifisco       5476     1  1 17:11 pts/0    00:00:02 /home/fisco/fisco/nodes/127.0.0.1/node3/../fisco-bcos -c config.ini
复制代码


  • 检查日志输出

  • 如下,查看节点 node0 链接的节点数。


tail -f nodes/127.0.0.1/node0/log/log*  | grep connected
复制代码


正常情况会不停地输出链接信息,从输出可以看出 node0 与另外 3 个节点有链接。


info|2019-01-21 17:30:58.316769| [P2P][Service] heartBeat connected count,size=3info|2019-01-21 17:31:08.316922| [P2P][Service] heartBeat connected count,size=3info|2019-01-21 17:31:18.317105| [P2P][Service] heartBeat connected count,size=3
复制代码


执行下面指令,检查是否在共识。


tail -f nodes/127.0.0.1/node0/log/log*  | grep +++
复制代码


正常情况会不停输出 ++++Generating seal,表示共识正常。


info|2019-01-21 17:23:32.576197| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++Generating seal on,blkNum=1,tx=0,myIdx=2,hash=13dcd2da...info|2019-01-21 17:23:36.592280| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++Generating seal on,blkNum=1,tx=0,myIdx=2,hash=31d21ab7...info|2019-01-21 17:23:40.612241| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++Generating seal on,blkNum=1,tx=0,myIdx=2,hash=49d0e830...
复制代码


接下来讲解与链的交互,以部署 Node.js SDK 为例:


  • 环境要求


Node.js 及 npm: Node.js >= 8.10.0, npm >= 5.6.0 如果没有部署过 Node.js 环境,推荐使用 nvm 快速部署,使用 nvm 同时也能够避免潜在的导致 Node.js SDK 部署失败的权限问题。


  • 拉取源代码


git clone https://github.com/FISCO-BCOS/nodejs-sdk.git
复制代码


  • 部署


如果网络中使用了代理,请先为 npm 配置代理。如果没有使用代理,请忽略。


npm config set proxy <your proxy>npm config set https-proxy <your proxy>
复制代码


如果使用的网络不能顺利访问 npm 官方镜像,请使用其他镜像代替,如淘宝:


npm config set registry https://registry.npm.taobao.org# 部署过程中请确保能够访问外网以能够安装第三方依赖包cd nodejs-sdknpm installnpm run repocleannpm run bootstrap
复制代码


  • 使用 CLI 工具


Node.js SDK 自带一个 CLI 工具供用户在命令行中方便快捷地调用管理区块链的 Node.js API,同时 CLI 工具也能够方便地被应用到脚本中。CLI 工具在 Node.js SDK 提供的 API 的基础上开发而成,是一个展示如何使用 Node.js API 进行二次开发的范例。


CLI 工具的配置文件位于


nodejs-sdk/packages/cli/conf/config.json
复制代码


配置文件中各字段的说明如下:


  • 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/ 目录。如果使用了快速建链,则命令如下:


cp nodes/127.0.0.1/sdk/* 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/ 目录下执行,需要先切换至该目录:


cd packages/cli/
复制代码


  • 开启自动补全(仅针对 bash 及 zsh 用户)

  • 为方便用户使用 CLI 工具,CLI 工具支持在 bash 或 zsh 中进行自动补全,此功能需要手动启用,执行命令:


rcfile=~/.$(basename $SHELL)rc && ./cli.js completion >> $rcfile && source $rcfile
复制代码


便可启用自动补全。使用 CLI 工具时,按下 Tab 键(依据系统配置的不同,可能需要按两下)便可弹出候选命令或参数的列表并自动补全。


怎么样?是不是很简单?


一旦你开始从代码的入手,就真正踏上了 FISCO BCOS 学习之旅,区块链也将不再是一个高深莫测的概念,而是你可以真正触达,一个解决实际问题的技术武器。


2019-08-22 19:103617
用户头像
孙春鹭 InfoQ 编辑

发布了 27 篇内容, 共 99453 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

TcaplusDB君 · 行业新闻汇编(三)

tcaplus

【OH干货】如何向OpenHarmony社区提交代码

拓维信息

OpenHarmony

web前端培训: Vue3面试考点分享

@零度

前端开发 Vue3

Android 12 “致命”崩溃解决之路

阿里巴巴终端技术

android 崩溃分析 客户端 UC内核

网络编程懒人入门(十四):到底什么是Socket?一文即懂!

JackJiang

TCP 网络编程 socket IM 即时通讯IM

运维安全是指什么?如何做好运维安全?

行云管家

运维 网络安全 IT运维 运维安全

云原生微服务技术趋势解读

阿里巴巴中间件

阿里云 微服务 云原生 中间件

微服务从代码到k8s部署应有尽有系列(二、网关)

万俊峰Kevin

微服务 RPC web开发 go-zero Go 语言

如何选择充血模型和贫血模型

蜜糖的代码注释

DDD 领域建模 2月月更

文本检测算法新思路:基于区域重组的文本检测

华为云开发者联盟

文本检测 区域重组 文本检测算法 PixelLink TextSnake

X6在数栈指标管理中的应用

数栈DTinsight

Java 大数据 前端

mark: centos 镜像下载地址

webrtc developer

Linux centos

第十二节:Springboot多环境配置

入门小站

spring-boot

开源demo| 你画我猜——让你的生活更有趣

anyRTC开发者

音视频 互动白板 开源demo 你画我猜 社交娱乐

HTTP缓存协议实战

vivo互联网技术

缓存 浏览器 服务器 HTTP

在线YAML转JSON工具

入门小站

工具

Linux常用的命令

龙空白白

linux 文件权限控制 linuc

Java&Go高性能队列之channel性能测试

FunTester

Go 性能测试 队列 channel FunTester

如何通过测试用例保障交付质量

阿里云云效

阿里云 云原生 开发测试 测试用例 研发

CRM重构项目

Mars

移动开发平台WorkPlus | 快速实现企业移动应用集成化

WorkPlus Lite

【C语言】一篇速通常量变量

謓泽

编程语言 C语言 2月月更 常量变量

TcaplusDB君 · 行业新闻汇编(五)

tcaplus

TcaplusDB君 · 行业新闻汇编(六)

tcaplus

大数据培训:Flink全链路延迟的测量方式及原理

@零度

flink 大数据开发

前端技术分享:页面性能优化问题复盘

有道技术团队

前端

3种基于深度学习的有监督关系抽取方法

华为云开发者联盟

文本检测 区域重组 文本检测算法 PixelLink TextSnake

国内首款! 亚信科技数据库AntDB亮相中国信通院性能测试工具发布会

亚信AntDB数据库

后端新手如何从 0 到 1 打造一款 Apache APISIX 插件

Apache APISIX 中文社区

后端 插件 Apache APISIX APISIX 网关

翟佳:从技术工程师到「网红」开源创业者

腾源会

开源 开源公司

2022 年值得关注的 十大 DevOps 最佳实践

SoFlu软件机器人

45分钟,如何从0到1开发一款区块链应用?_语言 & 开发_孙春鹭_InfoQ精选文章