Skip to content

Commit

Permalink
Disallow addIp for Tagged Groups (storyprotocol#55)
Browse files Browse the repository at this point in the history
  • Loading branch information
sebsadface authored and kingster-will committed Jan 31, 2025
1 parent 8caa484 commit 9de4747
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
3 changes: 3 additions & 0 deletions contracts/lib/Errors.sol
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,9 @@ library Errors {
/// @notice The disputed group cannot claim reward.
error GroupingModule__DisputedGroupCannotClaimReward(address groupId);

/// @notice The disputed group cannot add IP.
error GroupingModule__DisputedGroupCannotAddIp(address groupId);

////////////////////////////////////////////////////////////////////////////
// IP Asset Registry //
////////////////////////////////////////////////////////////////////////////
Expand Down
3 changes: 3 additions & 0 deletions contracts/modules/grouping/GroupingModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@ contract GroupingModule is
if (maxAllowedRewardShare > 100 * 10 ** 6) {
revert Errors.GroupingModule__MaxAllowedRewardShareExceeds100Percent(groupIpId, maxAllowedRewardShare);
}
if (DISPUTE_MODULE.isIpTagged(groupIpId)) {
revert Errors.GroupingModule__DisputedGroupCannotAddIp(groupIpId);
}
(address groupLicenseTemplate, uint256 groupLicenseTermsId, address currencyToken) = _getGroupRevenueInfo(
groupIpId
);
Expand Down
46 changes: 46 additions & 0 deletions test/foundry/modules/grouping/GroupingModule.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -1866,6 +1866,52 @@ contract GroupingModuleTest is BaseTest, ERC721Holder {
groupNft.tokenURI(100);
}

function test_GroupingModule_revert_addIp_DisputedGroupCannotAddIp() public {
uint256 termsId = pilTemplate.registerLicenseTerms(
PILFlavors.commercialRemix({
mintingFee: 0,
commercialRevShare: 10_000_000,
currencyToken: address(erc20),
royaltyPolicy: address(royaltyPolicyLAP)
})
);

Licensing.LicensingConfig memory licensingConfig = Licensing.LicensingConfig({
isSet: true,
mintingFee: 0,
licensingHook: address(0),
hookData: "",
commercialRevShare: 10 * 10 ** 6,
disabled: false,
expectMinimumGroupRewardShare: 10 * 10 ** 6,
expectGroupRewardPool: address(evenSplitGroupPool)
});

vm.startPrank(ipOwner1);
licensingModule.attachLicenseTerms(ipId1, address(pilTemplate), termsId);
licensingModule.setLicensingConfig(ipId1, address(pilTemplate), termsId, licensingConfig);
vm.stopPrank();
vm.startPrank(ipOwner2);
licensingModule.attachLicenseTerms(ipId2, address(pilTemplate), termsId);
licensingModule.setLicensingConfig(ipId2, address(pilTemplate), termsId, licensingConfig);
vm.stopPrank();

licensingConfig.expectGroupRewardPool = address(0);
vm.startPrank(alice);
address groupId = groupingModule.registerGroup(address(rewardPool));
licensingModule.attachLicenseTerms(groupId, address(pilTemplate), termsId);
licensingModule.setLicensingConfig(groupId, address(pilTemplate), termsId, licensingConfig);
address[] memory ipIds = new address[](2);
ipIds[0] = ipId1;
ipIds[1] = ipId2;

_raiseAndSetDisputeJudgement(groupId, ipId3, "IMPROPER_REGISTRATION");

vm.prank(alice);
vm.expectRevert(abi.encodeWithSelector(Errors.GroupingModule__DisputedGroupCannotAddIp.selector, groupId));
groupingModule.addIp(groupId, ipIds, 100e6);
}

function _raiseAndSetDisputeJudgement(address targetIp, address initiator, bytes32 disputeEvidenceHash) internal {
vm.startPrank(initiator);
USDC.mint(initiator, 1000 * 10 ** 6);
Expand Down

0 comments on commit 9de4747

Please sign in to comment.