FISCO-BCOS-Python 模板

基于Python-SDK的FISCO BCOS区块链HelloWorld模板,提供了简单的问候语设置和查询功能。本项目采用现代Python开发实践,包含完整的配置管理、测试框架和项目结构。

快速开始

仓库地址:git clone https://gitee.com/atanycosts/python-fisco-template.git

前置要求

  • Python 3.7+
  • FISCO BCOS节点(2.0或3.0版本)
  • Git

1. 环境准备

创建虚拟环境(推荐)
# Windows
rmdir /s /q .venv
python -m venv .venv
.venv\Scripts\activate# Linux/macOS
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
安装项目依赖
pip install -r requirements.txt

2. SDK初始化

重要: 如果你重新下载了python-sdk或首次使用,需要进行以下初始化步骤:

2.1 创建SDK配置文件
# 下载sdk(在根目录下)
git clone https://gitee.com/FISCO-BCOS/python-sdk
# 进入SDK目录
cd python-sdk# Windows
Copy-Item "client_config.py.template" "client_config.py"# Linux
cp client_config.py.template client_config.py
2.2 安装SDK依赖
# 在python-sdk目录下执行
pip install -r requirements.txt
2.3 返回项目目录
cd ../python-fisco-template

3. 配置环境变量

复制环境变量模板文件:

# Windows,如果存在.env就不用管这一步
Copy-Item ".env.example" ".env"# Linux
cp .env.example .env

编辑 .env 文件,配置你的区块链网络参数(详见下方配置说明)。

4. 运行测试

项目提供了完整的测试套件,支持多种运行方式:

# 运行所有测试
pytest test/ -v# 运行特定测试
pytest test/test_blockchain_main.py::test_set_greeting -v# 运行连接测试
pytest test/test_blockchain_main.py::test_blockchain_connection -v# 直接运行Python文件(传统方式)
python test/test_blockchain_main.py

如果看到类似以下输出,说明配置成功:

2025-01-XX XX:XX:XX.XXX | INFO | 区块链配置初始化完成,连接节点: your-node-ip:20200
2025-01-XX XX:XX:XX.XXX | INFO | 合约ABI加载成功: resources/abi/HelloWorld.abi
2025-01-XX XX:XX:XX.XXX | SUCCESS | 上链成功!交易哈希: 0x...

项目结构

python_fisco_template/
├── .env                              # 环境变量配置文件
├── .gitignore                        # Git忽略文件
├── LICENSE                           # 开源许可证
├── README.md                         # 项目说明文档
├── requirements.txt                  # Python依赖包列表
├── pytest.ini                       # pytest测试配置
├── pyproject.toml                    # 现代Python项目配置
├── app/                              # 应用核心代码
│   ├── config/
│   │   ├── __init__.py
│   │   └── blockchain_config.py      # 区块链配置管理类
│   └── services/
│       ├── __init__.py
│       └── blockchain_service.py     # 区块链服务实现
├── bin/                              # 证书和账户文件
│   ├── accounts/
│   │   └── pemtest.pem               # 测试账户私钥文件
│   ├── ca.crt                        # CA根证书
│   ├── sdk.crt                       # SDK客户端证书
│   ├── sdk.key                       # SDK客户端私钥
│   └── logs/                         # SDK运行日志目录
├── logs/                             # 应用日志目录
│   └── blockchain_test.log           # 测试运行日志
├── python-sdk/                       # FISCO BCOS Python SDK
│   └── ...                           # SDK相关文件
├── resources/                        # 资源文件目录
│   ├── __init__.py
│   ├── abi/                          # 智能合约ABI文件
│   │   ├── __init__.py
│   │   └── HelloWorld.abi            # HelloWorld合约ABI
│   ├── bin/                          # 智能合约编译文件
│   │   ├── __init__.py
│   │   └── ecc/                      # ECDSA编译输出
│   └── contracts/                    # 智能合约源码
│       └── HelloWorld.sol            # HelloWorld合约源码
└── test/                             # 测试文件目录└── test_blockchain_main.py       # 主要测试脚本

我遇到的问题解决

1. ModuleNotFoundError: No module named ‘client_config’

问题原因: SDK目录下缺少 client_config.py 文件

解决方案:

cd ../python-sdk
# Windows PowerShell
Copy-Item "client_config.py.template" "client_config.py"
# Linux/macOS
cp client_config.py.template client_config.py

问题: ModuleNotFoundError: No module named 'attrdict'

解决方案:

cd ../python-sdk
pip install -r requirements.txt

2. 连接问题

问题: 无法连接到FISCO BCOS节点

解决方案:

  • 检查 .env 文件中的 BLOCKCHAIN_CHANNEL_HOSTBLOCKCHAIN_CHANNEL_PORT
  • 确认节点正在运行:ps aux | grep fisco
  • 验证防火墙设置,确保端口20200可访问
  • 检查证书文件路径和权限

3. 证书问题

问题: SSL证书验证失败

解决方案:

# 检查证书文件是否存在
ls -la bin/ca.crt bin/sdk.crt bin/sdk.key# 验证证书有效性
openssl x509 -in bin/sdk.crt -text -noout
  • 确保证书文件存在且路径正确
  • 检查证书是否过期
  • 验证CA证书与节点证书匹配

4. 合约调用失败

问题: 合约方法调用返回错误

解决方案:

  • 检查 BLOCKCHAIN_CONTRACT_ADDRESS 是否为有效的已部署合约地址
  • 验证ABI文件与合约匹配:cat resources/abi/HelloWorld.abi
  • 检查合约方法参数类型和数量

5. 测试运行问题

问题: pytest运行失败或找不到测试

解决方案:

# 检查pytest配置
pytest --collect-only# 运行特定测试
pytest test/test_blockchain_main.py::test_set_greeting -v# 检查Python路径
python -c "import sys; print('\n'.join(sys.path))"

6. 日志问题

问题: 日志输出异常或无法写入

解决方案:

  • 确保 logs 目录存在且有写入权限
  • 检查 loguru 配置是否正确
  • 验证日志级别设置

7. 环境变量问题

问题: 配置未生效

解决方案:

# 检查环境变量是否加载
from app.config.blockchain_config import blockchain_config
print(blockchain_config.dict())
  • 确保 .env 文件在项目根目录
  • 检查变量名前缀是否为 BLOCKCHAIN_
  • 验证 python-dotenv 是否正确安装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97177.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端(微信等)使用 vConsole调试console

本文介绍了一种在移动端真机上进行调试的方法——使用VConsole。通过简单的安装步骤和代码配置,开发者可以在移动端直接查看console.log输出,极大提升了调试效率。 摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >作…

云计算资源分配问题

这里写目录标题一、云计算资源的基本类型二、资源分配的目标三、资源分配的方式四、资源分配的技术与工具五、挑战与优化方向六、实际应用场景举例总结云计算资源分配是指在云计算环境中,根据用户需求、应用程序性能要求以及系统整体效率,将计算、存储、…

深度学习之第二课PyTorch与CUDA的安装

目录 简介 一、PyTorch 与 CUDA 的核心作用 1.PyTorch 2.CUDA 二、CUDA的安装 1.查看 2.下载安装 3.检查是否安装成功 三、PyTorch的安装 1.GPU版本安装 2.CPU版本安装 简介 在深度学习的实践旅程中,搭建稳定且高效的开发环境是一切实验与项目的基础&…

Ubuntu22.04 安装和使用标注工具labelImg

文章目录一、LabelImg 的安装及配置1. 安装2. 配置二、使用1. 基础操作介绍2. 创建自定义标签2.1 修改 predefined_classes.txt2.2 直接软件界面新增3. 图像标注3.1 重命名排序3.2 标注3.2 voc2yolo 格式转换3.3 视频转图片Yolo系列 —— Ubuntu 安装和使用标注工具 labelImgYo…

Jenkins与Docker搭建CI/CD流水线实战指南 (自动化测试与部署)

更多云服务器知识,尽在hostol.com你是否已经厌倦了那个“人肉”部署的重复循环?每一次 git push 之后,都像是一个庄严的仪式,你必须虔诚地打开SSH,小心翼翼地敲下一连串的 git pull, npm install, docker build, docke…

【数据可视化-100】使用 Pyecharts 绘制人口迁徙图:步骤与数据组织形式

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

5G相对于4G网络的优化对比

5G网络作为新一代移动通信技术,相比4G实现了全方位的性能提升和架构优化。5G通过高速率、低时延和大连接三大核心特性,有效解决了4G网络面临的数据流量爆炸式增长和物联网应用瓶颈问题 ,同时引入了动态频谱共享、网络切片等创新技术&#xff…

AR智能巡检:智慧工地的高效安全新引擎

在建筑行业,工地安全管理与施工效率的提升一直是核心议题。随着增强现实(AR)技术的快速发展,AR智能巡检系统正逐步成为智慧工地的“标配”,通过虚实结合、实时交互和智能分析,推动建筑行业迈入数字化、智能化的新阶段。本文将从技术原理、应用场景、核心优势及未来趋势等…

TypeScript:枚举类型

1. 什么是枚举类型?枚举(Enum)是TypeScript中一种特殊的数据类型,用于定义一组命名的常量值。它允许开发者用一个友好的名称来代表数值或字符串,避免使用“魔法数字”或硬编码值。基本语法:enum Direction …

Maven 编译打包一个比较有趣的问题

前言最近做项目,发现一个比较有意思的问题,其实发现了问题的根源还是很好理解,但是如果突然看到会非常的难以理解。在Java项目中,明明包名错误了,居然可以正常编译打包,IDEA报错了,但是mvn命令正…

Leetcode贪心算法

题目&#xff1a;划分字母区间 题号&#xff1a;763class Solution {public List<Integer> partitionLabels(String s) {List<Integer> list new LinkedList();int[] edge new int[27];char[] chars s.toCharArray();for(int i 0; i <chars.length;i){edge…

【密码学基础】加密消息语法 CMS:给数字信息装个 “安全保险箱”

如果说数字世界是一座繁忙的城市&#xff0c;那么我们每天发送的邮件、合同、软件安装包就是穿梭在城市里的 “包裹”。有些包裹里装着隐私&#xff08;比如银行账单&#xff09;&#xff0c;有些装着重要承诺&#xff08;比如电子合同&#xff09;&#xff0c;还有些关系到设备…

leetcode算法刷题的第二十天

1.leetcode 39.组合总和 题目链接 这道题里面的数组里面的数字是可以重复使用的&#xff0c;那可能就会有人想&#xff0c;出现了0怎么办&#xff0c;有这个想法的很好&#xff0c;但是题目要求数组里面的数字最小值为1&#xff0c;这就可以让人放心了。但是有总和的限制&…

使用Spoon报错Driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver‘ could not be found解决方法

使用Spoon报错Driver class ‘com.microsoft.sqlserver.jdbc.SQLServerDriver’ could not be found 产生原因 出现这个错误是因为Spoon无法找到用于连接MS SQL Server的JDBC驱动程序。该驱动程序是一个jar文件,通常需要手动下载并配置。 解决方案 下载JDBC驱动程序: 访问 M…

【实时Linux实战系列】基于实时Linux的音频实时监控系统

在当今数字化时代&#xff0c;音频监控系统在许多领域都有着广泛的应用&#xff0c;例如安全监控、工业环境监测、智能交通等。音频实时监控系统能够实时采集、分析音频信号&#xff0c;并在检测到异常时发出警报&#xff0c;这对于提高安全性、优化生产流程和提升用户体验都有…

改造thinkphp6的命令行工具和分批次导出大量数据

文章目录基本用法传入参数addArgumentaddOption参数提示导出数据示例准备工作执行导出基本用法 在thinkphp6框架中&#xff0c;自带了命令行工具&#xff0c;通过配置 config/console.php &#xff0c;添加自定义的命令&#xff1a; return [commands > [//...//新增的自定…

外汇中高频 CTA 风控策略回测案例

在汇率波动日益频繁、企业与机构对风险管理要求不断提高的背景下&#xff0c;外汇交易策略已成为资产配置与对冲操作的重要工具。其中&#xff0c;CTA 策略在外汇交易中具有非常重要的实际应用价值&#xff0c;在风险控制、趋势捕捉、资金效率与交易实用性之间取得了良好平衡。…

【iOS】内存管理及部分Runtime复习

1.继承链关于继承链存在两个指针 类的superclass指向父类 父类的sp指向根类 根类的sp指向空 元类的sp指向父类的元类 最终指向根元类 而根元类的sp指向根类 而关于isa指针 对象的isa指针指向它所属的类 类的isa指针指向元类 元类的isa指针指向根元类 根元类的isa指针指向自己2.…

重置 Windows Server 2019 管理员账户密码

文章目录前言1. 重置方法2. 重置流程总结前言 之前因为参加华为存储的 HCIE 培训和考试&#xff0c;以及在项目上交付和运维&#xff0c;占用了较多的时间和精力&#xff0c;导致很长一段时间没有去写博客&#xff0c;前些天登录 CSDN 博客发现原力已失效&#xff0c;才知道平…

.Net Core Web 架构(管道机制)的底层实现

.Net Core Web 架构(管道机制)的底层实现 .NET Core Web 程序的底层实现是一个复杂的体系&#xff0c;但我们可以将其分解为几个核心部分来理解。它本质上是一个将 HTTP 请求转换为开发者代码执行&#xff0c;并将执行结果返回为 HTTP 响应的精密管道。 下图清晰地展示了这一处…