為什麼最近 Solana 上的交易常常會失敗而且還很雍塞?

Kyle
分享
為什麼最近 Solana 上的交易常常會失敗而且還很雍塞?

近期許多用戶在 Solana 網路上提交的交易常常失敗且雍塞,研究員 @nishil 針對此議題作出科普的說明,指出源自於網路層 QUIC 協議的設計問題,並表示許多開發者已經在著手改善此問題。

背景知識:Solana 網路現況

Solana 網路用戶交易失敗率超五成

在 Solana 網路上提交的交易,通常會有三種結果:

  • 交易成功被執行
  • 交易被執行卻失敗
  • 交易遺失

其中,自去年 11 月以來,Solana 的交易失敗率一直維持在 50% 左右,也就是有一半的交易結果是第二或是第三種情況。

廣告 - 內文未完請往下捲動
Solana 網路用戶交易失敗率

不過這兩種失敗情況仍有差異需要釐清。

交易被執行卻失敗:交易條件改變、機器人套利

交易被執行卻失敗的原因,通常是因為執行條件改變而不符合該交易的執行需求。例如鑄造一個已經被搶先鑄造完的 NFT,或者是交易滑價超過設定最大值等等。這失敗原因在其他區塊鏈網路也很常發生。

而 Solana 網路因為費用便宜,因此充滿大量的套利機器人與垃圾交易資訊。為了套利,機器人會大量釋出多個交易內容,很容易因為執行條件改變而失敗,也就是搶輸其他機器人。根據數據,這種套利機器人發起的交易失敗率達 98%。

Solana 網路中套利交易失敗率為 98%

不過這些機器人的交易失敗,並不是影響 Solana 用戶本次使用體驗糟糕的主因,因此也不是本文要討論的重點。用戶提交的交易失敗原因來自上述的第三種情況 — 交易遺失。

交易遺失:因為網路層設計

交易遺失的問題正是造成 Solana 網路上用戶交易頻頻失敗的主因。交易遺失代表該交易沒有成功傳遞給出塊者,該角色在 Solana 生態被稱為區塊領導者 (block leader),負責在該 slot 接收並執行交易內容。

@nishil 表示造成 Solana 網路上交易遺失的原因出自於網路層,而非共識層或是執行層,跟區塊鏈技術較無關。

網路層是網路的通訊層,用於將資料包傳輸。例如 TCP、UDP、QUIC 等協議。Solana 網路近期為了避免區塊領導者短時間內接收太多交易需求而當機,將網路層通訊協議改為 QUIC。

HTTP 與 QUIC 傳輸協議差異示意圖

QUIC 使區塊領導者能夠根據特定需求,停止某些用戶的連線,或是對其進行傳輸速率限制,可以降低高峰使用期間的網路當機風險 (雖然會降低網路運行效率但總比當機好)。

不過由於「選擇要限制哪一個客戶端連線的邏輯」目前設定的很差且存在錯誤。Solana 目前的做法是隨機丟棄交易,而不是按照特定的標準丟棄交易,例如丟棄所有費用低於 x 的交易。

這會造成用戶發送更多垃圾交易。為了要讓交易可以被成功執行,會鼓勵用戶發起大量的交易,但這麼作同時就會讓失敗率再次被提升,且網路會變得更雍塞,造成惡性循環。

為了提升交易被選中的機率,機器人在 Solana 網路上批次發送大量交易,使得用戶的交易被成功執行的機率更低

最後,因為 Solana 網路的設計並沒有 mempool,因此被丟棄的交易就遺失,進而導致交易失敗。

展望未來

目前生態主要的客戶端團隊包含 Firedancer、Anza 與 Solana 官方,都已經在著手處理此問題,預計這問題將在未來幾週內得到解決,不過仍然需要看更新後的執行狀況決定。且還是需要解決因為調整傳輸機制造成的雍塞問題。

另一方面,Solana 仍然有因為燃料費用便宜而充斥垃圾交易的問題需要解決。

推薦閱讀:機構分析 Solana 四項技術發展:SOL 生態確實變得更好了
推薦原因:該文章說明 Solana 近期與用戶體驗較相關的技術發展,其中也有涵蓋關於燃料費用便宜導致大量垃圾交易的解決方案,可對於 Solana 近年發展更有掌握。

或許這些問題解決後,將可以看到真正穩健的 Solana 網路,不過似乎還有許多工作需要完成。