Solana Web3.js 2.x版本重大升級 功能拆分與性能優化

robot
摘要生成中

Solana Web3.js 2.x 版本:功能拆分與性能優化

Solana Web3.js 作爲一個功能豐富的 JavaScript 庫,在今年 11 月發布了 2.x 版本。新版本相較於 1.x 有了較大的變化,本文將對其主要變化進行概括。

雖然 2.x 版本剛發布不久,使用量還不高,許多廣泛使用的庫也尚未切換,但了解這些變化對未來的遷移工作很有幫助。

版本對比

舊版本的使用相對簡單,只需一個 @solana/web3.js 包就包含了所有內容。它基於類的設計,封裝了大量常用操作。例如 Connection 類提供了幾十種方法,幾乎涵蓋了開發者所需的所有功能。

然而,這種設計也帶來了一些問題。即使開發者只使用其中一小部分功能,整個代碼庫也會被下載到用戶設備上,由於庫的代碼量較大,可能會導致一定的加載時間。

2.x 版本採取了不同的策略。官方團隊將原有的代碼庫拆分爲多個小模塊,如 @solana/accounts、@solana/codecs、@solana/rpc、@solana/signers、@solana/transactions 等。同時,新版本放棄了基於類的實現,更多地採用單個函數的方式。這種設計有利於 JavaScript 代碼構建時的優化,未使用的代碼將被刪除,不會被下載到用戶設備上。據官方文檔統計,使用新版的 DApp 通常能實現約 30% 的尺寸優化,如果只使用了很小一部分功能,優化比例可能更高。

這種變化也給 Solana 團隊的文檔工作帶來了挑戰,如何讓開發者迅速找到所需功能成爲一個重要問題。目前,包名具有較好的語義性,從名稱上就能大致了解它們的用途,這在一定程度上降低了開發者的遷移難度。

然而,由於剛發布不久,許多項目還未進行遷移。Solana Cookbook 上關於 2.x 版本的示例也較少。新版本傾向於使用運行時內置功能(如生成密鑰對),但文檔中對這些部分的描述不足,可能會讓開發者感到困惑。

2.x 版本的另一個重要特點是零依賴。這一點對許多用戶來說可能不那麼重要,但從今年 12 月初發生在 @solana/web3.js 1.95.5 和 1.95.6 版本上的供應鏈攻擊來看,更多的外部輸入和依賴會大大增加安全事件發生的可能性。隨着 2.x 版本的發布,Web3.js 的開發團隊決定更多地使用本機功能,取消外部依賴和 Polyfills 的引入。雖然未來可能會有變化,但目前 2.x 版本已經消除了所有外部依賴。

Web3 新手系列:現在升級 @solana/web3.js 2.x 開啓函數式編程

重要變更點

連接

在 1.x 版本中,Connection 類提供了大量方法。但其主要功能是通過配置 RPC 請求地址創建一個請求發送器,然後通過它發送各種請求。

2.x 版本採用了更加函數式的方式實現這一功能。例如,當調用 sendAndConfirmTransaction 來發送交易時,會自動發起 HTTPS 請求,並建立一個 WSS 連接,訂閱交易狀態,在交易被確認後返回交易 hash。

密鑰對

公鑰和私鑰相關的部分也有較大變化。1.x 版本中常用的 Keypair 和 PublicKey 兩個類不再存在,被一些函數所替代。

例如,可以使用 await generateKeyPair() 生成密鑰對,而不是之前的 Keypair.generate()。值得注意的是,新的 generateKeyPair 返回一個 Promise,而不是直接返回密鑰對。這是因爲新的實現盡可能利用了 JavaScript 的 Web Crypto API,使用了原生的 Ed25519 實現。Web Crypto API 的許多方法都是異步的。不過,這一變化並非難以接受,在 2024 年即將結束的今天,JavaScript 開發者已經非常熟悉 Promise 了。

發送交易

1.x 版本中的 Transaction 和 VersionedTransaction 兩個類在 2.x 中不再存在。

舊版本中提供的 System Program 相關方法也不再繼續存在,因此 SystemProgram 類上的靜態方法都需要從其他地方引入。例如,transfer 指令需要調用 @solana-program/system 中的 getTransferSolInstruction 函數。

由於不再提供類,Web3.js 提供了函數式編程中常用的 pipe 形式。開發者可以通過 pipe 函數來實現原本 1.x 版本的轉帳功能。

值得注意的是,交易不再通過 Connection 來發起,而是通過開發者定義的 RPC Provider 生成一個特有的函數,然後調用該函數來發起交易。相對 1.x 版本,代碼量有所增加,但可定制性更強了。

交易通過 HTTPS RPC 發起,然後通過訂閱 WSS RPC 來確認交易結果。可以感受到新的方式非常依賴 WSS,相信未來 WSS 的應用將會越來越廣泛,這也對 RPC 供應商的服務穩定性提出了更高的要求。

React

值得一提的是,@solana/web3.js 項目中還包含了一個名爲 @solana/react 的庫,提供了一些 React Hook,內置了諸如 signIn 等功能。

總結

@solana/web3.js 2.x 版本的發布體現了 Solana 團隊對不斷發展和改進的承諾。它爲開發人員提供了一個高效、靈活、可定制的與 Solana 網路交互的方式,有助於推動該平台的採用和發展。

Web3 新手系列:現在升級 @solana/web3.js 2.x 開啓函數式編程

SOL3.84%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 4
  • 分享
留言
0/400
SignatureVerifiervip
· 3小時前
唉... 又一次匆忙发布,需要进行广泛的安全审计
查看原文回復0
BearMarketSurvivorvip
· 3小時前
性能越优化韭菜越多
回復0
AlwaysAnonvip
· 4小時前
哦豁 终于升级了
回復0
DeFi宝典vip
· 4小時前
根据TVL增长曲线预测,2.x模块化架构优化后性能提升达27.8%
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)