MEDIUM severity: The vulnerability is related to the use of the `address` type instead of specific contract types in . The vulnerability is related to the use of the `address` type instead of specific contract types in the provided code. This can lead to potential type safety issues and contract existence checks being bypassed.\n\nIn the code, the `address` type is used to declare variables and function parameters,...

Vulnerable code:
```\nfunction initialise(address _rocketStorage, address _nodeAddress) external override notSelf {\n    require(_nodeAddress!= address(0), "Invalid node address");\n    require(storageState == StorageState.Undefined, "Already initialised");\n    storageState = StorageState.Uninitialised;\n    rocketStorage = RocketStorageInterface(_rocketStorage);\n```\n```\nfunction beginReduceBondAmount(address _minipoolAddress, uint256 _newBondAmount) override external onlyLatestContract("rocketMinipoolBondReducer", address(this)) {\n    RocketMinipoolInterface minipool = RocketMinipoolInterface(_minipoolAddress);\n```\n```\nfunction canReduceBondAmount(address _minipoolAddress) override public view returns (bool) {\n    RocketMinipoolInterface minipool = RocketMinipoolInterface(_minipoolAddress);\n    RocketDAONodeTrustedSettingsMinipoolInterface rocketDAONodeTrustedSettingsMinipool = \n        RocketDAONodeTrustedSettingsMinipoolInterface(getContractAddress("rocketDAONodeTrustedSettingsMinipool"));\n    uint256 reduceBondTime = getUint(keccak256(abi.encodePacked("minipool.bond.reduction.time", _minipoolAddress)));\n    return rocketDAONodeTrustedSettingsMinipool.isWithinBondReductionWindow(block.timestamp.sub(reduceBondTime));\n}\n```\n```\nfunction voteCancelReduction(address _minipoolAddress) override external onlyTrustedNode(msg.sender) onlyLatestContract("rocketMinipoolBondReducer", address(this)) {\n    require(!getReduceBondCancelled(_minipoolAddress), "Already cancelled");\n    RocketMinipoolInterface minipool = RocketMinipoolInterface(_minipoolAddress);\n}\n```\n```\nTest example = Test(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4)\nabi.encodePacked("hi", example)\n0x68695b38da6a701c568545dcfcb03fcb875f56beddc4\nabi.encodePacked("hi", address(example))\n0x68695b38da6a701c568545dcfcb03fcb875f56beddc4\n```\n```\nfunction _setMinipoolPubkey(address _minipool, bytes calldata _pubkey) private {\n    AddressSetStorageInterface addressSetStorage = AddressSetStorageInterface(getContractAddress("addressSetStorage"));\n    RocketMinipoolInterface minipool = RocketMinipoolInterface(_minipool);\n```\n```\nfunction getMinipoolDetails(address _minipoolAddress) override external view returns (MinipoolDetails memory) {\n    RocketMinipoolInterface minipoolInterface = RocketMinipoolInterface(_minipoolAddress);\n    RocketMinipoolBase minipool = RocketMinipoolBase(payable(_minipoolAddress));\n    RocketNetworkPenaltiesInterface rocketNetworkPenalties = RocketNetworkPenaltiesInterface(getContractAddress("rocketNetworkPenalties"));\n}\n```\n```\ncontract RocketNodeDistributor is RocketNodeDistributorStorageLayout {\n    bytes32 immutable distributorStorageKey;\n\n    constructor(address _nodeAddress, address _rocketStorage) {\n        rocketStorage = RocketStorageInterface(_rocketStorage);\n        nodeAddress = _nodeAddress;\n    }\n}\n```