mirror of openzeppelin-contracts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openzeppelin-contracts/certora/harnesses/InitializableComplexHarness...

82 lines
2.0 KiB

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;
import "../munged/proxy/utils/Initializable.sol";
contract InitializableA is Initializable {
uint256 public a;
modifier version1() {
require(_initialized == 1);
_;
}
modifier versionN(uint8 n) {
require(_initialized == n);
_;
}
function __InitializableA_init(uint256 _a) internal onlyInitializing {
a = _a;
}
function returnsAV1() public view version1 returns(uint256) {
return a/2;
}
function returnsAVN(uint8 n) public view versionN(n) returns(uint256) {
return a/(n+1);
}
}
contract InitializableB is Initializable, InitializableA {
uint256 public b;
function __InitializableB_init(uint256 _b) internal onlyInitializing {
b = _b;
}
function returnsBV1() public view version1 returns(uint256) {
return b/2;
}
function returnsBVN(uint8 n) public view versionN(n) returns(uint256) {
return b/(n+1);
}
}
contract InitializableComplexHarness is Initializable, InitializableB {
uint256 public val;
function initialize(uint256 _val, uint256 _a, uint256 _b) initializer public {
val = _val;
__InitializableA_init(_a);
__InitializableB_init(_b);
}
function reinitialize(uint256 _val, uint256 _a, uint256 _b, uint8 n) reinitializer(n) public {
val = _val;
__InitializableA_init(_a);
__InitializableB_init(_b);
}
function returnsV1() public view version1 returns(uint256) {
return val/2;
}
function returnsVN(uint8 n) public view versionN(n) returns(uint256) {
return val/(n+1);
}
// Harness //
function initialized() public view returns(uint8) {
return _initialized;
}
function initializing() public view returns(bool) {
return _initializing;
}
function thisIsContract() public view returns(bool) {
return !Address.isContract(address(this));
}
}