摘要:以太坊是智能合約操作系統的MS-DOS。但是當前的區塊鏈時代將我們帶入了Windows 95 時代。多鏈現在已成為現實。以太坊缺乏可擴展性導致大規模遷移到新一代L1。這些L1 中的大多數使用EVM(以太坊虛擬機),這使得它們與以太坊錢包和開發工具兼容。但是Solana 已經從頭開始…
以太坊是智能合約操作系統的MS-DOS。但是當前的區塊鏈時代將我們帶入了Windows 95 時代。
多鏈現在已成為現實。以太坊缺乏可擴展性導致大規模遷移到新一代L1。這些L1 中的大多數使用EVM(以太坊虛擬機),這使得它們與以太坊錢包和開發工具兼容。
但是Solana 已經從頭開始完全重建了它的堆棧。 Solana 聲稱是現有最快的區塊鏈。所以它引出了一個問題:Solana 比EVM 鏈快多少?
L1 區塊鏈的TVL 增長,圖片來源:The Block
首先,我們需要就如何衡量性能達成一致。自古以來,新的區塊鏈就一直在宣稱它們的性能比以太坊高出多少。這是一種老調常談。你會看到大量的數字和匆忙組合的圖表,比較自我報告的TPS(每秒交易量)。不幸的是,這些TPS 數字通常來自他們自己的營銷材料,而這些材料幾乎都是廢話。
L1 本身發布的大多數基準測試都測量簡單價值轉移的TPS——即,將幣從一個賬戶轉移到另一個賬戶。簡單的轉賬非常便宜,因此會產生龐大的數字,每個人都喜歡龐大的數字。但實際上沒有區塊鏈在這樣的傳輸上遇到瓶頸,而且這種活動並不能反映現實世界的使用模式。
此外,其中許多數字是在開發網絡或測試網絡上生成的,而不是在主網上生成的。我們不關心某人的軟件抽像地可以做什麼:我們關心當前主網上的可能性。
實際上,沒有一種統一的方法來對TPS 進行基準測試。基準測試中經常出現這種情況。這是一個混亂而令人擔憂的領域,充滿了誤導性營銷、過度擬合/“應試教學”和作弊。
好的。那麼我們應該如何實際測量L1 性能呢?
這是一個棘手的問題,因為性能有多個維度。
首先,性能始終是針對去中心化的一個妥協。與主網環境相比,高度中心化的測試網和開發網可以產生難以置信的數字。許多主網在去中心化方面偷工減料,這擠壓了額外的性能。
但是,假設我們想忽略去中心化,只關注性能。好吧,眾所周知,對區塊鏈性能進行基準測試非常困難,因為大多數新鏈的數據可見性都很差。
7 年來,以太坊的性能得到了高度的研究和很好的理解。但是當你開始探索更新的鏈時,它們中的大多數工具都少得多,可觀察性差,而且還在不斷發展。當您閱讀本文時,這些基準可能已經過時了。
此外,基準測試總是隨意的,並且充滿了陷阱。你能做的最好的就是選擇一個衡量有價值的東西的基準,然後儘可能仔細地確定你的結果。這就是我們將在這裡嘗試做的事情。
但是我們所說的性能是什麼意思呢?性能有兩個方面:吞吐量和延遲。
您可以將區塊鏈性能可視化,例如流過管道的水。交易就是水——你希望大量交易同時流過管道。但是管道的長度決定了它的延遲——如果一個交易需要很長時間才能得到確認,即使很多交易可以一次得到確認,那也是不理想的。
延遲可以細分為區塊時間(區塊間隔的時間)和最終確定時間(區塊肯定不會被回滾的時間)。出塊時間和完成時間很容易衡量。
但是要實際測量吞吐量,您需要一個標準的測量單位。什麼的吞吐量?
我們沒有使用代幣轉移,而是查看了以太坊上最耗gas的產品之一:Uniswap V2,並將其變成了一個非常簡單的基準。如果你用Uniswap V2 風格的交易填滿了整個區塊,每秒有多少筆交易可以清算?
我們選擇這個基準是因為1)它簡單且易於測量,2)每個區塊鏈都有一個Uniswap V2 風格的AMM 在生產中,3)它是常見的智能合約使用模式的典型。
對於大多數具有gas模型的區塊鏈,這種粗略的練習應該很簡單。首先,找到區塊gas限制和出塊時間,推導出鏈的gas/sec吞吐量;接下來,找到一個Uniswap v2 風格的AMM 並選擇一筆SwapETHforTokens 等效交易;最後,將第一個數字除以第二個數字,得出如果它的區塊充滿相同的AMM 交易,它將達到多少tx/sec。
注意:這不是一個完美的基準!它是特殊的,它不考慮可並行交易(因為Uniswap 在同一個池上的交易必須是線性化的),並且它不能代表每種使用模式。但智能合約的使用始終是冪律分佈的,並且最常用的Dapps 往往是AMM,因此在一組基準測試中,我們認為這有助於全面了解性能。
因此,事不宜遲,讓我們順著列表往下看。
Uniswap v2 每秒交易數量:平均9.19,最大18.38(由於EIP-1559)
平均出塊時間:13.2 秒(PoW,因此區塊是在Poisson過程中隨機挖掘的)
最終確定時間:66 秒(大約,ETH 區塊不是真正的最終確定)
假設和方法:在1500 萬gas 目標下,即以太坊與EIP-1559 達到平衡時,以太坊每秒可以進行9.19 次交易;在3000萬的gas 限制下,它可以實現每秒18.38 次交易(但如果保持在這裡,費用會成倍增加)。我們將此swapExactETHForTokens 交易用作具有代表性的鏈上一跳交易。假設區塊生產者可以用Uniswap 交易完美地填充1500 萬gas 限制區塊,每筆交易花費123,658 gas,這意味著我們可以將15M/123,658 = ~121.3 個交換放入一個區塊中。如果我們假設區塊每13.2 秒到達一次,這意味著以太坊每秒處理121.3/13.2s = ~9.19 Uniswap v2 swap。
我們將對列表中的其他EVM 鏈使用類似的計算。
(注意:我們忽略了這種方法的Rollup,因為所有智能合約L1 都能夠添加Rollup。)
Ubeswap 每秒交易次數:平均24.93,最大49.86(由於EIP-1559)
平均區塊時間:5 秒
最終確定時間:5 秒(Celo 使用PBFT 風格的協議,可立即完成區塊)
假設:本次swap交易是代表交易、1000 萬gas 目標和2000 萬gas 限制。
Quickswap每秒交易次數:平均47.67,最大95.33(由於EIP-1559)
平均出塊時間:2.5 秒
最終確定時間:Polygon 上有兩種最終性概念
1.概率:這類似於大多數以太坊風格的區塊鏈,其中規範鏈取決於完成的最多工作(最重鏈)。在Polygon 的案例中,Bor 層(即區塊生產者層)的最終確定性取決於難度較高的分叉。
2. 可證明:這類似於Tendermint/IBFT,在規範鏈上的絕對多數簽名。這通過檢查點發生在Heimdall 層(Polygon 的驗證器管理和狀態同步層)。這些檢查點被提交給以太坊。
重組和分叉可以發生在Bor 層,但不能發生在Heimdall。檢查點是Bor 鏈狀態的快照。一旦一個區塊被包含在一個提交的檢查點中,它就不能被重新組織(除非>=1/3 的驗證器集是不誠實的)。檢查點大約每25 分鐘提交一次。
假設:此swap交易代表交易、1500 萬gas 目標和3000 萬gas 限制。
Trader Joe 每秒交易:平均31.65 次,但由於其彈性出塊時間,在最大吞吐量下,Avalanche C 鏈可以處理足夠的gas以達到每秒175.68 次交易。但是,將吞吐量維持在該水平會導致費用成倍增加。
平均出塊時間:平均2 秒(Avalanche 是一種具有彈性出塊時間的無領導者協議:只要支付足夠的最低費用,就可以隨時產生區塊。Avalanche C 鏈曾有過在1 秒內產生>10 個區塊的時期.)
最終確定時間:出塊後約1.75 秒
假設:此swap交易是代表交易,當前800 萬gas限制。
Avalanche 相對難以比較,因為它的區塊生產機制與以太坊和PoS 鏈如此不同。對於Avalanche,它以最大吞吐量執行的操作與以平均吞吐量執行的操作之間存在很大差異。 (像以太坊這樣已經實現EIP-1559 的鏈的平均吞吐量是其平均吞吐量的2 倍。)
PancakeSwap 每秒交易次數:194.60(幣安智能鏈不使用EIP-1559,所以這是一個固定數字)
平均區塊時間:3 秒
最終確定時間:75 秒
假設:這個swap交易是代表交易,8000萬gas限制。
這結束了EVM 區塊鏈的基準測試——其虛擬機以以太坊為模型的區塊鏈。由於所有EVM 鏈都使用相同的gas 模型,我們可以將gas/sec 視為吞吐量的基準。實心條表示目標吞吐量,空心條表示限制。
EVM鏈的Gas/sec
您可以想像您以絕對極限運行EVM,這種情況就是幣安智能鏈(BSC)(現已更名為BNB Chain)發生的。如果你想從智能合約中獲得更高的性能,你將不得不完全遠離EVM。
Orca 每秒交易次數:273.34
區塊時間:590 毫秒
最終確定時間:13 秒(Solana 也發出更快的“樂觀確認”,但這些只能抵抗約4.7% 的損壞。大多數Dapp 都接受這個閾值。)
這是我們計算這個數字的方法。這是一個笨的方法。
我們首先想為Solana 找到一個等效的“gas limit”。你在區塊瀏覽器上找不到任何這樣的數字。我們首先詢問了一些我們認識的Solana 開發人員,但似乎沒有人確切知道是否存在這樣的限制。於是我們捲起袖子踏上旅途,一探究竟。
我們首先了解到Solana 確實有類似gas的東西,稱為計算單位(CU)。從我們與驗證者的對話來看,大多數人似乎認為Solana 驗證是“爭分奪秒地在區塊時間內打包盡可能多的交易”,但實際的限制是每個區塊只能包含4800 萬個CU。
其次,只有有限數量的CU 可在單個區塊中寫入單個帳戶。這個限制是為了防止過多的交易寫入同一個賬戶,從而減少一個區塊的並行性——儘管這正是在大規模擁塞期間發生的事情,例如在流行的IDO 期間,當所有交易都在競爭使用單個合約時。
每個帳戶的限制為1200萬。如果您遵循這個1200萬帳戶CU 限制、主網上590 毫秒的區塊時間以及每次Orca swap的74,408 CU 成本,我們得出的理論限制為273.34 swap/秒。
這個數字似乎低於預期!為了讓我們相信這個數字,我們希望通過經驗驗證這種方法。
為了確認我們正確地測量了它的性能,我們決定直接對Solana 進行垃圾郵件攻擊測試。出於顯而易見的原因,我們不想向主網發送垃圾郵件,因此我們針對Solana 開發網。
請注意,Solana 的開發網運行在較小的集群上,因此比主網具有更快的出塊時間(380 毫秒與主網的590 毫秒),與主網相比,這將提高其性能。給定380 毫秒的區塊時間,我們應該期望開發網每秒清算424.40 次swap。
我們在開發網上向Orca SOL-ORCA 交易對發送垃圾郵件,以查看我們可以在單個區塊中進行多少Orca swap,然後推斷為最大吞吐量。
在開發網區塊高度106784857 中,我們設法實現了184 次Orca swap
我們設法達到的最高數字是單個區塊中的184 次swap。假設區塊時間為380 毫秒,這給我們在開發網上實現484.21 swap/秒。 (請注意,區塊時間並不准確,因此這些數字存在一些偏差。如果您在我們獲得最多交易的3 個區塊中取平均值,它看起來更像是每秒381 次swap,這似乎更合理)。
這似乎證實了我們的分析方法是正確的(約10-15% 的增量),因此這意味著Solana 的主網可能在AMM 上執行大約273 次swap/秒。
當然這只是一次測試運行,所以這是我們的代碼– 我們鼓勵您使用它並與我們分享您的結果。
我們在這裡掩蓋了大量細節,如果沒有我們在Blockdaemon 的朋友的幫助,這一切都是不可能的。如果您想了解執行此操作所需的詳細信息(以及更深入地了解Solana 內部結構),請查看第2 部分,我們將在其中介紹技術細節。
您可能會看到這一切並想知道:但我認為Solana 通常能夠執行3000 TPS?
區塊瀏覽器衡量Solana 的TPS 的方式可能會產生誤導——它將內部共識消息視為交易,這是其他區塊鏈所沒有的。
Solana 大約80% 的吞吐量是共識消息。減去這些,你剩下大約600 TPS,其中大部分是非常便宜的Serum 交易。只要接觸到足夠多的其他合約,Solana 也可以在生產中實現更高的性能。
AMM 測試:Uniswap v2 風格的swaps/秒性能
那麼這一切的結果是什麼?
首先,不要把這當成福音。自己算算。
其次,請記住,所有這些區塊鏈都是移動目標。它們不斷被優化,技術也在迅速發展,而任何基準都是即時快照。我們希望看到更多獨立組織創建標準化基準,但這是我們最好的嘗試。
第三,請注意,這些區塊鏈之間的性能差異並不像宣傳的那麼大。以太坊和最好的鏈之間的性能差異大約是10-25 倍,而不是100 倍或1000 倍。沒有人能從線性化的VM 事務中獲得如此出色的性能。這將需要更多的工作和優化。
第四,如果你想要真正的高性能,你必須放棄EVM。我們在這裡只對Solana 進行了基準測試,但還有其他非EVM L1,例如NEAR 和Terra,它們也實現了更高的性能。
但像Solana 一樣,他們無法從圍繞EVM 的工具和生態系統中受益。 (儘管NEAR 擁有與EVM 兼容的Aurora 分片,並且其他L1 正在嘗試開發類似的虛擬化EVM 實例。)
第五,用戶現在對非以太坊L1 的性能考慮並不那麼敏感。他們更關心生態系統的整體實力、良好的用戶體驗和低費用。這些區塊鏈目前沒有在性能上進行競爭,因為它們實際上都沒有被用於容量,除非在罕見的峰值期間,例如在IDO 或市場崩潰期間。
我們預計所有主要L1 的性能都會隨著時間的推移而提高,因為開發團隊會花費越來越多的時間來調整典型使用模式的性能。毫不奇怪,在早期,這些區塊鏈中的每一個都沒有得到很好的優化!
但總的來說,我的印像是:以太坊是智能合約操作系統的MS-DOS。但是當前的區塊鏈時代將我們帶入了Windows 95 時代。
MS-DOS(左)到Windows 95(右)
下一代區塊鏈代表了顯著的進步,但要達到主流採用還有很長的路要走。
作者:GM 與Haseeb Qureshi,Dragonfly Capital
原標題:《The AMM Test: A No BS Look at L1 Performance》
編譯:DeFi之道