pragma solidity ^0.5.16; import "./Owned.sol"; contract BaseMigration is Owned { constructor(address _owner) internal Owned(_owner) {} // safety value to return ownership (anyone can invoke) function returnOwnership(address forContract) public { bytes memory payload = abi.encodeWithSignature("nominateNewOwner(address)", owner); // solhint-disable avoid-low-level-calls (bool success, ) = forContract.call(payload); if (!success) { // then try legacy way bytes memory legacyPayload = abi.encodeWithSignature("nominateOwner(address)", owner); // solhint-disable avoid-low-level-calls (bool legacySuccess, ) = forContract.call(legacyPayload); require(legacySuccess, "Legacy nomination failed"); } } }