Lightning Network模拟器入坑记


一、简单介绍

  • 为什么要做Lightning Network模拟器的实现: 研究需要通过模拟闪电网络来进行一些实验,从而更深层次的了解闪电网络的运行机制,执行一些恶意的攻击,来证明闪电网络的不完备性,并且希望可以将已有的攻击扩展到以太坊上。

  • 博客目的: 总结记录在实现闪电网络模拟器的过程中所遇到的困难和解决办法,边学习边总结边提高。

二、前期准备

  • 阅读前面网站上的具体说明,然后跟着说明进行一些前期的准备工作。

步骤一:

闪电模拟器设置iOS_数据

  • 根据上面的要求可以看到这个模拟器是需要unix或者MacOs环境的,由于本人当前使用的就是Mac所以就不用去配置unix环境了,直接用Mac就好。
  • 上面还要求MacOs系统需要按装 wget ,如何安装呢本人在这个地方就卡了很长时间,下面直接说解决办法:直接install wget比较麻烦,也较容易失败,所以可以先安装brew再通过brew install wget命令来安装wget,这里问题又来了,brew又如何安装呢(本人在这里花了更多时间,找了很多办法),具体安装方法见我另一篇博客,打开博客里的链接将代码复制到自己Mac终端上回车即可。安装好brew之后再在终端上输入brew install wget命令来安装wget。
  • 在终端输入brew后回车,出现如下内容即证明brew安装成功

步骤二:

闪电模拟器设置iOS_json_02

  • 在终端上输入代码git clone https://github.com/ferencberes/LNTrafficSimulator.git表示将GitHub上的这个整个工程克隆保存到本地
  • 终端上输入cd LNTrafficSimulator进入LNTrafficSimulator这个工程文件夹
  • 终端上输入pip install .表示使用pip安装模拟器

步骤三:下载必要数据

闪电模拟器设置iOS_闪电模拟器设置iOS_03

  • 终端输入sh ./scripts/download_data.sh 下载一些必要的数据
  • 终端输入ls ln_data 查看刚刚下载的数据:
  • 下面是对下载的数据的说明:

步骤四:检查配置是否成功

  • 执行以下代码以查看配置是否成功
import pandas as pd
from lnsimulator.ln_utils import preprocess_json_file
import lnsimulator.simulator.transaction_simulator as ts

data_dir = "/Users/yzyzzzz/LNTrafficSimulator/ln_data" #这里放入之前下载的ln_data的路径
amount = 60000
count = 7000
epsilon = 0.8
drop_disabled = True
drop_low_cap = True
with_depletion = True
find_alternative_paths = False

print("# 1. Load LN graph data")
directed_edges = preprocess_json_file("%s/sample.json" % data_dir)

print("\n# 2. Load meta data")
node_meta = pd.read_csv("%s/1ml_meta_data.csv" % data_dir)
providers = list(node_meta["pub_key"])

print("\n# 3. Simulation")
simulator = ts.TransactionSimulator(directed_edges, providers, amount, count, drop_disabled=drop_disabled, drop_low_cap=drop_low_cap, eps=epsilon, with_depletion=with_depletion)
transactions = simulator.transactions
_, _, all_router_fees, _ =simulator.simulate(weight="total_fee",with_node_removals=find_alternative_paths, max_threads=1)

print(all_router_fees.head())
print("Done")
  • 问题来了,如何执行在哪里执行?具体步骤如下:
    1. 在刚刚的终端里输入vim test.py (通过vim创建名为test的python文件)
  • 闪电模拟器设置iOS_json_04

  • 2. 在vim文件中粘贴刚刚需要测试的代码
  • 闪电模拟器设置iOS_json_05

  • 3. 退出vim并保存文件(具体vim怎么用大家可以百度一下)
    4. 在终端输入python test1.py运行代码,查看结果:
    遇到的问题一: 要将自己下载的ln_data文件的位置路径放到代码的相应位置,否则会出现下面的错误提醒:
  • 闪电模拟器设置iOS_数据_06

  • 遇到的问题二: 网页上的原代码没有导入panda包从而运行出现如下错误:
  • 闪电模拟器设置iOS_闪电模拟器设置iOS_07

  • 解决办法: 顶部添加代码import pandas as pd遇到的问题三:
    运行代码后出现错误提醒TypeError: __init__() got an unexpected keyword argument 'eps' 我的解决方法是在代码中删掉eps(不知道做的对不对但是最终确实是成功了)
  • 最终代码运行结果: 最终打印了Done说明配置成功!
  • 闪电模拟器设置iOS_闪电模拟器设置iOS_08