こんにちは、皆さん。今回は、Web3.jsとNode.jsを用いて、Ethereumのスマートコントラクトにトランザクションを送信する方法をご紹介します。
このトピックは特に、DApp (分散型アプリケーション) の開発者向けの記事になります。
前提条件
まず、Node.jsがインストールされていることを確認し、次にWeb3.jsライブラリをインストールします。以下のコマンドを実行します。
npm install web3
また、Ethereumのネットワーク(例えば、InfuraまたはローカルのGanache)に接続するためのURL、送信元のアドレス、そのアドレスのプライベートキー、スマートコントラクトのアドレスとABI(Application Binary Interface)、呼び出したいコントラクトのメソッド名と引数を準備します。
サンプルコードの説明
以下に、Ethereumのスマートコントラクトにトランザクションを送信するための基本的なコードを示します。
// 必要なモジュールをインポート
const Web3 = require('web3');
const Tx = require('ethereumjs-tx').Transaction;
const fs = require('fs');
// ネットワークに接続
let web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
// トランザクションを送信するアドレスとそのプライベートキー
const addressFrom = 'your address';
const privateKey = Buffer.from('your private key', 'hex');
// コントラクトのアドレス
const contractAddress = 'contract address';
// ABI - ローカルのJSONファイルから読み込む
const contractABI = JSON.parse(fs.readFileSync('MyContractABI.json', 'utf8'));
// 呼び出したいコントラクトのメソッドと引数
const contractMethod = 'method';
const methodArgs = 'arguments';
// コントラクトを作成
let myContract = new web3.eth.Contract(contractABI, contractAddress);
// トランザクションオブジェクトを作成
const txCount = await web3.eth.getTransactionCount(addressFrom);
const txObject = {
nonce: web3.utils.toHex(txCount),
gasLimit: web3.utils.toHex(800000),
gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')),
to: contractAddress,
data: myContract.methods[contractMethod](...methodArgs).encodeABI()
};
// トランザクションを署名
const tx = new Tx(txObject, {'chain':'your network name'});
tx.sign(privateKey);
// トランザクションをシリアライズ
const serializedTx = tx.serialize();
const raw = '0x' + serializedTx.toString('hex');
// 署名付きトランザクションを送信
web3.eth.sendSignedTransaction(raw, (err, txHash) => {
console.log('txHash:', txHash);
// Now go check etherscan to see the transaction!
});
上記サンプルコードは、まずWeb3オブジェクトを初期化してEthereumネットワークに接続します。
次に、コントラクトのABIとアドレスを用いてコントラクトオブジェクトを作成します。このABIは、コントラクトのメソッドとその引数の型を定義したもので、JSON形式でローカルファイルから読み込んでいます。
その後、送信するトランザクションオブジェクトを作成します。ここでは、ガスリミット、ガスプライス、送信先のアドレス(コントラクトアドレス)、そしてコントラクトメソッドの呼び出しデータを指定します。
次に、このトランザクションオブジェクトを署名します。これにより、トランザクションが正当であり、偽造されていないことが保証されます。
最後に、この署名付きトランザクションをネットワークにブロードキャストします。
まとめ
Web3.jsとNode.jsを用いて、Ethereumスマートコントラクトとのインタラクションは簡単に行うことができます。
今回紹介したサンプルコードは基本的な例で、実際にはエラーハンドリングやガス価格の動的な設定など、さらに多くの要素を考慮する必要があります。
また、セキュリティ上の理由から、プライベートキーなどの重要な情報は適切に保管し、管理することが重要です。
コメント