Findora優化其在EVM層的TPS
編者注:本文是根據Findora的多位工程師的意見撰寫的,并不代表一個人的努力。這是Findora優化其在EVM層的初步成果,不久還會有更多的優化。
介紹
Findora區塊鏈是UTXO和EVM分類帳的組合,通過稱為PrismTransfer的原子橋連接在一起。Findora的目標是通過擴展以太坊隱私來創建一個基于區塊鏈的內置隱私的新金融互聯網。并通過先進的ZK密碼學和SNAKRS來保護公鏈上的交易數據。
因此,雖然隱私是Findora的主要關注點,但可擴展性也必不可少——如果沒有足夠的帶寬,網絡就無法為多個生態系統提供隱私保護。
然而,雖然一些項目追求每秒10,000+筆的交易速度,但現實情況是許多項目并不需要如此高的TPS。絕大多數TVL存在于Ethereum和Bitcoin上,它們的TPS分別約為每秒15和6左右。
因此,高TPS是重要的但不是必要的,尤其是在剛開始。例如,Avalanche的理論TPS為4,500,但實際很少超過9TPS。
在過去的兩個月中,Findora開發團隊成功地將其EVM層的TPS提高了近4倍,達到了150左右——這足以承載它在未來將面臨任何負荷。
大部分優化來自:
并行化TendermintABCI
使用讀寫鎖代替唯一鎖
增強交易檢查邏輯
優化冗余序列化
本文將介紹實現這些優化的科學過程,并重點介紹一些突出的優化領域。希望通過分享我們在過去3個月進行的優化分析、執行和測試的技術細節,使其他使用EVM的團隊可以充分利用我們所作的工作,并復制和擴展我們的成果。
方法論概述
我們相信,測試和提高性能的最佳方法是使用科學的方法:測試環境、分析結果、部署修復程序,然后重復。因此,我們將優化過程分為5個步驟:
測試
測試結果收集
分析
ChatGPT新增隱私選項:金色財經報道,OpenAI周二開始推出新的控件,允許ChatGPT用戶關閉他們的聊天記錄。該公司在一篇博客文章中寫道,在聊天記錄被禁用的情況下發生的任何對話都不會用于訓練OpenAI的模型,也不會出現在“歷史”邊欄中。上個月,ChatGPT的一個漏洞讓用戶可以短暫地訪問其他人的談話記錄,這導致外界對該聊天機器人是否能夠保護用戶隱私的疑慮上升。OpenAI在帖子中寫道:“我們希望這能提供一種比我們現有的選擇退出流程更簡單的方式來管理你的數據。”該公司補充說,用戶可以隨時更改他們的聊天記錄設置。[2023/4/26 14:27:01]
結果分析
更新代碼并再次部署
通過簡化和去除冗余,我們縮短了交易時間,提高了效率。隱私交易比透明交易需要更多的計算能力。盡管網絡必須能夠承載足夠的負荷才能在現實世界的應用中使用,并且可擴展性是一個關鍵目標,但FindoraNetwork仍認為它的重要性次于隱私。
大部分TPS的優化來自快速累積的小改進。例如,團隊通過優化序列化和反序列化過程,減少數據庫讀取和組合功能,提高了大約10TPS。
其他改進,例如改進check_tx函數和刪除冗余內存分配,再次提高了TPS。
潛在的優化領域
總共有10點我們認為可以改進。不過,大多數優化來自以下6點:
改進了主界面中的deliver_tx和check_tx?
減少了數據存儲結構中的持久化操作的次數
優化需要持久數據調用的功能,減少調用次數
為deliver_tx和check_tx頻繁調用的接口優化Vault性能
優化了日志記錄流程
優化讀寫鎖功能
以下四種方法沒有多大成果。前三種是Tendermint的功能,我們團隊對此無所進展。最后一種并不如預期的那樣富有成效:
1.檢查新交易的過程
Web3PRC服務器的處理功能
ABCIcheck_tx的處理功能
火必Q1銷毀了超82萬枚HT代幣:金色財經報道,加密貨幣交易所火必在 2023 年第一季度銷毀了827,226 個 HT 代幣。自4月15日機制啟動以來,累計銷毀幣296,989,226枚。季度通縮率達到0.3826%。交易所總發行量20301萬枚,市場成交161362774枚HT。[2023/4/17 14:08:42]
2.將交易傳輸到驗證器以及區塊鏈上的所有節點的傳輸速度。
ABCI的函數調用功能
3.優化依賴庫的性能
使用高性能替代庫或接口
調整了庫的編譯選項
優化交易速度的工具
在確定哪些地方可以提高性能之前,我們使用了兩個工具來測試網絡性能。大多數優化進來自消除冗余。這兩個工具是:
CLI工具用于模擬交易環境的
pprof-rs用于分析ABCI和Findora節點的CPU使用率
我們將詳細介紹如何部署以及使用它們。
CLI工具
我們編寫了CLI工具來模擬客戶端并方便測試。它允許我們進行交易、制作錢包、編寫腳本等,并且讓我們可以在基本不破壞網絡的情況下進行壓力測試。
通過Prism將原生FRA轉換為智能FRA,并發送到root帳戶
Root帳戶將FRA發送到多個地址,并保存到文件
并行執行以下操作:
隨機生成一批地址,并指定一個endpoint
獲取nonce源
生成一個EVM轉賬交易,并通過send_raw_transaction發送到端點。保存哈希
客戶端增加nonce,生成并提交交易,直到所有目標都發送一個交易。
如果交易失敗的原因不是“mempoolfull”引起的,則會獲得一個新的nonce并重新提交
為了減少服務器沒有響應的影響,在nonce的接口中加入了服務彈性的邏輯
為了減少服務器的“mempoolfull”錯誤和服務器壓力,增加了并行等待同步。
Coinbase首席執行官:預計加密貨幣寒冬將持續12至18個月:8月24日消息,CoinbaseGlobal首席執行官Brian Armstrong表示,他預計加密貨幣寒冬將持續約12至18個月,但也在為可能會持續更久做準備。在比特幣價格今年來累計下跌近55%之際,Coinbase第二財季凈虧損10.9億美元,而上年同期的凈利潤為16.1億美元。道瓊斯市場數據顯示,今年迄今為止,這家加密貨幣交易所平臺的股價下跌逾70%。Armstrong周二接受CNBC采訪時表示,市場低迷對該公司來說“并不罕見”。他說,作為一家公司,我們已經經歷了四個這樣的周期,而我們只有10年的歷史。這一次只是恰好趕上了更廣泛的宏觀經濟環境下行。
Armstrong稱,Coinbase正在尋求降低與營銷、外部供應商和AmazonWebServices相關的成本。[2022/8/24 12:46:03]
Pprof-rs和CPU分析
“CPUProfiling”是指我們用來測試和調優Findora網絡性能的工具。我們提出了一個迭代過程,允許我們在不破壞網絡的情況下對網絡進行壓力測試,以查看哪些功能可以優化。
用于進一步研究和找出Findora瓶頸的主要工具是pprof-rs。Pprof-rs是一種流行的測試Rust程序CPU使用率的方法。
如何使用Pprof-rs
我們在abciappcrate中導入了pprof-rs,并啟用了火焰圖功能。pprof-rs被編譯成abcid。有了這個,分析器可以按指定的頻率對adcid中的操作上下文進行采樣。
在abcid過程中,我們主要使用以下接口進行分析。
1.使用ProfilerGuardBuilder啟用分析器,并將頻率設置為100。
2.將分析結果保存為火焰圖。
3.因為abcid是一個持久進程,所以分析器可以通過以下方法停止:
Pprof-rs的工作原理
分析器將按給定頻率暫停程序,并采樣程序的堆棧跟蹤。采樣數據存儲在哈希圖中。在采樣中,分析器掃描每個堆棧幀,并累積存儲在哈希圖中的計數。
安全團隊:Slope Wallet (Android, Version: 2.2.2)的sentry服務存在私鑰泄露:8月4日消息,慢霧發布對 Solana 攻擊事件的分析,據 Solana 基金會提供的數據,被盜用戶種約 60% 使用 Phantom、約 30% 使用 Slope,其余使用 Trust Wallet、Coin98 Wallet 等,IOS 和 Android 均未能幸免。
在分析 Slope Wallet (Android, Version: 2.2.2) 時,發現其使用了 sentry 的服務。Sentry 是一項廣泛使用的服務,在“o7e.slope[.]finance”上運行。Sentry 的服務從 Slope 錢包中收集助記詞和私鑰等敏感數據,并在創建錢包時將其發送到 https://o7e.slope[.]finance/api/4/envelope/,并發現 Version:>=2.2.0 包中的 sentry 服務會收集助記詞發給“o7e.slope[.]finance”,而 Version:2.1.3 則沒有找到收集助記詞或私鑰的明顯行為。Slope Wallet(Android, >= Version: 2.2.0) 于 06/24/2022 之后發布,所以 Slope 該日期之后的用戶受到影響。
對于另外 60% 的使用 Phantom Wallet 用戶,分析 Phantom(版本:22.07.11_65)錢包后發現,Phantom(Android,版本:22.07.11_65)也使用 sentry 服務收集用戶信息,但目前沒有發現任何明顯的收集助記詞或私鑰的行為。[2022/8/4 2:58:18]
然后,采樣數據可用于生成火焰圖或其他形式來表示網絡性能。
當ProfileGaurdBuilder啟動分析器時,它將向SIGPROF注冊一個信號處理程序和一個用于暫停主程序的計時器。當觸發SIGPRO時,將調用處理程序對堆棧跟蹤進行采樣。這個過程由backtracecrate來執行。
使用Pprof-rs分析Findora全節點
首先,了解我們的區塊鏈和Tendermint共識引擎的結構是很重要的。
烈酒廠商百加得旗下手工釀酒廠“Angel’s Envy”進軍元宇宙:6月8日消息,全球最大的家族私有烈酒廠商百加得有限公司(Bacardi Limited)旗下一家位于美國肯塔基州的手工釀酒廠Angel’s Envy已經進軍元宇宙,這可能是烈酒首次進入該虛擬世界。
Angel’s Envy剛剛花費820萬美元完成了總部擴建工程。新總部已經在元宇宙進行復刻,并將舉辦一場活動來慶祝“National Bourbon Day”。從6月14日到20日,元宇宙中的粉絲們可以參加一系列挑戰,解鎖免費的NFT可穿戴裝備,并且還會得到出席證明協議代幣。(BeInCrypto)[2022/6/8 4:10:42]
在ETH全節點中,Tendermint進程通過socket與ABCI進程通信。ABCI應用程序默認注冊以下接口:
Begin_block
Check_tx
Deliver_tx
End_block
Commit
它還為Web3RPC服務器提供了以下接口,Web3客戶端可以通過這些接口執行測試:
eth_sendRawTransaction
https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendrawtransaction?
eth_getTransactionCount
https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount?
eth_getTransactionReceipt
https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactionreceipt?
該圖顯示了ETH全節點的基本工作流程。全節點是收集新交易并重放新交易的節點,是所有交易的入口和檢查點。通過對全節點的ABCI進行剖析,我們可以獲得關于鏈性能的完整數據。
在分析abcid之前,我們將Tendermint的ABCI并行化為兩個線程,而不是單個線程。它允許全節點同時為新交易調用check_tx函數并重播新生成的塊。此次升級后,全節點的CPU平均分配。因此,每個區塊的交易數量在3000左右,減少了出塊時間。
我們還測試了只有一筆交易的區塊的時間成本。主要測試函數是:
begin_block
deliver_tx
commit
end_block
除deliver_tx函數外,其他函數僅在一個塊中被調用一次。當一個區塊中的交易較少時,調用這四個函數的計數很小很小而且很接近。
對于包含很多交易的區塊,除了deliver_tx,其他三個函數的時間成本都很小。
根據修改和測試結果,我們得出結論:check_tx和deliver_tx函數占用全節點的大部分CPU。
為了得出這個結論,我們在每個塊的開頭啟動分析器。然后我們保存分析火焰圖,并在下一個塊之前停止分析器,以免影響全節點的性能。為此,我們使用了兩個全局變量:
原子布爾變量用于確定是啟動還是停止分析器
一個變量用于存儲正在運行的profileGuard
pprof-rs不提供停止分析器的接口。我們通過轉移ProfileGuard的所有權來停止分析器并釋放數據。
在停止分析器之前,可以將采樣數據作為火焰圖文件存儲在分類帳目錄中。
出于測試目的,我們添加了兩個RPC。一個用于啟用/禁用分析器。
另一個用于檢索火焰圖文件中生成的分析數據存儲。
第1步:開始測試
我們的測試是由使用CLI工具調用feth的腳本來執行的。在選擇一個全節點進行測試后,我們通過子命令fund將FRA轉移到2000個測試賬戶:
fethfund—networkhttp://dev-qa01-us-west-2-full-001-open.dev.findora.org:8545?—amount2000—redeposit—load—count2000
然后,我們開始向全節點發送交易。每個帳戶的并行度、超時和交易計數都是可配置的。例如
feth—networkhttp://dev-qa01-us-west-2-full-001-open.dev.findora.org:8545?—max-parallelism300—timeout100—count10
第2步:收集測試結果
有四種方法可以收集測試數據并分析它們。
我們可以使用Blockscout手動監控測試結果和塊。這個過程讓我們可視化塊來評估性能。
我們從Web3RPC中獲取性能數據。首先,我們可以使用接口eth_getBlockByNumber來獲取目標塊。然后,我們可以通過交易數組的長度得到實際的交易數。只能從此接口檢索有效交易。對于區塊時間,我們可以通過相鄰塊的時間戳之間的差異來計算它。
TendermintRPC:與Web3RPC類似,我們使用curl、jq等工具來檢索交易數量和區塊時間。這個RPC為我們提供了打包在塊中的所有交易的數量。注意:Web3RPC和TendermintRPC有時都會出現“無響應”問題。
Tendermint日志:為了更方便地檢索、保存和分析測試數據,我們在feth中使用了子命令etl。有了這個,該命令可以解析fullnode的日志,并將其保存到redis數據庫中。如下圖所示,出塊時間、總交易數、有效交易都可以通過全節點重放出塊過程中產生的terdermint日志進行解析。
第3步:分析測試結果
一旦我們得到測試結果,我們就會對結果進行分析或可視化,以便我們可以迭代代碼。分析是其中一個步驟,我們可以發現是什么占用了CPU和時間,并尋找優化的方法。
我們在feth中添加了一個啟用分析器的子命令。例如:
在下一個塊中啟用分析器
fethprofiler—networkhttp://dev-qa01-us-west-2-full-001-open.dev.findora.org:8669–enable
生成火焰圖并停止分析器
fethprofiler—networkhttp://dev-qa01-us-west-2-full-001-open.dev.findora.org:8669?
這個火焰圖展示了一個CPU函數所花費的時長。時間越長,函數就越長,因此通過查看長條圖形,我們可以知道哪些過程需要優化。
第4步:重新部署代碼?
代碼更新后,我們使用Jenkins將其部署到測試環境中。
為優化Findora所做的更改
根據我們的測試,以下是我們已經實施或將要實施的一些更改,以提高Findora的EVM層TPS。
將內存池設置為8k
通過測試,我們發現為了提高全節點的穩定性并確保生成塊不會花費太長時間,內存池的最佳大小是8,000。我們希望盡快更新主網上的內存池。
并行TendermintABCI
并行化TendermintABCI以便可以同時執行check_yx和Deliver_tx,這是我們發現的另一個可改進之處。這也有助于防止堵塞時間過長。但這并不能顯著提高TPS,因為交易是均勻分布的。
減少序列化/反序列化
通過結合SDK中打包的帳戶中的一些函數來減少數據庫讀取和反序列化。
通過這種優化,TPS提高了大約10txn/s。
刪除不必要的檢查
函數check_tx和Deliver_tx使用相同的邏輯來處理交易,唯一的區別在于上下文。但是對于check_tx函數,它不需要PendingTransactions、emit、events等邏輯。因此,我們可以通過上下文將這兩個函數分開。TPS已提高到79.2txn/s。
重構SessionCache
在之前的執行中,cur和base之間用了大量的內存copy/allocation.deallocation來執行一個交易。
通過減少這些操作的次數,TPS達到了149txn/s。
避免打印冗余日志
我們刪除了數百個不必要的日志。這些日志可以重新打印用于調試,但不會在主網上自動打印。
未來優化點
根據火焰圖,我們在未來還可以做兩件事。
Recover_signer函數
secp256k1_ecdsa_recover函數在recover_signer函數中占用了大量時間。這個secp256k1_ecdsa_recover函數的核心部分是libsecp256k1:recover,它的crate接口花費的時間最多。
我們可以考慮優化這個庫,用另一個高性能庫替換它,或者減少調用。
適用于EVM的Findora后端
這部分占據了整個交易過程的很大一部分,但是我們仍然找不到優化的地方。未來我們可能需要對這部分進行更多的測試和分析。
結論
提高TPS是一個迭代過程,我們一直在尋找新的方法來擴容。雖然我們想要保持競爭力,但我們更愿意相信在Web3中合作才能使整個行業強大。因此,我們很樂意分享我們的優化過程,以幫助其他團隊,并獲得建設性的反饋。希望此次分享可以幫助到EVM環境中的其他團隊,以便他們提高自己的TPS。
來源:金色財經
編輯切換為居中 添加圖片注釋,不超過140字經過數月的市場調整,比特幣、以太坊等主要加密貨幣的價格現已恢復穩定。這導致交易者和投資者對這些貨幣的興趣激增,他們似乎不愿出售所持資產.
1900/1/1 0:00:00上一輪牛市中,我們曾見證了Layer1賽道的大爆發。在以太坊生態價值持續外溢的大背景下,從BSC到Solana,再到Avalanche、Fantom、Near、Harmony甚至是Terra,各.
1900/1/1 0:00:00撰文:NaimishSanghvi? 編譯:星球日報 8月18日,推特用戶Cirrus指出,大量用作抵押品的BoredApeYachtClub?NFT??接近BendDAO的清算點.
1900/1/1 0:00:00去中心化互聯網的使用需求隨著區塊鏈的普及日漸突顯,除了專注于解決性能問題的以太坊和二層解決方案,新一代的底層基礎設施同樣極具爆發力.
1900/1/1 0:00:00文章要點: dYdX離開StarkWare的主要原因:Stark技術開發周期長,L2解決方案sequencer/prover網絡去中心化還需要時間,為了可組合性.
1900/1/1 0:00:00什么是TheMerge TheMerge代表了以太坊的現有執行層與新的PoS共識層信標鏈的結合。它消除了對能源密集型采礦的需求,而是使用質押的ETH來保護網絡.
1900/1/1 0:00:00