Solana Web3.js 2.x版本發布:函數式編程重塑開發體驗

robot
摘要生成中

Solana Web3.js 2.x:函數式編程的新時代

Solana Web3.js 在2023年11月發布了2.x版本,相較於1.x版本,新版本帶來了顯著的變化。本文將概括其主要改進。

雖然2.x版本剛剛發布,使用率尚不高,許多流行庫也未遷移,但了解這些變化有助於未來的升級準備。

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

版本對比

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

然而,這種設計也帶來了一些問題。盡管開發者實際使用的功能可能很少,但整個代碼庫都會被下載到用戶設備上,導致加載時間延長。

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

這種變化對Solana團隊的文檔質量提出了更高要求。如何讓開發者快速找到所需功能成爲一個關鍵問題。目前,包名的語義性較好,從名稱上就能大致了解其用途,這在一定程度上降低了開發者的遷移難度。

然而,由於剛發布不久,許多項目尚未遷移。一些示例和文檔描述也不夠完善,可能會給開發者帶來一些困惑。

2.x版本的另一個重要特點是零依賴。這對於提高安全性至關重要,尤其是在2023年12月初@solana/web3.js 1.95.5和1.95.6版本遭遇供應鏈攻擊後。新版本更多地使用本機功能,取消了外部依賴和Polyfills的引入,從而降低了安全風險。

主要變更

連接方式

2.x版本採用了更加函數式的方法來處理連接。不再使用Connection類,而是通過配置RPC請求地址來創建請求發送器。例如,發送交易時會自動發起HTTPS請求並建立WSS連接,訂閱交易狀態,在交易確認後返回交易哈希。

密鑰對管理

公鑰和私鑰相關的操作也發生了重大變化。1.x版本常用的Keypair和PublicKey類不再存在,取而代之的是一系列函數。例如,現在使用await generateKeyPair()來生成密鑰對,而不是之前的Keypair.generate()。

新的實現利用了JavaScript的Web Crypto API,使用了原生的Ed25519實現。這導致一些操作變成了異步的,但對於熟悉Promise的現代JavaScript開發者來說,這並不是一個大問題。

交易處理

2.x版本中,不再有Transaction和VersionedTransaction類。System Program相關的方法也需要從其他地方引入。例如,轉帳指令現在需要調用@solana-program/system中的getTransferSolInstruction函數。

新版本提供了函數式編程中常用的pipe形式。交易不再通過Connection發起,而是通過定義的RPC Provider生成特定函數來發起交易。這種方式雖然代碼量略有增加,但提供了更強的可定制性。

React支持

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

結語

@solana/web3.js 2.x版本的發布展現了Solana團隊持續改進的決心。新版本爲開發者提供了一個高效、靈活、可定制的Solana網路交互方式,有望推動平台的進一步發展和應用。

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

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 讚賞
  • 3
  • 分享
留言
0/400
SoliditySlayervip
· 11小時前
这能提升多少tps呀
回復0
GateUser-aa7df71evip
· 11小時前
solana这波要起飞了吧
回復0
GateUser-e87b21eevip
· 11小時前
更新后开发轻松多了!
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)