mirror of
https://github.com/lens-protocol/core.git
synced 2026-04-22 03:02:03 -04:00
feat: Executor permissions validation moved to LensHub when following
This commit is contained in:
@@ -72,7 +72,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
}
|
||||
@@ -85,7 +84,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: alreadyFollowingProfileId,
|
||||
executor: alreadyFollowingProfileOwner,
|
||||
followerProfileOwner: alreadyFollowingProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
}
|
||||
@@ -104,7 +102,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: unexistentTokenId
|
||||
});
|
||||
}
|
||||
@@ -113,25 +110,7 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
// Follow - Minting new token - Negatives
|
||||
//////////////////////////////////////////////////////////
|
||||
|
||||
function testCannotFollowMintingNewTokenIfExecutorIsNotTheProfileOwnerOrHisApprovedExecutor(
|
||||
address executor
|
||||
) public {
|
||||
vm.assume(executor != followerProfileOwner);
|
||||
vm.assume(executor != address(0));
|
||||
vm.assume(!hub.isDelegatedExecutorApproved(followerProfileOwner, executor));
|
||||
|
||||
vm.prank(address(hub));
|
||||
|
||||
vm.expectRevert(IFollowNFT.DoesNotHavePermissions.selector);
|
||||
|
||||
followNFT.follow({
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executor,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
}
|
||||
// No negatives when minting a new token, all the failing cases will occur at LensHub level. See `FollowTest.t.sol`.
|
||||
|
||||
//////////////////////////////////////////////////////////
|
||||
// Follow - Minting new token - Scenarios
|
||||
@@ -144,7 +123,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
|
||||
@@ -158,7 +136,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
|
||||
@@ -179,7 +156,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
|
||||
@@ -198,7 +174,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
|
||||
@@ -231,7 +206,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executor,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
}
|
||||
@@ -252,7 +226,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: alreadyFollowingProfileOwner,
|
||||
followerProfileOwner: alreadyFollowingProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -273,7 +246,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: alreadyFollowingProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: true,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -298,7 +270,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -327,7 +298,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executorAsApprovedDelegatee,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: true,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -362,7 +332,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executor,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
}
|
||||
@@ -388,7 +357,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -418,7 +386,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executorAsApprovedDelegatee,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: true,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -452,7 +419,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executorAsApprovedDelegatee,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: true,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -479,7 +445,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -510,7 +475,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executorAsApprovedDelegatee,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: true,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -538,7 +502,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -570,7 +533,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: executorAsApprovedDelegatee,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: true,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -606,7 +568,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: alreadyFollowingProfileId,
|
||||
executor: alreadyFollowingProfileOwner,
|
||||
followerProfileOwner: alreadyFollowingProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: followTokenId
|
||||
});
|
||||
|
||||
@@ -890,7 +851,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
|
||||
@@ -1025,7 +985,6 @@ contract FollowNFTTest is BaseTest, ERC721Test {
|
||||
followerProfileId: followerProfileId,
|
||||
executor: followerProfileOwner,
|
||||
followerProfileOwner: followerProfileOwner,
|
||||
isExecutorApproved: false,
|
||||
followTokenId: MINT_NEW_TOKEN
|
||||
});
|
||||
|
||||
|
||||
@@ -95,6 +95,27 @@ contract FollowTest is BaseTest, AssumptionHelpers {
|
||||
});
|
||||
}
|
||||
|
||||
function testCannotFollowIfExecutorIsNotTheProfileOwnerOrHisApprovedExecutor(uint256 executorPk)
|
||||
public
|
||||
{
|
||||
vm.assume(_isValidPk(executorPk));
|
||||
address executor = vm.addr(executorPk);
|
||||
vm.assume(executor != address(0));
|
||||
vm.assume(executor != followerProfileOwner);
|
||||
vm.assume(!hub.isDelegatedExecutorApproved(followerProfileOwner, executor));
|
||||
|
||||
vm.expectRevert(Errors.ExecutorInvalid.selector);
|
||||
|
||||
_follow({
|
||||
pk: executorPk,
|
||||
isFollowerProfileOwner: false,
|
||||
followerProfileId: followerProfileId,
|
||||
idsOfProfilesToFollow: _toUint256Array(targetProfileId),
|
||||
followTokenIds: _toUint256Array(MINT_NEW_TOKEN),
|
||||
datas: _toBytesArray('', '')
|
||||
});
|
||||
}
|
||||
|
||||
function testCannotFollowIfAmountOfTokenIdsPassedDiffersFromAmountOfProfilesToFollow() public {
|
||||
vm.expectRevert(Errors.ArrayMismatch.selector);
|
||||
|
||||
@@ -235,13 +256,7 @@ contract FollowTest is BaseTest, AssumptionHelpers {
|
||||
targetFollowNFTAddress,
|
||||
abi.encodeCall(
|
||||
followNFT.follow,
|
||||
(
|
||||
followerProfileId,
|
||||
followerProfileOwner,
|
||||
followerProfileOwner,
|
||||
false,
|
||||
MINT_NEW_TOKEN
|
||||
)
|
||||
(followerProfileId, followerProfileOwner, followerProfileOwner, MINT_NEW_TOKEN)
|
||||
)
|
||||
);
|
||||
|
||||
@@ -304,13 +319,7 @@ contract FollowTest is BaseTest, AssumptionHelpers {
|
||||
targetFollowNFTAddress,
|
||||
abi.encodeCall(
|
||||
followNFT.follow,
|
||||
(
|
||||
followerProfileId,
|
||||
approvedDelegatedExecutor,
|
||||
followerProfileOwner,
|
||||
true,
|
||||
MINT_NEW_TOKEN
|
||||
)
|
||||
(followerProfileId, approvedDelegatedExecutor, followerProfileOwner, MINT_NEW_TOKEN)
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ contract SetBlockStatusTest is BaseTest, AssumptionHelpers {
|
||||
vm.prank(statusSetterProfileOwner);
|
||||
hub.burn(statusSetterProfileId);
|
||||
|
||||
vm.expectRevert(Errors.ExecutorInvalid.selector);
|
||||
vm.expectRevert(Errors.TokenDoesNotExist.selector);
|
||||
|
||||
_setBlockStatus({
|
||||
pk: statusSetterProfileOwnerPk,
|
||||
@@ -359,21 +359,6 @@ contract SetBlockStatusMetaTxTest is SetBlockStatusTest, MetaTxNegatives {
|
||||
});
|
||||
}
|
||||
|
||||
function testCannotSetBlockStatusIfSetterProfileDoesNotExist() public override {
|
||||
vm.prank(statusSetterProfileOwner);
|
||||
hub.burn(statusSetterProfileId);
|
||||
|
||||
vm.expectRevert(Errors.SignatureInvalid.selector);
|
||||
|
||||
_setBlockStatus({
|
||||
pk: statusSetterProfileOwnerPk,
|
||||
isStatusSetterProfileOwner: true,
|
||||
byProfileId: statusSetterProfileId,
|
||||
idsOfProfilesToSetBlockStatus: _toUint256Array(blockeeProfileId),
|
||||
blockStatus: _toBoolArray(true)
|
||||
});
|
||||
}
|
||||
|
||||
function testCannotSetBlockStatusIfNotOwnerOrApprovedDelegatedExecutorOfSetterProfile(
|
||||
uint256 nonOwnerNorDelegatedExecutorPk
|
||||
) public override {
|
||||
|
||||
Reference in New Issue
Block a user