区块链安全应用-------压力测试

ops/2024/9/20 1:28:02/ 标签: 区块链, 安全, 压力测试

  基于已有的链进行测试(build_chain默认建的链 四个节 点):

第一步:搭链

1. 安装依赖 在ubuntu操作系统中,操作步骤如下:

sudo apt install -y openssl curl

2. 创建操作目录, 下载安装脚本

## 创建操作目录cd ~ && mkdir -p fisco && cd fisco## 下载脚本
curl -LO https://github.com/FISCO-BCOS/FISCO-BCOS/releases/download/v2.7.1/build_chain.sh
chmod +x build_chain.sh
#搭链
bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 –e ./fisco-bcos

3. 启动链

bash nodes/127.0.0.1/start_all.sh

第二步:配置网络配置文件

在networks/fisco-bcos/test/创建fisco-bcos2.json配置网络适配文件:

{"caliper": {"blockchain": "fisco-bcos"},"fisco-bcos": {"config": {"privateKey": "bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd","account": "0x0ff8981ebc130c7874ac7093a4d0c0e3d4f36b08"},"network": {"nodes": [{"ip": "127.0.0.1","rpcPort": "8545","channelPort": "20200"},{"ip": "127.0.0.1","rpcPort": "8546","channelPort": "20201"},{"ip": "127.0.0.1","rpcPort": "8547","channelPort": "20202"},{"ip": "127.0.0.1","rpcPort": "8548","channelPort": "20203"}],"authentication": {"key":"/home/myy/Desktop/fisco-bcos/nodes/127.0.0.1/sdk/sdk.key","cert": "/home/myy/Desktop/fisco-bcos/nodes/127.0.0.1/sdk/sdk.crt","ca": "/home/myy/Desktop/fisco-bcos/nodes/127.0.0.1/sdk/ca.crt"},"groupID": 1,"timeout": 100000},"smartContracts": [{"id": "helloworld","path": "src/fisco-bcos/helloworld/HelloWorld.sol","language": "solidity","version": "v0"}]},"info": {"Version": "2.0.0","Size": "4 Nodes","Distribution": "Single Host"}
}

第三步,对本地四节点链进行测试

npx caliper benchmark run --caliper-workspace caliper-benchmarks --caliper-benchconfig benchmarks/samples/fisco-bcos/helloworld/config.yaml --caliper-networkconfig networks/fisco-bcos/test/fisco-bcos2.json

测试和进程资源状态都可以监测,但在本地监测中,无法监测每个节点的资源状态。

第四步:停止节点

bash nodes/127.0.0.1/stop_all.sh

 

如何改成预编译的智能合约进行测试?

测试文件参数介绍 参数 含义

  • test.name 要在报告中显示的benchmark的短名称。
  • test.description 要在报告中显示的benchmark的详细说明。
  • test.workers 与工作线程相关的对象的配置。
  • test.workers.type (暂未投入使用)
  • test.workers.number 指定用于执行工作负载的工作进程数。
  • test.rounds 对象回合数组,一个数组下可以有多轮不同的测试任务。
  • test.rounds[i].label 该轮测试的名称,通常对应于该轮要提交的测试的类型。
  • test.rounds[i].txNumber应在该轮任务提交的任务数。
  • test.rounds[i].txDuration 该轮提交任务数的用时(单位,秒)。
  • test.rounds[i].rateControl 描述该轮的速率控制策略。
  • test.rounds[i].workload 描述该轮的工作负载模块。
  • test.rounds[i].workload.module 该轮基准测试工作负载模块实现的路径。
  • test.rounds[i].workload.arguments 作为配置,传递给该轮工作负载模块的参数 

通过Java SDK进行压力测试

配置工程链基本环境后,介绍具体测试步骤和要点。

  • 1. 编写合约:HelloWorld合约。
  • 2. 编译智能合约,将其转为Java文件,从上述WeBASE-Front中,也能编译并导出Java文件。
  • 3. 将编译生成的Java文件导入工程中,如HelloWorld.java。
  • 4. 基于上述文件,调用合约功能和接口,编写相关测试案例,例如:ContractTest。
  • 5. 基于Spring提供的gradle插件,我们可以通过”./gradlew test”命令来运行所有测试案例。
  • 6. 如果需要持续集成,可以在配置和初始化FISCO BCOS后,将步骤5命令加入自动化脚本中。

第一步:安装JDK

# 安装open JDK 11
sudo apt install openjdk-11-jdk
# 验证Java版本
java --version
# 输出以下内容:
#openjdk 11.0.22 2024-01-16
#OpenJDK Runtime Environment (build 11.0.22+7-post-Ubuntu-0ubuntu220.04.1)
#OpenJDK 64-Bit Server VM (build 11.0.22+7-post-Ubuntu-0ubuntu220.04.1, mixed 
mode, sharing)

第二步:编译源码 

# 下载源码
git clone https://github.com/FISCO-BCOS/java-sdk-democd java-sdk-demo
git checkout main-2.0# 编译源码
./gradlew build 

 

第三步. 配置Demo

使用Java SDK Demo之前,需要首先要Java SDK,包括证书拷贝以及端口配置,详细请参考这里

# 拷贝证书(假设SDK证书位于~/fisco/nodes/127.0.0.1/sdk目录,请根据实际情况更改路径)
cd dist
cp -r /root/fisco/nodes/127.0.0.1/sdk/* conf# 拷贝配置文件
# 注:
#   默认搭建的FISCO BCOS区块链系统Channel端口是20200,若修改了该端口,请同步修改config.toml中的[network.peers]配置选项
$ cp conf/config-example.toml conf/config.toml
#由于我的区块链环境具有四个节点,所以应该修改java-sdk-demo/dist/conf/config.toml下的network.peers配置
peers=["127.0.0.1:20200", "127.0.0.1:20201","127.0.0.1:20202","127.0.0.1:20203"]

 

第四步. 执行示例压力测试程序

Java SDK Demo提供了一系列压测程序,包括串行转账合约压测、并行转账合约压测、AMOP压测等, 具体使用方法如下:

# 进入dist目录
$ cd dist
mkdir -p contracts/solidity# 将需要转换为java代码的sol文件拷贝到dist/contracts/solidity路径下
# 转换sol, 其中${packageName}是生成的java代码包路径
# 生成的java代码位于 /dist/contracts/sdk/java目录下
$ java -cp "apps/*:lib/*:conf/" org.fisco.bcos.sdk.demo.codegen.DemoSolcToJava 
${packageName}# 压测串行转账合约:
# count: 压测的交易总量
# tps: 压测QPS
# groupId: 压测的群组ID
java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceOk [count] 
[tps] [groupId]# 压测并行转账合约
# --------------------------
# 基于Solidity并行合约parallelok添加账户:
# groupID: 压测的群组ID
# count: 压测的交易总量
# tps: 压测QPS
# file: 保存生成账户的文件名
$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf 
[parallelok] [groupID] [add] [count] [tps] [file]
# 基于Precompiled并行合约precompiled添加账户
# (参数含义同上)
java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf 
[precompiled] [groupID] [add] [count] [tps] [file]
# --------------------------
# 基于Solidity并行合约parallelok发起转账交易压测
# groupID: 压测的群组ID
# count: 压测的交易总量
# tps: 压测的QPS
# file: 转账用户文件
$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf 
[parallelok] [groupID] [transfer] [count] [tps] [file]
# 基于Precompiled并行合约Precompiled发起转账压测
$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.ParallelOkPerf 
[precompiled] [groupID] [transfer] [count] [tps] [file]
# CRUD合约压测
# 压测CRUD insert
# count: 压测的交易总量
# tps: 压测QPS
# groupId: 压测群组$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable 
[insert] [count] [tps] [groupId]# 压测CRUD update
# (参数解释同上)
$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable 
[update] [count] [tps] [groupId]# 压测CRUD remove
# (参数解释同上)
$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable 
[remove] [count] [tps] [groupId]# 压测CRUD query
# (参数解释同上)
$ java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceTable 
[query] [count] [tps] [groupId]

 以上对压测合约进行解释,如已经生成配置文件了,就可以直接运行下面的代码

然后下面是对合约进行运行

cd ~/java-sdk-demo/dist
java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceOk [count] 
[tps] [groupId]java -cp 'conf/:lib/*:apps/*' org.fisco.bcos.sdk.demo.perf.PerformanceOk 10000 1000 1
#200000代表总测试量为10000   1000代表每秒向区块链系统发送1000次请求   1代表区块链系统的groupId

出现以下错误是因为搭链没有启动要先启动链 

bash start_all.sh

 

自定义压测代码

压测自定义合约的开发均在Java SDK Demo中进行,我们需要开发三个文件,分别是: 待压测的智能合约:HelloWorld.sol

待压测的智能合约所编译出的Java类:HelloWorld.java

压力测试程序:PerformanceHelloWorld.java

项目的存放路径

首先编译Helloworld.sol文件

创建 contracts/solidity文件

cd ~/java-sdk-demo/dist
mkdir -p contracts/solidity

生成Helloworld.sol文件 

cd contracts/solidity
vim HelloWorld.sol
#生成以上Helloworld智能合约完成简单的获取和设置name功能
pragma solidity >=0.4.24 <0.6.11;contract HelloWorld {string public name;constructor() public {name = "Hello, World!";}function get() public view returns (string memory) {return name;}function set(string memory n) public {name = n;}
}


http://www.ppmy.cn/ops/16661.html

相关文章

DevOps(十二)Jenkins实战之Web发布到远程服务器

前面两篇博文介绍了怎么将django开发的web应用推送到gitlab源码仓库&#xff0c;然后jenkins服务器从gitlab仓库拉下来&#xff0c;布署到jenkins服务器上&#xff0c;并用supervisor进行进程管理&#xff0c;保证web应用一直能正常运行&#xff0c;今天我们继续优化&#xff0…

构建数字化SaaS商城运营平台:规划框架探究

随着云计算、大数据和人工智能等新技术的快速发展&#xff0c;Software as a Service (SaaS) 模式在商业领域得到了广泛应用。数字化SaaS商城运营平台作为一种新型的商业模式&#xff0c;正在成为数字化时代企业发展的重要途径。本文将深入探讨数字化SaaS商城运营平台的规划框架…

【树莓派】yolov5 Lite,目标检测,行人检测入侵报警

延续之前的程序&#xff1a; https://qq742971636.blog.csdn.net/article/details/138172400 文章目录 播放声音pygame不出声音怎么办&#xff08;调节音量&#xff09;树莓派上的音乐播放器&#xff08;可选&#xff09;命令行直接放歌&#xff08;尝试放mp3歌曲&#xff09; …

MySQL中什么情况下会出现索引失效?如何排查索引失效?

目录 1-引言&#xff1a;什么是MySQL的索引失效&#xff1f;(What、Why)1-1 索引失效定义1-2 为什么排查索引失效 2- 索引失效的原因及排查&#xff08;How&#xff09;2-1 索引失效的情况① 索引列参与计算② 对索引列进行函数操作③ 查询中使用了 OR 两边有范围查询 > 或 …

SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)

1.MybatisPlus常用注解&#xff1a; 1.1 当数据库、表名和字段名和实体类完全一致时无需加注解&#xff0c;不一致时&#xff1a; TableName指定库名 TableId指定表名 TableField指定字段名 1.2 自增主键&#xff1a; TableId(typeIdType.AUTO) private Long id; 1.3 实体类中属…

Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流

一、前言 用ffmpeg采集本地摄像头&#xff0c;如果不指定格式的话&#xff0c;默认小分辨率比如640x480使用rawvideo格式&#xff0c;大分辨率比如1280x720使用mjpeg格式&#xff0c;当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式&am…

JMeter--逻辑控制器--IF 控制器

IF控制器&#xff1a;可以控制其下面的子/后代元素是否执行&#xff1b;如果为 true 则执行&#xff1b;如果为 false 则都不执行 右键 >>> 添加 >>> 逻辑控制器 >>> IF 控制器&#xff08;If Controller&#xff09; Interpret Condition as Varia…

Laravel 6 - 第十七章 配置数据库

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

【面试经典 150 | 回溯】电话号码的字母组合

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;回溯 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

SVN泄露+HG泄露

一、SVN泄露 &#xff08;1&#xff09;什么是SVN 一种开放源代码版本控制系统&#xff0c;用于管理项目的文件和代码 SVN能做什么 1.共享资源并修改 2.记录资源变更&#xff0c;可恢复到任意一个修改点 漏洞描述 版本控制系统中的一个安全漏洞&#xff0c;允许未授权的…

数据库客户端 Navicat Premium 12破解激活

一&#xff0c;安装客户端 选择安装目录&#xff0c;一直点击下一步下一步就可以了 二&#xff0c;破解激活 1&#xff0c;勾选Navicat v12 2&#xff0c;点击 补丁 按钮 选择安装后的exe文件 3&#xff0c;点击生成注册码 复制注册码&#xff0c;同时打开客户端&#xff0…

深度学习图像分割标签onehot

# # 标签 onehot# lab_c np.zeros(shape[self.num_classes]list(label_array.shape),dtype"float32")# for i in range(self.num_classes):# tmp np.zeros_like(label_array)# tmp[label_arrayi] 1# lab_c[i,...] tmp

uniapp

uniapp教程 uniapp项目新建 uniapp官网 新建Uniapp项目&#xff1a; 1. 2.

Node.js -- http模块

文章目录 1. 前置知识1.1 创建HTTP 模块1.2 HTTP 服务的相关注意事项1.3 浏览器查看HTTP 报文 2. 获取请求报文内容2.1 获取请求行2.2 获取请求体2.3 获取请求路径与查询字符串(重要)(1) 方式一(2) 方式二 3. HTTP 请求练习4. 设置HTTP 响应报文4.1 设置响应报文讲解4.2 练习 5…

30 OpenCV 点多边形测试

文章目录 点多边形测试pointPolygonTest示例 点多边形测试 pointPolygonTest pointPolygonTest( InputArray contour,// 输入的轮廓 Point2f pt, // 测试点 bool measureDist // 是否返回距离值&#xff0c;如果是false&#xff0c;1表示在内面&#xff0c;0表示在边界上&a…

数据结构

系列文章目录 文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xf…

英伟达助力日本量子技术创新战略!合作打造量子超级计算机 ABCI-Q

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;1000字丨5分钟阅读 摘要&#xff1a;日本将在英伟达的AI和HPC基础设施的帮助下&#xff0c;通过大规模开发&#xff0c;在量子计算和人工智能领域取…

深度学习知识点:循环神经网络(RNN)、长短期记忆网络(LSTM)、门控循环单元(GRU)

深度学习知识点&#xff1a;循环神经网络&#xff08;RNN&#xff09;、长短期记忆网络&#xff08;LSTM&#xff09;、门控循环单元&#xff08;GRU&#xff09; 前言循环神经网络&#xff08;RNN&#xff09;RNNs&#xff08;循环神经网络&#xff09;训练和传统ANN&#xff…

DevOps的出现带来的变化

概念 Dev&#xff1a;开发&#xff0c;和code打交道的 Ops&#xff1a;运维&#xff0c;部署底层架构 DevOps是一种思想论&#xff0c;结合了人-流程-技术&#xff0c;为客户提供了可持续增长的业务价值。 DevOps出现前后 没有DevOps之前 作为开发&#xff1a;职责是更多…

修复所有 bug 并不能解决所有问题

原文&#xff1a;jeffpsherman - 2024.04.08 在软件领域&#xff0c;如同在制造业&#xff0c;有些问题是由于 bug 或“特殊原因”引发的&#xff0c;而有些则是“常见原因”&#xff0c;这是由于系统设计和实现的性质所导致的。修复 bug 就是移除特殊原因&#xff0c;消除 bu…