两点之间直线最短。这是人人皆知的道理。但这句话并不完全正确,至少在非欧几何里,它是错的。看过闪电的人都知道,闪电是不走直线的,而是在从空间中的一个点到达另一个点的过程中,一遇到电阻就避开,自动找到最高效的那条路径,一点一点窜过去。
闪电网络支付也遇到了同样的挑战,不过它不像大自然那样自带优化程序。我们需要投入大量精力在闪电网络的思考、开发和调整上,才能使之变得稳健和高效。
路由技术目前的发展情况
首先要注意的是,路由技术已经在闪电网络上投入使用了,而且运行地相当不错,无论是在安卓机还是在 iPhone 上。
基础知识:节点、通道、洋葱
闪电网络的基础构成要素是节点以及连接这些节点的支付通道(即,边)。节点可以是任意用户、卖家或闪电网络服务提供者(LSP)。节点之间由支付通道互相连接。网络中的每个节点都会与至少一个其他节点相互连接。然而,像是轻客户端之类的节点不太可能跟另一个节点,比如整个约翰内斯堡最棒的蜂蜜商 Tschego 和 Lonny,开通支付通道。开通支付通道属于链上交易,如果要给每个新的交易对手都开一个支付通道的话,建设二层网络的意义何在。因此,如果是两个未连接的节点之间要付款,最好是通过现有的支付通道找到一条路径。
路由是如何运作的
目前,闪电网络使用的是源路由和洋葱路由。通过源路由,源节点负责计算从源到目的地的整条路径。为此,源节点需要下载完整的公开支付通道表,以便计算出一条路径,并根据这条路径涉及的所有通道的负载量来计算手续费成本和所需跳数。在点对点交易中,这个过程会涉及到大量数据,而且数据量还会随着网络的扩大而增加。
闪电网路还实行洋葱路由,极大地提高了隐私性。洋葱路由的运作方式是这样的:假设我要向 Adam 支付一笔钱,但是我们之间没有支付通道。但是我跟 Nick 之间有支付通道,Nick 跟 Jameson 之间有支付通道,Jameson 跟 Andreas 之间有支付通道,而 Andreas 跟 ̶V̶i̶t̶a̶l̶i̶k̶ (开玩笑的啦!)Adam 之间有支付通道。因此,
1. 我将这笔付款锁在一个盒子内,再将这个盒子锁在一个更大的盒子里并附上接收者的地址;
2. 我将第二个盒子锁在一个更大的盒子内,并附上接收路径中更近一个节点的地址。
3. 如此反复直到我和 Adam 之间形成了一条由盒子、密钥和地址(即,交易)组成的链。
我把最大的盒子发送给 Nick ,Nick 打开这个盒子会发现第二个盒子和 Jameson 的地址。他将第二个盒子发送给 Jameson ,Jameson 会用他自己的密钥打开这个盒子,会发现第三个盒子和 Andreas 的地址。Andreas 用钥匙打开第三个盒子,会发现最后一个盒子和 Adam 的地址。他将这个盒子发送给 Adam ,Adam 用最后一把钥匙打开盒子就能收到支付数据了。
每个节点只知道前后两个节点的地址,但是没法重新还原整条链或是确定收款人的身份。这就是洋葱路由:中间方只在掌握须知信息的基础上进行传输。
洋葱网络可以进一步提高用户隐私性。使用了洋葱路由之后,就能够在较大程度上隐藏中间节点的身份,不过付款人仍然可以掌握收款人的 IP 地址以及大概的地理位置。Tor 可以完全隐藏用户的 IP 地址,确保这个网络中的其他人——甚至是直接通道伙伴——都不知道这些中间节点的身份或地址。
通过 PBMC 大幅提高效率
交易都是有时限的,达成速度不够快的话就会失效,因此提高交易传播速度加快也会提高闪电网络的效率。最开始的时候,如果因为某个节点或支付通道而导致路由中断,算法只会忽略这个情况,并在几秒钟之后丢弃该信息。如果没有一种方式来存储并使用该信息,发生在同一时间点或之后的付款在计算路由路径之时可能会将失效节点考虑进去,从而浪费时间和数据成本。
基于概率的任务控制(PBMC)通过了解之前的成功支付案例来解决这一问题。每个节点一开始都有一个默认的成功率,并根据实际的转账完成率有所增减。网络路由的支付交易越多,任务控制组件就越了解这个网络的特性,将来就能更好地规划付款路径。
路由技术的未来
随着闪电网络不断走向成熟,以及开发人员对现行实现的了解加深,他们不再将基本功能、效率和隐私性看作三个不相关的问题。每一次新的开发都会综合考虑这三个方面,找到三者之间的最佳平衡点。
蹦床支付
如上文所述,一旦网络扩容,路由表也会随之扩大。这时,对于带宽和存储空间有限的移动节点来说,源路由并不实用。有人提出了一种名为蹦床支付的方式,就是将路由外包给“蹦床节点”,减少移动节点在数据量和计算量上的负担。
蹦床节点就是掌握全网路由表的闪电网络节点,负责在付款人与收款人之间找到一条路径。节点客户端无需下载并持续更新路由图,只需连接到一个可靠的蹦床节点上即可。付款会从一个蹦床节点跳到另一个,直到达到收款人处为止。
然而,将路由外包给蹦床节点也会带来隐私性风险:蹦床节点需要知道收付款双方才能为找到付款路径。不过在蹦床支付技术上线之前,已经有人提出了一个靠谱的解决方案,能够解决隐私性问题。
这个解决方案就是使用两层洋葱路由:一层包裹的是付款人和收款人,另一层包裹的是一条随机选择的蹦床节点链。和洋葱路由的情况大致一样,付款路径上的每个节点只能获取各自必需的路由信息。因为链是随机选择的,所以中间节点很难识别敏感信息。最大的缺点是,节点之间的跳数越多,交易费也就越高,不过话说回来,这么低的交易费涨个 10 倍又如何。
蚂蚁路由
侦查蚁随机发现食物之后,会在返回蚁穴的途中分泌信息素留下踪迹。这条踪迹上走过的蚂蚁越多,其吸引力就越强。不过等到食物被搬空后,这条踪迹上的信息素就消失了。蚁群通过将随机有序的行为结合起来,找到了信息传递和通信的最佳路径。是不是很神奇!
蚂蚁这种聪明的行为给 Cyril Grunspan 和 Ricardo Pérez-Marco 带来了灵感。他们致力于消除闪电网络中的等级划分,让所有节点执行所有功能。他们提出的 “蚂蚁路由” 的运作方式如下:
1. 两个节点生成一个很大的随机数,并各自生成一个“信息素种子”(即部分哈希),它们都需要对方的信息素种子来重构这个随机数。
2. 它们将各自的信息素种子广播给相邻节点。
3. 节点在收到信息素种子之时,会验证这个种子是否存在于网络的内存池中,以及相邻节点是否已经收到这个种子。
4. 如果节点发现收到的是一个 新 种子,会将这个种子存储在内存池中,并把它交给相邻节点。
5. 当两个部分种子在网络中的某处相匹配之时,会顺着相邻的节点原路返回,直到将付款人和收款人连接起来为止,这样就可以进行付款了。
在各节点规定的时间段过去之后,所有关于已验证种子的本地数据就会被抹去(就跟信息素消失一样!),然后在短时间内将所有交易数据都删除。如果在有效时间内没有找到路径,交易就会失败。
由于各节点只需要知道传输种子的直接相邻节点,作者称该算法确保了付款人和收款人的匿名性。而且,他们还表示这个解决方案免去了本地存储网络路由表的需求,这将极大地减少相关数据量,让网络结构变得扁平化。然而,各节点必须执行一些额外的计算工作。
蚂蚁路由或将成为另一种非常有效的解决方案,既能增强闪电网络的可扩展性,同时又能提高隐私性和效率。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)