官方技术文档:https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/index.html
我们在官方技术文档的基础上,进行,对文档中一些不清楚的地方进行修正
依赖软件
Ubuntu
sudo apt install -y zlib1g-dev libffi6 libffi-dev wget git
初始化环境
文档有些乱,仔细看这里
1 Linux环境初始化
1.1拉取源代码
git clone https://github.com/FISCO-BCOS/python-sdk
#若因为网络问题导致长时间无法执行上面的命令,请尝试以下命令:
git clone https://gitee.com/FISCO-BCOS/python-sdk
1.2配置环境
我使用conda
新建conda环境即可,注意新建时要安装python版本 python 3.6.3【fisco 3.x会报错】或者最后使用3.7.x
conda安装可以参考miniconda安装
我们这里要做的事
新建虚拟环境,安装python
conda create --name ihan python=3.7.3
激活环境
conda activate ihan
2安装Python SDK依赖
python-sdk文件下执行
pip install -r requirements.txt
若因网络原因,安装依赖失败,可使用清华的pip源下载,安装命令如下:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
3初始化配置
bash init_env.sh -i
该脚本执行操作如下: # 1. 拷贝client_config.py.template->client_config.py # 2. 下载solc编译器
若没有执行以上初始化步骤,需要将contracts/目录下的sol代码手动编译成bin和abi文件并放置于contracts目录,才可以部署和调用相应合约。合约编译可以使用remix
文档这里有问题,后面的就不用看了,看下面我的实现
我们需要更改client_config.py
更改前
更改后
不更改的报错信息在文末
【重要,2.0的channel信息也是在client_config.py,但是3.x不是,接下来我们设置证书和channel信息】
# FISCO BCOS3.0的配置段,如连接FISCO BCOS2.0版本,无需关心此段
# FISCO BCOS3.0 c底层sdk的配置,都在bcos3_config_file里,无需配置在此文件
bcos3_lib_path ="./bcos3sdklib"
bcos3_config_file ="./bcos3sdklib/bcos3_sdk_config.ini"
group = "group0"
由上面可以知道,库文件和配置文件在./bcos3sdklib,配置文件是./bcos3sdklib/bcos3_sdk_config.ini
设置开始
拷贝bcos3_sdk_config_sample.ini->bcos3_sdk_config.ini【和bcos3_config_file ="./bcos3sdklib/bcos3_sdk_config.ini"字段对应即可,可以自己更改】
可以手动改【界面化系统】,也可以用命令行
cp -n bcos3sdklib/bcos3_sdk_config_sample.ini bcos3sdklib/bcos3_sdk_config.ini
配置文件设置成功
由上图可以
[peers]
#supported ipv4 and ipv6
node.0=127.0.0.1:20200
这里可以更改成自己的,我们使用默认的,所以不改
主要设置这里
ca_path放证书文件
可以在/home/sysadmin/python-sdk/bcos3sdklib下新建conf来存放,上面的设置是在bcos3sdklib,直接放在bcos3sdklib里也行,要是新建需要改ca_path=./bcos3sdklib/conf
实现将证书放在bcos3sdklib下
在pythonsdk下执行
cp ~/fisco/nodes/127.0.0.1/sdk/* bcos3sdklib/
由于FISCO BCOS 3.x使用SDK的C语言库实现pythonsdk,诸多细节封装在库里,我们要在bcos3sdklib下放入libbcos-c-sdk.so
否则报错
OSError: /home/sysadmin/python-sdk/bcos3sdklib/libbcos-c-sdk.so: cannot open shared object file: No such file or directory
可以在文档里找到c sdk自己下载编译后的,也可以cmake
解决方案
我们直接下载libbcos-c-sdk.so文件,后放在bcos3sdklib下
完成
查看版本
部署合约
具体使用信息,可输入 python console3.py usage 查看
报错1:不更改账号文件相关路径,报错
INFO >> user input : [‘version’]
ERROR >> execute version failed
ERROR >> error information: key file bin/accounts/pemtest.pem doesn’t exist, please check client_config.py again and make sure this account exist
报错2:不更改编译器报错(编译器地址可以是你自己下载的地方)
INFO >> compile with nodejs compiler
/usr/bin/env: ‘node’: No such file or directory
ERROR >> execute deploy failed
ERROR >> error information: compile error for compile failed, error information: Command ‘[’./solcjs’, ‘–bin’, ‘–abi’, ‘./contracts/HelloWorld.sol’, ‘-o’, ‘contracts’]’ returned non-zero exit status 127.
报错3:没有csdk库文件
OSError: /home/sysadmin/python-sdk/bcos3sdklib/libbcos-c-sdk.so: cannot open shared object file: No such file or directory
Exception ignored in: <function Bcos3Client.del at 0x7f5f243f5d08>
Traceback (most recent call last):
File “/home/sysadmin/python-sdk/bcos3sdk/bcos3client.py”, line 59, in del
self.finish()
File “/home/sysadmin/python-sdk/bcos3sdk/bcos3client.py”, line 111, in finish
self.bcossdk.finish()
AttributeError: ‘Bcos3Client’ object has no attribute ‘bcossdk’
4报错python版本太高,我使用的3.7.3没有报错,可以自己尝试
(ihan) sysadmin@sysadmin-virtual-machine:~/python-sdk$ python console3.py version
Traceback (most recent call last):
File “/home/sysadmin/python-sdk/console3.py”, line 19, in
from bcos3sdk.bcos3client import Bcos3Client
File “/home/sysadmin/python-sdk/bcos3sdk/bcos3client.py”, line 28, in
from client.common import common
File “/home/sysadmin/python-sdk/client/common/common.py”, line 20, in
from client.datatype_parser import DatatypeParser
File “/home/sysadmin/python-sdk/client/datatype_parser.py”, line 19, in
from client.format_param_by_abi import format_args_by_function_abi
File “/home/sysadmin/python-sdk/client/format_param_by_abi.py”, line 17, in
from collections import Iterable
ImportError: cannot import name ‘Iterable’ from ‘collections’ (/home/sysadmin/anaconda3/envs/ihan/lib/python3.12/collections/init.py)