1. 程式人生 > >技術揭祕 | 去中心化交易能比VISA還快麼?

技術揭祕 | 去中心化交易能比VISA還快麼?

文章來源 | 計算廣告

作者 | 北冥乘海生

 

最近沒寫文章,正要續上原來留的扣子,才發現虛擬貨幣價格正在崩塌。對此,我不免拍案稱快:把那些無價值的空氣幣毀滅給人看,才是人間正道。在幸災樂禍的情感支配下,我更有動力寫今天的內容——畢竟,在一片哀鴻聲裡,沒人會以為這是一篇鐮刀文了。

 

現有的去中心化貨幣和交易系統,由於技術方案的限制,每秒交易次數(TPS)相當低,相應地,交易費用高企,無法支撐中小額、高頻次的支付行為。

 

今天我們要討論的,是個純粹的技術問題:去中心化交易的效率到底能不能大幅提高?至於其商業價值,我的觀點是:短期來看,沒有想象的大;長期來看,又比想象的大得多。諸位可能無法想象:在本世紀初,基本沒有哪個教授聲稱自己是做人工智慧的,那就跟承認自己是騙子差不多。

 

本文的核心內容,來自於上文提到的王成(W)偽博士,加個“偽”字,因為他讀的數論和分散式計算兩個博士都退學了。王成有項很重要的工作——《線性時間複雜度的拜占庭演算法》。正是在兩年多前,他在拜訪V神時,瞭解到以太坊面臨的困境和正在進行的分片專案,才頓生興趣開始研究去中心化交易的速度問題。 

 

《線性時間複雜度的拜占庭演算法》:

https://infoscience.epfl.ch/record/210619/files/main.pdf

 

有人說,比特幣的地位類似於數字黃金,支撐日常交易的能力無足輕重。其實,這是一種酸葡萄心理罷了,且不比微信支付和支付寶,加密貨幣至少應該能以VISA的效率支撐交易,再加持以去中心化的生產關係,才能有更多真正落地的應用產生,而不是像今天這樣,與傳銷和詐騙緊密聯絡在一起。

 

還是那句話,我們先不談DPOS等半中心化方案,只討論POW。要提升POW機制的交易速度,有兩個方向:一是把交易處理儘量打散,由一個鏈上堆積變成多頭並進;二是把賬本分解開,變成可擴充套件(scalable)的。這兩個概念前文已經說過,那麼,都有些什麼新的技術方案呢?

 

第一類方案,把賬本結構由鏈變成了有向無環圖(DAG)。這樣一來,就有多個頭部可以同時記錄交易了,其代表專案是IOTA,賬本結構如上圖所示。IOTA沒有區塊的概念,每個交易都會引用過去的兩條交易Hash,以證明這兩條交易的合法性,並間接證明之前交易的合法性。不過,IOTA能夠提高TPS的關鍵,還是在於圖結構相比鏈結構而言,有多個頭部,可以並行確認交易。

 

話雖如此,IOTA有個致命問題:由於在選擇頭部的過程中,要用到效率很低的隨機行走演算法。為了實用,只好引入一個全域性協調器(Coordinator),從快照算起以節省時間。您聽出問題來了吧?這個快照是由中心節點選取確定的!這樣一來,就現狀而言,IOTA其實並不是一個去中心化系統!

 

IOTA的理論和工程挑戰還有很多。實際上,它實測的TPS也僅達到1000上下,再加上中心化的缺陷,看起來現實比理想要骨感得多。     

 

 

另外一類方案,是把交易分到多條鏈上,典型的是以太坊的分片(shading)專案。它的思路非常簡單直覺:把使用者隨機分成G個組,每個組單獨有一條子鏈,組內的交易在這條子鏈上確認即可。顯然,這可以提高一些交易速度。

 

關鍵的問題是,跨組交易怎麼解決?分片專案採用了利用主鏈進行週轉的辦法。不談技術細節,我們從概念上描述一下此過程。如果第1組上的使用者a要給第3組上的使用者b傳送十個幣,可以分成如下兩步:

 

1. 第1組的使用者a告訴主鏈,我要給第3組的b使用者傳送十個幣,此步驟相當於生成一張支票;

2. 主鏈告訴第3組的子鏈,有第1組的使用者a向你這裡的使用者b傳送了十個幣,此過程相當於把支票提現。

 

顯然,概率上看,大多數交易都是跨組交易,因此都需要通過主鏈中轉。這也就決定了,分片很難決定性地提高TPS。另外,在此方案中,每個節點都要保留公鏈和與自己相關的那條子鏈,需要儲存和處理的賬本沒有變小,因此並不是一個scalable的方案。

 

因為存在“1%攻擊”,即100個分片有一個被攻擊,就會影響整個系統,這樣的分片方案會降低安全性。另外,還有個嚴重的問題:此方案目前看來無法跟以太坊圖靈完備的智慧合約體系相相容,難道為了提速,先要自斷手足麼?目前,分片專案進展並不順利。計劃中的六個步驟,才進行到第一步,還只有一些實驗性質的程式碼。可以說,距離美好的夢想還遙遙無期。

 

是不是沒辦法了呢?其實,分片專案給了我們很大的啟發,曙光就在前方了。我們想想此方案的癥結:為什麼跨鏈交易要回到主鏈上進行呢?能不能把這部分再分解呢?

 

於是,我們想到這樣一個方案:仍然把使用者分成G組,但是在子鏈的設計上有所不同:將第i組到第j組的交易,單獨放在一條子鏈L(ij)上。這樣一來,G組使用者就對應了G^2條子鏈,如下圖所示。

這樣做有什麼好處呢?從上圖看,假設使用者分成兩個組,那麼第0組的使用者在發起交易時,只會依賴L(0,0)、L(0,1)、L(1,0)這三條鏈上的前序交易,與L(1,1)這條鏈是毫無關係的!如此一來,第0組的節點,就只需要儲存3/4的子鏈就可以了。

 

看起來省的不多?其實,在使用者分成G組的情形下,每個節點只需要保留2G-1條子鏈就夠了,也就是說,大約只需保留(2G1)/G^22/G的子鏈,這是相當可觀的!比如說,我們把使用者分成32個組,那麼每個節點都只需要儲存1/16的鏈就可以了,這就實現了scalable特性。

 

什麼,您問還有主鏈麼?既然跨鏈交易都解決了,還要主鏈幹什麼用呢?

這樣的方案,沒有了主鏈和子鏈的概念,交易被使用者組結構組織起來的多條鏈並行處理,就像是百川到海不復還,我們給這樣的賬本結構起了個名字,叫“區塊流”(BlockFlow),如上圖所示。當然,具體實現上面的思路和結構,還有很多技術細節甚至巧妙的設計,本文不是白皮書,所以這些就不談了。

 

那麼,從理論上分析,BlockFlow能支撐什麼樣的交易速度呢?我們借用上篇文章中的分析,帶入上篇文章分析得到的那兩個約束公式:

 

T P' * 4ms / T <= G^2 * 20%

P' * 0.5KB * (1 + D / T) <= G / 2 * 10Mb

 

可以算出,當我們取G為32時,至少可以達到1萬左右的TPS;取G為64時,可以達到4萬左右的TPS。

 

 

假如能在POW共識機制上達到這樣的TPS,有什麼現實意義呢?我們將幾個典型的方案,和中心化的VISA放在一起比較一下,如上表所示:

 

  • 兩個典型的POW系統比特幣(BitCoin)和以太坊(Ethereum),共識機制基本一致,交易TPS也都在10次上下,相應的交易費用大多數時候在零點幾美元,不過一旦交易擁堵,就可能上升至數美元到數十美元。即便如此,在面對大額交易時,由於交易費用並不與交易額成正比,比起傳統銀行還是有很大的成本優勢。

  • EOS採用的DPOS的共識機制,類似於代議制:大家先投票選出一組超級節點,再由超級節點完成交易確認。由於投票規則存在較大的調整空間,某種意義上說,這類系統的立法權還是中心化的,而司法過程則是半中心化的。不過,EOS確實顯著提升了交易速度,目前的線上TPS大約在數千。

  • 前文提到的IOTA,由於有Coordinator的存在,並不是一個去中心化方案。不過IOTA有個最大的好處,那就是無需交易費用。就目前狀況而言,不到1000的TPS,和中心化的現狀,讓此方案的未來並不明朗。

  • VISA作為老牌的支付巨頭,是中心化方案的代表。實際上,VISA系統的平均TPS也並沒有想象的高,大約在幾千,不過峰值速度要高得多,而且交易確認延遲很短。對於大額交易來說,VISA按固定比例收取的手續費是相當高的。另外,有一點容易被人忽略,中心化方案為抵禦攻擊需要付出的成本,可一點都不低。

  • 本文介紹的BlockFlow方案,共識機制與傳統POW一致,只是在鏈結構上做了新的設計。從結果上看,至少有兩點重要意義:首先,整個鏈結構是scalable的;其次,TPS大幅提升,必然帶來交易費用大幅下降,完全可以做到1美分上下。在安全性方面,BlockFlow跟比特幣一致,也存在51%算力攻擊。

可以這麼說,採用BlockFlow方案,POW在交易速度和成本方面,幾乎可以做到一個去中心化版本的VISA了!只是在交易確認時延上還有差距。

 

那麼,BlockFlow這個方案僅僅是一種案頭理論分析麼?當然不是。目前,此方案的原型系統已經實現出來,正在進行內部alpha版本的測試。根據實測結果,在G=32時,1萬的TPS是確定可以達到的。

 

還有一個遺留的問題,那就是智慧合約怎麼解決。以太坊引入的圖靈完備虛擬機器,雖然看上去很美妙,卻給分片方案挖了個大坑。在BlockFlow方案中,將採用一種全新的智慧合約機制,使得虛擬機器的實現更加靈活,也能夠相容多鏈的結構,不過說起來又需要很大的篇幅了,後面再專門撰文介紹。

 

曾幾何時,多少一夜暴富的神話,讓整個幣圈不相信技術,只相信信仰本身。這曾讓所有對技術本身有懷疑或期望的人,都成了迂腐荒唐的堂吉訶德。慶幸的是,我們終於等到了潮水退去之時,能在平靜的心態下討論技術。而我們也堅信,只有區塊鏈技術本身的進展,才能最終收拾騙子們留下的一地雞毛。

 

推薦閱讀: