From 030cb285da4dbd6e59346f7d496d8f4296357245 Mon Sep 17 00:00:00 2001 From: Lawrence Forman Date: Fri, 15 May 2020 01:21:24 -0400 Subject: [PATCH] `@0x/contracts-zero-ex`: Use `immutable` owner in `Puppet` instead of `Ownable`. --- .../contracts/src/external/IPuppet.sol | 9 ++++--- .../zero-ex/contracts/src/external/Puppet.sol | 26 ++++++++++++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/contracts/zero-ex/contracts/src/external/IPuppet.sol b/contracts/zero-ex/contracts/src/external/IPuppet.sol index e17725b0ee..f349476db9 100644 --- a/contracts/zero-ex/contracts/src/external/IPuppet.sol +++ b/contracts/zero-ex/contracts/src/external/IPuppet.sol @@ -23,9 +23,8 @@ import "@0x/contracts-utils/contracts/src/v06/interfaces/IOwnableV06.sol"; /// @dev A contract that can execute arbitrary calls from its owner. -interface IPuppet is - IOwnableV06 -{ +interface IPuppet { + /// @dev Execute an arbitrary call. Only an authority can call this. /// @param target The call target. /// @param callData The call data. @@ -55,4 +54,8 @@ interface IPuppet is /// @dev Allows the puppet to receive ETH. receive() external payable; + + /// @dev Fetch the immutable owner/deployer of this contract. + /// @return owner_ The immutable owner/deployer/ + function owner() external view returns (address owner_); } diff --git a/contracts/zero-ex/contracts/src/external/Puppet.sol b/contracts/zero-ex/contracts/src/external/Puppet.sol index 2d1d700c2f..aea8457bde 100644 --- a/contracts/zero-ex/contracts/src/external/Puppet.sol +++ b/contracts/zero-ex/contracts/src/external/Puppet.sol @@ -20,19 +20,39 @@ pragma solidity ^0.6.5; pragma experimental ABIEncoderV2; import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol"; -import "@0x/contracts-utils/contracts/src/v06/OwnableV06.sol"; +import "@0x/contracts-utils/contracts/src/v06/errors/LibOwnableRichErrorsV06.sol"; import "../errors/LibPuppetRichErrors.sol"; import "./IPuppet.sol"; /// @dev A contract that can execute arbitrary calls from its owner. contract Puppet is - IPuppet, - OwnableV06 + IPuppet { // solhint-disable no-unused-vars,indent,no-empty-blocks using LibRichErrorsV06 for bytes; + // solhint-disable + /// @dev Store the owner/deployer as an immutable to make this contract stateless. + address public override immutable owner; + // solhint-enable + + constructor() public { + // The deployer is the owner. + owner = msg.sender; + } + + /// @dev Allows only the (immutable) owner to call a function. + modifier onlyOwner() virtual { + if (msg.sender != owner) { + LibOwnableRichErrorsV06.OnlyOwnerError( + msg.sender, + owner + ).rrevert(); + } + _; + } + /// @dev Execute an arbitrary call. Only an authority can call this. /// @param target The call target. /// @param callData The call data.