📢 Gate廣場 #NERO发帖挑战# 秀觀點贏大獎活動火熱開啓!
Gate NERO生態周來襲!發帖秀出NERO項目洞察和活動實用攻略,瓜分30,000NERO!
💰️ 15位優質發帖用戶 * 2,000枚NERO每人
如何參與:
1️⃣ 調研NERO項目
對NERO的基本面、社區治理、發展目標、代幣經濟模型等方面進行研究,分享你對項目的深度研究。
2️⃣ 參與並分享真實體驗
參與NERO生態周相關活動,並曬出你的參與截圖、收益圖或實用教程。可以是收益展示、簡明易懂的新手攻略、小竅門,也可以是行情點位分析,內容詳實優先。
3️⃣ 鼓勵帶新互動
如果你的帖子吸引到他人參與活動,或者有好友評論“已參與/已交易”,將大幅提升你的獲獎概率!
NERO熱門活動(帖文需附以下活動連結):
NERO Chain (NERO) 生態周:Gate 已上線 NERO 現貨交易,爲回饋平台用戶,HODLer Airdrop、Launchpool、CandyDrop、餘幣寶已上線 NERO,邀您體驗。參與攻略見公告:https://www.gate.com/announcements/article/46284
高質量帖子Tips:
教程越詳細、圖片越直觀、互動量越高,獲獎幾率越大!
市場見解獨到、真實參與經歷、有帶新互動者,評選將優先考慮。
帖子需原創,字數不少於250字,且需獲得至少3條有效互動
Solana Web3.js 2.x版本重大升級 功能拆分與性能優化
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 版本已經消除了所有外部依賴。
重要變更點
連接
在 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 網路交互的方式,有助於推動該平台的採用和發展。