ethers-js について
ethers-js は、ブラウザーや Node.js で Ethereum アプリケーションを開発するための JavaScript ライブラリーです。ウォレット、ノード接続、トランザクション、コントラクト、データエンコードの機能を提供します。
主な機能
- 01ウォレットの作成、インポート、導出
- 02Ethereum ノードへの接続
- 03トランザクションの署名と送信
- 04スマートコントラクトの読み書き
- 05イベントと multicall の処理
- 06データのエンコードとハッシュ計算
活用シーン
- 01dApp へのウォレット機能の組み込み
- 02トークン残高の確認と送金
- 03JavaScript からの Ethereum トランザクション送信
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill ethers-jsインストール後、Claude Code で/ethers-jsを入力して読み込まれたか確認します。
詳細
ethers-js
目的
Ethers.js は Ethereum ブロックチェーンとやり取りするための JavaScript ライブラリで、開発者はウォレットの管理、トランザクションへの署名、スマートコントラクトのプログラムからの呼び出しを行えます。低レベルの Ethereum API を抽象化し、Web アプリケーションや Node.js アプリケーションへの統合を容易にします。
使用する場面
JavaScript 環境でウォレット操作、トランザクション処理、またはスマートコントラクトとのやり取りが必要な Ethereum ベースの dApp を構築するときに、ethers.js を使用します。Web3.js の軽量な代替手段が必要なプロジェクト、特にブラウザー上やサーバーサイドで Ethereum のスクリプトを実行するプロジェクトに適しています。
主な機能
- ウォレット管理:ニーモニックフレーズまたは秘密鍵を使用して、ウォレットの作成、インポート、導出を行います。
- プロバイダーのサポート:HTTP、WebSocket、または Infura などのサードパーティサービス経由で Ethereum ノードに接続します。
- トランザクション処理:ガスの見積もりやナンスの管理を含め、トランザクションに署名して送信します。
- スマートコントラクトとのやり取り:ABI 定義を使用してコントラクトの読み取りと書き込みを行い、イベントやマルチコールにも対応します。
- ユーティリティ関数:Ethereum 固有のタスク向けに、データのエンコード/デコード、大きな数値の処理、ハッシュの計算を行います。
使用パターン
JavaScript ファイルでは、必ず ethers.js をモジュールとしてインポートします。まずプロバイダーを初期化し、その後ウォレットまたは署名者を作成します。非同期処理には、async/await パターンを使用します。ネットワーク障害に対処できるよう、すべてのブロックチェーン呼び出しにエラー処理を設定します。秘密鍵などの機密データには、環境変数を使用します(例:process.env.PRIVATE_KEY)。
よく使うコマンド/API
- ウォレットを作成する:
ethers.Wallet.createRandom()を使用して新しいウォレットを生成します。const ethers = require('ethers'); const wallet = ethers.Wallet.createRandom(); console.log(wallet.address); - プロバイダーに接続する:URL を指定するか、API キーを使って Infura を利用します。
const provider = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/' + process.env.INFURA_API_KEY); - スマートコントラクトを呼び出す:ABI とアドレスを指定して
Contractクラスを使用します。const contract = new ethers.Contract(address, abi, signer); const result = await contract.functionName(arg1); - トランザクションに署名して送信する:署名者を使って準備し、ブロードキャストします。
const tx = await signer.sendTransaction({ to: '0xAddress', value: ethers.utils.parseEther('1.0') });
統合時の注意点
npm からインストールして、ethers.js を Node.js プロジェクトに統合します:npm install ethers。ブラウザーで使用する場合は、CDN 経由で読み込むか、Webpack でバンドルします。Infura などのサードパーティプロバイダーを使用する場合は、API キーを環境変数(例:$INFURA_API_KEY)に設定し、プロバイダーの URL に渡します。Web3 との互換性が必要な場合は、必要に応じて ethers.js の Web3Provider ラッパーを使用します。テストには Hardhat または Ganache を使用し、new ethers.providers.JsonRpcProvider('http://localhost:8545') のようなローカルプロバイダーに接続します。
エラー処理
ネットワークの問題や入力値の無効など、一般的なエラーに対処できるよう、すべての ethers.js の呼び出しを try/catch ブロックで囲みます。プロバイダーの障害に対する ethers.errors.ServerError など、特定のエラー型を確認します。イベントベースのエラー監視には、provider.on('error', handler) を使用します。例:
try {
await provider.getBlockNumber();
} catch (error) {
if (error.code === 'SERVER_ERROR') console.error('Network issue:', error.message);
}
操作の前には必ず入力値を検証します。たとえば、ethers.utils.getAddress(address) を使ってアドレスがチェックサム形式であることを確認します。
具体的な使用例
-
ウォレットを生成して資金を送る: 新しいウォレットを作成し、そのアドレスを取得して、別のアカウントから資金を送る動作をシミュレートします。
const ethers = require('ethers'); const wallet = ethers.Wallet.createRandom(); const provider = new ethers.providers.JsonRpcProvider(process.env.RPC_URL); console.log('New wallet address:', wallet.address);次に、資金のあるウォレットからのトランザクションでこのアドレスを使い、Ether を送信します。
-
ERC-20 トークンコントラクトとやり取りする: トークンコントラクトに接続し、残高を確認して、トークンを送金します。
const abi = [{ "constant": true, "inputs": [{ "name": "_owner", "type": "address" }], "name": "balanceOf", "outputs": [{ "name": "", "type": "uint256" }], "type": "function" }]; const contract = new ethers.Contract('0xTokenAddress', abi, signer); const balance = await contract.balanceOf(signer.address); await contract.transfer('0xRecipient', ethers.utils.parseUnits('10', 18));
グラフ上の関係
- 関連クラスター:blockchain(例:web3.js など、他のブロックチェーンツールと接続を共有します)。
- タグによる関連付け:ethereum(例:Ethereum 開発のスキルに関連します)、javascript(例:JS ベースのライブラリとつながります)、blockchain(例:一般的なブロックチェーンユーティリティに関連します)。