閱讀本文之前,我們需要認清幾個事實。吞吐率有限,是因爲網絡帶寬有限。PoW 的難度高,是爲了避免輕而易舉地被 51% 攻擊。交易費的存在,讓專職礦工來解決普通用戶的需求。一個區塊容納多個交易的設計,提高了運行的效率。如果看不到這些背後的原理,卻盲目地去掉限速,去掉交易費,去掉區塊,然後用一個漏洞百出的底層技術,去設計產品方案,去講一個所謂天方夜譚的故事,這樣只會斷送這個項目的未來。

原文標題:《IOTA 物聯網電磁爐-讓 PoW 的耗電沒有遺憾》

一個荒唐的故事:幾年前,打車平臺激烈大戰的時候,有這樣一家創業公司橫空出世,號稱實現了零打車費,從根本上解決了人們出行中的痛點。而實現的方式是,讓用戶自己買輛車,然後自己給自己當司機。讓服務需求方自己給自己提供服務,從而節省了服務費。這一想法讓投資人非常驚訝,然後將創業者打出門去。

趣解項目:號稱解決了區塊鏈+物聯網痛點的 IOTA 到底怎麼不靠譜?

上面這個故事是小 C 我編的。但在區塊鏈這個圈子裏,卻真的有這樣一個公鏈項目,憑藉着區塊鏈的技術認知門檻,編概念講故事,號稱解決了區塊鏈+物聯網的痛點。這個項目在區塊鏈泡沫最高的時候,一度登上了市值榜 TOP10。這就是小 C 今天的要和大家講的項目:IOTA。

趣解項目:號稱解決了區塊鏈+物聯網痛點的 IOTA 到底怎麼不靠譜?

IOTA 是個啥?

首先,IOTA 是一個使用 DAG 賬本結構的區塊鏈系統。(注:DAG,Directed Acyclic Graph,中文全稱「有向無環圖」,所謂 DAG 結構,就是讓每個區塊或交易引用多個區塊或交易作爲父親。這樣所有的區塊或交易之間的父子關係構成一個有向圖。每個區塊或交易必須引用比自己早的交易,因此,這些區塊或交易的父子關係不可能出現循環。因此,這個結構被稱爲有向無環圖)它的賬本數據結構叫做 Tangle,翻譯成中文就是「糾纏,混亂」的意思。沒錯,這個名字非常貼切。因爲小 C 從研究 IOTA 的第一天開始,就被 IOTA 技術上各種奇葩不靠譜的方案繞暈了。

趣解項目:號稱解決了區塊鏈+物聯網痛點的 IOTA 到底怎麼不靠譜?

IOTA 的項目願景非常美好:它通過無區塊鏈,無交易費,無限可擴展,解決了物聯網場景中各種痛點。這簡直是重新定義了區塊鏈啊。但是,如果深扒 IOTA 的技術原理,你會發現 IOTA 實現方案非常不靠譜。有多不靠譜呢?比對着 excel 喊「二百五,求和」還不靠譜。

趣解項目:號稱解決了區塊鏈+物聯網痛點的 IOTA 到底怎麼不靠譜?

IOTA 到底怎麼不靠譜

小 C 先來說說這個無限可擴展。在 IOTA 原始的設定中,所有的交易構成一個 DAG。任何人 (或物聯網設備) 想發起交易,只需要引用其他兩個交易就可以了。沒有礦工,沒有區塊,沒有礦工賺交易費,你發交易的速度有多快,IOTA 的 TPS 就有多高。只要好人的交易總數足夠多,它就是安全的。

這簡直太 awesome 了,攻擊一個區塊鏈系統從來沒有像攻擊 IOTA 那樣簡單。不需要屯幣,不需要買礦機,我只要搞一臺電腦不停地,每分每秒不停地發交易,讓我的交易佔據全網的 50% 以上,我就攻擊成功了。

趣解項目:號稱解決了區塊鏈+物聯網痛點的 IOTA 到底怎麼不靠譜?

IOTA 大概也意識到了這個問題(被大家抨擊到不得不意識到這個問題)。於是 IOTA 後面改了,說每筆交易必須算一個 PoW,來防止女巫攻擊帶來的雙花問題的。納尼?說好的無限可擴展呢?

有了 PoW 的 IOTA 真是妙不可言啊。要知道,IOTA 應用場景是物聯網設備,物聯網設備跑 PoW 真是天才的想法啊。所謂的物聯網設備,就包括現在最火的智能家居,比如智能插座,智能音箱,智能冰箱等。那什麼樣的物聯網設備可以把 PoW 的優勢發揮到淋漓盡致呢?機智的小編我,馬上想到了物聯網智能電磁爐!我簡直迫不及待想買一個 IOTA 物聯網智能電磁爐,每次打開電磁爐的時候,它就開始進行 PoW 運算,發出的熱量也可以加熱食品。當你的晚飯做好了,一筆 IOTA 交易也就發出去了。

不僅如此,這個 IOTA 電磁爐還能提高烹飪的安全係數。它通過佔滿你家網絡的帶寬,讓你上不了網,杜絕你在烹飪的時候因爲刷微信刷微博把房子點着。因爲在 IOTA 中,發送每筆交易時,需要選擇兩筆交易作爲父親。這個要求看似簡單,但你需要保證:這兩筆交易的歷史中沒有非法交易,沒有衝突的交易。這需要同步大量的歷史,驗證歷史交易的正確性,處理衝突交易,並且保持與 IOTA 的 DAG 最新狀態同步。如果你偷懶不同步,那你的交易可能就因爲違反了一些規則被無效掉了。爲了重新發起這筆交易,你只好再做一頓飯。

在比特幣中,礦工負責做 PoW 運算,負責同步、驗證網絡交易,並處理衝突,用戶向礦工付交易費。IOTA 重新定義了區塊鏈,消滅了交易費,取而代之的是這些事情都得用戶自己來做。當比特幣的用戶坐在餐桌上喫烤鴨的時候, IOTA 的用戶還蹲在後廚親自養鴨子。小 C 認爲,IOTA 所謂的無交易費,本質上就是用從商品經濟回到自然經濟,這是倒退,不是創新。

趣解項目:號稱解決了區塊鏈+物聯網痛點的 IOTA 到底怎麼不靠譜?

當然,由於這個實在太不合理,於是 IOTA 的社區就有了彌補的方案。有一個叫 IOTA PoWer 的服務,它允許用戶付一筆錢,將自己的交易 PoW 計算等任務外包。可是小 C 我仔細一想,這不就是用戶發出一筆交易,然後付錢讓礦工給我打包進區塊嗎?這個區塊很特別,只能放一筆交易而已。由此可見,IOTA 所謂的無區塊鏈,不過是自欺欺人的宣傳點罷了。

對於上面荒誕的故事,IOTA 的擁護者可能會不服,他們認爲 IOTA 的 PoW 與比特幣的 PoW 目的是不一樣的,IOTA 的 PoW 只是爲了減少網絡中的垃圾交易,不會給用戶造成負擔。那就讓小 C 來帶着大家,具體算一算 IOTA 中 PoW 的難度怎麼設比較合理。

首先,我們要算一下 IOTA 網絡最高能跑到多少個 TPS?如果 IOTA 每秒產生 10000 筆交易,網絡帶寬的侷限性導致 IOTA 無法保證 DAG 賬本在全網的同步。如果賬本始終無法及時同步,那麼不同的節點就可能在不同的分叉上越走越遠,從此分道揚鑣,共識不再。所以 IOTA 的網絡中,每秒 10000 筆交易,不能再多了。

然後,我們要算一下 IOTA 的全網算力達到多少 TH/s 纔算安全?全網算力達到多少 TH/s,一個普通的家用電腦,才能在一頓飯的時間裏(1 小時)發出一筆交易?一個 Intel Core 2 Duo 的算力大概是 2.5MHash/s, 1 小時內可以嘗試 9G 次 Hash 嘗試。9G 次 Hash 嘗試發出一筆交易,目前 IOTA 主網的吞吐率只有 5TPS,如果壞人有 >45GHash/s 的算力,那麼他們就可以每秒產生 >5 筆交易,就可以在交易數量上佔據主導,從而進行 51% 算力攻擊。即使達到了 10000 TPS,90THash/s 依然可以進行 51% 算力攻擊。 90THash/s 是個什麼概念呢?一個螞蟻 S9 礦機的算力是 13.5THash/s,七臺螞蟻礦機的算力就可以超過 90THash/s。

哪怕普通用戶算 1 小時才能發起一筆交易,七臺 S9 螞蟻礦機就能完成對 IOTA 的雙花攻擊。IOTA 面臨着一個選擇:去讓用戶忍受更長的等待時間,還是讓攻破 IOTA 的門檻更低?

IOTA 選哪個?IOTA 哪個都不選, IOTA 選擇中心化!

爲了解決上述矛盾,IOTA 網絡中要額外使用一箇中心化的 Coordinator 來定期的驗證 DAG 和交易。這使得 IOTA 實際上變成了一箇中心化的系統。IOTA 聲稱,未來會取消這個中心化的 Coordinator。然而,基於上面的計算,即使網絡帶寬增加 100 倍,即使用戶願意忍受 1 小時才能發一筆交易,700 臺 S9 礦機依然能對 IOTA 發起雙花攻擊。與之相對應的是,比特幣的全網算力大約是 (50 EHash/s),相當於 4000000 臺 S9 礦機。

給 IOTA 的建議

小 C 認爲,擺在 IOTA 面前兩條路,要麼在中心化的道路上繼續走下去,要麼積極推廣 PoW 外包方案。讓專門的礦工來處理交易打包、PoW 挖礦等事宜,讓用戶爲礦工付費。摒棄「無交易費、無區塊鏈、無限擴展」等這些不負責任的言辭。

但是即使 IOTA「改過自新」,接受了小 C 的建議,IOTA 本質上還是一個 1 個區塊只能包 1 筆交易的區塊 DAG。它違背了系統設計中最最通用的一個常識性的優化思想 –batching,就是批量處理。這意味着元數據帶來的開銷會顯著增加,同時會帶來很多系統實現上的性能挑戰。比如,當區塊鏈系統的吞吐率達到每秒幾千筆交易的時候,網絡帶寬通常會成爲瓶頸。而交易就是區塊鏈網絡中主要需要傳輸的數據。如果每筆交易都附帶許多 DAG 相關的元數據(例如對其它 DAG 結點的引用),那麼對網絡帶寬的壓力就會大大增加。另外,維護交易粒度的 DAG 也會大大增加本地計算的複雜度。

IOTA 的 DAG 中需要對每個交易結點維護一個累計權重,也就是所有直接或間接引用了該交易的交易個數。當一個新的交易被加入到 DAG 的尾部,所有它能夠直接或間接引用到的交易的累計權重都要需要更新,這個複雜度是和交易的個數成正比的。假設系統的吞吐率是 1000TPS,那麼系統從剛開始運行到 1 小時後,DAG 中的交易個數就會達到 360 萬。一天之後就會達到 8600 萬。之後每筆新加入的交易都會帶來接近 1 億次的權重更新,而且這個複雜度會越來越大。

總結

我們需要認清幾個事實。吞吐率有限,是因爲網絡帶寬有限。PoW 的難度高,是爲了避免輕而易舉地被 51% 攻擊。交易費的存在,讓專職礦工來解決普通用戶的需求。一個區塊容納多個交易的設計,提高了運行的效率。如果看不到這些背後的原理,卻盲目地去掉限速,去掉交易費,去掉區塊,然後用一個漏洞百出的底層技術,去設計產品方案,去講一個所謂天方夜譚的故事,這樣只會斷送這個項目的未來。