在關注性公鏈能問題之餘,我們還需要注意到像交易手續費這種,可能會發展成爲區塊鏈進步的阿喀琉斯之踵的細節設計。

原文標題:《被公鏈們遺忘的加油站 —— DeFi 發展的重大隱患之一》
撰文:Nervos Community

TPS 無法包治百病

在「黑色星期四」的事件發生後,不少公鏈也在各種採訪或文稿中提到了這一問題,分析自己的公鏈項目在性能上大幅優於以太坊,因此在自家公鏈上發展的 DeFi 生態不會面臨和以太坊一樣的流動性危機。

誠然,從以太坊 20 TPS 到現在諸多公鏈 1000-3000 TPS (我們先假設這些公鏈擁有和以太坊相同的安全性,當然這樣的假設多數情況下是站不住腳的),有了近五十到數百倍的提升,交易處理量和交易處理速度都有了顯著提升。

但如果 DeFi 生態的資產和用戶數量通用增長五十到數百倍,試問這些公鏈會處理地比以太坊更好嗎?

要知道我們當前所討論的 DeFi 生態還只是一個襁褓中的孩子,如果 DeFi 是一條正確的道路,我們未來將面臨的是數萬億的資產,數千萬乃至數億級的用戶量。

我想到那個時候,我們需要思考的是一些比 TPS 更深刻的內容。

如果黑天鵝事件註定會發生,我們如何將這一過程處理地更加妥善,通過一些更加完善的規則和流程,讓更多的人儘可能地減少損失,這纔是我們真正需要去思考和改善的內容。

DeFi 「崩潰」 在哪裏?

讓我們先來回顧一下這次 DeFi 系統面臨「崩潰」的來龍去脈:

衆所周知,當前 DeFi 生態大部分都構建在以太坊上,而目前的 DeFi 生態以抵押借貸爲主,佔比超過 70%,3 月 12 日在以太坊價格暴跌之後,繼而引發衆多 DeFi 借貸協議中的抵押品價格迅速下滑,觸及警戒線,進而面臨大規模的清算。

此時,衆多 DeFi 用戶爲了防止資產被清算,就需要進行補倉,也就是向借貸協議中轉入更多的抵押品,擡高抵押率,防止被清算。如果不進行補倉,那麼抵押品就會面臨清算,抵押品將被強制打折拍賣。

這兩者共同造成了以太坊上交易量激增網絡堵塞Gas 價格大幅飆升

交易手續費設計爲何是被公鏈們忽略的 DeFi 發展隱患?

如果你也經歷了「黑色星期四」,我想你會經歷下面兩個非常實際的情況:

情況 1:我想發一筆交易,但是因爲網絡擁堵,交易手續費波動異常,我不知道需要設置多少交易手續費比較合適。設置低了,可能手續費消耗完了交易卻沒有發出去;設置高了,又心疼這白花花的錢。

情況 2:我錢包內有足夠多的資產(USDT,DAI 等等),但是我並沒有足夠多的以太坊(日常使用足矣,但 Gas 價格暴漲時顯然是不夠的),我發現此時我無法完成轉賬,因爲我沒有足夠的以太坊去支付手續費。

此時我可以從別的地方轉入以太坊,但需要支付一筆額外的高昂交易手續費;而如果我的以太坊目前在交易所中,那基本可以放棄了,因爲交易所此時已經禁止提幣了。

交易手續費的設計,可能是我們一直忽略的阿喀琉斯之踵。

阿喀琉斯之踵(Achilles' Heel),原指阿喀琉斯的腳後跟,因是其身體唯一一處沒有浸泡到冥河水的地方,成爲他唯一的弱點。現引申爲致命的弱點,要害。

我們還有解決方案嗎?

情況 1:手續費應該如何計算?

熟悉以太坊的小夥伴應該都知道,在以太坊上轉賬或者執行合約都需要燃燒 Gas,而 Gas 由兩部組成 Gas Limit 和 Gas Price,前者體現了這筆交易消耗了以太坊這臺虛擬世界計算機的資源的量(比如多少 CPU 時間之類),後者體現了這筆交易消耗的資源的量的單位價格(比如每單位 CPU 時間值多少以太幣)。

當然實際是,在一個交易中,真正消耗的 Gas 費不一定是你輸入的 Gas Limit * Gas Price,而應該是 Gas Used By Txn * Gas Price,交易使用的 Gas 乘以 Gas Price。

我們用開車來打個比方,比如你出去旅行一趟,你在車裏面加入了 50 升汽油(Gas Limit),過程中耗油 20 升(Gas Used By Txn),當前油價每升 6 元。

最初顯示你需要支付的燃油費是(50 升 * 6 元每升 = 300 元),然而最終你這次旅行的燃油成本是(20 升 * 6 元每升 = 120 元),因此多餘的汽油費會退還給你。

問題就出現了,在以太坊網絡不太好的時候,轉賬的時候總是會提示 「Warning! Error encountered during contract execution [Out of gas]」 翻譯過來就是合約執行出錯,這是由於 Gas 費設置太低導致的交易失敗,你可能需要調高你設置的 Gas Price 和 Gas Limit。

注意,在以太坊中轉賬失敗時,轉賬金額會退回原賬戶,然而手續費不退

交易手續費設計爲何是被公鏈們忽略的 DeFi 發展隱患?

拿上面開車的例子繼續說,此次旅程應該是需要消耗 20 升汽油,但是你只加了 10 升汽油(Gas Limit),這點汽油不夠你跑完全程,必然是半路拋錨。但是在以太坊中,其實你並非是半路拋錨,而是你會打回原點,這似乎和開車的場景有些不相符合,但你又說不出來問題出在哪裏,這個我們後面再談。

再來看看某著名跨鏈項目在這方面的設計,總體設計和以太坊類似,燃料費因爲會根據每筆交易的執行邏輯而更改,因此在交易發送出去前難以計算。

如果你沒有設置足夠的燃料費,交易會失敗,當然燃料費也不會再退還給你。也就是說,你消耗了這部分燃料費,但是沒有交易成功(這一部分其實和以太坊基本類似)。 但是如果你設置的燃料費設置過高,交易會成功,但高於設定值的燃料費不會退還給你(在以太坊中,多出的燃料費是退還的,可以說從這個角度看此著名跨鏈項目要比以太坊還坑啊)。

這聽上去更瘋狂了。

要是這樣的鏈上發生了擁堵,設置手續費的過程儼然成了一個鬥獸場的遊戲。

我們需要更確定的手續費

通過手續費去進行交易排序,礦工優先打包較高手續費的交易,這無可厚非。

但是我們需要更精確更確定的交易手續費計算方式

以太坊和類似的一些項目出現這種非確定性手續費的原因是因爲,它們將區塊鏈包裝成了一臺世界計算機,將邏輯的計算和執行扔給每一個節點,又因爲採用了 EVM,WASM 等基於 x86 架構的虛擬機,無法在交易前精準地衡量每一步計算所消耗的資源,因此設置了 Gas Limit。

而在 CKB 中,採用的是鏈下計算,鏈上驗證的模式,區塊鏈更像是一個法官,只要這筆交易經過驗證,符合相關規則,交易就可以上鍊。

這也意味着,在交易發出之前,交易前後的狀態變化就是已知的。這樣我們就可以準確的判斷這筆交易在驗證中,需要消耗哪些資源。

另外 CKB 虛擬機採用的是開源的 RISC-V 指令集,它第一個被設計成可以根據具體場景可以選擇適合的指令集的指令集架構,這使得 CKB 虛擬機更像是一個真實運行的 CPU,而非傳統的虛擬機。

關於 RISC-V,在 2019 國際芯片大會(Chips 2019)上,中國工程院院士倪光南展望了開源芯片的前景。

他表示:「未來 RISC-V 很可能發展成爲世界主流 CPU 之一,從而在 CPU 領域形成英特爾(x86)、ARM、RISC-V 三分天下的格局。」

「未來 RISC-V 很可能發展成爲世界主流 CPU 之一。」這與其本身開放、簡約的特點有關。在設計方面,免除授權費用和知識產權風險的完全開源免費。

基於 RISC-V 的 CKB 虛擬機,會將每一步計算操作,轉換爲最最基礎的指令,此時我們只需要爲每一個指令指定特定的需要消耗的資源,這樣我們任何一筆轉賬交易、合約調用都是可以很明確的計算出需要消耗多少資源(這在 CKB 中叫做 Cycles)。

因此在 CKB 上轉賬,只有一個可調節的變量,你只需設置 Gas Prices,而無需在乎 Gas Limit。Gas Limit 這個在以太坊等區塊鏈中是一個變量,而在 CKB 中是一個可提前計算的確定值。

CKB 的交易手續費 = Cycles (交易構造完即爲固定值)* Gas Prices Per Cycle (每個 cycle 的 Gas price)

拿上面開車的例子繼續說,轉賬就像是一場旅行,起點和終點都是確定的,那麼行駛的距離就是確定的,自然耗油量也是確定的,因爲區塊鏈的世界裏,你不會走岔路。

在這個情況下,你只需去考慮加什麼價格的油就好了,加柴油等於開上了拖拉機,加汽油等於坐上了小汽車,加航天用油等於開上了大飛機。只要你 Gas Prices 設置的夠高,礦工們分分鐘把你服務地舒舒服服的

這下就簡單了,如果你想讓你的交易快速被打包,你只需要提高 Gas Prices 即可,出價高的交易自然就排前面,是不是好理解多了。

當 CKB 出現網絡擁堵時會發生什麼呢?

你發送了一筆 Gas Prices 比較低的交易,遲遲無法被打包,此時你只需要再發送一筆交易,設置更高的 Gas Prices,讓後面這筆交易優先被打包即可。

而之前低手續費的交易在節點驗證時,就會失效,這部分交易手續費也就沒有被消耗掉。

當然你根本不用擔心雙花的問題,因爲在你掌握全網 51% 算力前,你還不具備雙花的鈔能力。 一場愜意的旅行,偶遇半路拋錨,需要的是及時的救援,而非打回原點。

情況 2: 什麼可以充當手續費?

目前市面上大部分公鏈發行的原生代幣最主要的實際使用功能都是當作交易手續費,通過交易手續費去捕獲生態價值,但是這一模式能否真正捕獲生態價值,尚未有明確結論。

交易手續費設計爲何是被公鏈們忽略的 DeFi 發展隱患?

而在「對 Layer 2 友好的 Layer1 原生代幣」中,我們發現了這樣的問題,在分層架構下,Layer 2 技術使得大量交易可以在 Layer 2 上快速、高效、低價地執行,勢必會減少 Layer 1 上的交易和手續費。Layer 2 需要 Layer 1 作爲安全保障,但本身的發展卻損害了 Layer 1 的安全性。使用手續費作爲礦工獎勵使得 Layer 1 和 Layer 2 之間變爲零和遊戲。

所以我們認爲 Layer 1 公鏈在切割交易功能到上層後,應拋棄用燃料費作爲主要收費,轉而提供其他的服務 , 並以此作爲原生代幣的新需求,只有這樣纔可以爲代幣注入更多的價值。

這可能聽上去有一些難以理解,我們舉個非常常見的例子,我們想從一個交易所轉一筆 USDT 到另外一個交易所。

我們目前主要有三種選擇 Onmi USDT、ERC20 USDT、TRC20 USDT,你會選擇哪一種呢?

大部分情況下,我們現在可能會選擇 ERC20 USDT,但是如果你用過 TRC20 USDT,你會感覺,真香!零手續,還可以縱享絲滑,誰人不愛。(這裏並非給 Tron 打廣告,單純地陳述事實)

你是不是想說 Tron 不夠安全?

但是你會發現,在資金量不大的時候,我們對安全的需求也並沒有那麼高,「這叫交易結算保證,小傻瓜」一文已經將這個問題闡述的非常清楚了。

回到應該始終堅持安全和去中心化的 Layer1 上(Tron 顯然不在這個定義範圍內),我們該提供什麼樣的手續費服務?

我們需要更多樣的手續費

我們需要提供交易手續費代付服務,需要提供可以使用其他代幣支付交易手續費的服務,以太坊的生態系統顯然已經意識到了這方面的重要性。

Argent 錢包正在將 EIP-1077 的願景落實,在這款錢包裏,沒有傳統的助記詞、加密地址、Gas 燃料費等區塊鏈概念,用戶可以像操作法幣一樣存儲或轉賬加密貨幣。

GSN (TRN)由 EIP-1613 提出,某種程度上是 EIP-1077 的延伸和實現。它允許開發者構建不需要用戶使用 ETH,甚至是錢包的 Web3 應用。它通過允許一個支持 GSN 的智能合約,激勵人們運行中繼節點(「加油站」),暫時代替用戶的交易付費而實現這一點。

gDAI 是一個無需 ETH 轉賬 DAI 的具體用例。gDAI 通過出借用戶資金,並將其 Staking 在 Fulcrum 中獲得收益,所得利息通過 Kyber 網絡和 Uniswap 轉化成 ETH,最終可以用於支付 Gas 費用。

最新版的 imToken 提供使用 USDT 快速充值 ETH 的功能,解決你沒有 ETH 支付礦工費的燃眉之急。

不管使用什麼方法做到無 ETH 燃料轉賬,主要利用的就是「補貼」、「中介」、「生息補償」這三種方法。

但是我們需要清楚地認識到,這些解決方案並沒有改變 ETH 是以太坊網絡唯一的交易手續費代幣這一事實,我們只是通過各種手段來進行掩蓋,包裝罷了。

而且這些解決方案,目前並未在此次的 DeFi 危機中,並沒有起到解決問題的作用。

在 CKB 中,CKB 作爲原生代幣拋棄了對於交易手續費的強綁定,任何一種用戶自定義代幣都可以作爲交易手續費

再進一步,通過 Open Transaction,CKB 上還可以實現:任何人可以用任何用戶自定義代幣替任何人支付交易收費

交易手續費設計爲何是被公鏈們忽略的 DeFi 發展隱患?

這裏就不再展開了,想了解更多關於 Open Transaction 的小夥伴可以 前往這裏 瞭解更多。

在這樣的設計下,你再也不會遇到有幣,卻也無法發送交易的尷尬局面了。

總結

性能瓶頸,確實是當前區塊鏈世界面臨的重大問題之一,但是那些擁有數千 TPS,覺得這樣的性能就已經完全可以解決我們正在面臨的性能問題的公鏈們需要醒一醒了。

目前分層、分片、跨鏈等等都是我們目前正在探索的可以解決擴展性的方向,我們也需要認識到,我們還有很長的路要走。

在關注性能問題之餘,我們還需要注意到像交易手續費這種,可能會發展成爲區塊鏈進步的阿喀琉斯之踵的這些細節上的設計。

交易手續費的確定性和可以任何人使用任意代幣支付手續費等衆多底層組件上的進步,纔是真正能夠 make public blockchain great again 的重要技術之一。

來源鏈接:mp.weixin.qq.com