為什麼在以太坊上構建專案註定會失敗
很多人問我,為什麼我們在Stellar協議上構建我們的Token(代幣)專案,而我的回答很簡單。如果,我們在ERC-20標準(以太坊)上構建我們的專案,那麼它就會失敗。事實上,我認為,幾乎所有由以太坊區塊鏈支援的專案都會失敗,原因如下。
那是2017年6月,我和聯合創始人Will在討論用Blockchain還是DLT(Distributed Ledger Technology,簡稱DLT,分散式賬本技術),來解決在零售品牌空間的忠誠度這個大問題。答案是顯而易見的,我們可以擴充套件我們現有的online-to-offline(簡稱O2O,線上對線下)平臺以獲取忠誠度,並利用分散式賬本技術完成了很多工作。
我們接下來的任務是評估現有的區塊鏈,看看哪個是我們可以用來構建專案或解決方案的。顯而易見的選擇是以太坊,因為當時很多專案在廣泛地使用它,圍繞著它有很多炒作,因為他們有支援智慧合約的ERC-20標準。最終,我們決定採用Stellar協議,並且我們為此感到高興,下面是整個過程的總結以及我們如何達到今天的成就。
當時,以太坊對於Blockchain世界來說仍然是新鮮事物,它基本上是一個分散式程式設計平臺(用於自治組織和無主應用軟體的指令碼軟體)。Vitalik Buterin(以太坊的聯合創始人)他自己也說:
“以太坊是個模組化、具有狀態、圖靈完備的合約指令碼編寫系統……我們的目標是為去中心化的應用程式提供平臺。”
現在,如果您打算構建一個真正的去中心化專案,其不具有中央決策制定功能,那麼以太坊是個很好的選擇。但是,大多數區塊鏈公司不需要智慧合約來執行他們的核心業務邏輯或希望規避法律或管轄權問題。他們只想發行數字資產和處理交易。這正是以太坊讓您失望的地方。
如果您在構建一個專案,要發行代幣同時需要快速又低成本地進行交易,那麼,以太坊總是會失敗的。我們的專案涉及發行代幣,這些代幣在交易近乎於實時發生的零售環境中使用,這是個問題。
通過所有從使用者體驗開始的技術專案,並從那裡開始工作,如果使用以太坊區塊鏈,那麼從一開始,我們就會有大麻煩。為了確認這個問題,我們觀察了今年(2018年)4月到5月間進行的測試。所有的結果和方法都可以在ofollow,noindex" target="_blank">GitHub 上找到。
第一個問題:您最熱心的使用者將會有最糟糕的體驗。
以太坊按每個賬戶排隊交易,而礦工不會按等待時間對交易進行優先排序。事實上,鑑於交易擁有相等的gas價格,礦工隨機分配它們。因此,一個活躍賬戶構建了一個交易佇列,而以太坊沒有解決它的機制。對高容量的賬戶,結果就是不斷增加的交易滯後。
以太坊用兩個數字處理交易,一個是交易隨機數(我們稱之為“nonce”)和一個賬戶隨機數,為了清楚起見,我們有時稱之為“計數(count)”。交易隨機數按順序排列賬戶交易;賬戶隨機數在它們中的任意一個被挖出時進行計數。當提交一個帶著其nonce的新交易時,以太坊把這個nonce與當前的計數值進行比較,以決定該做什麼。如果該交易的nonce的值比計數值低,則該交易被忽略。如果nonce值更高些,那麼交易延遲。只有nonce值匹配計數值時,該交易才被移入區塊中。下圖是其工作原理的簡化示意圖:
這實際上與您在速食店或像DMW這樣的政府辦公室看到的“取號”系統類似,同時,這也是防止重放攻擊的相當普遍的做法。
很多其他的區塊鏈也在做類似的事。但是,以太坊的交易到區塊(transaction-to-block)演算法(或者,真的,沒有這個)給在您的DMV視窗中工作的人們出了一條妙計,也即,這些礦工沒有必要對佇列中的下一個數字負責。正如您在下圖中所見的,以太坊挖礦是由少數精選採礦池控制的,四個最大的礦工佔有70%的以太坊雜湊率。
礦工通常對將要接受的交易有自己的標準。很多礦工只接受具有高gas價格(high-gas-price)的交易。有些只接受自己的交易。像這樣的礦工在從您的佇列中取得某些東西之前讓區塊空間不被使用。因此,現在想象一下一個DMW,其中的某些視窗在告訴人們“抱歉,我無法幫忙”,而每秒有更多的人進入等候空間,並且,甚至在您可以和某人交談之前,所有需要幫助的人們都在您的面前。瞧,您對以太坊如何處理交易就有了一些瞭解。
我們不曾料到它是這樣工作的,直到我們嘗試實施Kik的負載規範:480個賬戶,平均每個提交1 txn/分鐘,持續3小時。總共是86400個交易,平均每秒8個。
我們利用ETH的gas加氣站 的標準對gas進行了測試,預計確認時間的中位數大約是30秒,但是,13個小時之後,一半以上的交易沒有進入區塊。我們在13小時50分鐘時停止了測試,50.1%的交易丟失了。(注意:如果您希望檢視我們的工作,可以在我們的GitHub 中找到原始資料。)我們認為,我們已經搞砸了,但是,事情不是這樣的。我們剛建立了很多長佇列,一些傻子一樣的交易已經在那裡無所事事地等了一天。
當您讀到有關“以太坊交易時間”的內容時,公佈的數字幾乎總是單一的、一次性事務。它們不屬於應用程式級別的環境。我們再次進行了Kik測試,以真正確保我們所做的一切都正確,又用了6.9個以太幣,但是,我們得到了幾乎一樣的結果。
這是從這次試驗中獲得的典型經驗,這只是剛好首先是字母數字的賬戶。您可以看到等待時間隨著交易的積壓而增加。
在摘要中討論“結算時間”是一回事。但是,從實際的使用者體驗角度考慮一下上述資料。您的以太坊應用軟體被用得越多,它就越慢。僅僅過了3小時,其交易就要花8個小時來確認。
當然,Kik的測試規範表明,我們應該提交3小時的交易,然後停下來,這就是我們所做的。在現實中,您無法建立停機時間以讓計數趕上來,因此,理論上,交易佇列只是變得越來越糟糕。當然,在實踐中,隨著您的以太坊應用程式變得沒響應,使用者們就會離開,這有助於它趕上來。
這是來自第二個測試的效能分佈。我去掉了最慢的5%,這樣,長尾效應不會影響整個畫面。
作為對比,這是Kik(在Stellar上)運行同樣規範的測量值
我只是從他們的博文中抓取了這張圖,但是我沒有原始資料,因此,我無法在同一張圖中顯示我的資料。但是,利用計算機的“魔力”,我至少能疊加這條曲線。
一切看起來都是可比的,直到您注意到x軸。我們在以太坊上測到的等待時間要長3000倍。簡而言之,就是個排隊問題。
這個效能問題目前是以太坊的基本組成部分。像分片或Casper在理論上是可行的,但是,這些將是複雜的修復,分層疊加在以太坊幾乎最大的複雜性上。像閃電網路(lightning) 這樣的可以依靠比特幣固有的簡單性,而沒有什麼基本回落。摩天大樓通常是建在岩床之上,而不是建在另一座摩天大樓之上,但是,這是很多以太坊擴充套件解決方案所要做的事情。
唯一可靠的效能改進是在gas上花費更多,希望每個賬戶佇列可以更快通過。事實上,我們在那3個小時試驗中這麼做了,我們之所以這麼做,是因為“我們應該盡力做我們能做的來使之工作”的承諾。
之前的兩個測試使用了“標準”以太坊Gas Station的推薦。第三次測試我們使用了“快速”等級(當時約為4 Gwei),在我們的480個賬戶上花了11.8個以太幣。
效能提升了(只是Kik在Stellar上的速度的5百分之一),但是,還是不夠快。形成積壓,並且支付程序在那裡無所事事。
第2個問題:廣泛採用的成本極其高昂
對高階使用者也是這樣。但是,以太坊也不適合另一種形式的採用,您也許看到像Etsy的應用程式,我不知道,不是一些人更深入,而是有很多人時不時地登入。這是因為以太坊應用軟體的每個使用者成本隨著使用者數量的增加而飛速提高,並且,這是為什麼當有人嘗試進行多使用者登入使用以太坊,您就看到價格會飆升70倍之多 。
我們在尋找排隊問題的解決方法時,不經意間捕捉到了這個資料。為了防止交易堆積,我們重構了Kik的規範如下:不是少數賬戶提交大量交易,而是讓一大堆賬戶(28800個)的每一個只進行一個交易。為了堅持最初測試的指導方針(總共8個txn/x),我們在一個小時內提交了這些交易。
奇怪的是,這實際對效能沒有多大幫助。確認時間的中位數是23分鐘,事實上比上面的“快速”測試還要慢。更奇怪的是,我們提交的這第一批交易的其中一些是最後被確認的:
我們知道賬戶佇列不應該是問題。事實證明,我們的交易剛一上線,礦工們的費用就飆升。因此,我們最早按測試之前的“標準”價格提交的交易很快就付不起費用了。它們在低優先順序上徘徊了好幾個小時。
我們發現了以太坊的另一個負強化迴圈。新增使用者馬上就會漲價。在現實中,單位數的增加會降低單位價格。基本上,整個私營部門是建立在“規模經濟”這個理念之上。但是在這裡:每個增量使用者馬上提高了每個使用者的成本。這像是怪異的經濟學。
您可以看到,在我們進行測試的那短短一個小時中,價格爬升了約有6倍之多。
同樣,內建的測試時間限制讓一切看起來比實際更可持續。將該圖外推,把指標放在中間某處。持續兩週穩定使用後,單位使用者成本看上去會是多少?如果是兩年呢?
上述測試每小時的成本是1445美元。當gas的價格較低時,標準速度大約是1Gwei,並且它每秒只能處理8個交易。要進行基本測試,那麼一年的成本是1260萬美元。
如果在實際業務上應用這個成本結構,那麼可以看到,以太坊的費用已經是不可持續的高。例如,Paypal每秒大約處理240個交易。拋開為了能實現這個目標要進行的效能修復,並將我剛才提到的動態提升的價格放一邊。如果PayPal構建於以太坊上並支付我們觀察到的價格,那麼去年他們將在網路上花費3億8千萬美元。那將是他們21%的淨收入,而且,那是在假設可以維持價格不變的情況下。
以太坊的理想版本不適合這個世界上最有利潤的交易業務。那麼實際版本又如何為我們工作呢?
現在怎麼辦?
Vitalik Buterin說過:
“如果你想在不能擴充套件的以太坊上構建去中心化的Uber和Lyft,那是會搞砸的。不可以。”
我建議您看看所引用的這句話的OA" rel="nofollow,noindex" target="_blank">整體情況 ,它表明,以太坊團隊的4個最重要的成員說了我在這裡已經說過的話。當今天高利潤的ICO變成明天的警示故事時,對於處於該生態系統中的每個人都沒好處,大家都知道這一點。
毫無疑問,以太坊社群是區塊鏈中最強大的,沒有Vitalik的願景,很有可能就完全沒有代幣經濟。這不是以太坊的錯,開發人員在問技術人員從來沒有交付的東西。是人們在追逐去年的ICO熱錢,不管什麼是正確的工具。
以太坊的問題始於誤入歧途的企業家。不要成為他們中的另一個。
如果您在構建交易應用程式,該協議將不支援您的使用者所期望的行為。我對以太坊的雄心壯志和複雜性懷有深深的敬意,但是,我把它看作區塊鏈的高階時裝。美麗、錯綜複雜、高大上的概念、高尚。但是,不應該是您拿來用的。
如果您想要無信任、分散式的計算(如果這真是您要構建的),那麼絕對要用它。如果您從未打算實際釋出什麼東西,那麼用以太坊就太對了,另外,如果您能找得到他們的話,問問那些50%多的ICO專案 ,他們賣掉代幣後就消失得無影無蹤 。他們已經擊中了費米悖論中的大過濾器(Great Filter)。像是波多黎各的熒光海灘,就亮了那麼一下。
但是,如果您想建立一個像我們一樣的業務:如果您計劃一個典型的使用者到使用者的服務,不需要把您的業務邏輯繫結在智慧合約上;如果您計劃發行數字資產,以及高容量的交易是您戰略的核心部分的話,那麼選一個為之優化的平臺。像我們所做的,在Stellar上進行構建。
閱讀英文原文:Why Building Projects on Ethereum are Destined to Fail.
感謝杜小芳對本文的策劃和審校。