You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.8 KiB
Solidity
132 lines
3.8 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.8.0;
|
|
|
|
import "../proxy/utils/Initializable.sol";
|
|
|
|
// Sample contracts showing upgradeability with multiple inheritance.
|
|
// Child contract inherits from Father and Mother contracts, and Father extends from Gramps.
|
|
//
|
|
// Human
|
|
// / \
|
|
// | Gramps
|
|
// | |
|
|
// Mother Father
|
|
// | |
|
|
// -- Child --
|
|
|
|
/**
|
|
* Sample base initializable contract that is a human
|
|
*/
|
|
contract SampleHuman is Initializable {
|
|
bool public isHuman;
|
|
|
|
function initialize() public initializer {
|
|
__SampleHuman_init();
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleHuman_init() internal onlyInitializing {
|
|
__SampleHuman_init_unchained();
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleHuman_init_unchained() internal onlyInitializing {
|
|
isHuman = true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sample base initializable contract that defines a field mother
|
|
*/
|
|
contract SampleMother is Initializable, SampleHuman {
|
|
uint256 public mother;
|
|
|
|
function initialize(uint256 value) public initializer {
|
|
__SampleMother_init(value);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleMother_init(uint256 value) internal onlyInitializing {
|
|
__SampleHuman_init();
|
|
__SampleMother_init_unchained(value);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleMother_init_unchained(uint256 value) internal onlyInitializing {
|
|
mother = value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sample base initializable contract that defines a field gramps
|
|
*/
|
|
contract SampleGramps is Initializable, SampleHuman {
|
|
string public gramps;
|
|
|
|
function initialize(string memory value) public initializer {
|
|
__SampleGramps_init(value);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleGramps_init(string memory value) internal onlyInitializing {
|
|
__SampleHuman_init();
|
|
__SampleGramps_init_unchained(value);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleGramps_init_unchained(string memory value) internal onlyInitializing {
|
|
gramps = value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sample base initializable contract that defines a field father and extends from gramps
|
|
*/
|
|
contract SampleFather is Initializable, SampleGramps {
|
|
uint256 public father;
|
|
|
|
function initialize(string memory _gramps, uint256 _father) public initializer {
|
|
__SampleFather_init(_gramps, _father);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleFather_init(string memory _gramps, uint256 _father) internal onlyInitializing {
|
|
__SampleGramps_init(_gramps);
|
|
__SampleFather_init_unchained(_father);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleFather_init_unchained(uint256 _father) internal onlyInitializing {
|
|
father = _father;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Child extends from mother, father (gramps)
|
|
*/
|
|
contract SampleChild is Initializable, SampleMother, SampleFather {
|
|
uint256 public child;
|
|
|
|
function initialize(uint256 _mother, string memory _gramps, uint256 _father, uint256 _child) public initializer {
|
|
__SampleChild_init(_mother, _gramps, _father, _child);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleChild_init(
|
|
uint256 _mother,
|
|
string memory _gramps,
|
|
uint256 _father,
|
|
uint256 _child
|
|
) internal onlyInitializing {
|
|
__SampleMother_init(_mother);
|
|
__SampleFather_init(_gramps, _father);
|
|
__SampleChild_init_unchained(_child);
|
|
}
|
|
|
|
// solhint-disable-next-line func-name-mixedcase
|
|
function __SampleChild_init_unchained(uint256 _child) internal onlyInitializing {
|
|
child = _child;
|
|
}
|
|
}
|