试试看能不能把这个东西跑起来= =研究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_DISTRIBUTION | outbound 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改一些实现,用输出结果作对比评估。。。
想的挺美好,希望能做到吧,干巴爹!