瞭望塔(watchtower)是閃電網路中的重要組件,但瞭望塔具有隱私和擴展性的兩難,限制了閃電網路的普及性。
CryptoCow:區塊牛
區塊牛:牛有四個胃,區塊牛也有。為了幫你消化難解的區塊鏈新知而生。是為消化系區塊鏈資訊共筆平台。cryptocow.app
閃電/雷電網路做為區塊鏈第二層解決方案,本身也存在著些許擴展性問題,其中,提供監控服務的瞭望塔(watchtower)需要負擔起伴隨頻繁交易而生的龐大運算、儲存、網路傳輸需求,可能成為第二層網路的瓶頸所在。
閱讀本文前建議先瞭解支付通道、閃電網路、雷電網路等背景知識。
本文翻譯自 Sam Aiken 的系列文 Lightning and Raiden series 的第一篇:Lightning VS Raiden #1: can watchtowers and monitoring services scale?。為方便讀者理解,翻譯版本有對原文稍作編排及補充,建議參照原文閱讀。
本篇已獲原作者同意轉載,並依作者要求保留聲明及廣告資訊。
Disclosure:I own BTC, ETH, BCH, and other coins, but my portfolio is heavily diversified, so I don’t have financial incentives to shill for any particular coin. I hope to see many projects with different scaling solutions that will compete with each other, while users will have a freedom to use a payment solution of their choice. If you belong to a different camp, that’s fine, I have nothing personal against you and we can still collaborate. This article has been sponsored by peer-to-peer OTC trading platform LocalEthereum.
預設值的重要性
市面上有很多提供隱私保護的工具,像是 Protonmail, Tails, Whonix, VPN, Tor, I2P 等等,但用這些工具的人有多少呢?可能連網路人口的 1% 都不到。關鍵在於這些隱私工具都不是使用者的"預設"選項,而多數人在乎方便性更勝於隱私。
舉例來說,以太坊錢包(在不考慮代幣和智慧合約的前提下)理論上可以在每次轉帳之後把剩餘的 ETH 轉到一個新的地址,但大部分人並不這樣做,因為這不是預設的,但比特幣錢包預設會這麼做,可以提昇一些隱私性。
BTW, LocalEthereum generates new ETH address for each trade, unless user chooses to recycle addresses.
因此,我認為加密貨幣應該要預設在兼顧使用體驗的前提下提供安全性和隱私性,因為大部分的業餘使用者都是從中心化的交易所,用刷卡的方式買幣的。他們只會用手機的輕錢包連上免費的公用節點送交易,然後隨便選一個看起來最大牌的瞭望塔服務,而不會刻意研究隱私問題。
發展擴容方案必需要有瞭望塔
目前來說,閃電網路和雷電網路這類的方案還很難推廣給一般使用者,因為它不像一般的鏈上交易那樣直觀,使用這種鏈下的交易的風險很大,交易對手有可能會透過上傳過期的簽章來偷你的錢。
一般使用者當然也可以找別人(工程師朋友、專業廠商?)來幫忙搞定這些奇怪的問題,但如果閃電網路用起來這麼麻煩,勢必很難和傳統中心化的支付服務(VISA, 支付寶)競爭,所以一個簡單易用的工具還是很必要的。
一個可行的方案是建立第三方託管服務,用來全天候的幫閃電網路的使用者"監控"他們的錢是不是正在被偷,如果發現過期的交易,就代替客戶把錯誤的鏈上交易擋下。
按:鏈下支付的原理是利用交易雙方簽署交易的方式進行,通常會包含金額、時間、流水號等資訊。為了避免對方用過期的簽章領錢,支付通道會設置所謂的"挑戰期",也就是在一方上鏈之後需要等一段時間才能領錢。如果上傳的是過期的簽章,對方可以在挑戰期間把最新的簽章上鏈,避免錢被偷走。但使用者不一定隨時都在線,所以需要瞭望塔幫忙做這件事。
瞭望塔的運作方式
閃電網路
當 Alice 收到 Bob 發送的 0.1 BTC,Alice 會把過期的 secret 和事先簽名的交易送給瞭望塔,當 Bob 試圖上鏈過期交易時,可以用來取走所有的資金。因為 secret 和事先簽名的交易中並不包含金額,所以除非 Bob 試圖作弊並被瞭望塔察覺,否則雙方的交易細節(理論上)瞭望塔是不會知道的。
基本上,Alice 是預先簽了一筆交易交給瞭望塔,用來把通道內的錢全部送回自己的地址,所以 Alice 可以安心下線。每次 Alice 送資料給瞭望塔的時候,都會包含一個"提示",告訴瞭望塔如何抓到作弊的交易,所以閃電網路的瞭望塔就會不斷的監控鏈上的活動,逐一比對有沒有符合"提示"的交易。
如果 Bob 試圖上傳過期的狀態,單方面的關閉通道,瞭望塔會從提示發現這筆錯誤的交易。此時瞭望塔就能根據鏈上的資訊,構造出另一筆交易,並且因為 Alice 已經簽過名,瞭望塔可以直接上鏈,把錢還給 Alice。
當通道是被單方面關閉的時候,會有一個時間鎖,所以閃電網路的瞭望塔可以有足夠的時間,在 Bob 真的偷走錢之前做出反應,領出 Alice 的資金。
雷電網路
雷電網路的瞭望塔設計還處在研究階段,這裡先講一個最新的方案。
Alice 把一些代幣存到鏈上的智慧合約,如果 Bob 試圖作弊,瞭望塔可以及時發現,幫忙取回屬於 Alice 的部分資金並向 Alice 收費。
當 Alice 收到 Bob 發送的 0.1 ETH,她會生成一個證明(balance proof),包含所在的網路、通道 ID、nonce、轉帳金額的 hash 幾個部分,並發布到一個公開的聊天室。因為 balance proof 不包含金額(只有 hash)所以 Alice 的隱私有稍微被保護(但這會有問題,因為金額的數字很可能被猜到)。
因為每個證明都有通道 ID,所以瞭望塔只要盯著這些通道就好。
當 Bob 試圖用舊的 balance proof 來單方面關閉通道,瞭望塔會發現手上有 Alice 的比較新的狀態,可以在挑戰期(鎖定期)結束前攔下 Bob 的提領,並蓋過 Bob 上傳的 nonce 比較小的 proof。
當 Alice 上線之後就可以用最新的狀態來關閉通道。
雷電網路和閃電網路的瞭望塔有幾點不同:
- Alice 需要先把幣存入智慧合約,用來支付給瞭望塔的費用。
- 雷電網路的瞭望塔知道每筆交易的通道 ID 和使用者地址,所以可以把同一個通道的狀態更新給關聯起來。
- 雷電網路的瞭望塔只能暫停 Bob 錯誤的提款,沒辦法直接幫 Alice 發起一筆交易來領走所有錢懲罰 Bob,必須 Alice 自己上線處理。
- 不同於閃電網路,雷電網路裡作弊的人不會被罰錢。
挑戰
儘管閃電網路和雷電網路的實作略有不同,但它們都面臨了類似的挑戰:
- 瞭望塔需要負擔營運成本,這個成本在隱私導向的實作中呈平方增長
- 要如何為瞭望塔提供的服務定價,使用者要如何支付?
- 當使用者需要把一切支付、金流都透露給瞭望塔,要怎麼保護隱私?
- 如何在不損及隱私和使用者體驗的前提下確保瞭望塔服務的可咎責性?
這篇文章主要會探討瞭望塔的成本問題,並簡單帶過一些其他的議題,並比較兩種不同的瞭望塔方案在成本結構上的差異。
註:當一間公司需要存放資料時,可以選擇買更多設備和硬碟或租用網路空間,兩者的花費模式會不太一樣。為了簡單起見,我們在這裡統一用營運成本(operating cost)來稱呼。
Buy & sell ether (ETH) on privacy-oriented peer-to-peer self-custodial end-to-end encrypted marketplace LocalEthereum. You can either create a new password-protected account or log in with your favorite wallet like Ledger, MetaMask, or mobile apps like imToken.
Are you a blogger or YouTuber? Then become an affiliate and start earning by referring new users.
業務導向 VS 隱私導向
支付通道有好幾種不同的類型,但大致上可以分成兩大類:業務導向(雷電網路)和隱私導向(閃電網路)
1. 業務導向型
業務導向型支付通道的瞭望塔可以知道哪些狀態更新是屬於同一個人的。
這會有兩種不同的情況
- 一種是瞭望塔確切知道它在監控的是哪個通道,所以可以把同一個通道的狀態更新關聯起來
- 另一種是,瞭望塔並不確定它監控的是哪些通道,但它有辦法知道某些狀態更新屬於同個通道,就能把它們圈起來。
所以,當有人在鏈上單方面的關閉通道時,瞭望塔能夠知道這是自己正在監控的通道,並把之前同一組的狀態更新關聯起來。
因為知道哪些狀態更新是同一組的,業務導向型的瞭望塔就能把過時的交易刪除,只保留最新的狀態。這會大幅減少瞭望塔的營運成本。
此外,因為知道哪個狀態屬於哪個人,瞭望塔可以據此向使用者收費,而這也是一個相對簡單且可行的商業模式。
瞭望塔可以用一些方法來幫資料庫瘦身
1.) 雷電網路的瞭望塔只需要存每個使用者最新的狀態,所以可以直接刪除所有舊的狀態資料。
2.) 未來閃電網路的暸望塔也可以只保存同一個通道裡的最新狀態,但這需要先實做 eltoo,而 eltoo 又需要比特幣區塊鏈先支援 BIP 118。而根據 Christian Decker 的說法,這個升級應該會和 schnorr 一起出現,因為它們都需要 seguito script bump。
按:本來 Bitcoin 的支付通道在每次更新的時候會產生一個 secret,因為這些舊狀態每個都可能被用來上鏈偷錢,所以需要保留每個 secret 才安全。而 eltoo 就是為了解決這問題被提出的,讓它能像 Ethereum 的通道一樣,新的狀態證明可以在鏈上蓋過所有舊狀態,就不用存一堆 secret 了。至於 schnorr 是一個簽名演算法,可以把多個簽名聚合在一起,減少鏈上的空間,但和本文關係不大,至於 seguito script bump 就不太清楚了,需要再研究研究。
註:BIP 118 (SIGHHASH_NOINPUT) 不會直接破壞閃電網路的隱私性,但在這之後實作的 eltoo 會讓瞭望塔可以把狀態更新關聯起來(就像雷電網路那樣),就可以透過刪除舊狀態來降低營運成本,也會讓瞭望塔的業務更容易發展。市面上可能還是會有些隱私導向的瞭望塔服務,但在價格上肯定會比較沒有競爭力,但隱私到底重不重要,是個值得思考的問題。所以, eltoo 是否真如大多數人所說的那樣"毫無爭議"呢?我們應該好好思考,每個區塊鏈升級對經濟生態的長遠影響。
缺點
業務導向型的瞭望塔服務帶來的潛在風險是它可能會帶來大規模的金融監管,儘管瞭望塔不知道狀態的具體金額,但它仍能濫用使用者的資料作惡:
- 和其他瞭望塔勾結,用大量的資料分析出每筆交易的資金流向,經過哪些節點,最終的收款地址等。
- 分析帳戶的交易頻率來推測使用者的經濟活動。
- 藉由分析交易時間,推測使用者所在的地理位置、時區、作息等行為模式資訊,並且能知道使用者是否正在旅行(改變時區)並使用他的 ID。
- 在雷電網路中把狀態更新連接到這個人以前的活動,以及閃電網路中被單方面關閉的通道。
- 雷電網路的路徑尋找工具和流量圖可以讓潛在的攻擊者推測出絕大多數交易的確切金額和最終目的地。
我們可以透過模糊交易時間或輪流使用複數個瞭望塔來稍微提升隱私性,但這也會產生一些額外成本,會在下一篇文章中討論。
2.隱私導向型
雖然之後閃電網路可能會實作 eltoo,但以目前來說,瞭望塔是沒辦法把不同的狀態更新關聯在一起的,除非他們為了賺錢主動要求使用者這麼做。
一個瞭望塔可能會收到十筆狀態更新,但瞭望塔並不知道它們是來自同一個帳號的通道或十個完全不同的通道。
就算被單方面關閉通道(Bob 作弊),瞭望塔也只能藉此知道這個通道的金額和這一次的狀態,但並不知道過去的九個狀態更新和它有關。
然而,事情沒有這麼容易。為了保護使用者的隱私,大部分的狀態更新都不知道是來自哪個使用者的,這樣瞭望塔就不知道該向誰收費。我們會在之後的文章中提到隱私導向瞭望塔可能的商業模式。
其次,因為沒辦法把狀態更新關聯起來,除了少數被單方面關閉的通道,瞭望塔必須保留每一筆收到的交易,這會讓需要儲存的資料量快速膨脹。雖然也有一些可能可以刪除舊狀態的解決方案,但都有更大的副作用,這部分留待下篇文章再討論了。
營運成本
隱私導向的瞭望塔必須 24 小時在線,要有足夠的網路流量、硬碟空間和運算資源,隨時和鏈上的交易做比對,才能即時發現正在偷錢的交易。
Daniel Larimer (EOS, Steemit, BitShares) 曾在 2010 年和中本聰在這篇文章中討論過擴展性問題。
我相信傳播和敲定(finalize)交易所需的頻寬、硬碟空間、運算量終究會變得對小額交易而言過於昂貴。
8 年後的今天我們仍沒有好的解決方案,有些社群提出不用把交易傳播到全網的系統(閃電網路、雷電網路、分片、NANO 等),然而,同樣的問題仍然會發生在隱私導向的瞭望塔,它的營運成本是平方增長的。
營運成本可以分成以下幾種:
- 網路頻寬(接收新的狀態)
- 硬碟空間(儲存狀態)
- 運算資源(比對鏈上有沒有出現錯誤的交易)
頻寬
瞭望塔對頻寬的需求是相對低的,因為它只要接收資料,不用再回傳或轉發給其他節點/瞭望塔(有些瞭望塔的設計會回傳資料給使用者已確認他們的狀態有被收到,但這也只會增加一點點)。
StopAndDecrypt 寫了一篇不錯的文章來解釋頻寬的需求增長會稍微小於摩爾定律的數量級,這對營運瞭望塔而言是件好事。
運算資源
瞭望塔需要在 hash table(一種儲存資料的結構)中插入所有收到的狀態更新"提示",用來和鏈上資料比對,藉以找出違規交易,並構造出相對應的懲罰交易來廣播到鏈上。
根據 Conner Fromknecht 的說法,不論儲存的資料量有多大,hash table 查詢的時間都是 O(1),消費級的電腦就能完成,如果真的有超大量的資料,也可以在多台機器上透過分散式資料庫處理。查詢的時間理論上是固定的。
然而,儘管 hash table 的查詢時間是 O(1),插入新資料的時間卻是 O(n),但 Conner Fromknecht 聲稱插入的時間也可以被平攤到 O(1)。
按:作者在這邊不太確定這個說法的正確性,他建議讀者如果有不同意見可以到 Conner Fromknecht 的原文進行討論。
硬碟空間
為了檢查出任何可能的違規交易,瞭望塔需要儲存所有收到的狀態更新,這會是一件麻煩事。
1. 儲存空間的平方增長問題
這邊舉一個簡單的例子:Eve 決定經營一個隱私導向的瞭望塔,假設她每天會收到 10 個新使用者,每個人每天會發 10 筆交易。
Day 1: 10 個使用者,每日 100 筆交易,累積 100 筆資料 (0+100)
Day 2: 20 個使用者,每日 200 筆交易,累積 300 筆資料 (100+200)
Day 3: 30 個使用者,每日 300 筆交易,累積 600 筆資料 (300+300)
Day 4: 40 個使用者,每日 400 筆交易,累積 1000 筆資料 (600+400)
Day 5: 50 個使用者,每日 500 筆交易,累積 1500 筆資料 (1K+500)
儘管使用者數量和網路流量只會線性增加,需要儲存的狀態更新卻是呈平方增長的,儲存資料的硬碟需求很快就會變得超級巨大。
對此,Conner Fromknecht 稱使用者會根據儲存的狀態數量付錢,所以理論上收入也會是平方成長的。
這樣的說法或許是對的,一間公司如果能從服務中賺到很多錢,確實負擔得起儲存大量資料的成本,但這同樣會需要一個基於訂閱制的、有損隱私的商業模式。我們會在另一篇文章中討論其他可行的付費制度。
這裡要再次提醒的是,在沒有瞭望塔的情況下,現在的閃電網路根本不可能被一般使用者接受,所以要實現這個"擴容方案"前,勢必得先解決隱私型瞭望塔的擴容,這就和區塊大小之爭一樣,終究是硬碟膨脹的問題。
2. 線性增長下的問題
瞭望塔畢竟是第三方服務,所以不像區塊鏈要完全開放,瞭望塔可以選擇只經營固定數量的客戶,資料量的增長就會是線性的,但這也會造成一些新的問題。首先,要固定使用者數量,就要有一個基於帳號的系統,但這就已經違背了隱私導向的初衷;再來,當使用者的數量固定時,收入也會固定,那麼相較之下線性成長的儲存空間需求仍然會越來越無法負擔。
舉例來說,如果 Eve 的瞭望塔只給 10000 人使用:
假設每個使用者每天產生 10 筆交易,瞭望塔每天就會接收到 100000 筆。
如圖所示,每天 100000 筆交易仍然會讓對硬碟空間的需求不斷上升,但固定數量的使用者卻只會創造定額的收入。總的來說,Eve 經營的隱私導向瞭望塔的成本勢必會不斷增加,所以除非她向使用者收取越來越貴的費用,否則遲早會有經營上的困難。
越用越貴或許對某些人來說沒什麼,但閃電網路畢竟是"擴容"的解決方案,如果它長期而言沒有永續性,勢必無法提供給大量的使用者使用。
一些數據
以閃電網路和隱私導向瞭望塔來說,一個狀態證明的資料量大約和一條 tweet 相等,但瞭望塔應該要有 1~2 個備份,假設一次更新需要 1KB 的空間,那十億次就是 1TB,一兆次就會用掉 1PB 的空間。
每個使用者每天平均會交易幾次是個比較難回答的問題,但大概可以估計,假設每個人免天交易 10~100 次,這是扣除 streaming money 的數量,因為反正高頻交易本來就不適合用隱私導向的瞭望塔服務。
因為交易有兩方:發送者和接收者,所以會有兩份需要保存的狀態。假設在一個很中心化的星狀網路,一次交易會產生 2~4 份證明;而如果是一個非常去中心化,需要多次轉送的網路中,每筆交易可能會產生超過 20 份證明。
按:這邊指的是閃電網路的拓墣結構,如果大家都透過同一個連線數超高的節點轉送,整個網路就會是中心向外放射狀的,但如果沒有明顯的大型節點出現,那每次轉錢可能就要經過更多次 routing 才能轉到目的地。
每次交易的時候,發送方和接收方的狀態更新需要上傳一個證明,中繼節點則要上傳兩個,所以就不難明白,為什麼在一個足夠去中心化的網路中,每天的交易可以產生高達 100 個以上的證明了。
這還沒考慮到實作了閃電網路的 Atomic Multi-Path Payments 和雷電網路的 Multiple Pending Transfers 之後,每次交易產生的證明可能還會多更多。這是因為大額交易需要透過多個路徑幫忙轉送,造成瞭望塔要保管更多資料。
閃電網路的活躍使用者數應該要有多少也是個不容易回答的問題,但既然閃電網路是一種擴容方案,理論上應該要有超多使用者才對,每個瞭望塔少說要有個千萬的使用者數,每天產生以千億計的資料量。
Source: statista.com
因為使用者大都傾向選擇市場上最知名的服務,所以即便市面上有更多隱私性更強、更安全、無廣告的社群軟體,但大家還是都只用最多人用的那個,所以 Facebook 有高達數十億的使用者。因此,我們可以推測,未來最大型的瞭望塔擁有億級的使用者數也是很合理的。
一千萬個每天產生十筆狀態更新的使用者,每年將產生 36 TB 的資料。
一億個每天產生一百筆狀態更新的使用者,每年將產生 3.6 PB 的資料。
事情看起來不太嚴重,畢竟社群網站每年產生的資料量比這個大多了,但社群網站會記錄你的活動、塞給你一堆廣告,做壞壞的事情。而閃電網路事關敏感的個人財務活動,我們肯定不希望瞭望塔這麼做。
根據摩爾定律,企業應該有能力承擔儲存資料的營運成本,但如果要能扛起日漸增加的成本,勢必就要有好的商業模式來賺到更多錢。我們會在系列文的第三篇中討論,是否存在一種模式,能提供使用者好用又保全隱私的瞭望塔,同時又能賺到足夠的收入以持續經營。
其他行業的例子
以 Facebook 為例,它在多數地區的註冊數都已飽和,營運成本卻仍不斷上升。Facebook 為了保存使用者每天持續產生的數據,需要支付高額的費用在資料儲存上。為了留住消費者,還要時時推出新功能,進一步加重負擔。
Facebook 當然也可以選擇停止開發新功能,或者刪除使用者的舊檔案,但結果就是使用者會轉向使用別的服務。所以為了生存,既然節流不可行,它就只好想辦法從每個使用者身上賺到更多的錢。
所以 Facebook 做了這些事:
- 在螢幕的每一個空白處放滿廣告欄位
- 改變文章的排序演算法來推播贊助文章
- 強迫使用者付錢來提高文章觸及率
- 提高投放廣告的金額,間接導致廠商把行銷成本反映在售價上
- 蒐集使用者資料並販售給第三方使用
- 引入付費訂閱服務
所以囉,在 2018 年使用 Facebook 的代價可要比 2008 年 "貴" 多了。
市面上也有一些社交服務是不永久保存使用者資料的,它們可能就比較不會為了賺錢出賣使用者,但很可惜的是,隱私導向的瞭望塔沒辦法這麼做,因為交易對手可能會用任何一筆過期的狀態來攻擊,瞭望塔別無選擇的必須儲存每一次的狀態更新。
小額贊助
BTC:
1HUHtZ2mTLZgJai35msRfj6jupULP2kc6N
ETH:
pingchen.eth
0xc1F9BB72216E5ecDc97e248F65E14df1fE46600a
《Ping Chen》授權轉載
新增留言