# ソラナ Web3.js 2.x バージョン:機能豊富な JavaScript ライブラリの重大なアップグレードソラナ 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 バージョンは比較的簡単に使用でき、単一の @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 クラスは多数のメソッドを提供していました。しかし、2.x では、より関数型の方法が採用されています。JavaScriptのimport { createSolanaRpcApi } from '@solana/web3.js';const rpc = createSolanaRpcApi({ httpエンドポイント: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com',});// RPCを使用してトランザクションを送信するconst sendAndConfirmTransaction = rpc.sendAndConfirmTransaction(/* ... */);sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストが発行され、取引ステータスを購読するために WSS 接続が確立されます。取引が確認された後、取引ハッシュが返されます。### 秘密鍵ペア2.x バージョンでは、1.x バージョンで一般的に使用されていた Keypair および PublicKey クラスは存在せず、いくつかの関数に置き換えられています。例えば、await generateKeyPair() を使用してキー ペアを生成することができ、以前の Keypair.generate() の代わりになります。新しい generateKeyPair は Promise を返します。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。### トランザクションを送信するTransaction クラスと VersionedTransaction クラスは、2.x リリースで使用できなくなりました。 システムプログラム関連のアプローチももはや存在せず、他の場所で導入する必要があります。 たとえば、transfer ディレクティブは、@solana-program/system の getTransferSolInstruction 関数を呼び出す必要があります。新しいバージョンでは、関数型プログラミングで一般的に使用される pipe 形式が提供されています。以下は、pipe 関数を使用して、元の 1.x の送金機能を実装したものです:JavaScriptのimport { pipe } from '@solana/functional';import { getTransferSolInstruction } from '@solana/system-program';インポート{ addSignatureToTransaction、 トランザクションを作成する, sendAndConfirmTransaction、} from '@solana/web3.js';const transferSol = pipe( トランザクションの作成 (ix) => createTransaction({ 命令: [ix] }), // サインを追加 (tx) => addSignatureToTransaction(tx、signer)、 // 取引を送信して確認する (signedTx) = > sendAndConfirmTransaction(rpc、signedTx));const シグネチャ = await transferSol( getTransferSolInstruction({ 送信者から: 宛先:受信者、 量 }));1.x バージョンと比較して、コード量は増加しましたが、カスタマイズ性は向上しています。取引は HTTPS RPC を介して開始され、その後 WSS RPC を購読することで取引結果を確認します。### React のサポート@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)
Solana Web3.js 2.x リリース: モジュラー設計によりパフォーマンスが最適化され、セキュリティが向上
ソラナ Web3.js 2.x バージョン:機能豊富な JavaScript ライブラリの重大なアップグレード
ソラナ 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 クラスは多数のメソッドを提供していました。しかし、2.x では、より関数型の方法が採用されています。
JavaScriptの import { createSolanaRpcApi } from '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpエンドポイント: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
// RPCを使用してトランザクションを送信する const sendAndConfirmTransaction = rpc.sendAndConfirmTransaction(/* ... */);
sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストが発行され、取引ステータスを購読するために WSS 接続が確立されます。取引が確認された後、取引ハッシュが返されます。
秘密鍵ペア
2.x バージョンでは、1.x バージョンで一般的に使用されていた Keypair および PublicKey クラスは存在せず、いくつかの関数に置き換えられています。例えば、await generateKeyPair() を使用してキー ペアを生成することができ、以前の Keypair.generate() の代わりになります。
新しい generateKeyPair は Promise を返します。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。
トランザクションを送信する
Transaction クラスと VersionedTransaction クラスは、2.x リリースで使用できなくなりました。 システムプログラム関連のアプローチももはや存在せず、他の場所で導入する必要があります。 たとえば、transfer ディレクティブは、@solana-program/system の getTransferSolInstruction 関数を呼び出す必要があります。
新しいバージョンでは、関数型プログラミングで一般的に使用される pipe 形式が提供されています。以下は、pipe 関数を使用して、元の 1.x の送金機能を実装したものです:
JavaScriptの import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/system-program'; インポート{ addSignatureToTransaction、 トランザクションを作成する, sendAndConfirmTransaction、 } from '@solana/web3.js';
const transferSol = pipe( トランザクションの作成 (ix) => createTransaction({ 命令: [ix] }), // サインを追加 (tx) => addSignatureToTransaction(tx、signer)、 // 取引を送信して確認する (signedTx) = > sendAndConfirmTransaction(rpc、signedTx) );
const シグネチャ = await transferSol( getTransferSolInstruction({ 送信者から: 宛先:受信者、 量 }) );
1.x バージョンと比較して、コード量は増加しましたが、カスタマイズ性は向上しています。取引は HTTPS RPC を介して開始され、その後 WSS RPC を購読することで取引結果を確認します。
React のサポート
@solana/web3.js プロジェクトには @solana/react という名前のライブラリも含まれており、いくつかの React Hook を提供し、signIn などの機能が組み込まれています。
まとめ
@solana/web3.js 2.x バージョンのリリースは、ソラナチームの継続的な改善への決意を示しています。新しいバージョンは、開発者に効率的で柔軟かつカスタマイズ可能なソラナネットワークとのインタラクションを提供し、このプラットフォームの採用と発展を促進することが期待されています。
! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする