基于Fabric 的区块链测试方法调研与总结

Fabric概述 

从应用层视角来看,Hyperledger Fabric为开发人员提供了CLI命令行终端、事件模块、客户端SDK、链码API等接口,为上层应用提供了身份管理、账本管理、交易管理、智能合约管理等区块链服务,具体如下:

  • 身份管理:获取用户注册证书及其私钥,用于身份验证、消息签名与验签等;

  • 账本管理:提供多种方式查询与保存账本数据,如查询指定区块号的区块数据;

  • 交易管理:构造并发送签名提案消息请求背书,检查合法后请求交易排序,并打包成区块,验证交易后提交账本;

  • 智能合约管理:基于链码API编写智能合约程序,安装链码并实例化(部署)后,通过调用链码请求执行更改状态的操作。

从底层视角看,Hyperledger Fabric提供了成员关系服务、共识服务、链码服务、安全与密码服务等服务,具体如下:

基于此,Fabric的测试原则是保证:

从测试类型来看,包括了接口测试、系统功能测试、安全测试和性能测试。

测试策略上,集成测试阶段,可采用适合的接口测试工具,验证程序内、程序与平台之间的接口调用逻辑;系统功能测试阶段,主要是从黑盒测试的角度,验证信息上链、合约执行功能的正确性,而安全性和性能测试方向,可采用代码扫描工具及轻量级性能测试工具执行基本的测试案例。涉及网络攻击、渗透测试和较大规模压测的,应该提前分析测试需求,开展专项安全及性能测试。

  • 成员关系服务:Fabric-CA节点提供成员登录注册服务,接收申请并授权新用户证书与私钥等,对身份证书生命周期进行管理。

  • 共识服务:通过Endorser背书节点模拟执行提案消息,请求对模拟执行结果等签名进行背书,再提交到Orderer节点共识组件对交易进行排序并打包出块,然后交由Committer记账节点验证交易并提交账本。同时,基于Gossip消息协议提供P2P网络通信机制,实现高效数据分发与状态同步,确保节点账本的一致性;

  • 链码服务:基于Docker容器提供隔离运行环境执行链码,支持多种语言开发的链码程序(智能合约)

  • Fabric 测试方法

  • 测试需求与策略

    从Fabric的架构中可以看出,开发者在开发过程中主要包括编写智能合约、通过SDK调用智能合约 以及订阅各类事件。所以,从测试角度出发,我们自下而上需要关注:

  • 平台中开源智能合约是否可满足项目调用需求

  • 平台中加密算法是否可满足项目安全需要

  • 调用的SDK时,接口报文是否符合平台规范

  • 关键信息是否可以正常上链

  • 智能合约的逻辑是否符合产品需求

  • 执行智能合约时,是否能正常触发

  • 触发后是否可以及时获取区块链事件

  • 根据获取的区块链事件,后续交易逻辑是否能正确处理

  • 交易处理完成后,是否可及时更新世界状态和peer节点账本状态

  • 不能触发的智能合约是否有异常处理机制

  • 上链和执行智能合约时,服务器是否可满足业务的性能需求

  • 公共接口调用的合法性

  • 逻辑处理的正确性

  • 数据处理的安全性

  • 服务性能的稳定性

测试分析与设计

根据测试策略,我们将分别从以下四个方面测试分析和设计。

1)接口测试

接口可分为系统内部接口和系统外部接口,内部接口为支持程序内功能流转而设计,外部则是指与底层平台或者其他节点之间的接口。比如,某个平台中,存在合约及区块链信息查询接口,使用的是Socket通讯方式,报文是JSON类型。在与Fabric底层或者其他区块链节点的通讯的接口则可以依赖产品本身的特性,使用HTTP、Socket或者其他协议类型,报文可以应用HTTP 、JSON、 XML等。

从这些信息可以分析,在执行接口测试时,需要注意:

使用传统的Postman、JMeter、Robotframework等接口测试工具就可以完成测试实施;

接口测试用例设计与通常项目无异,改变不同的上送参数,验证接口逻辑即可;

测试数据上可能存在特殊内容,如需要查询合约信息时,需指定特定区块的hash值,该数据需要通过工具生成才能用于测试验证;

若需要执行自动化测试,则依据工具特点,选择合适的平台即可。

在Fabric开发的实际项目中,我们需要保证信息上链及智能合约在设定时间点和对象上完成动作,触发的事件、场景状态需要与初始设定相同。也可以防止触发合约的必要条件被篡改(如交易中利用大量的时间转移资产)。

4)安全测试

基于Fabric框架的金融区块链指令上链分析,业务应用与区块链交互过程中会通过应用层、物理层、数据层、拓展层将数据存储上链。即使每个层都会为区块链每个功能的组件及层间协议提供完整性、可用性和机密性等安全防御机制和协议,Fabric仍然存在一些安全风险,安全测试依然是区块链项目的重要组成部分。下面进行详细的阐述。

  • 身份认证和鉴别测试。在区跨链业务场景中,应用服务与用户交互应确保用户身份的合法性;进行身份认证与鉴别、成员管理以及审计记录等安全功能测试,防止出现非授权访问与读写区块链数据的情况。在联盟中的组织结构用户接入过程中,应确保所有操作都是由受信任的机构发起,防止身份验证风险和数据传输泄密风险。另外,还需要鉴别秘钥存储安全性、证书服务器自身安全性等。

  • 数据安全性。如果涉及账户转账和余额等重要信息上链存储的信息,应在执行背书的节点上存储hash,可以避免敏感数据返回客户端。此外,区跨链上的数据是不可修改,因此如何确保数据上链完整性和机密性、不可篡改性尤为重要。监管方可以设置监管节点和参与整个区跨链系统但是不参与共识;监管方可以保留所有账本以备日后定期审查。

  • Web与移动客户端应用安全测试。是否存在注入、失效的身份认证、敏感信息泄露、XML外部实体(XXE)、失效的访问控制、安全配置错误、跨站脚本(XSS)、不安全的反序列化、使用含有已知漏洞的组件、不足的日志记录和监控等。客户端应能防止进程注入、防止逆向编译导致客户端完整性被破坏。另外,还可以加强渗透评估测试,尽早发现潜在的安全威胁。

  • 物理层安全测试。物理层安全风险包括物理环境风险、终端自身硬件风险、人员及管理控制风险和系统安全风险等。金融区块链系统终端存在物理环境破坏、终端外设任意接入、内外网隔离等诸多风险。对路由器等网络设备进行已知漏洞扫描、安全功能检查以及未知漏洞挖掘。

  • 数据层安全测试。区块数据以链式结构分布存储在多个节点上,每个节点上的区块数据具有独立性,因此单个节点数据被篡改不会对整个区块链系统造成影响。该项测试主要检查区块链数据或文件是否加密存储与传输;检查数据备份功能是否完善;减少数据文件被破坏无法恢复造成的影响;采用的加密算法是否容易破解。

  • 共识机制。对于以Fabric开源框架搭建的区块链是不需要虚拟代币机制的联盟链或私有链,一致性算法首选PBFT。验证网络框架中的节点数是否满足N>=3f+1,只有满足此类条件,才能符合全部相同有效性要求的拜占庭协议,系统才能保证安全性和活性。另一方面,需要验证该系统是否能够阻止双花攻击、是否具有良好的容错能力。

  • 智能合约。区块链技术最重要的组成部分在于智能合约,主要验证智能合约是否可信、符合规范和流程;着重检查常见的安全漏洞例如整数溢出漏洞、越权访问漏洞、拒绝服务漏洞、逻辑错误漏洞、信息泄露漏洞以及函数误用等漏洞。还可以在进行代码审计测试工作时,在代码层次寻找可能存在的漏洞。

根据区块链去中心化、防篡改、可追溯、智能合约的特性,项目中功能测试需要覆盖信息上链、背书策略、合约执行、数据更新、信息同步等方面。主要测试方法站在用户角度,使用黑盒测试方法。

背书是验证交易是否具备相应权限的一个步骤,符合背书策略的接收交易预案可以通过,不符合的则不应该被接收。这其中包括提交者是否满足通道权限、签名是否合法、交易预案格式是否符合规则,交易员是否重复发送等。节点收到背书后,会模拟执行链码,功能测试时,需验证数据写操作不会对账本改变。

智能合约中的合约内容是依赖实体规则人为编码写入的,所以,对于合约内容需关注:

此外,功能测试期间对智能合约的容错性需有所准备,当智能合约运行出现错误时,需要停止合约;如若出现账户资金风险,需要限制转账速率或者控制最大转账额度。升级智能合约链码后,验证业务层逻辑是否被修复、数据层是否未受到影响。

3)性能测试

区块链解决的是不可信网络下的分布式共识计算方案。区块链的效率以及规模,取决于核心共识算法,包括合法性、完整性、可终止性三个重要属性。从最早的拜占庭将军问题,引出一种容错理论。随后1985年 Fischer和Lynch发表了FLP不可能性定论和1998年Eric Brewer的三角理论法(CAP),给异步网络下共识模型提供了很好的理论基础。共识的性能决定了给链的节点间视图数据信息一致性效率。而同步的视图的数据,需要提供更大的存储空间,才能为整个链提高区块的批量效率。

  • 2)功能测试
  • 触发合约的参与方是否完整;智能合约的触发条件是否符合既定规则,不应存在歧义或者模糊的触发条件。

  • 当合约触发完成后,验证其他各peer节点同步消息的正确性及时限性;各参与方的状态需合理正确。

  • ​​​​​​​

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

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

相关文章

百年传承,味在蒸面

2024年7月15日,西安工程大学赴陕西安康“筑梦乡村,携手同行”暑期社会实践团队前往陕西安康鼓楼西街对非遗美食马国庆蒸面进行实践活动。 早晨七点,实践团队在鼓楼西街路口整装集合前往马国庆蒸面,据实践团队前期资料收集了解到马…

k8s+containerd(kvm版)

k8s(Kubernetes)是由Gogle开源的容器编排引擎,可以用来管理容器化的应用程序和服务,k 高可用:系统在长时间内持续正常地运行,并不会因为某一个组件或者服务的故障而导致整个系统不可用可扩展性&#xff1a…

【SpringBoot】 jasypt配置文件密码加解密

目前我们对yml配置文件中的密码都是明文显示,显然这不安全,有的程序员离职了以后可能会做一些非法骚操作,所以我们最好要做一个加密,只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…

爬虫学习3:爬虫的深度爬取

爬虫的深度爬取和爬取视频的方式 深度爬取豆瓣读书 import time import fake_useragent import requests from lxml import etree head {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 …

陶德:边种田边写代码,3年300万行,一个人写出了“国产大满贯QT”

这是《开发者说》的第12期,本期我们邀请的开发者是陶德,从小在国企矿山里长大,计算机成绩是文科班里最差的一个,毕业两年找不到工作,睡过公园,讨过剩饭,用打魔兽世界的方式磨炼技术,…

.NET 8+Vue2 部署到Window Server

.NET 8Vue2 部署到Window Server 1 配置环境 1.1 下载安装.NET 8 SDK,下载时需注意目标服务器的系统类型(64位 or 32位) https://dotnet.microsoft.com/zh-cn/download 1.2 下载安装SQL Server数据库(服务和管理工具&#xff…

LeetCode 129, 133, 136

文章目录 129. 求根节点到叶节点数字之和题目链接标签思路代码 133. 克隆图题目链接标签思路代码 136. 只出现一次的数字题目链接标签思路代码 129. 求根节点到叶节点数字之和 题目链接 129. 求根节点到叶节点数字之和 标签 树 深度优先搜索 二叉树 思路 由于本题需要 从…

海外短剧系统搭建开发定制,H5/APP源码搭建部署,支持二开

目录 前言: 一、系统功能 二、部署流程 前言: 海外短剧系统搭建部署,前端uniapp,PHP语言。支持二开功能。 一、系统功能 以下是改写后的内容: 1. 多语言环境集成 —— 提供一键式翻译功能,轻松切换多…

【Vue3】计算属性

【Vue3】计算属性 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内…

IT common sense常识

how to input formative json data in console console.log({"message": [{"cat_id": 1,"cat_name": "大家电","cat_pid": 0,"cat_level": 0,"cat_deleted": false,,,,})2) how to clear unecessary c…

基于生物地理算法的MLP多层感知机优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 生物地理算法(BBO)原理 4.2 多层感知机(MLP) 4.3 BBO优化MLP参数 5.完整程序 1.程序功能描述 基于生物地理算法的MLP多层感知机优化mat…

【数学建模】——前沿图与网络模型:新时代算法解析与应用

目录 1.图与网络的基本概念 1. 无向图和有向图 2. 简单图、完全图、赋权图 3. 顶点的度 4. 子图与图的连通性 2.图的矩阵表示 1. 关联矩阵 2. 邻接矩阵 3.最短路问题 1.Dijkstra 算法 2.Floyd 算法 4.最小生成树问题 1.Kruskal 算法 2.Prim 算法 5.着色问题 6.…

C语言——字符串拼接strcat及自实现代码

strcat函数 在C语言中&#xff0c;strcat函数用于将两个字符串连接起来&#xff0c;即将源字符串&#xff08;source string&#xff09;追加到目标字符串&#xff08;destination string&#xff09;的末尾&#xff0c;并返回目标字符串。这个函数定义在头文件<string.h&g…

[Linux]Mysql之主从同步

AB复制 一、主从复制概述 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 主从复制的作用 1.做数据的热备&#xff0c;作为后备数据库&#xff0c;主数据库服务器故障后&#xf…

数据价值网络:开启数据驱动的新时代

数据价值网络&#xff1a;开启数据驱动的新时代 数据已成为第五大生产要素&#xff0c;其价值的实现有赖于广泛的应用和高效的流通。数据价值网络涵盖了从数据生成到运用的一系列价值创造环节&#xff0c;各企业基于自身资源禀赋和比较优势进行专业化分工。政策的支持和技术的创…

学懂C语言(十三):C语言中判断与循环的用法

目录 一、判断 1、if语句 2、switch语句 二、循环 1、while循环 2、do-while循环 3、for循环 三、关键点 循环 判断 C语言中的判断和循环是控制程序流程的基本结构&#xff0c;它们允许程序根据条件执行不同的代码块&#xff0c;或者重复执行某段代码。本节内容比较基…

入门C语言Day15——关系条件逻辑操作符

今天来学习操作符中的一些内容&#xff0c;主要讲的是关系&条件&逻辑操作符 1.关系操作符 首先要来了解一下什么是关系操作符&#xff0c;关系操作符其实就是关系运算符&#xff0c;关系运算符又和关系表达式有关。 C语言中用于比较的表达式&#xff0c;就被称为 “关…

Cadence学习笔记(十三)--设置边框与异形铺铜

直接导入板框用小眼睛可以看到所有的都是线的属性&#xff1a; 那么如何让它变成板框呢&#xff1f;这里先跳转到下图中的层&#xff1a; 将Z--CPOY这一层变成shape区&#xff1a; 之后用Z--copy: Z--COPY设置如下参数&#xff0c;铺铜内缩20mil: 之后选择长方形铺铜就可以了&…

【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录 前言一、提供者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 二、消费者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 三、服务列表四、服务发现1. 获取服务列表2. 测试2.1 获取所有服务2.2 根据服务名获取服务信息 五、更多配置项总结 前言 本节通过…