Previous << Transactions
Next >> Core Events
イベントは、プログラムの実行中に発行できる特別な値です。
イベントの種類は、event
キーワードで宣言できます。
event FooEvent(x: Int, y: Int)
イベント宣言の構文は、関数(function)宣言の構文と類似しています。イベントには名前付きパラメータが含まれ、それぞれにオプションの引数ラベルがあります。
イベントパラメータは、有効なイベントパラメータ型のみを持つことができます。有効な型は、boolean、string、integer、これらの型の配列およびディクショナリ、およびすべてのフィールドが有効なイベントパラメータ型である構造体です。リソース型は許可されていません。リソースが引数として使用されると移動されてしまうからです。
イベントは、スマートコントラクト本体の中でしか宣言できません。イベントはグローバルに、またはリソース型や構造体の中で宣言することはできません。
/* Invalid: An event cannot be declared globally */
event GlobalEvent(field: Int)
access(all)
contract Events {
/* Event with explicit argument labels */
event BarEvent(labelA fieldA: Int, labelB fieldB: Int)
/* Invalid: A resource type is not allowed to be used
* because it would be moved and lost
*/
event ResourceEvent(resourceField: @Vault)
}
Emitting events
プログラムからイベントを発信するには、emit
ステートメントを使用します:
access(all)
contract Events {
event FooEvent(x: Int, y: Int)
/* Event with argument labels */
event BarEvent(labelA fieldA: Int, labelB fieldB: Int)
fun events() {
emit FooEvent(x: 1, y: 2)
/* Emit event with explicit argument labels
* Note that the emitted event will only contain the field names,
* not the argument labels used at the invocation site. */
emit BarEvent(labelA: 1, labelB: 2)
}
}
イベントの発信には、以下の制限があります。
- イベントは
emit
ステートメントの中でのみ呼び出すことができます。つまり、イベントを変数に割り当てたり、関数のパラメータとして使用することはできません。 - イベントは、宣言された場所(スマートコントラクト)からしか発信できません。
翻訳元