Skip to content

Commit 7079d03

Browse files
V-Vaaljoelamouche
authored andcommitted
feat(contracts): use bytes for badge descriptions
1 parent 7b7de0e commit 7079d03

2 files changed

Lines changed: 27 additions & 16 deletions

File tree

the-guild-smart-contracts/src/TheGuildBadgeRegistry.sol

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ contract TheGuildBadgeRegistry {
88
/// @notice Representation of a badge.
99
struct Badge {
1010
bytes32 name;
11-
bytes32 description;
11+
bytes description;
1212
address creator;
1313
}
1414

1515
/// @notice Emitted when a new badge is created.
1616
event BadgeCreated(
1717
bytes32 indexed name,
18-
bytes32 description,
18+
bytes description,
1919
address indexed creator
2020
);
2121

@@ -30,7 +30,7 @@ contract TheGuildBadgeRegistry {
3030
/// @notice Create a new badge with a unique name.
3131
/// @param name The unique badge name (bytes32).
3232
/// @param description The badge description (bytes32).
33-
function createBadge(bytes32 name, bytes32 description) external {
33+
function createBadge(bytes32 name, bytes calldata description) external {
3434
require(name != bytes32(0), "EMPTY_NAME");
3535
require(!nameExists[name], "DUPLICATE_NAME");
3636

@@ -50,7 +50,7 @@ contract TheGuildBadgeRegistry {
5050
/// @dev Reverts if the badge does not exist.
5151
function getBadge(
5252
bytes32 name
53-
) external view returns (bytes32, bytes32, address) {
53+
) external view returns (bytes32, bytes memory, address) {
5454
require(nameExists[name], "NOT_FOUND");
5555
Badge memory b = nameToBadge[name];
5656
return (b.name, b.description, b.creator);
@@ -76,7 +76,7 @@ contract TheGuildBadgeRegistry {
7676
/// @dev Reverts if index is out of bounds.
7777
function getBadgeAt(
7878
uint256 index
79-
) external view returns (bytes32, bytes32, address) {
79+
) external view returns (bytes32, bytes memory, address) {
8080
bytes32 name = badgeNames[index];
8181
Badge memory b = nameToBadge[name];
8282
return (b.name, b.description, b.creator);

the-guild-smart-contracts/test/TheGuildBadgeRegistry.t.sol

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ contract TheGuildBadgeRegistryTest is Test {
1313

1414
function test_CreateBadge_SucceedsAndEmitsEvent() public {
1515
bytes32 name = bytes32("BADGE_ALPHA");
16-
bytes32 description = bytes32("First badge");
16+
bytes memory description = bytes("First badge");
1717

1818
vm.expectEmit(true, false, false, true);
1919
emit TheGuildBadgeRegistry.BadgeCreated(
@@ -24,7 +24,7 @@ contract TheGuildBadgeRegistryTest is Test {
2424

2525
registry.createBadge(name, description);
2626

27-
(bytes32 rName, bytes32 rDesc, address creator) = registry.getBadge(
27+
(bytes32 rName, bytes memory rDesc, address creator) = registry.getBadge(
2828
name
2929
);
3030
assertEq(rName, name, "name mismatch");
@@ -37,10 +37,10 @@ contract TheGuildBadgeRegistryTest is Test {
3737

3838
function test_CreateBadge_RevertOnDuplicate() public {
3939
bytes32 name = bytes32("BADGE_DUP");
40-
registry.createBadge(name, bytes32("desc"));
40+
registry.createBadge(name, bytes("desc"));
4141

4242
vm.expectRevert(bytes("DUPLICATE_NAME"));
43-
registry.createBadge(name, bytes32("another"));
43+
registry.createBadge(name, bytes("another"));
4444
}
4545

4646
function test_GetBadge_RevertOnMissing() public {
@@ -50,23 +50,34 @@ contract TheGuildBadgeRegistryTest is Test {
5050

5151
function test_CreateBadge_RevertOnEmptyName() public {
5252
vm.expectRevert(bytes("EMPTY_NAME"));
53-
registry.createBadge(bytes32(0), bytes32("desc"));
53+
registry.createBadge(bytes32(0), bytes("desc"));
5454
}
5555

5656
function test_GetBadgeAt_ByIndex() public {
5757
bytes32 a = bytes32("BADGE_A");
5858
bytes32 b = bytes32("BADGE_B");
59-
registry.createBadge(a, bytes32("descA"));
60-
registry.createBadge(b, bytes32("descB"));
59+
registry.createBadge(a, bytes("descA"));
60+
registry.createBadge(b, bytes("descB"));
6161

62-
(bytes32 n0, bytes32 d0, address c0) = registry.getBadgeAt(0);
62+
(bytes32 n0, bytes memory d0, address c0) = registry.getBadgeAt(0);
6363
assertEq(n0, a);
64-
assertEq(d0, bytes32("descA"));
64+
assertEq(keccak256(d0), keccak256(bytes("descA")));
6565
assertEq(c0, address(this));
6666

67-
(bytes32 n1, bytes32 d1, address c1) = registry.getBadgeAt(1);
67+
(bytes32 n1, bytes memory d1, address c1) = registry.getBadgeAt(1);
6868
assertEq(n1, b);
69-
assertEq(d1, bytes32("descB"));
69+
assertEq(keccak256(d1), keccak256(bytes("descB")));
7070
assertEq(c1, address(this));
7171
}
72+
function test_CreateBadge_AllowsLongDescription() public {
73+
bytes32 name = bytes32("BADGE_LONG");
74+
bytes memory longDesc = bytes(
75+
"Long descriptions matter. Short buffers do not. This test proves it."
76+
);
77+
78+
registry.createBadge(name, longDesc);
79+
80+
(, bytes memory rDesc,) = registry.getBadge(name);
81+
assertEq(keccak256(rDesc), keccak256(longDesc), "long description mismatch");
82+
}
7283
}

0 commit comments

Comments
 (0)