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

ABMedia
分享
Dragonfly:從 AMM 交易處理效率來看 L1 公鏈究竟誰「快」

(本文經授權轉載自 Foresight News,英文原文請見連結)

相比於單純的 TPS 數據,以 AMM 交易合約為基準來測試 Layer 1 公鏈性能更具公允性。

  • 撰文:DM,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,所以出塊時間滿足 Poisson 分布)
  • 最終確認時間: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 兼容鏈使用類似的計算方式。

(注意:我們忽略了使用 Rollup 方案的情況,因為所有的 Layer 1 智能合約都可以添加 Rollup。)

  • 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 有兩種完成交易的概念
  1. 概率:這類似於大多數以太坊風格的區塊鏈,其中規範鏈取決於完成的最多工作(最重)。在 Polygon 的案例中,Bor 層(即區塊生產者層)的最終確定性取決於難度較高的分叉。
  2. 可證明:這類似於 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 可能持有本文中提及資產的倉位。