メインコンテンツへスキップ

イベントを使用したスマート・コントラクトからのデータロギング

スマート・コントラクト
Remix
Solidity
イベント
中級
jdourlens
2020年4月3日
4 分で読めます
ページを編集 (opens in a new tab)

Solidityにおいて、イベントはスマート・コントラクトが発信できるシグナルです。分散型アプリケーション (dapp) や、イーサリアムのJSON-RPC APIに接続されているあらゆるものは、これらのイベントをリッスンし、それに応じてアクションを実行できます。また、イベントにインデックスを付けて、後でイベント履歴を検索できるようにすることも可能です。

イベント

この記事の執筆時点で、イーサリアムのブロックチェーン上で最も一般的なイベントは、誰かがトークンを送金する際にERC-20トークンによって発行されるTransferイベントです。

event Transfer(address indexed from, address indexed to, uint256 value);

イベントの署名はコントラクトのコード内で宣言され、emitキーワードを使用して発行できます。たとえば、Transferイベントは、誰が送金したか(from)、誰に送金したか(to)、そしてどれだけのトークンが送金されたか(value)をログに記録します。

Counterスマート・コントラクトに戻り、値が変更されるたびにログを記録することにしたとします。このコントラクトはデプロイされることを意図しておらず、拡張して別のコントラクトを構築するためのベースとして機能するため、抽象コントラクト(abstract contract)と呼ばれます。Counterの例では、次のようになります。

以下の点に注意してください。

  • 5行目: イベントとそれに含まれる内容(古い値と新しい値)を宣言します。

  • 13行目: count変数をインクリメントする際に、イベントを発行します。

ここでコントラクトをデプロイし、increment関数を呼び出すと、logsという名前の配列内にある新しいトランザクションをクリックした場合、Remixが自動的にそれを表示することがわかります。

Remix screenshot

ログはスマート・コントラクトのデバッグに非常に役立ちますが、さまざまな人が使用するアプリケーションを構築する場合にも重要であり、スマート・コントラクトがどのように使用されているかを追跡および理解するための分析を容易にします。トランザクションによって生成されたログは、人気のあるブロックエクスプローラーに表示されます。また、たとえば特定のイベントをリッスンし、それらが発生したときにアクションを実行するオフチェーンスクリプトを作成するためにも使用できます。

ページの最終更新: 2026年3月3日