ソラナ Web3.js 2.xバージョンの重大なアップグレード:モジュラー設計によりパフォーマンスとセキュリティが向上

ソラナ Web3.js 2.xバージョン:機能豊富なJavaScriptライブラリの重大なアップグレード

ソラナ Web3.jsは強力なJavaScriptライブラリとして、今年11月に正式に2.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%のサイズ最適化が得られ、機能のごく一部しか使用していない場合、最適化の割合はさらに高くなる可能性があります。

この変化は、ソラナチームのドキュメントの品質に対してもより高い要求をもたらしました。開発者が必要な機能を迅速に見つける方法が重要な問題となっています。現時点では、少なくともパッケージ名は良好なセマンティクスを持っており、名前からそれらの用途を大まかに理解することができます。これは、開発者の移行の難易度をある程度減少させることができます。

もちろん、最近リリースされたばかりなので、多くのプロジェクトはまだ移行を行っていません。ソラナCookbookの2.xバージョンに関するサンプルも比較的少ないです。また、新しいバージョンはランタイム組み込み機能(鍵ペアの生成など)を使用する傾向があるため、ドキュメントのこれらの部分の説明が不十分であり、開発者が混乱する可能性がある場所もあります。

2.xバージョンのもう一つの重要な特徴は、ゼロ依存です。この点は多くのユーザーにとって重要ではないかもしれませんが、今年12月初めに@solana/web3.js 1.95.5と1.95.6バージョンで発生したサプライチェーン攻撃を考えると、外部からの入力や依存関係が増えると、セキュリティ事件が発生する可能性が大幅に高まります。2.xバージョンのリリースに伴い、Web3.jsの開発チームは、ネイティブ機能をより多く使用し、外部依存関係やPolyfillsの導入を廃止することを決定しました。将来的には変化があるかもしれませんが、少なくとも現在のところ、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つのクラスはもはや存在せず、一部の関数に置き換えられました。

例えば、"await generateKeyPair()"を使用してキー ペアを生成できますが、以前は"Keypair.generate()"を使用してキー ペアを直接生成していました。

新しいgenerateKeyPairがPromiseを返すようになったことに気付いたかもしれません。以前のように直接鍵ペアを返すのではありません。これは、新しい実装ができるだけJavaScriptのWeb Crypto APIを利用し、ネイティブのEd25519実装を使用しているためです。Web Crypto APIの多くのメソッドは非同期です。しかし、この変更は受け入れられないものではなく、2024年がもうすぐ終わる中で、JavaScript開発者たちはPromiseに非常に慣れています。

トランザクションを送信する

1.xのユーザーは「Transaction」と「VersionedTransaction」という2つのクラスに非常に馴染みがあるはずです。最初にソラナを理解する際、これらの関係は混乱させるかもしれません。

2.xバージョンでは、これらの2つのクラスも存在しなくなります。

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

たとえば、@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({ 差出人: senderPublicKey, 宛先: recipientPublicKey, 量:lamports、 })), setComputeUnitLimit(200_000)、 addSignature(senderSignature) );

const signature = sendAndConfirmTransaction(rpc、transaction)を待ちます。

取引は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をアップグレードして関数型プログラミングを有効にする

SOL-0.55%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 4
  • 共有
コメント
0/400
LeverageAddictvip
· 17時間前
古いプロジェクトチームを潰す
原文表示返信0
OnchainHolmesvip
· 17時間前
ついに待っていた、さよならさよなら
原文表示返信0
TokenVelocityTraumavip
· 17時間前
アップグレードなんて面倒すぎるよ、さようなら
原文表示返信0
ProofOfNothingvip
· 17時間前
フーフー アップグレードしたので、遊んでみてください
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)