Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Source Code Verified (Exact Match)
Contract Name:
ProxyAction
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; /** * @title DataTypes * @author Lens Protocol * * @notice A standard library of data types used throughout the Lens Protocol. */ library DataTypes { /** * @notice An enum containing the different states the protocol can be in, limiting certain actions. * * @param Unpaused The fully unpaused state. * @param PublishingPaused The state where only publication creation functions are paused. * @param Paused The fully paused state. */ enum ProtocolState { Unpaused, PublishingPaused, Paused } /** * @notice An enum specifically used in a helper function to easily retrieve the publication type for integrations. * * @param Post A standard post, having a URI, a collect module but no pointer to another publication. * @param Comment A comment, having a URI, a collect module and a pointer to another publication. * @param Mirror A mirror, having a pointer to another publication, but no URI or collect module. * @param Nonexistent An indicator showing the queried publication does not exist. */ enum PubType { Post, Comment, Mirror, Nonexistent } /** * @notice A struct containing the necessary information to reconstruct an EIP-712 typed data signature. * * @param v The signature's recovery parameter. * @param r The signature's r parameter. * @param s The signature's s parameter * @param deadline The signature's deadline */ struct EIP712Signature { uint8 v; bytes32 r; bytes32 s; uint256 deadline; } /** * @notice A struct containing profile data. * * @param pubCount The number of publications made to this profile. * @param followModule The address of the current follow module in use by this profile, can be empty. * @param followNFT The address of the followNFT associated with this profile, can be empty.. * @param handle The profile's associated handle. * @param imageURI The URI to be used for the profile's image. * @param followNFTURI The URI to be used for the follow NFT. */ struct ProfileStruct { uint256 pubCount; address followModule; address followNFT; string handle; string imageURI; string followNFTURI; } /** * @notice A struct containing data associated with each new publication. * * @param profileIdPointed The profile token ID this publication points to, for mirrors and comments. * @param pubIdPointed The publication ID this publication points to, for mirrors and comments. * @param contentURI The URI associated with this publication. * @param referenceModule The address of the current reference module in use by this profile, can be empty. * @param collectModule The address of the collect module associated with this publication, this exists for all publication. * @param collectNFT The address of the collectNFT associated with this publication, if any. */ struct PublicationStruct { uint256 profileIdPointed; uint256 pubIdPointed; string contentURI; address referenceModule; address collectModule; address collectNFT; } /** * @notice A struct containing the parameters required for the `createProfile()` function. * * @param to The address receiving the profile. * @param handle The handle to set for the profile, must be unique and non-empty. * @param imageURI The URI to set for the profile image. * @param followModule The follow module to use, can be the zero address. * @param followModuleInitData The follow module initialization data, if any. * @param followNFTURI The URI to use for the follow NFT. */ struct CreateProfileData { address to; string handle; string imageURI; address followModule; bytes followModuleInitData; string followNFTURI; } /** * @notice A struct containing the parameters required for the `setDefaultProfileWithSig()` function. Parameters are * the same as the regular `setDefaultProfile()` function, with an added EIP712Signature. * * @param wallet The address of the wallet setting the default profile. * @param profileId The token ID of the profile which will be set as default, or zero. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct SetDefaultProfileWithSigData { address wallet; uint256 profileId; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `setFollowModuleWithSig()` function. Parameters are * the same as the regular `setFollowModule()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile to change the followModule for. * @param followModule The followModule to set for the given profile, must be whitelisted. * @param followModuleInitData The data to be passed to the followModule for initialization. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct SetFollowModuleWithSigData { uint256 profileId; address followModule; bytes followModuleInitData; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `setDispatcherWithSig()` function. Parameters are the same * as the regular `setDispatcher()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile to set the dispatcher for. * @param dispatcher The dispatcher address to set for the profile. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct SetDispatcherWithSigData { uint256 profileId; address dispatcher; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `setProfileImageURIWithSig()` function. Parameters are the same * as the regular `setProfileImageURI()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile to set the URI for. * @param imageURI The URI to set for the given profile image. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct SetProfileImageURIWithSigData { uint256 profileId; string imageURI; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `setFollowNFTURIWithSig()` function. Parameters are the same * as the regular `setFollowNFTURI()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile for which to set the followNFT URI. * @param followNFTURI The follow NFT URI to set. * @param sig The EIP712Signature struct containing the followNFT's associated profile owner's signature. */ struct SetFollowNFTURIWithSigData { uint256 profileId; string followNFTURI; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `post()` function. * * @param profileId The token ID of the profile to publish to. * @param contentURI The URI to set for this new publication. * @param collectModule The collect module to set for this new publication. * @param collectModuleInitData The data to pass to the collect module's initialization. * @param referenceModule The reference module to set for the given publication, must be whitelisted. * @param referenceModuleInitData The data to be passed to the reference module for initialization. */ struct PostData { uint256 profileId; string contentURI; address collectModule; bytes collectModuleInitData; address referenceModule; bytes referenceModuleInitData; } /** * @notice A struct containing the parameters required for the `postWithSig()` function. Parameters are the same as * the regular `post()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile to publish to. * @param contentURI The URI to set for this new publication. * @param collectModule The collectModule to set for this new publication. * @param collectModuleInitData The data to pass to the collectModule's initialization. * @param referenceModule The reference module to set for the given publication, must be whitelisted. * @param referenceModuleInitData The data to be passed to the reference module for initialization. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct PostWithSigData { uint256 profileId; string contentURI; address collectModule; bytes collectModuleInitData; address referenceModule; bytes referenceModuleInitData; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `comment()` function. * * @param profileId The token ID of the profile to publish to. * @param contentURI The URI to set for this new publication. * @param profileIdPointed The profile token ID to point the comment to. * @param pubIdPointed The publication ID to point the comment to. * @param referenceModuleData The data passed to the reference module. * @param collectModule The collect module to set for this new publication. * @param collectModuleInitData The data to pass to the collect module's initialization. * @param referenceModule The reference module to set for the given publication, must be whitelisted. * @param referenceModuleInitData The data to be passed to the reference module for initialization. */ struct CommentData { uint256 profileId; string contentURI; uint256 profileIdPointed; uint256 pubIdPointed; bytes referenceModuleData; address collectModule; bytes collectModuleInitData; address referenceModule; bytes referenceModuleInitData; } /** * @notice A struct containing the parameters required for the `commentWithSig()` function. Parameters are the same as * the regular `comment()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile to publish to. * @param contentURI The URI to set for this new publication. * @param profileIdPointed The profile token ID to point the comment to. * @param pubIdPointed The publication ID to point the comment to. * @param referenceModuleData The data passed to the reference module. * @param collectModule The collectModule to set for this new publication. * @param collectModuleInitData The data to pass to the collectModule's initialization. * @param referenceModule The reference module to set for the given publication, must be whitelisted. * @param referenceModuleInitData The data to be passed to the reference module for initialization. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct CommentWithSigData { uint256 profileId; string contentURI; uint256 profileIdPointed; uint256 pubIdPointed; bytes referenceModuleData; address collectModule; bytes collectModuleInitData; address referenceModule; bytes referenceModuleInitData; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `mirror()` function. * * @param profileId The token ID of the profile to publish to. * @param profileIdPointed The profile token ID to point the mirror to. * @param pubIdPointed The publication ID to point the mirror to. * @param referenceModuleData The data passed to the reference module. * @param referenceModule The reference module to set for the given publication, must be whitelisted. * @param referenceModuleInitData The data to be passed to the reference module for initialization. */ struct MirrorData { uint256 profileId; uint256 profileIdPointed; uint256 pubIdPointed; bytes referenceModuleData; address referenceModule; bytes referenceModuleInitData; } /** * @notice A struct containing the parameters required for the `mirrorWithSig()` function. Parameters are the same as * the regular `mirror()` function, with an added EIP712Signature. * * @param profileId The token ID of the profile to publish to. * @param profileIdPointed The profile token ID to point the mirror to. * @param pubIdPointed The publication ID to point the mirror to. * @param referenceModuleData The data passed to the reference module. * @param referenceModule The reference module to set for the given publication, must be whitelisted. * @param referenceModuleInitData The data to be passed to the reference module for initialization. * @param sig The EIP712Signature struct containing the profile owner's signature. */ struct MirrorWithSigData { uint256 profileId; uint256 profileIdPointed; uint256 pubIdPointed; bytes referenceModuleData; address referenceModule; bytes referenceModuleInitData; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `followWithSig()` function. Parameters are the same * as the regular `follow()` function, with the follower's (signer) address and an EIP712Signature added. * * @param follower The follower which is the message signer. * @param profileIds The array of token IDs of the profiles to follow. * @param datas The array of arbitrary data to pass to the followModules if needed. * @param sig The EIP712Signature struct containing the follower's signature. */ struct FollowWithSigData { address follower; uint256[] profileIds; bytes[] datas; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `collectWithSig()` function. Parameters are the same as * the regular `collect()` function, with the collector's (signer) address and an EIP712Signature added. * * @param collector The collector which is the message signer. * @param profileId The token ID of the profile that published the publication to collect. * @param pubId The publication to collect's publication ID. * @param data The arbitrary data to pass to the collectModule if needed. * @param sig The EIP712Signature struct containing the collector's signature. */ struct CollectWithSigData { address collector; uint256 profileId; uint256 pubId; bytes data; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `setProfileMetadataWithSig()` function. * * @param profileId The profile ID for which to set the metadata. * @param metadata The metadata string to set for the profile and user. * @param sig The EIP712Signature struct containing the user's signature. */ struct SetProfileMetadataWithSigData { uint256 profileId; string metadata; EIP712Signature sig; } /** * @notice A struct containing the parameters required for the `toggleFollowWithSig()` function. * * @param follower The follower which is the message signer. * @param profileIds The token ID array of the profiles. * @param enables The array of booleans to enable/disable follows. * @param sig The EIP712Signature struct containing the follower's signature. */ struct ToggleFollowWithSigData { address follower; uint256[] profileIds; bool[] enables; EIP712Signature sig; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {DataTypes} from './DataTypes.sol'; /** * @title ILensHub * @author Lens Protocol * * @notice This is the interface for the LensHub contract, the main entry point for the Lens Protocol. * You'll find all the events and external functions, as well as the reasoning behind them here. */ interface ILensHub { /** * @notice Initializes the LensHub NFT, setting the initial governance address as well as the name and symbol in * the LensNFTBase contract. * * @param name The name to set for the hub NFT. * @param symbol The symbol to set for the hub NFT. * @param newGovernance The governance address to set. */ function initialize( string calldata name, string calldata symbol, address newGovernance ) external; /** * @notice Sets the privileged governance role. This function can only be called by the current governance * address. * * @param newGovernance The new governance address to set. */ function setGovernance(address newGovernance) external; /** * @notice Sets the emergency admin, which is a permissioned role able to set the protocol state. This function * can only be called by the governance address. * * @param newEmergencyAdmin The new emergency admin address to set. */ function setEmergencyAdmin(address newEmergencyAdmin) external; /** * @notice Sets the protocol state to either a global pause, a publishing pause or an unpaused state. This function * can only be called by the governance address or the emergency admin address. * * Note that this reverts if the emergency admin calls it if: * 1. The emergency admin is attempting to unpause. * 2. The emergency admin is calling while the protocol is already paused. * * @param newState The state to set, as a member of the ProtocolState enum. */ function setState(DataTypes.ProtocolState newState) external; /** * @notice Adds or removes a profile creator from the whitelist. This function can only be called by the current * governance address. * * @param profileCreator The profile creator address to add or remove from the whitelist. * @param whitelist Whether or not the profile creator should be whitelisted. */ function whitelistProfileCreator(address profileCreator, bool whitelist) external; /** * @notice Adds or removes a follow module from the whitelist. This function can only be called by the current * governance address. * * @param followModule The follow module contract address to add or remove from the whitelist. * @param whitelist Whether or not the follow module should be whitelisted. */ function whitelistFollowModule(address followModule, bool whitelist) external; /** * @notice Adds or removes a reference module from the whitelist. This function can only be called by the current * governance address. * * @param referenceModule The reference module contract to add or remove from the whitelist. * @param whitelist Whether or not the reference module should be whitelisted. */ function whitelistReferenceModule(address referenceModule, bool whitelist) external; /** * @notice Adds or removes a collect module from the whitelist. This function can only be called by the current * governance address. * * @param collectModule The collect module contract address to add or remove from the whitelist. * @param whitelist Whether or not the collect module should be whitelisted. */ function whitelistCollectModule(address collectModule, bool whitelist) external; /** * @notice Creates a profile with the specified parameters, minting a profile NFT to the given recipient. This * function must be called by a whitelisted profile creator. * * @param vars A CreateProfileData struct containing the following params: * to: The address receiving the profile. * handle: The handle to set for the profile, must be unique and non-empty. * imageURI: The URI to set for the profile image. * followModule: The follow module to use, can be the zero address. * followModuleInitData: The follow module initialization data, if any. */ function createProfile(DataTypes.CreateProfileData calldata vars) external returns (uint256); /** * @notice Sets the mapping between wallet and its main profile identity. * * @param profileId The token ID of the profile to set as the main profile identity. */ function setDefaultProfile(uint256 profileId) external; /** * @notice Sets the mapping between wallet and its main profile identity via signature with the specified parameters. * * @param vars A SetDefaultProfileWithSigData struct, including the regular parameters and an EIP712Signature struct. */ function setDefaultProfileWithSig(DataTypes.SetDefaultProfileWithSigData calldata vars) external; /** * @notice Sets a profile's follow module, must be called by the profile owner. * * @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; /** * @notice Sets a profile's follow module via signature with the specified parameters. * * @param vars A SetFollowModuleWithSigData struct, including the regular parameters and an EIP712Signature struct. */ function setFollowModuleWithSig(DataTypes.SetFollowModuleWithSigData calldata vars) external; /** * @notice Sets a profile's dispatcher, giving that dispatcher rights to publish to that profile. * * @param profileId The token ID of the profile of the profile to set the dispatcher for. * @param dispatcher The dispatcher address to set for the given profile ID. */ function setDispatcher(uint256 profileId, address dispatcher) external; /** * @notice Sets a profile's dispatcher via signature with the specified parameters. * * @param vars A SetDispatcherWithSigData struct, including the regular parameters and an EIP712Signature struct. */ function setDispatcherWithSig(DataTypes.SetDispatcherWithSigData calldata vars) external; /** * @notice Sets a profile's URI, which is reflected in the `tokenURI()` function. * * @param profileId The token ID of the profile of the profile to set the URI for. * @param imageURI The URI to set for the given profile. */ function setProfileImageURI(uint256 profileId, string calldata imageURI) external; /** * @notice Sets a profile's URI via signature with the specified parameters. * * @param vars A SetProfileImageURIWithSigData struct, including the regular parameters and an EIP712Signature struct. */ function setProfileImageURIWithSig(DataTypes.SetProfileImageURIWithSigData calldata vars) external; /** * @notice Sets a followNFT URI for a given profile's follow NFT. * * @param profileId The token ID of the profile for which to set the followNFT URI. * @param followNFTURI The follow NFT URI to set. */ function setFollowNFTURI(uint256 profileId, string calldata followNFTURI) external; /** * @notice Sets a followNFT URI via signature with the specified parameters. * * @param vars A SetFollowNFTURIWithSigData struct, including the regular parameters and an EIP712Signature struct. */ function setFollowNFTURIWithSig(DataTypes.SetFollowNFTURIWithSigData calldata vars) external; /** * @notice Publishes a post to a given profile, must be called by the profile owner. * * @param vars A PostData struct containing the needed parameters. * * @return uint256 An integer representing the post's publication ID. */ function post(DataTypes.PostData calldata vars) external returns (uint256); /** * @notice Publishes a post to a given profile via signature with the specified parameters. * * @param vars A PostWithSigData struct containing the regular parameters and an EIP712Signature struct. * * @return uint256 An integer representing the post's publication ID. */ function postWithSig(DataTypes.PostWithSigData calldata vars) external returns (uint256); /** * @notice Publishes a comment to a given profile, must be called by the profile owner. * * @param vars A CommentData struct containing the needed parameters. * * @return uint256 An integer representing the comment's publication ID. */ function comment(DataTypes.CommentData calldata vars) external returns (uint256); /** * @notice Publishes a comment to a given profile via signature with the specified parameters. * * @param vars A CommentWithSigData struct containing the regular parameters and an EIP712Signature struct. * * @return uint256 An integer representing the comment's publication ID. */ function commentWithSig(DataTypes.CommentWithSigData calldata vars) external returns (uint256); /** * @notice Publishes a mirror to a given profile, must be called by the profile owner. * * @param vars A MirrorData struct containing the necessary parameters. * * @return uint256 An integer representing the mirror's publication ID. */ function mirror(DataTypes.MirrorData calldata vars) external returns (uint256); /** * @notice Publishes a mirror to a given profile via signature with the specified parameters. * * @param vars A MirrorWithSigData struct containing the regular parameters and an EIP712Signature struct. * * @return uint256 An integer representing the mirror's publication ID. */ function mirrorWithSig(DataTypes.MirrorWithSigData calldata vars) external returns (uint256); /** * @notice Follows the given profiles, executing each profile's follow module logic (if any) and minting followNFTs to the caller. * * NOTE: Both the `profileIds` and `datas` arrays must be of the same length, regardless if the profiles do not have a follow module set. * * @param profileIds The token ID array of the profiles to follow. * @param datas The arbitrary data array to pass to the follow module for each profile if needed. * * @return uint256[] An array of integers representing the minted follow NFTs token IDs. */ function follow(uint256[] calldata profileIds, bytes[] calldata datas) external returns (uint256[] memory); /** * @notice Follows a given profile via signature with the specified parameters. * * @param vars A FollowWithSigData struct containing the regular parameters as well as the signing follower's address * and an EIP712Signature struct. * * @return uint256[] An array of integers representing the minted follow NFTs token IDs. */ function followWithSig(DataTypes.FollowWithSigData calldata vars) external returns (uint256[] memory); /** * @notice Collects a given publication, executing collect module logic and minting a collectNFT to the caller. * * @param profileId The token ID of the profile that published the publication to collect. * @param pubId The publication to collect's publication ID. * @param data The arbitrary data to pass to the collect module if needed. * * @return uint256 An integer representing the minted token ID. */ function collect( uint256 profileId, uint256 pubId, bytes calldata data ) external returns (uint256); /** * @notice Collects a given publication via signature with the specified parameters. * * @param vars A CollectWithSigData struct containing the regular parameters as well as the collector's address and * an EIP712Signature struct. * * @return uint256 An integer representing the minted token ID. */ function collectWithSig(DataTypes.CollectWithSigData calldata vars) external returns (uint256); /** * @dev Helper function to emit a detailed followNFT transfer event from the hub, to be consumed by frontends to track * followNFT transfers. * * @param profileId The token ID of the profile associated with the followNFT being transferred. * @param followNFTId The followNFT being transferred's token ID. * @param from The address the followNFT is being transferred from. * @param to The address the followNFT is being transferred to. */ function emitFollowNFTTransferEvent( uint256 profileId, uint256 followNFTId, address from, address to ) external; /** * @dev Helper function to emit a detailed collectNFT transfer event from the hub, to be consumed by frontends to track * collectNFT transfers. * * @param profileId The token ID of the profile associated with the collect NFT being transferred. * @param pubId The publication ID associated with the collect NFT being transferred. * @param collectNFTId The collectNFT being transferred's token ID. * @param from The address the collectNFT is being transferred from. * @param to The address the collectNFT is being transferred to. */ function emitCollectNFTTransferEvent( uint256 profileId, uint256 pubId, uint256 collectNFTId, address from, address to ) external; /// ************************ /// *****VIEW FUNCTIONS***** /// ************************ /** * @notice Returns whether or not a profile creator is whitelisted. * * @param profileCreator The address of the profile creator to check. * * @return bool True if the profile creator is whitelisted, false otherwise. */ function isProfileCreatorWhitelisted(address profileCreator) external view returns (bool); /** * @notice Returns default profile for a given wallet address * * @param wallet The address to find the default mapping * * @return uint256 The default profile id, which will be 0 if not mapped. */ function defaultProfile(address wallet) external view returns (uint256); /** * @notice Returns whether or not a follow module is whitelisted. * * @param followModule The address of the follow module to check. * * @return bool True if the the follow module is whitelisted, false otherwise. */ function isFollowModuleWhitelisted(address followModule) external view returns (bool); /** * @notice Returns whether or not a reference module is whitelisted. * * @param referenceModule The address of the reference module to check. * * @return bool True if the the reference module is whitelisted, false otherwise. */ function isReferenceModuleWhitelisted(address referenceModule) external view returns (bool); /** * @notice Returns whether or not a collect module is whitelisted. * * @param collectModule The address of the collect module to check. * * @return bool True if the the collect module is whitelisted, false otherwise. */ function isCollectModuleWhitelisted(address collectModule) external view returns (bool); /** * @notice Returns the currently configured governance address. * * @return address The address of the currently configured governance. */ function getGovernance() external view returns (address); /** * @notice Returns the dispatcher associated with a profile. * * @param profileId The token ID of the profile to query the dispatcher for. * * @return address The dispatcher address associated with the profile. */ function getDispatcher(uint256 profileId) external view returns (address); /** * @notice Returns the publication count for a given profile. * * @param profileId The token ID of the profile to query. * * @return uint256 The number of publications associated with the queried profile. */ function getPubCount(uint256 profileId) external view returns (uint256); /** * @notice Returns the followNFT associated with a given profile, if any. * * @param profileId The token ID of the profile to query the followNFT for. * * @return address The followNFT associated with the given profile. */ function getFollowNFT(uint256 profileId) external view returns (address); /** * @notice Returns the followNFT URI associated with a given profile. * * @param profileId The token ID of the profile to query the followNFT URI for. * * @return string The followNFT URI associated with the given profile. */ function getFollowNFTURI(uint256 profileId) external view returns (string memory); /** * @notice Returns the collectNFT associated with a given publication, if any. * * @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 address The address of the collectNFT associated with the queried publication. */ function getCollectNFT(uint256 profileId, uint256 pubId) external view returns (address); /** * @notice Returns the follow module associated witha given profile, if any. * * @param profileId The token ID of the profile to query the follow module for. * * @return address The address of the follow module associated with the given profile. */ function getFollowModule(uint256 profileId) external view returns (address); /** * @notice Returns the collect module associated with 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 address The address of the collect module associated with the queried publication. */ function getCollectModule(uint256 profileId, uint256 pubId) external view returns (address); /** * @notice Returns the reference module associated witha given profile, if any. * * @param profileId The token ID of the profile that published the publication to querythe reference module for. * @param pubId The publication ID of the publication to query the reference module for. * * @return address The address of the reference module associated with the given profile. */ function getReferenceModule(uint256 profileId, uint256 pubId) external view returns (address); /** * @notice Returns the handle associated with a profile. * * @param profileId The token ID of the profile to query the handle for. * * @return string The handle associated with the profile. */ function getHandle(uint256 profileId) external view returns (string memory); /** * @notice Returns the publication pointer (profileId & pubId) associated with a given publication. * * @param profileId The token ID of the profile that published the publication to query the pointer for. * @param pubId The publication ID of the publication to query the pointer for. * * @return tuple First, the profile ID of the profile the current publication is pointing to, second, the * publication ID of the publication the current publication is pointing to. */ function getPubPointer(uint256 profileId, uint256 pubId) external view returns (uint256, uint256); /** * @notice Returns the URI associated with 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 string The URI associated with a given publication. */ function getContentURI(uint256 profileId, uint256 pubId) external view returns (string memory); /** * @notice Returns the profile token ID according to a given handle. * * @param handle The handle to resolve the profile token ID with. * * @return uint256 The profile ID the passed handle points to. */ function getProfileIdByHandle(string calldata handle) external view returns (uint256); /** * @notice Returns the full profile struct associated with a given profile token ID. * * @param profileId The token ID of the profile to query. * * @return ProfileStruct The profile struct of the given profile. */ function getProfile(uint256 profileId) external view returns (DataTypes.ProfileStruct 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 PublicationStruct The publication struct associated with the queried publication. */ function getPub(uint256 profileId, uint256 pubId) external view returns (DataTypes.PublicationStruct memory); /** * @notice Returns the publication type associated with 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 PubType The publication type, as a member of an enum (either "post," "comment" or "mirror"). */ function getPubType(uint256 profileId, uint256 pubId) external view returns (DataTypes.PubType); /** * @notice Returns the follow NFT implementation address. * * @return address The follow NFT implementation address. */ function getFollowNFTImpl() external view returns (address); /** * @notice Returns the collect NFT implementation address. * * @return address The collect NFT implementation address. */ function getCollectNFTImpl() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {ILensHub} from './ILensHub.sol'; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; struct CollectForRequest { address mintFor; uint256 profileId; uint256 pubId; } contract ProxyAction is Ownable { ILensHub private immutable _lensHub; mapping(address => bool) private _isAllowed; constructor(address lensHub, address[] memory allowed) { _lensHub = ILensHub(lensHub); for (uint256 i = 0; i < allowed.length; i++) { _isAllowed[allowed[i]] = true; } } modifier onlyAllowed() { require(_isAllowed[msg.sender] == true, "not allowed"); _; } function toggleAllowed(address allow, bool allowed) external onlyOwner { _isAllowed[allow] = allowed; } function collectFor(CollectForRequest[] memory request) external onlyAllowed { for (uint256 i = 0; i < request.length; i++) { uint256 tokenId = _lensHub.collect(request[i].profileId, request[i].pubId, ""); address collectNft = _lensHub.getCollectNFT(request[i].profileId, request[i].pubId); IERC721(collectNft).safeTransferFrom(address(this), request[i].mintFor, tokenId); } } function followFor(uint256[] calldata profileIds, address[] calldata mintFor, bytes[] calldata datas) external onlyAllowed { uint256[] memory tokenIds = _lensHub.follow(profileIds, datas); for (uint256 i = 0; i < tokenIds.length; i++) { address followNft = _lensHub.getFollowNFT(profileIds[i]); IERC721(followNft).safeTransferFrom(address(this), mintFor[i], tokenIds[i]); } } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"lensHub","type":"address"},{"internalType":"address[]","name":"allowed","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"mintFor","type":"address"},{"internalType":"uint256","name":"profileId","type":"uint256"},{"internalType":"uint256","name":"pubId","type":"uint256"}],"internalType":"struct CollectForRequest[]","name":"request","type":"tuple[]"}],"name":"collectFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"profileIds","type":"uint256[]"},{"internalType":"address[]","name":"mintFor","type":"address[]"},{"internalType":"bytes[]","name":"datas","type":"bytes[]"}],"name":"followFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"allow","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"toggleAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162001ab538038062001ab58339818101604052810190620000379190620003e5565b620000576200004b6200012b60201b60201c565b6200013360201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060005b815181101562000122576001806000848481518110620000b357620000b26200044b565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200011990620004b3565b9150506200008e565b50505062000500565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000238826200020b565b9050919050565b6200024a816200022b565b81146200025657600080fd5b50565b6000815190506200026a816200023f565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002c08262000275565b810181811067ffffffffffffffff82111715620002e257620002e162000286565b5b80604052505050565b6000620002f7620001f7565b9050620003058282620002b5565b919050565b600067ffffffffffffffff82111562000328576200032762000286565b5b602082029050602081019050919050565b600080fd5b6000620003556200034f846200030a565b620002eb565b905080838252602082019050602084028301858111156200037b576200037a62000339565b5b835b81811015620003a8578062000393888262000259565b8452602084019350506020810190506200037d565b5050509392505050565b600082601f830112620003ca57620003c962000270565b5b8151620003dc8482602086016200033e565b91505092915050565b60008060408385031215620003ff57620003fe62000201565b5b60006200040f8582860162000259565b925050602083015167ffffffffffffffff81111562000433576200043262000206565b5b6200044185828601620003b2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620004c082620004a9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620004f557620004f46200047a565b5b600182019050919050565b608051611584620005316000396000818161020d015281816102c40152818161051101526105ef01526115846000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a61461006757806374d91c6d14610071578063853ea9881461008d5780638da5cb5b146100a95780639d6f320e146100c7578063f2fde38b146100e3575b600080fd5b61006f6100ff565b005b61008b600480360381019061008691906109e4565b610113565b005b6100a760048036038101906100a29190610b35565b610176565b005b6100b1610445565b6040516100be9190610bf8565b60405180910390f35b6100e160048036038101906100dc9190610e01565b61046e565b005b6100fd60048036038101906100f89190610e4a565b61076d565b005b6101076107f0565b610111600061086e565b565b61011b6107f0565b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60011515600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161020090610ed4565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663fb78ae6c888886866040518563ffffffff1660e01b815260040161026a94939291906110e2565b6000604051808303816000875af1158015610289573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906102b291906111f5565b905060005b815181101561043b5760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9ec65638a8a858181106103115761031061123e565b5b905060200201356040518263ffffffff1660e01b8152600401610334919061127c565b602060405180830381865afa158015610351573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037591906112ac565b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e308989868181106103a7576103a661123e565b5b90506020020160208101906103bc9190610e4a565b8686815181106103cf576103ce61123e565b5b60200260200101516040518463ffffffff1660e01b81526004016103f5939291906112d9565b600060405180830381600087803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505050505080806104339061133f565b9150506102b7565b5050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60011515600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f890610ed4565b60405180910390fd5b60005b81518110156107695760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166384114ad484848151811061055e5761055d61123e565b5b60200260200101516020015185858151811061057d5761057c61123e565b5b6020026020010151604001516040518363ffffffff1660e01b81526004016105a69291906113be565b6020604051808303816000875af11580156105c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e991906113fa565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166352aaef5585858151811061063c5761063b61123e565b5b60200260200101516020015186868151811061065b5761065a61123e565b5b6020026020010151604001516040518363ffffffff1660e01b8152600401610684929190611427565b602060405180830381865afa1580156106a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c591906112ac565b90508073ffffffffffffffffffffffffffffffffffffffff166342842e0e308686815181106106f7576106f661123e565b5b602002602001015160000151856040518463ffffffff1660e01b8152600401610722939291906112d9565b600060405180830381600087803b15801561073c57600080fd5b505af1158015610750573d6000803e3d6000fd5b50505050505080806107619061133f565b915050610504565b5050565b6107756107f0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036107e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107db906114c2565b60405180910390fd5b6107ed8161086e565b50565b6107f8610932565b73ffffffffffffffffffffffffffffffffffffffff16610816610445565b73ffffffffffffffffffffffffffffffffffffffff161461086c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108639061152e565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006109798261094e565b9050919050565b6109898161096e565b811461099457600080fd5b50565b6000813590506109a681610980565b92915050565b60008115159050919050565b6109c1816109ac565b81146109cc57600080fd5b50565b6000813590506109de816109b8565b92915050565b600080604083850312156109fb576109fa610944565b5b6000610a0985828601610997565b9250506020610a1a858286016109cf565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f840112610a4957610a48610a24565b5b8235905067ffffffffffffffff811115610a6657610a65610a29565b5b602083019150836020820283011115610a8257610a81610a2e565b5b9250929050565b60008083601f840112610a9f57610a9e610a24565b5b8235905067ffffffffffffffff811115610abc57610abb610a29565b5b602083019150836020820283011115610ad857610ad7610a2e565b5b9250929050565b60008083601f840112610af557610af4610a24565b5b8235905067ffffffffffffffff811115610b1257610b11610a29565b5b602083019150836020820283011115610b2e57610b2d610a2e565b5b9250929050565b60008060008060008060608789031215610b5257610b51610944565b5b600087013567ffffffffffffffff811115610b7057610b6f610949565b5b610b7c89828a01610a33565b9650965050602087013567ffffffffffffffff811115610b9f57610b9e610949565b5b610bab89828a01610a89565b9450945050604087013567ffffffffffffffff811115610bce57610bcd610949565b5b610bda89828a01610adf565b92509250509295509295509295565b610bf28161096e565b82525050565b6000602082019050610c0d6000830184610be9565b92915050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610c5c82610c13565b810181811067ffffffffffffffff82111715610c7b57610c7a610c24565b5b80604052505050565b6000610c8e61093a565b9050610c9a8282610c53565b919050565b600067ffffffffffffffff821115610cba57610cb9610c24565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b610ce381610cd0565b8114610cee57600080fd5b50565b600081359050610d0081610cda565b92915050565b600060608284031215610d1c57610d1b610ccb565b5b610d266060610c84565b90506000610d3684828501610997565b6000830152506020610d4a84828501610cf1565b6020830152506040610d5e84828501610cf1565b60408301525092915050565b6000610d7d610d7884610c9f565b610c84565b90508083825260208201905060608402830185811115610da057610d9f610a2e565b5b835b81811015610dc95780610db58882610d06565b845260208401935050606081019050610da2565b5050509392505050565b600082601f830112610de857610de7610a24565b5b8135610df8848260208601610d6a565b91505092915050565b600060208284031215610e1757610e16610944565b5b600082013567ffffffffffffffff811115610e3557610e34610949565b5b610e4184828501610dd3565b91505092915050565b600060208284031215610e6057610e5f610944565b5b6000610e6e84828501610997565b91505092915050565b600082825260208201905092915050565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000610ebe600b83610e77565b9150610ec982610e88565b602082019050919050565b60006020820190508181036000830152610eed81610eb1565b9050919050565b600082825260208201905092915050565b600080fd5b82818337505050565b6000610f1f8385610ef4565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115610f5257610f51610f05565b5b602083029250610f63838584610f0a565b82840190509392505050565b600082825260208201905092915050565b6000819050919050565b600082825260208201905092915050565b82818337600083830152505050565b6000610fb68385610f8a565b9350610fc3838584610f9b565b610fcc83610c13565b840190509392505050565b6000610fe4848484610faa565b90509392505050565b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261101957611018610ff7565b5b83810192508235915060208301925067ffffffffffffffff82111561104157611040610fed565b5b60018202360383131561105757611056610ff2565b5b509250929050565b6000602082019050919050565b60006110788385610f6f565b93508360208402850161108a84610f80565b8060005b878110156110d05784840389526110a58284610ffc565b6110b0868284610fd7565b95506110bb8461105f565b935060208b019a50505060018101905061108e565b50829750879450505050509392505050565b600060408201905081810360008301526110fd818688610f13565b9050818103602083015261111281848661106c565b905095945050505050565b600067ffffffffffffffff82111561113857611137610c24565b5b602082029050602081019050919050565b60008151905061115881610cda565b92915050565b600061117161116c8461111d565b610c84565b9050808382526020820190506020840283018581111561119457611193610a2e565b5b835b818110156111bd57806111a98882611149565b845260208401935050602081019050611196565b5050509392505050565b600082601f8301126111dc576111db610a24565b5b81516111ec84826020860161115e565b91505092915050565b60006020828403121561120b5761120a610944565b5b600082015167ffffffffffffffff81111561122957611228610949565b5b611235848285016111c7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61127681610cd0565b82525050565b6000602082019050611291600083018461126d565b92915050565b6000815190506112a681610980565b92915050565b6000602082840312156112c2576112c1610944565b5b60006112d084828501611297565b91505092915050565b60006060820190506112ee6000830186610be9565b6112fb6020830185610be9565b611308604083018461126d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061134a82610cd0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361137c5761137b611310565b5b600182019050919050565b600082825260208201905092915050565b50565b60006113a8600083611387565b91506113b382611398565b600082019050919050565b60006060820190506113d3600083018561126d565b6113e0602083018461126d565b81810360408301526113f18161139b565b90509392505050565b6000602082840312156114105761140f610944565b5b600061141e84828501611149565b91505092915050565b600060408201905061143c600083018561126d565b611449602083018461126d565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114ac602683610e77565b91506114b782611450565b604082019050919050565b600060208201905081810360008301526114db8161149f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611518602083610e77565b9150611523826114e2565b602082019050919050565b600060208201905081810360008301526115478161150b565b905091905056fea2646970667358221220f7fa2f23bdb7094923b8f4deff85eb43601051adb2ab08f6647fde44091ccecb64736f6c63430008110033000000000000000000000000db46d1dc155634fbc732f92e853b10b288ad5a1d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000b2989c99c673510d04b9a7202108164dc03e89c7000000000000000000000000479b18c5c5cd07777d97c523983779bb6b4f8312000000000000000000000000f1a42d1975826b6becbcaf6cd105eece26bc5c76000000000000000000000000d209b5957a3eab13008a18179e44f97ab34269d200000000000000000000000075fae78ce542de64824df2e60e2828bc2a2d953c000000000000000000000000e6ab66ca47b9c6cf5a0269786e6af86a44ff8c490000000000000000000000009a286e7f4c3245b812fadcd2c00bc818b9a754a0000000000000000000000000db400abfa13e11a93a6b631ebad2f15ba4bc43da0000000000000000000000005b24683d4ad155eda4782c8b6930b2c065014c32000000000000000000000000d1feccf6881970105dfb2b654054174007f0e07e000000000000000000000000900cab7bb11ae04b943496fd6ae686fb15f4d98e00000000000000000000000010773553e2144379c63fc69ad357217acc79917e0000000000000000000000006204bfaa0f5be46f0d3dea4334e66523a973086b000000000000000000000000ac5314fc0cd30064c6bd143f74aa724c0c69fd40000000000000000000000000ba4ae59edf4b34974dd6b19c89646b09ab1e044d000000000000000000000000765f899cc972768cd0440e7aab112c26afbee7ca0000000000000000000000009c8297dfdbd09330cf6aa458639aaec29090d9c50000000000000000000000009fe3c6449dd952b16fd452b096efb7f50a895adc00000000000000000000000077582a98132c2be11a6c0f85ca6361555a030a68000000000000000000000000886e88c733abbf5400b54766569b077088348ffe
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000db46d1dc155634fbc732f92e853b10b288ad5a1d00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000014000000000000000000000000b2989c99c673510d04b9a7202108164dc03e89c7000000000000000000000000479b18c5c5cd07777d97c523983779bb6b4f8312000000000000000000000000f1a42d1975826b6becbcaf6cd105eece26bc5c76000000000000000000000000d209b5957a3eab13008a18179e44f97ab34269d200000000000000000000000075fae78ce542de64824df2e60e2828bc2a2d953c000000000000000000000000e6ab66ca47b9c6cf5a0269786e6af86a44ff8c490000000000000000000000009a286e7f4c3245b812fadcd2c00bc818b9a754a0000000000000000000000000db400abfa13e11a93a6b631ebad2f15ba4bc43da0000000000000000000000005b24683d4ad155eda4782c8b6930b2c065014c32000000000000000000000000d1feccf6881970105dfb2b654054174007f0e07e000000000000000000000000900cab7bb11ae04b943496fd6ae686fb15f4d98e00000000000000000000000010773553e2144379c63fc69ad357217acc79917e0000000000000000000000006204bfaa0f5be46f0d3dea4334e66523a973086b000000000000000000000000ac5314fc0cd30064c6bd143f74aa724c0c69fd40000000000000000000000000ba4ae59edf4b34974dd6b19c89646b09ab1e044d000000000000000000000000765f899cc972768cd0440e7aab112c26afbee7ca0000000000000000000000009c8297dfdbd09330cf6aa458639aaec29090d9c50000000000000000000000009fe3c6449dd952b16fd452b096efb7f50a895adc00000000000000000000000077582a98132c2be11a6c0f85ca6361555a030a68000000000000000000000000886e88c733abbf5400b54766569b077088348ffe
-----Decoded View---------------
Arg [0] : lensHub (address): 0xdb46d1dc155634fbc732f92e853b10b288ad5a1d
Arg [1] : allowed (address[]): 0xb2989c99c673510d04b9a7202108164dc03e89c7,0x479b18c5c5cd07777d97c523983779bb6b4f8312,0xf1a42d1975826b6becbcaf6cd105eece26bc5c76,0xd209b5957a3eab13008a18179e44f97ab34269d2,0x75fae78ce542de64824df2e60e2828bc2a2d953c,0xe6ab66ca47b9c6cf5a0269786e6af86a44ff8c49,0x9a286e7f4c3245b812fadcd2c00bc818b9a754a0,0xdb400abfa13e11a93a6b631ebad2f15ba4bc43da,0x5b24683d4ad155eda4782c8b6930b2c065014c32,0xd1feccf6881970105dfb2b654054174007f0e07e,0x900cab7bb11ae04b943496fd6ae686fb15f4d98e,0x10773553e2144379c63fc69ad357217acc79917e,0x6204bfaa0f5be46f0d3dea4334e66523a973086b,0xac5314fc0cd30064c6bd143f74aa724c0c69fd40,0xba4ae59edf4b34974dd6b19c89646b09ab1e044d,0x765f899cc972768cd0440e7aab112c26afbee7ca,0x9c8297dfdbd09330cf6aa458639aaec29090d9c5,0x9fe3c6449dd952b16fd452b096efb7f50a895adc,0x77582a98132c2be11a6c0f85ca6361555a030a68,0x886e88c733abbf5400b54766569b077088348ffe
-----Encoded View---------------
23 Constructor Arguments found :
Arg [0] : 000000000000000000000000db46d1dc155634fbc732f92e853b10b288ad5a1d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 000000000000000000000000b2989c99c673510d04b9a7202108164dc03e89c7
Arg [4] : 000000000000000000000000479b18c5c5cd07777d97c523983779bb6b4f8312
Arg [5] : 000000000000000000000000f1a42d1975826b6becbcaf6cd105eece26bc5c76
Arg [6] : 000000000000000000000000d209b5957a3eab13008a18179e44f97ab34269d2
Arg [7] : 00000000000000000000000075fae78ce542de64824df2e60e2828bc2a2d953c
Arg [8] : 000000000000000000000000e6ab66ca47b9c6cf5a0269786e6af86a44ff8c49
Arg [9] : 0000000000000000000000009a286e7f4c3245b812fadcd2c00bc818b9a754a0
Arg [10] : 000000000000000000000000db400abfa13e11a93a6b631ebad2f15ba4bc43da
Arg [11] : 0000000000000000000000005b24683d4ad155eda4782c8b6930b2c065014c32
Arg [12] : 000000000000000000000000d1feccf6881970105dfb2b654054174007f0e07e
Arg [13] : 000000000000000000000000900cab7bb11ae04b943496fd6ae686fb15f4d98e
Arg [14] : 00000000000000000000000010773553e2144379c63fc69ad357217acc79917e
Arg [15] : 0000000000000000000000006204bfaa0f5be46f0d3dea4334e66523a973086b
Arg [16] : 000000000000000000000000ac5314fc0cd30064c6bd143f74aa724c0c69fd40
Arg [17] : 000000000000000000000000ba4ae59edf4b34974dd6b19c89646b09ab1e044d
Arg [18] : 000000000000000000000000765f899cc972768cd0440e7aab112c26afbee7ca
Arg [19] : 0000000000000000000000009c8297dfdbd09330cf6aa458639aaec29090d9c5
Arg [20] : 0000000000000000000000009fe3c6449dd952b16fd452b096efb7f50a895adc
Arg [21] : 00000000000000000000000077582a98132c2be11a6c0f85ca6361555a030a68
Arg [22] : 000000000000000000000000886e88c733abbf5400b54766569b077088348ffe
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.