-
Notifications
You must be signed in to change notification settings - Fork 19
/
Upgradeable.sol
47 lines (43 loc) · 1.92 KB
/
Upgradeable.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
pragma solidity ^0.4.18;
import './Proxied.sol';
/*
* @title Upgradeable v0.5
* @author Jack Tanner
* @notice The Upgradeable contract is the parent contract of any contracts that are to be used as an
* upgradeable contract
*
* Upgradeable contracts are set as the target of the Proxy contract and, so long as they do not change
* any state variables, can be upgraded by calling Proxy.upgradeTo(address)
*/
contract Upgradeable is Proxied {
/*
* @notice Modifier to make body of function only execute if the contract has not already been initialized.
*/
modifier initializeOnceOnly() {
if(!initialized[target]) {
initialized[target] = true;
emit EventInitialized(target);
_;
} else revert();
}
/**
* @notice Will always fail if called. This is used as a placeholder for the contract ABI.
* @dev This is code is never executed by the Proxy using delegate call
*/
function upgradeTo(address) public {
assert(false);
}
/**
* @notice Initialize any state variables that would normally be set in the contructor.
* @dev Initialization functionality MUST be implemented in inherited upgradeable contract if the child contract requires
* variable initialization on creation. This is because the contructor of the child contract will not execute
* and set any state when the Proxy contract targets it.
* This function MUST be called stright after the Upgradeable contract is set as the target of the Proxy. This method
* can be overwridden so that it may have arguments. Make sure that the initializeOnceOnly() modifier is used to protect
* from being initialized more than once.
* If a contract is upgraded twice, pay special attention that the state variables are not initialized again
*/
function initialize() initializeOnceOnly public {
// initialize contract state variables here
}
}