繼上一次關于支付網絡中路由問題的全面研究之后,熱愛研究的 Nervos 小伙伴 Shor 對通道網絡中的再平衡(Rebalancing)算法又做了詳細的研究。
本文中,我們會介紹通道網絡(Channel Network,CN)中的 Rebalance 問題。首先我們將介紹問題的定義和現有的解決算法。之后,我們會針對這一問題,介紹必要的圖論基礎和建模方法。最后,我們提供一種算法加速思路。(本文默認讀者具備對于通道網絡的常識。)
支付網絡中的 Rebalance 問題簡介我們把一個支付網絡看作一個無向圖,每個圖中的節點代表一個 PID,每條邊代表一個支付通道,其中每條邊在兩端節點各有一個存量。注意:我們默認每個(雙向)支付通道內部總存量守恒,即由 A,B 組成的通道中,如果 A 有余額 50,B 有余額 80,B 在向 A 支付 10 元后,A 有余額 60,B 有余額 70。
有時,因為網絡拓撲結構等原因,一個支付通道的一個方向總比另一個方向「更受歡迎」,在此情況下,各個通道的有限總存量都被「堆積」到一側,或者說「受歡迎方向」的流量就此耗盡了。因此,支付網絡會頻繁出現通道流量耗盡,不得不再次「上鏈」打開新通道的情況。再平衡(rebalancing)技術通過以下方式試圖緩解這一問題。
去中心化交易協議Balancer將路由通道升級為多路徑路由:BalancerLabs宣布完成對其去中心化交易協議Balancer的更新,將路由通道升級為多路徑路由,可大幅改善gas定價及使用量。用戶需要為新的委托合約解鎖代幣。[2020/8/26]
例如下圖中, 我們考慮一個由四條邊構成的回路,他們主流方向的 10 單位余量都已經耗盡。
其中每個箭頭
表示一個連接了 A 與 B 的無向通道,其中 A 方存量是 a,B 方存量是 b。值得注意的是,箭頭方向代表了主流方向,因而我們畫成了一個有向圖,不過最新基于 RbR 的支付通道都是雙向的。Revive 通過一個來自全局 leader 的協調(本文中,我們不予考慮這個 leader 是如何實現的),完成一個 rebalance 工作。例如,可以協調 B 向 A 轉賬 5 個單位,協調 A 向 C 轉賬 5 個單位,協調 C 向 D 轉賬 5 個單位,協調 D 向 B 轉賬 5 個單位,使得全圖結構如下圖所示。其本質上是找到一個「回路」,并在這個回路上讓所有通道一起逆著主流方向回流、抵回一些流量。
比特幣閃電網通道數量為36377個:據1ML數據,當前比特幣閃電網絡節點數為12421個,過去30天內增加3.17%;通道數量為36377個,過去30天內增加0.7%;網絡容量達到964.59個BTC,過去30天內增加4%。[2020/4/29]
當我們提及 Rebalance 時,到底在試圖解決哪些問題?筆者認為,關鍵需要解決兩個問題:
第一個問題是已知全圖求調度方案的問題(將在之后著重介紹)。
第二個問題是協議問題:有誰來實現上述的運算過程?如果是以個別實體節點(leader)完成,如何讓他們即時收取到一部分圖的實時信息并作出 rebalance 決策?如何規避他們作惡?如果是以一種去中心化的方式實現,又如何使信息收集、運算和實施三個環節成為可能?如何讓網絡節點參與并遵循我們想要設定的規則?
動態 | 比特幣閃電網絡通道數量已達11238個:據1ML數據,當前比特幣閃電網絡節點數為11238個,過去30天內增加2.70%;通道數量為35947個,過去30天內增加1.5%;網絡容量達到882.95個BTC,過去30天內增加2%。[2020/2/1]
本文中,我們先拋開第二個問題,專注于第一個問題。
支付網絡中現有的 rebalancing 問題可以被這樣抽象刻畫:
給定一個支付網絡,尋找足夠多的回路,最大化可以調整的流量。無疑這是個線性規劃問題。
現有的思路(即 Revive 工作的思路)是直接解這一個線性規劃問題。但是,直接求解這個線性規劃問題的代價是非常昂貴的(對于當前支付網絡規模而言尚可,但對于一個具有成百萬上億節點的未來假想支付網絡不可行)。最新的線性規劃算法理論復雜度為 O(M^w),其中 M 為變量和約束條件個數,w 是一個略小于 3 的常數。對于當前具有萬級別節點的支付網絡而言這個復雜度可以接受,不過我們認為這個復雜度對于未來具有百萬上億級別節點的支付網絡來說,高了一些。但也沒高太多!倘若能把復雜度稍微優化下去一些,就可以接受了。
動態 | 數據顯示:比特幣閃電網絡通道數量已達11171個:據1ML數據,當前比特幣閃電網絡節點數為11171個,過去30天內增加2.42%;通道數量為35930個,過去30天內增加1.9%;網絡容量已達到885.72個BTC,過去30天內增加3%。[2020/1/27]
接下來,我們將給出我們的解決思路。不過在此之前,我們先介紹一些必要的基礎知識。
需要的預備知識圖論基礎(強連通分量)
對于一個有向圖,一個強連通分量指一個任意兩點之間可以互相由圖上有向邊訪達的子圖。一個極大強連通分量是一個增加任何一個其它節點后就不具備強連通分量性質的子圖。例如上圖中,我們可以用灰色區域勾勒出它的四個極大強連通分量。
我們可以觀察到以下方面:
極大強連通分量對任何一個有向圖的所有節點完成了一個 partition。
聽證會 | 國會議員:若Libra為非法活動提供更便捷的通道將是很嚴重的問題:金色財經直播報道,在今日聽證會上,議員Sylvia Garcia稱,我們面臨的危機的確可能會上升到國家層面,我們無法容忍恐怖主義和洗錢等非法活動的存在,而如果Libra為這些行徑提供了可能更加便捷的通道,這是很嚴重的問題。[2019/10/24]
任何一個回路只會存在在同一個極大強連通分量內。
存在一個極高效的 O(N) 算法求出任一有向圖的所有極大強連通分量(具體算法本文中不贅述)。
其中 N 是全網節點數量。
將每個極大強連通分量看作一個整體,用邊連接所有有訪達關系的分量并縮點后,我們得到了一個有向無環圖。
具體優化辦法接下來,我們介紹具體算法。
首先,我們對原支付網絡圖做一個簡化變幻,將每一個雙向通道變換為從存量多的一方指向存量少的一方的有向邊,邊的容量是兩端存量差的一半。例如下圖中,我們將上圖變換為下圖。
于是,我們將尋找回路問題轉化成了尋找有向圖環路的問題。有向圖的每一條邊代表了一個為了讓原圖的對應通道更加平衡需要回流流量的一個「勢能」。每一個環路可以被看作一個回流方案。在進行強連通分量縮點后,我們只需要通過現有線性規劃解每一個極大強連通分量內部的 rebalance 問題。
其解決方案便已明朗:只需要求解出這個有向圖的所有極大強連通分量,并且在每一個極大強連通分量中通過常規的線性規劃,求得一個最優的調度方案。因為我們認為每個回路并不會跨兩個不同的極大強連通分量,所以我們認為這個方法求出的就是全局的最優調度方案。
這里其實有個小問題:這真的是個等價轉換嗎?實事求是地說并不是(雖然乍看是的)。有可能會出現最優全局調度方案中有回路橫跨兩個極大強連通分量的情況,因為有可能會出現「需要為了多數人苦一苦少數人」(「需要讓少數邊更加不平衡來讓更多邊變得更平衡」)能得到更優解的可能性。不過筆者暫時認為這種偏差是值得的。況且,涉及到現實落地,興許那些少數人并不會接受這樣的調度。
細心的讀者們應該發現了本文中的兩個沒有解釋清楚的問題:
這個問題,本質上在問未來的大規模支付網絡會有多少個極大強連通分量,分量越多,優化效果就越明顯。本質上這個問題是未來大規模支付網絡的拓撲結構是怎么樣的。可以預期的是,如果絕大多數群眾節點的度數只有 4 度左右,極大強連通分量的期望數量是關于網絡節點數量以一種低于線性的速度增長的。
其實,這兩個問題本質上都在問:未來的大規模通道網絡的拓撲結構究竟是怎么樣的?
筆者認為,這個問題不但筆者回答不了,恐怕也沒有人能準確回答的了。這一點筆者已經在之前的文章「一份關于支付網絡中路由問題的全面研究」中給出了解釋。
Tags:ANCALABALABALBaby Yoda FinanceSalad VenturesDollarBalance Sharemexcglobalapp
深圳再發數字紅包,引領世界 CBDC繼前期「禮享羅湖數字人民幣紅包」試點后,元旦當天深圳再度派發 2000 萬元數字人民幣紅包.
1900/1/1 0:00:0020120年12月31日08:30左右,BTC價格再度創下新高,達到29300USDT。Coingecko數據顯示,此時BTC市值達到5438億美元.
1900/1/1 0:00:00“很多持有 DOT 的人都會選擇進行提名,來獲得更多 DOT 收益。但是怎樣選擇提名人才能在安全的同時賺更多錢呢?答案都在這篇 Polkadot Wiki 的提名指南中.
1900/1/1 0:00:00主流幣的這波幣災力度非常大,一些幣種整體跌幅都超過了百分之三十,這么大的力度比特幣依然堅挺并沒有被帶下去,真的是潮水褪去才能發現珍珠,ETH.LTC經住了考驗,是妥妥的可長期持有幣種.
1900/1/1 0:00:00導:2020是DeFi年,但是這個新興金融生態系統的發展并不是一路暢通。與前幾年不同的是,2020年的主要加密貨幣新聞并不是大型交易所遭遇黑客攻擊和價值數百萬美元的比特幣遭遇盜竊.
1900/1/1 0:00:00原標題:數字人民幣手冊⑦冷思考:防范假冒錢包等5個問題要未雨綢繆編者按:數字人民幣的試點進展備受期待.
1900/1/1 0:00:00