🉐

Web3.jsでイベントを確認する

2024/04/28に公開

つぶやき

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