没有合适的资源?快使用搜索试试~ 我知道了~
软件X 15(2021)100717原始软件出版物CLoTH:一个闪电网络模拟器Marco Conoscenti,Antonio Vetravis,Juan Carlos De MartinNexa Center for Internet Society(DAUIN),Politecnico di Torino,Corso Duca Degli Abruzzi,24,都灵,意大利ar t i cl e i nf o文章历史记录:2021年1月23日收到收到修订版,2021年5月14日接受,2021年关键词:闪电网络比特币区块链支付渠道网络可扩展性模拟器a b st ra ct支付渠道网络是解决区块链可扩展性问题的最有前途的解决方案之一。在这项工作中,我们提出了CLoTH,闪电网络的模拟器-主流支付渠道网络,用于比特币。CLoTH模拟支付渠道网络中的支付执行据我们所知,CLoTH是唯一一个忠实再现闪电网络代码功能的模拟器,这确保了模拟结果的可靠性。在这项工作中,我们提供了新的,重构的,可公开使用的CLoTH版本的详细描述,我们展示了多路径支付功能的模拟,这是最近的闪电网络功能,旨在最大限度地减少支付失败。版权所有©2021作者。由爱思唯尔公司出版这是CC BY-NC-ND下的开放获取文章许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。代码元数据当前代码版本v1.1-beta用于此代码版本的代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX-D-21-00019Code ocean computecapsulehttps://codeocean.com/capsule/1325800/tree法律代码许可证GNU通用公共许可证v3.0使用git的代码版本控制系统软件代码使用的语言、工具和服务C、python、bash编译要求、操作环境依赖性Linux操作系统如果有开发人员文档/手册的链接,请访问https://github.com/marcono/cloth/blob/master/README.md问题支持电子邮件marco. polito.it1. 介绍基于区块链的加密货币无法扩展[1支付通道网络(PCN)是解决区块链可扩展性问题的最有前途和研究的解决方案之一[4PCN实现了链下支付,即,不需要在区块链上注册的支付,不受其吞吐量限制。支付渠道是一种双向渠道,允许双方交换链下支付。PCN是一个网络,其中链下支付被路由,因此没有通过通道直接连接的各方可以交换链下支付。原则上,PCN的设计是以一种不信任的方式工作的:即使其他方不值得信任和行为不端,一方也不会失去资金。*通讯作者。电子邮件地址:marco. polito.it(Marco Conoscenti)。闪电网络(LN)[4]建立在比特币区块链之上,是最常用,开发和研究的PCN [12在撰写本文时,大约有15000个节点和36000个通道,LN中分配了超过1000个比特币(相当于330亿美元)。然而,LN提出了值得深入研究的问题首先,支付渠道的特点是经济能力有限,因此限制了可以在LN上交换的支付金额第二,支付渠道受到不平衡的影响第三,离线或恶意节点可能会造成相关损害,例如长期锁定支付和增加支付时间。我们开发了闪电网络和PCN的模拟器CLoTH1 [17],以研究此类网络的能力和局限性。1 名称https://doi.org/10.1016/j.softx.2021.1007172352-7110/©2021作者。由爱思唯尔公司出版。这是一篇开放获取的文章,使用CC BY-NC-ND许可证(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxMarco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)1007172RRRRRRRRRRR网络. CLoTH的独创性在于它忠实地再现了LN码的功能,这保证了仿真结果的可靠性。CLoTH可以用于多种目的,例如在实现它们之前测试PCN的新功能,模拟攻击场景,研究PCN的可扩展性。作为输入,CLoTH接受PCN和支付列表。它运行一个离散事件模拟,模拟输入网络上输入支付的执行。它产生统计性能指标,如支付成功的概率和平均支付时间。我们已经发表了对以前的α版本的CLoTH的描述[18]。同时,我们更新了CLoTH,以反映LN方案的相关修改。此外,委员会认为,我们从根本上重构了模拟器,以便任何旨在系统分析PCN的人都可以轻松使用。因此,CLoTH现在是beta版,它是公开的(而在以前的作品中,我们只提供可重复性),在这项工作中,我们提供了这个新版本的模拟器的详尽的解释。此外,我们还展示了多路径支付(MPP)的模拟,该功能包括将大型支付拆分为多个小型支付。仿真结果表明,该特征降低了由于缺少通道路径而导致支付失败的概率这些模拟也作为一个展示来说明和解释模拟器的功能本文件的结构如下。在第2节中,我们提出了相关的工作,重点是其他LN模拟器。在第三部分中,我们提供了LN功能的背景我们在第4节中详细说明了CLoTH。在第5节中,我们展示并讨论了MPP的仿真结果,还提供了一个关于CLoTH使用的说明性示例。最后,我们总结我们的工作,并在第6节中讨论模拟器的影响。2. 相关工作百万频道项目[19]是LN的模拟器,由LN开发者之一Rusty Russel设计。该模拟器的主要目的是研究LN.该模拟器能够创建大型网络,这是当前LN拓扑结构的精确演变在[20]中,作者提出并通过仿真评估了PCN的路由协议。Flare路由协议[10]的作者使用100,000个节点进行模拟,以研究他们提出的协议的性能。在[21]中,Piatkivskyi等人开发了一个LN模拟器来评估将大额支付分成小额支付的方法。他们的模拟器是一个多智能体离散事件模拟器,用于通用PCN模拟。在[22]中,Ruozhou Yu等人实现了一个模拟器来评估一种名为CoinExpress的支付路由机制他们的模拟器是基于网络模拟器ns-3的PCN模拟器。Stasi等人[23]开发了一个模拟器来评估LN协议的最后,Reynolds [24]开发了用于LN基本模拟的ocalm代码CLoTH的关键特征是它准确地再现了LN的代码(具体来说,实现路由的功能和支付交换机制-称为HTLC)。这确保了由CLoTH产生的模拟结果的有效性,并且它使CLoTH独特且不同于我们在文献中发现的其他PCN模拟器。3. 背景:闪电网络LN是主流的PCN,建立在比特币区块链之上,以实现无限的链下支付。LN协议规定了如何打开和管理支付渠道,以及如何在支付渠道网络中路由链下支付。在下文中,详细描述这样的规范。3.1. 支付通道让我们考虑一个例子,其中Alice和Bob打开支付通道,Alice在通道中分配0.5 BTC,Bob在通道中分配0.5 BTC。要在LN中打开支付通道,需要在比特币区块链中进行交易,称为资金交易。因此,Alice和Bob创建资金交易,其中他们中的每个人插入0.5 BTC -即,他们想在渠道中分配的资金。一旦交易在区块链中注册,通道就被认为是开放的。Alice在通道中的初始总通道容量是余额的总和-在示例中为1 BTC。一旦通道打通,双方就可以进行链下支付互通。为此,他们会更新其余额的状态。例如,如果Alice想将0.1 BTC转移给Bob,Alice将其余额减少0.1 BTC,Bob将其余额增加0.1 BTC。因此,在付款结束时,爱丽丝的余额 是0.4 BTC,Bob如果双方想要关闭通道,他们必须在比特币区块链中进行另一笔交易,称为承诺交易。该交易根据通道中余额的最后状态将通道的比特币返回给其各自的所有者。在上面的例子中,承诺交易向Alice返回0.4 BTC,向Bob返回0.6 BTC。3.2. 支付渠道LN允许没有通过支付渠道直接连接的各方交换链下支付。在这种情况下,支付通过连接支付发送方和支付接收方的多个通道进行路由。在LN中,跨多个渠道的支付交换这是通过一个名为HTLC(哈希时间锁合同)的特定合同完成的。HTLC确保不信任:即使在路径中的其他方行为不端的情况下,也保证支付路径中所涉及的一方不会损失金钱。HTLC在支付通道中实现链下有条件支付。例如,当Alice在与Bob的通道中建立值为0.1 BTC的HTLC时,这意味着如果Bob显示某个值(称为原像),Alice将向Bob支付 0.1 BTC否则,如果鲍勃不出现在一定的超时时间内,不进行支付它被称为哈希时间锁合约,因为它包含哈希和时间锁。第一个是原像的散列,用于验证一方知道并因此可以履行合同(即,支付可以发生)。时间锁是比特币对超时的实现:如果超时到期,合约失败,付款不会发生。通过HTLC,可以跨多个渠道交换付款。让我们考虑一个例子,其中Alice想要向David支付0.1 BTC,但她没有与David的直接渠道。然而,Alice与Bob有一个频道,Bob与Carol有一个频道,Carol与David有一个频道。Alice可以使用所有这些渠道向David发送0.1 BTC为此,在支付经过的每个通道中建立HTLC所有的HTLC都需要实现相同的原像。首先,大卫生成并给爱丽丝一个哈希值。之后,在所有涉及的通道中建立包含的哈希的HTLC。当HTLC已经在所有通道中建立最后,0.1 BTC从Alice转移到David,并且相应地更新了渠道中的余额。最后,重要的是要提到LN中的节点对转发支付收取一些费用。在上面的例子中,Alice在支付金额上增加了一些费用,支付给Bob和Carol。Marco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)10071734. CLoTH:软件描述CLoTH是一个用C语言编写的PCN模拟器。作为输入,它需要一个PCN和一个付款列表。然后,它通过运行LN代码函数的离散事件映射来模拟输入网络中输入支付的执行。作为输出,它产生与支付相关的绩效指标(如支付成功的概率和平均支付时间)。模拟器的执行流程由三个阶段组成:网络和支付生成,模拟和生产性能指标。在第4.1、4.2、4.3节中,我们详细描述了模拟器的三个阶段,而在第4.4节中,我们说明了新版本的CLoTH相对于前一版本的变化。4.1. 第一阶段:网络和支付生成4.1.1. 数据结构图图1示出了表示CLoTH中的支付和PCN的数据结构的主要属性。信道连接两个节点(每个节点由一个ID表示),并具有一定的经济容量。此外,由于通道是双向的,即支付可以从节点1到节点2以及从节点2到节点1,因此它包含两条边,每条边表示通道的方向。边包含:边所属通道的ID;边表示的方向上的可用余额;以及它应用的策略到通过边缘流动的支付。这些政策是:基本费用和比例费用,其构成在边缘的方向上转发支付所需的费用(比例费用取决于支付金额,而基本费用是恒定的);在边缘的方向上建立的HTLC的时间锁;以及在边缘的方向上转发的支付所允许的最小值。通过发送者、接收者、支付金额和支付开始时间来描述支付4.1.2. 输入模式模拟器提供两种可能的输入模式用于填充数据结构:1. 随机生成。在这种输入模式中,节点、边、通道和支付是基于一些输入参数随机生成的,例如每个节点的通道数量、平均通道容量、平均支付金额。2. 从文件读取。CSV文件被提供给模拟器,其中指定了每个节点、通道、边缘和支付的确切属性。第二种输入模式允许模拟真实PCN上的支付:例如,可以提供LN的当前节点,通道和边缘并模拟该网络上的支付。可以混合两种输入模式,例如,从文件中读取节点、通道和边,并且随机生成支付。在第一输入模式的情况下,为了随机生成PCN的拓扑,使用无标度网络模型。这个网络模型的度分布遵循幂律,这在网络理论中是常见的[25]。这允许从真实网络拓扑开始生成真实网络。具体地,在CLoTH中,从LN的现有拓扑开始生成随机网络新节点被添加到这个现有网络中,并且连接节点的概率越高节点的已经打开的信道的数量越多,新节点将打开与该节点的信道以这种方式,生成的随机网络真实地再现LN。表1示出了第一输入模式的输入参数。表1CLoTH输入参数。名称描述n_new_nodes随机网络的节点数,加上LN拓扑中已经存在的节点数(作为随机网络的模型)。n_channels上一个参数中指定的每个节点的通道数。平均信道容量以satoshi表示, 是a(均匀高斯分布的平均值)。故障概率节 点 发生故障的概率,要求转账付款payment_rate每秒平均支付次数。特别是,付款到达间隔时间为模型为负指数随机分布。n_payments要模拟的付款总数payment_amount平均支付金额,以Satoshis(均匀高斯分布分配)。mpp一个0/1值,表示是否激活多路径支付功能,该功能将大额支付拆分为小额支付,以最大限度地提高成功率1 satoshi相当于10−8比特币。4.1.3. 多线程执行一旦定义了输入网络和支付,在运行模拟之前,模拟器将启动并行线程。每个线程都运行Dijkstra的算法来为每个支付找到初始路径。事实上,Dijkstra4.2. 第二阶段:模拟CLoTH是一个离散事件模拟器。事件从队列中提取当提取事件时,模拟时间(离散的)被提前到事件的发生时间,并且事件由函数处理4.2.1. 事件在CLoTH中,事件总是指支付并指示支付的处理阶段:例如,事件find_- path指示必须找到支付的路径。图2显示了模拟器事件的状态图。它表示模拟阶段的流程,如下所示首先,使用专门适用于PCN(find_path事件)的Dijkstra算法搜索支付路径如果由于通道容量低于支付金额而未找到路径,则支付将分为两个子支付,其金额为原始支付金额的一半(这是多路径支付功能)。如果没有找到这些付款的路径,则付款肯定失败。相反,如果找到路径,付款发送方将付款发送到路径的第一跳(send_payment事件)。路径的每一跳都向前支付到付款接收方(forward_payment事 件 ) 。 如 果 没 有 错 误 , 付 款 将 到 达 接 收 方(receive_payment事件)。然后,每一跳将支付的成功结果传播回路径(forward_success事件),并且在最后,支付发送方接收到成功结果(receive_success事件)。如果发生错误(例如,信道中没有足够的余额来转发Marco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)1007174Fig. 1. CLoTH数据结构。图二. CLoTH事件状态图。支 付 ) 时 , 每 一 跳 将 支 付 的 失 败 结 果 传 播 回 发 送 方( forward_fail 事 件 ) , 发 送 方 在 最 后 接 收 失 败 结 果(receive_fail事件)。失败的付款可以重新尝试,但LN强制60秒的超时:如果在此时间内付款未成功,则肯定失败。24.2.2. 功能每个事件都由与事件同名的函数处理。CLoTH的功能再现了LN码的功能特别地,lnd被作为参考实现,并且当前版本的CLoTH基于lnd-v0.10.0-β 的lnd 是 LN 的 Golang 实 现 , 以 及 其 他 实 现 ( 即 ,c-lightning3和eclair4),它完全符合所谓的基础闪电技术(BOLT),LN规格。5选择lnd的原因是它是LN实现中文档记录最多的,代码的注释具 体 而 言 , CLoTH 模 拟了 lnd 的 两 个 模 块 :routing 和htlcswitch。路由模块负责查找支付路径,在CLoTH中,它由find_path 函 数 模 拟 ( 加 上 CLoTH 文 件 routing. c 中 由find_path内部调用的函数)。htlcswitch模块实现了HTLC消息的交换,以管理支付的发送、转发和接收,并且它由文件htlc. c中的所有剩余函数模拟(find_path除外)。具体来说 , htlcswitch 模 块 管 理 三 个 主 要 消 息 的 交 换 :UpdateAddHTLC、Update-FulfillHTLC、UpdateFailHTLC 。 UpdateAddHTLC 是 用 于 在 信 道 中 建 立HTLC的消息,UpdateFailHTLC和UpdateFulfillHTLC失败并履行先前建立的HTLC2 不要将此超时与第3节中讨论的时间锁混淆。 时间锁是在单个支付渠道中建立的HTLC合同中设置的超时,用于在HTLC未履行的情况下解锁资金。相反,60秒超时指的是支付的整个生命周期:如果由于发生了某些错误,所以将支付发送回发送方,并且如果从第一次尝试支付起已经过去了60秒以上,则发送方肯定支付失败。3 https://github.com/ElementsProject/lightning网站。4 https://github.com/ACINQ/eclair网站。5 https://github.com/lightningnetwork/lightning-rfc/blob/master/00-introduction.md天啊表2示出了仿真函数和lnd函数之间的映射。对于CLoTH的功能,该表示出了仿真的lnd的功能,并且它还指示了所处理的HTLC消息的类型和处理它的节点(因为lnd功能根据消息具有不同的行为,并且节点)。CLoTH和lnd函数之间的映射代表了CLoTH的独创性:据我们所知,CLoTH是精确模拟LN代码的唯一模拟器在附录A中,我们展示了函数的清单,并详细解释了它们。4.3. 第三阶段:制定业绩计量在模拟结束时,CLoTH在文件payments_output.csv中输出有关每次支付的一些信息,即支付开始和结束时间、支付结果(成功与否)、尝试次数、支付经过的路线、支付费用。为了将此每次支付信息转换为统计的每次支付度量,我们使用批量均值方法[26]。这种方法产生的措施,不受影响的初始瞬态的模拟,其中系统是不稳定的。批平均值方法包括去除初始瞬时状态并将模拟运行分为多个批,这些批在统计上彼此独立。在每个批次中,将每个测量值归零并重新计算。每个最终性能指标均为该指标在批次中的统计平均值,并以方差和95%置信区间为特征。为了确保批处理装置的有效性,模拟运行的持续时间必须大于最大支付时间(在LN的情况下,其对应于60秒,即,支付超时)。表3显示了由CLoTH生成的性能指标4.4. 新版本的CloTH我们已经在CloTH上发表了以前的作品[18,27]。然而,与此同时,LN方案进行了重要修改,因此,更新了CLoTH代码以反映方案的新版本。此外,我们进行了广泛的重构,使模拟器公开和容易Marco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)1007175表2CLoTH函数和Ind-v0.10.0-beta函数之间的映射CLoTH功能lnd函数节点消息查找路径sendpayment、 resumePayment、applyPaymentResult、 RequestRoute发送者–发送付款发送LocalDispatch、 DownStreamPkt、SendMessage发送者UpdateAddHTLC远期付款Upstream Msg、 processRemoteAdds、PacketForward、 DownStreamPkt、 SendMessage跳UpdateAddHTLC收到付款上传消息, processExitHop、 SendMessage接收器UpdateAddHTLC正向成功Upstream Msg、 processRemoteSettleFails、PacketForward、 DownStreamPkt、 SendMessage跳更新完成HTLC正向故障Upstream Msg、 processRemoteSettleFails、PacketForward、 DownStreamPkt、 SendMessage跳UpdateFailHTLC接收成功阻止UpstreamMsg、 processRemoteSettleFails、阻止LocalResponse发送者更新完成HTLC接收失败阻止UpstreamMsg、 processRemoteSettleFails、阻止LocalResponse发送者UpdateFailHTLC表3CLoTH性能指标。名称描述支付成功的概率。FailNoPath无路径支付失败的概率。它当Dijkstra找到支付发送方和支付接收方之间的路径。这可能是由于通道容量低于支付金额的事实。FailNoBalance没有余额时付款失败的概率它当节点尝试转发支付时发生到下一个节点,并且在连接两个节点的边FailOfflineNode离线节点支付失败的概率。超时支付失败的概率过期时间平均付款时间(仅适用于成功付款)。完成付款前的平均尝试次数(仅适用于成功付款)。RouteLength支付路由中的平均跳数(仅适用于成功支付)。供任何人使用。因此,目前的工作是为了提供一个详尽的解释,这个新的可用版本的模拟器,这是足够的不同,从以前的一个值得自己的出版物,现在是完全公开的(不同的w.r.t以前的版本,我们只提供再现性)。综合而言,对先前版本的CLoTH的主要变更如下:全代码重构(消除全局变量,使用有意义的变量和函数名等)和小bug修复。实现无标度网络模型以生成真实再现LN的随机网络。一个输入解析器的实现,它从文本文件中读取模拟输入参数。这避免了使用外部库来解析更复杂类型的文件(例如JSON),从而减少了代码的外部依赖性。模块化。模拟器代码的文件组织现在反映了不同的模块:网络和支付生成、模拟和绩效衡量指标的生成。 文件network.c和payments.c分别实现网络和支付生成。离散事件仿真核心引擎是在cloth. c中实现的。模拟的LN的功能在htlc.c和routing. c中。性能度量的生成在名为batch-means.py的Python脚本中实现。这样的模块化保证了任何其他PCN可以通过CLoTH以最小的努力进行模拟:只需将htlc. c和routing. c替换为要模拟的PCN的逻辑。更新模拟的LN代码功能,以符合Ind-v0.10.0-beta(先前版本的CLoTH基于Ind-v0.5.0-beta)。在这方面,主要的变化是:– Dijkstra算法的一个新版本– 管理支付结果的函数和数据结构(用于Dijkstra– 多路径支付(MPP)功能。– 非严格转发特性。当节点A向节点B支付时,该特征允许节点A使用其与节点B的任何通道,而不是严格地使用特定的通道。6在表4中,我们展示了变化的定量描述:我们使用质量管理工具Sonar- Cloud78从两个版本的代码分析中选择了一些度量。该表显示,代码的整体质量得到了显着提高,大大减少了代码气味并删除了重复代码。尽管添加了新的协议特性,但新版本中代码库的维度更加紧凑:这是由于上面描述的重重构此外,圈复杂度和认知复杂度都降低了,使新版本更容易理解。6 此功能目前在CLoTH中被禁用,因为它需要模拟区块链。该功能将在未来的工作中启用,届时CLoTH也将模拟区块链。7 对旧版本的CLoTH的 分 析 可以在这里获得:https://sonarcloud。io/dashboard?id=marcono_sonar-cloth。8 新版本的CLoTH分析可在这里:https://sonarcloud. io/dashboard?id=marcono_cloth。·····Marco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)1007176表4先前版本和当前版本的CLoTH之间的定量变化另一个没有MPP),我们运行了5个模拟,每个模拟针对以下平均支付金额(以satoshis表示):5. MPP模拟布阿尔法布v1.1-beta十,十二,十三,十四,十五。我们并没有考虑到其他输入参数,因为我们只对研究MPP功能感兴趣,并且直接影响此功能:的是支付金额:实际上,支付金额越高,MPP功能被激活的概率越高,并且支付被拆分为较小的分片。平均支付金额的区间界限的依据如下。LN中的默认最小HTLC策略是1 satoshi,这意味着大多数节点将拒绝低于1 satoshi的付款,因此我们决定将间隔的最小值设置为10 satoshi。我们决定将最大值设置为105聪,因为在初步模拟中,我们注意到,当支付金额平均为106聪时,在本节中,我们将讨论旨在显示LN中实现的多路径支付功能的效果的模拟。当由于渠道容量低于支付金额而无法找到支付路径时,MPP功能将支付分为两个子支付:每个子支付的金额是原始支付金额的一半,从而增加了找到能够将子支付转发给接收方的渠道的机会。有关此功能的更多详细信息,请参见附录A.1。5.1. 仿真设计我们使用当前版本的模拟器运行了两个模拟活动:在一个中,MPP功能被激活,另一个则没有。代码的其余部分(例如 , Dijkstra 的 l n d - v 0 . 1 0 . 0 - b e t a 算 法 ) 完 全 相同 。为了填充这些模拟的网络和支付,我们使用了模拟器的两种不同的输入模式:网络是从CSV文件中读取的,而支付是使用模拟器输入参数随机生成的。对于网络,作为模拟器的输入,我们提供了真实的LN:我们在2020年12月17日9通过在第1个节点上启动命令describe-graph拍摄了LN的节点和通道的快照因此,模拟的节点和信道(连同它们的属性:信道容量、基本和比例费用、最小HTLC策略和时间锁策略)恰好是该日期的LN的节点和信道的信道的初始平衡(即,信道的每个节点所拥有的信道容量的分数)在我们的模拟中随机生成。10原因是余额不可公开:为了保证隐私,余额在LN中保持私密。此外,错误节点的概率被设置为零,因为我们对研究错误节点的行为不感兴趣。对于所涉及的模拟支付,它们是使用以下参数随机生成的:平均支付率、支付总数和平均支付金额。平均支付速率被设置为每秒100次支付,因为LN应该支持高支付吞吐量以让区块链扩展。支付总数设置为50,000,以生成长期模拟,如批次均值分析所需。平均支付金额是模拟的唯一变化参数:在两个活动中的每一个中(一个具有MPP9 此时,在LN中有6006个活动节点和30457个活动信道,平均信道容量约为340万satoshis,其标准差约为960万satoshis。10 对于每个通道,使用均匀分布在0和1,并且它对应于信道的节点拥有的作为余额的信道容量的分数。支付(约94%)失败,鉴于LN渠道目前的容量有限(如上所述,平均渠道容量在LN中是3.4百万个satoshi,具有高标准差)。5.2. 模拟运行通过运行脚本run-simulation.sh。它将模拟的种子(用于随机变量)和存储输出文件的目录作为输入。模拟器从名为cloth_input.txt的文件中读取输入参数。在附录B中,输入文件的列表显示了运行模拟时该文件应包含的格式和条目。在使用随机生成的网络和支付进行模拟的情况下,在网络和支付生成阶段之后,模拟器将这些随机生成的数据存储在文件更改中。nels.csv、edges.csv、nodes.csv和payments.csv。 如果这些文件必须作为输入提供给模拟器,而不是从文件中读取文件nodes_template.csv、channels_-template.csvedges_template.csv,payments_template. GitHub存储库中的csv显示了文件必须包含的属性,以正确运行模拟。在模拟阶段之后,CLoTH生成文件nodes_-output.csvchannels_output.csv、edges_output.csv、payments_output.csv,其中包含模拟结束时节点、通道、边缘和支付的状态。特别是,payments_output.csv被batch-means 脚 本 用 来 计 算 最 终 的 性 能 指 标 , 存 储 在 cloth_-output.json中。在附录C中,我们展示了整个模拟的日志。5.3. 仿真结果图3显示了成功概率、无路径失败概率和无收支平衡失败概率的统计平均值(参见第4.3节对业绩指标的解释)。 我们不显示置信区间,因为在任何模拟中,它们的结果几乎与平均值相同。x轴是对数平均付款金额。这两条曲线表示有MPP和没有MPP的情况。我们稍微错开了点,使它们在非常相似的值的情况下可以区分。超时过期和离线节点的失败概率没有显示,因为它们在每次模拟中的结果为零关于无路径的故障(图)。(3)特别是对于最高的支付金额,使用MPP的情况明显低于不使用MPP的情况:当平均支付金额为105satoshis时,MPP功能使无路径的故障减半(约30%对60%)。由此可见MPP的有效性在减少无路径的故障方面:将大的支付分成两个较小的支付,并且名义信道容量能够转发分开的支付。维护性代码味道919247代码冗余重复行760重复块40大小行代码27962229报表19701491功能9990复杂性圈复杂度389351认知复杂性494386Marco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)1007177图三. MPP仿真结果。尽管如此,付款成功的概率只有轻微增加与MPP,如图。3A显示最大的差异发生在平均支付金额设置为104时,其中使用MPP的成功概率比不使用MPP的成功概率高出约8%。造成这种结果的原因是,虽然渠道有足够的容量,但没有足够的余额来转发分割支付。事实上,图3c表明,没有余额的失败概率在MPP中更高:由于MPP,找到路径的支付我们可以得出结论,MPP在减少无路径故障方面是有效的(这是此功能的目的然而,在目前的一个可能的解决方案是将MPP与重新平衡方法相结合,以提高支付的成功率,特别是10 4和10 5数量级的支付 聪。例如,MPP可以与我们在[27]中提出的被动再平衡方法相结合,我们证明了对渠道不平衡的有效性。6. 影响和结论在这项工作中,我们描述了CLoTH,一个闪电网络和支付通道网络的模拟器CLoTH是LN码功能的忠实再现,因此它产生可靠的性能测量。关于模拟器的影响,它可以用于几个目的,研究人员和商业环境。在可能的用途中,我们提到以下几种:测试新功能。PCN的新功能(如重新平衡方法,路径查找算法)可以在模拟器中实现,以研究其有效性,然后直接在PCN软件中实现它们(我们在[27]中研究了重新平衡方法)。分析攻击情景。这使得了解PCN攻击的实际风险和设计对策成为可能。例如,有可能研究一种攻击,其中非理性恶意节点在HTLC中设置的时间锁)。可以模拟的另一种可能的攻击是针对LN的最中心节点的拒绝服务,以了解即使中心节点不可用,网络是否仍然工作估计费用收入。通过模拟器,可以回答在商业环境中有用的问题,例如:在特定的网络位置和特定的一组开放信道中,节点可以赚取多少费用。可扩展性分析。该模拟器能够模拟大型PCN(正如我们在[18]中所做的那样),从而允许研究人员研究这种网络可以扩展的配置(例如每个节点的信道数量,平均信道容量)研究具体的使用案例。可以模拟PCN的特定用例,例如我们在[27]中研究的服务提供商场景,其中许多支付被发送到特定的服务提供商节点。最后,在未来的工作中,我们计划对上述攻击场景进行一些模拟,我们也将继续我们还计划将CLoTH与其他模拟器集成:首先,区块链模拟器[3,28],研究区块链和PCN之间的相互作用;其次,使用网络模拟器(如ns-3)来捕获通信网络对PCN性能的影响竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作确认Marco Conoscenti希望感谢Federico Spini博士,他是第一个有想法模拟LN的人之一(在2017年漫长炎热的夏天他监督作者设计和开发了第一个版本的CLoTH。附录A. 功能在本节中,我们解释了CLoTH的主要功能·····Marco Conoscenti、Antonio Vetravel和Juan Carlos De Martin软件X 15(2021)1007178−−−−−- -−- − −−−−−−−−- − −A.1. 网络路径清单1显示了find_path的简化版本,该函数模拟付款发送者搜索付款路径的过程。首先,该函数检查自支付开始以来是否已经超过60s:如果是,则终止支付(因为LN对尝试支付施加了60 s的超时)。然后,该函数调用Dijkstra算法的第一个版本来搜索路径。这种修改后的版本利用了特定的距离度量,由两部分组成。第一部分考虑通道施加的时间锁和费用(有关时间锁和费用的详细信息,请参见第4.1.1节)。Dijkstra算法的第二个版本倾向于找到一条既能最小化费用又能最小化时间锁的路径。距离度量的第二部分是基于先前支付结果的概率。每次LN节点发送支付时,它记录支付的结果。特别地,对于支付所经过的每个通道, 该节点存储支付的金额以及它是在该信道中成功转发还是失败。有了这些关于先前支付的信息,节点可以计算一定金额的新支付将被通道成功转发的概率。Dijkstra算法的第一个如果找到了付款的路径,它将沿着该路径发送(参见函数send_payment)。 可能发生的情况是,由于通道没有足够的经济能力来转发支付,因此没有找到支付的路径。如果发生这种情况,如果多路径支付功能被激活,并且如果支付尚未拆分,则支付将被拆分为两个分片,每个分片的金额为原始支付金额的一半。如果没有找到分片的路径,则支付肯定失败。否则,分片将沿着找到的路径发送重要的是要注意,付款->金额,在这个和其他功能,还包含必须支付的费用到转发节点。清单1:Find-Path函数。虚空 public void run(){i f(payment >duration > 60000){ end_payment(payment);返回;}path = d i jk s t r a(payment);我F(路径 !=NULL){ generate_event(send_payment,payment);return;}i f(!mpp_active||payment>s p l i t){ end_payment(payment);返回;}支付>s p l i t= 1;shard1 = new_payment ( payment>amount /2); shard2 = new_payment(payment>amount/ 2); path1 = di jk s t r a(shard1);path2 = d i jk s t r a(shard2);i f ( path1 == NULL ) ||path2 == NULL ){ end_payment(payment);返回;}generate_event(send_payment,shard1);generate_event(send_payment,shard2);A.2. 发送支付清单2显示了send_payment的简化版本,该函数模拟付款发送方发送付款该函数首先检查路径的下一个节点是否离线:这模拟了节点离线并且无法转发支付的情况。然后,该函数检查边缘中是否有足够的余额来转发支付。 如果检查通过,边缘余额减少,支付被转发到下一个节点,否则由发送方处 理 失 败 (参见函数receive_fail)。清单2:发送支付函数。虚空 send_pa
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功