Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ModuleGlobals
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 20 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
import {Errors} from "../../../libraries/Errors.sol";
import {Events} from "../../../libraries/Events.sol";
import {IModuleGlobals} from "../../../interfaces/IModuleGlobals.sol";
/**
* @title ModuleGlobals
* @author Lens Protocol
*
* @notice This contract contains data relevant to Lens modules, such as the module governance address, treasury
* address and treasury fee BPS.
*
* NOTE: The reason we have an additional governance address instead of just fetching it from the hub is to
* allow the flexibility of using different governance executors.
*/
contract ModuleGlobals is IModuleGlobals {
uint16 internal constant BPS_MAX = 10000;
mapping(address => bool) internal _currencyWhitelisted;
address internal _governance;
address internal _treasury;
uint16 internal _treasuryFee;
modifier onlyGov() {
if (msg.sender != _governance) revert Errors.NotGovernance();
_;
}
/**
* @notice Initializes the governance, treasury and treasury fee amounts.
*
* @param governance The governance address which has additional control over setting certain parameters.
* @param treasury The treasury address to direct fees to.
* @param treasuryFee The treasury fee in BPS to levy on collects.
*/
constructor(address governance, address treasury, uint16 treasuryFee) {
_setGovernance(governance);
_setTreasury(treasury);
_setTreasuryFee(treasuryFee);
_currencyWhitelisted[address(0x1)] = true;
// _currencyWhitelisted[
// address(0x4300000000000000000000000000000000000003)
// ] = true;
// _currencyWhitelisted[
// address(0x4300000000000000000000000000000000000004)
// ] = true;
}
/// @inheritdoc IModuleGlobals
function setGovernance(address newGovernance) external override onlyGov {
_setGovernance(newGovernance);
}
/// @inheritdoc IModuleGlobals
function setTreasury(address newTreasury) external override onlyGov {
_setTreasury(newTreasury);
}
/// @inheritdoc IModuleGlobals
function setTreasuryFee(uint16 newTreasuryFee) external override onlyGov {
_setTreasuryFee(newTreasuryFee);
}
/// @inheritdoc IModuleGlobals
function whitelistCurrency(
address currency,
bool toWhitelist
) external override onlyGov {
_whitelistCurrency(currency, toWhitelist);
}
/// @inheritdoc IModuleGlobals
function isCurrencyWhitelisted(
address currency
) external view override returns (bool) {
return _currencyWhitelisted[currency];
}
/// @inheritdoc IModuleGlobals
function getGovernance() external view override returns (address) {
return _governance;
}
/// @inheritdoc IModuleGlobals
function getTreasury() external view override returns (address) {
return _treasury;
}
/// @inheritdoc IModuleGlobals
function getTreasuryFee() external view override returns (uint16) {
return _treasuryFee;
}
//@inheritdoc IModuleGlobals
function getTreasuryData()
external
view
override
returns (address, uint16)
{
return (_treasury, _treasuryFee);
}
function _setGovernance(address newGovernance) internal {
if (newGovernance == address(0)) revert Errors.InitParamsInvalid();
address prevGovernance = _governance;
_governance = newGovernance;
emit Events.ModuleGlobalsGovernanceSet(prevGovernance, newGovernance);
}
function _setTreasury(address newTreasury) internal {
if (newTreasury == address(0)) revert Errors.InitParamsInvalid();
address prevTreasury = _treasury;
_treasury = newTreasury;
emit Events.ModuleGlobalsTreasurySet(prevTreasury, newTreasury);
}
function _setTreasuryFee(uint16 newTreasuryFee) internal {
if (newTreasuryFee > BPS_MAX / 10) revert Errors.InitParamsInvalid();
uint16 prevTreasuryFee = _treasuryFee;
_treasuryFee = newTreasuryFee;
emit Events.ModuleGlobalsTreasuryFeeSet(
prevTreasuryFee,
newTreasuryFee
);
}
function _whitelistCurrency(address currency, bool toWhitelist) internal {
if (currency == address(0)) revert Errors.InitParamsInvalid();
bool prevWhitelisted = _currencyWhitelisted[currency];
_currencyWhitelisted[currency] = toWhitelist;
emit Events.ModuleGlobalsCurrencyWhitelisted(
currency,
prevWhitelisted,
toWhitelist
);
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
/**
* @title IModuleGlobals
* @author Lens Protocol
*
* @notice This is the interface for the ModuleGlobals contract, a data providing contract to be queried by modules
* for the most up-to-date parameters.
*/
interface IModuleGlobals {
/**
* @notice Sets the governance address. This function can only be called by governance.
*
* @param newGovernance The new governance address to set.
*/
function setGovernance(address newGovernance) external;
/**
* @notice Sets the treasury address. This function can only be called by governance.
*
* @param newTreasury The new treasury address to set.
*/
function setTreasury(address newTreasury) external;
/**
* @notice Sets the treasury fee. This function can only be called by governance.
*
* @param newTreasuryFee The new treasury fee to set.
*/
function setTreasuryFee(uint16 newTreasuryFee) external;
/**
* @notice Adds or removes a currency from the whitelist. This function can only be called by governance.
*
* @param currency The currency to add or remove from the whitelist.
* @param toWhitelist Whether to add or remove the currency from the whitelist.
*/
function whitelistCurrency(address currency, bool toWhitelist) external;
/// ************************
/// *****VIEW FUNCTIONS*****
/// ************************
/**
* @notice Returns whether a currency is whitelisted.
*
* @param currency The currency to query the whitelist for.
*
* @return bool True if the queried currency is whitelisted, false otherwise.
*/
function isCurrencyWhitelisted(
address currency
) external view returns (bool);
/**
* @notice Returns the governance address.
*
* @return address The governance address.
*/
function getGovernance() external view returns (address);
/**
* @notice Returns the treasury address.
*
* @return address The treasury address.
*/
function getTreasury() external view returns (address);
/**
* @notice Returns the treasury fee.
*
* @return uint16 The treasury fee.
*/
function getTreasuryFee() external view returns (uint16);
/**
* @notice Returns the treasury address and treasury fee in a single call.
*
* @return tuplee First, the treasury address, second, the treasury fee.
*/
function getTreasuryData() external view returns (address, uint16);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
library DataTypes {
enum State {
OpenForAll,
CreateCollectionPaused,
Paused
}
struct CreateNewCollectionData {
uint256 royalty;
string collInfoURI;
string collName;
string collSymbol;
address derivedRuleModule;
bytes derivedRuleModuleInitData;
}
struct CreateNewNFTData {
uint256 collectionId;
string nftInfoURI;
uint256 derivedFrom;
bytes derivedModuleData;
bytes32[] proof;
}
struct LimitBurnToken {
uint256 collectionId;
uint256 tokenId;
}
struct EIP712Signature {
uint8 v;
bytes32 r;
bytes32 s;
uint256 deadline;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
library Errors {
error NotGovernance();
error NotCollectionOwner();
error InitParamsInvalid();
error CannotInitImplementation();
error Initialized();
error Paused();
error NotOwnerOrApproved();
error NotHub();
error AlreadyTrade();
error RoyaltyTooHigh();
error DerivedRuleModuleNotWhitelisted();
error CollectionIdNotExist();
error JustOwnerCanPublishRootNode();
error ModuleDataMismatch();
error MintLimitExceeded();
error MintExpired();
error BurnExpiredOneWeek();
error DerivedFromNFTNotExist();
error NotInWhiteList();
error CanNotDeleteZeroNFT();
error EmptyMerkleRoot();
error AlreadyFinish();
error NotEnoughEth();
error AlreadyClaimed();
error MerkleProofVerifyFailed();
error SendETHFailed();
error NotArriveClaimTime();
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.18;
import {DataTypes} from "./DataTypes.sol";
library Events {
event GovernanceSet(
address indexed caller,
address indexed prevGovernance,
address indexed newGovernance
);
event StateSet(
address indexed caller,
DataTypes.State indexed prevState,
DataTypes.State indexed newState
);
event MaxRoyaltySet(
address indexed caller,
uint32 indexed prevMaxBaseRoyalty,
uint32 indexed newMaxBaseRoyalty
);
event StakeAndYieldContractAddressSet(
address indexed caller,
address indexed prevStakeAndYieldContractAddress,
address indexed newStakeAndYieldContractAddress
);
event CreateCollectionStakeEthAmountSet(
address indexed caller,
uint256 indexed prevStakeEthAmount,
uint256 indexed newStakeEthAmount
);
event RoyaltyDataSet(
address indexed caller,
address indexed royaltyAddr,
uint32 indexed percentage
);
event NewCollectionCreated(
address indexed collectionOwner,
address derivedCollectionAddr,
address derivedRuleModule,
address currency,
uint256 collectionId,
uint256 baseRoyalty,
uint256 mintLimit,
uint256 mintExpired,
uint256 mintPrice,
bytes32 whiteListRootHash,
string collInfoURI,
string name
);
event BurnNFTFromCollection(
uint256 collectionId,
uint256 nftId,
address burner,
address owner
);
event NewNFTCreated(
uint256 indexed tokenId,
uint256 indexed collectionId,
uint256 derivedFrom,
address collectionAddr,
address creator,
string nftInfoURI
);
event BaseInitialized(string name, string symbol);
event DerivedRuleModuleWhitelisted(
address derivedRuleModule,
bool whitelist
);
/**
* @notice Emitted when the ModuleGlobals governance address is set.
*
* @param prevGovernance The previous governance address.
* @param newGovernance The new governance address set.
*/
event ModuleGlobalsGovernanceSet(
address indexed prevGovernance,
address indexed newGovernance
);
/**
* @notice Emitted when the ModuleGlobals treasury address is set.
*
* @param prevTreasury The previous treasury address.
* @param newTreasury The new treasury address set.
*/
event ModuleGlobalsTreasurySet(
address indexed prevTreasury,
address indexed newTreasury
);
/**
* @notice Emitted when the ModuleGlobals treasury fee is set.
*
* @param prevTreasuryFee The previous treasury fee in BPS.
* @param newTreasuryFee The new treasury fee in BPS.
*/
event ModuleGlobalsTreasuryFeeSet(
uint16 indexed prevTreasuryFee,
uint16 indexed newTreasuryFee
);
/**
* @notice Emitted when a currency is added to or removed from the ModuleGlobals whitelist.
*
* @param currency The currency address.
* @param prevWhitelisted Whether or not the currency was previously whitelisted.
* @param whitelisted Whether or not the currency is whitelisted.
*/
event ModuleGlobalsCurrencyWhitelisted(
address indexed currency,
bool indexed prevWhitelisted,
bool indexed whitelisted
);
event SetNewRoundReward(
uint256 rewardId,
uint256 rewardAmount,
bytes32 merkleRoot
);
event ClaimYieldAndGas(
address contractAddr,
uint256 claimableYield,
uint256 gasEtherBalance
);
event ClaimStakeEth(address staker, uint256 claimAmount);
}{
"optimizer": {
"enabled": true,
"runs": 20,
"details": {
"yul": true
}
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"governance","type":"address"},{"internalType":"address","name":"treasury","type":"address"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InitParamsInvalid","type":"error"},{"inputs":[],"name":"NotGovernance","type":"error"},{"inputs":[],"name":"getGovernance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasuryData","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTreasuryFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"}],"name":"isCurrencyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newGovernance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newTreasuryFee","type":"uint16"}],"name":"setTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"currency","type":"address"},{"internalType":"bool","name":"toWhitelist","type":"bool"}],"name":"whitelistCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5060405161081f38038061081f83398101604081905261002f9161021f565b61003883610088565b61004182610101565b61004a8161017a565b5050600160008181526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d805460ff191690911790555061029c565b6001600160a01b0381166100af576040516348be0eb360e01b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907ff2c86dc6b0b35e1a39ca30cef142d7d6b22e19a6a80fc6e1aa65d8800cbfaf1f90600090a35050565b6001600160a01b038116610128576040516348be0eb360e01b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f5cb4acf97ee6ea8f25a68142111278feba4c06ea62d0133a3eaa607afa0a84b590600090a35050565b610187600a61271061026d565b61ffff168161ffff1611156101af576040516348be0eb360e01b815260040160405180910390fd5b6002805461ffff838116600160a01b81810261ffff60a01b1985161790945560405193909204169182907f2fb9c375d97e4a071d9c39e213c83b0ac8e05a2a38336d9b2f4063e7a337ea8d90600090a35050565b80516001600160a01b038116811461021a57600080fd5b919050565b60008060006060848603121561023457600080fd5b61023d84610203565b925061024b60208501610203565b9150604084015161ffff8116811461026257600080fd5b809150509250925092565b600061ffff8084168061029057634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b610574806102ab6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c8063289b3c0d1461008857806329070c6d146100b25780633b19e84a146100d357806343b938c5146100e45780638c3bfb1c1461012057806398f965d114610135578063a652db491461015f578063ab033ea914610172578063f0f4426014610185575b600080fd5b6001546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b600254600160a01b900461ffff1660405161ffff90911681526020016100a9565b6002546001600160a01b0316610095565b6101106100f236600461048d565b6001600160a01b031660009081526020819052604090205460ff1690565b60405190151581526020016100a9565b61013361012e3660046104af565b610198565b005b600254604080516001600160a01b0383168152600160a01b90920461ffff166020830152016100a9565b61013361016d3660046104eb565b6101d1565b61013361018036600461048d565b610208565b61013361019336600461048d565b61023c565b6001546001600160a01b031633146101c357604051632d5be4cb60e21b815260040160405180910390fd5b6101cd8282610270565b5050565b6001546001600160a01b031633146101fc57604051632d5be4cb60e21b815260040160405180910390fd5b610205816102f6565b50565b6001546001600160a01b0316331461023357604051632d5be4cb60e21b815260040160405180910390fd5b6102058161037f565b6001546001600160a01b0316331461026757604051632d5be4cb60e21b815260040160405180910390fd5b610205816103f8565b6001600160a01b038216610297576040516348be0eb360e01b815260040160405180910390fd5b6001600160a01b038216600081815260208190526040808220805485151560ff1982168117909255915160ff909216939092841515927f1630cbc8e97f59c3e910b379bee737cfea8536f1759396aac157436108e4ddd19190a4505050565b610303600a61271061050f565b61ffff168161ffff16111561032b576040516348be0eb360e01b815260040160405180910390fd5b6002805461ffff838116600160a01b81810261ffff60a01b1985161790945560405193909204169182907f2fb9c375d97e4a071d9c39e213c83b0ac8e05a2a38336d9b2f4063e7a337ea8d90600090a35050565b6001600160a01b0381166103a6576040516348be0eb360e01b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907ff2c86dc6b0b35e1a39ca30cef142d7d6b22e19a6a80fc6e1aa65d8800cbfaf1f90600090a35050565b6001600160a01b03811661041f576040516348be0eb360e01b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f5cb4acf97ee6ea8f25a68142111278feba4c06ea62d0133a3eaa607afa0a84b590600090a35050565b80356001600160a01b038116811461048857600080fd5b919050565b60006020828403121561049f57600080fd5b6104a882610471565b9392505050565b600080604083850312156104c257600080fd5b6104cb83610471565b9150602083013580151581146104e057600080fd5b809150509250929050565b6000602082840312156104fd57600080fd5b813561ffff811681146104a857600080fd5b600061ffff8084168061053257634e487b7160e01b600052601260045260246000fd5b9216919091049291505056fea264697066735822122005a10aa940cf6c7ba32a0a7a59b1186eafb8bd89d72c4c44bbf304e01973169764736f6c634300081200330000000000000000000000004e52df5f38f417db6a2a2325fc4cf69ee2c87fe20000000000000000000000004e52df5f38f417db6a2a2325fc4cf69ee2c87fe200000000000000000000000000000000000000000000000000000000000003e8
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100835760003560e01c8063289b3c0d1461008857806329070c6d146100b25780633b19e84a146100d357806343b938c5146100e45780638c3bfb1c1461012057806398f965d114610135578063a652db491461015f578063ab033ea914610172578063f0f4426014610185575b600080fd5b6001546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b600254600160a01b900461ffff1660405161ffff90911681526020016100a9565b6002546001600160a01b0316610095565b6101106100f236600461048d565b6001600160a01b031660009081526020819052604090205460ff1690565b60405190151581526020016100a9565b61013361012e3660046104af565b610198565b005b600254604080516001600160a01b0383168152600160a01b90920461ffff166020830152016100a9565b61013361016d3660046104eb565b6101d1565b61013361018036600461048d565b610208565b61013361019336600461048d565b61023c565b6001546001600160a01b031633146101c357604051632d5be4cb60e21b815260040160405180910390fd5b6101cd8282610270565b5050565b6001546001600160a01b031633146101fc57604051632d5be4cb60e21b815260040160405180910390fd5b610205816102f6565b50565b6001546001600160a01b0316331461023357604051632d5be4cb60e21b815260040160405180910390fd5b6102058161037f565b6001546001600160a01b0316331461026757604051632d5be4cb60e21b815260040160405180910390fd5b610205816103f8565b6001600160a01b038216610297576040516348be0eb360e01b815260040160405180910390fd5b6001600160a01b038216600081815260208190526040808220805485151560ff1982168117909255915160ff909216939092841515927f1630cbc8e97f59c3e910b379bee737cfea8536f1759396aac157436108e4ddd19190a4505050565b610303600a61271061050f565b61ffff168161ffff16111561032b576040516348be0eb360e01b815260040160405180910390fd5b6002805461ffff838116600160a01b81810261ffff60a01b1985161790945560405193909204169182907f2fb9c375d97e4a071d9c39e213c83b0ac8e05a2a38336d9b2f4063e7a337ea8d90600090a35050565b6001600160a01b0381166103a6576040516348be0eb360e01b815260040160405180910390fd5b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907ff2c86dc6b0b35e1a39ca30cef142d7d6b22e19a6a80fc6e1aa65d8800cbfaf1f90600090a35050565b6001600160a01b03811661041f576040516348be0eb360e01b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f5cb4acf97ee6ea8f25a68142111278feba4c06ea62d0133a3eaa607afa0a84b590600090a35050565b80356001600160a01b038116811461048857600080fd5b919050565b60006020828403121561049f57600080fd5b6104a882610471565b9392505050565b600080604083850312156104c257600080fd5b6104cb83610471565b9150602083013580151581146104e057600080fd5b809150509250929050565b6000602082840312156104fd57600080fd5b813561ffff811681146104a857600080fd5b600061ffff8084168061053257634e487b7160e01b600052601260045260246000fd5b9216919091049291505056fea264697066735822122005a10aa940cf6c7ba32a0a7a59b1186eafb8bd89d72c4c44bbf304e01973169764736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004e52df5f38f417db6a2a2325fc4cf69ee2c87fe20000000000000000000000004e52df5f38f417db6a2a2325fc4cf69ee2c87fe200000000000000000000000000000000000000000000000000000000000003e8
-----Decoded View---------------
Arg [0] : governance (address): 0x4E52dF5f38F417dB6A2a2325fC4cf69eE2C87fe2
Arg [1] : treasury (address): 0x4E52dF5f38F417dB6A2a2325fC4cf69eE2C87fe2
Arg [2] : treasuryFee (uint16): 1000
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004e52df5f38f417db6a2a2325fc4cf69ee2c87fe2
Arg [1] : 0000000000000000000000004e52df5f38f417db6a2a2325fc4cf69ee2c87fe2
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e8
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.