• Mark Tyneway's avatar
    contracts-bedrock: bump oz to latest release (#3308) · cdf2163e
    Mark Tyneway authored
    This bumps the open zeppelin contracts used in bedrock to the
    latest release. This bump is happening because `Ownable` becomes
    more flexible, allowing you to overwrite the logic for `onlyOwner`.
    This would enable writing a `CrossDomainOwnable` contract like so:
    
    ```solidity
    // SPDX-License-Identifier: MIT
    pragma solidity 0.8.15;
    
    import { AddressAliasHelper } from "../vendor/AddressAliasHelper.sol";
    import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
    
    abstract contract CrossDomainOwnable is Ownable {
        /**
         * @dev Throws if the sender is not the owner.
         */
        function _checkOwner() internal view {
            address sender = AddressAliasHelper.undoL1ToL2Alias(msg.sender);
            require(owner() == sender, "Ownable: caller is not the owner");
        }
    }
    ```
    
    The main diff to the `Ownable` contract is that is now looks like this:
    
    ```solidity
        /**
         * @dev Throws if called by any account other than the owner.
         */
        modifier onlyOwner() {
            _checkOwner();
            _;
        }
    
        /**
         * @dev Returns the address of the current owner.
         */
        function owner() public view virtual returns (address) {
            return _owner;
        }
    
        /**
         * @dev Throws if the sender is not the owner.
         */
        function _checkOwner() internal view virtual {
            require(owner() == _msgSender(), "Ownable: caller is not the owner");
        }
    ```
    
    The older version of the contracts doesn't have the `virtual`
    `_checkOwner` function. This does add some additional gas overhead
    as seen in the `.gas-snapshot`.
    cdf2163e
addressmanager.go 29.9 KB