Events
Events are special values that can be emitted during the execution of a program.
An event type can be declared with the event keyword.
_10event FooEvent(x: Int, y: Int)
The syntax of an event declaration is similar to that of a function declaration; events contain named parameters, each of which has an optional argument label.
Event parameters may only have a valid event parameter type. Valid types are boolean, string, integer, arrays and dictionaries of these types, and structures where all fields have a valid event parameter type. Resource types are not allowed, because when a resource is used as an argument, it is moved.
Events can only be declared within a contract body. Events cannot be declared globally or within resource or struct types.
_14// Invalid: An event cannot be declared globally_14//_14event GlobalEvent(field: Int)_14_14pub contract Events {_14    // Event with explicit argument labels_14    //_14    event BarEvent(labelA fieldA: Int, labelB fieldB: Int)_14_14    // Invalid: A resource type is not allowed to be used_14    // because it would be moved and lost_14    //_14    event ResourceEvent(resourceField: @Vault)_14}
Emitting events
To emit an event from a program, use the emit statement:
_15pub contract Events {_15    event FooEvent(x: Int, y: Int)_15_15    // Event with argument labels_15    event BarEvent(labelA fieldA: Int, labelB fieldB: Int)_15_15    fun events() {_15        emit FooEvent(x: 1, y: 2)_15_15        // Emit event with explicit argument labels_15        // Note that the emitted event will only contain the field names,_15        // not the argument labels used at the invocation site._15        emit BarEvent(labelA: 1, labelB: 2)_15    }_15}
Emitting events has the following restrictions:
- 
Events can only be invoked in an emitstatement.This means events cannot be assigned to variables or used as function parameters. 
- 
Events can only be emitted from the location in which they are declared.