pragma solidity ^0.5.11; contract Counter { uint256 counter = 0; string internal constant ERROR_TOO_LOW = "COUNTER_TOO_LOW"; event Changed(uint256 counter); event Added(uint256 counter); function add() public { counter++; emit Added(counter); emit Changed(counter); } function subtract() public { require(counter > 0, ERROR_TOO_LOW); counter--; emit Changed(counter); } function getCounter() public view returns (uint256) { return counter; } }