mirror of
https://github.com/lens-protocol/core.git
synced 2026-01-10 14:48:15 -05:00
475 lines
20 KiB
Solidity
475 lines
20 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
|
|
pragma solidity >=0.6.0;
|
|
|
|
import {Types} from 'contracts/libraries/constants/Types.sol';
|
|
|
|
/**
|
|
* @title ILensProtocol
|
|
* @author Lens Protocol
|
|
*
|
|
* @notice This is the interface for Lens Protocol's core functions. It contains all the entry points for performing
|
|
* social operations.
|
|
*/
|
|
interface ILensProtocol {
|
|
/**
|
|
* @notice Creates a profile with the specified parameters, minting a Profile NFT to the given recipient.
|
|
* @custom:permissions Any whitelisted profile creator.
|
|
*
|
|
* @param createProfileParams A CreateProfileParams struct containing the needed params.
|
|
*/
|
|
function createProfile(Types.CreateProfileParams calldata createProfileParams) external returns (uint256);
|
|
|
|
/**
|
|
* @notice Sets the metadata URI for the given profile.
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param profileId The token ID of the profile to set the metadata URI for.
|
|
* @param metadataURI The metadata URI to set for the given profile.
|
|
*/
|
|
function setProfileMetadataURI(uint256 profileId, string calldata metadataURI) external;
|
|
|
|
/**
|
|
* @custom:meta-tx setProfileMetadataURI.
|
|
*/
|
|
function setProfileMetadataURIWithSig(
|
|
uint256 profileId,
|
|
string calldata metadataURI,
|
|
Types.EIP712Signature calldata signature
|
|
) external;
|
|
|
|
/**
|
|
* @notice Sets the follow module for the given profile.
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param profileId The token ID of the profile to set the follow module for.
|
|
* @param followModule The follow module to set for the given profile, must be whitelisted.
|
|
* @param followModuleInitData The data to be passed to the follow module for initialization.
|
|
*/
|
|
function setFollowModule(uint256 profileId, address followModule, bytes calldata followModuleInitData) external;
|
|
|
|
/**
|
|
* @custom:meta-tx setFollowModule.
|
|
*/
|
|
function setFollowModuleWithSig(
|
|
uint256 profileId,
|
|
address followModule,
|
|
bytes calldata followModuleInitData,
|
|
Types.EIP712Signature calldata signature
|
|
) external;
|
|
|
|
/**
|
|
* @notice Changes the delegated executors configuration for the given profile. It allows setting the approvals for
|
|
* delegated executors in the specified configuration, as well as switching to it.
|
|
* @custom:permissions Profile Owner.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile to which the delegated executor is being changed for.
|
|
* @param delegatedExecutors The array of delegated executors to set the approval for.
|
|
* @param approvals The array of booleans indicating the corresponding executor's new approval status.
|
|
* @param configNumber The number of the configuration where the executor approval state is being set.
|
|
* @param switchToGivenConfig A boolean indicating if the configuration must be switched to the one with the given
|
|
* number.
|
|
*/
|
|
function changeDelegatedExecutorsConfig(
|
|
uint256 delegatorProfileId,
|
|
address[] calldata delegatedExecutors,
|
|
bool[] calldata approvals,
|
|
uint64 configNumber,
|
|
bool switchToGivenConfig
|
|
) external;
|
|
|
|
/**
|
|
* @notice Changes the delegated executors configuration for the given profile under the current configuration.
|
|
* @custom:permissions Profile Owner.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile to which the delegated executor is being changed for.
|
|
* @param delegatedExecutors The array of delegated executors to set the approval for.
|
|
* @param approvals The array of booleans indicating the corresponding executor's new approval status.
|
|
*/
|
|
function changeDelegatedExecutorsConfig(
|
|
uint256 delegatorProfileId,
|
|
address[] calldata delegatedExecutors,
|
|
bool[] calldata approvals
|
|
) external;
|
|
|
|
/**
|
|
* @custom:meta-tx changeDelegatedExecutorsConfig.
|
|
*/
|
|
function changeDelegatedExecutorsConfigWithSig(
|
|
uint256 delegatorProfileId,
|
|
address[] calldata delegatedExecutors,
|
|
bool[] calldata approvals,
|
|
uint64 configNumber,
|
|
bool switchToGivenConfig,
|
|
Types.EIP712Signature calldata signature
|
|
) external;
|
|
|
|
/**
|
|
* @notice Publishes a post.
|
|
* Post is the most basic publication type, and can be used to publish any kind of content.
|
|
* Posts can have these types of modules initialized:
|
|
* - Action modules: any number of publication actions (e.g. collect, tip, etc.)
|
|
* - Reference module: a module handling the rules when referencing this post (e.g. token-gated comments)
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param postParams A PostParams struct containing the needed parameters.
|
|
*
|
|
* @return uint256 An integer representing the post's publication ID.
|
|
*/
|
|
function post(Types.PostParams calldata postParams) external returns (uint256);
|
|
|
|
/**
|
|
* @custom:meta-tx post.
|
|
*/
|
|
function postWithSig(
|
|
Types.PostParams calldata postParams,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (uint256);
|
|
|
|
/**
|
|
* @notice Publishes a comment on the given publication.
|
|
* Comment is a type of reference publication that points to another publication.
|
|
* Comments can have these types of modules initialized:
|
|
* - Action modules: any number of publication actions (e.g. collect, tip, etc.)
|
|
* - Reference module: a module handling the rules when referencing this comment (e.g. token-gated mirrors)
|
|
* Comments can have referrers (e.g. publications or profiles that helped to discover the pointed publication).
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param commentParams A CommentParams struct containing the needed parameters.
|
|
*
|
|
* @return uint256 An integer representing the comment's publication ID.
|
|
*/
|
|
function comment(Types.CommentParams calldata commentParams) external returns (uint256);
|
|
|
|
/**
|
|
* @custom:meta-tx comment.
|
|
*/
|
|
function commentWithSig(
|
|
Types.CommentParams calldata commentParams,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (uint256);
|
|
|
|
/**
|
|
* @notice Publishes a mirror of the given publication.
|
|
* Mirror is a type of reference publication that points to another publication but doesn't have content.
|
|
* Mirrors don't have any modules initialized.
|
|
* Mirrors can have referrers (e.g. publications or profiles that allowed to discover the pointed publication).
|
|
* You cannot mirror a mirror, comment on a mirror, or quote a mirror.
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param mirrorParams A MirrorParams struct containing the necessary parameters.
|
|
*
|
|
* @return uint256 An integer representing the mirror's publication ID.
|
|
*/
|
|
function mirror(Types.MirrorParams calldata mirrorParams) external returns (uint256);
|
|
|
|
/**
|
|
* @custom:meta-tx mirror.
|
|
*/
|
|
function mirrorWithSig(
|
|
Types.MirrorParams calldata mirrorParams,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (uint256);
|
|
|
|
/**
|
|
* @notice Publishes a quote of the given publication.
|
|
* Quote is a type of reference publication similar to mirror, but it has content and modules.
|
|
* Quotes can have these types of modules initialized:
|
|
* - Action modules: any number of publication actions (e.g. collect, tip, etc.)
|
|
* - Reference module: a module handling the rules when referencing this quote (e.g. token-gated comments on quote)
|
|
* Quotes can have referrers (e.g. publications or profiles that allowed to discover the pointed publication).
|
|
* Unlike mirrors, you can mirror a quote, comment on a quote, or quote a quote.
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param quoteParams A QuoteParams struct containing the needed parameters.
|
|
*
|
|
* @return uint256 An integer representing the quote's publication ID.
|
|
*/
|
|
function quote(Types.QuoteParams calldata quoteParams) external returns (uint256);
|
|
|
|
/**
|
|
* @custom:meta-tx quote.
|
|
*/
|
|
function quoteWithSig(
|
|
Types.QuoteParams calldata quoteParams,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (uint256);
|
|
|
|
/**
|
|
* @notice Follows given profiles, executing each profile's follow module logic (if any).
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @dev Both the `idsOfProfilesToFollow`, `followTokenIds`, and `datas` arrays must be of the same length,
|
|
* regardless if the profiles do not have a follow module set.
|
|
*
|
|
* @param followerProfileId The ID of the profile the follows are being executed for.
|
|
* @param idsOfProfilesToFollow The array of IDs of profiles to follow.
|
|
* @param followTokenIds The array of follow token IDs to use for each follow (0 if you don't own a follow token).
|
|
* @param datas The arbitrary data array to pass to the follow module for each profile if needed.
|
|
*
|
|
* @return uint256[] An array of follow token IDs representing the follow tokens created for each follow.
|
|
*/
|
|
function follow(
|
|
uint256 followerProfileId,
|
|
uint256[] calldata idsOfProfilesToFollow,
|
|
uint256[] calldata followTokenIds,
|
|
bytes[] calldata datas
|
|
) external returns (uint256[] memory);
|
|
|
|
/**
|
|
* @custom:meta-tx follow.
|
|
*/
|
|
function followWithSig(
|
|
uint256 followerProfileId,
|
|
uint256[] calldata idsOfProfilesToFollow,
|
|
uint256[] calldata followTokenIds,
|
|
bytes[] calldata datas,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (uint256[] memory);
|
|
|
|
/**
|
|
* @notice Unfollows given profiles.
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @param unfollowerProfileId The ID of the profile the unfollows are being executed for.
|
|
* @param idsOfProfilesToUnfollow The array of IDs of profiles to unfollow.
|
|
*/
|
|
function unfollow(uint256 unfollowerProfileId, uint256[] calldata idsOfProfilesToUnfollow) external;
|
|
|
|
/**
|
|
* @custom:meta-tx unfollow.
|
|
*/
|
|
function unfollowWithSig(
|
|
uint256 unfollowerProfileId,
|
|
uint256[] calldata idsOfProfilesToUnfollow,
|
|
Types.EIP712Signature calldata signature
|
|
) external;
|
|
|
|
/**
|
|
* @notice Sets the block status for the given profiles. Changing a profile's block status to `true` (i.e. blocked),
|
|
* when will also force them to unfollow.
|
|
* Blocked profiles cannot perform any actions with the profile that blocked them: they cannot comment or mirror
|
|
* their publications, they cannot follow them, they cannot collect, tip them, etc.
|
|
* @custom:permissions Profile Owner or Delegated Executor.
|
|
*
|
|
* @dev Both the `idsOfProfilesToSetBlockStatus` and `blockStatus` arrays must be of the same length.
|
|
*
|
|
* @param byProfileId The ID of the profile that is blocking/unblocking somebody.
|
|
* @param idsOfProfilesToSetBlockStatus The array of IDs of profiles to set block status.
|
|
* @param blockStatus The array of block statuses to use for each (true is blocked).
|
|
*/
|
|
function setBlockStatus(
|
|
uint256 byProfileId,
|
|
uint256[] calldata idsOfProfilesToSetBlockStatus,
|
|
bool[] calldata blockStatus
|
|
) external;
|
|
|
|
/**
|
|
* @custom:meta-tx setBlockStatus.
|
|
*/
|
|
function setBlockStatusWithSig(
|
|
uint256 byProfileId,
|
|
uint256[] calldata idsOfProfilesToSetBlockStatus,
|
|
bool[] calldata blockStatus,
|
|
Types.EIP712Signature calldata signature
|
|
) external;
|
|
|
|
/**
|
|
* @notice Collects a given publication via signature with the specified parameters.
|
|
* Collect can have referrers (e.g. publications or profiles that allowed to discover the pointed publication).
|
|
* @custom:permissions Collector Profile Owner or its Delegated Executor.
|
|
* @custom:pending-deprecation Collect modules were replaced by PublicationAction Collect modules in V2. This method
|
|
* is left here for backwards compatibility with posts made in V1 that had Collect modules.
|
|
*
|
|
* @param collectParams A CollectParams struct containing the parameters.
|
|
*
|
|
* @return uint256 An integer representing the minted token ID.
|
|
*/
|
|
function collectLegacy(Types.LegacyCollectParams calldata collectParams) external returns (uint256);
|
|
|
|
/**
|
|
* @custom:meta-tx collect.
|
|
* @custom:pending-deprecation
|
|
*/
|
|
function collectLegacyWithSig(
|
|
Types.LegacyCollectParams calldata collectParams,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (uint256);
|
|
|
|
/**
|
|
* @notice Acts on a given publication with the specified parameters.
|
|
* You can act on a publication except a mirror (if it has at least one action module initialized).
|
|
* Actions can have referrers (e.g. publications or profiles that allowed to discover the pointed publication).
|
|
* @custom:permissions Actor Profile Owner or its Delegated Executor.
|
|
*
|
|
* @param publicationActionParams A PublicationActionParams struct containing the parameters.
|
|
*
|
|
* @return bytes Arbitrary data the action module returns.
|
|
*/
|
|
function act(Types.PublicationActionParams calldata publicationActionParams) external returns (bytes memory);
|
|
|
|
/**
|
|
* @custom:meta-tx act.
|
|
*/
|
|
function actWithSig(
|
|
Types.PublicationActionParams calldata publicationActionParams,
|
|
Types.EIP712Signature calldata signature
|
|
) external returns (bytes memory);
|
|
|
|
/**
|
|
* @dev This function is used to invalidate signatures by incrementing the nonce of the signer.
|
|
* @param increment The amount to increment the nonce by (max 255).
|
|
*/
|
|
function incrementNonce(uint8 increment) external;
|
|
|
|
/////////////////////////////////
|
|
/// VIEW FUNCTIONS ///
|
|
/////////////////////////////////
|
|
|
|
/**
|
|
* @notice Returns whether or not `followerProfileId` is following `followedProfileId`.
|
|
*
|
|
* @param followerProfileId The ID of the profile whose following state should be queried.
|
|
* @param followedProfileId The ID of the profile whose followed state should be queried.
|
|
*
|
|
* @return bool True if `followerProfileId` is following `followedProfileId`, false otherwise.
|
|
*/
|
|
function isFollowing(uint256 followerProfileId, uint256 followedProfileId) external view returns (bool);
|
|
|
|
/**
|
|
* @notice Returns whether the given address is approved as delegated executor, in the configuration with the given
|
|
* number, to act on behalf of the given profile.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile to check the delegated executor approval for.
|
|
* @param delegatedExecutor The address to query the delegated executor approval for.
|
|
* @param configNumber The number of the configuration where the executor approval state is being queried.
|
|
*
|
|
* @return bool True if the address is approved as a delegated executor to act on behalf of the profile in the
|
|
* given configuration, false otherwise.
|
|
*/
|
|
function isDelegatedExecutorApproved(
|
|
uint256 delegatorProfileId,
|
|
address delegatedExecutor,
|
|
uint64 configNumber
|
|
) external view returns (bool);
|
|
|
|
/**
|
|
* @notice Returns whether the given address is approved as delegated executor, in the current configuration, to act
|
|
* on behalf of the given profile.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile to check the delegated executor approval for.
|
|
* @param delegatedExecutor The address to query the delegated executor approval for.
|
|
*
|
|
* @return bool True if the address is approved as a delegated executor to act on behalf of the profile in the
|
|
* current configuration, false otherwise.
|
|
*/
|
|
function isDelegatedExecutorApproved(
|
|
uint256 delegatorProfileId,
|
|
address delegatedExecutor
|
|
) external view returns (bool);
|
|
|
|
/**
|
|
* @notice Returns the current delegated executor config number for the given profile.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile from which the delegated executors config number is being queried
|
|
*
|
|
* @return uint256 The current delegated executor configuration number.
|
|
*/
|
|
function getDelegatedExecutorsConfigNumber(uint256 delegatorProfileId) external view returns (uint64);
|
|
|
|
/**
|
|
* @notice Returns the previous used delegated executor config number for the given profile.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile from which the delegated executors' previous configuration number
|
|
* set is being queried.
|
|
*
|
|
* @return uint256 The delegated executor configuration number previously set. It will coincide with the current
|
|
* configuration set if it was never switched from the default one.
|
|
*/
|
|
function getDelegatedExecutorsPrevConfigNumber(uint256 delegatorProfileId) external view returns (uint64);
|
|
|
|
/**
|
|
* @notice Returns the maximum delegated executor config number for the given profile.
|
|
* This is the maximum config number that was ever used by this profile.
|
|
* When creating a new clean configuration, you can only use a number that is maxConfigNumber + 1.
|
|
*
|
|
* @param delegatorProfileId The ID of the profile from which the delegated executors' maximum configuration number
|
|
* set is being queried.
|
|
*
|
|
* @return uint256 The delegated executor maximum configuration number set.
|
|
*/
|
|
function getDelegatedExecutorsMaxConfigNumberSet(uint256 delegatorProfileId) external view returns (uint64);
|
|
|
|
/**
|
|
* @notice Returns whether `profileId` is blocked by `byProfileId`.
|
|
* See setBlockStatus() for more information on how blocking works on the platform.
|
|
*
|
|
* @param profileId The ID of the profile whose blocked status should be queried.
|
|
* @param byProfileId The ID of the profile whose blocker status should be queried.
|
|
*
|
|
* @return bool True if `profileId` is blocked by `byProfileId`, false otherwise.
|
|
*/
|
|
function isBlocked(uint256 profileId, uint256 byProfileId) external view returns (bool);
|
|
|
|
/**
|
|
* @notice Returns the URI associated with a given publication.
|
|
* This is used to store the publication's metadata, e.g.: content, images, etc.
|
|
*
|
|
* @param profileId The token ID of the profile that published the publication to query.
|
|
* @param pubId The publication ID of the publication to query.
|
|
*
|
|
* @return string The URI associated with a given publication.
|
|
*/
|
|
function getContentURI(uint256 profileId, uint256 pubId) external view returns (string memory);
|
|
|
|
/**
|
|
* @notice Returns the full profile struct associated with a given profile token ID.
|
|
*
|
|
* @param profileId The token ID of the profile to query.
|
|
*
|
|
* @return Profile The profile struct of the given profile.
|
|
*/
|
|
function getProfile(uint256 profileId) external view returns (Types.Profile memory);
|
|
|
|
/**
|
|
* @notice Returns the full publication struct for a given publication.
|
|
*
|
|
* @param profileId The token ID of the profile that published the publication to query.
|
|
* @param pubId The publication ID of the publication to query.
|
|
*
|
|
* @return Publication The publication struct associated with the queried publication.
|
|
*/
|
|
function getPublication(uint256 profileId, uint256 pubId) external view returns (Types.PublicationMemory memory);
|
|
|
|
/**
|
|
* @notice Returns the type of a given publication.
|
|
* The type can be one of the following (see PublicationType enum):
|
|
* - Nonexistent
|
|
* - Post
|
|
* - Comment
|
|
* - Mirror
|
|
* - Quote
|
|
*
|
|
* @param profileId The token ID of the profile that published the publication to query.
|
|
* @param pubId The publication ID of the publication to query.
|
|
*
|
|
* @return PublicationType The publication type of the queried publication.
|
|
*/
|
|
function getPublicationType(uint256 profileId, uint256 pubId) external view returns (Types.PublicationType);
|
|
|
|
/**
|
|
* @notice Returns wether a given Action Module is enabled for a given publication.
|
|
*
|
|
* @param profileId The token ID of the profile that published the publication to query.
|
|
* @param pubId The publication ID of the publication to query.
|
|
* @param module The address of the Action Module to query.
|
|
*
|
|
* @return bool True if the Action Module is enabled for the queried publication, false if not.
|
|
*/
|
|
function isActionModuleEnabledInPublication(
|
|
uint256 profileId,
|
|
uint256 pubId,
|
|
address module
|
|
) external view returns (bool);
|
|
}
|