diff --git a/.forge-snapshots/ProposeWithSig.snap b/.forge-snapshots/ProposeWithSig.snap index ce2def12..d08ed509 100644 --- a/.forge-snapshots/ProposeWithSig.snap +++ b/.forge-snapshots/ProposeWithSig.snap @@ -1 +1 @@ -272375 \ No newline at end of file +272388 \ No newline at end of file diff --git a/.forge-snapshots/ProposeWithTx.snap b/.forge-snapshots/ProposeWithTx.snap index a7e3e764..aedd8ca2 100644 --- a/.forge-snapshots/ProposeWithTx.snap +++ b/.forge-snapshots/ProposeWithTx.snap @@ -1 +1 @@ -262066 \ No newline at end of file +262042 \ No newline at end of file diff --git a/src/Space.sol b/src/Space.sol index 5524d495..c8faced0 100644 --- a/src/Space.sol +++ b/src/Space.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; -import "@openzeppelin/contracts/access/Ownable.sol"; -import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; +import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol"; -import "src/interfaces/ISpace.sol"; -import "src/types.sol"; -import "src/interfaces/IVotingStrategy.sol"; -import "src/interfaces/IExecutionStrategy.sol"; +import { ISpace } from "src/interfaces/ISpace.sol"; +import { Choice, FinalizationStatus, IndexedStrategy, Proposal, ProposalStatus, Strategy, Vote } from "src/types.sol"; +import { IVotingStrategy } from "src/interfaces/IVotingStrategy.sol"; +import { IExecutionStrategy } from "src/interfaces/IExecutionStrategy.sol"; /** * @author SnapshotLabs @@ -211,7 +211,7 @@ contract Space is ISpace, Ownable, ReentrancyGuard { * @dev it has already been set. Time complexity is O(n). * @param strats Array to check for duplicates. */ - function _assertNoDuplicateIndices(IndexedStrategy[] memory strats) internal { + function _assertNoDuplicateIndices(IndexedStrategy[] memory strats) internal pure { if (strats.length < 2) { return; } diff --git a/src/SpaceFactory.sol b/src/SpaceFactory.sol index 22b67b87..fc510356 100644 --- a/src/SpaceFactory.sol +++ b/src/SpaceFactory.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.18; -import "./Space.sol"; -import "./interfaces/ISpaceFactory.sol"; -import "./types.sol"; +import { Space } from "./Space.sol"; +import { ISpaceFactory } from "./interfaces/ISpaceFactory.sol"; +import { IndexedStrategy, Strategy } from "./types.sol"; /** * @title Space Factory diff --git a/src/authenticators/Authenticator.sol b/src/authenticators/Authenticator.sol index 8e9b4d7e..051fa8f0 100644 --- a/src/authenticators/Authenticator.sol +++ b/src/authenticators/Authenticator.sol @@ -5,14 +5,16 @@ pragma solidity ^0.8.18; abstract contract Authenticator { bytes4 internal constant PROPOSE_SELECTOR = bytes4(keccak256("propose(address,string,(uint8,bytes),(uint8,bytes)[])")); - bytes4 constant VOTE_SELECTOR = bytes4(keccak256("vote(address,uint256,uint8,(uint8,bytes)[],string)")); - bytes4 constant UPDATE_PROPOSAL_SELECTOR = + bytes4 internal constant VOTE_SELECTOR = bytes4(keccak256("vote(address,uint256,uint8,(uint8,bytes)[],string)")); + bytes4 internal constant UPDATE_PROPOSAL_SELECTOR = bytes4(keccak256("updateProposal(address,uint256,(uint8,bytes),string)")); function _call(address target, bytes4 functionSelector, bytes memory data) internal { + // solhint-disable-next-line avoid-low-level-calls (bool success, ) = target.call(abi.encodePacked(functionSelector, data)); if (!success) { // If the call failed, we revert with the propagated error message. + // solhint-disable-next-line no-inline-assembly assembly { let returnDataSize := returndatasize() returndatacopy(0, 0, returnDataSize) diff --git a/src/authenticators/EthSigAuthenticator.sol b/src/authenticators/EthSigAuthenticator.sol index d1e9a8d2..45b2ac13 100644 --- a/src/authenticators/EthSigAuthenticator.sol +++ b/src/authenticators/EthSigAuthenticator.sol @@ -2,12 +2,13 @@ pragma solidity ^0.8.18; -import "./Authenticator.sol"; -import "../utils/SignatureVerifier.sol"; +import { Authenticator } from "./Authenticator.sol"; +import { SignatureVerifier } from "../utils/SignatureVerifier.sol"; contract EthSigAuthenticator is Authenticator, SignatureVerifier { error InvalidFunctionSelector(); + // solhint-disable-next-line no-empty-blocks constructor(string memory name, string memory version) SignatureVerifier(name, version) {} function authenticate( diff --git a/src/authenticators/EthTxAuthenticator.sol b/src/authenticators/EthTxAuthenticator.sol index e4b8f9b5..4429e5dc 100644 --- a/src/authenticators/EthTxAuthenticator.sol +++ b/src/authenticators/EthTxAuthenticator.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.18; -import "./Authenticator.sol"; -import "../types.sol"; +import { Authenticator } from "./Authenticator.sol"; +import { Choice, IndexedStrategy, Strategy } from "../types.sol"; /** * @author SnapshotLabs diff --git a/src/authenticators/VanillaAuthenticator.sol b/src/authenticators/VanillaAuthenticator.sol index 3c6469b4..5824e5d1 100644 --- a/src/authenticators/VanillaAuthenticator.sol +++ b/src/authenticators/VanillaAuthenticator.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "./Authenticator.sol"; +import { Authenticator } from "./Authenticator.sol"; contract VanillaAuthenticator is Authenticator { function authenticate(address target, bytes4 functionSelector, bytes memory data) external { diff --git a/src/execution-strategies/AvatarExecutionStrategy.sol b/src/execution-strategies/AvatarExecutionStrategy.sol index 483d53da..f7b0a562 100644 --- a/src/execution-strategies/AvatarExecutionStrategy.sol +++ b/src/execution-strategies/AvatarExecutionStrategy.sol @@ -2,9 +2,10 @@ pragma solidity ^0.8.18; -import "@zodiac/interfaces/IAvatar.sol"; -import "./SimpleQuorumExecutionStrategy.sol"; -import "../utils/SpaceManager.sol"; +import { IAvatar } from "@zodiac/interfaces/IAvatar.sol"; +import { SimpleQuorumExecutionStrategy } from "./SimpleQuorumExecutionStrategy.sol"; +import { SpaceManager } from "../utils/SpaceManager.sol"; +import { MetaTransaction, Proposal, ProposalStatus } from "../types.sol"; /// @title Avatar Execution Strategy - An Execution strategy that executes transactions on an Avatar contract /// @dev An Avatar contract is any contract that implements the IAvatar interface, eg a Gnosis Safe. diff --git a/src/execution-strategies/SimpleQuorumExecutionStrategy.sol b/src/execution-strategies/SimpleQuorumExecutionStrategy.sol index 65c28185..00028f8d 100644 --- a/src/execution-strategies/SimpleQuorumExecutionStrategy.sol +++ b/src/execution-strategies/SimpleQuorumExecutionStrategy.sol @@ -2,7 +2,8 @@ pragma solidity ^0.8.18; -import "../interfaces/IExecutionStrategy.sol"; +import { IExecutionStrategy } from "../interfaces/IExecutionStrategy.sol"; +import { FinalizationStatus, Proposal, ProposalStatus } from "../types.sol"; abstract contract SimpleQuorumExecutionStrategy is IExecutionStrategy { function execute( diff --git a/src/execution-strategies/VanillaExecutionStrategy.sol b/src/execution-strategies/VanillaExecutionStrategy.sol index a7c892e3..588de69b 100644 --- a/src/execution-strategies/VanillaExecutionStrategy.sol +++ b/src/execution-strategies/VanillaExecutionStrategy.sol @@ -2,10 +2,11 @@ pragma solidity ^0.8.18; -import "./SimpleQuorumExecutionStrategy.sol"; +import { SimpleQuorumExecutionStrategy } from "./SimpleQuorumExecutionStrategy.sol"; +import { Proposal, ProposalStatus } from "../types.sol"; contract VanillaExecutionStrategy is SimpleQuorumExecutionStrategy { - uint256 numExecuted; + uint256 internal numExecuted; function execute( Proposal memory proposal, diff --git a/src/interfaces/IExecutionStrategy.sol b/src/interfaces/IExecutionStrategy.sol index 5946c287..79e22916 100644 --- a/src/interfaces/IExecutionStrategy.sol +++ b/src/interfaces/IExecutionStrategy.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.18; -import "../types.sol"; -import "./execution-strategies/IExecutionStrategyErrors.sol"; +import { IndexedStrategy, Proposal, ProposalStatus } from "../types.sol"; +import { IExecutionStrategyErrors } from "./execution-strategies/IExecutionStrategyErrors.sol"; interface IExecutionStrategy is IExecutionStrategyErrors { function execute( diff --git a/src/interfaces/ISpace.sol b/src/interfaces/ISpace.sol index 221aedfa..63377ba3 100644 --- a/src/interfaces/ISpace.sol +++ b/src/interfaces/ISpace.sol @@ -2,10 +2,13 @@ pragma solidity ^0.8.18; -import "./space/ISpaceState.sol"; -import "./space/ISpaceActions.sol"; -import "./space/ISpaceOwnerActions.sol"; -import "./space/ISpaceEvents.sol"; -import "./space/ISpaceErrors.sol"; +import { ISpaceState } from "./space/ISpaceState.sol"; +import { ISpaceActions } from "./space/ISpaceActions.sol"; +import { ISpaceOwnerActions } from "./space/ISpaceOwnerActions.sol"; +import { ISpaceEvents } from "./space/ISpaceEvents.sol"; +import { ISpaceErrors } from "./space/ISpaceErrors.sol"; -interface ISpace is ISpaceState, ISpaceActions, ISpaceOwnerActions, ISpaceEvents, ISpaceErrors {} +// solhint-disable-next-line no-empty-blocks +interface ISpace is ISpaceState, ISpaceActions, ISpaceOwnerActions, ISpaceEvents, ISpaceErrors { + +} diff --git a/src/interfaces/ISpaceFactory.sol b/src/interfaces/ISpaceFactory.sol index d13bc483..f1591b41 100644 --- a/src/interfaces/ISpaceFactory.sol +++ b/src/interfaces/ISpaceFactory.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.18; -import "./space-factory/ISpaceFactoryErrors.sol"; -import "./space-factory/ISpaceFactoryEvents.sol"; +import { ISpaceFactoryErrors } from "./space-factory/ISpaceFactoryErrors.sol"; +import { ISpaceFactoryEvents } from "./space-factory/ISpaceFactoryEvents.sol"; -import "../types.sol"; +import { Strategy } from "../types.sol"; interface ISpaceFactory is ISpaceFactoryErrors, ISpaceFactoryEvents { function createSpace( diff --git a/src/interfaces/execution-strategies/IExecutionStrategyErrors.sol b/src/interfaces/execution-strategies/IExecutionStrategyErrors.sol index ded2936e..af4720a3 100644 --- a/src/interfaces/execution-strategies/IExecutionStrategyErrors.sol +++ b/src/interfaces/execution-strategies/IExecutionStrategyErrors.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "../../types.sol"; +import { ProposalStatus } from "../../types.sol"; interface IExecutionStrategyErrors { /// @notice Thrown when the current status of a proposal does not allow the desired action. diff --git a/src/interfaces/space-factory/ISpaceFactoryEvents.sol b/src/interfaces/space-factory/ISpaceFactoryEvents.sol index e47beccb..b667f087 100644 --- a/src/interfaces/space-factory/ISpaceFactoryEvents.sol +++ b/src/interfaces/space-factory/ISpaceFactoryEvents.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "../../types.sol"; +import { Strategy } from "../../types.sol"; interface ISpaceFactoryEvents { event SpaceCreated( diff --git a/src/interfaces/space/ISpaceActions.sol b/src/interfaces/space/ISpaceActions.sol index 4523462d..55dbaaa0 100644 --- a/src/interfaces/space/ISpaceActions.sol +++ b/src/interfaces/space/ISpaceActions.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "src/types.sol"; +import { Choice, IndexedStrategy } from "src/types.sol"; interface ISpaceActions { function propose( diff --git a/src/interfaces/space/ISpaceEvents.sol b/src/interfaces/space/ISpaceEvents.sol index 33abf2ea..d58d44fe 100644 --- a/src/interfaces/space/ISpaceEvents.sol +++ b/src/interfaces/space/ISpaceEvents.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; -import "src/types.sol"; +import { IndexedStrategy, Proposal, Strategy, Vote } from "src/types.sol"; interface ISpaceEvents { event ProposalCreated(uint256 nextProposalId, address author, Proposal proposal, string metadataUri, bytes payload); diff --git a/src/interfaces/space/ISpaceOwnerActions.sol b/src/interfaces/space/ISpaceOwnerActions.sol index f20502ba..35004454 100644 --- a/src/interfaces/space/ISpaceOwnerActions.sol +++ b/src/interfaces/space/ISpaceOwnerActions.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "../../types.sol"; +import { Strategy } from "../../types.sol"; interface ISpaceOwnerActions { function cancel(uint256 proposalId) external; diff --git a/src/interfaces/space/ISpaceState.sol b/src/interfaces/space/ISpaceState.sol index 70ee51fb..c7a7528d 100644 --- a/src/interfaces/space/ISpaceState.sol +++ b/src/interfaces/space/ISpaceState.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "src/types.sol"; +import { Proposal, ProposalStatus } from "src/types.sol"; interface ISpaceState { function getController() external view returns (address); diff --git a/src/types.sol b/src/types.sol index 7004db52..cee1280c 100644 --- a/src/types.sol +++ b/src/types.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "@gnosis.pm/safe-contracts/contracts/common/Enum.sol"; +import { Enum } from "@gnosis.pm/safe-contracts/contracts/common/Enum.sol"; struct Proposal { // notice: `uint32::max` corresponds to year ~2106. diff --git a/src/utils/SXHash.sol b/src/utils/SXHash.sol index f0db2d5e..f4e4feab 100644 --- a/src/utils/SXHash.sol +++ b/src/utils/SXHash.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "src/types.sol"; +import { IndexedStrategy, Strategy } from "src/types.sol"; /// @title SX Types Hashing Library /// @notice This library contains functions for hashing SX types for use in eip712 signatures. diff --git a/src/utils/SignatureVerifier.sol b/src/utils/SignatureVerifier.sol index 5580c930..8b7bef80 100644 --- a/src/utils/SignatureVerifier.sol +++ b/src/utils/SignatureVerifier.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.18; -import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; -import "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; -import "src/types.sol"; +import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; +import { EIP712 } from "@openzeppelin/contracts/utils/cryptography/EIP712.sol"; +import { Choice, IndexedStrategy } from "src/types.sol"; import { SXHash } from "src/utils/SXHash.sol"; abstract contract SignatureVerifier is EIP712 { @@ -35,6 +35,7 @@ abstract contract SignatureVerifier is EIP712 { mapping(address author => mapping(uint256 salt => bool used)) private usedSalts; + // solhint-disable-next-line no-empty-blocks constructor(string memory name, string memory version) EIP712(name, version) {} function _verifyProposeSig(uint8 v, bytes32 r, bytes32 s, uint256 salt, address space, bytes memory data) internal { @@ -103,7 +104,7 @@ abstract contract SignatureVerifier is EIP712 { if (recoveredAddress != voter) revert InvalidSignature(); } - function _verifyUpdateProposalSig(uint8 v, bytes32 r, bytes32 s, address space, bytes memory data) internal { + function _verifyUpdateProposalSig(uint8 v, bytes32 r, bytes32 s, address space, bytes memory data) internal view { (address author, uint256 proposalId, IndexedStrategy memory executionStrategy, string memory metadataUri) = abi .decode(data, (address, uint256, IndexedStrategy, string)); diff --git a/src/utils/SpaceManager.sol b/src/utils/SpaceManager.sol index 21a342c5..c441bb7e 100644 --- a/src/utils/SpaceManager.sol +++ b/src/utils/SpaceManager.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; /// @title Space Manager - A contract that manages spaces that are able to execute transactions via this contract /// @author Snapshot Labs @@ -19,6 +19,7 @@ contract SpaceManager is OwnableUpgradeable { /// @notice Initialize the contract with a list of spaces. Called only once. /// @param _spaces List of spaces. + // solhint-disable-next-line func-name-mixedcase function __SpaceManager_init(address[] memory _spaces) internal initializer { for (uint256 i = 0; i < _spaces.length; i++) { spaces[_spaces[i]] = true; diff --git a/src/voting-strategies/CompVotingStrategy.sol b/src/voting-strategies/CompVotingStrategy.sol index d2b6e277..2e808ad9 100644 --- a/src/voting-strategies/CompVotingStrategy.sol +++ b/src/voting-strategies/CompVotingStrategy.sol @@ -2,9 +2,9 @@ pragma solidity ^0.8.18; -import "../interfaces/IVotingStrategy.sol"; -import "../interfaces/IComp.sol"; -import "../utils/TimestampResolver.sol"; +import { IVotingStrategy } from "../interfaces/IVotingStrategy.sol"; +import { IComp } from "../interfaces/IComp.sol"; +import { TimestampResolver } from "../utils/TimestampResolver.sol"; contract CompVotingStrategy is IVotingStrategy, TimestampResolver { error InvalidByteArray(); @@ -15,7 +15,7 @@ contract CompVotingStrategy is IVotingStrategy, TimestampResolver { bytes calldata params, bytes calldata /* userParams */ ) external override returns (uint256) { - address tokenAddress = BytesToAddress(params, 0); + address tokenAddress = bytesToAddress(params, 0); uint256 blockNumber = resolveSnapshotTimestamp(timestamp); return uint256(IComp(tokenAddress).getPriorVotes(voterAddress, blockNumber)); } @@ -25,10 +25,11 @@ contract CompVotingStrategy is IVotingStrategy, TimestampResolver { /// @param _start The index to start extracting the address from /// @dev Function from the library, with the require switched for a revert statement: /// https://github.com/GNSPS/solidity-bytes-utils/blob/master/contracts/BytesLib.sol - function BytesToAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { + function bytesToAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { if (_bytes.length < _start + 20) revert InvalidByteArray(); address tempAddress; + // solhint-disable-next-line no-inline-assembly assembly { tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) } diff --git a/src/voting-strategies/VanillaVotingStrategy.sol b/src/voting-strategies/VanillaVotingStrategy.sol index 60e53057..8d631117 100644 --- a/src/voting-strategies/VanillaVotingStrategy.sol +++ b/src/voting-strategies/VanillaVotingStrategy.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "../interfaces/IVotingStrategy.sol"; +import { IVotingStrategy } from "../interfaces/IVotingStrategy.sol"; contract VanillaVotingStrategy is IVotingStrategy { function getVotingPower( diff --git a/src/voting-strategies/WhitelistStrategy.sol b/src/voting-strategies/WhitelistStrategy.sol index 0a72cb94..37b8d147 100644 --- a/src/voting-strategies/WhitelistStrategy.sol +++ b/src/voting-strategies/WhitelistStrategy.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "../interfaces/IVotingStrategy.sol"; +import { IVotingStrategy } from "../interfaces/IVotingStrategy.sol"; contract WhitelistStrategy is IVotingStrategy { struct Member { @@ -16,7 +16,7 @@ contract WhitelistStrategy is IVotingStrategy { * @param params The list of members. Needs to be sorted in ascending `addy` order * @return uint256 The voting power of `voterAddress` if it exists: else 0 */ - function _getVotingPower(address voterAddress, bytes calldata params) internal returns (uint256) { + function _getVotingPower(address voterAddress, bytes calldata params) internal pure returns (uint256) { Member[] memory members = abi.decode(params, (Member[])); uint256 high = members.length - 1; @@ -48,7 +48,7 @@ contract WhitelistStrategy is IVotingStrategy { address voterAddress, bytes calldata params, // Need to be sorted by ascending `addy`s bytes calldata /* userParams */ - ) external override returns (uint256) { + ) external pure override returns (uint256) { return _getVotingPower(voterAddress, params); } } diff --git a/test/AvatarExecutionStrategy.t.sol b/test/AvatarExecutionStrategy.t.sol index 7fe8d182..11a90670 100644 --- a/test/AvatarExecutionStrategy.t.sol +++ b/test/AvatarExecutionStrategy.t.sol @@ -2,10 +2,10 @@ pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; -import "./mocks/Avatar.sol"; -import "../src/execution-strategies/AvatarExecutionStrategy.sol"; -import "../src/types.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { Avatar } from "./mocks/Avatar.sol"; +import { AvatarExecutionStrategy } from "../src/execution-strategies/AvatarExecutionStrategy.sol"; +import { Choice, Enum, IndexedStrategy, MetaTransaction, ProposalStatus, Strategy } from "../src/types.sol"; contract AvatarExecutionStrategyTest is SpaceTest { error TransactionsFailed(); @@ -19,7 +19,7 @@ contract AvatarExecutionStrategyTest is SpaceTest { Avatar public avatar; AvatarExecutionStrategy public avatarExecutionStrategy; - address recipient = address(0xc0ffee); + address private recipient = address(0xc0ffee); function setUp() public override { super.setUp(); diff --git a/test/CompVotingStrategy.t.sol b/test/CompVotingStrategy.t.sol index b2878859..619164b1 100644 --- a/test/CompVotingStrategy.t.sol +++ b/test/CompVotingStrategy.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; -import "forge-std/Test.sol"; -import "../src/voting-strategies/CompVotingStrategy.sol"; -import "./mocks/CompToken.sol"; +import { Test } from "forge-std/Test.sol"; +import { CompVotingStrategy } from "../src/voting-strategies/CompVotingStrategy.sol"; +import { CompToken } from "./mocks/CompToken.sol"; contract CompVotingStrategyTest is Test { error InvalidByteArray(); diff --git a/test/EthSigAuthenticator.t.sol b/test/EthSigAuthenticator.t.sol index 46f0c5f8..5d040d34 100644 --- a/test/EthSigAuthenticator.t.sol +++ b/test/EthSigAuthenticator.t.sol @@ -2,30 +2,32 @@ pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; -import "./utils/Authenticator.t.sol"; -import "./utils/SigUtils.sol"; -import "../src/authenticators/EthSigAuthenticator.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { AuthenticatorTest } from "./utils/Authenticator.t.sol"; +import { SigUtils } from "./utils/SigUtils.sol"; +import { EthSigAuthenticator } from "../src/authenticators/EthSigAuthenticator.sol"; +import { Choice, IndexedStrategy } from "../src/types.sol"; contract EthSigAuthenticatorTest is SpaceTest, SigUtils { error InvalidSignature(); error InvalidFunctionSelector(); error SaltAlreadyUsed(); - string private constant name = "snapshot-x"; - string private constant version = "1"; - string newMetadataUri = "Test456"; - IndexedStrategy newStrategy = IndexedStrategy(0, new bytes(0)); + string private constant NAME = "snapshot-x"; + string private constant VERSION = "1"; + string private newMetadataUri = "Test456"; + IndexedStrategy private newStrategy = IndexedStrategy(0, new bytes(0)); EthSigAuthenticator public ethSigAuth; - constructor() SigUtils(name, version) {} + // solhint-disable-next-line no-empty-blocks + constructor() SigUtils(NAME, VERSION) {} function setUp() public virtual override { super.setUp(); // Adding the eth sig authenticator to the space - ethSigAuth = new EthSigAuthenticator(name, version); + ethSigAuth = new EthSigAuthenticator(NAME, VERSION); address[] memory newAuths = new address[](1); newAuths[0] = address(ethSigAuth); space.addAuthenticators(newAuths); @@ -42,7 +44,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, salt ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); snapStart("ProposeWithSig"); ethSigAuth.authenticate( @@ -70,7 +72,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { ); // Sign with a key that does not correspond to the proposal author's address - (uint8 v, bytes32 r, bytes32 s) = vm.sign(unauthorizedKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(UNAUTHORIZED_KEY, digest); vm.expectRevert(InvalidSignature.selector); ethSigAuth.authenticate( @@ -96,7 +98,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, salt ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); vm.expectRevert(InvalidSignature.selector); ethSigAuth.authenticate( @@ -121,7 +123,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, salt ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); ethSigAuth.authenticate( v, r, @@ -155,7 +157,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, salt ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); vm.expectRevert(InvalidFunctionSelector.selector); ethSigAuth.authenticate( @@ -182,7 +184,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, voteMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(voterKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(VOTER_KEY, digest); snapStart("VoteWithSig"); ethSigAuth.authenticate( @@ -210,7 +212,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, voteMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(unauthorizedKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(UNAUTHORIZED_KEY, digest); vm.expectRevert(InvalidSignature.selector); ethSigAuth.authenticate( @@ -238,7 +240,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, voteMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(voterKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(VOTER_KEY, digest); vm.expectRevert(InvalidSignature.selector); ethSigAuth.authenticate( @@ -265,7 +267,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, voteMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(voterKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(VOTER_KEY, digest); ethSigAuth.authenticate( v, @@ -302,7 +304,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { userVotingStrategies, voteMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(voterKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(VOTER_KEY, digest); vm.expectRevert(InvalidFunctionSelector.selector); ethSigAuth.authenticate( @@ -328,7 +330,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { newStrategy, newMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); // vm.expectEmit(true, true, true, true); // emit ProposalUpdated(proposalId, newStrategy, newMetadataUri); @@ -355,7 +357,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { newStrategy, newMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); vm.expectRevert(InvalidSignature.selector); ethSigAuth.authenticate( @@ -381,7 +383,7 @@ contract EthSigAuthenticatorTest is SpaceTest, SigUtils { newStrategy, newMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); vm.expectRevert(InvalidFunctionSelector.selector); ethSigAuth.authenticate( diff --git a/test/EthTxAuthenticator.t.sol b/test/EthTxAuthenticator.t.sol index 77402f3e..2718742e 100644 --- a/test/EthTxAuthenticator.t.sol +++ b/test/EthTxAuthenticator.t.sol @@ -2,18 +2,18 @@ pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; -import "./utils/Authenticator.t.sol"; -import "../src/authenticators/EthTxAuthenticator.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { AuthenticatorTest } from "./utils/Authenticator.t.sol"; +import { EthTxAuthenticator } from "../src/authenticators/EthTxAuthenticator.sol"; +import { Choice, IndexedStrategy } from "../src/types.sol"; contract EthTxAuthenticatorTest is SpaceTest { - EthTxAuthenticator ethTxAuth; - error InvalidFunctionSelector(); error InvalidMessageSender(); - string newMetadataUri = "Test42"; - IndexedStrategy newStrategy = IndexedStrategy(0, new bytes(0)); + EthTxAuthenticator internal ethTxAuth; + string internal newMetadataUri = "Test42"; + IndexedStrategy internal newStrategy = IndexedStrategy(0, new bytes(0)); function setUp() public virtual override { super.setUp(); diff --git a/test/Execute.t.sol b/test/Execute.t.sol index 5f679977..70b4e494 100644 --- a/test/Execute.t.sol +++ b/test/Execute.t.sol @@ -2,8 +2,9 @@ pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; -import "../src/types.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { Choice, IndexedStrategy, ProposalStatus, Strategy } from "../src/types.sol"; +import { VanillaExecutionStrategy } from "../src/execution-strategies/VanillaExecutionStrategy.sol"; contract ExecuteTest is SpaceTest { function testExecute() public { diff --git a/test/GasSnapshots.t.sol b/test/GasSnapshots.t.sol index 68d18d5f..836e5ca5 100644 --- a/test/GasSnapshots.t.sol +++ b/test/GasSnapshots.t.sol @@ -1,12 +1,13 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; -import "forge-std/Test.sol"; -import "../src/voting-strategies/CompVotingStrategy.sol"; -import "./mocks/CompToken.sol"; -import "./utils/Space.t.sol"; -import "./utils/SigUtils.sol"; -import "../src/authenticators/EthSigAuthenticator.sol"; +import { Test } from "forge-std/Test.sol"; +import { CompVotingStrategy } from "../src/voting-strategies/CompVotingStrategy.sol"; +import { CompToken } from "./mocks/CompToken.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { SigUtils } from "./utils/SigUtils.sol"; +import { EthSigAuthenticator } from "../src/authenticators/EthSigAuthenticator.sol"; +import { Choice, IndexedStrategy, Strategy } from "../src/types.sol"; contract GasSnapshotsTest is SpaceTest, SigUtils { CompVotingStrategy public compVotingStrategy; @@ -14,12 +15,13 @@ contract GasSnapshotsTest is SpaceTest, SigUtils { EthSigAuthenticator public ethSigAuth; - string private constant name = "snapshot-x"; - string private constant version = "1"; + string private constant NAME = "snapshot-x"; + string private constant VERSION = "1"; address public user = address(this); - constructor() SigUtils(name, version) {} + // solhint-disable-next-line no-empty-blocks + constructor() SigUtils(NAME, VERSION) {} function setUp() public virtual override { super.setUp(); @@ -39,7 +41,7 @@ contract GasSnapshotsTest is SpaceTest, SigUtils { compToken.delegate(user); // Adding the eth sig authenticator to the space - ethSigAuth = new EthSigAuthenticator(name, version); + ethSigAuth = new EthSigAuthenticator(NAME, VERSION); address[] memory newAuths = new address[](1); newAuths[0] = address(ethSigAuth); space.addAuthenticators(newAuths); @@ -69,7 +71,7 @@ contract GasSnapshotsTest is SpaceTest, SigUtils { userVotingStrategies, salt ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(authorKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(AUTHOR_KEY, digest); snapStart("ProposeSigComp"); ethSigAuth.authenticate( @@ -96,7 +98,7 @@ contract GasSnapshotsTest is SpaceTest, SigUtils { userVotingStrategies, voteMetadataUri ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(voterKey, digest); + (uint8 v, bytes32 r, bytes32 s) = vm.sign(VOTER_KEY, digest); snapStart("VoteSigComp"); ethSigAuth.authenticate( diff --git a/test/Propose.t.sol b/test/Propose.t.sol index 44d9bbc0..b55e05c1 100644 --- a/test/Propose.t.sol +++ b/test/Propose.t.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { FinalizationStatus, IndexedStrategy, Proposal, Strategy } from "../src/types.sol"; +import { VanillaVotingStrategy } from "../src/voting-strategies/VanillaVotingStrategy.sol"; contract ProposeTest is SpaceTest { function testPropose() public { @@ -78,7 +80,6 @@ contract ProposeTest is SpaceTest { function testProposeMultipleStrategies() public { VanillaVotingStrategy strat2 = new VanillaVotingStrategy(); - VanillaVotingStrategy strat3 = new VanillaVotingStrategy(); Strategy[] memory toAdd = new Strategy[](2); toAdd[0] = Strategy(address(strat2), new bytes(0)); toAdd[1] = Strategy(address(strat2), new bytes(0)); @@ -91,6 +92,6 @@ contract ProposeTest is SpaceTest { newVotingStrategies[1] = IndexedStrategy(1, new bytes(0)); // strat2 newVotingStrategies[2] = IndexedStrategy(2, new bytes(0)); // strat3 - uint256 proposalId = _createProposal(author, proposalMetadataUri, executionStrategy, userVotingStrategies); + _createProposal(author, proposalMetadataUri, executionStrategy, userVotingStrategies); } } diff --git a/test/SpaceFactory.t.sol b/test/SpaceFactory.t.sol index 3514897b..6eeea0bd 100644 --- a/test/SpaceFactory.t.sol +++ b/test/SpaceFactory.t.sol @@ -1,24 +1,26 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; -import "forge-std/Test.sol"; -import "../src/authenticators/VanillaAuthenticator.sol"; -import "../src/voting-strategies/VanillaVotingStrategy.sol"; -import "../src/execution-strategies/VanillaExecutionStrategy.sol"; -import "../src/SpaceFactory.sol"; -import "../src/interfaces/space-factory/ISpaceFactoryEvents.sol"; -import "../src/interfaces/space-factory/ISpaceFactoryErrors.sol"; +import { Test } from "forge-std/Test.sol"; +import { VanillaAuthenticator } from "../src/authenticators/VanillaAuthenticator.sol"; +import { VanillaVotingStrategy } from "../src/voting-strategies/VanillaVotingStrategy.sol"; +import { VanillaExecutionStrategy } from "../src/execution-strategies/VanillaExecutionStrategy.sol"; +import { SpaceFactory } from "../src/SpaceFactory.sol"; +import { ISpaceFactoryEvents } from "../src/interfaces/space-factory/ISpaceFactoryEvents.sol"; +import { ISpaceFactoryErrors } from "../src/interfaces/space-factory/ISpaceFactoryErrors.sol"; +import { Strategy } from "../src/types.sol"; +import { Space } from "../src/Space.sol"; contract SpaceFactoryTest is Test, ISpaceFactoryEvents, ISpaceFactoryErrors { SpaceFactory public factory; - VanillaVotingStrategy vanillaVotingStrategy; - VanillaAuthenticator vanillaAuthenticator; - VanillaExecutionStrategy vanillaExecutionStrategy; + VanillaVotingStrategy internal vanillaVotingStrategy; + VanillaAuthenticator internal vanillaAuthenticator; + VanillaExecutionStrategy internal vanillaExecutionStrategy; - Strategy[] votingStrategies; - address[] authenticators; - Strategy[] executionStrategies; + Strategy[] internal votingStrategies; + address[] internal authenticators; + Strategy[] internal executionStrategies; address public controller; uint32 public votingDelay; @@ -27,9 +29,9 @@ contract SpaceFactoryTest is Test, ISpaceFactoryEvents, ISpaceFactoryErrors { uint256 public proposalThreshold; uint32 public quorum; - bytes[] votingStrategyMetadata; + bytes[] internal votingStrategyMetadata; - string metadataUri = "SX-EVM"; + string internal metadataUri = "SX-EVM"; function setUp() public { factory = new SpaceFactory(); diff --git a/test/SpaceOwnerActions.t.sol b/test/SpaceOwnerActions.t.sol index 56e79058..f54b579b 100644 --- a/test/SpaceOwnerActions.t.sol +++ b/test/SpaceOwnerActions.t.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { Choice, IndexedStrategy, Strategy } from "../src/types.sol"; +import { VanillaExecutionStrategy } from "../src/execution-strategies/VanillaExecutionStrategy.sol"; contract SpaceOwnerActionsTest is SpaceTest { // ------- Cancel Proposal ---- diff --git a/test/SpaceState.t.sol b/test/SpaceState.t.sol index bafbe146..e8fe897f 100644 --- a/test/SpaceState.t.sol +++ b/test/SpaceState.t.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; contract SpaceStateTest is SpaceTest { function testGetInvalidProposal() public { diff --git a/test/TimestampResolver.t.sol b/test/TimestampResolver.t.sol index a430a0fa..078e9499 100644 --- a/test/TimestampResolver.t.sol +++ b/test/TimestampResolver.t.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; -import "forge-std/Test.sol"; -import "../src/voting-strategies/CompVotingStrategy.sol"; -import "./mocks/CompToken.sol"; +import { Test } from "forge-std/Test.sol"; +import { CompVotingStrategy } from "../src/voting-strategies/CompVotingStrategy.sol"; +import { CompToken } from "./mocks/CompToken.sol"; contract TimestampResolverTest is Test { error TimestampInFuture(); diff --git a/test/UpdateProposalMetadata.t.sol b/test/UpdateProposalMetadata.t.sol index b4606743..4c72756b 100644 --- a/test/UpdateProposalMetadata.t.sol +++ b/test/UpdateProposalMetadata.t.sol @@ -2,12 +2,12 @@ pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; -import "../src/types.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { Choice, IndexedStrategy } from "../src/types.sol"; -contract updateProposalTest is SpaceTest { - string newMetadataUri = "Testing123"; - IndexedStrategy newStrategy = IndexedStrategy(0, new bytes(0)); +contract UpdateProposalTest is SpaceTest { + string internal newMetadataUri = "Testing123"; + IndexedStrategy internal newStrategy = IndexedStrategy(0, new bytes(0)); function setUp() public virtual override { super.setUp(); diff --git a/test/VanillaAuthenticator.t.sol b/test/VanillaAuthenticator.t.sol index 628d7bfe..6e709cc7 100644 --- a/test/VanillaAuthenticator.t.sol +++ b/test/VanillaAuthenticator.t.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.18; -import "./utils/Authenticator.t.sol"; -import "../src/authenticators/VanillaAuthenticator.sol"; +import { AuthenticatorTest } from "./utils/Authenticator.t.sol"; +import { VanillaAuthenticator } from "../src/authenticators/VanillaAuthenticator.sol"; contract VanillaAuthenticatorTest is AuthenticatorTest { VanillaAuthenticator public auth; diff --git a/test/VanillaVotingStrategy.t.sol b/test/VanillaVotingStrategy.t.sol index 6ebe5b2b..a9743008 100644 --- a/test/VanillaVotingStrategy.t.sol +++ b/test/VanillaVotingStrategy.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; -import "forge-std/Test.sol"; -import "../src/voting-strategies/VanillaVotingStrategy.sol"; +import { Test } from "forge-std/Test.sol"; +import { VanillaVotingStrategy } from "../src/voting-strategies/VanillaVotingStrategy.sol"; contract VanillaVotingStrategyTest is Test { VanillaVotingStrategy public vanillaVotingStrategy; diff --git a/test/Vote.t.sol b/test/Vote.t.sol index 339e7409..af36ec3e 100644 --- a/test/Vote.t.sol +++ b/test/Vote.t.sol @@ -2,7 +2,9 @@ pragma solidity ^0.8.18; -import "./utils/Space.t.sol"; +import { SpaceTest } from "./utils/Space.t.sol"; +import { Choice, IndexedStrategy, Strategy, Vote } from "../src/types.sol"; +import { VanillaVotingStrategy } from "../src/voting-strategies/VanillaVotingStrategy.sol"; contract VoteTest is SpaceTest { function testVote() public { diff --git a/test/WhitelistStrategy.t.sol b/test/WhitelistStrategy.t.sol index 2fe5b28f..781e9a84 100644 --- a/test/WhitelistStrategy.t.sol +++ b/test/WhitelistStrategy.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.18; -import "forge-std/Test.sol"; -import "../src/voting-strategies/WhitelistStrategy.sol"; +import { Test } from "forge-std/Test.sol"; +import { WhitelistStrategy } from "../src/voting-strategies/WhitelistStrategy.sol"; contract WhitelistStrategyTest is Test { WhitelistStrategy public whitelistStrategy; diff --git a/test/mocks/Avatar.sol b/test/mocks/Avatar.sol index cd31239b..daad7ac8 100644 --- a/test/mocks/Avatar.sol +++ b/test/mocks/Avatar.sol @@ -2,13 +2,14 @@ pragma solidity ^0.8.18; -import "@zodiac/interfaces/IAvatar.sol"; +import { IAvatar } from "@zodiac/interfaces/IAvatar.sol"; contract Avatar { error NotAuthorized(); mapping(address module => bool isEnabled) internal modules; + // solhint-disable-next-line no-empty-blocks receive() external payable {} function enableModule(address _module) external { @@ -30,14 +31,15 @@ contract Avatar { uint8 operation ) external returns (bool success) { if (!modules[msg.sender]) revert NotAuthorized(); + // solhint-disable-next-line avoid-low-level-calls if (operation == 1) (success, ) = to.delegatecall(data); else (success, ) = to.call{ value: value }(data); } function getModulesPaginated( address, - uint256 pageSize - ) external view returns (address[] memory array, address next) { + uint256 // pageSize + ) external pure returns (address[] memory array, address next) { // Unimplemented return (new address[](0), address(0)); } diff --git a/test/mocks/CompToken.sol b/test/mocks/CompToken.sol index 049a5e81..c0147046 100644 --- a/test/mocks/CompToken.sol +++ b/test/mocks/CompToken.sol @@ -5,6 +5,7 @@ pragma solidity ^0.8.18; import { ERC20, ERC20Permit, ERC20VotesComp } from "@openzeppelin/contracts/token/ERC20/extensions/ERC20VotesComp.sol"; contract CompToken is ERC20VotesComp { + // solhint-disable-next-line no-empty-blocks constructor() ERC20("Test", "TEST") ERC20Permit("Test") {} function mint(address to, uint256 amount) external { diff --git a/test/utils/Authenticator.t.sol b/test/utils/Authenticator.t.sol index 4e4113ae..c97d8dab 100644 --- a/test/utils/Authenticator.t.sol +++ b/test/utils/Authenticator.t.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "forge-std/Test.sol"; +import { Test } from "forge-std/Test.sol"; contract DemoTarget { uint256 public x; diff --git a/test/utils/SigUtils.sol b/test/utils/SigUtils.sol index 17edb0c1..8e895160 100644 --- a/test/utils/SigUtils.sol +++ b/test/utils/SigUtils.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.18; -import "../../src/types.sol"; +import { Choice, IndexedStrategy, Strategy } from "../../src/types.sol"; import { SXHash } from "../../src/utils/SXHash.sol"; abstract contract SigUtils { diff --git a/test/utils/Space.t.sol b/test/utils/Space.t.sol index 59d6cb61..e6971b8f 100644 --- a/test/utils/Space.t.sol +++ b/test/utils/Space.t.sol @@ -2,46 +2,48 @@ pragma solidity ^0.8.18; -import "forge-std/Test.sol"; +import { Test } from "forge-std/Test.sol"; import { GasSnapshot } from "forge-gas-snapshot/GasSnapshot.sol"; -import "../../src/Space.sol"; -import "../../src/authenticators/VanillaAuthenticator.sol"; -import "../../src/voting-strategies/VanillaVotingStrategy.sol"; -import "../../src/execution-strategies/VanillaExecutionStrategy.sol"; -import "../../src/interfaces/space/ISpaceEvents.sol"; -import "../../src/interfaces/space/ISpaceErrors.sol"; -import "../../src/interfaces/execution-strategies/IExecutionStrategyErrors.sol"; -import "../../src/types.sol"; +import { Space } from "../../src/Space.sol"; +import { VanillaAuthenticator } from "../../src/authenticators/VanillaAuthenticator.sol"; +import { VanillaVotingStrategy } from "../../src/voting-strategies/VanillaVotingStrategy.sol"; +import { VanillaExecutionStrategy } from "../../src/execution-strategies/VanillaExecutionStrategy.sol"; +import { ISpaceEvents } from "../../src/interfaces/space/ISpaceEvents.sol"; +import { ISpaceErrors } from "../../src/interfaces/space/ISpaceErrors.sol"; +import { IExecutionStrategyErrors } from "../../src/interfaces/execution-strategies/IExecutionStrategyErrors.sol"; +import { Choice, Strategy, IndexedStrategy } from "../../src/types.sol"; +// solhint-disable-next-line max-states-count abstract contract SpaceTest is Test, GasSnapshot, ISpaceEvents, ISpaceErrors, IExecutionStrategyErrors { - bytes4 constant PROPOSE_SELECTOR = bytes4(keccak256("propose(address,string,(uint8,bytes),(uint8,bytes)[])")); - bytes4 constant VOTE_SELECTOR = bytes4(keccak256("vote(address,uint256,uint8,(uint8,bytes)[],string)")); - bytes4 constant UPDATE_PROPOSAL_SELECTOR = + bytes4 internal constant PROPOSE_SELECTOR = + bytes4(keccak256("propose(address,string,(uint8,bytes),(uint8,bytes)[])")); + bytes4 internal constant VOTE_SELECTOR = bytes4(keccak256("vote(address,uint256,uint8,(uint8,bytes)[],string)")); + bytes4 internal constant UPDATE_PROPOSAL_SELECTOR = bytes4(keccak256("updateProposal(address,uint256,(uint8,bytes),string)")); - Space space; - VanillaVotingStrategy vanillaVotingStrategy; - VanillaAuthenticator vanillaAuthenticator; - VanillaExecutionStrategy vanillaExecutionStrategy; + Space internal space; + VanillaVotingStrategy internal vanillaVotingStrategy; + VanillaAuthenticator internal vanillaAuthenticator; + VanillaExecutionStrategy internal vanillaExecutionStrategy; - uint256 public constant authorKey = 1234; - uint256 public constant voterKey = 5678; - uint256 public constant unauthorizedKey = 4321; + uint256 public constant AUTHOR_KEY = 1234; + uint256 public constant VOTER_KEY = 5678; + uint256 public constant UNAUTHORIZED_KEY = 4321; - string voteMetadataUri = "Hi"; + string internal voteMetadataUri = "Hi"; // Address of the meta transaction relayer (mana) address public relayer = address(this); address public owner = address(this); - address public author = vm.addr(authorKey); - address public voter = vm.addr(voterKey); - address public unauthorized = vm.addr(unauthorizedKey); + address public author = vm.addr(AUTHOR_KEY); + address public voter = vm.addr(VOTER_KEY); + address public unauthorized = vm.addr(UNAUTHORIZED_KEY); // Initial whitelisted modules set in the space - Strategy[] votingStrategies; - address[] authenticators; - Strategy[] executionStrategies; + Strategy[] internal votingStrategies; + address[] internal authenticators; + Strategy[] internal executionStrategies; // Initial space parameters uint32 public votingDelay;