Nobiq
Nobiq

イベントとログ

動いた証拠を残す「ガコン」=イベント

自動販売機はジュースが売れると「ガコン」と音がします。あの音のおかげで、買った人は「ちゃんと動いた」とわかります。今回はコントラクトに、その「ガコン」——イベントを付けます。

イベント = コントラクトが出すお知らせ

イベントは、コントラクトが「こういうことが起きました」と外の世界へ知らせる仕組みです。

  • お知らせはブロックチェーンのログ(記録帳)に残ります。あとから「いつ・何が起きたか」を調べられます
  • 記録帳に書くだけなので、コントラクトの動きそのものは変えません

使い方は 2 段階です。

  1. 宣言: event お知らせの名前(一緒に知らせたい値); — どんなお知らせを出せるか、先に決めておく
  2. 発行: emit お知らせの名前(実際の値); — 手順の中で、実際にお知らせを出す

売れたら知らせる自動販売機

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract VendingMachine {
    uint256 public sold;
    event Sold(uint256 total);

    function buy() public {
        sold += 1;
        emit Sold(sold);
    }
}
  • event Sold(uint256 total); = 「Sold(売れたよ)というお知らせを、累計本数と一緒に出します」という宣言
  • sold += 1; = sold = sold + 1; の省略形。累計を 1 増やします
  • emit Sold(sold); = ここで実際にお知らせを発行。buy が呼ばれるたび、その時点の累計が記録帳に残ります

Lab でイベントを見る

Lab の実行画面で buy を実行すると、書き込みが確定した直後、ログ欄にこう出ます。

[send] ✅ buy: block=... gas=...
[event] Sold(total=1)

この [event] の行が、あなたのコントラクトが出した「ガコン」です。もう一度 buy を押せば Sold(total=2)押した回数がブロックチェーンの記録帳に、消えない形で刻まれていきます

:::note なぜイベントを使うの? アプリの画面(フロントエンド)は、このログを読んで「購入完了!」の表示を出したり、履歴一覧を作ったりします。「記録帳に残す専用の、軽くて安いお知らせ」として、実際の開発でも必ず使う道具です。この講座の総仕上げ(第9回)で読む PulseCheck も、イベントが主役です。 :::

今回覚えたこと

  • イベント = コントラクトが外に出すお知らせ。ブロックチェーンのログ(記録帳)に残る
  • event 名前(値); で宣言し、emit 名前(値); で発行する
  • Lab では [event] 行として実行ログに表示される

次回は、記録をもっと便利にするデータ構造(mapping・struct・配列)です。「誰が何回買ったか」を人別に記録できるようになります。

:::tip Lab でやってみる 上のコードをデプロイして buy を 3 回実行。ログの [event] Sold(total=...) が 1→2→3 と増えること、sold() の読み取り結果と一致することを確かめましょう。操作方法: コントラクトを動かす の「イベントを確認する」 :::