From 40b6df97f3213157377861c6e8fe20edf6081db1 Mon Sep 17 00:00:00 2001 From: Marco Peyfuss Date: Tue, 26 Dec 2023 12:59:14 -0700 Subject: [PATCH] cleanup + remappings --- Makefile | 2 +- foundry.toml | 5 ++++- remappings.txt | 12 ++++++++++++ src/access/OwnableAccessControl.sol | 4 ++-- src/payments/IWETH.sol | 2 +- src/payments/RoyaltyPayoutHelper.sol | 4 ++-- src/payments/TransferHelper.sol | 2 +- src/royalties/EIP2981TL.sol | 4 ++-- .../access/OwnableAccessControlUpgradeable.sol | 11 +++++------ .../payments/RoyaltyPayoutHelperUpgradeable.sol | 8 ++++---- .../payments/SanctionsComplianceUpgradeable.sol | 7 ++++--- src/upgradeable/royalties/EIP2981TLUpgradeable.sol | 9 ++++----- test/payments/RoyaltyPayoutHelper.t.sol | 2 +- test/payments/TransferHelper.t.sol | 2 +- .../payments/RoyaltyPayoutHelperUpgradeable.t.sol | 5 ++--- test/utils/MockEIP2981TLUpgradeable.sol | 3 +-- test/utils/MockERC20.sol | 2 +- test/utils/MockOwnableAccessControlUpgradeable.sol | 3 +-- 18 files changed, 49 insertions(+), 38 deletions(-) create mode 100644 remappings.txt diff --git a/Makefile b/Makefile index de659e5..c43796f 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ compiler_test: forge test --use 0.8.22 quick_test: - forge test --fuzz-runs 512 + forge test gas_test: forge test --gas-report diff --git a/foundry.toml b/foundry.toml index 8c53031..482fd67 100644 --- a/foundry.toml +++ b/foundry.toml @@ -8,4 +8,7 @@ optimizer = true optimizer_runs = 20000 verbosity = 3 wrap_comments = true -fs_permissions = [{ access = "read", path = "./"}] \ No newline at end of file +fs_permissions = [{ access = "read", path = "./"}] + +[fuzz] +runs = 1024 \ No newline at end of file diff --git a/remappings.txt b/remappings.txt new file mode 100644 index 0000000..b903d32 --- /dev/null +++ b/remappings.txt @@ -0,0 +1,12 @@ +@manifoldxyz/libraries-solidity/=lib/royalty-registry-solidity/lib/libraries-solidity/ +@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/ +@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ +create2-helpers/=lib/royalty-registry-solidity/lib/create2-helpers/ +create2-scripts/=lib/royalty-registry-solidity/lib/create2-helpers/script/ +ds-test/=lib/forge-std/lib/ds-test/src/ +erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/ +forge-std/=lib/forge-std/src/ +libraries-solidity/=lib/royalty-registry-solidity/lib/libraries-solidity/contracts/ +openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/ +openzeppelin/=lib/openzeppelin-contracts/contracts/ +royalty-registry-solidity/=lib/royalty-registry-solidity/contracts/ \ No newline at end of file diff --git a/src/access/OwnableAccessControl.sol b/src/access/OwnableAccessControl.sol index cba6830..fc715f3 100644 --- a/src/access/OwnableAccessControl.sol +++ b/src/access/OwnableAccessControl.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {EnumerableSet} from "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol"; -import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; +import {Ownable} from "openzeppelin/access/Ownable.sol"; +import {EnumerableSet} from "openzeppelin/utils/structs/EnumerableSet.sol"; /// @title OwnableAccessControl.sol /// @notice Single owner, flexible access control mechanics diff --git a/src/payments/IWETH.sol b/src/payments/IWETH.sol index 68ea2b9..320bec3 100644 --- a/src/payments/IWETH.sol +++ b/src/payments/IWETH.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; +import {IERC20} from "openzeppelin/token/ERC20/IERC20.sol"; interface IWETH is IERC20 { function deposit() external payable; diff --git a/src/payments/RoyaltyPayoutHelper.sol b/src/payments/RoyaltyPayoutHelper.sol index d181e6e..e7a7638 100644 --- a/src/payments/RoyaltyPayoutHelper.sol +++ b/src/payments/RoyaltyPayoutHelper.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {TransferHelper} from "src/payments/TransferHelper.sol"; +import {IRoyaltyEngineV1} from "royalty-registry-solidity/IRoyaltyEngineV1.sol"; import {SanctionsCompliance} from "src/payments/SanctionsCompliance.sol"; -import {IRoyaltyEngineV1} from "lib/royalty-registry-solidity/contracts/IRoyaltyEngineV1.sol"; +import {TransferHelper} from "src/payments/TransferHelper.sol"; /// @title Royalty Payout Helper /// @notice Abstract contract to help payout royalties using the Royalty Registry diff --git a/src/payments/TransferHelper.sol b/src/payments/TransferHelper.sol index 8b3b055..7d3a520 100644 --- a/src/payments/TransferHelper.sol +++ b/src/payments/TransferHelper.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {SafeERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol"; +import {SafeERC20} from "openzeppelin/token/ERC20/utils/SafeERC20.sol"; import {IWETH, IERC20} from "src/payments/IWETH.sol"; /// @title Transfer Helper diff --git a/src/royalties/EIP2981TL.sol b/src/royalties/EIP2981TL.sol index 11361c7..bb056f8 100644 --- a/src/royalties/EIP2981TL.sol +++ b/src/royalties/EIP2981TL.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {ERC165} from "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol"; +import {ERC165} from "openzeppelin/utils/introspection/ERC165.sol"; import {IEIP2981} from "src/royalties/IEIP2981.sol"; /// @title EIP2981TL.sol @@ -12,7 +12,7 @@ import {IEIP2981} from "src/royalties/IEIP2981.sol"; /// @custom:version 3.0.0 abstract contract EIP2981TL is IEIP2981, ERC165 { /*////////////////////////////////////////////////////////////////////////// - Royalty Struct + Types //////////////////////////////////////////////////////////////////////////*/ struct RoyaltySpec { diff --git a/src/upgradeable/access/OwnableAccessControlUpgradeable.sol b/src/upgradeable/access/OwnableAccessControlUpgradeable.sol index 0e4b4f0..874cb60 100644 --- a/src/upgradeable/access/OwnableAccessControlUpgradeable.sol +++ b/src/upgradeable/access/OwnableAccessControlUpgradeable.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import {EnumerableSet} from "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol"; -import {OwnableUpgradeable} from "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol"; +import {OwnableUpgradeable} from "openzeppelin-upgradeable/access/OwnableUpgradeable.sol"; +import {EnumerableSet} from "openzeppelin/utils/structs/EnumerableSet.sol"; /// @title OwnableAccessControlUpgradeable.sol /// @notice Single owner, flexible access control mechanics @@ -12,8 +11,7 @@ import {OwnableUpgradeable} from "lib/openzeppelin-contracts-upgradeable/contrac /// may allow other roles to grant roles by using the internal helper. /// @author transientlabs.xyz /// @custom:version 3.0.0 -abstract contract OwnableAccessControlUpgradeable is Initializable, OwnableUpgradeable { - +abstract contract OwnableAccessControlUpgradeable is OwnableUpgradeable { /*////////////////////////////////////////////////////////////////////////// Types //////////////////////////////////////////////////////////////////////////*/ @@ -32,7 +30,8 @@ abstract contract OwnableAccessControlUpgradeable is Initializable, OwnableUpgra } // keccak256(abi.encode(uint256(keccak256("transientlabs.storage.OwnableAccessControl")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant OwnableAccessControlStorageLocation = 0x0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300; + bytes32 private constant OwnableAccessControlStorageLocation = + 0x0d0469b3d32e63681b9fc586a5627ad5e70b3d1ad20f31767e4b6c4141c7e300; function _getOwnableAccessControlStorage() private pure returns (OwnableAccessControlStorage storage $) { assembly { diff --git a/src/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.sol b/src/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.sol index d72ffa6..451fca0 100644 --- a/src/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.sol +++ b/src/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.sol @@ -1,17 +1,16 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; +import {IRoyaltyEngineV1} from "royalty-registry-solidity/IRoyaltyEngineV1.sol"; import {TransferHelper} from "src/payments/TransferHelper.sol"; import {SanctionsComplianceUpgradeable} from "src/upgradeable/payments/SanctionsComplianceUpgradeable.sol"; -import {IRoyaltyEngineV1} from "lib/royalty-registry-solidity/contracts/IRoyaltyEngineV1.sol"; /// @title Royalty Payout Helper /// @notice Abstract contract to help payout royalties using the Royalty Registry /// @dev Does not manage updating the sanctions oracle and expects the child contract to implement /// @author transientlabs.xyz /// @custom:version 3.0.0 -abstract contract RoyaltyPayoutHelperUpgradeable is Initializable, TransferHelper, SanctionsComplianceUpgradeable { +abstract contract RoyaltyPayoutHelperUpgradeable is SanctionsComplianceUpgradeable, TransferHelper { /*////////////////////////////////////////////////////////////////////////// Storage //////////////////////////////////////////////////////////////////////////*/ @@ -23,7 +22,8 @@ abstract contract RoyaltyPayoutHelperUpgradeable is Initializable, TransferHelpe } // keccak256(abi.encode(uint256(keccak256("transientlabs.storage.RoyaltyPayoutHelper")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant RoyaltyPayoutHelperStorageLocation = 0x9ab1d1ca9bfa2c669468b724939724262b3f2887db3df18c90168701d6422700; + bytes32 private constant RoyaltyPayoutHelperStorageLocation = + 0x9ab1d1ca9bfa2c669468b724939724262b3f2887db3df18c90168701d6422700; function _getRoyaltyPayoutHelperStorage() private pure returns (RoyaltyPayoutHelperStorage storage $) { assembly { diff --git a/src/upgradeable/payments/SanctionsComplianceUpgradeable.sol b/src/upgradeable/payments/SanctionsComplianceUpgradeable.sol index 748661b..9084570 100644 --- a/src/upgradeable/payments/SanctionsComplianceUpgradeable.sol +++ b/src/upgradeable/payments/SanctionsComplianceUpgradeable.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; +import {Initializable} from "openzeppelin-upgradeable/proxy/utils/Initializable.sol"; import {IChainalysisSanctionsOracle} from "src/payments/IChainalysisSanctionsOracle.sol"; /// @title Sanctions Compliance @@ -20,7 +20,8 @@ contract SanctionsComplianceUpgradeable is Initializable { } // keccak256(abi.encode(uint256(keccak256("transientlabs.storage.SanctionsCompliance")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant SanctionComplianceStorageLocation = 0xd66684c5a7747baca4a45cbf84c01526f3b53186fc4aea64a4c6e2fa4447c700; + bytes32 private constant SanctionComplianceStorageLocation = + 0xd66684c5a7747baca4a45cbf84c01526f3b53186fc4aea64a4c6e2fa4447c700; function _getSanctionsComplianceStorage() private pure returns (SanctionComplianceStorage storage $) { assembly { @@ -91,7 +92,7 @@ contract SanctionsComplianceUpgradeable is Initializable { //////////////////////////////////////////////////////////////////////////*/ /// @notice Function to get chainalysis oracle - function oracle() public view returns(IChainalysisSanctionsOracle) { + function oracle() public view returns (IChainalysisSanctionsOracle) { SanctionComplianceStorage storage $ = _getSanctionsComplianceStorage(); return $.oracle; } diff --git a/src/upgradeable/royalties/EIP2981TLUpgradeable.sol b/src/upgradeable/royalties/EIP2981TLUpgradeable.sol index 7fce4c5..b8d4a6a 100644 --- a/src/upgradeable/royalties/EIP2981TLUpgradeable.sol +++ b/src/upgradeable/royalties/EIP2981TLUpgradeable.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -import {ERC165Upgradeable} from - "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol"; +import {ERC165Upgradeable} from "openzeppelin-upgradeable/utils/introspection/ERC165Upgradeable.sol"; import {IEIP2981} from "src/royalties/IEIP2981.sol"; /// @title EIP2981TLUpgradeable.sol @@ -12,7 +10,7 @@ import {IEIP2981} from "src/royalties/IEIP2981.sol"; /// @dev Follows EIP-2981 (https://eips.ethereum.org/EIPS/eip-2981) /// @author transientlabs.xyz /// @custom:version 3.0.0 -abstract contract EIP2981TLUpgradeable is IEIP2981, Initializable, ERC165Upgradeable { +abstract contract EIP2981TLUpgradeable is IEIP2981, ERC165Upgradeable { /*////////////////////////////////////////////////////////////////////////// Types //////////////////////////////////////////////////////////////////////////*/ @@ -34,7 +32,8 @@ abstract contract EIP2981TLUpgradeable is IEIP2981, Initializable, ERC165Upgrade } // keccak256(abi.encode(uint256(keccak256("transientlabs.storage.EIP2981TLStorage")) - 1)) & ~bytes32(uint256(0xff)) - bytes32 private constant EIP2981TLStorageLocation = 0xe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700; + bytes32 private constant EIP2981TLStorageLocation = + 0xe9db8e9b56f2e28e12956850f386d9a4c1e886a4f584b61a10a9d0cacee70700; function _getEIP2981TLStorage() private pure returns (EIP2981TLStorage storage $) { assembly { diff --git a/test/payments/RoyaltyPayoutHelper.t.sol b/test/payments/RoyaltyPayoutHelper.t.sol index 7a3a727..3952afd 100644 --- a/test/payments/RoyaltyPayoutHelper.t.sol +++ b/test/payments/RoyaltyPayoutHelper.t.sol @@ -2,12 +2,12 @@ pragma solidity ^0.8.20; import "forge-std/Test.sol"; +import {Strings} from "openzeppelin/utils/Strings.sol"; import {Receiver, RevertingReceiver} from "test/utils/Receivers.sol"; import {WETH9} from "test/utils/WETH9.sol"; import {MockERC20, MockERC20WithFee} from "test/utils/MockERC20.sol"; import {RoyaltyPayoutHelper, IRoyaltyEngineV1} from "src/payments/RoyaltyPayoutHelper.sol"; import {IChainalysisSanctionsOracle} from "src/payments/IChainalysisSanctionsOracle.sol"; -import {Strings} from "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; contract ExternalRoyaltyPayoutHelper is RoyaltyPayoutHelper { constructor(address sanctionsAddress, address wethAddress, address royaltyEngineAddress) diff --git a/test/payments/TransferHelper.t.sol b/test/payments/TransferHelper.t.sol index 07f0545..90fab8c 100644 --- a/test/payments/TransferHelper.t.sol +++ b/test/payments/TransferHelper.t.sol @@ -2,11 +2,11 @@ pragma solidity ^0.8.20; import "forge-std/Test.sol"; +import {IERC20} from "openzeppelin/token/ERC20/IERC20.sol"; import {Receiver, RevertingReceiver, GriefingReceiver} from "test/utils/Receivers.sol"; import {WETH9} from "test/utils/WETH9.sol"; import {MockERC20, MockERC20WithFee} from "test/utils/MockERC20.sol"; import {TransferHelper} from "src/payments/TransferHelper.sol"; -import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; contract ExternalTransferHelper is TransferHelper { function safeTransferETH(address recipient, uint256 amount, address weth) external { diff --git a/test/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.t.sol b/test/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.t.sol index 48f54a9..ab2d782 100644 --- a/test/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.t.sol +++ b/test/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.t.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.20; import "forge-std/Test.sol"; +import {Strings} from "openzeppelin/utils/Strings.sol"; import {Receiver, RevertingReceiver} from "test/utils/Receivers.sol"; import {WETH9} from "test/utils/WETH9.sol"; import {MockERC20, MockERC20WithFee} from "test/utils/MockERC20.sol"; @@ -10,10 +11,8 @@ import { IRoyaltyEngineV1 } from "src/upgradeable/payments/RoyaltyPayoutHelperUpgradeable.sol"; import {IChainalysisSanctionsOracle} from "src/payments/IChainalysisSanctionsOracle.sol"; -import {Strings} from "lib/openzeppelin-contracts/contracts/utils/Strings.sol"; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; -contract ExternalRoyaltyPayoutHelper is Initializable, RoyaltyPayoutHelperUpgradeable { +contract ExternalRoyaltyPayoutHelper is RoyaltyPayoutHelperUpgradeable { function initialize(address sanctionsOracle, address wethAddress, address royaltyEngineAddress) external initializer diff --git a/test/utils/MockEIP2981TLUpgradeable.sol b/test/utils/MockEIP2981TLUpgradeable.sol index 7838b53..71fa7df 100644 --- a/test/utils/MockEIP2981TLUpgradeable.sol +++ b/test/utils/MockEIP2981TLUpgradeable.sol @@ -1,12 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import {EIP2981TLUpgradeable} from "src/upgradeable/royalties/EIP2981TLUpgradeable.sol"; /// @dev this contract does not have proper access control but is only for testing -contract MockEIP2981TLUpgradeable is Initializable, EIP2981TLUpgradeable { +contract MockEIP2981TLUpgradeable is EIP2981TLUpgradeable { function initialize(address recipient, uint256 percentage) external initializer { __EIP2981TL_init(recipient, percentage); } diff --git a/test/utils/MockERC20.sol b/test/utils/MockERC20.sol index 869d854..e8ba83d 100644 --- a/test/utils/MockERC20.sol +++ b/test/utils/MockERC20.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; +import {ERC20} from "openzeppelin/token/ERC20/ERC20.sol"; contract MockERC20 is ERC20 { constructor(address mintReceiver) ERC20("Test Token", "TEST") { diff --git a/test/utils/MockOwnableAccessControlUpgradeable.sol b/test/utils/MockOwnableAccessControlUpgradeable.sol index f057d39..918cb1f 100644 --- a/test/utils/MockOwnableAccessControlUpgradeable.sol +++ b/test/utils/MockOwnableAccessControlUpgradeable.sol @@ -1,10 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import {Initializable} from "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"; import {OwnableAccessControlUpgradeable} from "src/upgradeable/access/OwnableAccessControlUpgradeable.sol"; -contract MockOwnableAccessControlUpgradeable is Initializable, OwnableAccessControlUpgradeable { +contract MockOwnableAccessControlUpgradeable is OwnableAccessControlUpgradeable { uint256 public number; bytes32 public ADMIN_ROLE = keccak256("ADMIN"); bytes32 public MINTER_ROLE = keccak256("MINTER");