# ソラナ 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-0fa08888db1937c21f03f2851ec3bd095)## バージョン比較否定できないことに、旧バージョンは使用がよりシンプルで直接的です。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バージョンは、より関数型の方法でこの機能を実装しています。例えば、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関数を呼び出す必要があります。classが提供されなくなったため、Web3.jsは関数型プログラミングで一般的に使用されるpipe形式を提供します。開発者はpipe関数を使用して、もともと1.xの送金機能を実現できます。注目すべきは、取引がもはやConnectionを通じて開始されるのではなく、定義されたRPCプロバイダーによって特有の関数が生成され、その関数を呼び出して取引を開始することです。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バージョンがリリースされたばかりで、使用はまだ普及しておらず、多くの広く使用されているライブラリも切り替えを行っていませんが、これらの変化を理解することは、将来の移行作業に大いに役立ちます。
! 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バージョンは、より関数型の方法でこの機能を実装しています。例えば、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関数を呼び出す必要があります。
classが提供されなくなったため、Web3.jsは関数型プログラミングで一般的に使用されるpipe形式を提供します。開発者はpipe関数を使用して、もともと1.xの送金機能を実現できます。
注目すべきは、取引がもはやConnectionを通じて開始されるのではなく、定義されたRPCプロバイダーによって特有の関数が生成され、その関数を呼び出して取引を開始することです。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 开启函数式编程