diff --git a/contracts/libraries/CMTATBeaconFactoryBase.sol b/contracts/libraries/CMTATBeaconFactoryBase.sol index e26e2d1..1f080b3 100644 --- a/contracts/libraries/CMTATBeaconFactoryBase.sol +++ b/contracts/libraries/CMTATBeaconFactoryBase.sol @@ -35,7 +35,7 @@ abstract contract CMTATBeaconFactoryBase is CMTATFactoryRoot { * @notice get the implementation address from the beacon * @return beaconImplementation Address of the CMTAT implementation contract. */ - function implementation() public virtual view returns (address beaconImplementation) { + function implementation() public view virtual returns (address beaconImplementation) { return beacon.implementation(); } @@ -52,6 +52,15 @@ abstract contract CMTATBeaconFactoryBase is CMTATFactoryRoot { return cmtat; } + /** + * @dev Deploy CMTAT and push the created CMTAT in the list. + */ + function _deployBeaconProxyBytecode(bytes memory bytecode, bytes32 deploymentSalt) internal returns (BeaconProxy cmtat) { + address cmtatAddress = _deployAndRegisterProxy(bytecode, deploymentSalt); + cmtat = BeaconProxy(payable(cmtatAddress)); + return cmtat; + } + /** * @dev Compute a beacon proxy address for an already-derived effective salt. */ @@ -76,15 +85,6 @@ abstract contract CMTATBeaconFactoryBase is CMTATFactoryRoot { ); } - /** - * @dev Deploy CMTAT and push the created CMTAT in the list. - */ - function _deployBeaconProxyBytecode(bytes memory bytecode, bytes32 deploymentSalt) internal returns (BeaconProxy cmtat) { - address cmtatAddress = _deployAndRegisterProxy(bytecode, deploymentSalt); - cmtat = BeaconProxy(payable(cmtatAddress)); - return cmtat; - } - /** * @dev return the beacon proxy bytecode */ diff --git a/contracts/libraries/CMTATFactoryRoot.sol b/contracts/libraries/CMTATFactoryRoot.sol index 313969e..e896e65 100644 --- a/contracts/libraries/CMTATFactoryRoot.sol +++ b/contracts/libraries/CMTATFactoryRoot.sol @@ -99,13 +99,6 @@ abstract contract CMTATFactoryRoot is AccessControl, ContractVersion, CMTATFacto } } - /** - * @dev Mirrors deployment salt selection without mutating customSaltUsed. - */ - function _computeDeploymentSalt(bytes32 deploymentSaltInput) internal view virtual returns(bytes32 saltBytes){ - return useCustomSalt ? deploymentSaltInput : nextDeploymentSalt(); - } - /** * @dev Deploy CMTAT proxy and register it in the factory index. * @dev Reentrancy window: Create2.deploy below runs the proxy constructor (and its CMTAT initializer) BEFORE @@ -121,4 +114,11 @@ abstract contract CMTATFactoryRoot is AccessControl, ContractVersion, CMTATFacto ++cmtatCounterId; cmtatsList.push(cmtatAddress); } + + /** + * @dev Mirrors deployment salt selection without mutating customSaltUsed. + */ + function _computeDeploymentSalt(bytes32 deploymentSaltInput) internal view virtual returns(bytes32 saltBytes){ + return useCustomSalt ? deploymentSaltInput : nextDeploymentSalt(); + } } diff --git a/contracts/libraries/CMTATTransparentFactoryBase.sol b/contracts/libraries/CMTATTransparentFactoryBase.sol index eea3459..f63018c 100644 --- a/contracts/libraries/CMTATTransparentFactoryBase.sol +++ b/contracts/libraries/CMTATTransparentFactoryBase.sol @@ -32,6 +32,15 @@ abstract contract CMTATTransparentFactoryBase is CMTATFactoryBase { return cmtat; } + /** + * @dev Deploy CMTAT and push the created CMTAT in the list. + */ + function _deployTransparentProxyBytecode(bytes memory bytecode, bytes32 deploymentSalt) internal returns (TransparentUpgradeableProxy cmtat) { + address cmtatAddress = _deployAndRegisterProxy(bytecode, deploymentSalt); + cmtat = TransparentUpgradeableProxy(payable(cmtatAddress)); + return cmtat; + } + /** * @dev Compute a transparent proxy address for an already-derived effective salt. */ @@ -60,15 +69,6 @@ abstract contract CMTATTransparentFactoryBase is CMTATFactoryBase { ); } - /** - * @dev Deploy CMTAT and push the created CMTAT in the list. - */ - function _deployTransparentProxyBytecode(bytes memory bytecode, bytes32 deploymentSalt) internal returns (TransparentUpgradeableProxy cmtat) { - address cmtatAddress = _deployAndRegisterProxy(bytecode, deploymentSalt); - cmtat = TransparentUpgradeableProxy(payable(cmtatAddress)); - return cmtat; - } - /** * @dev Reverts if the transparent proxy admin owner is zero. */ diff --git a/contracts/light/CMTAT_LIGHT_BEACON_FACTORY.sol b/contracts/light/CMTAT_LIGHT_BEACON_FACTORY.sol index ba6db7c..0ebeaae 100644 --- a/contracts/light/CMTAT_LIGHT_BEACON_FACTORY.sol +++ b/contracts/light/CMTAT_LIGHT_BEACON_FACTORY.sol @@ -53,7 +53,7 @@ contract CMTAT_LIGHT_BEACON_FACTORY is CMTATBeaconFactoryBase, ReentrancyGuard { */ function computedProxyAddress( bytes32 effectiveDeploymentSalt, - CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedBeaconProxyAddress(effectiveDeploymentSalt, _initializerData(cmtatArgument)); } @@ -66,7 +66,7 @@ contract CMTAT_LIGHT_BEACON_FACTORY is CMTATBeaconFactoryBase, ReentrancyGuard { */ function computedNextProxyAddress( bytes32 deploymentSaltInput, - CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedNextBeaconProxyAddress(deploymentSaltInput, _initializerData(cmtatArgument)); } diff --git a/contracts/light/CMTAT_LIGHT_TP_FACTORY.sol b/contracts/light/CMTAT_LIGHT_TP_FACTORY.sol index cc0f9a1..e755fa8 100644 --- a/contracts/light/CMTAT_LIGHT_TP_FACTORY.sol +++ b/contracts/light/CMTAT_LIGHT_TP_FACTORY.sol @@ -47,7 +47,7 @@ contract CMTAT_LIGHT_TP_FACTORY is CMTATTransparentFactoryBase, ReentrancyGuard function computedProxyAddress( bytes32 effectiveDeploymentSalt, address proxyAdminOwner, - CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedTransparentProxyAddress(effectiveDeploymentSalt, proxyAdminOwner, _initializerData(cmtatArgument)); } @@ -61,7 +61,7 @@ contract CMTAT_LIGHT_TP_FACTORY is CMTATTransparentFactoryBase, ReentrancyGuard function computedNextProxyAddress( bytes32 deploymentSaltInput, address proxyAdminOwner, - CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_LIGHT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedNextTransparentProxyAddress(deploymentSaltInput, proxyAdminOwner, _initializerData(cmtatArgument)); } diff --git a/contracts/mocks/ReentrancyDeployMock.sol b/contracts/mocks/ReentrancyDeployMock.sol index e317919..0538969 100644 --- a/contracts/mocks/ReentrancyDeployMock.sol +++ b/contracts/mocks/ReentrancyDeployMock.sol @@ -55,9 +55,9 @@ contract ReentrantInitLogicMock { ATTACKER = attacker_; } + receive() external payable {} + fallback() external payable { ReentrancyDeployAttacker(ATTACKER).attack(); } - - receive() external payable {} } diff --git a/contracts/standard/CMTAT_BEACON_FACTORY.sol b/contracts/standard/CMTAT_BEACON_FACTORY.sol index 5ad5aa7..8bb453b 100644 --- a/contracts/standard/CMTAT_BEACON_FACTORY.sol +++ b/contracts/standard/CMTAT_BEACON_FACTORY.sol @@ -65,7 +65,7 @@ contract CMTAT_BEACON_FACTORY is CMTATBeaconFactoryBase, ReentrancyGuard { function computedProxyAddress( bytes32 effectiveDeploymentSalt, // CMTAT function initialize - CMTAT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedBeaconProxyAddress(effectiveDeploymentSalt, _initializerData(cmtatArgument)); } @@ -78,7 +78,7 @@ contract CMTAT_BEACON_FACTORY is CMTATBeaconFactoryBase, ReentrancyGuard { */ function computedNextProxyAddress( bytes32 deploymentSaltInput, - CMTAT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedNextBeaconProxyAddress(deploymentSaltInput, _initializerData(cmtatArgument)); } diff --git a/contracts/standard/CMTAT_TP_FACTORY.sol b/contracts/standard/CMTAT_TP_FACTORY.sol index 39aa74b..80daae8 100644 --- a/contracts/standard/CMTAT_TP_FACTORY.sol +++ b/contracts/standard/CMTAT_TP_FACTORY.sol @@ -58,7 +58,7 @@ contract CMTAT_TP_FACTORY is CMTATTransparentFactoryBase, ReentrancyGuard { bytes32 effectiveDeploymentSalt, address proxyAdminOwner, // CMTAT function initialize - CMTAT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedTransparentProxyAddress(effectiveDeploymentSalt, proxyAdminOwner, _initializerData(cmtatArgument)); } @@ -72,7 +72,7 @@ contract CMTAT_TP_FACTORY is CMTATTransparentFactoryBase, ReentrancyGuard { function computedNextProxyAddress( bytes32 deploymentSaltInput, address proxyAdminOwner, - CMTAT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return _computedNextTransparentProxyAddress(deploymentSaltInput, proxyAdminOwner, _initializerData(cmtatArgument)); } diff --git a/contracts/standard/CMTAT_UUPS_FACTORY.sol b/contracts/standard/CMTAT_UUPS_FACTORY.sol index 59fd9ed..31a11f8 100644 --- a/contracts/standard/CMTAT_UUPS_FACTORY.sol +++ b/contracts/standard/CMTAT_UUPS_FACTORY.sol @@ -60,7 +60,7 @@ contract CMTAT_UUPS_FACTORY is CMTATFactoryBase, ReentrancyGuard { function computedProxyAddress( bytes32 effectiveDeploymentSalt, // CMTAT function initialize - CMTAT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { bytes memory bytecode = _getBytecode( // CMTAT function initialize cmtatArgument); @@ -76,7 +76,7 @@ contract CMTAT_UUPS_FACTORY is CMTATFactoryBase, ReentrancyGuard { */ function computedNextProxyAddress( bytes32 deploymentSaltInput, - CMTAT_ARGUMENT calldata cmtatArgument) public virtual view returns (address cmtatProxy) { + CMTAT_ARGUMENT calldata cmtatArgument) public view virtual returns (address cmtatProxy) { return computedProxyAddress( _computeDeploymentSalt(deploymentSaltInput), cmtatArgument