閃電網路路由:正和博弈中的隱私和效率問題

買賣虛擬貨幣

兩點之間直線最短。這是人人皆知的道理。但這句話並不完全正確,至少在非歐幾何裡,它是錯的。看過閃電的人都知道,閃電是不走直線的,而是在從空間中的一個點到達另一個點的過程中,一遇到電阻就避開,自動找到最高效的那條路徑,一點一點竄過去。

-四八四有點美?(來源:wikimedia)-

閃電網路支付也遇到了同樣的挑戰,不過它不像大自然那樣自帶最佳化程式。我們需要投入大量精力在閃電網路的思考、開發和調整上,才能使之變得穩健和高效。本文將解釋支付路由是如何在閃電網路上執行的,有哪些方面依然需要改進,以及路由技術未來的發展方向在哪。

路由技術目前的發展情況

首先要注意的是,路由技術已經在閃電網路上投入使用了,而且執行地相當不錯,無論是在安卓機還是在 iPhone 上。

基礎知識:節點、通道、洋蔥

閃電網路的基礎構成要素是節點以及連線這些節點的支付通道(即,邊)。節點可以是任意使用者、賣家或閃電網路服務提供者(LSP)。節點之間由支付通道互相連線。網路中的每個節點都會與至少一個其他節點相互連線。然而,像是輕客戶端之類的節點不太可能跟另一個節點,比如整個約翰內斯堡最棒的蜂蜜商 Tschego 和 Lonny,開通支付通道。開通支付通道屬於鏈上交易,如果要給每個新的交易對手都開一個支付通道的話,建設二層網路的意義何在。因此,如果是兩個未連線的節點之間要付款,最好是透過現有的支付通道找到一條路徑。

-跟他們沒有聯絡也不要緊,可以透過別人買啊(來源:wikimedia)-

路由是如何運作的

目前,閃電網路使用的是源路由和洋蔥路由。透過源路由,源節點負責計算從源到目的地的整條路徑。為此,源節點需要下載完整的公開支付通道表,以便計算出一條路徑,並根據這條路徑涉及的所有通道的負載量來計算手續費成本和所需跳數。在點對點交易中,這個過程會涉及到大量資料,而且資料量還會隨著網路的擴大而增加。

閃電網路還實行洋蔥路由,極大地提高了隱私性。洋蔥路由的運作方式是這樣的:假設我要向 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 用最後一把鑰匙開啟盒子就能收到支付資料了。

-工程師說這個像洋蔥,然後被大家吐槽缺乏想象力!(來源:wikimedia)-

每個節點只知道前後兩個節點的地址,但是沒法重新還原整條鏈或是確定收款人的身份。這就是洋蔥路由:中間方只在掌握須知資訊的基礎上進行傳輸。

洋蔥網路可以進一步提高使用者隱私性。使用了洋蔥路由之後,就能夠在較大程度上隱藏中間節點的身份,不過付款人仍然可以掌握收款人的 IP 地址以及大概的地理位置。Tor 可以完全隱藏使用者的 IP 地址,確保這個網路中的其他人——甚至是直接通道夥伴——都不知道這些中間節點的身份或地址。

-在失去隱私之前,你根本不知道它有多寶貴。(來源:reddit)-

透過 PBMC 大幅提高效率

交易都是有時限的,達成速度不夠快的話就會失效,因此提高交易傳播速度加快也會提高閃電網路的效率。最開始的時候,如果因為某個節點或支付通道而導致路由中斷,演算法只會忽略這個情況,並在幾秒鐘之後丟棄該資訊。如果沒有一種方式來儲存並使用該資訊,發生在同一時間點或之後的付款在計算路由路徑之時可能會將失效節點考慮進去,從而浪費時間和資料成本。

基於概率的任務控制(PBMC)透過了解之前的成功支付案例來解決這一問題。每個節點一開始都有一個預設的成功率,並根據實際的轉賬完成率有所增減。網路路由的支付交易越多,任務控制元件就越瞭解這個網路的特性,將來就能更好地規劃付款路徑。

路由技術的未來

隨著閃電網路不斷走向成熟,以及開發人員對現行實現的瞭解加深,他們不再將基本功能、效率和隱私性看作三個不相關的問題。每一次新的開發都會綜合考慮這三個方面,找到三者之間的最佳平衡點。

蹦床支付

如上文所述,一旦網路擴容,路由表也會隨之擴大。這時,對於頻寬和儲存空間有限的移動節點來說,源路由並不實用。有人提出了一種名為蹦床支付的方式,就是將路由外包給“蹦床節點”,減少移動節點在資料量和計算量上的負擔。

蹦床節點就是掌握全網路由表的閃電網路節點,負責在付款人與收款人之間找到一條路徑。節點客戶端無需下載並持續更新路由圖,只需連線到一個可靠的蹦床節點上即可。付款會從一個蹦床節點跳到另一個,直到達到收款人處為止。

-蹦床支付的助力效果是一樣的,不過沒這麼好玩就是了(來源:djromanj)-

然而,將路由外包給蹦床節點也會帶來隱私性風險:蹦床節點需要知道收付款雙方才能為找到付款路徑。不過在蹦床支付技術上線之前,已經有人提出了一個靠譜的解決方案,能夠解決隱私性問題。

這個解決方案就是使用兩層洋蔥路由:一層包裹的是付款人和收款人,另一層包裹的是一條隨機選擇的蹦床節點鏈。和洋蔥路由的情況大致一樣,付款路徑上的每個節點只能獲取各自必需的路由資訊。因為鏈是隨機選擇的,所以中間節點很難識別敏感資訊。最大的缺點是,節點之間的跳數越多,交易費也就越高,不過話說回來,這麼低的交易費漲個 10 倍又如何。

螞蟻路由

偵查蟻隨機發現食物之後,會在返回蟻穴的途中分泌資訊素留下蹤跡。這條蹤跡上走過的螞蟻越多,其吸引力就越強。不過等到食物被搬空後,這條蹤跡上的資訊素就消失了。蟻群透過將隨機有序的行為結合起來,找到了資訊傳遞和通訊的最佳路徑。是不是很神奇!

-如果你想找到一條最佳路徑,不要選沒什麼人走的那條路。(來源:wikimedia)-

螞蟻這種聰明的行為給 Cyril Grunspan 和 Ricardo Pérez-Marco 帶來了靈感。他們致力於消除閃電網路中的等級劃分,讓所有節點執行所有功能。他們提出的 “螞蟻路由” 的運作方式如下:

  1. 兩個節點生成一個很大的隨機數,並各自生成一個“資訊素種子”(即部分雜湊),它們都需要對方的資訊素種子來重構這個隨機數。

  2. 它們將各自的資訊素種子廣播給相鄰節點。

  3. 節點在收到資訊素種子之時,會驗證這個種子是否存在於網路的記憶體池中,以及相鄰節點是否已經收到這個種子。

  4. 如果節點發現收到的是一個  種子,會將這個種子儲存在記憶體池中,並把它交給相鄰節點。

  5. 當兩個部分種子在網路中的某處相匹配之時,會順著相鄰的節點原路返回,直到將付款人和收款人連線起來為止,這樣就可以進行付款了。

在各節點規定的時間段過去之後,所有關於已驗證種子的本地資料就會被抹去(就跟資訊素消失一樣!),然後在短時間內將所有交易資料都刪除。如果在有效時間內沒有找到路徑,交易就會失敗。

由於各節點只需要知道傳輸種子的直接相鄰節點,作者稱該演算法確保了付款人和收款人的匿名性。而且,他們還表示這個解決方案免去了本地儲存網路路由表的需求,這將極大地減少相關資料量,讓網路結構變得扁平化。然而,各節點必須執行一些額外的計算工作。

螞蟻路由或將成為另一種非常有效的解決方案,既能增強閃電網路的可擴充套件性,同時又能提高隱私性和效率。

(完)

(文內提供了許多超連結,請點選閱讀原文到 EthFans 網站上獲取)

原文連結:

https://medium.com/breez-technology/lightning-network-routing-privacy-and-efficiency-in-a-positive-sum-game-b8e443f50247

作者: Roy Sheinfeld

翻譯&校對: 閔敏 & 阿劍

本文由作者授權 EthFans 翻譯及再出版。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;