Skip to content

Commit 7fe668f

Browse files
Address build and lint warnings (#14)
* Fix build warnings * Clean up formatting * Revert updatePayoutAddress arg name change * Fix lint warnings
1 parent 977eb3f commit 7fe668f

22 files changed

+79
-239
lines changed

foundry.toml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,14 @@ optimizer_runs = 100000
1717

1818
# Generate skimmable test docs with command: make docs-test
1919
[profile.testdocs]
20-
src = "test"
20+
src = "test"
21+
22+
[lint]
23+
lint_on_build = false
24+
exclude_lints = [
25+
"mixed-case-variable", # *URI variable names
26+
"mixed-case-function", # *URI function names
27+
"asm-keccak256", # EIP-712 hashing
28+
"erc20-unchecked-transfer", # Warning on ERC-721 transferFrom
29+
"unused-import" # BuilderCodesTest imports for purpose of dependent tests
30+
]

src/BuilderCodes.sol

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ contract BuilderCodes is
6868
/// @notice Emitted when a publisher's default payout address is updated
6969
///
7070
/// @param tokenId Token ID of the referral code
71-
/// @param payoutAddress New default payout address for all chains
71+
/// @param payoutAddress New default payout address
7272
event PayoutAddressUpdated(uint256 indexed tokenId, address payoutAddress);
7373

7474
/// @notice Emits when the contract URI is updated (ERC-7572)
@@ -121,26 +121,26 @@ contract BuilderCodes is
121121
///
122122
/// @param code Custom builder code for the builder code
123123
/// @param initialOwner Owner of the builder code
124-
/// @param payoutAddress Default payout address for all chains
125-
function register(string memory code, address initialOwner, address payoutAddress)
124+
/// @param initialPayoutAddress Default payout address
125+
function register(string memory code, address initialOwner, address initialPayoutAddress)
126126
external
127127
onlyRole(REGISTER_ROLE)
128128
{
129-
_register(code, initialOwner, payoutAddress);
129+
_register(code, initialOwner, initialPayoutAddress);
130130
}
131131

132132
/// @notice Registers a new referral code in the system with a signature
133133
///
134134
/// @param code Custom builder code for the builder code
135135
/// @param initialOwner Owner of the builder code
136-
/// @param payoutAddress Default payout address for all chains
136+
/// @param initialPayoutAddress Default payout address
137137
/// @param deadline Deadline to submit the registration
138138
/// @param registrar Address of the registrar
139139
/// @param signature Signature of the registrar
140140
function registerWithSignature(
141141
string memory code,
142142
address initialOwner,
143-
address payoutAddress,
143+
address initialPayoutAddress,
144144
uint48 deadline,
145145
address registrar,
146146
bytes memory signature
@@ -152,13 +152,14 @@ contract BuilderCodes is
152152
_checkRole(REGISTER_ROLE, registrar);
153153

154154
// Check signature is valid
155-
bytes32 structHash =
156-
keccak256(abi.encode(REGISTRATION_TYPEHASH, keccak256(bytes(code)), initialOwner, payoutAddress, deadline));
155+
bytes32 structHash = keccak256(
156+
abi.encode(REGISTRATION_TYPEHASH, keccak256(bytes(code)), initialOwner, initialPayoutAddress, deadline)
157+
);
157158
if (!SignatureCheckerLib.isValidSignatureNow(registrar, _hashTypedData(structHash), signature)) {
158159
revert Unauthorized();
159160
}
160161

161-
_register(code, initialOwner, payoutAddress);
162+
_register(code, initialOwner, initialPayoutAddress);
162163
}
163164

164165
/// @inheritdoc ERC721Upgradeable
@@ -167,6 +168,7 @@ contract BuilderCodes is
167168
/// @dev ERC721Upgradeable.safeTransferFrom inherits this function (and no other functions can initiate transfers)
168169
function transferFrom(address from, address to, uint256 tokenId) public override(ERC721Upgradeable, IERC721) {
169170
_checkRole(TRANSFER_ROLE, msg.sender);
171+
// test
170172
super.transferFrom(from, to, tokenId);
171173
}
172174

@@ -190,12 +192,12 @@ contract BuilderCodes is
190192
/// @notice Updates the default payout address for a referral code
191193
///
192194
/// @param code Builder code
193-
/// @param payoutAddress New default payout address
195+
/// @param newPayoutAddress New default payout address
194196
/// @dev Only callable by referral code owner
195-
function updatePayoutAddress(string memory code, address payoutAddress) external {
197+
function updatePayoutAddress(string memory code, address newPayoutAddress) external {
196198
uint256 tokenId = toTokenId(code);
197199
if (_requireOwned(tokenId) != msg.sender) revert Unauthorized();
198-
_updatePayoutAddress(tokenId, payoutAddress);
200+
_updatePayoutAddress(tokenId, newPayoutAddress);
199201
}
200202

201203
/// @notice Gets the default payout address for a referral code
@@ -329,22 +331,22 @@ contract BuilderCodes is
329331
///
330332
/// @param code Referral code
331333
/// @param initialOwner Owner of the ref code
332-
/// @param payoutAddress Default payout address for all chains
333-
function _register(string memory code, address initialOwner, address payoutAddress) internal {
334+
/// @param initialPayoutAddress Default payout address
335+
function _register(string memory code, address initialOwner, address initialPayoutAddress) internal {
334336
uint256 tokenId = toTokenId(code);
335337
_mint(initialOwner, tokenId);
336338
emit CodeRegistered(tokenId, code);
337-
_updatePayoutAddress(tokenId, payoutAddress);
339+
_updatePayoutAddress(tokenId, initialPayoutAddress);
338340
}
339341

340342
/// @notice Registers a new referral code
341343
///
342344
/// @param tokenId Token ID of the referral code
343-
/// @param payoutAddress Default payout address for all chains
344-
function _updatePayoutAddress(uint256 tokenId, address payoutAddress) internal {
345-
if (payoutAddress == address(0)) revert ZeroAddress();
346-
_getRegistryStorage().payoutAddresses[tokenId] = payoutAddress;
347-
emit PayoutAddressUpdated(tokenId, payoutAddress);
345+
/// @param newPayoutAddress New payout address
346+
function _updatePayoutAddress(uint256 tokenId, address newPayoutAddress) internal {
347+
if (newPayoutAddress == address(0)) revert ZeroAddress();
348+
_getRegistryStorage().payoutAddresses[tokenId] = newPayoutAddress;
349+
emit PayoutAddressUpdated(tokenId, newPayoutAddress);
348350
}
349351

350352
/// @notice Authorization for upgrades

test/integration/BuilderCodeTransfers.t.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ pragma solidity ^0.8.29;
44
import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol";
55

66
import {BuilderCodesTest} from "../lib/BuilderCodesTest.sol";
7-
import {BuilderCodes} from "../../src/BuilderCodes.sol";
87
import {MockTransferRules} from "../lib/mocks/MockTransferRules.sol";
98

109
/// @notice Integration tests for BuilderCodes transfers

test/integration/BuilderCodesAdminOperations.t.sol

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
pragma solidity ^0.8.29;
33

44
import {BuilderCodesTest} from "../lib/BuilderCodesTest.sol";
5-
import {BuilderCodes} from "../../src/BuilderCodes.sol";
65
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
76
import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol";
87

test/lib/BuilderCodesTest.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
pragma solidity ^0.8.29;
33

44
import {Test} from "forge-std/Test.sol";
5-
import {console} from "forge-std/console.sol";
65
import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
76
import {IERC721Errors} from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol";
87

@@ -51,7 +50,7 @@ abstract contract BuilderCodesTest is Test {
5150
/// @param seed Random number to seed the invalid code generation
5251
///
5352
/// @return code Invalid code containing disallowed characters
54-
function _generateInvalidCode(uint256 seed) internal view returns (string memory code) {
53+
function _generateInvalidCode(uint256 seed) internal pure returns (string memory code) {
5554
uint256 length = seed % 32 + 1; // 1-32 characters
5655
string memory invalidCharacters = "!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ";
5756
return _generateCode(seed, length, invalidCharacters);

test/unit/BuilderCodes/codeURI.t.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
pragma solidity ^0.8.29;
33

44
import {BuilderCodesTest, IERC721Errors} from "../../lib/BuilderCodesTest.sol";
5+
56
import {BuilderCodes} from "../../../src/BuilderCodes.sol";
67

78
/// @notice Unit tests for BuilderCodes.codeURI

test/unit/BuilderCodes/contractURI.t.sol

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,7 @@ import {BuilderCodes} from "../../../src/BuilderCodes.sol";
77
/// @notice Unit tests for BuilderCodes.contractURI
88
contract ContractURITest is BuilderCodesTest {
99
/// @notice Test that contractURI returns correct URI when base URI is set
10-
///
11-
/// @param initialOwner The initial owner address
12-
/// @param initialPayoutAddress The initial payout address
13-
function test_contractURI_success_returnsCorrectURIWithBaseURI(address initialOwner, address initialPayoutAddress)
14-
public
15-
{
10+
function test_contractURI_success_returnsCorrectURIWithBaseURI() public view {
1611
// The builderCodes contract is already initialized with URI_PREFIX
1712
string memory contractURI = builderCodes.contractURI();
1813
string memory expected = string.concat(URI_PREFIX, "contractURI.json");
@@ -21,12 +16,7 @@ contract ContractURITest is BuilderCodesTest {
2116

2217
/// @notice Test that contractURI returns empty string when base URI is not set
2318
///
24-
/// @param initialOwner The initial owner address
25-
/// @param initialPayoutAddress The initial payout address
26-
function test_contractURI_success_returnsEmptyStringWithoutBaseURI(
27-
address initialOwner,
28-
address initialPayoutAddress
29-
) public {
19+
function test_contractURI_success_returnsEmptyStringWithoutBaseURI(address initialOwner) public {
3020
initialOwner = _boundNonZeroAddress(initialOwner);
3121
BuilderCodes freshContract = _deployFreshBuilderCodes();
3222

@@ -38,14 +28,8 @@ contract ContractURITest is BuilderCodesTest {
3828

3929
/// @notice Test that contractURI reflects updated base URI
4030
///
41-
/// @param initialOwner The initial owner address
42-
/// @param initialPayoutAddress The initial payout address
4331
/// @param newBaseURI The new base URI
44-
function test_contractURI_success_reflectsUpdatedBaseURI(
45-
address initialOwner,
46-
address initialPayoutAddress,
47-
string memory newBaseURI
48-
) public {
32+
function test_contractURI_success_reflectsUpdatedBaseURI(string memory newBaseURI) public {
4933
// Update base URI using owner permissions
5034
vm.prank(owner);
5135
builderCodes.updateBaseURI(newBaseURI);
@@ -61,14 +45,8 @@ contract ContractURITest is BuilderCodesTest {
6145

6246
/// @notice Test that contractURI returns contractURI.json suffix
6347
///
64-
/// @param initialOwner The initial owner address
65-
/// @param initialPayoutAddress The initial payout address
6648
/// @param baseURI The base URI
67-
function test_contractURI_success_returnsWithCorrectSuffix(
68-
address initialOwner,
69-
address initialPayoutAddress,
70-
string memory baseURI
71-
) public {
49+
function test_contractURI_success_returnsWithCorrectSuffix(string memory baseURI) public {
7250
vm.assume(bytes(baseURI).length > 0);
7351

7452
vm.prank(owner);

test/unit/BuilderCodes/hasRole.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ contract HasRoleTest is BuilderCodesTest {
88
/// @notice Test that the owner has any role
99
///
1010
/// @param role The role to check
11-
function test_hasRole_true_isOwner(bytes32 role) public {
11+
function test_hasRole_true_isOwner(bytes32 role) public view {
1212
assertTrue(builderCodes.hasRole(role, owner));
1313
}
1414

test/unit/BuilderCodes/isRegistered.t.sol

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,15 @@ import {BuilderCodes} from "../../../src/BuilderCodes.sol";
77
/// @notice Unit tests for BuilderCodes.isRegistered
88
contract IsRegisteredTest is BuilderCodesTest {
99
/// @notice Test that isRegistered reverts when code is empty
10-
///
11-
/// @param initialOwner The initial owner address
12-
/// @param initialPayoutAddress The initial payout address
13-
function test_isRegistered_revert_emptyCode(address initialOwner, address initialPayoutAddress) public {
10+
function test_isRegistered_revert_emptyCode() public {
1411
vm.expectRevert(abi.encodeWithSelector(BuilderCodes.InvalidCode.selector, ""));
1512
builderCodes.isRegistered("");
1613
}
1714

1815
/// @notice Test that isRegistered reverts when code is over 32 characters
1916
///
2017
/// @param codeSeed The seed for generating the code
21-
/// @param initialOwner The initial owner address
22-
/// @param initialPayoutAddress The initial payout address
23-
function test_isRegistered_revert_codeOver32Characters(
24-
uint256 codeSeed,
25-
address initialOwner,
26-
address initialPayoutAddress
27-
) public {
18+
function test_isRegistered_revert_codeOver32Characters(uint256 codeSeed) public {
2819
string memory longCode = _generateLongCode(codeSeed);
2920
vm.expectRevert(abi.encodeWithSelector(BuilderCodes.InvalidCode.selector, longCode));
3021
builderCodes.isRegistered(longCode);
@@ -33,13 +24,7 @@ contract IsRegisteredTest is BuilderCodesTest {
3324
/// @notice Test that isRegistered reverts when code contains invalid characters
3425
///
3526
/// @param codeSeed The seed for generating the code
36-
/// @param initialOwner The initial owner address
37-
/// @param initialPayoutAddress The initial payout address
38-
function test_isRegistered_revert_codeContainsInvalidCharacters(
39-
uint256 codeSeed,
40-
address initialOwner,
41-
address initialPayoutAddress
42-
) public {
27+
function test_isRegistered_revert_codeContainsInvalidCharacters(uint256 codeSeed) public {
4328
string memory invalidCode = _generateInvalidCode(codeSeed);
4429
vm.expectRevert(abi.encodeWithSelector(BuilderCodes.InvalidCode.selector, invalidCode));
4530
builderCodes.isRegistered(invalidCode);
@@ -48,13 +33,7 @@ contract IsRegisteredTest is BuilderCodesTest {
4833
/// @notice Test that isRegistered returns false for unregistered valid code
4934
///
5035
/// @param codeSeed The seed for generating the code
51-
/// @param initialOwner The initial owner address
52-
/// @param initialPayoutAddress The initial payout address
53-
function test_isRegistered_success_returnsFalseForUnregistered(
54-
uint256 codeSeed,
55-
address initialOwner,
56-
address initialPayoutAddress
57-
) public {
36+
function test_isRegistered_success_returnsFalseForUnregistered(uint256 codeSeed) public view {
5837
string memory validCode = _generateValidCode(codeSeed);
5938
assertFalse(builderCodes.isRegistered(validCode));
6039
}

0 commit comments

Comments
 (0)