diff --git a/contracts/access/MintingAccessControl.sol b/contracts/access/MintingAccessControl.sol index dffbd45a..d5377822 100644 --- a/contracts/access/MintingAccessControl.sol +++ b/contracts/access/MintingAccessControl.sol @@ -6,6 +6,7 @@ import {AccessControlEnumerable} from "@openzeppelin/contracts/access/AccessCont abstract contract MintingAccessControl is AccessControlEnumerable { /// @notice Role to mint tokens + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant MINTER_ROLE = bytes32("MINTER_ROLE"); /** diff --git a/contracts/allowlist/OperatorAllowlistEnforced.sol b/contracts/allowlist/OperatorAllowlistEnforced.sol index f5b9875e..e0f06349 100644 --- a/contracts/allowlist/OperatorAllowlistEnforced.sol +++ b/contracts/allowlist/OperatorAllowlistEnforced.sol @@ -1,42 +1,68 @@ -// Copyright Immutable Pty Ltd 2018 - 2023 +// Copyright Immutable Pty Ltd 2018 - 2026 // SPDX-License-Identifier: Apache 2.0 // slither-disable-start calls-loop pragma solidity >=0.8.19 <0.8.29; -// Allowlist Registry import {IOperatorAllowlist} from "./IOperatorAllowlist.sol"; - -// Interface import {IERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; - -// Errors import {OperatorAllowlistEnforcementErrors} from "../errors/Errors.sol"; -/* - OperatorAllowlistEnforced is an abstract contract that token contracts can inherit in order to set the - address of the OperatorAllowlist registry that it will interface with, so that the token contract may - enable the restriction of approvals and transfers to allowlisted users. - OperatorAllowlistEnforced is not designed to be upgradeable or extended. -*/ - +/** + * @notice OperatorAllowlistEnforced is an abstract contract that token contracts can inherit in order to set the + * address of the OperatorAllowlist registry that it will interface with, so that the token contract may + * enable the restriction of approvals and transfers to allowlisted users. + * + * OperatorAllowlistEnforced is not designed to be upgradeable or extended. + */ abstract contract OperatorAllowlistEnforced is OperatorAllowlistEnforcementErrors { - /// ===== State Variables ===== + /// @notice Emitted whenever the transfer Allowlist registry is updated + event OperatorAllowlistRegistryUpdated(address oldRegistry, address newRegistry); /// @notice Interface that implements the `IOperatorAllowlist` interface IOperatorAllowlist public operatorAllowlist; - /// ===== Events ===== + /** + * @notice Validate an approval, according to whether the target is an EOA or Allowlisted + * @param targetApproval the address of the approval target to be validated + */ + modifier validateApproval(address targetApproval) { + // Note: the validity checks are in a separate function so that if the modifier is + // used for multiple functions, the check code isn't copied for each function. + _validateApproval(targetApproval); + _; + } - /// @notice Emitted whenever the transfer Allowlist registry is updated - event OperatorAllowlistRegistryUpdated(address oldRegistry, address newRegistry); + /** + * @notice Validate a transfer, according to whether the calling address, + * from address and to address is an EOA or Allowlisted + * @param from the address of the from target to be validated + * @param to the address of the to target to be validated + */ + modifier validateTransfer(address from, address to) { + // Note: the validity checks are in a separate function so that if the modifier is + // used for multiple functions, the check code isn't copied for each function. + _validateTransfer(from, to); + _; + } + + /** + * @notice Internal function to set the operator allowlist the calling contract will interface with + * @param _operatorAllowlist the address of the Allowlist registry + */ + function _setOperatorAllowlistRegistry(address _operatorAllowlist) internal { + if (!IERC165(_operatorAllowlist).supportsInterface(type(IOperatorAllowlist).interfaceId)) { + revert AllowlistDoesNotImplementIOperatorAllowlist(); + } - /// ===== Modifiers ===== + emit OperatorAllowlistRegistryUpdated(address(operatorAllowlist), _operatorAllowlist); + operatorAllowlist = IOperatorAllowlist(_operatorAllowlist); + } /** - * @notice Internal function to validate an approval, according to whether the target is an EOA or Allowlisted + * @notice Validate an approval, according to whether the target is an EOA or Allowlisted * @param targetApproval the address of the approval target to be validated */ - modifier validateApproval(address targetApproval) { + function _validateApproval(address targetApproval) private view { // Check for: // 1. approver is an EOA. Contract constructor is handled as transfers 'from' are blocked // 2. approver is address or bytecode is allowlisted @@ -50,16 +76,15 @@ abstract contract OperatorAllowlistEnforced is OperatorAllowlistEnforcementError if (targetApproval.code.length != 0 && !operatorAllowlist.isAllowlisted(targetApproval)) { revert ApproveTargetNotInAllowlist(targetApproval); } - _; } /** - * @notice Internal function to validate a transfer, according to whether the calling address, - * from address and to address is an EOA or Allowlisted + * @notice Validate a transfer, according to whether the calling address, + * from address and to address is an EOA or Allowlisted. * @param from the address of the from target to be validated * @param to the address of the to target to be validated */ - modifier validateTransfer(address from, address to) { + function _validateTransfer(address from, address to) private view { // Check for: // 1. caller is an EOA // 2. caller is Allowlisted or is the calling address bytecode is Allowlisted @@ -83,22 +108,6 @@ abstract contract OperatorAllowlistEnforced is OperatorAllowlistEnforcementError if (to.code.length != 0 && !operatorAllowlist.isAllowlisted(to)) { revert TransferToNotInAllowlist(to); } - _; - } - - /// ===== External functions ===== - - /** - * @notice Internal function to set the operator allowlist the calling contract will interface with - * @param _operatorAllowlist the address of the Allowlist registry - */ - function _setOperatorAllowlistRegistry(address _operatorAllowlist) internal { - if (!IERC165(_operatorAllowlist).supportsInterface(type(IOperatorAllowlist).interfaceId)) { - revert AllowlistDoesNotImplementIOperatorAllowlist(); - } - - emit OperatorAllowlistRegistryUpdated(address(operatorAllowlist), _operatorAllowlist); - operatorAllowlist = IOperatorAllowlist(_operatorAllowlist); } } // slither-disable-end calls-loop diff --git a/contracts/allowlist/OperatorAllowlistUpgradeable.sol b/contracts/allowlist/OperatorAllowlistUpgradeable.sol index 5ad863e4..78e420ba 100644 --- a/contracts/allowlist/OperatorAllowlistUpgradeable.sol +++ b/contracts/allowlist/OperatorAllowlistUpgradeable.sol @@ -34,9 +34,11 @@ contract OperatorAllowlistUpgradeable is /// ===== State Variables ===== /// @notice Only REGISTRAR_ROLE can invoke white listing registration and removal + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant REGISTRAR_ROLE = bytes32("REGISTRAR_ROLE"); /// @notice Only UPGRADE_ROLE can upgrade the contract + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant UPGRADE_ROLE = bytes32("UPGRADE_ROLE"); /// @notice Mapping of Allowlisted addresses diff --git a/contracts/deployer/create/OwnableCreateDeploy.sol b/contracts/deployer/create/OwnableCreateDeploy.sol index 25ef28a8..ae71d681 100644 --- a/contracts/deployer/create/OwnableCreateDeploy.sol +++ b/contracts/deployer/create/OwnableCreateDeploy.sol @@ -12,10 +12,10 @@ pragma solidity >=0.8.19 <0.8.29; */ contract OwnableCreateDeploy { // Address that is authorised to call the deploy function. - address private immutable owner; + address private immutable OWNER; constructor() { - owner = msg.sender; + OWNER = msg.sender; } /** * @dev Deploys a new contract with the specified bytecode using the `CREATE` opcode. @@ -24,7 +24,7 @@ contract OwnableCreateDeploy { // slither-disable-next-line locked-ether function deploy(bytes memory bytecode) external payable { // solhint-disable-next-line custom-errors, reason-string - require(msg.sender == owner, "CreateDeploy: caller is not the owner"); + require(msg.sender == OWNER, "CreateDeploy: caller is not the owner"); // solhint-disable no-inline-assembly assembly { if iszero(create(callvalue(), add(bytecode, 32), mload(bytecode))) { diff --git a/contracts/deployer/create3/OwnableCreate3Address.sol b/contracts/deployer/create3/OwnableCreate3Address.sol index 2b88bcbb..0f172392 100644 --- a/contracts/deployer/create3/OwnableCreate3Address.sol +++ b/contracts/deployer/create3/OwnableCreate3Address.sol @@ -12,13 +12,13 @@ import {OwnableCreateDeploy} from "../create/OwnableCreateDeploy.sol"; */ abstract contract OwnableCreate3Address { /// @dev bytecode hash of the CreateDeploy helper contract - bytes32 internal immutable createDeployBytecodeHash; + bytes32 internal immutable CREATE_DEPLOY_BYTECODE_HASH; constructor() { // Slither is mistakenly seeing the expansion of type(OwnableCreateDeploy).creationCode // as a very large number. // slither-disable-next-line too-many-digits - createDeployBytecodeHash = keccak256(type(OwnableCreateDeploy).creationCode); + CREATE_DEPLOY_BYTECODE_HASH = keccak256(type(OwnableCreateDeploy).creationCode); } /** @@ -28,7 +28,7 @@ abstract contract OwnableCreate3Address { */ function _create3Address(bytes32 deploySalt) internal view returns (address deployed) { address deployer = address( - uint160(uint256(keccak256(abi.encodePacked(hex"ff", address(this), deploySalt, createDeployBytecodeHash)))) + uint160(uint256(keccak256(abi.encodePacked(hex"ff", address(this), deploySalt, CREATE_DEPLOY_BYTECODE_HASH)))) ); deployed = address(uint160(uint256(keccak256(abi.encodePacked(hex"d694", deployer, hex"01"))))); diff --git a/contracts/mocks/MockDisguisedEOA.sol b/contracts/mocks/MockDisguisedEOA.sol index 8c2820cd..5636e73c 100644 --- a/contracts/mocks/MockDisguisedEOA.sol +++ b/contracts/mocks/MockDisguisedEOA.sol @@ -5,10 +5,10 @@ import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; // Used in CREATE2 vector contract MockDisguisedEOA { - IERC721 public immutable tokenAddress; + IERC721 public immutable TOKEN_ADDRESS; constructor(IERC721 _tokenAddress) { - tokenAddress = _tokenAddress; + TOKEN_ADDRESS = _tokenAddress; } /// @notice This code is only for testing purposes. Do not use similar @@ -16,6 +16,6 @@ contract MockDisguisedEOA { /// @dev For details see: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom function executeTransfer(address from, address recipient, uint256 _tokenId) external { // slither-disable-next-line arbitrary-send-erc20 - tokenAddress.transferFrom(from, recipient, _tokenId); + TOKEN_ADDRESS.transferFrom(from, recipient, _tokenId); } } diff --git a/contracts/mocks/MockEIP1271Wallet.sol b/contracts/mocks/MockEIP1271Wallet.sol index 189da50a..085168c0 100644 --- a/contracts/mocks/MockEIP1271Wallet.sol +++ b/contracts/mocks/MockEIP1271Wallet.sol @@ -6,16 +6,16 @@ import {IERC1271} from "@openzeppelin/contracts/interfaces/IERC1271.sol"; import {IERC721Receiver} from "@openzeppelin/contracts/interfaces/IERC721Receiver.sol"; contract MockEIP1271Wallet is IERC1271 { - address public immutable owner; + address public immutable OWNER; constructor(address _owner) { // slither-disable-next-line missing-zero-check - owner = _owner; + OWNER = _owner; } function isValidSignature(bytes32 hash, bytes memory signature) public view override returns (bytes4) { address recoveredAddress = ECDSA.recover(hash, signature); - if (recoveredAddress == owner) { + if (recoveredAddress == OWNER) { return this.isValidSignature.selector; } else { return 0; diff --git a/contracts/mocks/MockMarketplace.sol b/contracts/mocks/MockMarketplace.sol index 0f4d2617..281b0c98 100644 --- a/contracts/mocks/MockMarketplace.sol +++ b/contracts/mocks/MockMarketplace.sol @@ -7,16 +7,16 @@ import {IERC2981} from "@openzeppelin/contracts/interfaces/IERC2981.sol"; contract MockMarketplace { error ZeroAddress(); - IERC721 public immutable tokenAddress; - IERC2981 public immutable royaltyAddress; + IERC721 public immutable TOKEN_ADDRESS; + IERC2981 public immutable ROYALTY_ADDRESS; constructor(address _tokenAddress) { - tokenAddress = IERC721(_tokenAddress); - royaltyAddress = IERC2981(_tokenAddress); + TOKEN_ADDRESS = IERC721(_tokenAddress); + ROYALTY_ADDRESS = IERC2981(_tokenAddress); } function executeTransfer(address recipient, uint256 _tokenId) public { - tokenAddress.transferFrom(msg.sender, recipient, _tokenId); + TOKEN_ADDRESS.transferFrom(msg.sender, recipient, _tokenId); } /// @notice This code is only for testing purposes. Do not use similar @@ -24,11 +24,11 @@ contract MockMarketplace { /// @dev For details see: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom function executeTransferFrom(address from, address to, uint256 _tokenId) public { // slither-disable-next-line arbitrary-send-erc20 - tokenAddress.transferFrom(from, to, _tokenId); + TOKEN_ADDRESS.transferFrom(from, to, _tokenId); } function executeApproveForAll(address operator, bool approved) public { - tokenAddress.setApprovalForAll(operator, approved); + TOKEN_ADDRESS.setApprovalForAll(operator, approved); } /// @notice This code is only for testing purposes. Do not use similar @@ -40,7 +40,7 @@ contract MockMarketplace { } // solhint-disable-next-line custom-errors require(msg.value == price, "insufficient msg.value"); - (address receiver, uint256 royaltyAmount) = royaltyAddress.royaltyInfo(_tokenId, price); + (address receiver, uint256 royaltyAmount) = ROYALTY_ADDRESS.royaltyInfo(_tokenId, price); if (receiver == address(0)) { revert ZeroAddress(); } @@ -48,6 +48,6 @@ contract MockMarketplace { payable(receiver).transfer(royaltyAmount); payable(from).transfer(sellerAmt); // slither-disable-next-line arbitrary-send-erc20 - tokenAddress.transferFrom(from, recipient, _tokenId); + TOKEN_ADDRESS.transferFrom(from, recipient, _tokenId); } } diff --git a/contracts/mocks/MockOnReceive.sol b/contracts/mocks/MockOnReceive.sol index d563d8ca..02731b35 100644 --- a/contracts/mocks/MockOnReceive.sol +++ b/contracts/mocks/MockOnReceive.sol @@ -4,13 +4,13 @@ pragma solidity >=0.8.19 <0.8.29; import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol"; contract MockOnReceive { - IERC721 public immutable tokenAddress; - address private immutable recipient; + IERC721 public immutable TOKEN_ADDRESS; + address private immutable RECIPIENT; // slither-disable-next-line missing-zero-check constructor(IERC721 _tokenAddress, address _recipient) { - tokenAddress = _tokenAddress; - recipient = _recipient; + TOKEN_ADDRESS = _tokenAddress; + RECIPIENT = _recipient; } // Attempt to transfer token to another address on receive @@ -20,7 +20,7 @@ contract MockOnReceive { /* from */ uint256 tokenId, bytes calldata /* data */ ) public returns (bytes4) { - tokenAddress.transferFrom(address(this), recipient, tokenId); + TOKEN_ADDRESS.transferFrom(address(this), RECIPIENT, tokenId); return this.onERC721Received.selector; } } diff --git a/contracts/multicall/GuardedMulticaller2.sol b/contracts/multicall/GuardedMulticaller2.sol index 1637abc9..46584c50 100644 --- a/contracts/multicall/GuardedMulticaller2.sol +++ b/contracts/multicall/GuardedMulticaller2.sol @@ -35,6 +35,7 @@ contract GuardedMulticaller2 is AccessControl, ReentrancyGuard, EIP712 { mapping(bytes32 ref => bool executed) private replayProtection; /// @dev Only those with MULTICALL_SIGNER_ROLE can generate valid signatures for execute function. + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant MULTICALL_SIGNER_ROLE = bytes32("MULTICALL_SIGNER_ROLE"); /// @dev EIP712 typehash for call diff --git a/contracts/payment-splitter/PaymentSplitter.sol b/contracts/payment-splitter/PaymentSplitter.sol index b322f03a..5ddec527 100644 --- a/contracts/payment-splitter/PaymentSplitter.sol +++ b/contracts/payment-splitter/PaymentSplitter.sol @@ -29,9 +29,11 @@ contract PaymentSplitter is AccessControlEnumerable, IPaymentSplitterErrors, Ree event PaymentReceived(address from, uint256 amount); /// @notice Role responsible for releasing funds + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant RELEASE_FUNDS_ROLE = bytes32("RELEASE_FUNDS_ROLE"); /// @notice Role responsible for registering tokens + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant TOKEN_REGISTRAR_ROLE = bytes32("TOKEN_REGISTRAR_ROLE"); /// @notice the totalshares held by payees diff --git a/contracts/staking/StakeHolderBase.sol b/contracts/staking/StakeHolderBase.sol index 0a434ac0..e0c2f614 100644 --- a/contracts/staking/StakeHolderBase.sol +++ b/contracts/staking/StakeHolderBase.sol @@ -18,9 +18,11 @@ abstract contract StakeHolderBase is ReentrancyGuardUpgradeable { /// @notice Only UPGRADE_ROLE can upgrade the contract + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant UPGRADE_ROLE = bytes32("UPGRADE_ROLE"); /// @notice Only DISTRIBUTE_ROLE can call the distribute function + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant DISTRIBUTE_ROLE = bytes32("DISTRIBUTE_ROLE"); /// @notice Version 0 version number diff --git a/contracts/staking/StakeHolderWIMXV2.sol b/contracts/staking/StakeHolderWIMXV2.sol index 4edf70df..93063bf2 100644 --- a/contracts/staking/StakeHolderWIMXV2.sol +++ b/contracts/staking/StakeHolderWIMXV2.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2 pragma solidity >=0.8.19 <0.8.29; -import {IStakeHolder, StakeHolderBase, StakeHolderBaseV2, StakeHolderNativeV2} from "./StakeHolderNativeV2.sol"; +import {IStakeHolder, StakeHolderBase, StakeHolderNativeV2} from "./StakeHolderNativeV2.sol"; import {IWIMX} from "./IWIMX.sol"; /** diff --git a/contracts/token/erc20/preset/ImmutableERC20MinterBurnerPermit.sol b/contracts/token/erc20/preset/ImmutableERC20MinterBurnerPermit.sol index 692908b5..288d4e55 100644 --- a/contracts/token/erc20/preset/ImmutableERC20MinterBurnerPermit.sol +++ b/contracts/token/erc20/preset/ImmutableERC20MinterBurnerPermit.sol @@ -19,6 +19,7 @@ import {IImmutableERC20Errors} from "./Errors.sol"; */ contract ImmutableERC20MinterBurnerPermit is ERC20Capped, ERC20Burnable, ERC20Permit, MintingAccessControl { /// @notice Role to mint tokens + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant HUB_OWNER_ROLE = bytes32("HUB_OWNER_ROLE"); /** diff --git a/contracts/token/erc721/abstract/ERC721Hybrid.sol b/contracts/token/erc721/abstract/ERC721Hybrid.sol index dd184b57..87705dc1 100644 --- a/contracts/token/erc721/abstract/ERC721Hybrid.sol +++ b/contracts/token/erc721/abstract/ERC721Hybrid.sol @@ -8,6 +8,8 @@ import {ERC721Psi, ERC721PsiBurnable} from "../erc721psi/ERC721PsiBurnable.sol"; // Errors import {IImmutableERC721Errors} from "../../../errors/Errors.sol"; +// forge-lint: disable-start(pascal-case-struct) + /* This contract allows for minting with one of two strategies: - ERC721: minting with specified tokenIDs (inefficient) diff --git a/contracts/token/erc721/abstract/ImmutableERC721Base.sol b/contracts/token/erc721/abstract/ImmutableERC721Base.sol index 7885156d..f1c34289 100644 --- a/contracts/token/erc721/abstract/ImmutableERC721Base.sol +++ b/contracts/token/erc721/abstract/ImmutableERC721Base.sol @@ -13,6 +13,9 @@ import {OperatorAllowlistEnforced} from "../../../allowlist/OperatorAllowlistEnf import {BitMaps} from "@openzeppelin/contracts/utils/structs/BitMaps.sol"; import {AccessControlEnumerable, MintingAccessControl} from "../../../access/MintingAccessControl.sol"; + +// forge-lint: disable-start(pascal-case-struct) + /* ImmutableERC721Base is an abstract contract that offers minimum preset functionality without an opinionated form of minting. This contract is intended to be inherited and implement its diff --git a/contracts/token/erc721/abstract/ImmutableERC721HybridBase.sol b/contracts/token/erc721/abstract/ImmutableERC721HybridBase.sol index 3d2ddc23..3790d85f 100644 --- a/contracts/token/erc721/abstract/ImmutableERC721HybridBase.sol +++ b/contracts/token/erc721/abstract/ImmutableERC721HybridBase.sol @@ -73,6 +73,7 @@ abstract contract ImmutableERC721HybridBase is * @notice sets the contract uri for the collection. Permissioned to only the admin role * @param _contractURI the new baseURI to set */ + // solhint-disable-next-line mixed-case-function function setContractURI(string memory _contractURI) public onlyRole(DEFAULT_ADMIN_ROLE) { contractURI = _contractURI; } diff --git a/contracts/token/erc721/erc721psi/ERC721Psi.sol b/contracts/token/erc721/erc721psi/ERC721Psi.sol index a3bff80e..7bc50201 100644 --- a/contracts/token/erc721/erc721psi/ERC721Psi.sol +++ b/contracts/token/erc721/erc721psi/ERC721Psi.sol @@ -10,7 +10,7 @@ * - github: https://github.com/estarriolvetch/ERC721Psi * - npm: https://www.npmjs.com/package/erc721psi */ -// solhint-disable +// forge-lint: disable-start(all) pragma solidity >=0.8.19 <0.8.29; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; @@ -199,7 +199,6 @@ contract ERC721Psi is Context, ERC165, IERC721, IERC721Metadata { * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { - //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Psi: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); @@ -452,7 +451,6 @@ contract ERC721Psi is Context, ERC165, IERC721, IERC721Metadata { * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ - // solhint-disable-next-line no-empty-blocks function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {} /** @@ -467,6 +465,5 @@ contract ERC721Psi is Context, ERC165, IERC721, IERC721Metadata { * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ - // solhint-disable-next-line no-empty-blocks function _afterTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {} } diff --git a/contracts/token/erc721/erc721psi/ERC721PsiV2.sol b/contracts/token/erc721/erc721psi/ERC721PsiV2.sol index 953f026d..a24ce114 100644 --- a/contracts/token/erc721/erc721psi/ERC721PsiV2.sol +++ b/contracts/token/erc721/erc721psi/ERC721PsiV2.sol @@ -13,7 +13,6 @@ import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; import {IERC165, ERC165} from "@openzeppelin/contracts/utils/introspection/ERC165.sol"; import {Address} from "@openzeppelin/contracts/utils/Address.sol"; -// solhint-disable custom-errors, reason-string abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; @@ -127,7 +126,6 @@ abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { * @dev See {IERC721-transferFrom}. */ function transferFrom(address _from, address _to, uint256 _tokenId) public virtual override { - //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), _tokenId), "ERC721Psi: transfer caller is not owner nor approved"); _transfer(_from, _to, _tokenId); } @@ -281,7 +279,6 @@ abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { // The duplicated `log4` removes an extra check and reduces stack juggling. // The assembly, together with the surrounding Solidity code, have been // delicately arranged to nudge the compiler into producing optimized opcodes. - // solhint-disable-next-line no-inline-assembly assembly { // Mask `to` to the lower 160 bits, in case the upper bits somehow aren't clean. toMasked := and(_to, _BITMASK_ADDRESS) @@ -459,11 +456,13 @@ abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { } function _bitIsSet(uint256 _bitMask, uint256 _offset) internal pure returns (bool) { + /// forge-lint: disable-next-line(incorrect-shift) uint256 bitSet = 1 << _offset; return (bitSet & _bitMask != 0); } function _setBit(uint256 _bitMask, uint256 _offset) internal pure returns (uint256) { + /// forge-lint: disable-next-line(incorrect-shift) uint256 bitSet = 1 << _offset; uint256 updatedBitMask = bitSet | _bitMask; return updatedBitMask; @@ -474,6 +473,7 @@ abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { // If offset = 1, mask should be 0xffff...ffe // If offset = 2, mask should be 0xffff...ffc // If offset = 3, mask should be 0xffff...ff8 + /// forge-lint: disable-next-line(incorrect-shift) uint256 inverseBitMask = (1 << _offset) - 1; return ~inverseBitMask; } @@ -490,7 +490,6 @@ abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ - // solhint-disable-next-line no-empty-blocks function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {} /** @@ -505,6 +504,5 @@ abstract contract ERC721PsiV2 is Context, ERC165, IERC721, IERC721Metadata { * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ - // solhint-disable-next-line no-empty-blocks function _afterTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {} } diff --git a/contracts/token/erc721/interfaces/IImmutableERC721Structs.sol b/contracts/token/erc721/interfaces/IImmutableERC721Structs.sol index e9867ac1..100f019d 100644 --- a/contracts/token/erc721/interfaces/IImmutableERC721Structs.sol +++ b/contracts/token/erc721/interfaces/IImmutableERC721Structs.sol @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; +// forge-lint: disable-start(pascal-case-struct) + interface IImmutableERC721Structs { /** * @notice A singular batch transfer request. The length of the tos and tokenIds must be matching diff --git a/contracts/token/erc721/preset/ImmutableERC721.sol b/contracts/token/erc721/preset/ImmutableERC721.sol index f8107c6a..cad4cce5 100644 --- a/contracts/token/erc721/preset/ImmutableERC721.sol +++ b/contracts/token/erc721/preset/ImmutableERC721.sol @@ -19,6 +19,7 @@ contract ImmutableERC721 is ImmutableERC721HybridBase { * @param feeNumerator_ The royalty fee numerator * @dev the royalty receiver and amount (this can not be changed once set) */ + // @solhint-disable-next-line variable-name-mixedcase constructor( address owner_, string memory name_, diff --git a/contracts/trading/seaport/conduit/ConduitController.sol b/contracts/trading/seaport/conduit/ConduitController.sol index de3aedb9..46ea8426 100644 --- a/contracts/trading/seaport/conduit/ConduitController.sol +++ b/contracts/trading/seaport/conduit/ConduitController.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.14; +// forge-lint: disable-next-line(unused-import) import {ConduitController} from "seaport-core/src/conduit/ConduitController.sol"; diff --git a/contracts/trading/seaport/validators/ReadOnlyOrderValidator.sol b/contracts/trading/seaport/validators/ReadOnlyOrderValidator.sol index bfe332b3..1c1bfbbd 100644 --- a/contracts/trading/seaport/validators/ReadOnlyOrderValidator.sol +++ b/contracts/trading/seaport/validators/ReadOnlyOrderValidator.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {ReadOnlyOrderValidator} from "seaport/contracts/helpers/order-validator/lib/ReadOnlyOrderValidator.sol"; diff --git a/contracts/trading/seaport/validators/SeaportValidator.sol b/contracts/trading/seaport/validators/SeaportValidator.sol index 772502fe..ef39b786 100644 --- a/contracts/trading/seaport/validators/SeaportValidator.sol +++ b/contracts/trading/seaport/validators/SeaportValidator.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {SeaportValidator} from "seaport/contracts/helpers/order-validator/SeaportValidator.sol"; diff --git a/contracts/trading/seaport/validators/SeaportValidatorHelper.sol b/contracts/trading/seaport/validators/SeaportValidatorHelper.sol index e7a001f3..6e656764 100644 --- a/contracts/trading/seaport/validators/SeaportValidatorHelper.sol +++ b/contracts/trading/seaport/validators/SeaportValidatorHelper.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {SeaportValidatorHelper} from "seaport/contracts/helpers/order-validator/lib/SeaportValidatorHelper.sol"; diff --git a/contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol b/contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol index 08d1ed17..fb874244 100644 --- a/contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol +++ b/contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol @@ -164,7 +164,7 @@ contract ImmutableSignedZone is } // Set the signer info. - _signers[signer] = SignerInfo(true, true); + _signers[signer] = SignerInfo({ active: true, previouslyActive: true }); // Emit an event that the signer was added. emit SignerAdded(signer); diff --git a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol index 29631173..0e502276 100644 --- a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol +++ b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol @@ -148,7 +148,7 @@ contract ImmutableSignedZoneV2 is } // Set the signer info. - _signers[signer] = SignerInfo(true, true); + _signers[signer] = SignerInfo({ active: true, previouslyActive: true }); // Emit an event that the signer was added. emit SignerAdded(signer); diff --git a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol index 4b045746..4b20b514 100644 --- a/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol +++ b/contracts/trading/seaport/zones/immutable-signed-zone/v2/ZoneAccessControl.sol @@ -14,6 +14,7 @@ import {ZoneAccessControlEventsAndErrors} from "../../../../../../contracts/trad */ abstract contract ZoneAccessControl is AccessControlEnumerable, ZoneAccessControlEventsAndErrors { /// @dev Zone manager manages the zone. + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant ZONE_MANAGER_ROLE = bytes32("ZONE_MANAGER"); /** diff --git a/contracts/trading/seaport16/conduit/ConduitController.sol b/contracts/trading/seaport16/conduit/ConduitController.sol index 5cd920aa..b4c36c40 100644 --- a/contracts/trading/seaport16/conduit/ConduitController.sol +++ b/contracts/trading/seaport16/conduit/ConduitController.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {ConduitController} from "seaport-core-16/src/conduit/ConduitController.sol"; diff --git a/contracts/trading/seaport16/validators/ReadOnlyOrderValidator.sol b/contracts/trading/seaport16/validators/ReadOnlyOrderValidator.sol index 74de5531..cc7019e9 100644 --- a/contracts/trading/seaport16/validators/ReadOnlyOrderValidator.sol +++ b/contracts/trading/seaport16/validators/ReadOnlyOrderValidator.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {ReadOnlyOrderValidator} from "seaport-16/contracts/helpers/order-validator/lib/ReadOnlyOrderValidator.sol"; diff --git a/contracts/trading/seaport16/validators/SeaportValidator.sol b/contracts/trading/seaport16/validators/SeaportValidator.sol index 196db81b..65a75fd0 100644 --- a/contracts/trading/seaport16/validators/SeaportValidator.sol +++ b/contracts/trading/seaport16/validators/SeaportValidator.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {SeaportValidator} from "seaport-16/contracts/helpers/order-validator/SeaportValidator.sol"; diff --git a/contracts/trading/seaport16/validators/SeaportValidatorHelper.sol b/contracts/trading/seaport16/validators/SeaportValidatorHelper.sol index 8f565398..9a7a04a8 100644 --- a/contracts/trading/seaport16/validators/SeaportValidatorHelper.sol +++ b/contracts/trading/seaport16/validators/SeaportValidatorHelper.sol @@ -2,4 +2,5 @@ // solhint-disable pragma solidity ^0.8.17; +// forge-lint: disable-next-line(unused-import) import {SeaportValidatorHelper} from "seaport-16/contracts/helpers/order-validator/lib/SeaportValidatorHelper.sol"; diff --git a/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.sol b/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.sol index 5b5107ed..dbc8886b 100644 --- a/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.sol +++ b/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.sol @@ -170,7 +170,7 @@ contract ImmutableSignedZoneV3 is } // Set the signer info. - _signers[signer] = SignerInfo(true, true); + _signers[signer] = SignerInfo({ active: true, previouslyActive: true }); // Emit an event that the signer was added. emit SignerAdded(signer); diff --git a/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ZoneAccessControl.sol b/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ZoneAccessControl.sol index bf36af88..39467608 100644 --- a/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ZoneAccessControl.sol +++ b/contracts/trading/seaport16/zones/immutable-signed-zone/v3/ZoneAccessControl.sol @@ -14,6 +14,7 @@ import {ZoneAccessControlEventsAndErrors} from "./interfaces/ZoneAccessControlEv */ abstract contract ZoneAccessControl is AccessControlEnumerable, ZoneAccessControlEventsAndErrors { /// @dev Zone manager manages the zone. + // forge-lint: disable-next-line(unsafe-typecast) bytes32 public constant ZONE_MANAGER_ROLE = bytes32("ZONE_MANAGER"); /** diff --git a/foundry.toml b/foundry.toml index 8e6b1d92..bd2b5d38 100644 --- a/foundry.toml +++ b/foundry.toml @@ -7,3 +7,5 @@ fs_permissions = [{ access = "read", path = "./foundry-out" }] # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options +[lint] +exclude_lints = ["mixed-case-function","mixed-case-variable","asm-keccak256"] diff --git a/perfTest/token/erc721/ERC721ByQuantityPerf.t.sol b/perfTest/token/erc721/ERC721ByQuantityPerf.t.sol index f5ab7dc6..442545a7 100644 --- a/perfTest/token/erc721/ERC721ByQuantityPerf.t.sol +++ b/perfTest/token/erc721/ERC721ByQuantityPerf.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ERC721PerfTest} from "./ERC721Perf.t.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; import {IImmutableERC721Structs} from "../../../contracts/token/erc721/interfaces/IImmutableERC721Structs.sol"; diff --git a/perfTest/token/erc721/ERC721Perf.t.sol b/perfTest/token/erc721/ERC721Perf.t.sol index 47fc059a..e3be5c84 100644 --- a/perfTest/token/erc721/ERC721Perf.t.sol +++ b/perfTest/token/erc721/ERC721Perf.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ERC721BaseTest} from "../../../test/token/erc721/ERC721Base.t.sol"; import {IImmutableERC721} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; import {IImmutableERC721Structs} from "../../../contracts/token/erc721/interfaces/IImmutableERC721Structs.sol"; diff --git a/perfTest/token/erc721/ImmutableERC721ByIdPerf.t.sol b/perfTest/token/erc721/ImmutableERC721ByIdPerf.t.sol index 0ebdcce0..913e2817 100644 --- a/perfTest/token/erc721/ImmutableERC721ByIdPerf.t.sol +++ b/perfTest/token/erc721/ImmutableERC721ByIdPerf.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ERC721PerfTest} from "./ERC721Perf.t.sol"; import {ImmutableERC721} from "../../../contracts/token/erc721/preset/ImmutableERC721.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; diff --git a/perfTest/token/erc721/ImmutableERC721ByQuantityPerf.t.sol b/perfTest/token/erc721/ImmutableERC721ByQuantityPerf.t.sol index f808aa57..85b86015 100644 --- a/perfTest/token/erc721/ImmutableERC721ByQuantityPerf.t.sol +++ b/perfTest/token/erc721/ImmutableERC721ByQuantityPerf.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ERC721ByQuantityPerfTest} from "./ERC721ByQuantityPerf.t.sol"; import {ImmutableERC721} from "../../../contracts/token/erc721/preset/ImmutableERC721.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; diff --git a/perfTest/token/erc721/ImmutableERC721V2ByQuantityPerf.t.sol b/perfTest/token/erc721/ImmutableERC721V2ByQuantityPerf.t.sol index 38af3611..5d53bdce 100644 --- a/perfTest/token/erc721/ImmutableERC721V2ByQuantityPerf.t.sol +++ b/perfTest/token/erc721/ImmutableERC721V2ByQuantityPerf.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ERC721ByQuantityPerfTest} from "./ERC721ByQuantityPerf.t.sol"; import {ImmutableERC721V2} from "../../../contracts/token/erc721/preset/ImmutableERC721V2.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; diff --git a/script/games/gems/DeployGemGame.sol b/script/games/gems/DeployGemGame.sol index bade8ce6..2c334ad5 100644 --- a/script/games/gems/DeployGemGame.sol +++ b/script/games/gems/DeployGemGame.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.20; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {GemGame} from "../../../contracts/games/gems/GemGame.sol"; /** @@ -41,6 +41,7 @@ contract DeployGemGame is Test { function testDeploy() external { /// @dev Fork the Immutable zkEVM testnet for this test + // @solhint-disable-next-line variable-name-mixedcase string memory rpcURL = "https://rpc.testnet.immutable.com"; vm.createSelectFork(rpcURL); diff --git a/script/staking/ChangeDistributor.t.sol b/script/staking/ChangeDistributor.t.sol index 300ad830..1588d801 100644 --- a/script/staking/ChangeDistributor.t.sol +++ b/script/staking/ChangeDistributor.t.sol @@ -2,18 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.20; -import "forge-std/Test.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; +import {Test} from "forge-std/Test.sol"; import {TimelockController} from "openzeppelin-contracts-4.9.3/governance/TimelockController.sol"; -import {IERC20} from "openzeppelin-contracts-4.9.3/token/ERC20/IERC20.sol"; -import {UUPSUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/proxy/utils/UUPSUpgradeable.sol"; import {IAccessControlUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/access/IAccessControlUpgradeable.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; -import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; -import {StakeHolderWIMXV2} from "../../contracts/staking/StakeHolderWIMXV2.sol"; -import {WIMX} from "../../contracts/staking/WIMX.sol"; -import {OwnableCreate3Deployer} from "../../contracts/deployer/create3/OwnableCreate3Deployer.sol"; /** diff --git a/script/staking/StakeHolderScriptERC20.t.sol b/script/staking/StakeHolderScriptERC20.t.sol index 0f1df6d2..a2c73605 100644 --- a/script/staking/StakeHolderScriptERC20.t.sol +++ b/script/staking/StakeHolderScriptERC20.t.sol @@ -2,7 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.20; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; +import {console} from "forge-std/console.sol"; import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; import {TimelockController} from "openzeppelin-contracts-4.9.3/governance/TimelockController.sol"; import {ERC20PresetFixedSupply} from "openzeppelin-contracts-4.9.3/token/ERC20/presets/ERC20PresetFixedSupply.sol"; @@ -385,8 +386,9 @@ contract StakeHolderScriptERC20 is Test { address user1 = makeAddr("user1"); vm.startBroadcast(_bank); - erc20.transfer(user1, 100 ether); + bool success = erc20.transfer(user1, 100 ether); vm.stopBroadcast(); + require(success, "ERC20 transfer unexpectedly failed"); _stake(_stakeHolder, user1, 10 ether); diff --git a/script/staking/StakeHolderScriptWIMX.t.sol b/script/staking/StakeHolderScriptWIMX.t.sol index 56d2fdca..8d4b4632 100644 --- a/script/staking/StakeHolderScriptWIMX.t.sol +++ b/script/staking/StakeHolderScriptWIMX.t.sol @@ -2,15 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.20; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; +import {console} from "forge-std/console.sol"; import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; import {TimelockController} from "openzeppelin-contracts-4.9.3/governance/TimelockController.sol"; import {IERC20} from "openzeppelin-contracts-4.9.3/token/ERC20/IERC20.sol"; -import {UUPSUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/proxy/utils/UUPSUpgradeable.sol"; -import {IAccessControlUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/access/IAccessControlUpgradeable.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; -import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; import {StakeHolderWIMXV2} from "../../contracts/staking/StakeHolderWIMXV2.sol"; import {WIMX} from "../../contracts/staking/WIMX.sol"; import {OwnableCreate3Deployer} from "../../contracts/deployer/create3/OwnableCreate3Deployer.sol"; diff --git a/script/staking/UpgradeToWIMXV2.t.sol b/script/staking/UpgradeToWIMXV2.t.sol index c4113a3e..83734cb8 100644 --- a/script/staking/UpgradeToWIMXV2.t.sol +++ b/script/staking/UpgradeToWIMXV2.t.sol @@ -2,18 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.20; -import "forge-std/Test.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; +import {Test} from "forge-std/Test.sol"; +import {console} from "forge-std/console.sol"; import {TimelockController} from "openzeppelin-contracts-4.9.3/governance/TimelockController.sol"; -import {IERC20} from "openzeppelin-contracts-4.9.3/token/ERC20/IERC20.sol"; import {UUPSUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/proxy/utils/UUPSUpgradeable.sol"; -import {IAccessControlUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/access/IAccessControlUpgradeable.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; import {StakeHolderWIMXV2} from "../../contracts/staking/StakeHolderWIMXV2.sol"; -import {WIMX} from "../../contracts/staking/WIMX.sol"; -import {OwnableCreate3Deployer} from "../../contracts/deployer/create3/OwnableCreate3Deployer.sol"; /** * @title IDeployer Interface diff --git a/script/trading/seaport/DeployImmutableSignedZoneV2.s.sol b/script/trading/seaport/DeployImmutableSignedZoneV2.s.sol index cdabc7af..5607397e 100644 --- a/script/trading/seaport/DeployImmutableSignedZoneV2.s.sol +++ b/script/trading/seaport/DeployImmutableSignedZoneV2.s.sol @@ -3,7 +3,7 @@ // solhint-disable-next-line compiler-version pragma solidity 0.8.20; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableSignedZoneV2} from "../../../contracts/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.sol"; diff --git a/script/trading/seaport/DeployImmutableSignedZoneV2Dev.s.sol b/script/trading/seaport/DeployImmutableSignedZoneV2Dev.s.sol index 8d122e3e..710fc754 100644 --- a/script/trading/seaport/DeployImmutableSignedZoneV2Dev.s.sol +++ b/script/trading/seaport/DeployImmutableSignedZoneV2Dev.s.sol @@ -18,6 +18,7 @@ contract DeployImmutableSignedZoneV2Dev is Script { "ImmutableSignedZone", "", "", address(0xC606830D8341bc9F5F5Dd7615E9313d2655B505D) ); + // forge-lint: disable-next-line(unsafe-typecast) c.grantRole(bytes32("ZONE_MANAGER"), address(0xC606830D8341bc9F5F5Dd7615E9313d2655B505D)); // set server side signer address diff --git a/script/trading/seaport16/DeployConduitController.s.sol b/script/trading/seaport16/DeployConduitController.s.sol index b628b01f..b5ad0226 100644 --- a/script/trading/seaport16/DeployConduitController.s.sol +++ b/script/trading/seaport16/DeployConduitController.s.sol @@ -11,35 +11,35 @@ import {Script} from "forge-std/Script.sol"; * outlined here: https://github.com/ProjectOpenSea/seaport/blob/main/docs/Deployment.md. */ contract DeployConduitController is Script { - address private constant keylessCreate2DeployerAddress = 0x4c8D290a1B368ac4728d83a9e8321fC3af2b39b1; - address private constant keylessCreate2Address = 0x7A0D94F55792C434d74a40883C6ed8545E406D12; - address private constant inefficientImmutableCreate2FactoryAddress = 0xcfA3A7637547094fF06246817a35B8333C315196; - address private constant immutableCreate2FactoryAddress = 0x0000000000FFe8B47B3e2130213B802212439497; - address private constant conduitControllerAddress = 0x00000000F9490004C11Cef243f5400493c00Ad63; + address private constant KEYLESS_CREATE2_DEPLOYER_ADDRESS = 0x4c8D290a1B368ac4728d83a9e8321fC3af2b39b1; + address private constant KEYLESS_CREATE2_ADDRESS = 0x7A0D94F55792C434d74a40883C6ed8545E406D12; + address private constant INEFFICIENT_IMMUTABLE_CREATE2_FACTORY_ADDRESS = 0xcfA3A7637547094fF06246817a35B8333C315196; + address private constant IMMUTABLE_CREATE2_FACTORY_ADDRESS = 0x0000000000FFe8B47B3e2130213B802212439497; + address private constant CONDUIT_CONTROLLER_ADDRESS = 0x00000000F9490004C11Cef243f5400493c00Ad63; - bytes private constant createKeylessCreate2RawSignedTx = hex"f87e8085174876e800830186a08080ad601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; + bytes private constant CREATE_KEYLESS_CREATE2_RAW_SIGNED_TX = hex"f87e8085174876e800830186a08080ad601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222"; - bytes private constant createInefficientImmutableCreate2FactoryRawTx = hex"608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a723058202bdc55310d97c4088f18acf04253db593f0914059f0c781a9df3624dcef0d1cf64736f6c634300050a0032"; + bytes private constant CREATE_INEFFICIENT_IMMUTABLE_CREATE2_FACTORY_RAW_TX = hex"608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a723058202bdc55310d97c4088f18acf04253db593f0914059f0c781a9df3624dcef0d1cf64736f6c634300050a0032"; - bytes private constant createImmutableCreate2FactoryRawTx = hex"64e030870000000000000000000000000000000000000000f4b0218f13a6440a6f02000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000853608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a723058202bdc55310d97c4088f18acf04253db593f0914059f0c781a9df3624dcef0d1cf64736f6c634300050a003200000000000000000000000000"; + bytes private constant CREATE_IMMUTABLE_CREATE2_FACTORY_RAW_TX = hex"64e030870000000000000000000000000000000000000000f4b0218f13a6440a6f02000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000853608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a723058202bdc55310d97c4088f18acf04253db593f0914059f0c781a9df3624dcef0d1cf64736f6c634300050a003200000000000000000000000000"; - bytes private constant createConduitControllerRawTx = hex"64e030870000000000000000000000000000000000000000dc0ef3c792976604960400000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000302760c08060405234620000ea57600090610c9f906001600160401b03603f8301601f1916820181811183821017620000da575b604052828252620023889160208101908484833951902060805260405192839281840192831184841017620000ca575b8339039082f58015620000ba575b6001600160a01b03163f60a05260405161227490816200011482396080518181816102b101528181610bcc0152610d06015260a0518181816102d401528181610c620152610da90152f35b620000c462000106565b6200006f565b620000d4620000ef565b62000061565b620000e4620000ef565b62000031565b600080fd5b50634e487b7160e01b600052604160045260246000fd5b506040513d6000823e3d90fdfe60806040526004361015610013575b600080fd5b60003560e01c8063027cc7641461012b5780630a96ad391461012257806313ad9cab1461011957806314afd79e1461011057806333bc8572146101075780634e3f9580146100fe57806351710e45146100f55780636d435421146100ec5780636e9bfd9f146100e3578063794593bc146100da5780637b37e561146100d15780638b9e028b146100c8578063906c87cc146100bf576393790f44146100b757600080fd5b61000e61126e565b5061000e6111fa565b5061000e61113c565b5061000e610fc8565b5061000e610c8a565b5061000e610b3c565b5061000e6109bf565b5061000e610765565b5061000e6106f3565b5061000e61064f565b5061000e6105db565b5061000e6102fa565b5061000e61027b565b5061000e61017a565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361000e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576101b2610134565b602435906101bf81611574565b73ffffffffffffffffffffffffffffffffffffffff80911691600083815280602052600360408220015482101561023f5790600360408361023b9661020a9552806020522001611400565b90549060031b1c166040519182918291909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0390f35b602484604051907f6ceb340b0000000000000000000000000000000000000000000000000000000082526004820152fd5b600091031261000e57565b503461000e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57604080517f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006020820152f35b503461000e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57610332610134565b61033a610157565b90604435918215918215840361000e5761035381611505565b73ffffffffffffffffffffffffffffffffffffffff811690813b1561000e576040517fc4e8fcb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201528515156024820152610401926000908290604490829084905af180156105ce575b6105b5575b5073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b92600484019261043183859073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b5491821590806105ae575b1561048157505050600361047d92930161045682826114ce565b54929073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b555b005b91949391816105a5575b5061049257005b6104df61047d938560037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600098019201916104ce83546113a4565b90808203610504575b505050611447565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b6105766105449161053b61051b61059c9588611400565b905473ffffffffffffffffffffffffffffffffffffffff9160031b1c1690565b92839187611400565b90919082549060031b9173ffffffffffffffffffffffffffffffffffffffff9283811b93849216901b16911916179055565b859073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b553880806104d7565b9050153861048b565b508061043c565b806105c26105c892611335565b80610270565b386103da565b6105d6611397565b6103d5565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576020610615610134565b61061e81611574565b73ffffffffffffffffffffffffffffffffffffffff8091166000526000825260016040600020015416604051908152f35b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760206106e861068c610134565b73ffffffffffffffffffffffffffffffffffffffff6106a9610157565b916106b381611574565b166000526000835260046040600020019073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b541515604051908152f35b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5773ffffffffffffffffffffffffffffffffffffffff610740610134565b61074981611574565b1660005260006020526020600360406000200154604051908152f35b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5761079d610134565b6107a681611574565b61080c6107f360026107d88473ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b33036109765761047f9060007f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da81604051a2610896600261086d8373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b017fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b73ffffffffffffffffffffffffffffffffffffffff3390806108dd60016107d88673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b169083167fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec6000604051a46001610935339273ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6040517f88c3a11500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602490fd5b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576109f7610134565b6109ff610157565b90610a0981611505565b73ffffffffffffffffffffffffffffffffffffffff808316908115610b095750610a5b6107f360026107d88573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b8114610ab95761093561047f93926002927f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6000604051a273ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b506040517fcbc080ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604490fd5b82602491604051917fa388d263000000000000000000000000000000000000000000000000000000008352166004820152fd5b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576040517fff00000000000000000000000000000000000000000000000000000000000000602082019081523060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260043560358301527f0000000000000000000000000000000000000000000000000000000000000000605583015273ffffffffffffffffffffffffffffffffffffffff91610c3b81607581015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611356565b519020604080519290911673ffffffffffffffffffffffffffffffffffffffff811683523f7f000000000000000000000000000000000000000000000000000000000000000014602083015290f35b503461000e576040807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57600435610cc6610157565b73ffffffffffffffffffffffffffffffffffffffff91828216908115610f9f57338160601c03610f7657610da46107f386516020810190610d8881610c0f7f0000000000000000000000000000000000000000000000000000000000000000883087917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b51902073ffffffffffffffffffffffffffffffffffffffff1690565b92833f7f000000000000000000000000000000000000000000000000000000000000000014610f3057947f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15610eca838060009961023b989796865180610c9f8082019082821067ffffffffffffffff831117610f23575b6115a0833903908df515610f16575b610e9c610e578973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91600183019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b55835173ffffffffffffffffffffffffffffffffffffffff8716815260208101919091529081906040820190565b0390a15194859483167fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8287a473ffffffffffffffffffffffffffffffffffffffff1682526020820190565b610f1e611397565b610e2a565b610f2b611305565b610e1b565b85517f6328ccb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602490fd5b600485517fcb6e5344000000000000000000000000000000000000000000000000000000008152fd5b600485517f99faaa04000000000000000000000000000000000000000000000000000000008152fd5b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57611000610134565b61100981611505565b73ffffffffffffffffffffffffffffffffffffffff9081811660009281845283602052600260408520015416156110ba575061108e600291837f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da81604051a273ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b017fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055604051f35b602490604051907f6b0136160000000000000000000000000000000000000000000000000000000082526004820152fd5b6020908160408183019282815285518094520193019160005b828110611112575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611104565b503461000e576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57611175610134565b9061117f82611574565b73ffffffffffffffffffffffffffffffffffffffff91826000911681528082526003604082200192604051908193808654938481520195845280842093915b8383106111e15761023b866111d5818a0382611356565b604051918291826110eb565b84548116875295810195600194850194909201916111be565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576020611234610134565b61123d81611574565b73ffffffffffffffffffffffffffffffffffffffff8091166000526000825260026040600020015416604051908152f35b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5773ffffffffffffffffffffffffffffffffffffffff6112bb610134565b16600052600060205260406000205480156112db57602090604051908152f35b60046040517f4ca82090000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161134957604052565b611351611305565b604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761134957604052565b506040513d6000823e3d90fd5b600181106113d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80548210156114185760005260206000200190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8054801561149f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061147c8282611400565b73ffffffffffffffffffffffffffffffffffffffff82549160031b1b1916905555565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b906105446114f692805490680100000000000000008210156114f8575b600182018155611400565b565b611500611305565b6114eb565b61150e81611574565b73ffffffffffffffffffffffffffffffffffffffff809116908160005260006020526001604060002001541633036115435750565b602490604051907fd4ed9a170000000000000000000000000000000000000000000000000000000082526004820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002054156112db5756fe60a080604052346100235733608052610c7690816100298239608051816103c50152f35b600080fdfe60806040526004361015610013575b600080fd5b6000803560e01c9081634ce34aa21461006657508063899e104c1461005d5780638df25d92146100545763c4e8fcb51461004c57600080fd5b61000e610362565b5061000e61027f565b5061000e6101ab565b346101465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101465760043567ffffffffffffffff8111610142576100b5903690600401610149565b9133815280602052604081205415610116575b8281106100fa576040517f4ce34aa2000000000000000000000000000000000000000000000000000000008152602090f35b8061011061010b6001938686610532565b6105c4565b016100c8565b807f93daadf2000000000000000000000000000000000000000000000000000000006024925233600452fd5b5080fd5b80fd5b9181601f8401121561000e5782359167ffffffffffffffff831161000e5760208085019460c0850201011161000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5767ffffffffffffffff60043581811161000e576101fc903690600401610149565b9160243590811161000e5761021590369060040161017a565b919092600033815280602052604081205415610116575b8181106102685761023d8486610acb565b6040517f899e104c000000000000000000000000000000000000000000000000000000008152602090f35b8061027961010b6001938587610532565b0161022c565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043567ffffffffffffffff811161000e576102cf90369060040161017a565b33600052600060205260406000205415610316576102ec91610acb565b60206040517f8df25d92000000000000000000000000000000000000000000000000000000008152f35b7f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81160361000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043561039e81610344565b6024359081151580830361000e5773ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001633036105085761041f6104188473ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5460ff1690565b1515146104b657816104a6846104767fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e29573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60405193151584521691602090a2005b506040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201529015156024820152604490fd5b60046040517f6d5769be000000000000000000000000000000000000000000000000000000008152fd5b91908110156105425760c0020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6004111561057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b35600481101561000e5790565b356105c181610344565b90565b60016105cf826105aa565b6105d881610571565b0361061357806105ed602061061193016105b7565b906105fa604082016105b7565b60a0610608606084016105b7565b92013592610712565b565b600261061e826105aa565b61062781610571565b0361069657600160a08201350361066c5780610648602061061193016105b7565b90610655604082016105b7565b6080610663606084016105b7565b92013592610882565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b60036106a1826105aa565b6106aa81610571565b036106e857806106bf602061061193016105b7565b6106cb604083016105b7565b6106d7606084016105b7565b90608060a085013594013592610990565b60046040517f7932f1fc000000000000000000000000000000000000000000000000000000008152fd5b9092604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d151581161561077c575b505050505050604052606052565b80863b15151661076e579087959691156107bc57602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b156107f657506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d610835575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c908060030291808211610869575b505060205a91011061086057856107fc565b833d81803e3d90fd5b8080600392028380020360091c9203020101868061084e565b9092813b1561096257604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156108db5750505050604052606052565b8593943d61091e575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211610949575b505060205a91011061086057856108e4565b8080600392028380020360091c92030201018680610937565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b15610a9d57604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af115610a0d57505050505060805260a05260c052604052606052565b89949550883d610a50575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c908060030291808211610a84575b505060205a910110610a7b5786610a18565b843d81803e3d90fd5b8080600392028380020360091c92030201018780610a69565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b90816020907f2eb2c2d600000000000000000000000000000000000000000000000000000000825260005b838110610b095750505050506080604052565b8435820194853590813b156109625760a09182880192833560059181831b948b60c08097608094818301868501351490606085013514169201013584141615610c165789019a890160243760061b9360e0850160a452610104850194600086526040019060c437600080858982865af115610b8a5750505050600101610af6565b869394503d610bcb575b507fafc445e20000000000000000000000000000000000000000000000000000000060005260045260645260849081510190526000fd5b84601f3d01821c911c90600381810292808311610bff575b505050835a910110610bf55784610b94565b3d6000803e3d6000fd5b8080028380020360091c9203020101858080610be3565b7feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fdfea2646970667358221220c5c8d054d9d5df7c3530eab1c32506aad1fcb6772c1457f0da5443ad9e91b4a364736f6c634300080e0033a264697066735822122031e2de61a9e35e9e87d5eef6a36b045a0bab54c4031fd01a0f8138afce3cec3164736f6c634300080e003360a080604052346100235733608052610c7690816100298239608051816103c50152f35b600080fdfe60806040526004361015610013575b600080fd5b6000803560e01c9081634ce34aa21461006657508063899e104c1461005d5780638df25d92146100545763c4e8fcb51461004c57600080fd5b61000e610362565b5061000e61027f565b5061000e6101ab565b346101465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101465760043567ffffffffffffffff8111610142576100b5903690600401610149565b9133815280602052604081205415610116575b8281106100fa576040517f4ce34aa2000000000000000000000000000000000000000000000000000000008152602090f35b8061011061010b6001938686610532565b6105c4565b016100c8565b807f93daadf2000000000000000000000000000000000000000000000000000000006024925233600452fd5b5080fd5b80fd5b9181601f8401121561000e5782359167ffffffffffffffff831161000e5760208085019460c0850201011161000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5767ffffffffffffffff60043581811161000e576101fc903690600401610149565b9160243590811161000e5761021590369060040161017a565b919092600033815280602052604081205415610116575b8181106102685761023d8486610acb565b6040517f899e104c000000000000000000000000000000000000000000000000000000008152602090f35b8061027961010b6001938587610532565b0161022c565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043567ffffffffffffffff811161000e576102cf90369060040161017a565b33600052600060205260406000205415610316576102ec91610acb565b60206040517f8df25d92000000000000000000000000000000000000000000000000000000008152f35b7f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81160361000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043561039e81610344565b6024359081151580830361000e5773ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001633036105085761041f6104188473ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5460ff1690565b1515146104b657816104a6846104767fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e29573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60405193151584521691602090a2005b506040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201529015156024820152604490fd5b60046040517f6d5769be000000000000000000000000000000000000000000000000000000008152fd5b91908110156105425760c0020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6004111561057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b35600481101561000e5790565b356105c181610344565b90565b60016105cf826105aa565b6105d881610571565b0361061357806105ed602061061193016105b7565b906105fa604082016105b7565b60a0610608606084016105b7565b92013592610712565b565b600261061e826105aa565b61062781610571565b0361069657600160a08201350361066c5780610648602061061193016105b7565b90610655604082016105b7565b6080610663606084016105b7565b92013592610882565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b60036106a1826105aa565b6106aa81610571565b036106e857806106bf602061061193016105b7565b6106cb604083016105b7565b6106d7606084016105b7565b90608060a085013594013592610990565b60046040517f7932f1fc000000000000000000000000000000000000000000000000000000008152fd5b9092604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d151581161561077c575b505050505050604052606052565b80863b15151661076e579087959691156107bc57602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b156107f657506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d610835575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c908060030291808211610869575b505060205a91011061086057856107fc565b833d81803e3d90fd5b8080600392028380020360091c9203020101868061084e565b9092813b1561096257604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156108db5750505050604052606052565b8593943d61091e575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211610949575b505060205a91011061086057856108e4565b8080600392028380020360091c92030201018680610937565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b15610a9d57604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af115610a0d57505050505060805260a05260c052604052606052565b89949550883d610a50575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c908060030291808211610a84575b505060205a910110610a7b5786610a18565b843d81803e3d90fd5b8080600392028380020360091c92030201018780610a69565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b90816020907f2eb2c2d600000000000000000000000000000000000000000000000000000000825260005b838110610b095750505050506080604052565b8435820194853590813b156109625760a09182880192833560059181831b948b60c08097608094818301868501351490606085013514169201013584141615610c165789019a890160243760061b9360e0850160a452610104850194600086526040019060c437600080858982865af115610b8a5750505050600101610af6565b869394503d610bcb575b507fafc445e20000000000000000000000000000000000000000000000000000000060005260045260645260849081510190526000fd5b84601f3d01821c911c90600381810292808311610bff575b505050835a910110610bf55784610b94565b3d6000803e3d6000fd5b8080028380020360091c9203020101858080610be3565b7feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fdfea2646970667358221220c5c8d054d9d5df7c3530eab1c32506aad1fcb6772c1457f0da5443ad9e91b4a364736f6c634300080e003300000000000000000000000000000000000000000000000000"; + bytes private constant CREATE_CONDUIT_CONTROLLER_RAW_TX = hex"64e030870000000000000000000000000000000000000000dc0ef3c792976604960400000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000302760c08060405234620000ea57600090610c9f906001600160401b03603f8301601f1916820181811183821017620000da575b604052828252620023889160208101908484833951902060805260405192839281840192831184841017620000ca575b8339039082f58015620000ba575b6001600160a01b03163f60a05260405161227490816200011482396080518181816102b101528181610bcc0152610d06015260a0518181816102d401528181610c620152610da90152f35b620000c462000106565b6200006f565b620000d4620000ef565b62000061565b620000e4620000ef565b62000031565b600080fd5b50634e487b7160e01b600052604160045260246000fd5b506040513d6000823e3d90fdfe60806040526004361015610013575b600080fd5b60003560e01c8063027cc7641461012b5780630a96ad391461012257806313ad9cab1461011957806314afd79e1461011057806333bc8572146101075780634e3f9580146100fe57806351710e45146100f55780636d435421146100ec5780636e9bfd9f146100e3578063794593bc146100da5780637b37e561146100d15780638b9e028b146100c8578063906c87cc146100bf576393790f44146100b757600080fd5b61000e61126e565b5061000e6111fa565b5061000e61113c565b5061000e610fc8565b5061000e610c8a565b5061000e610b3c565b5061000e6109bf565b5061000e610765565b5061000e6106f3565b5061000e61064f565b5061000e6105db565b5061000e6102fa565b5061000e61027b565b5061000e61017a565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361000e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576101b2610134565b602435906101bf81611574565b73ffffffffffffffffffffffffffffffffffffffff80911691600083815280602052600360408220015482101561023f5790600360408361023b9661020a9552806020522001611400565b90549060031b1c166040519182918291909173ffffffffffffffffffffffffffffffffffffffff6020820193169052565b0390f35b602484604051907f6ceb340b0000000000000000000000000000000000000000000000000000000082526004820152fd5b600091031261000e57565b503461000e5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57604080517f000000000000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006020820152f35b503461000e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57610332610134565b61033a610157565b90604435918215918215840361000e5761035381611505565b73ffffffffffffffffffffffffffffffffffffffff811690813b1561000e576040517fc4e8fcb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201528515156024820152610401926000908290604490829084905af180156105ce575b6105b5575b5073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b92600484019261043183859073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b5491821590806105ae575b1561048157505050600361047d92930161045682826114ce565b54929073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b555b005b91949391816105a5575b5061049257005b6104df61047d938560037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600098019201916104ce83546113a4565b90808203610504575b505050611447565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b6105766105449161053b61051b61059c9588611400565b905473ffffffffffffffffffffffffffffffffffffffff9160031b1c1690565b92839187611400565b90919082549060031b9173ffffffffffffffffffffffffffffffffffffffff9283811b93849216901b16911916179055565b859073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b553880806104d7565b9050153861048b565b508061043c565b806105c26105c892611335565b80610270565b386103da565b6105d6611397565b6103d5565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576020610615610134565b61061e81611574565b73ffffffffffffffffffffffffffffffffffffffff8091166000526000825260016040600020015416604051908152f35b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760206106e861068c610134565b73ffffffffffffffffffffffffffffffffffffffff6106a9610157565b916106b381611574565b166000526000835260046040600020019073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b541515604051908152f35b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5773ffffffffffffffffffffffffffffffffffffffff610740610134565b61074981611574565b1660005260006020526020600360406000200154604051908152f35b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5761079d610134565b6107a681611574565b61080c6107f360026107d88473ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b33036109765761047f9060007f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da81604051a2610896600261086d8373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b017fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b73ffffffffffffffffffffffffffffffffffffffff3390806108dd60016107d88673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b169083167fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec6000604051a46001610935339273ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b6040517f88c3a11500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602490fd5b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576109f7610134565b6109ff610157565b90610a0981611505565b73ffffffffffffffffffffffffffffffffffffffff808316908115610b095750610a5b6107f360026107d88573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b8114610ab95761093561047f93926002927f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da6000604051a273ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b506040517fcbc080ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604490fd5b82602491604051917fa388d263000000000000000000000000000000000000000000000000000000008352166004820152fd5b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576040517fff00000000000000000000000000000000000000000000000000000000000000602082019081523060601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260043560358301527f0000000000000000000000000000000000000000000000000000000000000000605583015273ffffffffffffffffffffffffffffffffffffffff91610c3b81607581015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611356565b519020604080519290911673ffffffffffffffffffffffffffffffffffffffff811683523f7f000000000000000000000000000000000000000000000000000000000000000014602083015290f35b503461000e576040807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57600435610cc6610157565b73ffffffffffffffffffffffffffffffffffffffff91828216908115610f9f57338160601c03610f7657610da46107f386516020810190610d8881610c0f7f0000000000000000000000000000000000000000000000000000000000000000883087917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605594927fff00000000000000000000000000000000000000000000000000000000000000855260601b166001840152601583015260358201520190565b51902073ffffffffffffffffffffffffffffffffffffffff1690565b92833f7f000000000000000000000000000000000000000000000000000000000000000014610f3057947f4397af6128d529b8ae0442f99db1296d5136062597a15bbc61c1b2a6431a7d15610eca838060009961023b989796865180610c9f8082019082821067ffffffffffffffff831117610f23575b6115a0833903908df515610f16575b610e9c610e578973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91600183019073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b55835173ffffffffffffffffffffffffffffffffffffffff8716815260208101919091529081906040820190565b0390a15194859483167fc8894f26f396ce8c004245c8b7cd1b92103a6e4302fcbab883987149ac01b7ec8287a473ffffffffffffffffffffffffffffffffffffffff1682526020820190565b610f1e611397565b610e2a565b610f2b611305565b610e1b565b85517f6328ccb200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602490fd5b600485517fcb6e5344000000000000000000000000000000000000000000000000000000008152fd5b600485517f99faaa04000000000000000000000000000000000000000000000000000000008152fd5b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57611000610134565b61100981611505565b73ffffffffffffffffffffffffffffffffffffffff9081811660009281845283602052600260408520015416156110ba575061108e600291837f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da81604051a273ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b017fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055604051f35b602490604051907f6b0136160000000000000000000000000000000000000000000000000000000082526004820152fd5b6020908160408183019282815285518094520193019160005b828110611112575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611104565b503461000e576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e57611175610134565b9061117f82611574565b73ffffffffffffffffffffffffffffffffffffffff91826000911681528082526003604082200192604051908193808654938481520195845280842093915b8383106111e15761023b866111d5818a0382611356565b604051918291826110eb565b84548116875295810195600194850194909201916111be565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e576020611234610134565b61123d81611574565b73ffffffffffffffffffffffffffffffffffffffff8091166000526000825260026040600020015416604051908152f35b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5773ffffffffffffffffffffffffffffffffffffffff6112bb610134565b16600052600060205260406000205480156112db57602090604051908152f35b60046040517f4ca82090000000000000000000000000000000000000000000000000000000008152fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161134957604052565b611351611305565b604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761134957604052565b506040513d6000823e3d90fd5b600181106113d1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80548210156114185760005260206000200190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8054801561149f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061147c8282611400565b73ffffffffffffffffffffffffffffffffffffffff82549160031b1b1916905555565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b906105446114f692805490680100000000000000008210156114f8575b600182018155611400565b565b611500611305565b6114eb565b61150e81611574565b73ffffffffffffffffffffffffffffffffffffffff809116908160005260006020526001604060002001541633036115435750565b602490604051907fd4ed9a170000000000000000000000000000000000000000000000000000000082526004820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002054156112db5756fe60a080604052346100235733608052610c7690816100298239608051816103c50152f35b600080fdfe60806040526004361015610013575b600080fd5b6000803560e01c9081634ce34aa21461006657508063899e104c1461005d5780638df25d92146100545763c4e8fcb51461004c57600080fd5b61000e610362565b5061000e61027f565b5061000e6101ab565b346101465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101465760043567ffffffffffffffff8111610142576100b5903690600401610149565b9133815280602052604081205415610116575b8281106100fa576040517f4ce34aa2000000000000000000000000000000000000000000000000000000008152602090f35b8061011061010b6001938686610532565b6105c4565b016100c8565b807f93daadf2000000000000000000000000000000000000000000000000000000006024925233600452fd5b5080fd5b80fd5b9181601f8401121561000e5782359167ffffffffffffffff831161000e5760208085019460c0850201011161000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5767ffffffffffffffff60043581811161000e576101fc903690600401610149565b9160243590811161000e5761021590369060040161017a565b919092600033815280602052604081205415610116575b8181106102685761023d8486610acb565b6040517f899e104c000000000000000000000000000000000000000000000000000000008152602090f35b8061027961010b6001938587610532565b0161022c565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043567ffffffffffffffff811161000e576102cf90369060040161017a565b33600052600060205260406000205415610316576102ec91610acb565b60206040517f8df25d92000000000000000000000000000000000000000000000000000000008152f35b7f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81160361000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043561039e81610344565b6024359081151580830361000e5773ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001633036105085761041f6104188473ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5460ff1690565b1515146104b657816104a6846104767fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e29573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60405193151584521691602090a2005b506040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201529015156024820152604490fd5b60046040517f6d5769be000000000000000000000000000000000000000000000000000000008152fd5b91908110156105425760c0020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6004111561057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b35600481101561000e5790565b356105c181610344565b90565b60016105cf826105aa565b6105d881610571565b0361061357806105ed602061061193016105b7565b906105fa604082016105b7565b60a0610608606084016105b7565b92013592610712565b565b600261061e826105aa565b61062781610571565b0361069657600160a08201350361066c5780610648602061061193016105b7565b90610655604082016105b7565b6080610663606084016105b7565b92013592610882565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b60036106a1826105aa565b6106aa81610571565b036106e857806106bf602061061193016105b7565b6106cb604083016105b7565b6106d7606084016105b7565b90608060a085013594013592610990565b60046040517f7932f1fc000000000000000000000000000000000000000000000000000000008152fd5b9092604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d151581161561077c575b505050505050604052606052565b80863b15151661076e579087959691156107bc57602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b156107f657506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d610835575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c908060030291808211610869575b505060205a91011061086057856107fc565b833d81803e3d90fd5b8080600392028380020360091c9203020101868061084e565b9092813b1561096257604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156108db5750505050604052606052565b8593943d61091e575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211610949575b505060205a91011061086057856108e4565b8080600392028380020360091c92030201018680610937565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b15610a9d57604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af115610a0d57505050505060805260a05260c052604052606052565b89949550883d610a50575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c908060030291808211610a84575b505060205a910110610a7b5786610a18565b843d81803e3d90fd5b8080600392028380020360091c92030201018780610a69565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b90816020907f2eb2c2d600000000000000000000000000000000000000000000000000000000825260005b838110610b095750505050506080604052565b8435820194853590813b156109625760a09182880192833560059181831b948b60c08097608094818301868501351490606085013514169201013584141615610c165789019a890160243760061b9360e0850160a452610104850194600086526040019060c437600080858982865af115610b8a5750505050600101610af6565b869394503d610bcb575b507fafc445e20000000000000000000000000000000000000000000000000000000060005260045260645260849081510190526000fd5b84601f3d01821c911c90600381810292808311610bff575b505050835a910110610bf55784610b94565b3d6000803e3d6000fd5b8080028380020360091c9203020101858080610be3565b7feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fdfea2646970667358221220c5c8d054d9d5df7c3530eab1c32506aad1fcb6772c1457f0da5443ad9e91b4a364736f6c634300080e0033a264697066735822122031e2de61a9e35e9e87d5eef6a36b045a0bab54c4031fd01a0f8138afce3cec3164736f6c634300080e003360a080604052346100235733608052610c7690816100298239608051816103c50152f35b600080fdfe60806040526004361015610013575b600080fd5b6000803560e01c9081634ce34aa21461006657508063899e104c1461005d5780638df25d92146100545763c4e8fcb51461004c57600080fd5b61000e610362565b5061000e61027f565b5061000e6101ab565b346101465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101465760043567ffffffffffffffff8111610142576100b5903690600401610149565b9133815280602052604081205415610116575b8281106100fa576040517f4ce34aa2000000000000000000000000000000000000000000000000000000008152602090f35b8061011061010b6001938686610532565b6105c4565b016100c8565b807f93daadf2000000000000000000000000000000000000000000000000000000006024925233600452fd5b5080fd5b80fd5b9181601f8401121561000e5782359167ffffffffffffffff831161000e5760208085019460c0850201011161000e57565b9181601f8401121561000e5782359167ffffffffffffffff831161000e576020808501948460051b01011161000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5767ffffffffffffffff60043581811161000e576101fc903690600401610149565b9160243590811161000e5761021590369060040161017a565b919092600033815280602052604081205415610116575b8181106102685761023d8486610acb565b6040517f899e104c000000000000000000000000000000000000000000000000000000008152602090f35b8061027961010b6001938587610532565b0161022c565b503461000e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043567ffffffffffffffff811161000e576102cf90369060040161017a565b33600052600060205260406000205415610316576102ec91610acb565b60206040517f8df25d92000000000000000000000000000000000000000000000000000000008152f35b7f93daadf2000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81160361000e57565b503461000e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261000e5760043561039e81610344565b6024359081151580830361000e5773ffffffffffffffffffffffffffffffffffffffff90817f00000000000000000000000000000000000000000000000000000000000000001633036105085761041f6104188473ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5460ff1690565b1515146104b657816104a6846104767fae63067d43ac07563b7eb8db6595635fc77f1578a2a5ea06ba91b63e2afa37e29573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b60405193151584521691602090a2005b506040517f924e341e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201529015156024820152604490fd5b60046040517f6d5769be000000000000000000000000000000000000000000000000000000008152fd5b91908110156105425760c0020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6004111561057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b35600481101561000e5790565b356105c181610344565b90565b60016105cf826105aa565b6105d881610571565b0361061357806105ed602061061193016105b7565b906105fa604082016105b7565b60a0610608606084016105b7565b92013592610712565b565b600261061e826105aa565b61062781610571565b0361069657600160a08201350361066c5780610648602061061193016105b7565b90610655604082016105b7565b6080610663606084016105b7565b92013592610882565b60046040517fefcc00b1000000000000000000000000000000000000000000000000000000008152fd5b60036106a1826105aa565b6106aa81610571565b036106e857806106bf602061061193016105b7565b6106cb604083016105b7565b6106d7606084016105b7565b90608060a085013594013592610990565b60046040517f7932f1fc000000000000000000000000000000000000000000000000000000008152fd5b9092604051926000947f23b872dd00000000000000000000000000000000000000000000000000000000865280600452816024528260445260208660648180885af1803d15601f3d1160018a51141617163d151581161561077c575b505050505050604052606052565b80863b15151661076e579087959691156107bc57602486887f5f15d672000000000000000000000000000000000000000000000000000000008252600452fd5b156107f657506084947f98891923000000000000000000000000000000000000000000000000000000008552600452602452604452606452fd5b3d610835575b5060a4947ff486bc8700000000000000000000000000000000000000000000000000000000855260045260245260445281606452608452fd5b601f3d0160051c9060051c908060030291808211610869575b505060205a91011061086057856107fc565b833d81803e3d90fd5b8080600392028380020360091c9203020101868061084e565b9092813b1561096257604051926000947f23b872dd000000000000000000000000000000000000000000000000000000008652806004528160245282604452858060648180885af1156108db5750505050604052606052565b8593943d61091e575b5060a4947ff486bc870000000000000000000000000000000000000000000000000000000085526004526024526044526064526001608452fd5b601f3d0160051c9060051c908060030291808211610949575b505060205a91011061086057856108e4565b8080600392028380020360091c92030201018680610937565b507f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b929093833b15610a9d57604051936080519160a0519360c051956000987ff242432a000000000000000000000000000000000000000000000000000000008a528060045281602452826044528360645260a06084528960a452898060c48180895af115610a0d57505050505060805260a05260c052604052606052565b89949550883d610a50575b5060a4957ff486bc87000000000000000000000000000000000000000000000000000000008652600452602452604452606452608452fd5b601f3d0160051c9060051c908060030291808211610a84575b505060205a910110610a7b5786610a18565b843d81803e3d90fd5b8080600392028380020360091c92030201018780610a69565b837f5f15d6720000000000000000000000000000000000000000000000000000000060005260045260246000fd5b90816020907f2eb2c2d600000000000000000000000000000000000000000000000000000000825260005b838110610b095750505050506080604052565b8435820194853590813b156109625760a09182880192833560059181831b948b60c08097608094818301868501351490606085013514169201013584141615610c165789019a890160243760061b9360e0850160a452610104850194600086526040019060c437600080858982865af115610b8a5750505050600101610af6565b869394503d610bcb575b507fafc445e20000000000000000000000000000000000000000000000000000000060005260045260645260849081510190526000fd5b84601f3d01821c911c90600381810292808311610bff575b505050835a910110610bf55784610b94565b3d6000803e3d6000fd5b8080028380020360091c9203020101858080610be3565b7feba2084c0000000000000000000000000000000000000000000000000000000060005260046000fdfea2646970667358221220c5c8d054d9d5df7c3530eab1c32506aad1fcb6772c1457f0da5443ad9e91b4a364736f6c634300080e003300000000000000000000000000000000000000000000000000"; function run() external { vm.startBroadcast(); - if (keylessCreate2Address.code.length == 0) { + if (KEYLESS_CREATE2_ADDRESS.code.length == 0) { console.log("Deploying KEYLESS_CREATE2"); // Creates KEYLESS_CREATE2 contract using 0x4c8D290a1B368ac4728d83a9e8321fC3af2b39b1 as the deployer. This account must be funded with at least 0.01 ether. - require(keylessCreate2DeployerAddress.balance >= 0.01 ether, string.concat("keylessCreate2Deployer balance must be at least ", vm.toString(uint256(0.01 ether)), " but is only ", vm.toString(keylessCreate2DeployerAddress.balance))); - vm.broadcastRawTransaction(createKeylessCreate2RawSignedTx); + require(KEYLESS_CREATE2_DEPLOYER_ADDRESS.balance >= 0.01 ether, string.concat("keylessCreate2Deployer balance must be at least ", vm.toString(uint256(0.01 ether)), " but is only ", vm.toString(KEYLESS_CREATE2_DEPLOYER_ADDRESS.balance))); + vm.broadcastRawTransaction(CREATE_KEYLESS_CREATE2_RAW_SIGNED_TX); } else { console.log("Skipping KEYLESS_CREATE2, already exists"); } - _createIfNotExist("INEFFICIENT_IMMUTABLE_CREATE2_FACTORY", inefficientImmutableCreate2FactoryAddress, keylessCreate2Address, createInefficientImmutableCreate2FactoryRawTx); - _createIfNotExist("IMMUTABLE_CREATE2_FACTORY", immutableCreate2FactoryAddress, inefficientImmutableCreate2FactoryAddress, createImmutableCreate2FactoryRawTx); - _createIfNotExist("ConduitController", conduitControllerAddress, immutableCreate2FactoryAddress, createConduitControllerRawTx); + _createIfNotExist("INEFFICIENT_IMMUTABLE_CREATE2_FACTORY", INEFFICIENT_IMMUTABLE_CREATE2_FACTORY_ADDRESS, KEYLESS_CREATE2_ADDRESS, CREATE_INEFFICIENT_IMMUTABLE_CREATE2_FACTORY_RAW_TX); + _createIfNotExist("IMMUTABLE_CREATE2_FACTORY", IMMUTABLE_CREATE2_FACTORY_ADDRESS, INEFFICIENT_IMMUTABLE_CREATE2_FACTORY_ADDRESS, CREATE_IMMUTABLE_CREATE2_FACTORY_RAW_TX); + _createIfNotExist("ConduitController", CONDUIT_CONTROLLER_ADDRESS, IMMUTABLE_CREATE2_FACTORY_ADDRESS, CREATE_CONDUIT_CONTROLLER_RAW_TX); vm.stopBroadcast(); } diff --git a/script/trading/seaport16/DeployImmutableSeaport.s.sol b/script/trading/seaport16/DeployImmutableSeaport.s.sol index 8bfe49c0..53c1a9e3 100644 --- a/script/trading/seaport16/DeployImmutableSeaport.s.sol +++ b/script/trading/seaport16/DeployImmutableSeaport.s.sol @@ -14,33 +14,33 @@ import {IDeployer} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/inter * @dev This script assumes that the ConduitController contract has already been deployed. */ contract DeployImmutableSeaport is Script { - address private constant accessControlledDeployerAddress = 0x0B5B1d92259b13D516cCd5a6E63d7D94Ea2A4836; - address private constant create2DeployerAddress = 0x9df760a54b3B00cC8B3d70A37d45fa97cCfdb4Db; - address private constant conduitControllerAddress = 0x00000000F9490004C11Cef243f5400493c00Ad63; - address private constant immutableSeaportAddress = 0xbE737Cf2C122F83d1610C1224f7B99ca9d0E09f6; - bytes32 private constant immutableSeaportDeploymentSalt = keccak256(abi.encodePacked("immutable-seaport16")); - address private constant seaportInitialOwner = 0xdDA0d9448Ebe3eA43aFecE5Fa6401F5795c19333; // Immutable Deployer + address private constant ACCESS_CONTROLLED_DEPLOYER_ADDRESS = 0x0B5B1d92259b13D516cCd5a6E63d7D94Ea2A4836; + address private constant CREATE2_DEPLOYER_ADDRESS = 0x9df760a54b3B00cC8B3d70A37d45fa97cCfdb4Db; + address private constant CONDUIT_CONTROLLER_ADDRESS = 0x00000000F9490004C11Cef243f5400493c00Ad63; + address private constant IMMUTABLE_SEAPORT_ADDRESS = 0xbE737Cf2C122F83d1610C1224f7B99ca9d0E09f6; + bytes32 private constant IMMUTABLE_SEAPORT_DEPLOYMENT_SALT = keccak256(abi.encodePacked("immutable-seaport16")); + address private constant SEAPORT_INITIAL_OWNER = 0xdDA0d9448Ebe3eA43aFecE5Fa6401F5795c19333; // Immutable Deployer function run() external { - AccessControlledDeployer deployer = AccessControlledDeployer(accessControlledDeployerAddress); - IDeployer create2Deployer = IDeployer(create2DeployerAddress); + AccessControlledDeployer deployer = AccessControlledDeployer(ACCESS_CONTROLLED_DEPLOYER_ADDRESS); + IDeployer create2Deployer = IDeployer(CREATE2_DEPLOYER_ADDRESS); // Check supplied immutableSeaportAddress matches the expected address based on current creationCode bytes memory immutableSeaportDeploymentBytecode = abi.encodePacked( type(ImmutableSeaport).creationCode, - abi.encode(conduitControllerAddress, seaportInitialOwner) + abi.encode(CONDUIT_CONTROLLER_ADDRESS, SEAPORT_INITIAL_OWNER) ); - address expectedImmutableSeaportAddress = create2Deployer.deployedAddress(immutableSeaportDeploymentBytecode, accessControlledDeployerAddress, immutableSeaportDeploymentSalt); + address expectedImmutableSeaportAddress = create2Deployer.deployedAddress(immutableSeaportDeploymentBytecode, ACCESS_CONTROLLED_DEPLOYER_ADDRESS, IMMUTABLE_SEAPORT_DEPLOYMENT_SALT); console.log("Expected ImmutableSeaport address: %s", expectedImmutableSeaportAddress); - require(expectedImmutableSeaportAddress == immutableSeaportAddress, "Expected ImmutableSeaport address mismatch"); + require(expectedImmutableSeaportAddress == IMMUTABLE_SEAPORT_ADDRESS, "Expected ImmutableSeaport address mismatch"); vm.startBroadcast(); // Deploy ImmutableSeaport if it doesn't already exist - if (immutableSeaportAddress.code.length == 0) { + if (IMMUTABLE_SEAPORT_ADDRESS.code.length == 0) { console.log("Deploying ImmutableSeaport"); - address deployedImmutableSeaportAddress = deployer.deploy(create2Deployer, immutableSeaportDeploymentBytecode, immutableSeaportDeploymentSalt); - require(deployedImmutableSeaportAddress == immutableSeaportAddress, "Deployed ImmutableSeaport address mismatch"); + address deployedImmutableSeaportAddress = deployer.deploy(create2Deployer, immutableSeaportDeploymentBytecode, IMMUTABLE_SEAPORT_DEPLOYMENT_SALT); + require(deployedImmutableSeaportAddress == IMMUTABLE_SEAPORT_ADDRESS, "Deployed ImmutableSeaport address mismatch"); } else { console.log("Skipping ImmutableSeaport, already exists"); } diff --git a/script/trading/seaport16/DeployImmutableSignedZoneV3.s.sol b/script/trading/seaport16/DeployImmutableSignedZoneV3.s.sol index db2ebb73..2d59122b 100644 --- a/script/trading/seaport16/DeployImmutableSignedZoneV3.s.sol +++ b/script/trading/seaport16/DeployImmutableSignedZoneV3.s.sol @@ -15,45 +15,45 @@ import {IDeployer} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/inter * @dev This script assumes that the ImmutableSeaport contract has already been deployed. */ contract DeployImmutableSignedZoneV3 is Script { - address private constant accessControlledDeployerAddress = 0x0B5B1d92259b13D516cCd5a6E63d7D94Ea2A4836; - address private constant create2DeployerAddress = 0x9df760a54b3B00cC8B3d70A37d45fa97cCfdb4Db; - address private constant conduitControllerAddress = 0x00000000F9490004C11Cef243f5400493c00Ad63; - address private constant immutableSeaportAddress = 0xbE737Cf2C122F83d1610C1224f7B99ca9d0E09f6; - bytes32 private constant immutableSeaportDeploymentSalt = keccak256(abi.encodePacked("immutable-seaport16")); - address private constant zoneAddress = 0x18C12fb9c4f6165196c895aDF84230828A85B247; - bytes32 private constant zoneDeploymentSalt = keccak256(abi.encodePacked("immutable-signed-zone-v3")); - address private constant seaportInitialOwner = 0xdDA0d9448Ebe3eA43aFecE5Fa6401F5795c19333; // Immutable Deployer - address private constant zoneInitialOwner = 0xdDA0d9448Ebe3eA43aFecE5Fa6401F5795c19333; // Immutable Deployer + address private constant ACCESS_CONTROLLED_DEPLOYER_ADDRESS = 0x0B5B1d92259b13D516cCd5a6E63d7D94Ea2A4836; + address private constant CREATE2_DEPLOYER_ADDRESS = 0x9df760a54b3B00cC8B3d70A37d45fa97cCfdb4Db; + address private constant CONDUIT_CONTROLLER_ADDRESS = 0x00000000F9490004C11Cef243f5400493c00Ad63; + address private constant IMMUTABLE_SEAPORT_ADDRESS = 0xbE737Cf2C122F83d1610C1224f7B99ca9d0E09f6; + bytes32 private constant IMMUTABLE_SEAPORT_DEPLOYMENT_SALT = keccak256(abi.encodePacked("immutable-seaport16")); + address private constant ZONE_ADDRESS = 0x18C12fb9c4f6165196c895aDF84230828A85B247; + bytes32 private constant ZONE_DEPLOYMENT_SALT = keccak256(abi.encodePacked("immutable-signed-zone-v3")); + address private constant SEAPORT_INITIAL_OWNER = 0xdDA0d9448Ebe3eA43aFecE5Fa6401F5795c19333; // Immutable Deployer + address private constant ZONE_INITIAL_OWNER = 0xdDA0d9448Ebe3eA43aFecE5Fa6401F5795c19333; // Immutable Deployer function run() external { - AccessControlledDeployer deployer = AccessControlledDeployer(accessControlledDeployerAddress); - IDeployer create2Deployer = IDeployer(create2DeployerAddress); + AccessControlledDeployer deployer = AccessControlledDeployer(ACCESS_CONTROLLED_DEPLOYER_ADDRESS); + IDeployer create2Deployer = IDeployer(CREATE2_DEPLOYER_ADDRESS); - // Check supplied immutableSeaportAddress matches the expected address based on current creationCode + // Check supplied IMMUTABLE_SEAPORT_ADDRESS matches the expected address based on current creationCode bytes memory immutableSeaportDeploymentBytecode = abi.encodePacked( type(ImmutableSeaport).creationCode, - abi.encode(conduitControllerAddress, seaportInitialOwner) + abi.encode(CONDUIT_CONTROLLER_ADDRESS, SEAPORT_INITIAL_OWNER) ); - address expectedImmutableSeaportAddress = create2Deployer.deployedAddress(immutableSeaportDeploymentBytecode, accessControlledDeployerAddress, immutableSeaportDeploymentSalt); - console.log("Expected ImmutableSeaport address: %s", expectedImmutableSeaportAddress); - require(expectedImmutableSeaportAddress == immutableSeaportAddress, "Expected ImmutableSeaport address mismatch"); + address expectedIMMUTABLE_SEAPORT_ADDRESS = create2Deployer.deployedAddress(immutableSeaportDeploymentBytecode, ACCESS_CONTROLLED_DEPLOYER_ADDRESS, IMMUTABLE_SEAPORT_DEPLOYMENT_SALT); + console.log("Expected ImmutableSeaport address: %s", expectedIMMUTABLE_SEAPORT_ADDRESS); + require(expectedIMMUTABLE_SEAPORT_ADDRESS == IMMUTABLE_SEAPORT_ADDRESS, "Expected ImmutableSeaport address mismatch"); - // Check supplied zoneAddress matches the expected address based on current creationCode + // Check supplied ZONE_ADDRESS matches the expected address based on current creationCode bytes memory zoneDeploymentBytecode = abi.encodePacked( type(ImmutableSignedZoneV3).creationCode, - abi.encode("ImmutableSignedZone", immutableSeaportAddress, "", "", zoneInitialOwner) + abi.encode("ImmutableSignedZone", IMMUTABLE_SEAPORT_ADDRESS, "", "", ZONE_INITIAL_OWNER) ); - address expectedZoneAddress = create2Deployer.deployedAddress(zoneDeploymentBytecode, accessControlledDeployerAddress, zoneDeploymentSalt); + address expectedZoneAddress = create2Deployer.deployedAddress(zoneDeploymentBytecode, ACCESS_CONTROLLED_DEPLOYER_ADDRESS, ZONE_DEPLOYMENT_SALT); console.log("Expected ImmutableSignedZoneV3 address: %s", expectedZoneAddress); - require(expectedZoneAddress == zoneAddress, "Expected ImmutableSignedZoneV3 address mismatch"); + require(expectedZoneAddress == ZONE_ADDRESS, "Expected ImmutableSignedZoneV3 address mismatch"); vm.startBroadcast(); // Deploy zone if it doesn't already exist - if (zoneAddress.code.length == 0) { + if (ZONE_ADDRESS.code.length == 0) { console.log("Deploying ImmutableSignedZoneV3"); - address deployedZoneAddress = deployer.deploy(create2Deployer, zoneDeploymentBytecode, zoneDeploymentSalt); - require(deployedZoneAddress == zoneAddress, "Deployed ImmutableSignedZoneV3 address mismatch"); + address deployedZoneAddress = deployer.deploy(create2Deployer, zoneDeploymentBytecode, ZONE_DEPLOYMENT_SALT); + require(deployedZoneAddress == ZONE_ADDRESS, "Deployed ImmutableSignedZoneV3 address mismatch"); } else { console.log("Skipping ImmutableSignedZoneV3, already exists"); } diff --git a/test/allowlist/AllowlistImmutableERC721MintByIDTransferApprovals.t.sol b/test/allowlist/AllowlistImmutableERC721MintByIDTransferApprovals.t.sol index 4a518920..436ca3e7 100644 --- a/test/allowlist/AllowlistImmutableERC721MintByIDTransferApprovals.t.sol +++ b/test/allowlist/AllowlistImmutableERC721MintByIDTransferApprovals.t.sol @@ -1,15 +1,11 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {MockWallet} from "../../contracts/mocks/MockWallet.sol"; -import {MockWalletFactory} from "../../contracts/mocks/MockWalletFactory.sol"; import {MockFactory} from "../../contracts/mocks/MockFactory.sol"; import {ImmutableERC721MintByID} from "../../contracts/token/erc721/preset/ImmutableERC721MintByID.sol"; -import {IImmutableERC721Errors} from "../../contracts/errors/Errors.sol"; -import {OperatorAllowlistEnforcementErrors} from "../../contracts/errors/Errors.sol"; import {OperatorAllowlistUpgradeable} from "../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; -import {Sign} from "../utils/Sign.sol"; import {DeployOperatorAllowlist} from "../utils/DeployAllowlistProxy.sol"; import {DeploySCWallet} from "../utils/DeploySCW.sol"; import {DeployMockMarketPlace} from "../utils/DeployMockMarketPlace.sol"; diff --git a/test/allowlist/AllowlistImmutableERC721TransferApprovals.t.sol b/test/allowlist/AllowlistImmutableERC721TransferApprovals.t.sol index f21d76a0..24d2f63f 100644 --- a/test/allowlist/AllowlistImmutableERC721TransferApprovals.t.sol +++ b/test/allowlist/AllowlistImmutableERC721TransferApprovals.t.sol @@ -1,15 +1,11 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {MockWallet} from "../../contracts/mocks/MockWallet.sol"; -import {MockWalletFactory} from "../../contracts/mocks/MockWalletFactory.sol"; import {MockFactory} from "../../contracts/mocks/MockFactory.sol"; import {ImmutableERC721} from "../../contracts/token/erc721/preset/ImmutableERC721.sol"; -import {IImmutableERC721Errors} from "../../contracts/errors/Errors.sol"; -import {OperatorAllowlistEnforcementErrors} from "../../contracts/errors/Errors.sol"; import {OperatorAllowlistUpgradeable} from "../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; -import {Sign} from "../utils/Sign.sol"; import {DeployOperatorAllowlist} from "../utils/DeployAllowlistProxy.sol"; import {DeploySCWallet} from "../utils/DeploySCW.sol"; import {DeployMockMarketPlace} from "../utils/DeployMockMarketPlace.sol"; @@ -61,7 +57,7 @@ contract AllowlistERC721TransferApprovals is Test { _giveMinterRole(); } - function testDeployment() public { + function testDeployment() public view { assertEq(address(immutableERC721.operatorAllowlist()), proxyAddr); } diff --git a/test/allowlist/OperatorAllowlistUpgradeable.t.sol b/test/allowlist/OperatorAllowlistUpgradeable.t.sol index 27116bd6..e4c4c123 100644 --- a/test/allowlist/OperatorAllowlistUpgradeable.t.sol +++ b/test/allowlist/OperatorAllowlistUpgradeable.t.sol @@ -2,8 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {Test} from "forge-std/Test.sol"; import {OperatorAllowlistUpgradeable} from "../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; import {MockOperatorAllowlistUpgradeable} from "./MockOAL.sol"; import {ImmutableERC721} from "../../contracts/token/erc721/preset/ImmutableERC721.sol"; diff --git a/test/deployer/AccessControlledDeployer.t.sol b/test/deployer/AccessControlledDeployer.t.sol index bdeb52fd..4f0e6123 100644 --- a/test/deployer/AccessControlledDeployer.t.sol +++ b/test/deployer/AccessControlledDeployer.t.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IDeployer} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IDeployer.sol"; import {ERC20MintableBurnable} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/test/token/ERC20MintableBurnable.sol"; diff --git a/test/deployer/create2/Create2Utils.sol b/test/deployer/create2/Create2Utils.sol index 75e86d34..7a858750 100644 --- a/test/deployer/create2/Create2Utils.sol +++ b/test/deployer/create2/Create2Utils.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; contract Create2Utils is Test { function predictCreate2Address(bytes memory _bytecode, address _deployer, address _sender, bytes32 _salt) diff --git a/test/deployer/create2/OwnableCreate2Deployer.t.sol b/test/deployer/create2/OwnableCreate2Deployer.t.sol index c54e8ac7..5ce76c4b 100644 --- a/test/deployer/create2/OwnableCreate2Deployer.t.sol +++ b/test/deployer/create2/OwnableCreate2Deployer.t.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {IDeploy} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IDeploy.sol"; import {ERC20Mock} from "@openzeppelin/contracts/mocks/ERC20Mock.sol"; import {ERC20MintableBurnable} from diff --git a/test/deployer/create3/Create3Utils.sol b/test/deployer/create3/Create3Utils.sol index f8faaf17..7635e755 100644 --- a/test/deployer/create3/Create3Utils.sol +++ b/test/deployer/create3/Create3Utils.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {IDeployer} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IDeployer.sol"; contract Create3Utils is Test { diff --git a/test/deployer/create3/OwnableCreate3Deployer.t.sol b/test/deployer/create3/OwnableCreate3Deployer.t.sol index ce12aa10..b1910bbb 100644 --- a/test/deployer/create3/OwnableCreate3Deployer.t.sol +++ b/test/deployer/create3/OwnableCreate3Deployer.t.sol @@ -2,7 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; +import {console} from "forge-std/console.sol"; import {IDeploy} from "@axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IDeploy.sol"; import {ERC20Mock} from "@openzeppelin/contracts/mocks/ERC20Mock.sol"; import {ERC20MintableBurnable} from diff --git a/test/games/gems/GemGame.t.sol b/test/games/gems/GemGame.t.sol index ef67e737..f3c0d140 100644 --- a/test/games/gems/GemGame.t.sol +++ b/test/games/gems/GemGame.t.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {GemGame, Unauthorized, ContractPaused} from "../../../contracts/games/gems/GemGame.sol"; contract GemGameTest is Test { diff --git a/test/multicall/GuardedMulticaller2.t.sol b/test/multicall/GuardedMulticaller2.t.sol index 01d7160c..0a87b3cd 100644 --- a/test/multicall/GuardedMulticaller2.t.sol +++ b/test/multicall/GuardedMulticaller2.t.sol @@ -2,10 +2,9 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {GuardedMulticaller2} from "../../contracts/multicall/GuardedMulticaller2.sol"; import {MockFunctions} from "./MockFunctions.sol"; -import {EIP712} from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; import {SigUtils} from "./SigUtils.t.sol"; contract GuardedMulticaller2Test is Test { diff --git a/test/multicall/SigUtils.t.sol b/test/multicall/SigUtils.t.sol index 4bb18a70..96ea0446 100644 --- a/test/multicall/SigUtils.t.sol +++ b/test/multicall/SigUtils.t.sol @@ -21,10 +21,10 @@ contract SigUtils { ); - bytes32 private immutable cachedDomainSeparator; + bytes32 private immutable CACHED_DOMAIN_SEPARATOR; constructor(string memory _name, string memory _version, address _verifyingContract) { - cachedDomainSeparator = keccak256(abi.encode(_TYPE_HASH, keccak256(bytes(_name)), keccak256(bytes(_version)), block.chainid, _verifyingContract)); + CACHED_DOMAIN_SEPARATOR = keccak256(abi.encode(_TYPE_HASH, keccak256(bytes(_name)), keccak256(bytes(_version)), block.chainid, _verifyingContract)); } function _hashCallArray(GuardedMulticaller2.Call[] calldata _calls) internal pure returns (bytes32) { @@ -43,7 +43,7 @@ contract SigUtils { uint256 _deadline ) public view returns (bytes32) { bytes32 digest = keccak256(abi.encode(MULTICALL_TYPEHASHV2, _reference, _hashCallArray(_calls), _deadline)); - return keccak256(abi.encodePacked("\x19\x01", cachedDomainSeparator, digest)); + return keccak256(abi.encodePacked("\x19\x01", CACHED_DOMAIN_SEPARATOR, digest)); } @@ -59,7 +59,7 @@ contract SigUtils { keccak256(abi.encodePacked(_targets)), hashBytesArray(_data), _deadline)); - return keccak256(abi.encodePacked("\x19\x01", cachedDomainSeparator, digest)); + return keccak256(abi.encodePacked("\x19\x01", CACHED_DOMAIN_SEPARATOR, digest)); } function hashBytesArray(bytes[] memory _data) public pure returns (bytes32) { diff --git a/test/payment-splitter/PaymentSplitter.t.sol b/test/payment-splitter/PaymentSplitter.t.sol index 59e78b5c..6622b508 100644 --- a/test/payment-splitter/PaymentSplitter.t.sol +++ b/test/payment-splitter/PaymentSplitter.t.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {PaymentSplitter} from "../../contracts/payment-splitter/PaymentSplitter.sol"; import {MockERC20} from "./MockERC20.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/test/royalty-enforcement/MockMarketplace.sol b/test/royalty-enforcement/MockMarketplace.sol index 68985b61..0c379722 100644 --- a/test/royalty-enforcement/MockMarketplace.sol +++ b/test/royalty-enforcement/MockMarketplace.sol @@ -8,16 +8,16 @@ import {IERC2981} from "@openzeppelin/contracts/interfaces/IERC2981.sol"; contract MockMarketplace { error ZeroAddress(); - IERC721 public immutable tokenAddress; - IERC2981 public immutable royaltyAddress; + IERC721 public immutable TOKEN_ADDRESS; + IERC2981 public immutable ROYALTY_ADDRESS; constructor(address _tokenAddress) { - tokenAddress = IERC721(_tokenAddress); - royaltyAddress = IERC2981(_tokenAddress); + TOKEN_ADDRESS = IERC721(_tokenAddress); + ROYALTY_ADDRESS = IERC2981(_tokenAddress); } function executeTransfer(address recipient, uint256 _tokenId) public { - tokenAddress.transferFrom(msg.sender, recipient, _tokenId); + TOKEN_ADDRESS.transferFrom(msg.sender, recipient, _tokenId); } /// @notice This code is only for testing purposes. Do not use similar @@ -25,11 +25,11 @@ contract MockMarketplace { /// @dev For details see: https://github.com/crytic/slither/wiki/Detector-Documentation#arbitrary-from-in-transferfrom function executeTransferFrom(address from, address to, uint256 _tokenId) public { // slither-disable-next-line arbitrary-send-erc20 - tokenAddress.transferFrom(from, to, _tokenId); + TOKEN_ADDRESS.transferFrom(from, to, _tokenId); } function executeApproveForAll(address operator, bool approved) public { - tokenAddress.setApprovalForAll(operator, approved); + TOKEN_ADDRESS.setApprovalForAll(operator, approved); } /// @notice This code is only for testing purposes. Do not use similar @@ -41,7 +41,7 @@ contract MockMarketplace { } // solhint-disable-next-line custom-errors require(msg.value == price, "insufficient msg.value"); - (address receiver, uint256 royaltyAmount) = royaltyAddress.royaltyInfo(_tokenId, price); + (address receiver, uint256 royaltyAmount) = ROYALTY_ADDRESS.royaltyInfo(_tokenId, price); if (receiver == address(0)) { revert ZeroAddress(); } @@ -49,7 +49,7 @@ contract MockMarketplace { payable(receiver).transfer(royaltyAmount); payable(from).transfer(sellerAmt); // slither-disable-next-line arbitrary-send-erc20 - tokenAddress.transferFrom(from, recipient, _tokenId); + TOKEN_ADDRESS.transferFrom(from, recipient, _tokenId); } } diff --git a/test/royalty-enforcement/RoyaltyMarketplace.t.sol b/test/royalty-enforcement/RoyaltyMarketplace.t.sol index ee25c059..9baef4dc 100644 --- a/test/royalty-enforcement/RoyaltyMarketplace.t.sol +++ b/test/royalty-enforcement/RoyaltyMarketplace.t.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableERC721MintByID} from "../../contracts/token/erc721/preset/ImmutableERC721MintByID.sol"; import {MockMarketplace} from "./MockMarketplace.sol"; import {OperatorAllowlistUpgradeable} from "../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; @@ -21,11 +21,11 @@ contract RoyaltyMarketplaceTest is Test { address public buyer; address public seller; - string public constant baseURI = "https://baseURI.com/"; - string public constant contractURI = "https://contractURI.com"; - string public constant name = "ERC721Preset"; - string public constant symbol = "EP"; - uint96 public constant royalty = 2000; // 20% + string public constant BASE_URI = "https://baseURI.com/"; + string public constant CONTRACT_URI = "https://contractURI.com"; + string public constant NAME = "ERC721Preset"; + string public constant SYMBOL = "EP"; + uint96 public constant ROYALTY = 2000; // 20% function setUp() public { // Set up accounts @@ -45,13 +45,13 @@ contract RoyaltyMarketplaceTest is Test { vm.prank(owner); erc721 = new ImmutableERC721MintByID( owner, - name, - symbol, - baseURI, - contractURI, + NAME, + SYMBOL, + BASE_URI, + CONTRACT_URI, address(operatorAllowlist), royaltyRecipient, - royalty + ROYALTY ); // Deploy mock marketplace diff --git a/test/staking/StakeHolderBase.t.sol b/test/staking/StakeHolderBase.t.sol index 8794a98e..696d2639 100644 --- a/test/staking/StakeHolderBase.t.sol +++ b/test/staking/StakeHolderBase.t.sol @@ -5,7 +5,7 @@ pragma solidity >=0.8.19 <0.8.29; // solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBaseV2} from "../../contracts/staking/StakeHolderBaseV2.sol"; import {StakeHolderERC20} from "../../contracts/staking/StakeHolderERC20.sol"; diff --git a/test/staking/StakeHolderConfigBase.t.sol b/test/staking/StakeHolderConfigBase.t.sol index 0e9eaae4..ad30e59c 100644 --- a/test/staking/StakeHolderConfigBase.t.sol +++ b/test/staking/StakeHolderConfigBase.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; diff --git a/test/staking/StakeHolderConfigBaseV2.t.sol b/test/staking/StakeHolderConfigBaseV2.t.sol index bcb9843c..603ccb47 100644 --- a/test/staking/StakeHolderConfigBaseV2.t.sol +++ b/test/staking/StakeHolderConfigBaseV2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; import {StakeHolderConfigBaseTest} from "./StakeHolderConfigBase.t.sol"; diff --git a/test/staking/StakeHolderConfigERC20.t.sol b/test/staking/StakeHolderConfigERC20.t.sol index 06afa165..ff1d0938 100644 --- a/test/staking/StakeHolderConfigERC20.t.sol +++ b/test/staking/StakeHolderConfigERC20.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderERC20} from "../../contracts/staking/StakeHolderERC20.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; diff --git a/test/staking/StakeHolderConfigERC20V2.t.sol b/test/staking/StakeHolderConfigERC20V2.t.sol index 780bd82e..616fa389 100644 --- a/test/staking/StakeHolderConfigERC20V2.t.sol +++ b/test/staking/StakeHolderConfigERC20V2.t.sol @@ -2,12 +2,9 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderERC20} from "../../contracts/staking/StakeHolderERC20.sol"; import {StakeHolderERC20V2} from "../../contracts/staking/StakeHolderERC20V2.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; -import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; import {StakeHolderBaseV2} from "../../contracts/staking/StakeHolderBaseV2.sol"; import {StakeHolderConfigBaseTestV2} from "./StakeHolderConfigBaseV2.t.sol"; import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; diff --git a/test/staking/StakeHolderConfigNative.t.sol b/test/staking/StakeHolderConfigNative.t.sol index 8feaa4f5..37db542c 100644 --- a/test/staking/StakeHolderConfigNative.t.sol +++ b/test/staking/StakeHolderConfigNative.t.sol @@ -2,13 +2,10 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderNative} from "../../contracts/staking/StakeHolderNative.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; import {StakeHolderConfigBaseTest} from "./StakeHolderConfigBase.t.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; contract StakeHolderNativeV2a is StakeHolderNative { function upgradeStorage(bytes memory /* _data */) external override(StakeHolderBase) { diff --git a/test/staking/StakeHolderConfigNativeV2.t.sol b/test/staking/StakeHolderConfigNativeV2.t.sol index fea533bf..6d029270 100644 --- a/test/staking/StakeHolderConfigNativeV2.t.sol +++ b/test/staking/StakeHolderConfigNativeV2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderNative} from "../../contracts/staking/StakeHolderNative.sol"; import {StakeHolderNativeV2} from "../../contracts/staking/StakeHolderNativeV2.sol"; import {StakeHolderBaseV2} from "../../contracts/staking/StakeHolderBaseV2.sol"; diff --git a/test/staking/StakeHolderConfigWIMX.t.sol b/test/staking/StakeHolderConfigWIMX.t.sol index 63da18fe..49ff9fe7 100644 --- a/test/staking/StakeHolderConfigWIMX.t.sol +++ b/test/staking/StakeHolderConfigWIMX.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderWIMX} from "../../contracts/staking/StakeHolderWIMX.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; diff --git a/test/staking/StakeHolderConfigWIMXV2.t.sol b/test/staking/StakeHolderConfigWIMXV2.t.sol index dbec1411..1120647f 100644 --- a/test/staking/StakeHolderConfigWIMXV2.t.sol +++ b/test/staking/StakeHolderConfigWIMXV2.t.sol @@ -2,11 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderWIMX} from "../../contracts/staking/StakeHolderWIMX.sol"; import {StakeHolderWIMXV2} from "../../contracts/staking/StakeHolderWIMXV2.sol"; -import {WIMX} from "../../contracts/staking/WIMX.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBaseV2} from "../../contracts/staking/StakeHolderBaseV2.sol"; import {StakeHolderConfigBaseTestV2} from "./StakeHolderConfigBaseV2.t.sol"; diff --git a/test/staking/StakeHolderInitBase.t.sol b/test/staking/StakeHolderInitBase.t.sol index 7058836d..9859cdab 100644 --- a/test/staking/StakeHolderInitBase.t.sol +++ b/test/staking/StakeHolderInitBase.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; abstract contract StakeHolderInitBaseTest is StakeHolderBaseTest { diff --git a/test/staking/StakeHolderInitBaseV2.t.sol b/test/staking/StakeHolderInitBaseV2.t.sol index cb1d46ff..13e959b2 100644 --- a/test/staking/StakeHolderInitBaseV2.t.sol +++ b/test/staking/StakeHolderInitBaseV2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTest} from "./StakeHolderInitBase.t.sol"; abstract contract StakeHolderInitBaseTestV2 is StakeHolderInitBaseTest { diff --git a/test/staking/StakeHolderInitERC20.t.sol b/test/staking/StakeHolderInitERC20.t.sol index 33cb7c8b..f02a91b4 100644 --- a/test/staking/StakeHolderInitERC20.t.sol +++ b/test/staking/StakeHolderInitERC20.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTest} from "./StakeHolderInitBase.t.sol"; contract StakeHolderInitERC20Test is StakeHolderInitBaseTest { diff --git a/test/staking/StakeHolderInitERC20V2.t.sol b/test/staking/StakeHolderInitERC20V2.t.sol index a458c9fd..5eb1b06f 100644 --- a/test/staking/StakeHolderInitERC20V2.t.sol +++ b/test/staking/StakeHolderInitERC20V2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTestV2} from "./StakeHolderInitBaseV2.t.sol"; contract StakeHolderInitERC20TestV2 is StakeHolderInitBaseTestV2 { diff --git a/test/staking/StakeHolderInitNative.t.sol b/test/staking/StakeHolderInitNative.t.sol index 51cebb83..2f89f582 100644 --- a/test/staking/StakeHolderInitNative.t.sol +++ b/test/staking/StakeHolderInitNative.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTest} from "./StakeHolderInitBase.t.sol"; contract StakeHolderInitNativeTest is StakeHolderInitBaseTest { diff --git a/test/staking/StakeHolderInitNativeV2.t.sol b/test/staking/StakeHolderInitNativeV2.t.sol index f0aa22ba..0b177275 100644 --- a/test/staking/StakeHolderInitNativeV2.t.sol +++ b/test/staking/StakeHolderInitNativeV2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTestV2} from "./StakeHolderInitBaseV2.t.sol"; contract StakeHolderInitNativeTestV2 is StakeHolderInitBaseTestV2 { diff --git a/test/staking/StakeHolderInitWIMX.t.sol b/test/staking/StakeHolderInitWIMX.t.sol index cbf7f4d1..0736497e 100644 --- a/test/staking/StakeHolderInitWIMX.t.sol +++ b/test/staking/StakeHolderInitWIMX.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTest} from "./StakeHolderInitBase.t.sol"; contract StakeHolderInitWIMXTest is StakeHolderInitBaseTest { diff --git a/test/staking/StakeHolderInitWIMXV2.t.sol b/test/staking/StakeHolderInitWIMXV2.t.sol index ba2e4874..1b18ea0a 100644 --- a/test/staking/StakeHolderInitWIMXV2.t.sol +++ b/test/staking/StakeHolderInitWIMXV2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderInitBaseTestV2} from "./StakeHolderInitBaseV2.t.sol"; contract StakeHolderInitWIMXTestV2 is StakeHolderInitBaseTestV2 { diff --git a/test/staking/StakeHolderOperationalBase.t.sol b/test/staking/StakeHolderOperationalBase.t.sol index b28c4792..576caca9 100644 --- a/test/staking/StakeHolderOperationalBase.t.sol +++ b/test/staking/StakeHolderOperationalBase.t.sol @@ -2,8 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {stdError} from "forge-std/StdError.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; diff --git a/test/staking/StakeHolderOperationalBaseV2.t.sol b/test/staking/StakeHolderOperationalBaseV2.t.sol index 9408ba70..886b8253 100644 --- a/test/staking/StakeHolderOperationalBaseV2.t.sol +++ b/test/staking/StakeHolderOperationalBaseV2.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderOperationalBaseTest} from "./StakeHolderOperationalBase.t.sol"; diff --git a/test/staking/StakeHolderOperationalERC20.t.sol b/test/staking/StakeHolderOperationalERC20.t.sol index 94d5ead4..63b6f6c3 100644 --- a/test/staking/StakeHolderOperationalERC20.t.sol +++ b/test/staking/StakeHolderOperationalERC20.t.sol @@ -2,12 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; -import {StakeHolderERC20} from "../../contracts/staking/StakeHolderERC20.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderOperationalBaseTest} from "./StakeHolderOperationalBase.t.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; contract StakeHolderOperationalERC20Test is StakeHolderOperationalBaseTest { function setUp() public virtual override { @@ -31,7 +27,8 @@ contract StakeHolderOperationalERC20Test is StakeHolderOperationalBaseTest { function _deal(address _to, uint256 _amount) internal override { vm.prank(bank); - erc20.transfer(_to, _amount); + bool success = erc20.transfer(_to, _amount); + require(success, "Unexpected ERC 20 transfer failure"); } function _addStake(address _staker, uint256 _amount, bool _hasError, bytes memory _error) internal override { diff --git a/test/staking/StakeHolderOperationalERC20V2.t.sol b/test/staking/StakeHolderOperationalERC20V2.t.sol index 0d174299..3d54a535 100644 --- a/test/staking/StakeHolderOperationalERC20V2.t.sol +++ b/test/staking/StakeHolderOperationalERC20V2.t.sol @@ -2,9 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; -import {StakeHolderERC20} from "../../contracts/staking/StakeHolderERC20.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {IStakeHolderV2} from "../../contracts/staking/IStakeHolderV2.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; diff --git a/test/staking/StakeHolderOperationalNative.t.sol b/test/staking/StakeHolderOperationalNative.t.sol index f43f2430..12882b4d 100644 --- a/test/staking/StakeHolderOperationalNative.t.sol +++ b/test/staking/StakeHolderOperationalNative.t.sol @@ -2,12 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; -import {StakeHolderNative} from "../../contracts/staking/StakeHolderNative.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderOperationalBaseTest} from "./StakeHolderOperationalBase.t.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; import {StakeHolderAttackWallet} from "./StakeHolderAttackWallet.sol"; import {StakeHolderAttackWallet2} from "./StakeHolderAttackWallet2.sol"; diff --git a/test/staking/StakeHolderOperationalNativeV2.t.sol b/test/staking/StakeHolderOperationalNativeV2.t.sol index a516587e..d666e2af 100644 --- a/test/staking/StakeHolderOperationalNativeV2.t.sol +++ b/test/staking/StakeHolderOperationalNativeV2.t.sol @@ -2,9 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; -import {StakeHolderNative} from "../../contracts/staking/StakeHolderNative.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {IStakeHolderV2} from "../../contracts/staking/IStakeHolderV2.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; diff --git a/test/staking/StakeHolderOperationalWIMX.t.sol b/test/staking/StakeHolderOperationalWIMX.t.sol index 6afd3843..53c70bc0 100644 --- a/test/staking/StakeHolderOperationalWIMX.t.sol +++ b/test/staking/StakeHolderOperationalWIMX.t.sol @@ -2,13 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; -import {StakeHolderWIMX} from "../../contracts/staking/StakeHolderWIMX.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; -import {WIMX} from "../../contracts/staking/WIMX.sol"; import {StakeHolderOperationalBaseTest} from "./StakeHolderOperationalBase.t.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; contract StakeHolderOperationalWIMXTest is StakeHolderOperationalBaseTest { function setUp() public virtual override { diff --git a/test/staking/StakeHolderOperationalWIMXV2.t.sol b/test/staking/StakeHolderOperationalWIMXV2.t.sol index 704ad4c7..49dc0996 100644 --- a/test/staking/StakeHolderOperationalWIMXV2.t.sol +++ b/test/staking/StakeHolderOperationalWIMXV2.t.sol @@ -2,9 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; -import {StakeHolderWIMX} from "../../contracts/staking/StakeHolderWIMX.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {IStakeHolderV2} from "../../contracts/staking/IStakeHolderV2.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; diff --git a/test/staking/StakeHolderTimeDelayBase.t.sol b/test/staking/StakeHolderTimeDelayBase.t.sol index 3e89ac91..78d1a551 100644 --- a/test/staking/StakeHolderTimeDelayBase.t.sol +++ b/test/staking/StakeHolderTimeDelayBase.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderBaseTest} from "./StakeHolderBase.t.sol"; import {TimelockController} from "openzeppelin-contracts-4.9.3/governance/TimelockController.sol"; @@ -34,7 +32,7 @@ abstract contract StakeHolderTimeDelayBaseTest is StakeHolderBaseTest { } - function testTimeLockControllerDeployment() public { + function testTimeLockControllerDeployment() public view { assertEq(stakeHolderTimeDelay.getMinDelay(), delay, "Incorrect time delay"); } diff --git a/test/staking/StakeHolderTimeDelayERC20.t.sol b/test/staking/StakeHolderTimeDelayERC20.t.sol index 3219b73f..a8be5736 100644 --- a/test/staking/StakeHolderTimeDelayERC20.t.sol +++ b/test/staking/StakeHolderTimeDelayERC20.t.sol @@ -2,14 +2,11 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderERC20} from "../../contracts/staking/StakeHolderERC20.sol"; import {StakeHolderERC20V2} from "../../contracts/staking/StakeHolderERC20V2.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; import {StakeHolderTimeDelayBaseTest} from "./StakeHolderTimeDelayBase.t.sol"; import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; -import {ERC20PresetFixedSupply} from "openzeppelin-contracts-4.9.3/token/ERC20/presets/ERC20PresetFixedSupply.sol"; import {StakeHolderBaseV2} from "../../contracts/staking/StakeHolderBaseV2.sol"; contract StakeHolderERC20V3a is StakeHolderERC20V2 { diff --git a/test/staking/StakeHolderTimeDelayWIMX.t.sol b/test/staking/StakeHolderTimeDelayWIMX.t.sol index 618077ed..47223342 100644 --- a/test/staking/StakeHolderTimeDelayWIMX.t.sol +++ b/test/staking/StakeHolderTimeDelayWIMX.t.sol @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; import {StakeHolderWIMX} from "../../contracts/staking/StakeHolderWIMX.sol"; import {StakeHolderWIMXV2} from "../../contracts/staking/StakeHolderWIMXV2.sol"; import {IStakeHolder} from "../../contracts/staking/IStakeHolder.sol"; diff --git a/test/staking/StakeHolderUpgradeForkTest.t.sol b/test/staking/StakeHolderUpgradeForkTest.t.sol index 811fc9bc..7a5f4b87 100644 --- a/test/staking/StakeHolderUpgradeForkTest.t.sol +++ b/test/staking/StakeHolderUpgradeForkTest.t.sol @@ -2,11 +2,9 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {StakeHolderWIMX} from "../../contracts/staking/StakeHolderWIMX.sol"; import {StakeHolderWIMXV2} from "../../contracts/staking/StakeHolderWIMXV2.sol"; -import {ERC1967Proxy} from "openzeppelin-contracts-4.9.3/proxy/ERC1967/ERC1967Proxy.sol"; import {TimelockController} from "openzeppelin-contracts-4.9.3/governance/TimelockController.sol"; import {UUPSUpgradeable} from "openzeppelin-contracts-upgradeable-4.9.3/proxy/utils/UUPSUpgradeable.sol"; import {StakeHolderBase} from "../../contracts/staking/StakeHolderBase.sol"; @@ -51,7 +49,7 @@ contract StakeHolderUpgradeForkTest is Test { // It would fail if we were to run the test. return; } - console.log("Executing Staking Contract Upgrade Fork Test"); + //console.log("Executing Staking Contract Upgrade Fork Test"); stakingTokenAddress = stakeHolder.getToken(); assertEq(WIMX, stakingTokenAddress, "WIMX address incorrect prior to upgrade"); diff --git a/test/token/erc1155/ImmutableERC1155.t.sol b/test/token/erc1155/ImmutableERC1155.t.sol index f40d6d39..98fdb540 100644 --- a/test/token/erc1155/ImmutableERC1155.t.sol +++ b/test/token/erc1155/ImmutableERC1155.t.sol @@ -2,10 +2,9 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableERC1155} from "../../../contracts/token/erc1155/preset/ImmutableERC1155.sol"; import {IImmutableERC1155Errors} from "../../../contracts/errors/Errors.sol"; -import {OperatorAllowlistEnforcementErrors} from "../../../contracts/errors/Errors.sol"; import {OperatorAllowlistUpgradeable} from "../../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; import {Sign} from "../../utils/Sign.sol"; import {DeployOperatorAllowlist} from "../../utils/DeployAllowlistProxy.sol"; @@ -144,29 +143,29 @@ contract ImmutableERC1155Test is Test { assertEq(500, royaltyAmount); } - function test_DeploymentShouldSetAdminRoleToOwner() public { + function test_DeploymentShouldSetAdminRoleToOwner() public view { bytes32 adminRole = immutableERC1155.DEFAULT_ADMIN_ROLE(); assertTrue(immutableERC1155.hasRole(adminRole, owner)); } - function test_DeploymentShouldSetContractURI() public { + function test_DeploymentShouldSetContractURI() public view { assertEq(immutableERC1155.contractURI(), "test-contract-uri"); } - function test_DeploymentShouldSetBaseURI() public { + function test_DeploymentShouldSetBaseURI() public view { assertEq(immutableERC1155.baseURI(), "test-base-uri"); } - function test_DeploymentShouldSetUri() public { + function test_DeploymentShouldSetUri() public view { assertEq(immutableERC1155.uri(0), immutableERC1155.baseURI()); } - function test_DeploymentAllowlistShouldGiveAdminToOwner() public { + function test_DeploymentAllowlistShouldGiveAdminToOwner() public view { bytes32 adminRole = operatorAllowlist.DEFAULT_ADMIN_ROLE(); assertTrue(operatorAllowlist.hasRole(adminRole, owner)); } - function test_DeploymentShouldSetAllowlistToProxy() public { + function test_DeploymentShouldSetAllowlistToProxy() public view { assertEq(address(immutableERC1155.operatorAllowlist()), proxyAddr); } @@ -429,11 +428,11 @@ contract ImmutableERC1155Test is Test { /* * SupportsInterface */ - function test_SupportsInterface() public { + function test_SupportsInterface() public view { assertTrue(immutableERC1155.supportsInterface(0x9e3ae8e4)); } - function test_SupportsInterface_delegatesToSuper() public { + function test_SupportsInterface_delegatesToSuper() public view { assertTrue(immutableERC1155.supportsInterface(0x01ffc9a7)); //IERC165 } diff --git a/test/token/erc1155/ImmutableERC1155Costs.t.sol b/test/token/erc1155/ImmutableERC1155Costs.t.sol index 9d057d92..eced33a7 100644 --- a/test/token/erc1155/ImmutableERC1155Costs.t.sol +++ b/test/token/erc1155/ImmutableERC1155Costs.t.sol @@ -2,10 +2,8 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableERC1155} from "../../../contracts/token/erc1155/preset/ImmutableERC1155.sol"; -import {IImmutableERC1155Errors} from "../../../contracts/errors/Errors.sol"; -import {OperatorAllowlistEnforcementErrors} from "../../../contracts/errors/Errors.sol"; import {OperatorAllowlistUpgradeable} from "../../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; import {Sign} from "../../utils/Sign.sol"; import {DeployOperatorAllowlist} from "../../utils/DeployAllowlistProxy.sol"; diff --git a/test/token/erc20/preset/ImmutableERC20FixedSupplyNoBurn.t.sol b/test/token/erc20/preset/ImmutableERC20FixedSupplyNoBurn.t.sol index 87e8c718..5d8326d0 100644 --- a/test/token/erc20/preset/ImmutableERC20FixedSupplyNoBurn.t.sol +++ b/test/token/erc20/preset/ImmutableERC20FixedSupplyNoBurn.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableERC20FixedSupplyNoBurn} from "contracts/token/erc20/preset/ImmutableERC20FixedSupplyNoBurn.sol"; import {IImmutableERC20Errors} from "contracts/token/erc20/preset/Errors.sol"; @@ -25,7 +25,7 @@ contract ImmutableERC20FixedSupplyNoBurnTest is Test { erc20 = new ImmutableERC20FixedSupplyNoBurn(name, symbol, supply, treasurer, hubOwner); } - function testInit() public { + function testInit() public view { assertEq(erc20.name(), name, "name"); assertEq(erc20.symbol(), symbol, "symbol"); assertEq(erc20.totalSupply(), supply, "supply"); diff --git a/test/token/erc20/preset/ImmutableERC20MinterBurnerPermit.t.sol b/test/token/erc20/preset/ImmutableERC20MinterBurnerPermit.t.sol index 39bdcd0c..f1e45cbe 100644 --- a/test/token/erc20/preset/ImmutableERC20MinterBurnerPermit.t.sol +++ b/test/token/erc20/preset/ImmutableERC20MinterBurnerPermit.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableERC20MinterBurnerPermit} from "contracts/token/erc20/preset/ImmutableERC20MinterBurnerPermit.sol"; import {IImmutableERC20Errors} from "contracts/token/erc20/preset/Errors.sol"; @@ -29,7 +29,7 @@ contract ImmutableERC20MinterBurnerPermitTest is Test { erc20 = new ImmutableERC20MinterBurnerPermit(admin, minter, hubOwner, name, symbol, maxSupply); } - function testInit() public { + function testInit() public view { assertEq(erc20.name(), name, "name"); assertEq(erc20.symbol(), symbol, "symbol"); bytes32 minterRole = erc20.MINTER_ROLE(); diff --git a/test/token/erc721/ERC721Base.t.sol b/test/token/erc721/ERC721Base.t.sol index 63516309..26c49f60 100644 --- a/test/token/erc721/ERC721Base.t.sol +++ b/test/token/erc721/ERC721Base.t.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.19 <0.8.29; // solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {IImmutableERC721} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; import {OperatorAllowlistUpgradeable} from "../../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; import {DeployOperatorAllowlist} from "../../utils/DeployAllowlistProxy.sol"; @@ -78,6 +78,7 @@ abstract contract ERC721BaseTest is Test { function notOwnedRevertError(uint256 _tokenIdToBeBurned) public pure virtual returns (bytes memory); function calcFee(uint256 _salePrice) public view returns(uint96) { + // forge-lint: disable-next-line(unsafe-typecast) return uint96(feeNumerator * _salePrice / 10000); } diff --git a/test/token/erc721/ERC721ConfigBase.t.sol b/test/token/erc721/ERC721ConfigBase.t.sol index f179aa74..b350f2be 100644 --- a/test/token/erc721/ERC721ConfigBase.t.sol +++ b/test/token/erc721/ERC721ConfigBase.t.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import {IImmutableERC721, IImmutableERC721Errors} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; +import {IImmutableERC721} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; import {ERC721BaseTest} from "./ERC721Base.t.sol"; @@ -157,7 +157,7 @@ abstract contract ERC721ConfigBaseTest is ERC721BaseTest { erc721.setContractURI("New Contract URI"); } - function testSupportedInterfaces() public { + function testSupportedInterfaces() public view { // ERC165 assertTrue(erc721.supportsInterface(0x01ffc9a7)); // ERC721 diff --git a/test/token/erc721/ERC721ConfigByQuantityBase.t.sol b/test/token/erc721/ERC721ConfigByQuantityBase.t.sol index deecb095..dcdd908d 100644 --- a/test/token/erc721/ERC721ConfigByQuantityBase.t.sol +++ b/test/token/erc721/ERC721ConfigByQuantityBase.t.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.19 <0.8.29; import {ERC721ConfigBaseTest} from "./ERC721ConfigBase.t.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; -import {IImmutableERC721, IImmutableERC721Errors} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; +import {IImmutableERC721Errors} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; abstract contract ERC721ConfigByQuantityBaseTest is ERC721ConfigBaseTest { IImmutableERC721ByQuantity public erc721BQ; diff --git a/test/token/erc721/ERC721ConfigByQuantityV1.t.sol b/test/token/erc721/ERC721ConfigByQuantityV1.t.sol index 6b2d6ea1..1e8ed042 100644 --- a/test/token/erc721/ERC721ConfigByQuantityV1.t.sol +++ b/test/token/erc721/ERC721ConfigByQuantityV1.t.sol @@ -5,7 +5,7 @@ pragma solidity >=0.8.19 <0.8.29; import {ERC721ConfigByQuantityBaseTest} from "./ERC721ConfigByQuantityBase.t.sol"; import {ImmutableERC721} from "../../../contracts/token/erc721/preset/ImmutableERC721.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; -import {IImmutableERC721, IImmutableERC721Errors} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; +import {IImmutableERC721} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; contract ERC721ConfigByQuantityV1Test is ERC721ConfigByQuantityBaseTest { diff --git a/test/token/erc721/ERC721ConfigByQuantityV2.t.sol b/test/token/erc721/ERC721ConfigByQuantityV2.t.sol index b9a3debc..965fa515 100644 --- a/test/token/erc721/ERC721ConfigByQuantityV2.t.sol +++ b/test/token/erc721/ERC721ConfigByQuantityV2.t.sol @@ -5,7 +5,7 @@ pragma solidity >=0.8.19 <0.8.29; import {ERC721ConfigByQuantityBaseTest} from "./ERC721ConfigByQuantityBase.t.sol"; import {ImmutableERC721V2} from "../../../contracts/token/erc721/preset/ImmutableERC721V2.sol"; import {IImmutableERC721ByQuantity} from "../../../contracts/token/erc721/interfaces/IImmutableERC721ByQuantity.sol"; -import {IImmutableERC721, IImmutableERC721Errors} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; +import {IImmutableERC721} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; contract ERC721ConfigByQuantityV2Test is ERC721ConfigByQuantityBaseTest { diff --git a/test/token/erc721/ERC721OperationalByIdV1.t.sol b/test/token/erc721/ERC721OperationalByIdV1.t.sol index 92b4ef0e..2999468f 100644 --- a/test/token/erc721/ERC721OperationalByIdV1.t.sol +++ b/test/token/erc721/ERC721OperationalByIdV1.t.sol @@ -4,7 +4,7 @@ pragma solidity >=0.8.19 <0.8.29; import {ERC721OperationalBaseTest} from "./ERC721OperationalBase.t.sol"; import {ImmutableERC721MintByID} from "../../../contracts/token/erc721/preset/ImmutableERC721MintByID.sol"; -import {IImmutableERC721, IImmutableERC721Errors} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; +import {IImmutableERC721} from "../../../contracts/token/erc721/interfaces/IImmutableERC721.sol"; // Test the original ImmutableERC721 contract: Operational tests diff --git a/test/token/erc721/ERC721OperationalByQuantityBase.t.sol b/test/token/erc721/ERC721OperationalByQuantityBase.t.sol index ee6ce7c8..33924ae5 100644 --- a/test/token/erc721/ERC721OperationalByQuantityBase.t.sol +++ b/test/token/erc721/ERC721OperationalByQuantityBase.t.sol @@ -12,7 +12,7 @@ import {MockEIP1271Wallet} from "../../../contracts/mocks/MockEIP1271Wallet.sol" abstract contract ERC721OperationalByQuantityBaseTest is ERC721OperationalBaseTest { IImmutableERC721ByQuantity public erc721BQ; - function testThreshold() public { + function testThreshold() public view { uint256 first = erc721BQ.mintBatchByQuantityThreshold(); assertTrue(first >= 2**128); } diff --git a/test/token/erc721/fuzz/ERC721PsiV2.Echidna.sol b/test/token/erc721/fuzz/ERC721PsiV2.Echidna.sol index 4a4ab684..14e1c946 100644 --- a/test/token/erc721/fuzz/ERC721PsiV2.Echidna.sol +++ b/test/token/erc721/fuzz/ERC721PsiV2.Echidna.sol @@ -4,6 +4,8 @@ pragma solidity >=0.8.19 <0.8.29; import {ERC721PsiBurnableV2} from "../../../../contracts/token/erc721/erc721psi/ERC721PsiBurnableV2.sol"; import {IERC721Receiver} from "openzeppelin-contracts-4.9.3/token/ERC721/IERC721Receiver.sol"; +// solhint-disable mixed-case-function + // Test receiver contract for safe transfer testing contract TestReceiver is IERC721Receiver { bool public received; @@ -240,6 +242,7 @@ contract ERC721PsiV2Echidna is ERC721PsiBurnableV2 { function echidna_cross_group_operations() public returns (bool) { uint256 groupSize = GROUP_SIZE; + // forge-lint: disable-next-line(divide-before-multiply) uint256 tokenId = (currentTokenId / groupSize) * groupSize; // Align to group boundary try this.mint(address(this), groupSize + 1) { @@ -352,6 +355,7 @@ contract ERC721PsiV2Echidna is ERC721PsiBurnableV2 { if (totalMinted == 0) return true; uint256 tokenId = currentTokenId % totalMinted; address originalOwner = tokenOwnersMap[tokenId]; + // forge-lint: disable-next-line(unsafe-typecast) address newOwner = address(uint160(currentTokenId % 100)); try this.transferFrom(originalOwner, newOwner, tokenId) { diff --git a/test/trading/seaport/ImmutableSeaportBase.t.sol b/test/trading/seaport/ImmutableSeaportBase.t.sol index d093c92e..d6a972e6 100644 --- a/test/trading/seaport/ImmutableSeaportBase.t.sol +++ b/test/trading/seaport/ImmutableSeaportBase.t.sol @@ -1,23 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableSeaport} from "../../../contracts/trading/seaport/ImmutableSeaport.sol"; import {ImmutableSignedZone} from "../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol"; -import {SIP7EventsAndErrors} from "../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/interfaces/SIP7EventsAndErrors.sol"; import {ConduitController} from "seaport-core/src/conduit/ConduitController.sol"; import {Conduit} from "seaport-core/src/conduit/Conduit.sol"; -import {Consideration} from "seaport-core/src/lib/Consideration.sol"; -import {OrderParameters, OrderComponents, Order, AdvancedOrder, FulfillmentComponent, FulfillmentComponent, CriteriaResolver} from "seaport-types/src/lib/ConsiderationStructs.sol"; -import {ItemType, OrderType} from "seaport-types/src/lib/ConsiderationEnums.sol"; -import {ReceivedItem, SpentItem} from "seaport-types/src/lib/ConsiderationStructs.sol"; - -import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; - - - - abstract contract ImmutableSeaportBaseTest is Test { diff --git a/test/trading/seaport/ImmutableSeaportOperational.t.sol b/test/trading/seaport/ImmutableSeaportOperational.t.sol index d04d1147..9b42e1ab 100644 --- a/test/trading/seaport/ImmutableSeaportOperational.t.sol +++ b/test/trading/seaport/ImmutableSeaportOperational.t.sol @@ -2,20 +2,11 @@ pragma solidity ^0.8.13; import {ImmutableSeaportBaseTest} from "./ImmutableSeaportBase.t.sol"; - - -import "forge-std/Test.sol"; import {ImmutableSeaportTestHelper} from "./ImmutableSeaportTestHelper.t.sol"; import {ImmutableSeaport} from "../../../contracts/trading/seaport/ImmutableSeaport.sol"; -import {ImmutableSignedZone} from "../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol"; import {SIP7EventsAndErrors} from "../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/interfaces/SIP7EventsAndErrors.sol"; - -import {ConduitController} from "seaport-core/src/conduit/ConduitController.sol"; -import {Conduit} from "seaport-core/src/conduit/Conduit.sol"; -import {Consideration} from "seaport-core/src/lib/Consideration.sol"; -import {OrderParameters, OrderComponents, Order, AdvancedOrder, FulfillmentComponent, FulfillmentComponent, CriteriaResolver} from "seaport-types/src/lib/ConsiderationStructs.sol"; -import {ItemType, OrderType} from "seaport-types/src/lib/ConsiderationEnums.sol"; -import {ConsiderationItem, OfferItem, ReceivedItem, SpentItem} from "seaport-types/src/lib/ConsiderationStructs.sol"; +import {OrderParameters, OrderComponents, AdvancedOrder, CriteriaResolver} from "seaport-types/src/lib/ConsiderationStructs.sol"; +import {OrderType} from "seaport-types/src/lib/ConsiderationEnums.sol"; import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; @@ -224,7 +215,7 @@ contract ImmutableSeaportOperationalTest is ImmutableSeaportBaseTest, ImmutableS } bytes memory signature = _signOrder(sellerPkey, orderHash); - AdvancedOrder memory order = AdvancedOrder(orderParams, 1, 1, signature, extraData); + AdvancedOrder memory order = AdvancedOrder({ parameters: orderParams, numerator: 1, denominator: 1, signature: signature, extraData: extraData }); return order; } } \ No newline at end of file diff --git a/test/trading/seaport/ImmutableSeaportSignedZoneV2Integration.t.sol b/test/trading/seaport/ImmutableSeaportSignedZoneV2Integration.t.sol index 923560d9..a711adc9 100644 --- a/test/trading/seaport/ImmutableSeaportSignedZoneV2Integration.t.sol +++ b/test/trading/seaport/ImmutableSeaportSignedZoneV2Integration.t.sol @@ -1,11 +1,11 @@ // Copyright (c) Immutable Pty Ltd 2018 - 2024 // SPDX-License-Identifier: Apache-2 +// forge-lint: disable-start(erc20-unchecked-transfer) // solhint-disable-next-line compiler-version pragma solidity ^0.8.17; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ItemType, OrderType} from "seaport-types/src/lib/ConsiderationEnums.sol"; @@ -897,5 +897,6 @@ contract ImmutableSeaportSignedZoneV2IntegrationTest is Test, SigningTestHelper assertEq(erc20Token.balanceOf(ECOSYSTEM_FEE_RECEIVER), considerationItems[3].startAmount); } } +// forge-lint: disable-end(erc20-unchecked-transfer) // solhint-enable func-name-mixedcase, private-vars-leading-underscore diff --git a/test/trading/seaport/ImmutableSeaportTestHelper.t.sol b/test/trading/seaport/ImmutableSeaportTestHelper.t.sol index 80766992..e947eac1 100644 --- a/test/trading/seaport/ImmutableSeaportTestHelper.t.sol +++ b/test/trading/seaport/ImmutableSeaportTestHelper.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ItemType} from "seaport-types/src/lib/ConsiderationEnums.sol"; import {ZoneParameters, ConsiderationItem, OfferItem, ReceivedItem, SpentItem} from "seaport-types/src/lib/ConsiderationStructs.sol"; diff --git a/test/trading/seaport/utils/SigningTestHelper.t.sol b/test/trading/seaport/utils/SigningTestHelper.t.sol index 33f56497..21efc7de 100644 --- a/test/trading/seaport/utils/SigningTestHelper.t.sol +++ b/test/trading/seaport/utils/SigningTestHelper.t.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.17; // solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; abstract contract SigningTestHelper is Test { function _sign(uint256 signerPrivateKey, bytes32 signatureDigest) internal pure returns (bytes memory) { diff --git a/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOrderValidation.t.sol b/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOrderValidation.t.sol index 63e34715..70ccb4b8 100644 --- a/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOrderValidation.t.sol +++ b/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOrderValidation.t.sol @@ -1,13 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableSeaportTestHelper} from "../../../ImmutableSeaportTestHelper.t.sol"; import {ImmutableSignedZone} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol"; import {SIP7EventsAndErrors} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/interfaces/SIP7EventsAndErrors.sol"; import {SIP6EventsAndErrors} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/interfaces/SIP6EventsAndErrors.sol"; -import {ZoneParameters, ReceivedItem, SpentItem} from "seaport-types/src/lib/ConsiderationStructs.sol"; -import {ItemType} from "seaport-types/src/lib/ConsiderationEnums.sol"; +import {ZoneParameters, ReceivedItem} from "seaport-types/src/lib/ConsiderationStructs.sol"; contract ImmutableSignedZoneOrderValidationTest is Test, ImmutableSeaportTestHelper { diff --git a/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOwnership.t.sol b/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOwnership.t.sol index 74533aef..16a85164 100644 --- a/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOwnership.t.sol +++ b/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneOwnership.t.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableSignedZone} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol"; -import {SIP7EventsAndErrors} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/interfaces/SIP7EventsAndErrors.sol"; @@ -23,7 +22,7 @@ contract ImmutableSignedZoneOwnershipTest is Test { vm.stopPrank(); } - function testDeployerBecomesOwner() public { + function testDeployerBecomesOwner() public view { assertEq(zone.owner(), owner); } diff --git a/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneSignerManagement.t.sol b/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneSignerManagement.t.sol index ca7861ab..915b9d60 100644 --- a/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneSignerManagement.t.sol +++ b/test/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZoneSignerManagement.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableSignedZone} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/ImmutableSignedZone.sol"; import {SIP7EventsAndErrors} from "../../../../../../contracts/trading/seaport/zones/immutable-signed-zone/v1/interfaces/SIP7EventsAndErrors.sol"; diff --git a/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol b/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol index c601f465..9e3a4db3 100644 --- a/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol +++ b/test/trading/seaport/zones/immutable-signed-zone/v2/ImmutableSignedZoneV2.t.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.17; // solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ItemType} from "seaport-types/src/lib/ConsiderationEnums.sol"; import {ReceivedItem, Schema, SpentItem, ZoneParameters} from "seaport-types/src/lib/ConsiderationStructs.sol"; diff --git a/test/trading/seaport16/ImmutableSeaportBase.t.sol b/test/trading/seaport16/ImmutableSeaportBase.t.sol index d47e394f..f5d1894d 100644 --- a/test/trading/seaport16/ImmutableSeaportBase.t.sol +++ b/test/trading/seaport16/ImmutableSeaportBase.t.sol @@ -2,23 +2,11 @@ // SPDX-License-Identifier: Apache-2 pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ImmutableSeaport} from "../../../contracts/trading/seaport16/ImmutableSeaport.sol"; import {ImmutableSignedZoneV3} from "../../../contracts/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.sol"; -import {SIP7EventsAndErrors} from "../../../contracts/trading/seaport16/zones/immutable-signed-zone/v3/interfaces/SIP7EventsAndErrors.sol"; - import {ConduitController} from "seaport-core-16/src/conduit/ConduitController.sol"; import {Conduit} from "seaport-core-16/src/conduit/Conduit.sol"; -import {Consideration} from "seaport-core-16/src/lib/Consideration.sol"; -import {OrderParameters, OrderComponents, Order, AdvancedOrder, FulfillmentComponent, FulfillmentComponent, CriteriaResolver} from "seaport-types-16/src/lib/ConsiderationStructs.sol"; -import {ItemType, OrderType} from "seaport-types-16/src/lib/ConsiderationEnums.sol"; -import {ReceivedItem, SpentItem} from "seaport-types-16/src/lib/ConsiderationStructs.sol"; - -import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; - - - - abstract contract ImmutableSeaportBaseTest is Test { diff --git a/test/trading/seaport16/ImmutableSeaportOperational.t.sol b/test/trading/seaport16/ImmutableSeaportOperational.t.sol index 6e12d93e..045f24bf 100644 --- a/test/trading/seaport16/ImmutableSeaportOperational.t.sol +++ b/test/trading/seaport16/ImmutableSeaportOperational.t.sol @@ -4,18 +4,11 @@ pragma solidity ^0.8.13; import {ImmutableSeaportBaseTest} from "./ImmutableSeaportBase.t.sol"; -import "forge-std/Test.sol"; import {ImmutableSeaportTestHelper} from "./ImmutableSeaportTestHelper.t.sol"; import {ImmutableSeaport} from "../../../contracts/trading/seaport16/ImmutableSeaport.sol"; import {SIP7EventsAndErrors} from "../../../contracts/trading/seaport16/zones/immutable-signed-zone/v3/interfaces/SIP7EventsAndErrors.sol"; - - -import {ConduitController} from "seaport-core-16/src/conduit/ConduitController.sol"; -import {Conduit} from "seaport-core-16/src/conduit/Conduit.sol"; -import {Consideration} from "seaport-core-16/src/lib/Consideration.sol"; -import {OrderParameters, OrderComponents, Order, AdvancedOrder, FulfillmentComponent, FulfillmentComponent, CriteriaResolver} from "seaport-types-16/src/lib/ConsiderationStructs.sol"; -import {ItemType, OrderType} from "seaport-types-16/src/lib/ConsiderationEnums.sol"; -import {ConsiderationItem, OfferItem, ReceivedItem, SpentItem} from "seaport-types-16/src/lib/ConsiderationStructs.sol"; +import {OrderParameters, OrderComponents, AdvancedOrder, CriteriaResolver} from "seaport-types-16/src/lib/ConsiderationStructs.sol"; +import {OrderType} from "seaport-types-16/src/lib/ConsiderationEnums.sol"; import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol"; @@ -223,7 +216,7 @@ contract ImmutableSeaportOperationalTest is ImmutableSeaportBaseTest, ImmutableS } bytes memory signature = _signOrder(sellerPkey, orderHash); - AdvancedOrder memory order = AdvancedOrder(orderParams, 1, 1, signature, extraData); + AdvancedOrder memory order = AdvancedOrder({ parameters: orderParams, numerator: 1, denominator: 1, signature: signature, extraData: extraData }); return order; } } \ No newline at end of file diff --git a/test/trading/seaport16/ImmutableSeaportSignedZoneV3Integration.t.sol b/test/trading/seaport16/ImmutableSeaportSignedZoneV3Integration.t.sol index d2ab6fc1..9e8e311f 100644 --- a/test/trading/seaport16/ImmutableSeaportSignedZoneV3Integration.t.sol +++ b/test/trading/seaport16/ImmutableSeaportSignedZoneV3Integration.t.sol @@ -1,11 +1,12 @@ // Copyright (c) Immutable Pty Ltd 2018 - 2024 // SPDX-License-Identifier: Apache-2 +// forge-lint: disable-start(erc20-unchecked-transfer) // solhint-disable-next-line compiler-version pragma solidity ^0.8.17; // solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ItemType, OrderType} from "seaport-types-16/src/lib/ConsiderationEnums.sol"; @@ -270,13 +271,14 @@ contract ImmutableSeaportSignedZoneV3IntegrationTest is Test, SigningTestHelper // mints vm.prank(OWNER); - erc20Token.transfer( + bool success = erc20Token.transfer( FULFILLER, ( considerationItems[0].startAmount + considerationItems[1].startAmount + considerationItems[2].startAmount + considerationItems[3].startAmount ) ); + require(success, "Unexpectedly, ERC20 transfer failed"); vm.prank(OWNER); erc721Token.safeMint(OFFERER, offerItems[0].identifierOrCriteria); @@ -450,13 +452,14 @@ contract ImmutableSeaportSignedZoneV3IntegrationTest is Test, SigningTestHelper // mints vm.prank(OWNER); - erc20Token.transfer( + bool success = erc20Token.transfer( FULFILLER, ( considerationItems[0].startAmount + considerationItems[1].startAmount + considerationItems[2].startAmount + considerationItems[3].startAmount ) / 100 ); + require(success, "Unexpectedly, ERC20 transfer failed"); vm.prank(OWNER); erc1155Token.safeMint(OFFERER, offerItems[0].identifierOrCriteria, offerItems[0].startAmount, new bytes(0)); @@ -634,13 +637,14 @@ contract ImmutableSeaportSignedZoneV3IntegrationTest is Test, SigningTestHelper // mints vm.prank(OWNER); - erc20Token.transfer( + bool success = erc20Token.transfer( FULFILLER, ( considerationItems[0].startAmount + considerationItems[1].startAmount + considerationItems[2].startAmount + considerationItems[3].startAmount ) * 2 / 100 ); + require(success, "Unexpectedly, ERC20 transfer failed"); vm.prank(OWNER); erc1155Token.safeMint(OFFERER, offerItems[0].identifierOrCriteria, offerItems[0].startAmount, new bytes(0)); @@ -846,22 +850,28 @@ contract ImmutableSeaportSignedZoneV3IntegrationTest is Test, SigningTestHelper }); // mints - vm.prank(OWNER); - erc20Token.transfer( - FULFILLER, - ( - considerationItems[0].startAmount + considerationItems[1].startAmount - + considerationItems[2].startAmount + considerationItems[3].startAmount - ) / 2 - ); - vm.prank(OWNER); - erc20Token.transfer( - FULFILLER_TWO, - ( - considerationItems[0].startAmount + considerationItems[1].startAmount - + considerationItems[2].startAmount + considerationItems[3].startAmount - ) - ); + { + vm.prank(OWNER); + erc20Token.transfer( + FULFILLER, + ( + considerationItems[0].startAmount + considerationItems[1].startAmount + + considerationItems[2].startAmount + considerationItems[3].startAmount + ) / 2 + ); + //require(success, "Unexpectedly, ERC20 transfer failed"); + } + { + vm.prank(OWNER); + bool success = erc20Token.transfer( + FULFILLER_TWO, + ( + considerationItems[0].startAmount + considerationItems[1].startAmount + + considerationItems[2].startAmount + considerationItems[3].startAmount + ) + ); + require(success, "Unexpectedly, ERC20 transfer failed"); + } vm.prank(OWNER); erc1155Token.safeMint(OFFERER, offerItems[0].identifierOrCriteria, offerItems[0].startAmount, new bytes(0)); @@ -901,3 +911,4 @@ contract ImmutableSeaportSignedZoneV3IntegrationTest is Test, SigningTestHelper } // solhint-enable func-name-mixedcase, private-vars-leading-underscore +// forge-lint: disable-end(erc20-unchecked-transfer) diff --git a/test/trading/seaport16/ImmutableSeaportTestHelper.t.sol b/test/trading/seaport16/ImmutableSeaportTestHelper.t.sol index 0a451f6c..8f3298eb 100644 --- a/test/trading/seaport16/ImmutableSeaportTestHelper.t.sol +++ b/test/trading/seaport16/ImmutableSeaportTestHelper.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {SigningTestHelper} from "./utils/SigningTestHelper.t.sol"; import {ItemType} from "seaport-types-16/src/lib/ConsiderationEnums.sol"; diff --git a/test/trading/seaport16/utils/SigningTestHelper.t.sol b/test/trading/seaport16/utils/SigningTestHelper.t.sol index 33f56497..21efc7de 100644 --- a/test/trading/seaport16/utils/SigningTestHelper.t.sol +++ b/test/trading/seaport16/utils/SigningTestHelper.t.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.17; // solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; abstract contract SigningTestHelper is Test { function _sign(uint256 signerPrivateKey, bytes32 signatureDigest) internal pure returns (bytes memory) { diff --git a/test/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.t.sol b/test/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.t.sol index 4783a389..a9a52a7c 100644 --- a/test/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.t.sol +++ b/test/trading/seaport16/zones/immutable-signed-zone/v3/ImmutableSignedZoneV3.t.sol @@ -1,11 +1,10 @@ // Copyright (c) Immutable Pty Ltd 2018 - 2025 // SPDX-License-Identifier: Apache-2 -// solhint-disable-next-line compiler-version +// @solhint-disable-next-line compiler-version pragma solidity ^0.8.17; -// solhint-disable-next-line no-global-import -import "forge-std/Test.sol"; +import {Test} from "forge-std/Test.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {ItemType} from "seaport-types-16/src/lib/ConsiderationEnums.sol"; import {ReceivedItem, Schema, SpentItem, ZoneParameters} from "seaport-types-16/src/lib/ConsiderationStructs.sol"; @@ -23,7 +22,7 @@ import {SigningTestHelper} from "../../../../seaport/utils/SigningTestHelper.t.s import {ImmutableSignedZoneV3Harness} from "./ImmutableSignedZoneV3Harness.t.sol"; import {MockTransferValidator, MockTransferValidatorRevert} from "../../../utils/MockTransferValidator.t.sol"; -// solhint-disable func-name-mixedcase +// @solhint-disable func-name-mixedcase contract ImmutableSignedZoneV3Test is Test, @@ -33,7 +32,7 @@ contract ImmutableSignedZoneV3Test is SIP6EventsAndErrors, SIP7EventsAndErrors { - // solhint-disable private-vars-leading-underscore + // @solhint-disable private-vars-leading-underscore uint64 private constant DEFAULT_EXPIRATION = 100; address private immutable OWNER = makeAddr("owner"); address private immutable FULFILLER = makeAddr("fulfiller"); @@ -2279,4 +2278,4 @@ contract ImmutableSignedZoneV3Test is } } -// solhint-enable func-name-mixedcase +// @solhint-enable func-name-mixedcase diff --git a/test/utils/DeployAllowlistProxy.sol b/test/utils/DeployAllowlistProxy.sol index c3f1d723..54292d4a 100644 --- a/test/utils/DeployAllowlistProxy.sol +++ b/test/utils/DeployAllowlistProxy.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OperatorAllowlistUpgradeable} from "../../contracts/allowlist/OperatorAllowlistUpgradeable.sol"; /// Deploys the OperatorAllowlistUpgradeable contract behind an ERC1967 Proxy and returns the address of the proxy diff --git a/test/utils/DeploySCW.sol b/test/utils/DeploySCW.sol index e9ce75b5..f974d106 100644 --- a/test/utils/DeploySCW.sol +++ b/test/utils/DeploySCW.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: Apache 2.0 pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; import {MockWallet} from "../../contracts/mocks/MockWallet.sol"; import {MockWalletFactory} from "../../contracts/mocks/MockWalletFactory.sol"; diff --git a/test/utils/Sign.sol b/test/utils/Sign.sol index 27eef81c..44d80f6c 100644 --- a/test/utils/Sign.sol +++ b/test/utils/Sign.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.19 <0.8.29; -import "forge-std/Test.sol"; contract Sign { bytes32 private _DOMAIN_SEPARATOR;