FISCO BCOS
环境配置
1 |
|
Oracle JDK:1.8.0_141、1.8.0_202、11.0.2、14.0.2、15.0.2 Open JDK:11.0.2、14.0.2、15.0.2
要注意的是 FISCO 有 v2 和 v3,二者不兼容。
版本说明
轻便 Air 版本:采用 all-in-one 的封装模式,将所有模块编译成一个二进制(进程),一个进程即为一个区块链节点,包括网络、共识、接入等所有功能模块,采用本地 RocksDB 存储。它适用于初学者入门、功能验证、POC 产品等。
专业 Pro 版本:包括 RPC、Gateway 两个接入层的服务和多个区块链节点 Node 服务组成,其中一个 Node 服务代表一个群组,存储采用本地 RocksDB,所有 Node 共用接入层服务,接入层的两个服务可平行扩展。它适用于容量可控(T 级以内)的生产环境,能够支持多群组扩展。
大容量 Max 版本:由各个层的所有服务构成,每个服务都可独立扩展,存储采用分布式存储 TiKV,管理采用 Tars-Framework 服务。它适用于海量交易上链,需要支持大量数据落盘存储的场景。
WeBASE 子系统
WeBASE 可以看作一种降低 FISCO-BCOS 的操作门槛中间件,采用微服务架构,内部含有多个子系统,可以按需部署,并且真正实现了零耦合。
节点前置服务
节点前置服务是和 FISCO-BCOS 配合使用的一个系统,可以让调用者通过 HTTP 请求和区块链节点进行交互。节点前置服务要和节点同机部署,且只能连接一个区块链节点。
应用层在实际生活中难以和节点保持长连接,因此此时节点前置服务的作用就体现出来了。应用层可以通过节点前置服务订阅链上事件,当事件触发时,可以通过 RabbitMQ 消息队列通知到应用层。
架构如下:
节点管理服务
WeBASE-Node-Manager 可以看作一个后端服务,负责处理 WeBASE 前端发来的请求。
WeBase 管理平台
也就是 WeBASE 中间件的前端
WeBase 部署(总套件)
拉取部署脚本并安装:
1 |
|
修改配置文件 common.properties
- 修改数据库的用户名和密码
- 对
webase-sign
和webase-node-mgr
中的配置文件都要设置useSSL=false
,否则后面验证码会加载不出来。
部署:
1 |
|
具体命令如下:
1 |
|
然后访问本地的 5000 端口即可。默认用户名
admin
,默认密码Abcd1234
官方文档: https://webasedoc.readthedocs.io/zh-cn/latest/docs/WeBASE/install.html
文档地址: https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/index.html
部署 WeBase-Node-Manager
下载源码:
1 |
|
数据库配置:
1 |
|
修改 application.yml
spring. datasource. username-->数据库用户名 spring. datasource.
password-->数据库密码 spring. datasource.
url-->修改数据库名,以及加上 useSSL=false
启动后端:
1 |
|
忘记密码参考: https://webasedoc.readthedocs.io/zh-cn/latest/docs/WeBASE-Node-Manager/appendix.html
参考链接: https://webasedoc.readthedocs.io/zh-cn/latest/docs/WeBASE-Web/install.html
仅仅使用前置服务
前面的 WeBase 太过于庞大,事实上,我们可以只使用前置服务。
首先部署节点:
使用 Fisco-BCOS 最新链路 3.6:
1 |
|
启动节点:
1 |
|
检查是否启动成功:
1 |
|
节点部署教程: https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/docs/quick_start/air_installation.html
接下来是WeBase-Front
前端服务: 注意一定是 master-3.0,否则报错
1 |
|
然后编译前端服务:
1 |
|
然后修改配置
1 |
|
将节点所在目录 nodes/${ip}/sdk
下的所有文件拷贝到当前
conf
目录
1 |
|
然后启动 WeBase-Front
1 |
|
在浏览器访问:http://192.168.44.129:5002/WeBASE-Front/#/home
We-BASE教程见:https://webasedoc.readthedocs.io/zh-cn/lab/docs/WeBASE-Front/install.html
Python-SDK 使用
下载 SDK 并配置依赖
1 |
|
下载 C 语言基础库
进入 bcos3sdklib
,修改 download_c_libs.py
中的代理设置 (如果需要)
执行如下命令下载相关库文件
1 |
|
初始化环境
1 |
|
所执行的操作: - 拷贝 client_config.py.template->client_config.py - 下载 solc 编译器
若没有执行以上初始化步骤,需要将 contracts/目录下的 sol 代码手动编译成 bin 和 abi 文件并放置于 contracts 目录,才可以部署和调用相应合约。
然后将下载的 solc 路径进行配置:
client_config.py
:
1 |
|
配置 bcos3_sdk_config.ini
拷贝 bcos3_sdk_config_sample.ini-->bcos3_sdk_config.ini
拷贝证书
1 |
|
注意这里的 bcos3sdklib
路径和
bcos3_sdk_config.ini
中的路径要保持一致。
测试
部署 HelloWorld.sol
:
1 |
|
调用 HelloWorld:
1 |
|
参考: - https://blog.csdn.net/weixin_43491496/article/details/134476274 - https://github.com/FISCO-BCOS/python-sdk
Java-SDK 使用
配置 IDEA
添加如下 Maven 依赖:
1 |
|
拷贝证书
将 nodes/127.0.0.1/sdk
下的文件拷贝到
resources/conf
目录
创建配置文件
拷贝官网的 config-example.toml
文件到
resource
目录。修改其中的节点 IP。
导出 JAVA 代码
在 WeBASE-Front 界面导出 Java 代码 (单文件)。
调用合约
1 |
|
与 Python-SDK 对比
Java 在小型项目上的灵活度远不如 Python,代码过于臃肿,造成效率低下。例如多线程发送 500 个交易,Python 下只需要两秒多,而 Java 需要七秒多。
附录
WeBASE 端口说明
节点管理子系统:端口 5001
节点前置子系统:端口 5002
签名服务子系统:端口 5004
节点 p2p:端口 30300
节点链上链下:端口 20200
节点 RPC 端口:8545
[[FISCO BCOS/image-20240418123418331.png]]
交易流程
- 交易生成:当用户的请求给到客户端后,客户端会构建出一笔交易,包括以下信息
- 接收地址:若是部署合约的交易,则接受地址为空。
- 交易相关的数据
- 交易签名:利用用户的私钥进行签名 然后客户端会向交易填充一些必要字段,如防重放的交易 ID 等。然后客户端通过 RPC 信道将交易发给节点。
- 交易池:节点首先验证交易是否合法,然后验证交易是否重复出现过,最后通过验证则加入到交易池,否则丢弃交易。
- 交易广播:在将交易缓存在交易池的同时,还会将交易广播至已知的其他节点。为了避免出现广播风暴问题,对于从其它节点转发来的交易,节点会随机选取 25%的节点再次广播。
- 交易打包:Sealer 线程负责从交易池中按照先进先出的顺序取出一定数量的交易,组装成共识区块,随后待共识区块会被发往各个节点进行处理。
- 交易执行:节点在收到区块后,会进行执行。若是预编译合约代码,则将直接调用 C++,否则将交易交给 EVM 执行。交易执行的结果 (成功或者失败) 会在交易回执中返回。
- 交易共识:使用 PMFT 算法,各个节点独立执行相同的区块,随后交换各自的执行结果,若发现 2/3 的节点结果相同,则出块。
- 交易落盘:共识出块后,节点需要将区块中的交易以及执行结果写入硬盘,并更新区块高度与区块哈希的映射表。用户可以通过交易哈希查询回执信息。