This repository has been archived by the owner on Jan 18, 2023. It is now read-only.
/
CoreOperationState.sol
91 lines (74 loc) 路 2.36 KB
/
CoreOperationState.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
Copyright 2018 Set Labs Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
pragma solidity 0.4.25;
import { Ownable } from "openzeppelin-solidity/contracts/ownership/Ownable.sol";
import { CoreState } from "../lib/CoreState.sol";
/**
* @title Core Operation State
* @author Set Protocol
*
* The CoreOperationState contract contains methods to alter state of variables that track
* Core dependency addresses.
*/
contract CoreOperationState is
Ownable,
CoreState
{
/* ============ Enum ============ */
/**
* Operational:
* All Accounting and Issuance related functions are available for usage during this stage
*
* Shut Down:
* Only functions which allow users to redeem and withdraw funds are allowed during this stage
*/
enum OperationState {
Operational,
ShutDown,
InvalidState
}
/* ============ Events ============ */
event OperationStateChanged(
uint8 _prevState,
uint8 _newState
);
/* ============ Modifiers ============ */
modifier whenOperational() {
require(
state.operationState == uint8(OperationState.Operational),
"Core: State is non-operational"
);
_;
}
/* ============ External Functions ============ */
/**
* Updates the operation state of the protocol.
* Can only be called by owner of Core.
*
* @param _operationState Uint8 representing the current protocol operation state
*/
function setOperationState(
uint8 _operationState
)
external
onlyOwner
{
if (_operationState < uint8(OperationState.InvalidState)) {
emit OperationStateChanged(
state.operationState,
_operationState
);
state.operationState = _operationState;
}
}
}