[转]深度剖析闪电网络

2023-05-16

转自:https://new.qq.com/omn/20201108/20201108A04RZW00.html

闪电网络(Lighting Network)是比特币的二层扩容方案,由 Joseph Poon 和 Thaddeus Dryja 在2015年提出,并在2016年撰写了其白皮书。

起源:

闪电网络的起源可以追溯到比特币白皮书里的微支付通道。微支付通道是一种单向的闪电网络,因此支持者们认为闪电网络起源于中本聪(Satoshi Nakamoto)的设计。

随着比特币的发展,比特币网络的两大弊病逐渐突显:确认速度慢矿工费用高

而闪电网络的设计目的就是为了解决上述两个问题。在闪电网络白皮书发布两年后,2018年,闪电网络实验室(Lightning Labs)成立,正式开始将闪电网络推向落地。闪电网路实验室主要由 Blockstream 公司主导,并获得了众多知名机构和投资人的投资,其中包括推特的创始人,Jack Dorsey.

原理:

比特币的白皮书阐述了微支付通道的实现,可以让双方之间开启一个单向的支付通道。其主要的流程如下:

创建2-2多签账户,并生成存款交易A;

使用 locktime 参数,生成 Refund 交易B;

将交易A广播至网络(注意顺序,先要拿到 Refund 交易,才能广播A,为什么?可以思考下);

下面就是不断地更新 Refund 交易C、D、E...,新的 Refund 交易的 locktime 为0,因此比 Refund 交易B拥有更高的优先权;

将 Refund 交易 N 广播至网络,通道关闭,兑现比特币。

原生的比特币网络不能实现双向的微支付通道,其主要的原因是交易延展性。交易延展性是指在父交易被签名之前,可以先签名子交易(花费尚未完成签名的父交易的交易)的能力。因为交易在完成签名前其交易哈希(txHash)尚未确定,而子交易签名时需要用到父交易的交易哈希,因此这是一个矛盾的需求,在原生的比特币网络下无法实现。

隔离见证(SegWit)的激活解决了这一问题。

在隔离见证环境下,交易哈希的计算将不包括签名部分。因此在父交易完成签名之前,它的交易哈希已经可以确定,进而实现了先签名子交易、后签名父交易的需求。

隔离见证的激活给闪电网络带来了可能。具体来说,闪电网络是在隔离见证环境下,利用了 RSMC (revocable sequence maturity contract) (利用 sequence 参数)来实现双向的微支付通道。

多个微支付通道之间可以互相打通,形成网络。例如 AB 之间开通了闪电网络通道,BC 之间也开通了闪电网络通道,当 A 要给 C 转账时,可以利用 B ,形成了 A -> B -> C 之间的通道。从全局来看这就形成了点对点之间的快速转账的通道网络,因此称为闪电网络。

现状:

闪电网络主网 beta 版于2018年3月15日上线。上线两年多以来,取得了一定的发展,但是总体数据并不理想。

截止2020年11月7日数据,比特币闪电网络一共运行着14,381个节点(其中7,411个节点开通了活跃的通道)。一共开通了35,043个通道,并锁定了1,030枚BTC。

比特币闪电网络锁定 BTC 数量

BTC 在闪电网络中的总质押(锁定)量相当于当前总流通量的0.0056%。跟闪电网路获得的关注和期望相比,这一数据显得尴尬。可以看出闪电网络当前在实际使用中并没有取得成功。

缺陷:

闪电网络在实际使用场景中的遇冷,跟其本身的缺陷密不可分。闪电网络的缺陷可分为设计缺陷安全漏洞两大类。

使用闪电网络的前提是开通道质押。因此它不符合偶发的需求。例如路过一家咖啡店,想用比特币买一杯咖啡。在你当前和该咖啡店之间没有通道的情况下(也没有其他路由),闪电网络就非常不适用。因为如果使用闪电网络,你即将面临打开通道关闭通道两次操作,而每次通道操作其性质是向比特币主网络发送交易,这些都是需要花费手续费的。而不使用闪电网络的情况下,你只需要花费一次手续费。

另外一点的设计缺陷,是我们之前谈到的 A -> B -> C 的路由。在这些路由中,最小的一笔通道质押将成为整个路由的瓶颈。例如 AB 之间通道的质押有 10BTC,而 BC 通道之间的质押只有 1BTC。那么通过路由 A 向 C 之间最多只能转移 1BTC,而不是 10BTC。

这两点设计缺陷,已经让闪电网络在使用场景上大大受限。另外,闪电网络在实际的运行中,频曝安全漏洞

在此之前,研究人员Jona Harris和Aviv Zohar发表了一篇名为《洪水与掠夺:闪电网络的系统性攻击》的论文。该论文阐述了通过同时关闭大量闪电网络通道,进而造成比特币网络拥堵,以至无法关闭通道,来实现的一种攻击方式。

此外,在2020年6月2日,Antoine Riard和Gleb Naumenko发表了另一篇有关闪电网络漏洞的论文,称为“时间扩散攻击”。Naumenko和Riard披露了有关时间扩散攻击的一个令人恐惧的事实,报告称“目前有可能通过使节点仅遮盖2小时就可以窃取所有的通道资金”。

在此问题发生后不久,Antoine Riard又讨论了另一种易受攻击的漏洞,称为“PIN攻击”(Pin 是通过发送 icmp 包进行网络测速的一个工具)。Riard指出,“当前部署的闪电网络服务器在[某些PIN攻击]场景中并不安全。”

除此以外,我们应该看到二层解决方案增加了系统的复杂性,从而导致了更多的安全风险。例如,我们无法从协议层面让闪电网络可以有效地抵御 DDOS 攻击。

结语:

最近比特币网络又持续拥堵,使得比特币对扩容的需求变得更加迫切。然而本被寄予厚望的闪电网络并未能在此时发挥作用。

早在 BCH 分叉之前,比特币社区对隔离见证和闪电网络就存在大量质疑。期间分成了大区块扩容方案闪电网络扩容方案两派。如今从数据看来,在扩容方面,除隔离见证给比特币网络带来了60%左右的扩容外,由 Blockstream 主导的闪电网络方案几乎未起到任何作用。

基于以上种种缺陷,闪电网络并不适用于偶发性需求的交易。而偶发性需求一直都是主要需求,想要全面扩容比特币,我们唯有期待更加创新的方案。

—— 本文首发于微信公众号《谈谈区块链》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[转]深度剖析闪电网络 的相关文章

  • 请求头(request headers)和响应头(response headers)解析

    请求头 xff08 request headers xff09 POST user signin HTTP 1 1 请求方式 文件名 http版本号 Host passport cnblogs com 请求地址 Connection kee
  • Tableau基础操作——连接数据源

    Tableau基础操作 连接数据源 Tableau基础操作 连接数据源 前言 随着大数据时代的到来 xff0c 借助于数据分析工具深入分析并可视化呈现变得越来越重要 而Tableau以其低功能强大且学习成本低被越来越多的企业所使用 一 Ta
  • linux下休眠/待机命令

    if you cat sys power state mem disk you can echo mem gt sys power state 这相当于待机 echo disk gt sys power state 这相当于休眠 from
  • 从零开始离线安装k8s集群

    本文主要用于在内网 xff08 离线 xff09 环境安装k8s集群 xff1b linux环境 centos7 6 主要步骤有 xff1a 安装docker创建dokcer 私有镜像库 registry安装kubernetes安装flan
  • 虚拟机中的Linux系统无法识别U盘

    问题描述 xff1a 将U盘插入到电脑USB接口 xff0c 然后在虚拟机的右下角选择让U盘从Windows上断开 xff0c 链接到虚拟机上来 链接上虚拟机后 xff0c 在Linux系统中输入命令fdisk l命令 xff0c 却只有
  • C语言丨关键字enum用法详解,看这篇就够了

    一 关键字enum的定义 enum是C语言中的一个关键字 xff0c enum叫枚举数据类型 xff0c 枚举数据类型描述的是一组整型值的集合 xff08 这句话其实不太妥当 xff09 xff0c 枚举型是预处理指令 define的替代
  • CCF CSP 201512-3 画图

    字符串基础题 问题描述 用 ASCII 字符来画图是一件有趣的事情 xff0c 并形成了一门被称为 ASCII Art 的艺术 例如 xff0c 下图是用 ASCII 字符画出来的 CSPRO 字样 lt 本题要求编程实现一个用 ASCII
  • fails sanity check错误的解决方法

    fails sanity check的解决方法 问题原因 xff1a 编译器缺乏必要的package xff1a 解决办法 xff1a 运行yum install glibc headers gcc c 43 43 即可解决
  • Rust tokio::select学习杂记

    Rust tokio select学习杂记 前言 Linux系统有select poll epoll等 xff0c 主要用于监控各种fd上发生的各种event 从而识别派发处理 golang语言中也有一个select xff0c 作用相似
  • IntelliJ IDEA2020【插件推荐】

    1 推荐动画效果插件 xff1a activate power mode 注 xff1a 需要消耗一定的系统资源 第一步 xff1a 在插件中心在线安装activate power mode插件 xff0c 安装好之后 xff0c 重启ID
  • k8s: 使node不参与调度

    可以通过命令 xff1a kubectl patch node k8s span class token operator span master span class token operator span p 39 span class
  • Linux7查看默认jdk安装目录(默认只有jre环境,无jdk开发环境。附:安装jdk并配置JAVA_HOME)

    1 检测默认jre运行环境 xff08 1 xff09 查看linux7默认运行环境jre span class token comment cd etc alternatives span span class token comment
  • no module的几种解决办法

    1 将其文件夹右击找到设置为marked as sourse root 2 采用sys append 3 在from xxx前面加入yyy xxx 4 python同目录下模块的导入失败问题 日常敲代码间歇旅行的程序媛的博客 CSDN博客
  • 如何获取C币

    C币获取 完善信息获得C币 现在去完善 行为获得数量说明完善个人资料 5完善个人资料 xff08 姓名 职业背景等 xff09 获得5个C币 手机验证获得C币 现在去绑定 行为获得数量说明绑定手机 5首次绑定手机可获得5个C币 撰写博文获得
  • shell:输出数组中大于5的数

    输出数组中大于5的数 xff0c 需要注意if a ge b 中的空格 bin bash array 61 1 2 3 5 64 7 8 9 21 length 61 array 64 for a 61 0 a lt length a 43
  • shell 特殊符号大全

    注释符号 Hashmark Comments 1 在shell文件的行首 xff0c 作为shebang标记 xff0c bin bash 2 其他地方作为注释使用 xff0c 在一行中 xff0c 后面的内容并不会被执行 xff0c 除非
  • shell:查看一个文件是否存在文件夹中

    bin bash check a file is exist or no echo 34 please enter fileName 34 read fileName if test e 34 fileName 34 then echo 3
  • 在WSL中启动Ubuntu 20.04时出现错误[出现错误 2147942402 (0x80070002) (启动“ubuntu2004.exe”时)]

    1 之前好好的WSL xff0c 今天在我装了git xff0c go xff0c 并配置了环境变量后 xff0c 通过终端运行时突然报错 xff0c 错误为 xff1a 出现错误 2147942402 0x80070002 启动 ubun
  • MySQL(七)—— 分组查询

    MySQL数据库系列内容的学习目录 rightarrow 老杜带你学MySQL学习系列内容汇总 7 分组查询7 1 group by7 2 having7 3 select 语句总结 7 分组查询 分组查询主要涉及到两个子句 xff0c 分

随机推荐