元記事リンク
Web3 が再び注目を集めるにつれ、イーサリアムベースの DApp (分散型アプリケーション) 開発に使用される主要な JavaScript ライブラリである ethers.js および web3.js への関心も高まっています。どちらのライブラリもイーサリアム ブロックチェーンとの対話を可能にしますが、特に開発アプローチにおいていくつかの重要な違いがあります。このドキュメントでは 2 つのライブラリを比較し、それぞれの特性、利点、欠点、開発スタイルの違いを探ります。
web3.js は、イーサリアム エコシステムの初期に登場した古いライブラリです。これは幅広い機能を提供し、単一の web3 オブジェクトからブロックチェーンと対話するためのすべてのメソッドを提供します。主にコールバック関数ベースの API スタイルを使用します。
利点:
欠点:
ethers.js は、最新の JavaScript 標準に準拠し、より良い開発者エクスペリエンスを提供することに焦点を当てた比較的新しいライブラリです。これは簡潔かつ軽量で、モジュール化された API を提供します。特に、プロバイダーと署名者を明確に分離することで、開発の柔軟性とセキュリティが向上します。 Promise ベースの API を使用しているため、簡潔な非同期コードが可能です。
利点:
欠点:
ブロックチェーン、特にイーサリアムエコシステムでは、プロバイダーと署名者が重要な概念です。これらは、DApp がブロックチェーンとどのように対話するかを定義します。 ethers.js と web3.js は、これら 2 つの概念を異なる方法で処理するため、開発アプローチに大きな違いが生じます。
プロバイダーは、ブロックチェーン ネットワークへの読み取り専用アクセスを提供します。図書館司書のようなものです。書籍(ブロックチェーンデータ)を読んで情報を取得することはできますが、書籍の内容を追加したり変更したりすることはできません。
キー機能:
署名者は、秘密キーを使用してトランザクションに署名し、ブロックチェーンに送信する機能を提供します。まるで印鑑を持った人のようだ。文書 (トランザクション) がスタンプを押されて初めて有効になるのと同じように、署名者はトランザクションに署名してブロックチェーンに記録できるようにします。
キー機能:
ethers.js は、プロバイダーと署名者を明確に分離して API を構造化しています。これにより、開発の柔軟性とセキュリティが大幅に強化されます。
プロバイダー: ethers.providers モジュールを通じてさまざまなプロバイダーを提供します。 Infura、Alchemy、Etherscan などのサービスを使用して接続することも、RPC URL を直接使用して接続することもできます。
署名者: ethers.Wallet クラスを使用して秘密鍵を管理したり、MetaMask などのウォレットに接続したりできます。
ethers.js でプロバイダーと署名者を分離すると、次の利点が得られます。
web3.js はプロバイダーと署名者を明確に分離していません。 web3.eth.accounts を通じてアカウントを管理し、トランザクションに署名しますが、ethers.js ほど明確に分離されていません。
プロバイダ: web3.setProvider() を使用してプロバイダを設定します。
署名者: web3.eth.accounts.signTransaction() を使用してトランザクションに署名します。このプロセスでは、多くの場合、秘密キーを直接使用する必要があるため、セキュリティ上の脆弱性が生じる可能性があります。 MetaMask のようなウォレットを使用することもできますが、統合は ethers.js ほどきれいではありません。
Feature | ethers.js | web3.js |
---|---|---|
Provider | Clearly separated, supports various Providers (Infura, Alchemy, etc.) | Set with web3.setProvider() |
Signer | Clearly separated, Wallet class, easy wallet integration | Managed through web3.eth.accounts, may require direct private key management |
Security | Secure private key management, enhanced security | Risk of private key exposure |
Flexibility | High flexibility, supports various Providers and wallets | Relatively low flexibility |
ethers.js は、プロバイダーと署名者を明確に分離することで、開発の柔軟性、セキュリティ、利便性を大幅に向上させます。一方、web3.js にはこの明確な分離がないため、開発がやや複雑になり、セキュリティ上の脆弱性が生じる可能性があります。したがって、新しい Web3 プロジェクトを開始する場合は、一般に ethers.js を使用することをお勧めします。
Feature | web3.js | ethers.js |
---|---|---|
API Style | Single web3 object, callback-based | Signer and Provider separated, Promise-based |
Asynchronous Processing | Handles asynchronous code using callback functions, which can reduce code readability | Can write asynchronous code concisely and clearly using Promises (easy to use async/await) |
Private Key Management | Requires direct private key management (potential security vulnerabilities) | Abstracted private key management through Signer (enhanced security) |
Network Connection | Connection setup using web3.setProvider() | Supports various networks and connection methods through Provider (Infura, Alchemy, etc.) |
新しい Web3 プロジェクトを開始するときは、ethers.js を使用することをお勧めします。 これにより、より優れた開発エクスペリエンス、パフォーマンス、セキュリティ、および最新機能が提供されます。特に、プロバイダーと署名者の分離と Promise ベースの API は最新の開発慣行に沿っており、コードの可読性と保守性が向上します。ただし、既存の web3.js プロジェクトを維持する場合、または特定の状況では、web3.js が依然として良い選択となる可能性があります。
以上がWeb の人気が高まるにつれて ethers.js と Web を比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。