区块链仿真工具SimBlock

试试看能不能把这个东西跑起来= =研究ing

先介绍一下:
SimBlock是一个开源的区块链网络模拟器,由东京理工大学分布式系统组开发
https://dsg-titech.github.io/simblock/

  • 使用指南(英文)
  • 用户指南(日语)
    SimBlock有一个可视化工具,通过它可以看到区块传播的路线。
    ——(SimBlock可视化工具)(https://github.com/dsg-titech/simblock-visualizer)
  • 许可证
    SimBlock使用Apache License,Version2.0。
  • 联系
    电子邮件:dsg-titech at googlegroups.com


一、SimBlock使用指南翻译

1.环境的要求

SimBlock可用于Windows、MacOS、Ubuntu Linux或任何支持Java的Unix平台等操作系统。
它需要JDK和Gradle的以下版本。
请注意SimBlock的存储库repository包含了Gradle包装器,因此您也可以自动安装Gradle(我们稍后会提到它)。
软件版本
jdk版本为1.8.0及以上
gradle 5.1.1或更高版本

2.下载

从GitHub以zip文件的形式下载SimBlock存储库并解压缩,或者克隆存储库。
Release list: https://github.com/dsg-titech/simblock/releases
Command for clone: $ git clone git@github.com:dsg-titech/simblock.git

3.构建

此后,解压缩或克隆存储库的根目录的名称被表示为<ROOT_DIR>。
首先,打开一个终端软件(例如,xterm,命令提示符等),移动到<ROOT_DIR>。
3a、如果安装了Gradle
如果已经安装了Gradle,可以使用下面的Gradle命令进行构建。
$ gradle build
如果成功,构建目录将在<ROOT_DIR>/simulator下创建。
在这里插入图片描述
请注意,simulator/build/scripts中的启动脚本是为了包含在分发存档中而生成的;如果按照当前的目录结构运行脚本,就会出现错误。

3b、如果没有安装Gradle
你可以用<ROOT_DIR>的gradlew(对于Windows来说是gradlew.bat),代替运行Gradle命令。这是一个名为Gradle wrapper的程序,如果没有安装Gradle,它将自动安装Gradle并调用它。

3c、丢弃构建产品
下面的Gradle命令将删除上述构建过程生成的文件。$ gradle clean
你也可以同时执行clean和build,如下所示:$ gradle clean build
在这种情况下,build是在clean之后执行的。

4.运行SimBlock

有两种主要的方式来运行SimBlock:通过使用Gradle命令和使用构建产品。
4a、运行Gradle命令
在<ROOT_DIR>中运行Gradle命令,然后仿真器启动。
$ gradle :simulator:run
仿真器的输出文件将存储在<ROOT_DIR>/simulator/src/dist/ Output中。

4b、与构建产品一起运行
解压<ROOT_DIR>/simulator/build/distribution的分发归档文件(zip, tar)。然后,将创建以下目录结构。
在这里插入图片描述
要执行的脚本在bin目录下。
通过在终端中执行runSimBlock(对于Windows来说是runSimBlock.bat),仿真器就会启动。输出文件将存储在 output 目录中。

4c、其他的方式
解压缩的分发归档文件包含SimBlock (lib/simulator.jar)的jar文件。当然,也可以用java命令直接执行这个jar文件。注意,需要适当地设置类路径。
您还可以在IDE(如Eclipse)上运行SimBlock。后面的“导入到IDE”一节将对此进行解释。

5.仿真参数

参数定义的位置描述
region列表BlockChainSimulator.settings.NetworkConfiguration#REGION_LIST节点可能存在的区域
Latency列表BlockChainSimulator.settings.NetworkConfiguration#LATENCY分配给每个区域的延迟列表。(单位:毫秒)
upload bandwidth列表BlockChainSimulator.settings.NetworkConfiguration#UPLOAD_BANDWIDTH分配给每个区域的上传带宽列表。(单位:位/秒)
download bandwidth列表BlockChainSimulator.settings.NetworkConfiguration#DOWNLOAD_BANDWIDTH分配给每个区域的下载带宽列表。(单位:位/秒)
区域的分布BlockChainSimulator.settings.NetworkConfiguration#REGION_DISTRIBUTION节点区域的分布。每个值表示该区域内节点数量与所有节点数量的比率。
degree的分布BlockChainSimulator.settings.SimulationConfiguration#DEGREE_DISTRIBUTIONoutbound links的累计分布情况
节点的数量BlockChainSimulator.settings.SimulationConfiguration#NUM_OF_NODES参与区块链网络的节点数。
路由表BlockChainSimulator.settings.SimulationConfiguration#TABLE路由表的种类
区块间隔BlockChainSimulator.settings.SimulationConfiguration#INTERVAL块生成间隔的期望值。挖矿难度由该值和算力的总和自动调整。(单位:毫秒)
平均挖矿算力BlockChainSimulator.settings.SimulationConfiguration#AVERAGE_MINING_POWER每个节点的平均挖掘算力。挖矿算力对应于比特币的哈希率,是每毫秒执行挖矿(哈希计算)的次数。
挖矿算力的标准差BlockChainSimulator.settings.SimulationConfiguration#STDEV_OF_MINING_POWER每个节点的挖掘功率按照正态分布随机确定,其平均值为AVERAGE_MINING_POWER,标准差为STDEV_OF_MINING_POWER。
最大区块高度BlockChainSimulator.settings.SimulationConfiguration#END_BLOCK_HEIGHT仿真结束时的区块高度。
区块大小BlockChainSimulator.settings.SimulationConfiguration#BLOCK_SIZE区块大小。(单位:字节)
CBR使用率BlockChainSimulator.settings.SimulationConfiguration#CBR_USAGE_RATE紧凑块中继(compact block relay, CBR)协议的使用率。
节点流失率BlockChainSimulator.settings.SimulationConfiguration#CHURN_NODE_RATE造成流失的节点的比率。
压缩块大小BlockChainSimulator.settings.SimulationConfiguration#COMPACT_BLOCK_SIZE压缩块大小(单位:字节)
控制节点CBR失败率BlockChainSimulator.settings.SimulationConfiguration#CBR_FAILURE_RATE_FOR_CONTROL_NODE总是连接网络的节点的CBR失败率。
流失节点CBR失败率BlockChainSimulator.settings.SimulationConfiguration#CBR_FAILURE_RATE_FOR_CHURN_NODE导致流失的节点的CBR失败率
控制节点的CBR故障区块大小分布BlockChainSimulator.settings.SimulationConfiguration#CBR_FAILURE_BLOCK_SIZE_DISTRIBUTION_FOR_CONTROL_NODE控制节点在发生CBR故障时接收到的数据大小的分布
流失节点的CBR故障区块大小分布BlockChainSimulator.settings.SimulationConfiguration#CBR_FAILURE_BLOCK_SIZE_DISTRIBUTION_FOR_CHURN_NODE当发生故障时,一个流失节点接收到的数据大小的分布

SimBlock.settings包有两个类,它们有这些参数:NetworkConfiguration.java和SimulationConfiguration.java。前者有网络参数相关的参数,后者有区块链参数。通过更改这些参数并进行构建,您可以执行不同的仿真模式。

6.输出

仿真器将仿真结果输出到标准输出和一些文件中。文件的输出位置是<ROOT_DIR>/simulator/src/dist/out以便Gradle命令执行。SimBlock/output与构建产品一起运行。
输出内容如下:

  • 标准输出和out.txt
    以下内容列在区块ID下:<节点ID,传播时间>,传播时间:从区块ID的区块被生成到节点ID的节点到达的时间。
  • Blocklist.txt
    <分叉信息,区块高度,区块ID>
    分叉信息:“OnChain”和“Orphan”之一。“OnChain”表示块在主链上。“孤儿”表示块是孤儿块。
  • 图/
    n u m b e r . t x t : 区 块 高 度 为 {number}.txt:区块高度为 number.txt{number}时的网络信息,<节点ID,节点ID>:从左节点ID到右节点ID的连接。
  • output.json
    该文件列出了存在的事件。通过将该文件上传到SimBlock Visualizer中,您可以看到可视化效果。SimBlock可视化工具
    <事件,内容>
    事件
    Add -link:添加节点到邻居节点。
    Remove -link:将节点从邻居节点中移除。
    flow-block:区块的传输。
    simulation-end:仿真结束。
    内容
    timestamp:事件的顺序。
    block-id:区块id。
    transmission-timestamp:区块被传输的时间戳。
    receive - timestamp:区块被接收的时间戳。
    begin-node-id:源节点。
    end-node-id:结束节点。

7.导入到IDE

通过使用Gradle,您可以生成IDE的配置文件,并很容易地将它们导入其中。
7a、对于IntelliJ IDEA
通过执行以下Gradle命令,生成IntelliJ IDEA的配置文件。
$ gradle idea
生成的文件如下所示:
在这里插入图片描述
使用IntelliJ IDEA,选择File -> Open并选择<ROOT_DIR>.ipr. <ROOT_DIR>/simulator将作为一个模块导入。
然后,您可以使用IDE运行仿真器。例如,在项目结构的工具窗口中选择<ROOT_DIR>/simulator/src/main/java/SimBlock/simulator/ main .java,右键单击并执行Run ‘Main.main ()’。输出文件将存储在<ROOT_DIR>/simulator/src/dist/ Output中。如果提供了,不要作为Gradle项目导入。

  • 清除产品
    下面的Gradle命令将删除$ Gradle idea生成的文件。注意<ROOT_DIR>.iws文件不会被删除。此外,如果项目在IDE中保持打开状态,则删除的文件可能会由IDE自动重新生成。
    $ gradle cleanIdea
    您也可以指导cleanIdea和idea同时执行,如下:$ gradle cleanIdea idea 在这种情况下,idea是在cleanIdea之后执行的。

7b、对于Eclipse
通过执行以下Gradle命令,将生成Eclipse的配置文件。
$ gradle eclipse
生成的文件如下所示:
在这里插入图片描述
使用Eclipse,选择File -> Open Projects from File System,选择<ROOT_DIR>作为导入源。检查列出的两个Eclipse项目,并单击Finish。<ROOT_DIR>/simulator 和 <ROOT_DIR>将分别作为一个项目导入。
然后,您可以使用IDE运行仿真器。例如,在Package Explorer中选择仿真器项目,右键单击并执行Run As -> Java Application来启动仿真器。输出文件将存储在<ROOT_DIR>/simulator/src/dist/ Output中。

  • 清除产品
    下面的Gradle命令将删除$ Gradle eclipse生成的文件。
    $ gradle cleanEclipse
    你也可以命令cleanEclipse和eclipse同时执行,如下:
    $ gradle cleanEclipse eclipse
    在本例中,eclipse在cleanEclipse之后执行。

到这里我只是个没得感情的翻译机器。。。
下面试试在Eclipse跑一下。。。

二、Eclipse运行

之前没用过Gradle,百度了一个教程
安装Gradle,使用Gradle编译项目并且将编译好的项目导入到eclipse中

下载上述链接里的包,解压缩,配环境变量
在这里插入图片描述
在这里插入图片描述
gradle -v测试一下
在这里插入图片描述
成功!
进入仿真器的根目录,输入gradle eclipse命令:
在这里插入图片描述
看一下文件夹:
在这里插入图片描述
simulator下面:
在这里插入图片描述
很好,该有的都有了
使用Eclipse导入File -> Open Projects from File System
在这里插入图片描述
启动仿真器Run As -> Java Application
控制台输出了一些东西。。。

三、输出文件

<ROOT_DIR>/simulator/src/dist/ Output
在这里插入图片描述
output.json 上传到上面说的可视化工具上,如下:
在这里插入图片描述

总结

第一次用仿真工具,感觉,,,
它可实在是太好用了!!!
接下来应该可以研究一下src里的源码,然后想一些idea改一些实现,用输出结果作对比评估。。。
想的挺美好,希望能做到吧,干巴爹!

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值