闪电网络原理通俗解释
第章 引言
今天有人宣布BTC上的闪电网络可以使用了,甚至今天价格也突然涨了1000美元(有没有因果关系不知道),可闪电网络到底是啥,真的可以用了吗?
闪电网络的原理实在是太过于复杂,白皮书打印出来,28张A4纸,我一字一句啃完,今天试图使用最通俗的话语讲明白。
第1章 双向支付通道
使用闪电网络的第一步就是要打开一个双向支付通道,比如A和B之间要打开一个双向支付通道,这到底说的是啥?
如果A和B之间要打开一个支付通道,具体过程是这样的,A和B分别往一个2-2签名的多重签名地址转入一定余额的比特币,比如(A:0.1BTC; B:0.5BTC),0.1BTC归A;0.5BTC归B。这个2-2签名的地址及这个余额分配状态就是一个双向支付通道。
如果在通道里A要向B支付0.05BTC,那A和B就可以对这个2-2签名的地址进行签署调整余额状态为(A:0.05BTC;B:0.505BTC)。
这个余额分配过程的原理,特别是防止作弊的方法要讲起来就很复杂了。但我们就先不管这些了,就相信专家们搞出的那一整套复杂的论文和程序好了。
如果支付通道只能在两人之间更新余额,那肯定没啥用,对吧。但支付通道伟大的地方在于可以将各个支付通道连接在一起。比如A和B之间有通道,B和C之间有通道,那A可以通过B向C发送比特币。
那下面就通俗地讲解下支付通道的联网。
第2章 闪电网络
如果A和B打开了一个双向支付通道,里面有1BTC属于A,2BTC属于B,即(A:1BTC;B:2BTC);
A和C打开了一个双向支付通道,里面有2BTC属于A,3BTC属于C,即(A:2BTC;C:3BTC)。那B就可以通过A来向C转账。具体的过程是这样的:
B签署一个1BTC转账密文给C。但C肯定收不到,因为C和B没有打开2-2签名的通道;
C拿着B给他的转账密文跑去跟A要1BTC,拟定要签署一个2-2签名的交易。
A拿着这个密文和B做一个2-2签名交易,将A和B之间的余额状态分配调整为(A:2BTC;B:1BTC)。
A拿到和B完成的签名信息后再和C完成第2步的2-2签名交易,将A和C之间的余额状态分配调整为(A:1BTC;C:3BTC)。
交易完成。
过程就是这样,但原理太复杂了。
如果有一个人同时和世界上所有的人建立了双向支付通道,那就意味着世界人所有的人都可以利用这个人做为中介发送比特币,而且这几乎是瞬间完成的,不需要向比特币主链那样需要广播交易让矿工来确认。
第3章 关闭双向支付通道
如果你将币发到了一个2-2签名的地址里,以打开一个支付通道,那试问,你的币是存在哪里?
答案肯定是存在那个2-2签名的地址里呗。但这里面的币你要拿回来,变回你自己一个人签名就可以花的币,怎么办呢?
这就是要关闭双向支付通道。
关闭双向支付通道其实是很复杂的过程,你想想,在双向支付通道里来来回回余额不停调整,甚至搞几百几亿次,但这些可是不像在比特币上做交易是经过了矿工打包确认的,如何防止一方作弊是特别关键的。
最简单的关闭双向支付通道,就是双向签署一笔2-2签名的交易,将最后的余额分配状态分别发到各自的地址上,并且在比特币区块链上广播,经过矿工打包确认。这笔交易和我们现在发的交易是一样的。
第二种是双方中的单方终止通道,直接由单方发一笔单签名的交易,将余额发到自己的地址上,对方的币发到对方地址上。但为了防止作弊这种单方终止通道的交易发的币要等1000个确认才能花。
第三种是打开支付通道的时候是有一个交易锁定时间的,这个时间到了之后,支付通道就会关闭,余额就会回到各自的地址上。
第4章 结束语
闪电网络挺复杂的,可能需要等闪电网络钱包真正出来之后,经过长时间的测试和大家小额玩一玩,才能被缓慢推广。指望闪电网络来缓解比特币拥堵,注定是做梦。
这和隔离见证一样,隔离见证已经被激活两个多月了,你见过多少笔隔离见证交易了?因为比特币就是钱,很宝贵的东西,谁也不会把钱存进自己不熟悉的代码里。
比特币还是存在P2PKH地址里放心。
(如果你想学习比特币和区块链知识,欢迎加入我的小密圈)
(谢谢打赏)
- SQL SERVER 内存分配及常见内存问题 简介
- 深入浅出事件流处理NEsper(一)
- 微软官方提供的用于监控MS SQL Server运行状况的工具及SQL语句
- 生成人工智能:创意专家新的强大工具
- JavaScript能做什么?
- SQL中利用DMV进行数据库性能分析
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建
- 独家!万达网科大裁员后将转型AI 朱战备或接班曲德君
- Git分支管理的策略梳理
- 数据场景分析 线上线下商家到底谁能干过谁?
- 张钦坤:云计算、开放平台与服务商版权责任
- biztalk 2010 dev版安装小记
- 微信小程序如何获取组件实际高度
- flex4/flash builder中动态加载Module并与之交互的正确方式
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言公交地铁路线网络图实现数据挖掘实战
- R语言风险价值VaR(Value at Risk)和损失期望值ES(Expected shortfall)的估计
- R语言机器学习实战之多项式回归
- 5000字!带你零距离接触websocket!
- 使用 GitLab CI 和 Docker 自动部署 Spring Boot 应用
- 玩转StyleGAN2模型:教你生成动漫人物
- R语言时间序列数据指数平滑法分析交互式动态可视化
- 再见Excel!最强国产开源在线表格Luckysheet走红GitHub
- R语言广义线性模型索赔频率预测:过度分散、风险暴露数和树状图可视化
- R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用
- sas神经网络:构建人工神经网络模型来识别垃圾邮件
- 图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
- 手写dubbo框架9-SPI实现
- R语言非参数模型厘定保险费率:局部回归、广义相加模型GAM、样条回归
- VsCode插件之Live Serve探秘.(上)