forked from OpenZeppelin/openzeppelin-contracts
/
InitializableMock.sol
120 lines (92 loc) · 2.59 KB
/
InitializableMock.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "../proxy/utils/Initializable.sol";
/**
* @title InitializableMock
* @dev This contract is a mock to test initializable functionality
*/
contract InitializableMock is Initializable {
bool public initializerRan;
bool public onlyInitializingRan;
uint256 public x;
function initialize() public initializer {
initializerRan = true;
}
function initializeOnlyInitializing() public onlyInitializing {
onlyInitializingRan = true;
}
function initializerNested() public initializer {
initialize();
}
function onlyInitializingNested() public initializer {
initializeOnlyInitializing();
}
function initializeWithX(uint256 _x) public payable initializer {
x = _x;
}
function nonInitializable(uint256 _x) public payable {
x = _x;
}
function fail() public pure {
require(false, "InitializableMock forced failure");
}
}
contract ConstructorInitializableMock is Initializable {
bool public initializerRan;
bool public onlyInitializingRan;
constructor() initializer {
initialize();
initializeOnlyInitializing();
}
function initialize() public initializer {
initializerRan = true;
}
function initializeOnlyInitializing() public onlyInitializing {
onlyInitializingRan = true;
}
}
contract ChildConstructorInitializableMock is ConstructorInitializableMock {
bool public childInitializerRan;
constructor() initializer {
childInitialize();
}
function childInitialize() public initializer {
childInitializerRan = true;
}
}
contract ReinitializerMock is Initializable {
uint256 public counter;
function initialize() public initializer {
doStuff();
}
function reinitialize(uint8 i) public reinitializer(i) {
doStuff();
}
function nestedReinitialize(uint8 i, uint8 j) public reinitializer(i) {
reinitialize(j);
}
function chainReinitialize(uint8 i, uint8 j) public {
reinitialize(i);
reinitialize(j);
}
function disableInitializers() public {
_disableInitializers();
}
function doStuff() public onlyInitializing {
counter++;
}
}
contract Disable1 is Initializable {
constructor() {
_disableInitializers();
}
}
contract Disable2 is Initializable {
constructor() initializer {}
}
contract Disable3 is Disable1, Disable2 {}
contract Disable4 is Initializable {
constructor() initializer {
_disableInitializers();
}
}