Smart contracts may emit events to allow listeners to react to changes in smart contract state.
Decentralized apps commonly need to know the current state of a smart contract, sometimes by employing a centralized storage solution, For example, they may employ a relational database to store the current state in a more efficiently queryable way. Rather than poll the smart contract for the entire state every block, we can react to events emitted by the contract which represent the important state changes.
Create an event notifier using createEventNotifier
and then call it to emit an event:
const notifyActionHappened = createEventNotifier<Address, Fixed<8>>('actionHappened', 'target', 'value');
export class HelloWorld extends SmartContract {
public action(target: Address, value: Fixed<8>): boolean {
notifyActionHappened(target, value);
return true;
}
}
The createEventNotifier
function requires an event name as the first argument, and any number of strings that define the event parameter names as the following arguments. For each event parameter name, you must define the type of that parameter using a type parameter. In the example above, we’ve defined an event called 'actionHappened'
with two parameters:
target
which is an Address
value
which is a Fixed<8>
Events must be unique throughout a smart contract.
Smart contract debugging with NEO•ONE is as simple as adding a console.log
statement wherever you would in a normal JavaScript program to aid in debugging. All types can be logged as well as converted to strings in a similar fashion to console.log
in a JavaScript program. The logs will be printed in your terminal when executing smart contract methods through Node. They will also be printed to the developer tools console in your browser.
Don’t forget to remove the console.log
statements before going to production!