# ソラナ Web3.js 2.x バージョン:機能豊富な JavaScript ライブラリのアップグレード解析ソラナ Web3.js は、機能豊富な JavaScript ライブラリで、今年 11 月に正式に 2.x バージョンがリリースされました。1.x バージョンと比較して、新しいバージョンは多くの重要な変更をもたらしました。本記事では、これらの主要な変更について概説分析を行います。2.x バージョンがリリースされたばかりで、現在の使用量は少ないですが、多くの広く使用されているライブラリはまだ切り替わっていません。しかし、これらの変更を理解することは、将来の移行作業にとって非常に重要です。## バージョン比較1.x バージョンの使用は比較的簡単です。それは一つのパッケージ:@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)この変化は、ソラナチームのドキュメント品質に対してより高い要求を提起しています。開発者が必要な機能を迅速に見つける手助けをすることが重要な課題となっています。現在、パッケージ名は良好な意味を持っており、名前から大まかな用途を理解することができるため、開発者の移行の難易度をある程度軽減しています。しかし、最近発表されたばかりなので、多くのプロジェクトはまだ移行していません。ソラナ・クックブックの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() の代わりに、await generateKeyPair() を使用してキーペアを生成できるようになりました。注目すべきは、新しい generateKeyPair が Promise を返すことであり、キー ペアを直接返しません。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変更は受け入れ難いものではなく、2024年の終了が近づく中で、JavaScript 開発者たちはすでに Promise に非常に慣れています。### トランザクションを送信する1.x バージョンのユーザーは、Transaction と VersionedTransaction の2つのクラスに非常に慣れているはずです。2.x バージョンでは、これらの2つのクラスはもはや存在しません。旧バージョンで提供されていた System Program に関連するメソッドはもはや存在しないため、SystemProgram クラスの静的メソッドは他の場所からインポートする必要があります。たとえば、transfer ディレクティブは、@solana-program/system の getTransferSolInstruction 関数を呼び出す必要があります。従来のクラスが提供されなくなったため、Web3.js は関数型プログラミングで一般的に使用される pipe 形式を提供しています。以下は、pipe 関数を使用して元の 1.x の送金機能を実装した例です。JavaScriptのimport { pipe } from '@solana/functional';import { generateKeyPair } from '@solana/web3.js';import { getTransferSolInstruction } from '@solana/system-program';import { createTransaction } from '@solana/transactions';const トランザクション = pipe( createTransaction()、 addInstruction(getTransferSolInstruction({ Pubkeyから: sender.publicKey, toPubkey: 受信者、 lamports: 金額、 })), setRecentBlockhash(blockhash)、 addSigners([sender]));const signature = await rpc.sendAndConfirmTransaction(トランザクション);見ることができるように、取引はもはや 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.0アップグレードの解析:モジュール化設計による性能と安全性の向上
ソラナ Web3.js 2.x バージョン:機能豊富な JavaScript ライブラリのアップグレード解析
ソラナ Web3.js は、機能豊富な JavaScript ライブラリで、今年 11 月に正式に 2.x バージョンがリリースされました。1.x バージョンと比較して、新しいバージョンは多くの重要な変更をもたらしました。本記事では、これらの主要な変更について概説分析を行います。
2.x バージョンがリリースされたばかりで、現在の使用量は少ないですが、多くの広く使用されているライブラリはまだ切り替わっていません。しかし、これらの変更を理解することは、将来の移行作業にとって非常に重要です。
バージョン比較
1.x バージョンの使用は比較的簡単です。それは一つのパッケージ:@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をアップグレードして関数型プログラミングを有効にする
この変化は、ソラナチームのドキュメント品質に対してより高い要求を提起しています。開発者が必要な機能を迅速に見つける手助けをすることが重要な課題となっています。現在、パッケージ名は良好な意味を持っており、名前から大まかな用途を理解することができるため、開発者の移行の難易度をある程度軽減しています。
しかし、最近発表されたばかりなので、多くのプロジェクトはまだ移行していません。ソラナ・クックブックの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() の代わりに、await generateKeyPair() を使用してキーペアを生成できるようになりました。
注目すべきは、新しい generateKeyPair が Promise を返すことであり、キー ペアを直接返しません。これは、新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変更は受け入れ難いものではなく、2024年の終了が近づく中で、JavaScript 開発者たちはすでに Promise に非常に慣れています。
トランザクションを送信する
1.x バージョンのユーザーは、Transaction と VersionedTransaction の2つのクラスに非常に慣れているはずです。2.x バージョンでは、これらの2つのクラスはもはや存在しません。
旧バージョンで提供されていた System Program に関連するメソッドはもはや存在しないため、SystemProgram クラスの静的メソッドは他の場所からインポートする必要があります。
たとえば、transfer ディレクティブは、@solana-program/system の getTransferSolInstruction 関数を呼び出す必要があります。
従来のクラスが提供されなくなったため、Web3.js は関数型プログラミングで一般的に使用される pipe 形式を提供しています。以下は、pipe 関数を使用して元の 1.x の送金機能を実装した例です。
JavaScriptの import { pipe } from '@solana/functional'; import { generateKeyPair } from '@solana/web3.js'; import { getTransferSolInstruction } from '@solana/system-program'; import { createTransaction } from '@solana/transactions';
const トランザクション = pipe( createTransaction()、 addInstruction(getTransferSolInstruction({ Pubkeyから: sender.publicKey, toPubkey: 受信者、 lamports: 金額、 })), setRecentBlockhash(blockhash)、 addSigners([sender]) );
const signature = await rpc.sendAndConfirmTransaction(トランザクション);
見ることができるように、取引はもはや 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をアップグレードして関数型プログラミングを有効にする