兩點之間直線最短。這是人人皆知的道理。但這句話并不完全正確,至少在非歐幾何里,它是錯的。看過閃電的人都知道,閃電是不走直線的,而是在從空間中的一個點到達另一個點的過程中,一遇到電阻就避開,自動找到最高效的那條路徑,一點一點竄過去。
閃電網(wǎng)絡支付也遇到了同樣的挑戰(zhàn),不過它不像大自然那樣自帶優(yōu)化程序。我們需要投入大量精力在閃電網(wǎng)絡的思考、開發(fā)和調(diào)整上,才能使之變得穩(wěn)健和高效。
路由技術目前的發(fā)展情況
首先要注意的是,路由技術已經(jīng)在閃電網(wǎng)絡上投入使用了,而且運行地相當不錯,無論是在安卓機還是在 iPhone 上。
基礎知識:節(jié)點、通道、洋蔥
閃電網(wǎng)絡的基礎構(gòu)成要素是節(jié)點以及連接這些節(jié)點的支付通道(即,邊)。節(jié)點可以是任意用戶、賣家或閃電網(wǎng)絡服務提供者(LSP)。節(jié)點之間由支付通道互相連接。網(wǎng)絡中的每個節(jié)點都會與至少一個其他節(jié)點相互連接。然而,像是輕客戶端之類的節(jié)點不太可能跟另一個節(jié)點,比如整個約翰內(nèi)斯堡最棒的蜂蜜商 Tschego 和 Lonny,開通支付通道。開通支付通道屬于鏈上交易,如果要給每個新的交易對手都開一個支付通道的話,建設二層網(wǎng)絡的意義何在。因此,如果是兩個未連接的節(jié)點之間要付款,最好是通過現(xiàn)有的支付通道找到一條路徑。
路由是如何運作的
目前,閃電網(wǎng)絡使用的是源路由和洋蔥路由。通過源路由,源節(jié)點負責計算從源到目的地的整條路徑。為此,源節(jié)點需要下載完整的公開支付通道表,以便計算出一條路徑,并根據(jù)這條路徑涉及的所有通道的負載量來計算手續(xù)費成本和所需跳數(shù)。在點對點交易中,這個過程會涉及到大量數(shù)據(jù),而且數(shù)據(jù)量還會隨著網(wǎng)絡的擴大而增加。
閃電網(wǎng)路還實行洋蔥路由,極大地提高了隱私性。洋蔥路由的運作方式是這樣的:假設我要向 Adam 支付一筆錢,但是我們之間沒有支付通道。但是我跟 Nick 之間有支付通道,Nick 跟 Jameson 之間有支付通道,Jameson 跟 Andreas 之間有支付通道,而 Andreas 跟 ?V?i?t?a?l?i?k? (開玩笑的啦?。〢dam 之間有支付通道。因此,
1. 我將這筆付款鎖在一個盒子內(nèi),再將這個盒子鎖在一個更大的盒子里并附上接收者的地址;
2. 我將第二個盒子鎖在一個更大的盒子內(nèi),并附上接收路徑中更近一個節(jié)點的地址。
3. 如此反復直到我和 Adam 之間形成了一條由盒子、密鑰和地址(即,交易)組成的鏈。
我把最大的盒子發(fā)送給 Nick ,Nick 打開這個盒子會發(fā)現(xiàn)第二個盒子和 Jameson 的地址。他將第二個盒子發(fā)送給 Jameson ,Jameson 會用他自己的密鑰打開這個盒子,會發(fā)現(xiàn)第三個盒子和 Andreas 的地址。Andreas 用鑰匙打開第三個盒子,會發(fā)現(xiàn)最后一個盒子和 Adam 的地址。他將這個盒子發(fā)送給 Adam ,Adam 用最后一把鑰匙打開盒子就能收到支付數(shù)據(jù)了。
每個節(jié)點只知道前后兩個節(jié)點的地址,但是沒法重新還原整條鏈或是確定收款人的身份。這就是洋蔥路由:中間方只在掌握須知信息的基礎上進行傳輸。
洋蔥網(wǎng)絡可以進一步提高用戶隱私性。使用了洋蔥路由之后,就能夠在較大程度上隱藏中間節(jié)點的身份,不過付款人仍然可以掌握收款人的 IP 地址以及大概的地理位置。Tor 可以完全隱藏用戶的 IP 地址,確保這個網(wǎng)絡中的其他人——甚至是直接通道伙伴——都不知道這些中間節(jié)點的身份或地址。
通過 PBMC 大幅提高效率
交易都是有時限的,達成速度不夠快的話就會失效,因此提高交易傳播速度加快也會提高閃電網(wǎng)絡的效率。最開始的時候,如果因為某個節(jié)點或支付通道而導致路由中斷,算法只會忽略這個情況,并在幾秒鐘之后丟棄該信息。如果沒有一種方式來存儲并使用該信息,發(fā)生在同一時間點或之后的付款在計算路由路徑之時可能會將失效節(jié)點考慮進去,從而浪費時間和數(shù)據(jù)成本。
基于概率的任務控制(PBMC)通過了解之前的成功支付案例來解決這一問題。每個節(jié)點一開始都有一個默認的成功率,并根據(jù)實際的轉(zhuǎn)賬完成率有所增減。網(wǎng)絡路由的支付交易越多,任務控制組件就越了解這個網(wǎng)絡的特性,將來就能更好地規(guī)劃付款路徑。
路由技術的未來
隨著閃電網(wǎng)絡不斷走向成熟,以及開發(fā)人員對現(xiàn)行實現(xiàn)的了解加深,他們不再將基本功能、效率和隱私性看作三個不相關的問題。每一次新的開發(fā)都會綜合考慮這三個方面,找到三者之間的最佳平衡點。
蹦床支付
如上文所述,一旦網(wǎng)絡擴容,路由表也會隨之擴大。這時,對于帶寬和存儲空間有限的移動節(jié)點來說,源路由并不實用。有人提出了一種名為蹦床支付的方式,就是將路由外包給“蹦床節(jié)點”,減少移動節(jié)點在數(shù)據(jù)量和計算量上的負擔。
蹦床節(jié)點就是掌握全網(wǎng)路由表的閃電網(wǎng)絡節(jié)點,負責在付款人與收款人之間找到一條路徑。節(jié)點客戶端無需下載并持續(xù)更新路由圖,只需連接到一個可靠的蹦床節(jié)點上即可。付款會從一個蹦床節(jié)點跳到另一個,直到達到收款人處為止。
然而,將路由外包給蹦床節(jié)點也會帶來隱私性風險:蹦床節(jié)點需要知道收付款雙方才能為找到付款路徑。不過在蹦床支付技術上線之前,已經(jīng)有人提出了一個靠譜的解決方案,能夠解決隱私性問題。
這個解決方案就是使用兩層洋蔥路由:一層包裹的是付款人和收款人,另一層包裹的是一條隨機選擇的蹦床節(jié)點鏈。和洋蔥路由的情況大致一樣,付款路徑上的每個節(jié)點只能獲取各自必需的路由信息。因為鏈是隨機選擇的,所以中間節(jié)點很難識別敏感信息。最大的缺點是,節(jié)點之間的跳數(shù)越多,交易費也就越高,不過話說回來,這么低的交易費漲個 10 倍又如何。
螞蟻路由
偵查蟻隨機發(fā)現(xiàn)食物之后,會在返回蟻穴的途中分泌信息素留下蹤跡。這條蹤跡上走過的螞蟻越多,其吸引力就越強。不過等到食物被搬空后,這條蹤跡上的信息素就消失了。蟻群通過將隨機有序的行為結(jié)合起來,找到了信息傳遞和通信的最佳路徑。是不是很神奇!
螞蟻這種聰明的行為給 Cyril Grunspan 和 Ricardo Pérez-Marco 帶來了靈感。他們致力于消除閃電網(wǎng)絡中的等級劃分,讓所有節(jié)點執(zhí)行所有功能。他們提出的 “螞蟻路由” 的運作方式如下:
1. 兩個節(jié)點生成一個很大的隨機數(shù),并各自生成一個“信息素種子”(即部分哈希),它們都需要對方的信息素種子來重構(gòu)這個隨機數(shù)。
2. 它們將各自的信息素種子廣播給相鄰節(jié)點。
3. 節(jié)點在收到信息素種子之時,會驗證這個種子是否存在于網(wǎng)絡的內(nèi)存池中,以及相鄰節(jié)點是否已經(jīng)收到這個種子。
4. 如果節(jié)點發(fā)現(xiàn)收到的是一個 新 種子,會將這個種子存儲在內(nèi)存池中,并把它交給相鄰節(jié)點。
5. 當兩個部分種子在網(wǎng)絡中的某處相匹配之時,會順著相鄰的節(jié)點原路返回,直到將付款人和收款人連接起來為止,這樣就可以進行付款了。
在各節(jié)點規(guī)定的時間段過去之后,所有關于已驗證種子的本地數(shù)據(jù)就會被抹去(就跟信息素消失一樣?。?,然后在短時間內(nèi)將所有交易數(shù)據(jù)都刪除。如果在有效時間內(nèi)沒有找到路徑,交易就會失敗。
由于各節(jié)點只需要知道傳輸種子的直接相鄰節(jié)點,作者稱該算法確保了付款人和收款人的匿名性。而且,他們還表示這個解決方案免去了本地存儲網(wǎng)絡路由表的需求,這將極大地減少相關數(shù)據(jù)量,讓網(wǎng)絡結(jié)構(gòu)變得扁平化。然而,各節(jié)點必須執(zhí)行一些額外的計算工作。
螞蟻路由或?qū)⒊蔀榱硪环N非常有效的解決方案,既能增強閃電網(wǎng)絡的可擴展性,同時又能提高隱私性和效率。
評論
查看更多