Hi @abcoathup,
I’m trying to achieve the same thing, however I can’t really make it work with truffle-upgrades
version 1.4.0.
My example is like this:
abstract contract Base1 is Initializable, OwnableUpgradeable {
uint256 public blockNumber;
function __Base_init() internal initializer {
__Ownable_init();
blockNumber = block.number;
}
uint256[50] private ______gap;
}
contract Child is Initializable, Base1, Base2, Base3, Base4 {
address public val1;
address public val2;
}
And this is the updated version
abstract contract Base1Mock is Initializable, OwnableUpgradeable {
uint256 public blockNumber;
// New fields added
uint256 public newBaseVal;
bool public baseUpgraded;
function __Base_init() internal initializer {
__Ownable_init();
blockNumber = block.number;
}
function __Base_upgrade(uint256 val) public {
require(!baseUpgraded);
baseUpgraded = true;
newBaseVal = val;
}
// size modified
uint256[48] private ______gap;
}
contract ChildMock is Initializable, Base1, Base2, Base3, Base4 {
address public val1;
address public val2;
// new fields added
uint256 public newVal;
bool private upgraded;
function upgrade(uint256 val) public {
require(!upgraded);
upgraded = true;
newVal = val;
}
}
I’m getting the following errors
mocks/BaseMock.sol: Inserted variable `newBaseVal`
Only insert variables at the end of the most derived contract
mocks/BaseMock.sol: Inserted variable `baseUpgraded`
Only insert variables at the end of the most derived contract
mocks/BaseMock.sol: Type of variable `______gap` was changed