# ソラナ Web3.js 2.xバージョンの重大な更新:関数型プログラミングとモジュール化設計ソラナ Web3.jsは、機能豊富なJavaScriptライブラリとして、11月に正式に2.xバージョンをリリースしました。新しいバージョンは1.xに比べて顕著な変化があり、この記事ではその主な更新を概説します。2.xバージョンがリリースされたばかりで、使用率はまだ高くありませんが、多くの人気ライブラリはまだ切り替えていません。それでも、これらの変化を理解することは、将来の移行作業に非常に役立ちます。## バージョン比較1.xバージョンは使いやすいです。パッケージは1つだけ:@solana/web3.jsで、すべての機能がそこに集中しています。クラスベースの設計は、多くの一般的な操作をカプセル化しており、Connectionクラスは数十のメソッドを提供し、開発者が必要とするほぼすべての機能をカバーしています。しかし、このデザインは幾つかの問題も引き起こします:開発者が非常に少ない機能しか使用しなくても、全てのコードライブラリがユーザーのデバイスにダウンロードされ、ライブラリのコード量が多いため、一定の時間がかかる可能性があります。2.xバージョンは異なる戦略を採用しました。公式チームは既存のコードベースをいくつかの小さなモジュールに分割しました。例えば、@solana/accounts、@solana/codecs、@solana/rpc、@solana/signers、@solana/transactionsなどです。同時に、クラスベースの実装を放棄し、より多くの単一関数を採用しました。この設計は、JavaScriptコードのビルド時の最適化に有利で、未使用のコードは削除され、ユーザーのデバイスにはダウンロードされません。公式の統計によると、新しいバージョンのDAppを使用すると、通常30%のサイズ最適化が得られます。もし少量の機能しか使用しない場合、最適化の割合はさらに高くなる可能性があります。! [Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする](https://img-cdn.gateio.im/social/moments-0fa0888db1937c21f03f2851ec3bd095)この変化はソラナチームのドキュメント品質に対してより高い要求を突きつけており、開発者が必要な機能を迅速に見つける方法が重要な問題となっています。現時点では、各パッケージの命名は良好なセマンティクスを持っており、名前からそれらの用途を大まかに理解することができ、ある程度開発者の移行の難易度を下げています。しかし、最近リリースされたばかりのため、多くのプロジェクトはまだ移行を行っていません。ソラナのCookbookには2.xバージョンに関する例が相対的に少ないです。また、新しいバージョンはランタイム組み込み機能(例えば、キー対の生成)を使用する傾向がありますが、文書のこれらの部分に関する説明が不十分で、開発者を混乱させる可能性があります。2.xバージョンのもう一つの重要な特徴はゼロ依存です。この特性は多くのユーザーにとってそれほど重要ではないかもしれませんが、2023年12月初旬に@solana/web3.js 1.95.5と1.95.6バージョンが遭遇したサプライチェーン攻撃を考えると、外部入力と依存を減らすことでセキュリティインシデントが発生する可能性を大幅に低下させることができます。2.xバージョンのリリースに伴い、Web3.js開発チームはネイティブ機能をより多く使用し、外部依存関係とポリフィルの導入を取りやめることを決定しました。将来的には変更があるかもしれませんが、現在2.xバージョンはすべての外部依存関係を排除しています。## 重要な変更点###接続1.xバージョンでは、Connectionクラスは多くのメソッドを提供していました。しかし、2.xでは、より関数型の方法が採用されました。"sendAndConfirmTransaction"を呼び出してトランザクションを送信すると、自動的にHTTPSリクエストが発行され、トランザクションの状態を購読するためにWSS接続が確立されます。トランザクションが確認されると、トランザクションハッシュが返されます。### 秘密鍵ペア公開鍵と秘密鍵に関連する部分も大きな変化があります。1.xバージョンで一般的に使用されていたKeypairとPublicKeyクラスはもはや存在せず、いくつかの関数に置き換えられました。たとえば、以前の "Keypair.generate()" の代わりに "await generateKeyPair()" を使用してキー ペアを生成できます。注目すべきは、新しいgenerateKeyPairがPromiseを返すことであり、直接キー ペアを返さないことです。これは、新しい実装が可能な限りJavaScriptのWeb Crypto APIを利用し、ネイティブのEd25519実装を使用しているためです。Web Crypto APIの多くのメソッドは非同期です。しかし、Promiseに慣れているJavaScript開発者にとって、この変更は適応が難しくありません。### トランザクションを送信する2.xバージョンでは"Transaction"と"VersionedTransaction"という2つのクラスはもはや存在しません。旧バージョンに提供されていたSystem Program関連のメソッドは存在しなくなり、"SystemProgram"クラスの静的メソッドは他の場所からインポートする必要があります。たとえば、"transfer" ディレクティブは "@solana-program/system" の "getTransferSolInstruction" 関数を呼び出す必要があります。classが提供されなくなったため、Web3.jsは関数型プログラミングでよく使われる"pipe"形式を提供しています。pipe関数を使用して、元々の1.xの送金機能を実現することができます。取引はConnectionを介して開始されるのではなく、定義されたRPCプロバイダーを通じて特有の関数を生成し、その関数を呼び出して取引を開始することが明らかです。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バージョンがリリースされたばかりで、使用率はまだ高くありませんが、多くの人気ライブラリはまだ切り替えていません。それでも、これらの変化を理解することは、将来の移行作業に非常に役立ちます。
バージョン比較
1.xバージョンは使いやすいです。パッケージは1つだけ:@solana/web3.jsで、すべての機能がそこに集中しています。クラスベースの設計は、多くの一般的な操作をカプセル化しており、Connectionクラスは数十のメソッドを提供し、開発者が必要とするほぼすべての機能をカバーしています。
しかし、このデザインは幾つかの問題も引き起こします:開発者が非常に少ない機能しか使用しなくても、全てのコードライブラリがユーザーのデバイスにダウンロードされ、ライブラリのコード量が多いため、一定の時間がかかる可能性があります。
2.xバージョンは異なる戦略を採用しました。公式チームは既存のコードベースをいくつかの小さなモジュールに分割しました。例えば、@solana/accounts、@solana/codecs、@solana/rpc、@solana/signers、@solana/transactionsなどです。同時に、クラスベースの実装を放棄し、より多くの単一関数を採用しました。この設計は、JavaScriptコードのビルド時の最適化に有利で、未使用のコードは削除され、ユーザーのデバイスにはダウンロードされません。公式の統計によると、新しいバージョンのDAppを使用すると、通常30%のサイズ最適化が得られます。もし少量の機能しか使用しない場合、最適化の割合はさらに高くなる可能性があります。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする
この変化はソラナチームのドキュメント品質に対してより高い要求を突きつけており、開発者が必要な機能を迅速に見つける方法が重要な問題となっています。現時点では、各パッケージの命名は良好なセマンティクスを持っており、名前からそれらの用途を大まかに理解することができ、ある程度開発者の移行の難易度を下げています。
しかし、最近リリースされたばかりのため、多くのプロジェクトはまだ移行を行っていません。ソラナのCookbookには2.xバージョンに関する例が相対的に少ないです。また、新しいバージョンはランタイム組み込み機能(例えば、キー対の生成)を使用する傾向がありますが、文書のこれらの部分に関する説明が不十分で、開発者を混乱させる可能性があります。
2.xバージョンのもう一つの重要な特徴はゼロ依存です。この特性は多くのユーザーにとってそれほど重要ではないかもしれませんが、2023年12月初旬に@solana/web3.js 1.95.5と1.95.6バージョンが遭遇したサプライチェーン攻撃を考えると、外部入力と依存を減らすことでセキュリティインシデントが発生する可能性を大幅に低下させることができます。2.xバージョンのリリースに伴い、Web3.js開発チームはネイティブ機能をより多く使用し、外部依存関係とポリフィルの導入を取りやめることを決定しました。将来的には変更があるかもしれませんが、現在2.xバージョンはすべての外部依存関係を排除しています。
重要な変更点
###接続
1.xバージョンでは、Connectionクラスは多くのメソッドを提供していました。しかし、2.xでは、より関数型の方法が採用されました。
"sendAndConfirmTransaction"を呼び出してトランザクションを送信すると、自動的にHTTPSリクエストが発行され、トランザクションの状態を購読するためにWSS接続が確立されます。トランザクションが確認されると、トランザクションハッシュが返されます。
秘密鍵ペア
公開鍵と秘密鍵に関連する部分も大きな変化があります。1.xバージョンで一般的に使用されていたKeypairとPublicKeyクラスはもはや存在せず、いくつかの関数に置き換えられました。
たとえば、以前の "Keypair.generate()" の代わりに "await generateKeyPair()" を使用してキー ペアを生成できます。
注目すべきは、新しいgenerateKeyPairがPromiseを返すことであり、直接キー ペアを返さないことです。これは、新しい実装が可能な限りJavaScriptのWeb Crypto APIを利用し、ネイティブのEd25519実装を使用しているためです。Web Crypto APIの多くのメソッドは非同期です。しかし、Promiseに慣れているJavaScript開発者にとって、この変更は適応が難しくありません。
トランザクションを送信する
2.xバージョンでは"Transaction"と"VersionedTransaction"という2つのクラスはもはや存在しません。
旧バージョンに提供されていたSystem Program関連のメソッドは存在しなくなり、"SystemProgram"クラスの静的メソッドは他の場所からインポートする必要があります。
たとえば、"transfer" ディレクティブは "@solana-program/system" の "getTransferSolInstruction" 関数を呼び出す必要があります。
classが提供されなくなったため、Web3.jsは関数型プログラミングでよく使われる"pipe"形式を提供しています。pipe関数を使用して、元々の1.xの送金機能を実現することができます。
取引はConnectionを介して開始されるのではなく、定義されたRPCプロバイダーを通じて特有の関数を生成し、その関数を呼び出して取引を開始することが明らかです。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をアップグレードして関数型プログラミングを有効にする