mirror of
https://github.com/lens-protocol/core.git
synced 2026-01-11 15:18:08 -05:00
70 lines
3.1 KiB
Solidity
70 lines
3.1 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity ^0.8.15;
|
|
|
|
import {Types} from 'contracts/libraries/constants/Types.sol';
|
|
import {StorageLib} from 'contracts/libraries/StorageLib.sol';
|
|
import {ValidationLib} from 'contracts/libraries/ValidationLib.sol';
|
|
import {IPublicationActionModule} from 'contracts/interfaces/IPublicationActionModule.sol';
|
|
import {Errors} from 'contracts/libraries/constants/Errors.sol';
|
|
import {Events} from 'contracts/libraries/constants/Events.sol';
|
|
|
|
library ActionLib {
|
|
function act(
|
|
Types.PublicationActionParams calldata publicationActionParams,
|
|
address transactionExecutor,
|
|
address actorProfileOwner
|
|
) external returns (bytes memory) {
|
|
ValidationLib.validateNotBlocked({
|
|
profile: publicationActionParams.actorProfileId,
|
|
byProfile: publicationActionParams.publicationActedProfileId
|
|
});
|
|
|
|
Types.Publication storage _actedOnPublication = StorageLib.getPublication(
|
|
publicationActionParams.publicationActedProfileId,
|
|
publicationActionParams.publicationActedId
|
|
);
|
|
|
|
if (!_isActionEnabled(_actedOnPublication, publicationActionParams.actionModuleAddress)) {
|
|
// This will also revert for:
|
|
// - Non-existent action modules
|
|
// - Non-existent publications
|
|
// - Legacy V1 publications
|
|
// Because the storage will be empty.
|
|
revert Errors.ActionNotAllowed();
|
|
}
|
|
|
|
Types.PublicationType[] memory referrerPubTypes = ValidationLib.validateReferrersAndGetReferrersPubTypes(
|
|
publicationActionParams.referrerProfileIds,
|
|
publicationActionParams.referrerPubIds,
|
|
publicationActionParams.publicationActedProfileId,
|
|
publicationActionParams.publicationActedId
|
|
);
|
|
|
|
bytes memory actionModuleReturnData = IPublicationActionModule(publicationActionParams.actionModuleAddress)
|
|
.processPublicationAction(
|
|
Types.ProcessActionParams({
|
|
publicationActedProfileId: publicationActionParams.publicationActedProfileId,
|
|
publicationActedId: publicationActionParams.publicationActedId,
|
|
actorProfileId: publicationActionParams.actorProfileId,
|
|
actorProfileOwner: actorProfileOwner,
|
|
transactionExecutor: transactionExecutor,
|
|
referrerProfileIds: publicationActionParams.referrerProfileIds,
|
|
referrerPubIds: publicationActionParams.referrerPubIds,
|
|
referrerPubTypes: referrerPubTypes,
|
|
actionModuleData: publicationActionParams.actionModuleData
|
|
})
|
|
);
|
|
emit Events.Acted(publicationActionParams, actionModuleReturnData, transactionExecutor, block.timestamp);
|
|
|
|
return actionModuleReturnData;
|
|
}
|
|
|
|
function _isActionEnabled(
|
|
Types.Publication storage _publication,
|
|
address actionModuleAddress
|
|
) private view returns (bool) {
|
|
return _publication.actionModuleEnabled[actionModuleAddress];
|
|
}
|
|
}
|