mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma solidity ^0.4.11;
 | |
| import "../Oracles/Oracle.sol";
 | |
| 
 | |
| 
 | |
| /// @title Centralized oracle contract - Allows the contract owner to set an outcome
 | |
| /// @author Stefan George - <stefan@gnosis.pm>
 | |
| contract CentralizedOracle is Oracle {
 | |
| 
 | |
|     /*
 | |
|      *  Events
 | |
|      */
 | |
|     event OwnerReplacement(address indexed newOwner);
 | |
|     event OutcomeAssignment(int outcome);
 | |
| 
 | |
|     /*
 | |
|      *  Storage
 | |
|      */
 | |
|     address public owner;
 | |
|     bytes public ipfsHash;
 | |
|     bool public isSet;
 | |
|     int public outcome;
 | |
| 
 | |
|     /*
 | |
|      *  Modifiers
 | |
|      */
 | |
|     modifier isOwner () {
 | |
|         // Only owner is allowed to proceed
 | |
|         require(msg.sender == owner);
 | |
|         _;
 | |
|     }
 | |
| 
 | |
|     /*
 | |
|      *  Public functions
 | |
|      */
 | |
|     /// @dev Constructor sets owner address and IPFS hash
 | |
|     /// @param _ipfsHash Hash identifying off chain event description
 | |
|     function CentralizedOracle(address _owner, bytes _ipfsHash)
 | |
|         public
 | |
|     {
 | |
|         // Description hash cannot be null
 | |
|         require(_ipfsHash.length == 46);
 | |
|         owner = _owner;
 | |
|         ipfsHash = _ipfsHash;
 | |
|     }
 | |
| 
 | |
|     /// @dev Replaces owner
 | |
|     /// @param newOwner New owner
 | |
|     function replaceOwner(address newOwner)
 | |
|         public
 | |
|         isOwner
 | |
|     {
 | |
|         // Result is not set yet
 | |
|         require(!isSet);
 | |
|         owner = newOwner;
 | |
|         OwnerReplacement(newOwner);
 | |
|     }
 | |
| 
 | |
|     /// @dev Sets event outcome
 | |
|     /// @param _outcome Event outcome
 | |
|     function setOutcome(int _outcome)
 | |
|         public
 | |
|         isOwner
 | |
|     {
 | |
|         // Result is not set yet
 | |
|         require(!isSet);
 | |
|         isSet = true;
 | |
|         outcome = _outcome;
 | |
|         OutcomeAssignment(_outcome);
 | |
|     }
 | |
| 
 | |
|     /// @dev Returns if winning outcome is set
 | |
|     /// @return Is outcome set?
 | |
|     function isOutcomeSet()
 | |
|         public
 | |
|         constant
 | |
|         returns (bool)
 | |
|     {
 | |
|         return isSet;
 | |
|     }
 | |
| 
 | |
|     /// @dev Returns outcome
 | |
|     /// @return Outcome
 | |
|     function getOutcome()
 | |
|         public
 | |
|         constant
 | |
|         returns (int)
 | |
|     {
 | |
|         return outcome;
 | |
|     }
 | |
| }
 |