原標題:從AMM 交易處理效率來看L1 公鏈究竟誰「快」

撰文:GM,Dragonfly Capital 研究員

編譯:iambabywhale.eth

多鍊格局已經成為了現實。以太坊缺乏可擴展性導致眾多應用及流量遷移至新一代的Layer 1 公鏈。這些新公鏈大多兼容EVM,也使得其與以太坊錢包和開發工具兼容,但這其中選擇從頭重建堆棧的Solana 是一個例外。 Solana 一直被市場認為是最快的區塊鏈,那麼問題來了:Solana 究竟比EVM 兼容鏈要快多少?

在回答這個問題之前,首先我們需要確定一個衡量基準。新公鏈總是喜歡宣稱自己的性能比以太坊高出多少多少,你會看到亂七八糟的數字、匆忙趕製的圖表以及比較主觀的TPS 數據。而這些通常來自於營銷材料的TPS 數據,幾乎都是胡說八道。

大多Layer 1 公鏈本身公佈的TPS 測試基準幾乎都是基於簡單的轉賬—— 即將代幣從一個賬戶轉移到另一個賬戶。簡單的轉賬很便宜,所以就會產生很高的TPS,但事實是沒有哪個區塊鏈會在代幣轉賬上出現瓶頸,而且簡單轉賬並不能真實地反應用戶使用該公鏈的情況。除此之外,這些數據很多時候來源於開發者網絡或測試網絡而不是主網,總之我並不關心這條鏈理論上能做到什麼程度,我只關心當下實際的情況。

實際上,對公鏈TPS 的測試沒有一個統一的基準,但所有與「基準」相關的事似乎都是很混亂的,充滿了誤導性營銷、欺詐以及單純為了滿足「基準」這樣的情況。

所以,我們究竟應該如何衡量Layer 1 公鏈的表現呢?

這個問題有些棘手,因為性能包含了多個維度。

首先,性能始終需要與去中心化進行權衡。高度中心化的測試網和開發者網絡相比主網可能可以產生很高的數據,於是很多主網通過犧牲去中心化程度「擠壓」出了更高的性能。

但是假設我們忽略去中心化,只關注性能,依然難以對區塊鏈性能進行測試,因為大多數新公鏈的數據可視性都很差。

7 年以來,以太坊被人們深入研究和理解,而相比之下大多數新公鏈的鏈上工具很少且數據可視性差,同時它們也在不斷發展,可能在你閱讀這篇文章的時候,這些基準已經過時了。

此外,基準總是很隨意卻又陷阱重重,你最好的選擇就是去以一個有價值的東西作為衡量基準,然後儘可能謹慎地確認你的結果。這就是我們嘗試去做的事情。

我們所謂的性能包括兩個方面,吞吐量和延遲。

你可以將區塊鏈性能可視化,例如流過管道的水,交易就是水,你希望大量交易同時流過管道,但管道的長度決定了延遲,也就是說如果一個交易需要很長時間才能被執行,哪怕被執行之後可以立刻被確認,也是不理想的。

延遲可以細分為區塊時間(兩個相鄰區塊的出塊間隔)和最終確認時間(區塊確定不會被回滾的時間),這兩個變量很容易衡量。

但是要實際測量吞吐量,你需要一個基準的測量單位即「做什麼的」吞吐量。

我們沒有使用代幣轉賬,而是使用以太坊上Gas 消耗最高的產品之一:Uniswap V2,將其作為基準。如果你使用Uniswap V2 上代幣交易類型的交易來填滿區塊,每秒可以有多少筆交易被確認?

我們選擇這個基準的原因是:1)它簡單且易於測量;2)每個區塊鏈上都運行這一個Uniswap V2 風格的AMM;3)它是常見的智能合約使用模式的典型。

對於大多數具有Gas 模型的區塊鏈,該方案的實操難度並不高:首先找到區塊Gas 上限和出塊時間,推導出鏈的Gas / 秒吞吐量。然後找到一個Uniswap V2 風格的AMM 並進行等價的SwapETHforTokens 交易,獲得每筆交易消耗的Gas 數據,使用第一個數據除以第二個數據就能得出如果其區塊被類似的AMM 交易填滿,可以實現每秒多少筆交易。

這並不是一個完美的基準,因為它沒有考慮並行交易(Uniswap 在同一個池子裡的交易是線性的),並且它也不能代表所有使用方式。但智能合約的使用是符合冪律分佈的,並且最常用的DApp 往往是AMM。因此在一組基準測試中,我們認為該方案有助於全面了解性能。

事不宜遲,我們挨個來看:

Uniswap V2

每秒交易量:平均9.19,最大18.38(因為EIP-1559)

平均出塊時間:13.2 秒(PoW,所以出塊時間滿足泊松分佈)

最終確認時間:66 秒(大約的時間,以太坊區塊無法完全被最終確認)

假設和方法:在與EIP-1559 達成平衡的1500 萬Gas 的上限下,以太坊每秒可進行9.19 次交易;在3000 萬Gas 上限下,可以實現每秒18.38 次交易(但如果保持這個狀態,費用將成倍增加),我們使用swapExactETHForTokens 交易作為基準。假設礦工可以用Uniswap 交易完美地填充1500 萬Gas 上限的區塊,每筆交易花費123658Gas,這意味著我們可以將1500 萬/ 123658 數學公式: $ \approx $121.3 個交易放入單個區塊,假設每13.2 秒出一個塊,就意味著以太坊每秒可以處理121.3/13.2 數學公式: $ \approx $9.19 次Uniswap V2 交易。

我們將對列表中的其他EVM 兼容鏈使用類似的計算方式。

Ubeswap

每秒交易:平均24.93,最大49.86(由於EIP-1559)

平均出塊時間:5s

完成時間:5 秒(Celo 使用PBFT 機制的協議,可立即完成區塊)

假設:本次交易具有代表性,目標Gas 1000 萬,Gas 上限為2000 萬。

Quickswap

每秒交易:平均47.67,最大95.33(由於EIP-1559)

平均出塊時間:2.5s

最終完成時間:Polygon 有兩種完成交易的概念

概率:這類似於大多數以太坊風格的區塊鏈,其中規範鏈取決於完成的最多工作(最重)。在Polygon 的案例中,Bor 層(即區塊生產者層)的最終確定性取決於難度較高的分叉。

可證明:這類似於Tendermint/IBFT,在規範鏈上的絕對多數簽名。通過檢查點在Heimdall 層(這是Polygon 的驗證器管理和狀態同步層)上進行。這些檢查點被提交給以太坊。

重組和分叉可以發生在Bor 層,但不能發生在Heimdall 層。檢查點是Bor 鏈狀態的快照。一旦一個塊被包含在一個提交的檢查點中,它就不能被重新組織(除非數學公式: $ \geq $1/3 的驗證器節點是不誠實的)。檢查點大約每25 分鐘被提交一次。

假設:本次交易具有代表性,目標Gas 1500 萬,Gas 上限為3000 萬。

Trader Joe

平均每秒交易31.65 次,但由於其彈性出塊時間,在最大吞吐量下, Avalanche C 鏈可以處理足夠多的Gas 以達到每秒175.68 次交易。但是,將吞吐量維持在該水平會導致費用成倍增加。

平均出塊時間:平均2 秒(Avalanche 是一種具有彈性出塊時間的協議:只要支付足夠的最低費用,就可以隨時產生區塊。Avalanche C 鏈曾有過在1 秒內產生超過10 個區塊的階段。)

最終完成時間:出塊後約1.75 秒。

假設:本次交易具有代表性,當前Gas 上限為800 萬。

Avalanche 相對難以比較,因為它的區塊生產機制與以太坊和PoS 鏈很不一樣。 Avalanche 以最大吞吐量執行的操作與以平均吞吐量執行的操作之間存在很大差異(像以太坊這樣已經實現EIP-1559 的鏈的平均吞吐量是其平均吞吐量的2 倍)。

PancakeSwap

每秒交易次數:194.60(幣安智能鏈不使用EIP-1559,所以這是一個固定數字)

平均出塊時間:3s

最終完成時間:75s

假設:本次交易具有代表性,當前Gas 上限為8000 萬。

以上就是各個EVM 兼容鏈的基準測試。由於所有的EVM 鏈都使用相同的Gas 模型,我們可以將Gas / 秒視為吞吐量的基準。下圖中實心條表示目標吞吐量,空心條表示吞吐量的上限。

由此看來EVM 性能的天花板就是BSC(現改名為BNB Chain),但如果你需要更高性能的智能合約,EVM 可能就不適用了。

Solana

每秒交易次數:273.34

出塊時間:590 毫秒

最終確認時間:13 秒(Solana 實現了一種更快的「optimistic confirmations」模式,只需要作惡的驗證者不超過大約4.7%,大部分DApp 都接受這個閾值)

下面解釋一下我們如何計算這些數值,這次有點複雜。

我們首先想為Solana 找到一個等效的「Gas 上限」。你在區塊瀏覽器上找不到任何這樣的數值。我們首先詢問了一些我們認識的Solana 開發人員,但似乎沒有人確切知道是否存在這樣的限制。於是我們捲起袖子踏上了一探究竟的旅途。

我們首先了解到Solana 確實有類似Gas 的東西,稱為計算單元(CU),這裡是他的定義。從我們與驗證者的對話來看,大多數人似乎認為Solana 驗證是「爭分奪秒地在區塊時間內打包盡可能多的交易」,但實際的限制是每個區塊只能包含4800 萬個CU 。

其次,只有有限數量的CU 可在單個塊中寫入單個帳戶。這個限制是為了防止過多的交易寫入同一個賬戶,從而減少一個塊的並行性—— 儘管這正是在大規模擁堵期間發生的事情,例如在流行的IDO 期間,當所有交易都在為使用單個合約競爭時。

每個帳戶的限制為12M。如果您遵循這個12M 帳戶CU 限制、主網上590 毫秒的區塊時間以及每筆在Orca 上的交易成本為74,408 CU,我們得出的理論限制為273.34 交換/ 秒。

這個數字似乎低於預期!為了讓我們相信這個數字,我們希望通過經驗驗證這種方法。

為了確認我們正確地測量了它的性能,我們決定直接對Solana 進行垃圾郵件攻擊測試。出於顯而易見的原因,我們不想向主網發送垃圾郵件,因此我們針對Solana 開發網。請注意,Solana 的開發網運行在較小的集群上,因此比主網具有更快的出塊時間(380 毫秒),與主網相比,這將提高其性能。給定380 毫秒的阻塞時間,我們應該期望開發網每秒確認424.40 筆交易。

我們在開發者網絡上向Orca SOL-ORCA 交易對發送垃圾郵件,以查看我們可以在單個區塊中進行多少Orca 交易,然後推斷為最大吞吐量。

我們設法達到的最高數據是單個區塊中的184 次交易。假設出塊時間為380 毫秒,我們得出在開發者網絡上484.21 筆交易/ 秒的數據。 (請注意,出塊時間並不准確,因此這些數字存在一些偏差。如果您在我們進行最多交易的3 個區塊中取平均值,它看起來更像是每秒381 次交易,這似乎更合理)。這似乎證實了我們的分析方法是正確的(約10-15% 的增量),因此這意味著Solana 的主網可能在AMM 上執行大約273 次交易/ 秒。

當然這只是一次測試運行的結果,這是我們的代碼—— 我們希望您也嘗試一下並與我們分享您的結果。

這裡我們隱去了大量細節,如果沒有我們在Blockdaemon 的朋友的幫助,這一切都是不可能實現的。如果您想了解執行此操作所需的詳細信息(以及更深入地了解Solana 內部結構),請查看第2 部分,我們將在其中介紹技術細節。

可能你看到這些的時候會疑惑,Solana 的TPS 不是3000 嗎?

區塊瀏覽器衡量Solana 的TPS 的方式可能會產生誤導—— 它將內部共識消息視為交易,這是其他區塊鏈所沒有的。 Solana 大約80% 的吞吐量是共識消息。減去這些,TPS 數值約為600,其中大部分是在Serum 上非常低成本的交易。但就算各種其他的合約,Solana 在性能上依然有著很大的優勢。

那麼這一切的結論是什麼?

首先,不要覺得這些數據都是對的,可以自己算一算。

其次,請記住,所有這些區塊鏈都是在發展的。它們不斷被優化,技術也在迅速發展,而任何基準都是「即時快照」。我們希望看到更多獨立組織創建標準化基準,本文提出的基準已經是我們能想到最好的方案了。

第三,請注意,這些區塊鏈之間的性能差異並不像宣傳的那麼大。以太坊和最好的鏈之間的性能差異大約是10-25 倍,而不是100 倍或1000 倍。沒有人能從線性化的虛擬機事務​​中獲得如此出色的性能。未來可能需要更多的工作和優化。

第四,如果你想要真正的高性能,你必須放棄EVM。我們在這裡只對Solana 進行了基準測試,但還有其他非EVM Layer 1 公鏈,例如NEAR 和Terra,它們也實現了更高的性能。但與Solana 一樣,他們無法從圍繞EVM 建立的工具和生態系統中受益。 (儘管NEAR 擁有與EVM 兼容的Aurora ,並且其他Layer 1 公鏈也正在嘗試開發類似的虛擬化EVM 實例。)

第五,用戶現在對非以太坊Layer 1 的性能並不那麼敏感。他們更關心生態系統的整體實力、良好的用戶體驗和低費用。這些區塊鏈目前沒有在性能上競爭,因為實際上它們的容量上限都沒有被觸及,除非在罕見的峰值期間,例如IDO 或市場崩潰。

我們預計所有主要Layer 1 公鏈的性能都會隨著時間的推移而提高,因為開發團隊會花費越來越多的時間來調整典型使用方式的性能。這些區塊鏈中的每一個在早期都沒有得到很好的優化。

但總的來說,我的印像是:以太坊是智能合約操作系統的MS-DOS。但是當前的區塊鏈時代將我們帶入了Windows 95 時代。

下一代區塊鏈展現出了明顯的進步,但離被主流接受還有很長的一段路要走。

披露:Dragonfly Capital 可能持有本文中提及資產的倉位。

原文鏈接:

https://medium.com/dragonfly-research/the-amm-test-a-no-bs-look-at-l1-performance-4c8c2129d581