ソラナ 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 クラスは数十種類のメソッドを提供し、開発者が必要とするすべての機能をほぼカバーしています。さらに、Solana cookbook に含まれる豊富なサンプルコードは、開発者にとって非常に便利です。

しかし、このデザインにはいくつかの問題もあります。開発者が実際に使用する機能はごく一部かもしれませんが、全てのコードライブラリがユーザーのデバイスにダウンロードされるため、ライブラリのコード量が膨大であることから、一定の読み込み遅延が発生する可能性があります。

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 バージョンは、より関数型のアプローチを採用しています:

JavaScriptの import { createSolanaRpc } from "@solana/web3.js";

const rpc = createSolanaRpc("");

sendAndConfirmTransaction を呼び出して取引を送信すると、自動的に HTTPS リクエストが発行され、WSS 接続が確立されて取引の状態が購読されます。取引が確認されると、取引ハッシュが返されます。

鍵ペアの処理

公開鍵と秘密鍵に関する処理にも大きな変化がありました。1.x バージョンで一般的に使用されていた Keypair と PublicKey クラスはもはや存在せず、一連の関数に置き換えられました。

たとえば、Keypair.generate() の代わりに、await generateKeyPair() を使用してキーペアを生成できるようになりました。

注目すべきは、新しい generateKeyPair が Promise を返すことであり、直接キー ペアを返さないことです。これは新しい実装が可能な限り JavaScript の Web Crypto API を利用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、Promise に慣れた現代の JavaScript 開発者にとって、この変更は受け入れがたいものではありません。

###トランザクション送信

1.x バージョンでお馴染みの Transaction と VersionedTransaction クラスは 2.x では存在しなくなりました。

旧バージョンで提供されていた System Program に関連するメソッドはもはや保持されていないため、SystemProgram クラスの静的メソッドは他の場所からインポートする必要があります。

たとえば、transfer ディレクティブは、@solana-program/system の getTransferSolInstruction 関数を呼び出す必要があります。

クラスが提供されなくなったため、Web3.js は関数型プログラミングで一般的に使用される pipe 形式を提供しています。以下は、pipe 関数を使用して元々の 1.x の送金機能を実現する例です:

JavaScriptの import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana/system-program";

const トランザクション = pipe( createTransaction({ バージョン: 0 }), addInstruction(getTransferSolInstruction({ fromPubkey: 送信者, toPubkey: 受信者、 ランプト: amount })) );

const signature = await rpc.sendTransaction(トランザクション);

取引はもはやConnectionを通じて開始されるのではなく、私たちが定義したRPCプロバイダーを通じて特定の関数を生成し、その関数を呼び出して取引を開始することがわかります。1.xバージョンと比べてコードの量はわずかに増加しましたが、より強力なカスタマイズ性を提供しています。

取引は HTTPS RPC を介して開始され、その後 WSS RPC を購読することで取引結果を確認します。新しい方法が WSS により依存していることを実感でき、将来的には WSS の利用がさらに広がると信じています。これは RPC サプライヤーのサービスの安定性に対してもより高い要求を突きつけることになります。

Reactのサポート

值得一提的是,@solana/web3.js プロジェクトには @solana/react というライブラリも含まれており、いくつかの React Hook を提供し、signIn などの機能を内蔵しています。

まとめ

@solana/web3.js 2.x のリリースは、ソラナチームの継続的な改善と発展への決意を十分に示しています。新しいバージョンは、開発者にソラナネットワークと効率的で柔軟かつカスタマイズ可能な方法でインタラクションを提供し、プラットフォームの採用と発展を促進するのに役立ちます。現在はまだ初期段階ですが、より多くのプロジェクトの移行とコミュニティの適応が進むにつれて、2.x バージョンは将来さらに大きな役割を果たすと信じています。

! Web3スターターシリーズ:今すぐ@solana/web3.js 2.xをアップグレードして関数型プログラミングを有効にする

SOL-5.07%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • リポスト
  • 共有
コメント
0/400
GweiWatchervip
· 08-09 18:00
古いものはアップグレードせずに通り過ぎる
原文表示返信0
TheShibaWhisperervip
· 08-09 18:00
いつアップグレードが終わるの?うんざりだ。
原文表示返信0
SchrodingerWalletvip
· 08-09 17:54
また移行を繰り返さなければならない 吐いた
原文表示返信0
SorryRugPulledvip
· 08-09 17:50
またアップグレードしなければならず、頭が痛いです。
原文表示返信0
DaoTherapyvip
· 08-09 17:42
アップグレードを待ちましょう
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)