-
Notifications
You must be signed in to change notification settings - Fork 0
/
PredictsStore.sol
70 lines (60 loc) · 1.66 KB
/
PredictsStore.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.0;
/**
* @title PredictsStore
* @dev Prediction data store & query
*/
contract PredictsStore {
address private owner;
mapping(uint256 => string) private predicts;
/**
* @dev Set contract deployer as owner
*/
constructor() public {
owner = msg.sender;
emit OwnerSet(address(0), owner);
}
// event for EVM logging
event OwnerSet(address indexed oldOwner, address indexed newOwner);
// modifier to check if caller is owner
modifier isOwner() {
require(msg.sender == owner, "Caller is not owner");
_;
}
// modifier to check modified
modifier whenEmpty(uint256 key) {
require(bytes(predicts[key]).length == 0, "Cannot be modified");
_;
}
/**
* @dev Change owner
* @param newOwner address of new owner
*/
function changeOwner(address newOwner) public isOwner {
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
/**
* @dev Return owner address
* @return address of owner
*/
function getOwner() external view returns (address) {
return owner;
}
/**
* @dev Store prediction data
* @param key unique key
* @param predictJson prediction data in JSON format
*/
function addPredict(uint256 key, string memory predictJson) isOwner whenEmpty(key) public {
predicts[key] = predictJson;
}
/**
* @dev Query prediction data
* @param key unique key
* @return prediction data in JSON format
*/
function getPredict(uint256 key) public view returns(string memory) {
return predicts[key];
}
}