Skip to content

Commit 5f38041

Browse files
committed
refactor(contracts): adapt and improve immutable args on voting test use case
1 parent bf8fece commit 5f38041

28 files changed

+166
-123
lines changed

packages/contracts/contracts/src/core/factories/FactoryChecker.sol

+19-4
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,24 @@ abstract contract FactoryChecker is Factory {
1010
/// @param _implementation Address of checker implementation.
1111
constructor(address _implementation) Factory(_implementation) {}
1212

13-
/// @notice Deploys new checker clone with specific verifiers.
14-
/// @param verifiers Array of verifier addresses for this instance.
15-
function deploy(address[] calldata verifiers) internal virtual returns (address) {
16-
return _deployClone(abi.encode(verifiers));
13+
/// @notice Packs verifier addresses with additional arguments
14+
/// @param verifiers Array of verifier addresses
15+
/// @param extraArgs Additional configuration arguments
16+
/// @return bytes Packed arguments for clone deployment
17+
function _packArgs(address[] calldata verifiers, bytes memory extraArgs) internal pure returns (bytes memory) {
18+
return bytes.concat(abi.encode(verifiers), extraArgs);
19+
}
20+
21+
/// @notice Extended deploy with extra arguments
22+
/// @param verifiers Array of verifier addresses
23+
/// @param extraArgs Additional configuration arguments
24+
function _deploy(address[] calldata verifiers, bytes memory extraArgs) internal returns (address) {
25+
return _deployClone(_packArgs(verifiers, extraArgs));
26+
}
27+
28+
/// @notice Basic deploy with only verifiers
29+
/// @param verifiers Array of verifier addresses
30+
function _deploy(address[] calldata verifiers) internal returns (address) {
31+
return _deployClone(_packArgs(verifiers, "")); // Empty bytes for no extra args
1732
}
1833
}

packages/contracts/contracts/src/test/advanced/AdvancedERC721PolicyFactory.sol

-9
This file was deleted.

packages/contracts/contracts/src/test/base/BaseERC721PolicyFactory.sol

-9
This file was deleted.

packages/contracts/contracts/src/test/advanced/AdvancedVoting.sol packages/contracts/contracts/src/test/voting/advanced/AdvancedVoting.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {AdvancedPolicy} from "../../core/policy/AdvancedPolicy.sol";
5-
import {Check} from "../../core/interfaces/IAdvancedPolicy.sol";
4+
import {AdvancedPolicy} from "../../../core/policy/AdvancedPolicy.sol";
5+
import {Check} from "../../../core/policy/interfaces/IAdvancedPolicy.sol";
66

77
/// @title AdvancedVoting.
88
/// @notice Advanced voting system with NFT-based phases and eligibility verification.

packages/contracts/contracts/src/test/advanced/AdvancedERC721Checker.sol packages/contracts/contracts/src/test/voting/advanced/checker/AdvancedERC721Checker.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {AdvancedChecker} from "../../core/checker/AdvancedChecker.sol";
5-
import {BaseERC721Checker} from "../base/BaseERC721Checker.sol";
4+
import {AdvancedChecker} from "../../../../core/checker/AdvancedChecker.sol";
5+
import {BaseERC721Checker} from "../../base/checker/BaseERC721Checker.sol";
66
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
77
import {LibClone} from "solady/src/utils/LibClone.sol";
88

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {CheckerFactory} from "../../core/checker/CheckerFactory.sol";
4+
import {FactoryChecker} from "../../../../core/factories/FactoryChecker.sol";
55
import {AdvancedERC721Checker} from "./AdvancedERC721Checker.sol";
66

7-
/// @title AdvancedERC721CheckerFactory
7+
/// @title AdvancedERC721FactoryChecker
88
/// @notice Factory for deploying AdvancedERC721Checker clones
99
/// @dev Handles deployment with verifiers and validation parameters
10-
contract AdvancedERC721CheckerFactory is CheckerFactory {
11-
constructor() CheckerFactory(address(new AdvancedERC721Checker())) {}
10+
contract AdvancedERC721FactoryChecker is FactoryChecker {
11+
constructor() FactoryChecker(address(new AdvancedERC721Checker())) {}
1212

1313
/// @notice Deploys new checker clone with specific configuration
1414
/// @param verifiers Array of verifier addresses [signupNFT, rewardNFT, baseChecker]
@@ -22,12 +22,7 @@ contract AdvancedERC721CheckerFactory is CheckerFactory {
2222
uint256 minTokenId,
2323
uint256 maxTokenId
2424
) public returns (address clone) {
25-
bytes memory args = bytes.concat(
26-
abi.encode(verifiers), // Array of verifiers
27-
abi.encode(minBalance), // Balance threshold
28-
abi.encode(minTokenId), // Token ID range
29-
abi.encode(maxTokenId)
30-
);
31-
clone = _deployClone(args);
25+
bytes memory extraArgs = abi.encode(minBalance, minTokenId, maxTokenId);
26+
return _deploy(verifiers, extraArgs);
3227
}
3328
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import {AdvancedERC721Policy} from "./AdvancedERC721Policy.sol";
5+
import {AdvancedERC721Checker} from "../checker/AdvancedERC721Checker.sol";
6+
import {FactoryAdvancedPolicy} from "../../../../core/factories/FactoryAdvancedPolicy.sol";
7+
8+
// @todo
9+
contract AdvancedERC721FactoryPolicy is FactoryAdvancedPolicy {
10+
constructor() FactoryAdvancedPolicy(address(new AdvancedERC721Policy())) {}
11+
12+
function deploy(
13+
AdvancedERC721Checker checker,
14+
bool skipPre,
15+
bool skipPost,
16+
bool allowMultipleMain
17+
) public returns (address clone) {
18+
bytes memory args = bytes.concat(
19+
abi.encode(checker),
20+
abi.encode(skipPre),
21+
abi.encode(skipPost),
22+
abi.encode(allowMultipleMain)
23+
);
24+
clone = _deployClone(args);
25+
}
26+
}

packages/contracts/contracts/src/test/advanced/AdvancedERC721Policy.sol packages/contracts/contracts/src/test/voting/advanced/policy/AdvancedERC721Policy.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {AdvancedPolicy} from "../../core/policy/AdvancedPolicy.sol";
5-
import {AdvancedERC721Checker} from "./AdvancedERC721Checker.sol";
4+
import {AdvancedPolicy} from "../../../../core/policy/AdvancedPolicy.sol";
65

76
/// @title AdvancedERC721Policy.
87
/// @notice Three-phase ERC721 validation policy.

packages/contracts/contracts/src/test/wrappers/AdvancedERC721CheckerHarness.sol packages/contracts/contracts/src/test/voting/advanced/test/wrappers/AdvancedERC721CheckerHarness.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {AdvancedERC721Checker} from "../advanced/AdvancedERC721Checker.sol";
5-
import {Check} from "../../core/interfaces/IAdvancedChecker.sol";
4+
import {AdvancedERC721Checker} from "../../checker/AdvancedERC721Checker.sol";
5+
import {Check} from "../../../../../core/checker/interfaces/IAdvancedChecker.sol";
66

77
/// @title AdvancedERC721CheckerHarness.
88
/// @notice Test harness exposing internal methods of AdvancedERC721Checker.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import {AdvancedERC721FactoryChecker} from "../../checker/AdvancedERC721FactoryChecker.sol";
5+
6+
/// @title AdvancedERC721FactoryCheckerHarness
7+
/// @notice Test harness exposing internal methods of AdvancedERC721CheckerFactory.
8+
contract AdvancedERC721FactoryCheckerHarness is AdvancedERC721FactoryChecker {
9+
constructor() AdvancedERC721FactoryChecker() {}
10+
11+
function exposed__packArgs(
12+
address[] calldata verifiers,
13+
bytes memory extraArgs
14+
) public pure returns (bytes memory) {
15+
return _packArgs(verifiers, extraArgs);
16+
}
17+
18+
function exposed__deploy(address[] calldata verifiers) public returns (address clone) {
19+
return _deploy(verifiers);
20+
}
21+
22+
function exposed__deploy(address[] calldata verifiers, bytes calldata extraArgs) public returns (address clone) {
23+
return _deploy(verifiers, extraArgs);
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import {AdvancedERC721FactoryPolicy} from "../../policy/AdvancedERC721FactoryPolicy.sol";
5+
import {AdvancedERC721Checker} from "../../checker/AdvancedERC721Checker.sol";
6+
7+
// @todo
8+
contract AdvancedERC721FactoryPolicyHarness is AdvancedERC721FactoryPolicy {
9+
constructor() AdvancedERC721FactoryPolicy() {}
10+
11+
//@todo
12+
function exposed__deploy(
13+
AdvancedERC721Checker checker,
14+
bool skipPre,
15+
bool skipPost,
16+
bool allowMultipleMain
17+
) internal returns (address) {
18+
return _deploy(checker, skipPre, skipPost, allowMultipleMain);
19+
}
20+
}

packages/contracts/contracts/src/test/wrappers/AdvancedERC721PolicyHarness.sol packages/contracts/contracts/src/test/voting/advanced/test/wrappers/AdvancedERC721PolicyHarness.sol

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {AdvancedERC721Policy} from "../advanced/AdvancedERC721Policy.sol";
5-
import {AdvancedERC721Checker} from "../advanced/AdvancedERC721Checker.sol";
6-
import {Check} from "../../core/interfaces/IAdvancedChecker.sol";
4+
import {AdvancedERC721Policy} from "../../policy/AdvancedERC721Policy.sol";
5+
import {Check} from "../../../../../core/checker/interfaces/IAdvancedChecker.sol";
76

87
/// @title AdvancedERC721PolicyHarness.
98
/// @notice Test harness for AdvancedERC721Policy internal methods.

packages/contracts/contracts/src/test/base/BaseVoting.sol packages/contracts/contracts/src/test/voting/base/BaseVoting.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {BaseERC721Policy} from "./BaseERC721Policy.sol";
4+
import {BaseERC721Policy} from "./policy/BaseERC721Policy.sol";
55

66
/// @title BaseVoting.
77
/// @notice Simple voting system with NFT-based access control.

packages/contracts/contracts/src/test/base/BaseERC721Checker.sol packages/contracts/contracts/src/test/voting/base/checker/BaseERC721Checker.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {BaseChecker} from "../../core/checker/BaseChecker.sol";
4+
import {BaseChecker} from "../../../../core/checker/BaseChecker.sol";
55
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
66
import {LibClone} from "solady/src/utils/LibClone.sol";
77

@@ -10,7 +10,7 @@ import {LibClone} from "solady/src/utils/LibClone.sol";
1010
/// @dev Extends BaseChecker for NFT ownership verification.
1111
contract BaseERC721Checker is BaseChecker {
1212
/// @notice NFT contract reference.
13-
IERC721 public immutable NFT;
13+
IERC721 public NFT;
1414

1515
/// @notice Initializes checker with immutable args.
1616
constructor() BaseChecker() {
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {CheckerFactory} from "../../core/checker/CheckerFactory.sol";
4+
import {FactoryChecker} from "../../../../core/factories/FactoryChecker.sol";
55
import {BaseERC721Checker} from "./BaseERC721Checker.sol";
66

7-
/// @title BaseERC721CheckerFactory
7+
/// @title BaseERC721FactoryChecker
88
/// @notice Factory for deploying BaseERC721Checker clones
99
/// @dev Handles deployment with verifiers and validation parameters
1010
/// note that I reuse the same deploy from CheckerFactory contract.
11-
contract BaseERC721CheckerFactory is CheckerFactory {
12-
constructor() CheckerFactory(address(new BaseERC721Checker())) {}
11+
contract BaseERC721FactoryChecker is FactoryChecker {
12+
constructor() FactoryChecker(address(new BaseERC721Checker())) {}
1313
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import {FactoryBasePolicy} from "../../../../core/factories/FactoryBasePolicy.sol";
5+
import {BaseERC721Policy} from "./BaseERC721Policy.sol";
6+
7+
//@todo
8+
contract BaseERC721FactoryPolicy is FactoryBasePolicy {
9+
constructor() FactoryBasePolicy(address(new BaseERC721Policy())) {}
10+
}

packages/contracts/contracts/src/test/base/BaseERC721Policy.sol packages/contracts/contracts/src/test/voting/base/policy/BaseERC721Policy.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {BasePolicy} from "../../core/policy/BasePolicy.sol";
5-
import {BaseERC721Checker} from "./BaseERC721Checker.sol";
4+
import {BasePolicy} from "../../../../core/policy/BasePolicy.sol";
65

76
/// @title BaseERC721Policy.
87
/// @notice Policy enforcer for ERC721 token validation.

packages/contracts/contracts/src/test/wrappers/BaseERC721CheckerHarness.sol packages/contracts/contracts/src/test/voting/base/test/wrappers/BaseERC721CheckerHarness.sol

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {BaseERC721Checker} from "../base/BaseERC721Checker.sol";
4+
import {BaseERC721Checker} from "../../checker/BaseERC721Checker.sol";
55

66
/// @title BaseERC721CheckerHarness.
77
/// @notice Test harness for BaseERC721Checker internal methods.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import {BaseERC721FactoryChecker} from "../../checker/BaseERC721FactoryChecker.sol";
5+
6+
/// @title BaseERC721FactoryCheckerHarness
7+
/// @notice Test harness exposing internal methods of BaseERC721FactoryChecker.
8+
contract BaseERC721FactoryCheckerHarness is BaseERC721FactoryChecker {
9+
constructor() BaseERC721FactoryChecker() {}
10+
11+
function exposed__packArgs(
12+
address[] calldata verifiers,
13+
bytes memory extraArgs
14+
) public pure returns (bytes memory) {
15+
return _packArgs(verifiers, extraArgs);
16+
}
17+
18+
function exposed__deploy(address[] calldata verifiers) public returns (address clone) {
19+
return _deploy(verifiers);
20+
}
21+
22+
function exposed__deploy(address[] calldata verifiers, bytes calldata extraArgs) public returns (address clone) {
23+
return _deploy(verifiers, extraArgs);
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.20;
3+
4+
import {BaseERC721FactoryPolicy} from "../../policy/BaseERC721FactoryPolicy.sol";
5+
import {BaseERC721Checker} from "../../checker/BaseERC721Checker.sol";
6+
7+
/// @title BaseERC721FactoryPolicyHarness
8+
/// @notice Test harness exposing internal methods of BaseERC721FactoryPolicy.
9+
contract BaseERC721FactoryPolicyHarness is BaseERC721FactoryPolicy {
10+
constructor() BaseERC721FactoryPolicy() {}
11+
12+
//@todo
13+
function exposed__deploy(BaseERC721Checker checker) internal virtual returns (address) {
14+
return _deploy(checker);
15+
}
16+
}

packages/contracts/contracts/src/test/wrappers/BaseERC721PolicyHarness.sol packages/contracts/contracts/src/test/voting/base/test/wrappers/BaseERC721PolicyHarness.sol

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.20;
33

4-
import {BaseERC721Policy} from "../base/BaseERC721Policy.sol";
5-
import {BaseERC721Checker} from "../base/BaseERC721Checker.sol";
4+
import {BaseERC721Policy} from "../../policy/BaseERC721Policy.sol";
65

76
/// @title BaseERC721PolicyHarness.
87
/// @notice Test harness for BaseERC721Policy internal methods.

packages/contracts/contracts/src/test/wrappers/AdvancedERC721CheckerFactoryHarness.sol

-19
This file was deleted.

packages/contracts/contracts/src/test/wrappers/AdvancedERC721PolicyFactoryHarness.sol

-16
This file was deleted.

packages/contracts/contracts/src/test/wrappers/BaseERC721CheckerFactoryHarness.sol

-16
This file was deleted.

0 commit comments

Comments
 (0)