# ソラナ Web3.js 2.x バージョン:機能が強化され、パフォーマンスが最適化されましたソラナ Web3.js は、機能豊富な JavaScript ライブラリとして、今年 11 月に正式に 2.x バージョンをリリースしました。この新しいバージョンは、1.x バージョンに比べて大きな変化があり、この記事ではその主な変化を概説します。2.x バージョンが発表されたばかりで、使用量はまだ少なく、広く利用されているライブラリもまだ切り替えていませんが、これらの変更を理解することは将来の移行作業に役立ちます。! [Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする](https://img-cdn.gateio.im/social/moments-0fa0888db1937c21f03f2851ec3bd095)## バージョン比較1.x バージョンは使いやすく、1 つのパッケージ:@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 の2つのクラスはもはや存在せず、いくつかの関数に置き換えられました。たとえば、以前は Keypair.generate(9283746565748392019283746574839201 から直接生成されていたのに対し、await generateKeyPair)( を使用してキーペアを生成できるようになりました。注目すべきは、新しい 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 の送金機能を実装した例です:JavaScriptのimport { pipe } from "@solana/web3.js";import { getTransferSolInstruction } from "@solana-program/system";const トランザクション = pipe### createTransaction({ バージョン: 0 }(, addInstruction) getTransferSolInstruction({ fromPublicKey、 toPublicKey、 ランプポート、 }( ));取引はもはやConnectionを通じて開始されるのではなく、私たちが定義したRPC Providerを通じて特有の関数を生成し、その関数を呼び出して取引を開始することができます。1.xバージョンと比較して、コード量は増加しましたが、カスタマイズ性が向上しました。取引は HTTPS RPC を通じて開始され、その後 WSS RPC を購読することで取引結果を確認します。新しい方法が WSS に非常に依存していることを実感でき、今後 WSS の適用がますます広がると信じています。これにより RPC サプライヤーのサービスの安定性に対する要求も高まっています。) リアクト注目すべきは、@solana/web3.js プロジェクトには @solana/react というライブラリも含まれており、signIn などの機能を内蔵したいくつかの React Hook を提供していることです。## まとめ@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 バージョンが発表されたばかりで、使用量はまだ少なく、広く利用されているライブラリもまだ切り替えていませんが、これらの変更を理解することは将来の移行作業に役立ちます。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする
バージョン比較
1.x バージョンは使いやすく、1 つのパッケージ:@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 の2つのクラスはもはや存在せず、いくつかの関数に置き換えられました。
たとえば、以前は Keypair.generate(9283746565748392019283746574839201 から直接生成されていたのに対し、await generateKeyPair)( を使用してキーペアを生成できるようになりました。
注目すべきは、新しい 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 の送金機能を実装した例です:
JavaScriptの import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana-program/system";
const トランザクション = pipe### createTransaction({ バージョン: 0 }(, addInstruction) getTransferSolInstruction({ fromPublicKey、 toPublicKey、 ランプポート、 }( ) );
取引はもはやConnectionを通じて開始されるのではなく、私たちが定義したRPC Providerを通じて特有の関数を生成し、その関数を呼び出して取引を開始することができます。1.xバージョンと比較して、コード量は増加しましたが、カスタマイズ性が向上しました。
取引は HTTPS RPC を通じて開始され、その後 WSS RPC を購読することで取引結果を確認します。新しい方法が WSS に非常に依存していることを実感でき、今後 WSS の適用がますます広がると信じています。これにより RPC サプライヤーのサービスの安定性に対する要求も高まっています。
) リアクト
注目すべきは、@solana/web3.js プロジェクトには @solana/react というライブラリも含まれており、signIn などの機能を内蔵したいくつかの React Hook を提供していることです。
まとめ
@solana/web3.js 2.x バージョンのリリースは、ソラナチームの継続的な進化と改善へのコミットメントを十分に示しています。これは、開発者にソラナネットワークと対話するための効率的で柔軟かつカスタマイズ可能な方法を提供し、このプラットフォームの採用と発展を促進するのに役立ちます。
! [Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする]###https://img-cdn.gateio.im/webp-social/moments-d3e17fab6bb8c485a8bdac5b1e385273.webp(