This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
ソラナ Web3.js 2.xバージョン:モジュール化設計と関数型プログラミングの重大なアップグレード
ソラナ Web3.js 2.x バージョン:全く新しい関数型プログラミング体験
ソラナ Web3.js は、機能豊富な JavaScript ライブラリとして、今年 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、@solana/signers、@solana/transactions などです。同時に、新しいバージョンはクラスベースの実装を放棄し、単一の関数方式に切り替えました。これは JavaScript コードの構築時の最適化に大いに役立ちます。使用されていないコードは削除され、ユーザーのデバイスにはダウンロードされません。公式文書の統計によれば、新しいバージョンの DApp を使用することで、一般的に 30% のサイズ最適化が得られます。もし少数の機能しか使用しない場合、最適化の割合はさらに高くなるかもしれません。
この変化はまた、ソラナチームのドキュメントの質に対してより高い要求をもたらしました。開発者が必要な機能を迅速に特定する方法が重要な問題となっています。現時点では、各パッケージの命名には良い意味合いがあり、名前からその用途を大まかに推測できるため、開発者の移行の難易度がある程度軽減されています。
しかし、新しいバージョンが最近リリースされたばかりで、多くのプロジェクトはまだ移行を完了していません。ソラナ・クックブックにおける2.xバージョンの例も相対的に限られています。さらに、新しいバージョンはランタイムに組み込まれた機能(例えば、キー・ペアの生成)を使用する傾向がありますが、これらの部分に関するドキュメントの説明が不十分で、開発者を混乱させる可能性があります。
2.x バージョンのもう一つの重要な特徴はゼロ依存です。この点は一般ユーザーにはあまり影響がないかもしれませんが、今年の12月初めに @solana/web3.js 1.95.5 と 1.95.6 バージョンで発生したサプライチェーン攻撃を考慮すると、過剰な外部入力と依存はセキュリティ事件のリスクを大幅に高める可能性があります。2.x バージョンのリリースに伴い、Web3.js の開発チームはネイティブ機能をもっと活用し、外部依存とポリフィルの導入を減少させることを決定しました。将来的には変化があるかもしれませんが、現時点では2.x バージョンはすべての外部依存を排除しています。
重要な変更点
###接続
1.x バージョンでは、Connection クラスは多数のメソッドを提供しています。しかし、そのコア機能は、RPC リクエストアドレスをコンフィギュレーションすることでリクエスト送信器を作成し、それを通じてさまざまなリクエストを送信することです。
2.x バージョンは、より関数型の方法でこの機能を実現しています:
JavaScriptの import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
sendAndConfirmTransaction を呼び出してトランザクションを送信する際、HTTPS リクエストを自動的に開始し、トランザクションの状態をサブスクライブするために WSS 接続を確立します。トランザクションが確認された後、トランザクションハッシュを返します。
鍵ペア
公開鍵と秘密鍵に関連する部分にも重大な変更があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey クラスはもはや存在せず、いくつかの関数に置き換えられました。
たとえば、await generateKeyPair() を使用して、前の Keypair.generate() の代わりにキーペアを生成できます。
注目すべきは、新しい generateKeyPair が Promise を返すようになったことであり、直接キー ペアを返さなくなったことです。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブな Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。ただし、Promise に慣れている JavaScript 開発者にとって、この変更はそれほど難しくはないはずです。
トランザクションを送信する
バージョン 1.x の Transaction クラスと VersionedTransaction クラスは、バージョン 2.x では存在しなくなりました。
旧バージョンで提供されていた System Program に関連するメソッドはもはや存在せず、SystemProgram クラスの静的メソッドは他の場所からインポートする必要があります。
たとえば、transfer ディレクティブは、@solana-program/system の getTransferSolInstruction 関数を呼び出す必要があります。
クラスがもはや提供されていないため、Web3.js は関数型プログラミングで一般的に使用される pipe 形式を提供しています。以下は、pipe 関数を使用して元の 1.x の送金機能を実現した例です:
JavaScriptの import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana/system-program";
const トランザクション = pipe( createTransaction({ バージョン: 0 }), addInstruction(getTransferSolInstruction({ fromPubkey: 送信者, toPubkey: 受信者、 ランプト: amount })) );
const signature = sendAndConfirmTransaction(rpc、トランザクション、[senderKeypair])を待ちます。
取引は Connection を通じて開始されるのではなく、私たちが定義した RPC Provider を通じて特定の関数を生成し、その関数を呼び出して取引を開始することができます。1.x バージョンと比較してコード量は増加しましたが、カスタマイズ性は向上しました。
取引は HTTPS RPC を通じて開始され、その後 WSS RPC を購読することで取引結果が確認されます。新しい方法が WSS に非常に依存していることを感じることができ、将来的には WSS の応用がますます広がると信じています。これにより、RPC サプライヤーのサービスの安定性に対する要求も高まります。
React のサポート
注目すべきは、@solana/web3.js プロジェクトには @solana/react というライブラリが含まれており、signIn などの機能を内蔵したいくつかの React Hook を提供していることです。
まとめ
@solana/web3.js 2.x バージョンのリリースは、ソラナチームの持続的な成長と改善へのコミットメントを示しています。新しいバージョンは、開発者に対してソラナネットワークと効率的、柔軟、カスタマイズ可能にインタラクションする方法を提供し、このプラットフォームの採用と発展を促進することが期待されています。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする