从技术人视角看闪电网络之微支付通道
(要看懂这篇文章,读者需掌握BTC基本原理,包括转账原理和多签地址、地址锁定时间、隔离见证)
(感谢闪电网络很难懂?你需要看看这篇文章 | 硬核科普这个教程提供的图片)
比特币的价值传输相当安全,但是要和其他体系对接也要考虑一些问题,比如要如何保证交易效率(不可能每10分钟交割一次,太慢了),如何指定对单方违约的惩罚规则。
光靠主链还是不够。如果需要在双方之间达成需要多次交割的交易(像Alice是数据提供商,Bob是用户,Bob需要购买Alice的文件版权,又不想一次性付1BTC给Alice,就达成协议:Alice给Bob传输1M文件,Bob就给Alice0.001BTC),就需要在双方之间建立微支付通道。这条通道只有开启和关闭时,才会在主链写入交易,其他时间只要交易双方拿着合理的账本即可。
1.打开通道(指双方开始交易),为了防止单方违约,Alice和Bob各拿5BTC,一起把10BTC锁在Alice和Bob一起锁的保险箱里(多签地址),下图左边俩就是Alice和Bob的钱包地址,右边就是锁着双方共同财产的多签地址;
同时还要保证如果交易中断,这个多签地址的BTC可以取出;但是如果单方面断开通道,对方不同意的情况下要惩罚。
这里就需要把打开这个多签的钥匙给Alice和Bob,但是不同人拿到的钥匙能打开的东西不同:从自己那一侧打开,对方的财产要比自己先拿到。
预先锻造特制钥匙:对方锻造了另一把锁,然后给自己,打开之后,对方立马就拿到币,自己要晚一些拿币。反之亦然。
(为什么不是其他惩罚,比如手续费翻倍,或者锁定地址什么的,一是这些惩罚太重了,又不是要占用财产;二是某些情形下,延时退款可以为违约惩罚争取时间)
因此需要预先生成交易:
1号交易:使用Alice2&Bob秘钥加密:在区块高度达到本块高度+1000时,把这笔交易打包出去,将本地址的4个币打到Alice
2号交易:使用Bob秘钥加密:立刻将本地址的6个币打到Bob
3号交易:使用Alice&Bob2秘钥加密:在区块高度达到本块高度+1000时,把这笔交易打包出去,将本地址的6个币打到Bob
4号交易:使用Alice秘钥加密:立刻将本地址的4个币打到Alice
Bob把1号和2号签名好了给Alice,Alice把3号和4号签名好了给Bob。
把这5条交易(转到多签地址和双方的断开通道合约)生成之后,再把多签地址的交易提交上链,以防止多签地址的币被永久锁定。
双方都想关闭怎么办?用双方的钥匙直接签名,退回协定余额。
1号和3号交易,就是学名为Revocable Sequence Maturity Contract (RSMC) 可撤销序列成熟合约的交易,其实这种交易机理也很简单。一个1/2多签地址,有俩公钥,只要能提供匹配的1个私钥就能打开,但是两条分支是不同的:在1000个块之后解锁,自己能取得币;或者由对方持有私钥解锁。
这种交易己方一般不提供自己的钥匙,而是每次生成时另打一把,理由会在第2步说明。
2.修改双方余额状态
和1操作一样,只不过1-4号交易要打给不同地址的币量不同。
这里就有一个问题,发送方有动力打包前一次签名的2条交易,使前一次余额变化作废。
如何保证Bob不敢打包历史交易?这里需要让Alice能对Bob广播历史交易的行为作出惩罚。
很容易想到,如果Bob在生成转出交易之前,先把上一条交易的钥匙Bob2给Alice,Alice就可以在Bob把历史交易发出去之后,在另一条分支(上图分支的上选项)执行前,用Bob2和自己的钥匙解锁多签地址(上图分支的下选项),把币打到Alice地址,Bob一聪都拿不到。这也是第1步说的要另打钥匙的原因。如果自己的私钥泄露,财产安全没有保障。
在下一条交易签名之前,一定要拿到对方在上一条交易的钥匙,保证对方的作恶行为受到牵制。
如果发送方广播交易拖太久的话,Alice的钥匙就没用了,因为这次历史交易已经上链,币已经到Bob地址了,并且交易是有次序的,互相有依赖关系的交易比先执行上一条,所以过了RSMC锁定期之后,即使Alice在Bob发出历史交易之后立马(同出块周期)发出惩罚交易,也会因为历史交易上的多签地址先执行打币给Bob的分支而无法执行。
当然历史记录不广播的话,Alice拿的Bob2私钥没用,因为对应的多签地址没有币。所以每次生成新交易,也是必须另打一把钥匙,防止我方想广播最新交易时,被对方用旧钥匙开锁。
如果是双方资金来往,双方收发关系频繁转变,Bob也要做好防违约工作。
转载于:https://www.cnblogs.com/dgutfly/p/10778378.html
从技术人视角看闪电网络之微支付通道相关推荐
- 闪电网络RSMC协议技术原理----从微支付通道到RSMC(序列到期可撤销合约)
闪电网络的RSMC协议技术原理 "if all tree falls in the forest and no one is around to hear it,does it make a ...
- 微支付通道与闪电网络
参考链接: 闪电网络学习资源目录 一.微支付通道 微支付通道举例与理解 "如果森林里的一棵树倒了,而周围没有人听到,它会发出声音吗?" 应用场景: 大量的小额交易,因为手续费的 ...
- 闪电网络预备知识二:微支付通道
微支付通道 首先在介绍微支付之前,说说我对于区块链世界的理解.我们可以这样认为:首先区块链世界是去中心化的,也就是说没有一个中心机构.在现实世界中,中心机构可以作为一种权威,比如银行,你转账通过银行, ...
- 雷电网络 微支付通道
1 微支付通道搭建: http://blog.hubwiz.com/2018/08/18/ethereum-payment-channel/ 简易微支付通道搭建 https://ethfans.o ...
- 哪些书是技术人必看的?先推荐12本吧
一直以来,有很多朋友会问我: 要提升某个方向,要看什么书? 你作为架构师,看过哪些书? ... 看书是技术人提升的核心渠道,世界读书日就在本月,这个周末我把自己的书架翻了一遍,准备后续把自己这10年读 ...
- 【推荐】技术人必看的音视频学习资源清单
学习是一个不断精进的过程,没有standard destination. 我们经常听到技术人各种学习困扰: "音视频这种新兴领域发展太快了,感觉囤积的学习资源好容易过时." &qu ...
- 技术人必看:15张图对比高效与瞎忙的区别!
整理自网络,原标题为<高效能人士和碌碌无为者的15个根本性区别> 1 优先要做的事 只有几件 为什么? 如果你优先要做的事情很多,那就意味着你根本就没有优先要做的事. 你在多个任务.多个项 ...
- 技术人必看!揭秘淘宝如何通过相似人群挖掘获取更多目标用户
作者|王浩(青鼠) 出品|阿里巴巴新零售淘系技术部 导读:淘系用户增长算法团队主要定位于业务应用算法,基于对淘系整体用户全方位的理解为各个业务提供高效的用户洞察手段,并通过与运营.产品等团队的配合完成 ...
- [MTCTF]从出题人视角看ez_cms
文章目录 写在前面 Dockerhub phar反序列化可用函数 Wp 写在前面 太惨了,太傻了我,迷迷糊糊写了两天CMS,又累又自闭,还搞错了东西,给各位大师傅们道歉了,下面大师傅们要是瞧得上的话就 ...
最新文章
- echarts ucharts 和_使用chart和echarts制作图表
- 大洋洲群狼来了! 这是中国篮球学习契机?
- JAVA集合迭代遍历和特性介绍
- 登录及注册模块设置与流程图
- PoE交换机不供电了该怎么办?
- CentOS6.7-64bit编译hadoop2.6.4
- 16岁高中生的「卷」,用13000+行代码,从头写了一个C++机器学习库
- 字符串的回文子序列个数_计算给定字符串中回文子序列的数量
- linux下使用c++17编译filesystem
- python的递归算法学习(1)
- expect 赋值shell变量_Shell处理字符串常用技巧终结篇
- block inline 和inline-block 块级元素和内联元素
- 7. 锁定框架(The Locking Framework)
- python 反编译exe文件为py文件
- iphone编辑过的录音怎么还原_ios录音误剪怎么恢复
- 25日—你看蓝蓝的天
- 工行手机银行android,Android系统-工行手机银行常见问题解决方法-U盾篇
- 西安电子科技大学超级计算机,西安电子科技大学超级计算机投入使用
- 筑巢引凤、珠联璧合、潜龙出海,蚂蚁金服开放平台如何将“开放”做好?
- 图像处理与机器视觉网络资源收罗——倾心大放送(转载)
热门文章
- 英伟达再发边缘AI计算设备:仅信用卡大小,性能比TX2强15倍
- 牛顿棺材板快盖不住了:用深度神经网络解决三体问题,提速一亿倍
- word2vec_文本相似度
- Ubuntu使用小技巧
- qs.parse()、qs.stringify()使用方法
- 139.00.005 Git学习-分支管理
- 工具类:关于如何找到两个List数组中不同的数据的算法!
- Middleware课程01-概述
- DPM2012恢复单个Exchange2010用户邮箱
- Verilog学习----条件语句、循环语句、块语句与生成语句