mirror of
https://github.com/lens-protocol/core.git
synced 2026-04-22 03:02:03 -04:00
feat: Updated mirror with sig to follow new standard, fixed mirror tests.
This commit is contained in:
@@ -326,24 +326,20 @@ library PublishingLib {
|
||||
address executor,
|
||||
uint256 pubId
|
||||
) private {
|
||||
// Prevents stack too deep.
|
||||
{
|
||||
uint256 pubCountPointed = _getPubCount(vars.profileIdPointed);
|
||||
if (pubCountPointed < vars.pubIdPointed || vars.pubIdPointed == 0)
|
||||
revert Errors.PublicationDoesNotExist();
|
||||
}
|
||||
(uint256 rootProfileIdPointed, uint256 rootPubIdPointed) = GeneralHelpers
|
||||
.getPointedIfMirror(vars.profileIdPointed, vars.pubIdPointed);
|
||||
|
||||
if (vars.profileId == vars.profileIdPointed && vars.pubIdPointed == pubId)
|
||||
revert Errors.CannotCommentOnSelf();
|
||||
|
||||
_setPublicationPointer(vars.profileId, pubId, vars.profileIdPointed, vars.pubIdPointed);
|
||||
_setPublicationPointer(vars.profileId, pubId, rootProfileIdPointed, rootPubIdPointed);
|
||||
_setPublicationContentURI(vars.profileId, pubId, vars.contentURI);
|
||||
|
||||
address referenceModule = vars.referenceModule;
|
||||
address collectModule = vars.collectModule;
|
||||
|
||||
bytes memory collectModuleReturnData = _initPubCollectModule(
|
||||
vars.profileId,
|
||||
executor,
|
||||
pubId,
|
||||
vars.collectModule,
|
||||
collectModule,
|
||||
vars.collectModuleInitData
|
||||
);
|
||||
|
||||
@@ -351,15 +347,15 @@ library PublishingLib {
|
||||
vars.profileId,
|
||||
executor,
|
||||
pubId,
|
||||
vars.referenceModule,
|
||||
referenceModule,
|
||||
vars.referenceModuleInitData
|
||||
);
|
||||
|
||||
_processCommentIfNeeded(
|
||||
vars.profileId,
|
||||
executor,
|
||||
vars.profileIdPointed,
|
||||
vars.pubIdPointed,
|
||||
rootProfileIdPointed,
|
||||
rootPubIdPointed,
|
||||
vars.referenceModuleData
|
||||
);
|
||||
|
||||
@@ -367,12 +363,12 @@ library PublishingLib {
|
||||
vars.profileId,
|
||||
pubId,
|
||||
vars.contentURI,
|
||||
vars.profileIdPointed,
|
||||
vars.pubIdPointed,
|
||||
rootProfileIdPointed,
|
||||
rootPubIdPointed,
|
||||
vars.referenceModuleData,
|
||||
vars.collectModule,
|
||||
collectModule,
|
||||
collectModuleReturnData,
|
||||
vars.referenceModule,
|
||||
referenceModule,
|
||||
referenceModuleReturnData,
|
||||
block.timestamp
|
||||
);
|
||||
|
||||
@@ -76,7 +76,7 @@ contract PublishingTest_Post is BaseTest, SignatureHelpers, PublishingHelpers, S
|
||||
_publish();
|
||||
}
|
||||
|
||||
function testCannotPublishNotWhitelistedReferenceModule() public {
|
||||
function testCannotPublishNotWhitelistedReferenceModule() public virtual {
|
||||
mockPostData.referenceModule = address(0xC0FFEE);
|
||||
replicateInitData();
|
||||
vm.prank(profileOwner);
|
||||
@@ -91,7 +91,7 @@ contract PublishingTest_Post is BaseTest, SignatureHelpers, PublishingHelpers, S
|
||||
_publishWithSig({delegatedSigner: address(0), signerPrivKey: profileOwnerKey});
|
||||
}
|
||||
|
||||
function testCannotPublishWithSigNotWhitelistedReferenceModule() public {
|
||||
function testCannotPublishWithSigNotWhitelistedReferenceModule() public virtual {
|
||||
mockPostData.referenceModule = address(0xC0FFEE);
|
||||
replicateInitData();
|
||||
vm.expectRevert(Errors.ReferenceModuleNotWhitelisted.selector);
|
||||
@@ -300,7 +300,7 @@ contract PublishingTest_Comment is PublishingTest_Post {
|
||||
mockCommentData.pubIdPointed = nextPubId;
|
||||
|
||||
vm.prank(profileOwner);
|
||||
vm.expectRevert(Errors.CannotCommentOnSelf.selector);
|
||||
vm.expectRevert(Errors.PublicationDoesNotExist.selector);
|
||||
_publish();
|
||||
}
|
||||
|
||||
@@ -310,7 +310,7 @@ contract PublishingTest_Comment is PublishingTest_Post {
|
||||
replicateInitData();
|
||||
mockCommentData.pubIdPointed = nextPubId;
|
||||
|
||||
vm.expectRevert(Errors.CannotCommentOnSelf.selector);
|
||||
vm.expectRevert(Errors.PublicationDoesNotExist.selector);
|
||||
_publishWithSig({delegatedSigner: address(0), signerPrivKey: profileOwnerKey});
|
||||
}
|
||||
|
||||
@@ -328,6 +328,36 @@ contract PublishingTest_Comment is PublishingTest_Post {
|
||||
DataTypes.PublicationStruct memory pub = _getPub(firstProfileId, commentPubId);
|
||||
_verifyPublication(pub, _expectedPubFromInitData());
|
||||
}
|
||||
|
||||
function testCommentOnMirrorShouldPointToOriginalPost() public {
|
||||
mockMirrorData.pubIdPointed = postId;
|
||||
vm.prank(profileOwner);
|
||||
uint256 mirrorId = _mirror(mockMirrorData);
|
||||
|
||||
mockCommentData.pubIdPointed = mirrorId;
|
||||
vm.prank(profileOwner);
|
||||
uint256 commentId = _publish();
|
||||
|
||||
DataTypes.PublicationStruct memory pub = _getPub(firstProfileId, commentId);
|
||||
mockCommentData.pubIdPointed = postId; // We're expecting a mirror to point at the original post ID
|
||||
_verifyPublication(pub, _expectedPubFromInitData(mockCommentData));
|
||||
}
|
||||
|
||||
function testCommentWithSigOnMirrorShouldPointToOriginalPost() public {
|
||||
mockMirrorData.pubIdPointed = postId;
|
||||
vm.prank(profileOwner);
|
||||
uint256 mirrorId = _mirror(mockMirrorData);
|
||||
|
||||
mockCommentData.pubIdPointed = mirrorId;
|
||||
uint256 commentId = _publishWithSig({
|
||||
delegatedSigner: address(0),
|
||||
signerPrivKey: profileOwnerKey
|
||||
});
|
||||
|
||||
DataTypes.PublicationStruct memory pub = _getPub(firstProfileId, commentId);
|
||||
mockCommentData.pubIdPointed = postId; // We're expecting a mirror to point at the original post ID
|
||||
_verifyPublication(pub, _expectedPubFromInitData(mockCommentData));
|
||||
}
|
||||
}
|
||||
|
||||
contract PublishingTest_Mirror is PublishingTest_Post {
|
||||
@@ -335,8 +365,6 @@ contract PublishingTest_Mirror is PublishingTest_Post {
|
||||
|
||||
function replicateInitData() internal override {
|
||||
mockMirrorData.profileId = mockPostData.profileId;
|
||||
mockMirrorData.referenceModule = mockPostData.referenceModule;
|
||||
mockMirrorData.referenceModuleInitData = mockPostData.referenceModuleInitData;
|
||||
}
|
||||
|
||||
function _publish() internal override returns (uint256) {
|
||||
@@ -382,6 +410,10 @@ contract PublishingTest_Mirror is PublishingTest_Post {
|
||||
|
||||
function testCannotPublishWithSigNotWhitelistedCollectModule() public override {}
|
||||
|
||||
function testCannotPublishNotWhitelistedReferenceModule() public override {}
|
||||
|
||||
function testCannotPublishWithSigNotWhitelistedReferenceModule() public override {}
|
||||
|
||||
// negatives
|
||||
|
||||
function testCannotMirrorNonExistentPublication() public {
|
||||
|
||||
@@ -213,8 +213,6 @@ contract BaseTest is TestSetup {
|
||||
uint256 profileIdPointed,
|
||||
uint256 pubIdPointed,
|
||||
bytes memory referenceModuleData,
|
||||
address referenceModule,
|
||||
bytes memory referenceModuleInitData,
|
||||
uint256 nonce,
|
||||
uint256 deadline
|
||||
) internal view returns (bytes32) {
|
||||
@@ -225,8 +223,6 @@ contract BaseTest is TestSetup {
|
||||
profileIdPointed,
|
||||
pubIdPointed,
|
||||
keccak256(referenceModuleData),
|
||||
referenceModule,
|
||||
keccak256(referenceModuleInitData),
|
||||
nonce,
|
||||
deadline
|
||||
)
|
||||
@@ -245,8 +241,6 @@ contract BaseTest is TestSetup {
|
||||
profileIdPointed: mirrorData.profileIdPointed,
|
||||
pubIdPointed: mirrorData.pubIdPointed,
|
||||
referenceModuleData: mirrorData.referenceModuleData,
|
||||
referenceModule: mirrorData.referenceModule,
|
||||
referenceModuleInitData: mirrorData.referenceModuleInitData,
|
||||
nonce: nonce,
|
||||
deadline: deadline
|
||||
});
|
||||
|
||||
@@ -145,9 +145,7 @@ contract TestSetup is Test {
|
||||
profileId: firstProfileId,
|
||||
profileIdPointed: firstProfileId,
|
||||
pubIdPointed: 1,
|
||||
referenceModuleData: '',
|
||||
referenceModule: address(0),
|
||||
referenceModuleInitData: ''
|
||||
referenceModuleData: ''
|
||||
});
|
||||
|
||||
hub.createProfile(mockCreateProfileData);
|
||||
|
||||
@@ -24,9 +24,20 @@ struct OldCreateProfileData {
|
||||
string followNFTURI;
|
||||
}
|
||||
|
||||
struct OldMirrorData {
|
||||
uint256 profileId;
|
||||
uint256 profileIdPointed;
|
||||
uint256 pubIdPointed;
|
||||
bytes referenceModuleData;
|
||||
address referenceModule;
|
||||
bytes referenceModuleInitData;
|
||||
}
|
||||
|
||||
interface IOldHub {
|
||||
function createProfile(OldCreateProfileData memory vars) external returns (uint256);
|
||||
|
||||
function mirror(OldMirrorData memory vars) external returns (uint256);
|
||||
|
||||
function follow(uint256[] calldata profileIds, bytes[] calldata datas) external;
|
||||
|
||||
function collect(
|
||||
@@ -145,15 +156,6 @@ contract UpgradeForkTest is BaseTest {
|
||||
vm.prank(gov);
|
||||
hub.whitelistFollowModule(mockDeprecatedFollowModule, true);
|
||||
|
||||
// precompute basic profile creaton data.
|
||||
mockCreateProfileData = DataTypes.CreateProfileData({
|
||||
to: me,
|
||||
imageURI: mockURI,
|
||||
followModule: address(0),
|
||||
followModuleInitData: abi.encode(1),
|
||||
followNFTURI: mockURI
|
||||
});
|
||||
|
||||
OldCreateProfileData memory oldCreateProfileData = OldCreateProfileData(
|
||||
mockCreateProfileData.to,
|
||||
vm.toString((IERC721Enumerable(address(hub)).totalSupply())),
|
||||
@@ -204,7 +206,6 @@ contract UpgradeForkTest is BaseTest {
|
||||
|
||||
mockCommentData.collectModule = mockCollectModuleAddr;
|
||||
mockCommentData.referenceModule = mockReferenceModuleAddr;
|
||||
mockMirrorData.referenceModule = mockReferenceModuleAddr;
|
||||
|
||||
// Validate post.
|
||||
assertEq(postId, 1);
|
||||
@@ -238,7 +239,7 @@ contract UpgradeForkTest is BaseTest {
|
||||
assertEq(pub.profileIdPointed, mockMirrorData.profileIdPointed);
|
||||
assertEq(pub.pubIdPointed, mockMirrorData.pubIdPointed);
|
||||
assertEq(pub.contentURI, '');
|
||||
assertEq(pub.referenceModule, mockMirrorData.referenceModule);
|
||||
assertEq(pub.referenceModule, address(0));
|
||||
assertEq(pub.collectModule, address(0));
|
||||
assertEq(pub.collectNFT, address(0));
|
||||
} catch {
|
||||
@@ -285,8 +286,16 @@ contract UpgradeForkTest is BaseTest {
|
||||
assertEq(pub.collectNFT, address(0));
|
||||
|
||||
// Mirror.
|
||||
mockMirrorData.referenceModule = mockDeprecatedReferenceModule;
|
||||
uint256 mirrorId = hub.mirror(mockMirrorData);
|
||||
OldMirrorData memory oldMirrorData = OldMirrorData({
|
||||
profileId: mockMirrorData.profileId,
|
||||
profileIdPointed: mockMirrorData.profileIdPointed,
|
||||
pubIdPointed: mockMirrorData.pubIdPointed,
|
||||
referenceModuleData: mockMirrorData.referenceModuleData,
|
||||
referenceModule: mockDeprecatedReferenceModule,
|
||||
referenceModuleInitData: mockCommentData.referenceModuleInitData
|
||||
});
|
||||
|
||||
uint256 mirrorId = IOldHub(address(hub)).mirror(oldMirrorData);
|
||||
|
||||
// Validate mirror.
|
||||
assertEq(mirrorId, 3);
|
||||
@@ -294,7 +303,7 @@ contract UpgradeForkTest is BaseTest {
|
||||
assertEq(pub.profileIdPointed, mockMirrorData.profileIdPointed);
|
||||
assertEq(pub.pubIdPointed, mockMirrorData.pubIdPointed);
|
||||
assertEq(pub.contentURI, '');
|
||||
assertEq(pub.referenceModule, mockMirrorData.referenceModule);
|
||||
assertEq(pub.referenceModule, mockDeprecatedReferenceModule);
|
||||
assertEq(pub.collectModule, address(0));
|
||||
assertEq(pub.collectNFT, address(0));
|
||||
}
|
||||
@@ -407,9 +416,7 @@ contract UpgradeForkTest is BaseTest {
|
||||
profileId: 0,
|
||||
profileIdPointed: firstProfileId,
|
||||
pubIdPointed: 1,
|
||||
referenceModuleData: '',
|
||||
referenceModule: address(0),
|
||||
referenceModuleInitData: abi.encode(1)
|
||||
referenceModuleData: ''
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,12 +6,12 @@ contract PublishingHelpers is Test {
|
||||
DataTypes.PublicationStruct memory pub,
|
||||
DataTypes.PublicationStruct memory expectedPub
|
||||
) internal {
|
||||
assertEq(pub.profileIdPointed, expectedPub.profileIdPointed);
|
||||
assertEq(pub.pubIdPointed, expectedPub.pubIdPointed);
|
||||
assertEq(pub.contentURI, expectedPub.contentURI);
|
||||
assertEq(pub.referenceModule, expectedPub.referenceModule);
|
||||
assertEq(pub.collectModule, expectedPub.collectModule);
|
||||
assertEq(pub.collectNFT, expectedPub.collectNFT);
|
||||
assertEq(pub.profileIdPointed, expectedPub.profileIdPointed, 'Unexpected profileIdPointed');
|
||||
assertEq(pub.pubIdPointed, expectedPub.pubIdPointed, 'Unexpected pubIdPointed');
|
||||
assertEq(pub.contentURI, expectedPub.contentURI, 'Unexpected contentURI');
|
||||
assertEq(pub.referenceModule, expectedPub.referenceModule, 'Unexpected referenceModule');
|
||||
assertEq(pub.collectModule, expectedPub.collectModule, 'Unexpected collectModule');
|
||||
assertEq(pub.collectNFT, expectedPub.collectNFT, 'Unexpected collectNFT');
|
||||
}
|
||||
|
||||
function _expectedPubFromInitData(DataTypes.PostData memory postData)
|
||||
@@ -56,7 +56,7 @@ contract PublishingHelpers is Test {
|
||||
profileIdPointed: mirrorData.profileIdPointed,
|
||||
pubIdPointed: mirrorData.pubIdPointed,
|
||||
contentURI: '',
|
||||
referenceModule: mirrorData.referenceModule,
|
||||
referenceModule: address(0),
|
||||
collectModule: address(0),
|
||||
collectNFT: address(0)
|
||||
});
|
||||
|
||||
@@ -99,8 +99,6 @@ contract SignatureHelpers {
|
||||
uint256 profileIdPointed,
|
||||
uint256 pubIdPointed,
|
||||
bytes memory referenceModuleData,
|
||||
address referenceModule,
|
||||
bytes memory referenceModuleInitData,
|
||||
DataTypes.EIP712Signature memory sig
|
||||
) internal pure returns (DataTypes.MirrorWithSigData memory) {
|
||||
return
|
||||
@@ -110,8 +108,6 @@ contract SignatureHelpers {
|
||||
profileIdPointed,
|
||||
pubIdPointed,
|
||||
referenceModuleData,
|
||||
referenceModule,
|
||||
referenceModuleInitData,
|
||||
sig
|
||||
);
|
||||
}
|
||||
@@ -128,8 +124,6 @@ contract SignatureHelpers {
|
||||
profileIdPointed: mirrorData.profileIdPointed,
|
||||
pubIdPointed: mirrorData.pubIdPointed,
|
||||
referenceModuleData: mirrorData.referenceModuleData,
|
||||
referenceModule: mirrorData.referenceModule,
|
||||
referenceModuleInitData: mirrorData.referenceModuleInitData,
|
||||
sig: sig
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user