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

  基于已有的链进行测试(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.sh

 

 

 

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

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

相关文章

Gateway断言工厂

这个用的时候可以在官网上查

文心一言 VS 讯飞星火 VS chatgpt (242)-- 算法导论17.4 1题

一、假定我们希望实现一个动态的开地址散列表。为什么我们需要当装载因子达到一个严格小于 1 的值 a 时就认为表满?简要描述如何为动态开地址散列表设计一个插入算法,使得每个插入操作的摊还代价的期望值为 O(1) 。为什么每个插入操作的实际代价的期望值…

CentOS7下安装mysql8或者mysql5.7

mysql8 1、下载 访问mysql官网下载mysql8软件包 https://dev.mysql.com/downloads/mysql/ 选择相应的版本如:RPM Bundle mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar RPM Bundle 8.0.33 下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.…

论文笔记:Large Language Models Are Zero-Shot Time Series Forecasters

2023 neurips 完全是零样本(zero-shot)的,不需要微调 1 方法 1.1 Tokenization(分词和编码) 现有的LLM(比如GPT3)的tokenizer不能直接用来编码时间序列的句子 比如对数字42235630&#xff0…

linux下 Mysql8.0 离线安装

环境:centos7.9 MysqlL8.0.36安装包 链接:https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码:3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…

去哪儿网开源的一个对应用透明,无侵入的Java应用诊断工具

今天 V 哥给大家带来一款开源工具Bistoury,Bistoury 是去哪儿网开源的一个对应用透明,无侵入的java应用诊断工具,用于提升开发人员的诊断效率和能力。 Bistoury 的目标是一站式java应用诊断解决方案,让开发人员无需登录机器或修改…

【银角大王——Django课程——创建项目+部门表的基本操作】

Django框架员工管理系统——创建项目部门表管理 员工管理系统创建项目命令行的形式创建Django项目——创建app注册app——在sttings中的INSTALLED_APPS [ ]数组中注册 设计表结构(django)连接数据库——在settings里面改写DATABASESDjango命令执行生成数…

海外媒体广告投放 - 大舍传媒助力企业迈向新台阶,实现精准投放

一、为何选择海外媒体广告投放 随着全球化进程的不断推进,越来越多的企业开始将目光投向国际市场。海外媒体广告投放作为一种有效的宣传手段,可以帮助企业在全球范围内提高品牌知名度和影响力,吸引潜在客户,促进产品销售。 二、…

LeetCode 课程表二(拓扑排序+Python)

使用桶排序算法中的kahn(卡恩)算法,也可以使用dfs。 这里使用卡恩算法,主要维护一个列表cnt,cnt【i】表示能到达节点i的边,比如说:a到c有一条边,b到c有一条边,那么cnt【…

Pycharm破解流程

1.下载pycharm 网上很多,随便找一个,懒得找的话,或者去我传上去的资源pycharm部分直接取 2.下载文件 文件部分,我放在pycharm文件里面一起 打开下载好的激活包 3.执行脚本 先执行unisntall-all-users.vbs,直接双击打开&#xff0c…

在 Linux 上把 Vim 配置为默认编辑器

目录 ⛳️推荐 在 Linux 命令行中编辑 将 Vim 设置为其他程序的默认值 在 Alpine 中编辑电子邮件 总结 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 我使用 Linux 大概有…

若依集成mybatisplus报错找不到xml

引用:https://blog.csdn.net/qq_65080131/article/details/136677276 MybatisPlusAutoConfiguration中可以知道,系统会自动配置SqlSessionFactory,,但是,当你有自定义的SqlSessionFactory,,就会…