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をアップグレードして関数型プログラミングを有効にする
バージョン比較
旧バージョンの使用は比較的簡単で、単一の @solana/web3.js パッケージのみを含み、すべての機能がそこに集中しています。これはクラスベースの設計に基づいており、多くの一般的な操作をカプセル化しています。例えば、Connection クラスは数十種類のメソッドを提供し、ほぼすべての開発者が必要とする機能をカバーしています。さらに、Solana cookbook に提供されている多数のサンプルコードも開発者に便利さを提供しています。
しかし、このような設計は一部の問題ももたらします。開発者が実際に使用する機能はごく一部に過ぎないかもしれませんが、全てのコードベースがユーザーのデバイスにダウンロードされるため、ライブラリのコード量が大きいと、一定の時間がかかる可能性があります。
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/functional"; import { getTransferSolInstruction } from "@solana/system"; インポート{ createSolanaRpc、 トランザクションを送信する, setTransactionFeePayer、 トランザクションを作成する、 appendTransactionInstruction、 } から "@solana/web3.js";
const rpc = createSolanaRpc("");
const トランザクション = pipe( トランザクションを作成(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: 受信者、 量 }) ) );
const signature = sendTransaction(rpc、トランザクション、[payer])を待ちます。
1.x バージョンと比べて、コード量は増加しましたが、カスタマイズ性が向上しました。
取引は HTTPS RPC を通じて開始され、その後 WSS RPC を購読することで取引結果を確認します。新しい方法は WSS への依存度が高まり、これにより RPC サプライヤーのサービスの安定性に対する要求がさらに高まります。
リアクト
@solana/web3.js プロジェクトには、@solana/react という名前のライブラリも含まれており、いくつかの React Hook を提供し、signIn などの機能が組み込まれています。
まとめ
@solana/web3.js 2.x バージョンのリリースは、ソラナチームの継続的な発展と改善へのコミットメントを反映しています。これは、開発者にソラナネットワークと対話するための効率的で柔軟、かつカスタマイズ可能な方法を提供し、このプラットフォームの採用と発展を促進します。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする