# ソラナ Web3.js 2.x バージョン:機能分割とパフォーマンス最適化ソラナ 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% のサイズ最適化が実現できます。もしごくわずかの機能しか使用しなかった場合、最適化率はさらに高くなる可能性があります。この変化は、ソラナチームのドキュメント作業にも課題をもたらしました。開発者が必要な機能を迅速に見つける方法が重要な問題となっています。現在、パッケージ名はかなり良い意味を持っており、名前からその用途を大まかに理解できるため、開発者の移行の難易度をある程度低減しています。しかし、最近リリースされたばかりのため、多くのプロジェクトはまだ移行を行っていません。ソラナのクックブックには2.xバージョンに関する例が少ないです。新しいバージョンは、実行時に組み込まれた機能(キー ペアの生成など)を使用する傾向がありますが、ドキュメントにはこれらの部分に関する説明が不十分であり、開発者を混乱させる可能性があります。2.x バージョンのもう一つの重要な特徴はゼロ依存です。この点は多くのユーザーにとってそれほど重要ではないかもしれませんが、今年の12月初めに @solana/web3.js 1.95.5 と 1.95.6 バージョンで発生したサプライチェーン攻撃を考えると、より多くの外部入力と依存はセキュリティインシデントの発生可能性を大幅に増加させることになります。2.x バージョンのリリースに伴い、Web3.js の開発チームはより多くのネイティブ機能を使用し、外部依存やポリフィルの導入を廃止することを決定しました。将来的には変化があるかもしれませんが、現時点では 2.x バージョンはすべての外部依存を排除しています。! [Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする](https://img-cdn.gateio.im/social/moments-0fa0888db1937c21f03f2851ec3bd095)## 重要な変更点###接続1.x バージョンでは、Connection クラスが多数のメソッドを提供しています。しかし、その主な機能は、RPC リクエストアドレスを設定することによってリクエスト送信者を作成し、その送信者を通じてさまざまなリクエストを送信することです。2.x バージョンは、より関数型の方法でこの機能を実現しています。例えば、sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストが発行され、WSS 接続が確立され、取引状態が購読され、取引が確認されると取引のハッシュが返されます。### 秘密鍵ペア公開鍵と秘密鍵に関連する部分にも大きな変化があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey の2つのクラスはもはや存在せず、いくつかの関数に置き換えられました。例えば、await generateKeyPair() を使用してキー ペアを生成できますが、以前の Keypair.generate() ではありません。新しい generateKeyPair は Promise を返し、直接キー ペアを返さないことに注意してください。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変更は受け入れがたいものではなく、2024 年の終わりを迎える今、JavaScript 開発者は Promise に非常に慣れています。### トランザクションを送信する1.x バージョンの Transaction と VersionedTransaction の2つのクラスは 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 サプライヤーのサービスの安定性に対する要求も高くなります。### リアクト值得一提的是,@solana/web3.js プロジェクトには @solana/react というライブラリも含まれており、いくつかの React Hook を提供し、signIn などの機能が組み込まれています。## まとめ@solana/web3.js 2.x バージョンのリリースは、ソラナチームの継続的な進化と改善へのコミットメントを反映しています。これは、開発者にソラナネットワークと対話するための効率的で柔軟でカスタマイズ可能な方法を提供し、プラットフォームの採用と発展を促進します。! [Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする](https://img-cdn.gateio.im/social/moments-d3e17fab6bb8c485a8bdac5b1e385273)
ソラナ Web3.js 2.xバージョンの重大なアップグレード 機能の分割と性能の最適化
ソラナ Web3.js 2.x バージョン:機能分割とパフォーマンス最適化
ソラナ 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% のサイズ最適化が実現できます。もしごくわずかの機能しか使用しなかった場合、最適化率はさらに高くなる可能性があります。
この変化は、ソラナチームのドキュメント作業にも課題をもたらしました。開発者が必要な機能を迅速に見つける方法が重要な問題となっています。現在、パッケージ名はかなり良い意味を持っており、名前からその用途を大まかに理解できるため、開発者の移行の難易度をある程度低減しています。
しかし、最近リリースされたばかりのため、多くのプロジェクトはまだ移行を行っていません。ソラナのクックブックには2.xバージョンに関する例が少ないです。新しいバージョンは、実行時に組み込まれた機能(キー ペアの生成など)を使用する傾向がありますが、ドキュメントにはこれらの部分に関する説明が不十分であり、開発者を混乱させる可能性があります。
2.x バージョンのもう一つの重要な特徴はゼロ依存です。この点は多くのユーザーにとってそれほど重要ではないかもしれませんが、今年の12月初めに @solana/web3.js 1.95.5 と 1.95.6 バージョンで発生したサプライチェーン攻撃を考えると、より多くの外部入力と依存はセキュリティインシデントの発生可能性を大幅に増加させることになります。2.x バージョンのリリースに伴い、Web3.js の開発チームはより多くのネイティブ機能を使用し、外部依存やポリフィルの導入を廃止することを決定しました。将来的には変化があるかもしれませんが、現時点では 2.x バージョンはすべての外部依存を排除しています。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする
重要な変更点
###接続
1.x バージョンでは、Connection クラスが多数のメソッドを提供しています。しかし、その主な機能は、RPC リクエストアドレスを設定することによってリクエスト送信者を作成し、その送信者を通じてさまざまなリクエストを送信することです。
2.x バージョンは、より関数型の方法でこの機能を実現しています。例えば、sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストが発行され、WSS 接続が確立され、取引状態が購読され、取引が確認されると取引のハッシュが返されます。
秘密鍵ペア
公開鍵と秘密鍵に関連する部分にも大きな変化があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey の2つのクラスはもはや存在せず、いくつかの関数に置き換えられました。
例えば、await generateKeyPair() を使用してキー ペアを生成できますが、以前の Keypair.generate() ではありません。新しい generateKeyPair は Promise を返し、直接キー ペアを返さないことに注意してください。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変更は受け入れがたいものではなく、2024 年の終わりを迎える今、JavaScript 開発者は Promise に非常に慣れています。
トランザクションを送信する
1.x バージョンの Transaction と VersionedTransaction の2つのクラスは 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 サプライヤーのサービスの安定性に対する要求も高くなります。
リアクト
值得一提的是,@solana/web3.js プロジェクトには @solana/react というライブラリも含まれており、いくつかの React Hook を提供し、signIn などの機能が組み込まれています。
まとめ
@solana/web3.js 2.x バージョンのリリースは、ソラナチームの継続的な進化と改善へのコミットメントを反映しています。これは、開発者にソラナネットワークと対話するための効率的で柔軟でカスタマイズ可能な方法を提供し、プラットフォームの採用と発展を促進します。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする