Conflux吐槽君:IOTA物聯網電磁爐-讓PoW的耗電沒有遺憾
鑑於有不少小夥伴反映,覺得區塊鏈技術圈亂象橫生,魚龍混雜,導致大家很難去辨識哪些是真正的技術。甚至有些人,打著說技術的名號,其實自己本身都沒弄懂弄明白,只是懂個皮毛,就開始拿著各種技術專有名詞去唬人。這樣的現象,導致想好好學習技術知識的小夥伴們甚至會被混淆和誤導,學到和接收到的是錯誤的資訊。小編對於存在的這樣的亂象也深感痛心,作為一支來自與清華姚班的公鏈團隊,Conflux的小夥伴們,決定來幫助真正想學習技術的大家!推出《吐槽君小C》專欄,小C會用最直接,最犀利的言語來道出區塊鏈專案技術的優勢劣勢,真正講清楚技術,講清楚技術之間的區別,讓大家對技術和整個行業有更深刻的瞭解認知,本文就是Conflux吐槽君第一期~
一個荒唐的故事
幾年前,打車平臺激烈大戰的時候,有這樣一家創業公司橫空出世,號稱實現了零打車費,從根本上解決了人們出行中的痛點。而實現的方式是,讓使用者自己買輛車,然後自己給自己當司機。讓服務需求方自己給自己提供服務,從而節省了服務費。這一想法讓投資人非常驚訝,然後將創業者打出門去。
上面這個故事是小C我編的。但在區塊鏈這個圈子裡,卻真的有這樣一個公鏈專案,憑藉著區塊鏈的技術認知門檻,編概念講故事,號稱解決了區塊鏈+物聯網的痛點。這個專案在區塊鏈泡沫最高的時候,一度登上了市值榜TOP10。這就是小C今天的要和大家講的專案:IOTA。
IOTA是個啥?
首先,IOTA是一個使用DAG賬本結構的區塊鏈系統。 (注:DAG,Directed Acyclic Graph,中文全稱“有向無環圖”,所謂DAG結構,就是讓每個區塊或交易引用多個區塊或交易作為父親。這樣所有的區塊或交易之間的父子關係構成一個有向圖。每個區塊或交易必須引用比自己早的交易,因此,這些區塊或交易的父子關係不可能出現迴圈。因此,這個結構被稱為有向無環圖) 它的賬本資料結構叫做Tangle,翻譯成中文就是“糾纏,混亂”的意思。沒錯,這個名字非常貼切。因為小C從研究IOTA的第一天開始,就被IOTA技術上各種奇葩不靠譜的方案繞暈了。
IOTA的專案願景非常美好:它通過無區塊鏈,無交易費,無限可擴充套件,解決了物聯網場景中各種痛點。這簡直是重新定義了區塊鏈啊。但是,如果深扒IOTA的技術原理,你會發現IOTA實現方案非常不靠譜。有多不靠譜呢?比對著excel喊“二百五,求和”還不靠譜。
IOTA到底怎麼不靠譜
小C先來說說這個 無限可擴充套件 。在IOTA原始的設定中,所有的交易構成一個 DAG。任何人(或物聯網裝置)想發起交易,只需要引用其他兩個交易就可以了。沒有礦工,沒有區塊,沒有礦工賺交易費,你發交易的速度有多快,IOTA的TPS就有多高。 只要好人的交易總數足夠多 ,它就是安全的。
這簡直太awesome了,攻擊一個區塊鏈系統從來沒有像攻擊IOTA那樣簡單。不需要屯幣,不需要買礦機,我只要搞一臺電腦不停地,每分每秒不停地發交易,讓我的交易佔據全網的50%以上,我就攻擊成功了。
IOTA 大概也意識到了這個問題(被大家抨擊到不得不意識到這個問題)。於是IOTA後面改了,說每筆交易必須算一個 PoW,來防止女巫攻擊帶來的雙花問題的。納尼?說好的無限可擴充套件呢?
有了PoW的IOTA真是妙不可言啊。要知道,IOTA應用場景是物聯網裝置,物聯網裝置跑PoW真是天才的想法啊。所謂的物聯網裝置,就包括現在最火的智慧家居,比如智慧插座,智慧音箱,智慧冰箱等。那什麼樣的物聯網裝置可以把PoW的優勢發揮到淋漓盡致呢?機智的小編我,馬上想到了物聯網智慧電磁爐!我簡直迫不及待想買一個 IOTA 物聯網智慧電磁爐,每次開啟電磁爐的時候,它就開始進行PoW運算,發出的熱量也可以加熱食品。當你的晚飯做好了,一筆 IOTA交易也就發出去了。
不僅如此,這個IOTA電磁爐還能提高烹飪的安全係數。它通過佔滿你家網路的頻寬,讓你上不了網,杜絕你在烹飪的時候因為刷微信刷微博把房子點著。因為在IOTA中,傳送每筆交易時,需要選擇兩筆交易作為父親。這個要求看似簡單,但你需要保證:這兩筆交易的歷史中沒有非法交易,沒有衝突的交易。這需要同步大量的歷史,驗證歷史交易的正確性,處理衝突交易,並且保持與IOTA的DAG最新狀態同步。如果你偷懶不同步,那你的交易可能就因為違反了一些規則被無效掉了。為了重新發起這筆交易,你只好再做一頓飯。
在比特幣中,礦工負責做PoW運算,負責同步、驗證網路交易,並處理衝突,使用者向礦工付交易費。IOTA重新定義了區塊鏈,消滅了交易費,取而代之的是這些事情都得使用者自己來做。當比特幣的使用者坐在餐桌上吃烤鴨的時候,IOTA的使用者還蹲在後廚親自養鴨子。 小C認為,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億次的權重更新,而且這個複雜度會越來越大。
小C有話說
我們需要認清幾個事實。吞吐率有限,是因為網路頻寬有限。PoW的難度高,是為了避免輕而易舉地被 51% 攻擊。交易費的存在,讓專職礦工來解決普通使用者的需求。一個區塊容納多個交易的設計,提高了執行的效率。如果看不到這些背後的原理,卻盲目地去掉限速,去掉交易費,去掉區塊,然後用一個漏洞百出的底層技術,去設計產品方案,去講一個所謂天方夜譚的故事,這樣只會斷送這個專案的未來。
(注:如果代幣是增發的,通脹本質上就是持幣者向礦工付服務費。)
歡迎關注我們的微信公眾號:Conflux中文社群(Conflux-Chain)
新增微信群管理員 Confluxgroup 回覆“加群”加入 Conflux官方交流群