# ソラナ 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% のサイズ最適化が得られ、機能を少量しか使用しない場合は、最適化の割合がさらに高くなる可能性があります。この変化は、ソラナチームのドキュメントの質に対してより高い要求を突きつけています。開発者が必要な機能を迅速に見つける方法が重要な課題となっています。現時点では、パッケージ名の意味はまずまずで、名前からそれらの用途を大まかに理解できるため、開発者の移行の難易度をある程度低下させています。最近リリースされたばかりのため、多くのプロジェクトはまだ移行を行っていません。ソラナ Cookbook の 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(');// RPCを使用してトランザクションを送信するconst signature = await rpc.sendAndConfirmTransaction(トランザクション);この新しいバージョンでは、sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストを開始し、取引の状態を購読するために WSS 接続を確立します。取引が確認されると、取引ハッシュが返されます。### 鍵ペア公開鍵と秘密鍵に関連する部分にも重大な変更があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey クラスはもはや存在せず、いくつかの関数に置き換えられました。たとえば、Keypair.generate() の代わりに、await generateKeyPair() を使用してキーペアを生成できるようになりました。注目すべきは、新しい generateKeyPair が直接鍵ペアを返すのではなく、Promise を返すということです。これは、新しい実装ができるだけ JavaScript の Web Crypto API を活用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変化は受け入れがたいものではなく、2024 年が終わろうとしている今、JavaScript 開発者はすでに Promise に非常に慣れています。### トランザクションを送信する1.x バージョンのユーザーは Transaction と VersionedTransaction という二つのクラスに非常に慣れているはずです。それらの関係は多くの開発者を混乱させたことがあります。2.x バージョンでは、これらの2つのクラスはもはや存在しません。旧バージョンで提供されていた 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-program';import { createSolanaRpc } from '@solana/web3.js';const rpc = createSolanaRpc(');const トランザクション = pipe( createTransaction({ バージョン: 0 }), addInstruction(getTransferSolInstruction({ 差出人: senderPublicKey, 宛先: recipientPublicKey, amount: transferAmount、 })));const signature = await rpc.sendAndConfirmTransaction(トランザクション);取引はConnectionを通じて開始されるのではなく、私たちが定義したRPCプロバイダーによって特定の関数を生成し、その関数を呼び出して取引を開始することがわかります。1.xバージョンと比較してコード量は増加しましたが、利点はカスタマイズ性が向上したことです。取引は HTTPS RPC を介して開始され、その後 WSS RPC を購読することで取引結果を確認します。新しい方法が WSS に非常に依存していることを感じることができ、将来的には WSS の適用がますます広がると信じています。これにより、RPC サプライヤーのサービスの安定性に対する要求がより高くなります。### React のサポート興味深いことに、@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% のサイズ最適化が得られ、機能を少量しか使用しない場合は、最適化の割合がさらに高くなる可能性があります。
この変化は、ソラナチームのドキュメントの質に対してより高い要求を突きつけています。開発者が必要な機能を迅速に見つける方法が重要な課題となっています。現時点では、パッケージ名の意味はまずまずで、名前からそれらの用途を大まかに理解できるため、開発者の移行の難易度をある程度低下させています。
最近リリースされたばかりのため、多くのプロジェクトはまだ移行を行っていません。ソラナ Cookbook の 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(');
// RPCを使用してトランザクションを送信する const signature = await rpc.sendAndConfirmTransaction(トランザクション);
この新しいバージョンでは、sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストを開始し、取引の状態を購読するために WSS 接続を確立します。取引が確認されると、取引ハッシュが返されます。
鍵ペア
公開鍵と秘密鍵に関連する部分にも重大な変更があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey クラスはもはや存在せず、いくつかの関数に置き換えられました。
たとえば、Keypair.generate() の代わりに、await generateKeyPair() を使用してキーペアを生成できるようになりました。
注目すべきは、新しい generateKeyPair が直接鍵ペアを返すのではなく、Promise を返すということです。これは、新しい実装ができるだけ JavaScript の Web Crypto API を活用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変化は受け入れがたいものではなく、2024 年が終わろうとしている今、JavaScript 開発者はすでに Promise に非常に慣れています。
トランザクションを送信する
1.x バージョンのユーザーは Transaction と VersionedTransaction という二つのクラスに非常に慣れているはずです。それらの関係は多くの開発者を混乱させたことがあります。
2.x バージョンでは、これらの2つのクラスはもはや存在しません。
旧バージョンで提供されていた 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-program'; import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
const トランザクション = pipe( createTransaction({ バージョン: 0 }), addInstruction(getTransferSolInstruction({ 差出人: senderPublicKey, 宛先: recipientPublicKey, amount: transferAmount、 })) );
const signature = await rpc.sendAndConfirmTransaction(トランザクション);
取引はConnectionを通じて開始されるのではなく、私たちが定義したRPCプロバイダーによって特定の関数を生成し、その関数を呼び出して取引を開始することがわかります。1.xバージョンと比較してコード量は増加しましたが、利点はカスタマイズ性が向上したことです。
取引は HTTPS RPC を介して開始され、その後 WSS RPC を購読することで取引結果を確認します。新しい方法が WSS に非常に依存していることを感じることができ、将来的には WSS の適用がますます広がると信じています。これにより、RPC サプライヤーのサービスの安定性に対する要求がより高くなります。
React のサポート
興味深いことに、@solana/web3.js プロジェクトには @solana/react というライブラリも含まれており、signIn などの機能を備えたいくつかの React Hook を提供しています。
まとめ
@solana/web3.js 2.x のリリースは、ソラナチームが進化と改善に対するコミットメントを十分に示しています。これにより、開発者はソラナネットワークと効率的で柔軟かつカスタマイズ可能な方法でやり取りすることができ、プラットフォームの採用と発展を促進します。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする