Omniscia rain protocol Audit
Factory Manual Review Findings
Factory Manual Review Findings
FAC-01M: Inexistent Validation of Existing Child
| Type | Severity | Location |
|---|---|---|
| Logical Fault | ![]() | Factory.sol:L50, L52 |
Description:
The createChild function does not validate whether a child has already been deployed at a particular address, a trait that can be achieved in case deterministic deployment addresses are utilized such as create2 instructions.
Example:
contracts/factory/Factory.sol
34/// Implements `IFactory`.35///36/// Calls the `_createChild` hook that inheriting contracts must override.37/// Registers child contract address such that `isChild` is `true`.38/// Emits `NewChild` event.39///40/// @param data_ Encoded data to pass down to child contract constructor.41/// @return New child contract address.42function createChild(bytes calldata data_)43 external44 virtual45 override46 nonReentrant47 returns (address)48{49 // Create child contract using hook.50 address child_ = _createChild(data_);51 // Register child contract address to `contracts` mapping.52 contracts[child_] = true;53 // Emit `NewChild` event with child contract address.54 emit IFactory.NewChild(msg.sender, child_);55 return child_;56}Recommendation:
We advise a require check to be imposed ensuring that the contracts[child_] entry is false catching any malfunction in the _createChild function.
Alleviation:
A require check was introduced ensuring that the child_ has not been previously created to avoid potential malfunctions in the _createChild function.
