Skip to content

Commit

Permalink
Reworked ContractStatus flag setting for the contracts inside HubCont…
Browse files Browse the repository at this point in the history
…roller
  • Loading branch information
0xbraindevd committed Nov 22, 2023
1 parent e264fa0 commit d84c137
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions contracts/v1/HubController.sol
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,17 @@ contract HubController is Named, Versioned, ContractStatus, Ownable {
address newContractAddress
) external onlyOwnerOrMultiSigOwner {
if (hub.isContract(contractName)) {
// solhint-disable-next-line no-empty-blocks
try ContractStatus(hub.getContractAddress(contractName)).setStatus(false) {} catch {}
address oldContractAddress = hub.getContractAddress(contractName);
if (_isContract(oldContractAddress)) {
// solhint-disable-next-line no-empty-blocks
try ContractStatus(hub.getContractAddress(contractName)).setStatus(false) {} catch {}
}
}
hub.setContractAddress(contractName, newContractAddress);
// solhint-disable-next-line no-empty-blocks
try ContractStatus(newContractAddress).setStatus(true) {} catch {}
if (_isContract(newContractAddress)) {
// solhint-disable-next-line no-empty-blocks
try ContractStatus(newContractAddress).setStatus(true) {} catch {}
}
}

function setAssetStorageAddress(
Expand All @@ -114,12 +119,17 @@ contract HubController is Named, Versioned, ContractStatus, Ownable {
function _setContracts(GeneralStructs.Contract[] calldata newContracts) internal {
for (uint i; i < newContracts.length; ) {
if (hub.isContract(newContracts[i].name)) {
// solhint-disable-next-line no-empty-blocks
try ContractStatus(hub.getContractAddress(newContracts[i].name)).setStatus(false) {} catch {}
address oldContractAddress = hub.getContractAddress(newContracts[i].name);
if (_isContract(oldContractAddress)) {
// solhint-disable-next-line no-empty-blocks
try ContractStatus(oldContractAddress).setStatus(false) {} catch {}
}
}
hub.setContractAddress(newContracts[i].name, newContracts[i].addr);
// solhint-disable-next-line no-empty-blocks
try ContractStatus(newContracts[i].addr).setStatus(true) {} catch {}
if (_isContract(newContracts[i].addr)) {
// solhint-disable-next-line no-empty-blocks
try ContractStatus(newContracts[i].addr).setStatus(true) {} catch {}
}
unchecked {
i++;
}
Expand Down Expand Up @@ -181,6 +191,14 @@ contract HubController is Named, Versioned, ContractStatus, Ownable {
}
}

function _isContract(address addr) internal view returns (bool) {
uint size;
assembly {
size := extcodesize(addr)
}
return size > 0;
}

function _isMultiSigOwner(address multiSigAddress) internal view returns (bool) {
try ICustodian(multiSigAddress).getOwners() returns (address[] memory multiSigOwners) {
for (uint i = 0; i < multiSigOwners.length; i++) {
Expand Down

0 comments on commit d84c137

Please sign in to comment.