diff options
Diffstat (limited to 'test/compilationTests/gnosis/Events/CategoricalEvent.sol')
-rw-r--r-- | test/compilationTests/gnosis/Events/CategoricalEvent.sol | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/compilationTests/gnosis/Events/CategoricalEvent.sol b/test/compilationTests/gnosis/Events/CategoricalEvent.sol new file mode 100644 index 00000000..fbd1d744 --- /dev/null +++ b/test/compilationTests/gnosis/Events/CategoricalEvent.sol @@ -0,0 +1,53 @@ +pragma solidity ^0.4.11; +import "../Events/Event.sol"; + + +/// @title Categorical event contract - Categorical events resolve to an outcome from a set of outcomes +/// @author Stefan George - <stefan@gnosis.pm> +contract CategoricalEvent is Event { + + /* + * Public functions + */ + /// @dev Contract constructor validates and sets basic event properties + /// @param _collateralToken Tokens used as collateral in exchange for outcome tokens + /// @param _oracle Oracle contract used to resolve the event + /// @param outcomeCount Number of event outcomes + function CategoricalEvent( + Token _collateralToken, + Oracle _oracle, + uint8 outcomeCount + ) + public + Event(_collateralToken, _oracle, outcomeCount) + { + + } + + /// @dev Exchanges sender's winning outcome tokens for collateral tokens + /// @return Sender's winnings + function redeemWinnings() + public + returns (uint winnings) + { + // Winning outcome has to be set + require(isOutcomeSet); + // Calculate winnings + winnings = outcomeTokens[uint(outcome)].balanceOf(msg.sender); + // Revoke tokens from winning outcome + outcomeTokens[uint(outcome)].revoke(msg.sender, winnings); + // Payout winnings + require(collateralToken.transfer(msg.sender, winnings)); + WinningsRedemption(msg.sender, winnings); + } + + /// @dev Calculates and returns event hash + /// @return Event hash + function getEventHash() + public + constant + returns (bytes32) + { + return keccak256(collateralToken, oracle, outcomeTokens.length); + } +} |