🉐
Web3.jsでイベントを確認する
つぶやき
Web3.jsで署名付きtxのイベントを確認する方法に関する記事がなかったので、書きます。苦労しました😅皆さんの助けになれば幸いです。
第1ステップ:署名付きtxを用意する
以下のコードのように署名付きtxを投げて、transaction receipt(PromiEvent)を獲得します。
transaction receiptに関しては、こちらで解説しているのでぜひ読んでください。たぶん、読んだ方が何をしているかわかりやすいと思います。
const tx = {
from: this.userAddress,
to: this.contractAddress,
value: fee,
data: encodeABI,
gasPrice,
gas,
};
const signedTx = await account.signTransaction(tx);
const receipt = await this.web3.eth.sendSignedTransaction(signedTx.rawTransaction);
第2ステップ:目的のイベントログを獲得する
以下のコードで目的のログを取得します。
getEventLog = (receipt) => {
const receiptLog = receipt.logs;
const mintingContractLog = receiptLog.filter((log) => log.address == "イベントを発火しているコントラクトアドレス");
const eventLog = mintingContractLog.filter((log) => log.topics[0] == "event関数のハッシュ値(keccak256)");
return eventLog;
};
第3ステップ:ログをデコードする
const eventLog = this.getEventLog(receipt);
const decodedLog = this.web3.eth.abi.decodeParameters(
[
{ type: "address", name: "sender" },
{ type: "uint256", name: "tokenId" },
],
eventLog[0].data
);
終わり
ハードコードしているとこは編集してください。
わからないところがあったらXとかで気軽に聞いてください
Discussion