mirror of
https://github.com/lens-protocol/core.git
synced 2026-01-10 14:48:15 -05:00
fix: DegreesOfSeparation - original author and source can always reply
Co-authored-by: Alan <donosonaumczuk@gmail.com>
This commit is contained in:
@@ -18,8 +18,9 @@ import {FollowValidationLib} from 'contracts/modules/libraries/FollowValidationL
|
||||
* @param quotesRestricted Indicates if the quote operation is restricted or open to everyone.
|
||||
* @param mirrorsRestricted Indicates if the mirror operation is restricted or open to everyone.
|
||||
* @param degreesOfSeparation The max degrees of separation allowed for restricted operations.
|
||||
* @param sourceProfile The ID of the profile from where the follower path should be started. Expected to be set as the
|
||||
* author of the root publication.
|
||||
* @param sourceProfile The ID of the profile from where the follower path should be started. Usually it will match the
|
||||
* `originalAuthorProfile`.
|
||||
* @param originalAuthorProfile Original author of the Post or Quote when the degrees restriction was first applied.
|
||||
*/
|
||||
struct ModuleConfig {
|
||||
bool setUp;
|
||||
@@ -27,7 +28,8 @@ struct ModuleConfig {
|
||||
bool quotesRestricted;
|
||||
bool mirrorsRestricted;
|
||||
uint8 degreesOfSeparation;
|
||||
uint128 sourceProfile;
|
||||
uint96 sourceProfile;
|
||||
uint96 originalAuthorProfile;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -64,7 +66,7 @@ contract DegreesOfSeparationReferenceModule is HubRestricted, IReferenceModule {
|
||||
* - bool quotesRestricted: Indicates if the quote operation is restricted or open to everyone.
|
||||
* - bool mirrorsRestricted: Indicates if the mirror operation is restricted or open to everyone.
|
||||
* - uint8 degreesOfSeparation: The max degrees of separation allowed for restricted operations.
|
||||
* - uint128 sourceProfile The ID of the profile from where the follower path should be started. Expected to be set
|
||||
* - uint96 sourceProfile: The ID of the profile from where the follower path should be started. Expected to be set
|
||||
* as the author of the root publication.
|
||||
*/
|
||||
function initializeReferenceModule(
|
||||
@@ -78,21 +80,36 @@ contract DegreesOfSeparationReferenceModule is HubRestricted, IReferenceModule {
|
||||
bool quotesRestricted,
|
||||
bool mirrorsRestricted,
|
||||
uint8 degreesOfSeparation,
|
||||
uint128 sourceProfile
|
||||
) = abi.decode(data, (bool, bool, bool, uint8, uint128));
|
||||
uint96 sourceProfile
|
||||
) = abi.decode(data, (bool, bool, bool, uint8, uint96));
|
||||
if (degreesOfSeparation > MAX_DEGREES_OF_SEPARATION) {
|
||||
revert InvalidDegreesOfSeparation();
|
||||
}
|
||||
if (!IERC721Timestamped(HUB).exists(sourceProfile)) {
|
||||
revert Errors.TokenDoesNotExist();
|
||||
}
|
||||
|
||||
uint96 originalAuthorProfile;
|
||||
Types.PublicationMemory memory pub = ILensHub(HUB).getPublication(profileId, pubId);
|
||||
if (pub.pubType == Types.PublicationType.Comment) {
|
||||
ModuleConfig memory parentConfig = _moduleConfig[pub.pointedProfileId][pub.pointedPubId];
|
||||
if (!parentConfig.setUp) {
|
||||
// Comments cannot restrict degrees of separation, unless the pointed publication has it enabled too.
|
||||
revert OperationDisabled();
|
||||
}
|
||||
originalAuthorProfile = parentConfig.originalAuthorProfile;
|
||||
} else {
|
||||
originalAuthorProfile = uint96(profileId);
|
||||
}
|
||||
|
||||
_moduleConfig[profileId][pubId] = ModuleConfig(
|
||||
true,
|
||||
commentsRestricted,
|
||||
quotesRestricted,
|
||||
mirrorsRestricted,
|
||||
degreesOfSeparation,
|
||||
sourceProfile
|
||||
sourceProfile,
|
||||
originalAuthorProfile
|
||||
);
|
||||
return data;
|
||||
}
|
||||
@@ -114,6 +131,7 @@ contract DegreesOfSeparationReferenceModule is HubRestricted, IReferenceModule {
|
||||
if (config.commentsRestricted) {
|
||||
_validateDegreesOfSeparationRestriction({
|
||||
sourceProfile: config.sourceProfile,
|
||||
originalAuthorProfile: config.originalAuthorProfile,
|
||||
profileId: processCommentParams.profileId,
|
||||
degreesOfSeparation: config.degreesOfSeparation,
|
||||
profilePath: abi.decode(processCommentParams.data, (uint256[]))
|
||||
@@ -136,13 +154,15 @@ contract DegreesOfSeparationReferenceModule is HubRestricted, IReferenceModule {
|
||||
function processQuote(
|
||||
Types.ProcessQuoteParams calldata processQuoteParams
|
||||
) external view override onlyHub returns (bytes memory) {
|
||||
if (_moduleConfig[processQuoteParams.pointedProfileId][processQuoteParams.pointedPubId].quotesRestricted) {
|
||||
ModuleConfig memory config = _moduleConfig[processQuoteParams.pointedProfileId][
|
||||
processQuoteParams.pointedPubId
|
||||
];
|
||||
if (config.quotesRestricted) {
|
||||
_validateDegreesOfSeparationRestriction({
|
||||
sourceProfile: _moduleConfig[processQuoteParams.pointedProfileId][processQuoteParams.pointedPubId]
|
||||
.sourceProfile,
|
||||
sourceProfile: config.sourceProfile,
|
||||
originalAuthorProfile: config.originalAuthorProfile,
|
||||
profileId: processQuoteParams.profileId,
|
||||
degreesOfSeparation: _moduleConfig[processQuoteParams.pointedProfileId][processQuoteParams.pointedPubId]
|
||||
.degreesOfSeparation,
|
||||
degreesOfSeparation: config.degreesOfSeparation,
|
||||
profilePath: abi.decode(processQuoteParams.data, (uint256[]))
|
||||
});
|
||||
}
|
||||
@@ -159,14 +179,15 @@ contract DegreesOfSeparationReferenceModule is HubRestricted, IReferenceModule {
|
||||
function processMirror(
|
||||
Types.ProcessMirrorParams calldata processMirrorParams
|
||||
) external view override onlyHub returns (bytes memory) {
|
||||
if (_moduleConfig[processMirrorParams.pointedProfileId][processMirrorParams.pointedPubId].mirrorsRestricted) {
|
||||
ModuleConfig memory config = _moduleConfig[processMirrorParams.pointedProfileId][
|
||||
processMirrorParams.pointedPubId
|
||||
];
|
||||
if (config.mirrorsRestricted) {
|
||||
_validateDegreesOfSeparationRestriction({
|
||||
sourceProfile: _moduleConfig[processMirrorParams.pointedProfileId][processMirrorParams.pointedPubId]
|
||||
.sourceProfile,
|
||||
sourceProfile: config.sourceProfile,
|
||||
originalAuthorProfile: config.originalAuthorProfile,
|
||||
profileId: processMirrorParams.profileId,
|
||||
degreesOfSeparation: _moduleConfig[processMirrorParams.pointedProfileId][
|
||||
processMirrorParams.pointedPubId
|
||||
].degreesOfSeparation,
|
||||
degreesOfSeparation: config.degreesOfSeparation,
|
||||
profilePath: abi.decode(processMirrorParams.data, (uint256[]))
|
||||
});
|
||||
}
|
||||
@@ -203,20 +224,24 @@ contract DegreesOfSeparationReferenceModule is HubRestricted, IReferenceModule {
|
||||
*/
|
||||
function _validateDegreesOfSeparationRestriction(
|
||||
uint256 sourceProfile,
|
||||
uint256 originalAuthorProfile,
|
||||
uint256 profileId,
|
||||
uint8 degreesOfSeparation,
|
||||
uint256[] memory profilePath
|
||||
) internal view {
|
||||
// Unrestricted if the profile authoring the publication is the source or the original author profile.
|
||||
if (profileId == sourceProfile || profileId == originalAuthorProfile) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Here we only have cases where the source profile is not the same as the profile authoring the new publication.
|
||||
if (degreesOfSeparation == 0) {
|
||||
// If `degreesOfSeparation` was set to zero, only `sourceProfile` is allowed to interact.
|
||||
if (profileId == sourceProfile) {
|
||||
return;
|
||||
} else {
|
||||
revert OperationDisabled();
|
||||
}
|
||||
revert OperationDisabled();
|
||||
} else if (profilePath.length > degreesOfSeparation - 1) {
|
||||
revert ProfilePathExceedsDegreesOfSeparation();
|
||||
}
|
||||
|
||||
if (profilePath.length > 0) {
|
||||
// Checks that the source profile follows the first profile in the path.
|
||||
// In the previous notation: sourceProfile --> path[0]
|
||||
|
||||
@@ -49,7 +49,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
bool quotesRestricted,
|
||||
bool mirrorsRestricted,
|
||||
uint8 degreesOfSeparation,
|
||||
uint128 sourceProfile
|
||||
uint96 sourceProfile
|
||||
) private pure returns (bytes memory) {
|
||||
return abi.encode(commentsRestricted, quotesRestricted, mirrorsRestricted, degreesOfSeparation, sourceProfile);
|
||||
}
|
||||
@@ -70,7 +70,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
}
|
||||
@@ -90,7 +90,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: unallowedDegreesValue,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
}
|
||||
@@ -104,7 +104,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
module.initializeReferenceModule(originalPublisher.profileId, 1, originalPublisher.owner, wrongData);
|
||||
}
|
||||
|
||||
function testCannotInitialize_IfSourceProfileDoesNotExist(uint128 unexistentProfileId) public {
|
||||
function testCannotInitialize_IfSourceProfileDoesNotExist(uint96 unexistentProfileId) public {
|
||||
vm.assume(!hub.exists(unexistentProfileId));
|
||||
|
||||
vm.expectRevert(Errors.TokenDoesNotExist.selector);
|
||||
@@ -142,7 +142,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: quotesRestricted,
|
||||
mirrorsRestricted: mirrorsRestricted,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -153,7 +153,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
assertEq(config.quotesRestricted, quotesRestricted);
|
||||
assertEq(config.mirrorsRestricted, mirrorsRestricted);
|
||||
assertEq(config.degreesOfSeparation, degrees);
|
||||
assertEq(config.sourceProfile, uint128(originalPublisher.profileId));
|
||||
assertEq(config.sourceProfile, uint96(originalPublisher.profileId));
|
||||
}
|
||||
|
||||
function testCannotProcessComment_IfDegreesOfSeparationRestrictionIsNotMet_PathLength(uint8 degrees) public {
|
||||
@@ -171,7 +171,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: false,
|
||||
mirrorsRestricted: false,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -189,7 +189,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -226,7 +226,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: false,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -244,7 +244,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -281,7 +281,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: false,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -299,7 +299,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: false,
|
||||
mirrorsRestricted: false,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -338,7 +338,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -356,7 +356,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -395,7 +395,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -413,7 +413,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -452,7 +452,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -470,7 +470,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -509,7 +509,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -527,7 +527,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -566,7 +566,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -584,7 +584,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -623,7 +623,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -641,7 +641,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -677,7 +677,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
// quotesRestricted: true,
|
||||
// mirrorsRestricted: true,
|
||||
// degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
// sourceProfile: uint128(originalPublisher.profileId)
|
||||
// sourceProfile: uint96(originalPublisher.profileId)
|
||||
// })
|
||||
// );
|
||||
|
||||
@@ -700,7 +700,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
// quotesRestricted: true,
|
||||
// mirrorsRestricted: true,
|
||||
// degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
// sourceProfile: uint128(originalPublisher.profileId)
|
||||
// sourceProfile: uint96(originalPublisher.profileId)
|
||||
// })
|
||||
// );
|
||||
|
||||
@@ -736,7 +736,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
// quotesRestricted: true,
|
||||
// mirrorsRestricted: true,
|
||||
// degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
// sourceProfile: uint128(originalPublisher.profileId)
|
||||
// sourceProfile: uint96(originalPublisher.profileId)
|
||||
// })
|
||||
// );
|
||||
|
||||
@@ -759,7 +759,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
// quotesRestricted: true,
|
||||
// mirrorsRestricted: true,
|
||||
// degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
// sourceProfile: uint128(originalPublisher.profileId)
|
||||
// sourceProfile: uint96(originalPublisher.profileId)
|
||||
// })
|
||||
// );
|
||||
|
||||
@@ -795,7 +795,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
// quotesRestricted: true,
|
||||
// mirrorsRestricted: true,
|
||||
// degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
// sourceProfile: uint128(originalPublisher.profileId)
|
||||
// sourceProfile: uint96(originalPublisher.profileId)
|
||||
// })
|
||||
// );
|
||||
|
||||
@@ -818,7 +818,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
// quotesRestricted: true,
|
||||
// mirrorsRestricted: true,
|
||||
// degreesOfSeparation: MAX_DEGREES_OF_SEPARATION,
|
||||
// sourceProfile: uint128(originalPublisher.profileId)
|
||||
// sourceProfile: uint96(originalPublisher.profileId)
|
||||
// })
|
||||
// );
|
||||
|
||||
@@ -854,7 +854,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -893,7 +893,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -910,7 +910,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -934,11 +934,11 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
|
||||
function testCannotProcessComment_IfNotInheritingConfig_WrongSourceProfile(
|
||||
uint8 degrees,
|
||||
uint128 wrongSourceProfile
|
||||
uint96 wrongSourceProfile
|
||||
) public {
|
||||
degrees = uint8(bound(degrees, 1, MAX_DEGREES_OF_SEPARATION));
|
||||
vm.assume(hub.exists(wrongSourceProfile));
|
||||
vm.assume(wrongSourceProfile != uint128(originalPublisher.profileId));
|
||||
vm.assume(wrongSourceProfile != uint96(originalPublisher.profileId));
|
||||
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 1)
|
||||
vm.prank(hubAddress);
|
||||
@@ -951,7 +951,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1006,7 +1006,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1023,7 +1023,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: wrongDegrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1059,7 +1059,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1098,7 +1098,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1137,7 +1137,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1176,7 +1176,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: false,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1215,7 +1215,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: false,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: degrees,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1252,7 +1252,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1267,7 +1267,55 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
_mockLensHubPubCountResponse({account: originalPublisher, pubCount: 2});
|
||||
|
||||
vm.prank(hubAddress);
|
||||
module.processComment(
|
||||
Types.ProcessCommentParams({
|
||||
profileId: originalPublisher.profileId,
|
||||
transactionExecutor: originalPublisher.owner,
|
||||
pointedProfileId: originalPublisher.profileId,
|
||||
pointedPubId: 1,
|
||||
referrerProfileIds: _emptyUint256Array(),
|
||||
referrerPubIds: _emptyUint256Array(),
|
||||
referrerPubTypes: _emptyPubTypesArray(),
|
||||
data: abi.encode(_emptyUint256Array())
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function testProcessComment_WhenRestricted_ButCurrentPublisherIsSourceProfile() public {
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 1)
|
||||
vm.prank(hubAddress);
|
||||
module.initializeReferenceModule(
|
||||
originalPublisher.profileId,
|
||||
1,
|
||||
originalPublisher.owner,
|
||||
_getInitData({
|
||||
commentsRestricted: true,
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 2,
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 2)
|
||||
vm.prank(hubAddress);
|
||||
module.initializeReferenceModule(
|
||||
originalPublisher.profileId,
|
||||
2,
|
||||
originalPublisher.owner,
|
||||
_getInitData({
|
||||
commentsRestricted: true,
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 2,
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1300,7 +1348,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1315,7 +1363,55 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
_mockLensHubPubCountResponse({account: originalPublisher, pubCount: 2});
|
||||
|
||||
vm.prank(hubAddress);
|
||||
module.processMirror(
|
||||
Types.ProcessMirrorParams({
|
||||
profileId: originalPublisher.profileId,
|
||||
transactionExecutor: originalPublisher.owner,
|
||||
pointedProfileId: originalPublisher.profileId,
|
||||
pointedPubId: 1,
|
||||
referrerProfileIds: _emptyUint256Array(),
|
||||
referrerPubIds: _emptyUint256Array(),
|
||||
referrerPubTypes: _emptyPubTypesArray(),
|
||||
data: abi.encode(_emptyUint256Array())
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function testProcessMirror_WhenRestricted_ButCurrentPublisherIsSourceProfile() public {
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 1)
|
||||
vm.prank(hubAddress);
|
||||
module.initializeReferenceModule(
|
||||
originalPublisher.profileId,
|
||||
1,
|
||||
originalPublisher.owner,
|
||||
_getInitData({
|
||||
commentsRestricted: true,
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 2,
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 2)
|
||||
vm.prank(hubAddress);
|
||||
module.initializeReferenceModule(
|
||||
originalPublisher.profileId,
|
||||
2,
|
||||
originalPublisher.owner,
|
||||
_getInitData({
|
||||
commentsRestricted: true,
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 2,
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1348,7 +1444,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1363,7 +1459,55 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
_mockLensHubPubCountResponse({account: originalPublisher, pubCount: 2});
|
||||
|
||||
vm.prank(hubAddress);
|
||||
module.processQuote(
|
||||
Types.ProcessQuoteParams({
|
||||
profileId: originalPublisher.profileId,
|
||||
transactionExecutor: originalPublisher.owner,
|
||||
pointedProfileId: originalPublisher.profileId,
|
||||
pointedPubId: 1,
|
||||
referrerProfileIds: _emptyUint256Array(),
|
||||
referrerPubIds: _emptyUint256Array(),
|
||||
referrerPubTypes: _emptyPubTypesArray(),
|
||||
data: abi.encode(_emptyUint256Array())
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function testProcessQuote_WhenRestricted_ButCurrentPublisherIsSourceProfile() public {
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 1)
|
||||
vm.prank(hubAddress);
|
||||
module.initializeReferenceModule(
|
||||
originalPublisher.profileId,
|
||||
1,
|
||||
originalPublisher.owner,
|
||||
_getInitData({
|
||||
commentsRestricted: true,
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 2,
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
// Initializes module for (profile: originalPublisher.profileId, pubId: 2)
|
||||
vm.prank(hubAddress);
|
||||
module.initializeReferenceModule(
|
||||
originalPublisher.profileId,
|
||||
2,
|
||||
originalPublisher.owner,
|
||||
_getInitData({
|
||||
commentsRestricted: true,
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 2,
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1396,7 +1540,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1414,7 +1558,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1448,7 +1592,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1466,7 +1610,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1500,7 +1644,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1518,7 +1662,7 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
quotesRestricted: true,
|
||||
mirrorsRestricted: true,
|
||||
degreesOfSeparation: 0,
|
||||
sourceProfile: uint128(originalPublisher.profileId)
|
||||
sourceProfile: uint96(originalPublisher.profileId)
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1540,6 +1684,11 @@ contract DegreesOfSeparationReferenceModuleTest is BaseTest {
|
||||
);
|
||||
}
|
||||
|
||||
// TODO - test the new logic:
|
||||
// - if the current publisher is the originalAuthor or source profile, then it can reply without restrictions
|
||||
// - you cannot init degrees on a comment, only on post and quote
|
||||
// etc
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function _mockLensHubPubCountResponse(TestAccount memory account, uint256 pubCount) internal {
|
||||
|
||||
Reference in New Issue
Block a user