pragma solidity ^0.4.24; import "./StandardToken.sol"; import "./Proxy.sol"; contract OutcomeTokenData { /* * Events */ event Issuance(address indexed owner, uint amount); event Revocation(address indexed owner, uint amount); /* * Storage */ address public eventContract; /* * Modifiers */ modifier isEventContract () { // Only event contract is allowed to proceed require(msg.sender == eventContract, "contract not event Contract"); _; } } /// @title Outcome token contract - Issuing and revoking outcome tokens /// @author Stefan George - contract OutcomeToken is StandardToken, OutcomeTokenData { using Math for *; /// @dev Constructor sets events contract address constructor(string _symbol, string _name) public { name = _name; symbol = _symbol; eventContract = msg.sender; } /* * Public functions */ /// @dev Events contract issues new tokens for address. Returns success /// @param _for Address of receiver /// @param outcomeTokenCount Number of tokens to issue function issue(address _for, uint outcomeTokenCount) public isEventContract() { balances[_for] = balances[_for].add(outcomeTokenCount); totalTokens = totalTokens.add(outcomeTokenCount); emit Issuance(_for, outcomeTokenCount); } /// @dev Events contract revokes tokens for address. Returns success /// @param _for Address of token holder /// @param outcomeTokenCount Number of tokens to revoke function revoke(address _for, uint outcomeTokenCount) public isEventContract() { balances[_for] = balances[_for].sub(outcomeTokenCount); totalTokens = totalTokens.sub(outcomeTokenCount); emit Revocation(_for, outcomeTokenCount); } }