# ソラナ 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 は多数のメソッドを提供しています。しかし、そのコア機能は RPC リクエストアドレスを設定してリクエスト送信機を作成し、それを通じてさまざまなリクエストを送信することです。2.x バージョンは、この機能を実現するために、より関数型のアプローチを採用しました:JavaScriptのimport { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com',});const { sendAndConfirmTransaction } = rpc;このコードでは、sendAndConfirmTransactionを呼び出して取引を送信すると、自動的にHTTPSリクエストが発起され、WSS接続が確立され、取引状態が購読されます。取引が確認されると、取引ハッシュが返されます。### キーペア公開鍵と秘密鍵に関連する部分にも重大な変化があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey の二つのクラスは存在しなくなり、いくつかの関数に置き換えられました。例えば、await generateKeyPair() を使用してキー ペアを生成することができ、以前の Keypair.generate() の代わりになります。注目すべきは、新しい generateKeyPair が Promise を返すようになったことで、直接キー ペアを返さないことです。これは、新しい実装ができるだけ JavaScript の Web Crypto API を活用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変更は受け入れやすく、2023年が終わろうとしている今、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 { getTransferSolInstruction } from '@solana/system-program';インポート{ 取引に署名を追加する、 トランザクションを作成する、 getBase58SignerFromPrivateKey、 getSignatureFromSignedTransaction、 getTransactionMessage、 トランザクションに署名する、} from '@solana/transactions';const トランザクション = pipe( createTransaction()、 addSignatureToTransaction(getTransferSolInstruction({})),);const signedTransaction = signTransaction(transaction, [signer]);const シグネチャ = getSignatureFromSignedTransaction(signedTransaction);const メッセージ = getTransactionMessage(signedTransaction);const txid = await sendAndConfirmTransaction({ signedTransaction });取引はもはや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をアップグレードして関数型プログラミングを有効にする](https://img-cdn.gateio.im/social/moments-d3e17fab6bb8c485a8bdac5b1e385273)
ソラナ 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 は多数のメソッドを提供しています。しかし、そのコア機能は RPC リクエストアドレスを設定してリクエスト送信機を作成し、それを通じてさまざまなリクエストを送信することです。
2.x バージョンは、この機能を実現するために、より関数型のアプローチを採用しました:
JavaScriptの import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
const { sendAndConfirmTransaction } = rpc;
このコードでは、sendAndConfirmTransactionを呼び出して取引を送信すると、自動的にHTTPSリクエストが発起され、WSS接続が確立され、取引状態が購読されます。取引が確認されると、取引ハッシュが返されます。
キーペア
公開鍵と秘密鍵に関連する部分にも重大な変化があります。1.x バージョンで一般的に使用されていた Keypair と PublicKey の二つのクラスは存在しなくなり、いくつかの関数に置き換えられました。
例えば、await generateKeyPair() を使用してキー ペアを生成することができ、以前の Keypair.generate() の代わりになります。
注目すべきは、新しい generateKeyPair が Promise を返すようになったことで、直接キー ペアを返さないことです。これは、新しい実装ができるだけ JavaScript の Web Crypto API を活用し、ネイティブの Ed25519 実装を使用しているためです。Web Crypto API の多くのメソッドは非同期です。しかし、この変更は受け入れやすく、2023年が終わろうとしている今、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 { getTransferSolInstruction } from '@solana/system-program'; インポート{ 取引に署名を追加する、 トランザクションを作成する、 getBase58SignerFromPrivateKey、 getSignatureFromSignedTransaction、 getTransactionMessage、 トランザクションに署名する、 } from '@solana/transactions';
const トランザクション = pipe( createTransaction()、 addSignatureToTransaction(getTransferSolInstruction({})), );
const signedTransaction = signTransaction(transaction, [signer]); const シグネチャ = getSignatureFromSignedTransaction(signedTransaction); const メッセージ = getTransactionMessage(signedTransaction);
const txid = await sendAndConfirmTransaction({ signedTransaction });
取引はもはや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をアップグレードして関数型プログラミングを有効にする