feat: Updated mirror with sig to follow new standard, fixed mirror tests.

This commit is contained in:
zer0dot
2022-11-09 13:45:00 +00:00
parent 450ef3b6ae
commit b6d0eebb9b
7 changed files with 84 additions and 63 deletions

View File

@@ -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
);

View File

@@ -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 {

View File

@@ -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
});

View File

@@ -145,9 +145,7 @@ contract TestSetup is Test {
profileId: firstProfileId,
profileIdPointed: firstProfileId,
pubIdPointed: 1,
referenceModuleData: '',
referenceModule: address(0),
referenceModuleInitData: ''
referenceModuleData: ''
});
hub.createProfile(mockCreateProfileData);

View File

@@ -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: ''
});
}
}

View File

@@ -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)
});

View File

@@ -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
});
}