RocketNodeDistributor - Missing extcodesize check in dynamic proxy  Won't Fix
`RocketNodeDistributor` dynamically retrieves the currently set delegate from the centralized `RocketStorage` contract. The target contract (delegate) is resolved inside the fallback function. It may return `address(0)`. `rocketStorage.getAddress()` does not enforce that the requested settings key exists, which may lead to `RocketNodeDistributor` delegate-calling into `address(0)`, which returns no error. This might stay undetected when calling `RocketNodeDistributorDelegate.distribute()` as the method does not return a value, which is consistent with calling a target address with no code.\\n```\\nfallback() external payable {\\n    address \\_target = rocketStorage.getAddress(distributorStorageKey);\\n    assembly {\\n        calldatacopy(0x0, 0x0, calldatasize())\\n        let result := delegatecall(gas(), \\_target, 0x0, calldatasize(), 0x0, 0)\\n        returndatacopy(0x0, 0x0, returndatasize())\\n        switch result case 0 {revert(0, returndatasize())} default {return (0, returndatasize())}\\n    }\\n}\\n```\\n\\n```\\nfunction getAddress(bytes32 \\_key) override external view returns (address r) {\\n    return addressStorage[\\_key];\\n}\\n```\\n
Before delegate-calling into the target contract, check if it exists.\\n```\\nassembly {\\n    codeSize := extcodesize(\\_target)\\n}\\nrequire(codeSize > 0);\\n```\\n
```\\nfallback() external payable {\\n    address \\_target = rocketStorage.getAddress(distributorStorageKey);\\n    assembly {\\n        calldatacopy(0x0, 0x0, calldatasize())\\n        let result := delegatecall(gas(), \\_target, 0x0, calldatasize(), 0x0, 0)\\n        returndatacopy(0x0, 0x0, returndatasize())\\n        switch result case 0 {revert(0, returndatasize())} default {return (0, returndatasize())}\\n    }\\n}\\n```\\n