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