Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LauncherPlugin
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 1633 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.24; import {ILauncherPlugin} from "./interfaces/ILauncherPlugin.sol"; import {IVoter} from "./interfaces/IVoter.sol"; /// @author ShadowDEX on Sonic /// @title LauncherPlugins contract for modular plug-n-play with Sonic memes /** @dev There are two trusted roles in the LauncherPlugin system * Authority: Whitelisted external launchers, e.g. DegenExpress * Operator: Shadow operational multisig, or other timelocked/secure system * AccessHub: central authority management contract * These roles are to be managed securely, and with diligence to prevent abuse * However, the system already has checks in place to mitigate any possible abuse situations ahead of time */ contract LauncherPlugin is ILauncherPlugin { /// @inheritdoc ILauncherPlugin address public accessHub; /// @inheritdoc ILauncherPlugin address public operator; /// @notice the voter contract IVoter public immutable voter; /// @inheritdoc ILauncherPlugin mapping(address pool => bool isEnabled) public launcherPluginEnabled; /// @inheritdoc ILauncherPlugin mapping(address pool => LauncherConfigs) public poolConfigs; /// @inheritdoc ILauncherPlugin mapping(address pool => address feeDist) public feeDistToPool; /// @inheritdoc ILauncherPlugin mapping(address who => bool authority) public authorityMap; /// @inheritdoc ILauncherPlugin mapping(address authority => string name) public nameOfAuthority; /// @inheritdoc ILauncherPlugin uint256 public constant DENOM = 10_000; modifier onlyAuthority() { /// @dev authority check of either the operator of authority in the mapping require( authorityMap[msg.sender] || msg.sender == accessHub, NOT_AUTHORITY() ); _; } modifier onlyOperator() { /// @dev redundant `operator` address put here as a safeguard for input errors on transferring roles require( msg.sender == accessHub || msg.sender == operator, NOT_OPERATOR() ); _; } constructor(address _voter, address _accessHub, address _operator) { /// @dev initialize the voter voter = IVoter(_voter); /// @dev operator and team initially are the same accessHub = _accessHub; operator = _operator; } /// @inheritdoc ILauncherPlugin /// @dev should be called by another contract with proper batching of function calls function setConfigs( address _pool, uint256 _take, address _recipient ) external onlyAuthority { /// @dev ensure launcherPlugins are enabled require(launcherPluginEnabled[_pool], NOT_ENABLED(_pool)); /// @dev ensure the fee is <= 100% require(_take <= DENOM, INVALID_TAKE()); /// @dev store launcher configs in pool to struct mapping LauncherConfigs memory lc = LauncherConfigs(_take, _recipient); /// @dev store the pool configs in the mapping poolConfigs[_pool] = lc; /// @dev emit an event for configuration emit Configured(_pool, _take, _recipient); } /// @inheritdoc ILauncherPlugin /// @dev should be called by another contract with proper batching of function calls function enablePool(address _pool) external onlyAuthority { /// @dev require that the plugin is enabled require(!launcherPluginEnabled[_pool], ENABLED()); /// @dev fetch the feeDistributor address address _feeDist = voter.feeDistributorForGauge( voter.gaugeForPool(_pool) ); /// @dev check that _feeDist is not the zero addresss require(_feeDist != address(0), NO_FEEDIST()); /// @dev set the feeDist for the pool feeDistToPool[_feeDist] = _pool; launcherPluginEnabled[_pool] = true; /// @dev emit with the name of the authority emit EnabledPool(_pool, nameOfAuthority[msg.sender]); } /// @inheritdoc ILauncherPlugin function migratePool(address _oldPool, address _newPool) external { /// @dev gate to accessHub and the current operator require( msg.sender == accessHub || msg.sender == operator, IVoter.NOT_AUTHORIZED(msg.sender) ); require(launcherPluginEnabled[_oldPool], NOT_ENABLED(_oldPool)); launcherPluginEnabled[_newPool] = true; /// @dev fetch the feedists for each pool (address _feeDist, address _newFeeDist) = ( voter.feeDistributorForGauge(voter.gaugeForPool(_oldPool)), voter.feeDistributorForGauge(voter.gaugeForPool(_newPool)) ); /// @dev set the new pool's feedist feeDistToPool[_newFeeDist] = _newPool; /// @dev copy over the values poolConfigs[_newPool] = poolConfigs[_oldPool]; /// @dev delete old values delete poolConfigs[_oldPool]; /// @dev set to disabled launcherPluginEnabled[_oldPool] = false; /// @dev set the old fee dist to the new one as a safety measure feeDistToPool[_feeDist] = feeDistToPool[_newFeeDist]; emit MigratedPool(_oldPool, _newPool); } /// @inheritdoc ILauncherPlugin function disablePool(address _pool) external onlyOperator { /// @dev require the plugin is already enabled require(launcherPluginEnabled[_pool], NOT_ENABLED(_pool)); /// @dev wipe struct delete poolConfigs[_pool]; /// @dev wipe the mapping for feeDist to the pool, incase the feeDist is overwritten delete feeDistToPool[ voter.feeDistributorForGauge(voter.gaugeForPool(_pool)) ]; /// @dev set to disabled launcherPluginEnabled[_pool] = false; /// @dev emit an event emit DisabledPool(_pool); } /// @inheritdoc ILauncherPlugin function setOperator(address _newOperator) external onlyOperator { /// @dev ensure the new operator is not already the operator require(operator != _newOperator, ALREADY_OPERATOR()); /// @dev store the oldOperator to use in the event, for info purposes address oldOperator = operator; /// @dev set operator as the new operator operator = _newOperator; /// @dev emit operator change event emit NewOperator(oldOperator, operator); } /// @inheritdoc ILauncherPlugin function grantAuthority( address _newAuthority, string calldata _name ) external onlyOperator { /// @dev ensure the proposed _newAuthority is not already one require(!authorityMap[_newAuthority], ALREADY_AUTHORITY()); /// @dev set the mapping to true authorityMap[_newAuthority] = true; /// @dev emit the new authority event emit NewAuthority(_newAuthority); /// @dev label the authority _labelAuthority(_newAuthority, _name); } /// @inheritdoc ILauncherPlugin function revokeAuthority(address _oldAuthority) external onlyOperator { /// @dev ensure _oldAuthority is already an authority require(authorityMap[_oldAuthority], NOT_AUTHORITY()); /// @dev set the mapping to false authorityMap[_oldAuthority] = false; /// @dev emit the remove authority event emit RemovedAuthority(_oldAuthority); } /// @inheritdoc ILauncherPlugin function label( address _authority, string calldata _label ) external onlyOperator { _labelAuthority(_authority, _label); } /// @inheritdoc ILauncherPlugin function values( address _feeDist ) external view returns (uint256 _take, address _recipient) { /// @dev fetch the poolConfigs from the mapping LauncherConfigs memory _tmp = poolConfigs[feeDistToPool[_feeDist]]; /// @dev return the existing values return (_tmp.launcherTake, _tmp.takeRecipient); } /// @dev internal function called on creation and manually function _labelAuthority( address _authority, string calldata _label ) internal { /// @dev ensure they are an authority require(authorityMap[_authority], NOT_AUTHORITY()); /// @dev label the authority nameOfAuthority[_authority] = _label; /// @dev emit on label emit Labeled(_authority, _label); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.26; interface ILauncherPlugin { error NOT_AUTHORITY(); error ALREADY_AUTHORITY(); error NOT_OPERATOR(); error ALREADY_OPERATOR(); error NOT_ENABLED(address pool); error NO_FEEDIST(); error ENABLED(); error INVALID_TAKE(); /// @dev struct that holds the configurations of each specific pool struct LauncherConfigs { uint256 launcherTake; address takeRecipient; } event NewOperator(address indexed _old, address indexed _new); event NewAuthority(address indexed _newAuthority); event RemovedAuthority(address indexed _previousAuthority); event EnabledPool(address indexed pool, string indexed _name); event DisabledPool(address indexed pool); event MigratedPool(address indexed oldPool, address indexed newPool); event Configured( address indexed pool, uint256 take, address indexed recipient ); event Labeled(address indexed authority, string indexed label); /// @notice address of the accessHub function accessHub() external view returns (address _accessHub); /// @notice protocol operator address function operator() external view returns (address _operator); /// @notice the denominator constant function DENOM() external view returns (uint256 _denominator); /// @notice whether configs are enabled for a pool /// @param _pool address of the pool /// @return bool function launcherPluginEnabled(address _pool) external view returns (bool); /// @notice maps whether an address is an authority or not /// @param _who the address to check /// @return _is true or false function authorityMap(address _who) external view returns (bool _is); /// @notice allows migrating the parameters from one pool to the other /// @param _oldPool the current address of the pair /// @param _newPool the new pool's address function migratePool(address _oldPool, address _newPool) external; /// @notice fetch the launcher configs if any /// @param _pool address of the pool /// @return LauncherConfigs the configs function poolConfigs( address _pool ) external view returns (uint256, address); /// @notice view functionality to see who is an authority function nameOfAuthority(address) external view returns (string memory); /// @notice returns the pool address for a feeDist /// @param _feeDist address of the feeDist /// @return _pool the pool address from the mapping function feeDistToPool( address _feeDist ) external view returns (address _pool); /// @notice set launcher configurations for a pool /// @param _pool address of the pool /// @param _take the fee that goes to the designated recipient /// @param _recipient the address that receives the fees function setConfigs( address _pool, uint256 _take, address _recipient ) external; /// @notice enables the pool for LauncherConfigs /// @param _pool address of the pool function enablePool(address _pool) external; /// @notice disables the pool for LauncherConfigs /// @dev clears mappings /// @param _pool address of the pool function disablePool(address _pool) external; /// @notice sets a new operator address /// @param _newOperator new operator address function setOperator(address _newOperator) external; /// @notice gives authority to a new contract/address /// @param _newAuthority the suggested new authority function grantAuthority(address _newAuthority, string calldata) external; /// @notice removes authority from a contract/address /// @param _oldAuthority the to-be-removed authority function revokeAuthority(address _oldAuthority) external; /// @notice labels an authority function label(address, string calldata) external; /// @notice returns the values for the launcherConfig of the specific feeDist /// @param _feeDist the address of the feeDist /// @return _launcherTake fee amount taken /// @return _recipient address that receives the fees function values( address _feeDist ) external view returns (uint256 _launcherTake, address _recipient); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.26; pragma abicoder v2; interface IVoter { error ACTIVE_GAUGE(address gauge); error GAUGE_INACTIVE(address gauge); error ALREADY_WHITELISTED(address token); error NOT_AUTHORIZED(address caller); error NOT_WHITELISTED(); error NOT_POOL(); error NOT_INIT(); error LENGTH_MISMATCH(); error NO_GAUGE(); error ALREADY_DISTRIBUTED(address gauge, uint256 period); error ZERO_VOTE(address pool); error RATIO_TOO_HIGH(uint256 _xRatio); error VOTE_UNSUCCESSFUL(); event GaugeCreated( address indexed gauge, address creator, address feeDistributor, address indexed pool ); event GaugeKilled(address indexed gauge); event GaugeRevived(address indexed gauge); event Voted(address indexed owner, uint256 weight, address indexed pool); event Abstained(address indexed owner, uint256 weight); event Deposit( address indexed lp, address indexed gauge, address indexed owner, uint256 amount ); event Withdraw( address indexed lp, address indexed gauge, address indexed owner, uint256 amount ); event NotifyReward( address indexed sender, address indexed reward, uint256 amount ); event DistributeReward( address indexed sender, address indexed gauge, uint256 amount ); event EmissionsRatio( address indexed caller, uint256 oldRatio, uint256 newRatio ); event NewGovernor(address indexed sender, address indexed governor); event Whitelisted(address indexed whitelister, address indexed token); event WhitelistRevoked( address indexed forbidder, address indexed token, bool status ); event MainTickSpacingChanged( address indexed token0, address indexed token1, int24 indexed newMainTickSpacing ); event Poke(address indexed user); function initialize( address _emissionsToken, address _legacyFactory, address _gauges, address _feeDistributorFactory, address _minter, address _msig, address _xShadow, address _clFactory, address _clGaugeFactory, address _nfpManager, address _feeRecipientFactory, address _voteModule, address _launcherPlugin ) external; /// @notice denominator basis function BASIS() external view returns (uint256); /// @notice ratio of xShadow emissions globally function xRatio() external view returns (uint256); /// @notice xShadow contract address function xShadow() external view returns (address); /// @notice legacy factory address (uni-v2/stableswap) function legacyFactory() external view returns (address); /// @notice concentrated liquidity factory function clFactory() external view returns (address); /// @notice gauge factory for CL function clGaugeFactory() external view returns (address); /// @notice legacy fee recipient factory function feeRecipientFactory() external view returns (address); /// @notice peripheral NFPManager contract function nfpManager() external view returns (address); /// @notice returns the address of the current governor /// @return _governor address of the governor function governor() external view returns (address _governor); /// @notice the address of the vote module /// @return _voteModule the vote module contract address function voteModule() external view returns (address _voteModule); /// @notice address of the central access Hub function accessHub() external view returns (address); /// @notice the address of the shadow launcher plugin to enable third party launchers /// @return _launcherPlugin the address of the plugin function launcherPlugin() external view returns (address _launcherPlugin); /// @notice distributes emissions from the minter to the voter /// @param amount the amount of tokens to notify function notifyRewardAmount(uint256 amount) external; /// @notice distributes the emissions for a specific gauge /// @param _gauge the gauge address function distribute(address _gauge) external; /// @notice returns the address of the gauge factory /// @param _gaugeFactory gauge factory address function gaugeFactory() external view returns (address _gaugeFactory); /// @notice returns the address of the feeDistributor factory /// @return _feeDistributorFactory feeDist factory address function feeDistributorFactory() external view returns (address _feeDistributorFactory); /// @notice returns the address of the minter contract /// @return _minter address of the minter function minter() external view returns (address _minter); /// @notice check if the gauge is active for governance use /// @param _gauge address of the gauge /// @return _trueOrFalse if the gauge is alive function isAlive(address _gauge) external view returns (bool _trueOrFalse); /// @notice allows the token to be paired with other whitelisted assets to participate in governance /// @param _token the address of the token function whitelist(address _token) external; /// @notice effectively disqualifies a token from governance /// @param _token the address of the token function revokeWhitelist(address _token) external; /// @notice returns if the address is a gauge /// @param gauge address of the gauge /// @return _trueOrFalse boolean if the address is a gauge function isGauge(address gauge) external view returns (bool _trueOrFalse); /// @notice disable a gauge from governance /// @param _gauge address of the gauge function killGauge(address _gauge) external; /// @notice re-activate a dead gauge /// @param _gauge address of the gauge function reviveGauge(address _gauge) external; /// @notice re-cast a tokenID's votes /// @param owner address of the owner function poke(address owner) external; /// @notice sets the main tickspacing of a token pairing /// @param tokenA address of tokenA /// @param tokenB address of tokenB /// @param tickSpacing the main tickspacing to set to function setMainTickSpacing( address tokenA, address tokenB, int24 tickSpacing ) external; /// @notice returns if the address is a fee distributor /// @param _feeDistributor address of the feeDist /// @return _trueOrFalse if the address is a fee distributor function isFeeDistributor( address _feeDistributor ) external view returns (bool _trueOrFalse); /// @notice returns the address of the emission's token /// @return _emissionsToken emissions token contract address function emissionsToken() external view returns (address _emissionsToken); /// @notice returns the address of the pool's gauge, if any /// @param _pool pool address /// @return _gauge gauge address function gaugeForPool(address _pool) external view returns (address _gauge); /// @notice returns the address of the pool's feeDistributor, if any /// @param _gauge address of the gauge /// @return _feeDistributor address of the pool's feedist function feeDistributorForGauge( address _gauge ) external view returns (address _feeDistributor); /// @notice returns the new toPool that was redirected fromPool /// @param fromPool address of the original pool /// @return toPool the address of the redirected pool function poolRedirect( address fromPool ) external view returns (address toPool); /// @notice returns the gauge address of a CL pool /// @param tokenA address of token A in the pair /// @param tokenB address of token B in the pair /// @param tickSpacing tickspacing of the pool /// @return gauge address of the gauge function gaugeForClPool( address tokenA, address tokenB, int24 tickSpacing ) external view returns (address gauge); /// @notice returns the array of all tickspacings for the tokenA/tokenB combination /// @param tokenA address of token A in the pair /// @param tokenB address of token B in the pair /// @return _ts array of all the tickspacings function tickSpacingsForPair( address tokenA, address tokenB ) external view returns (int24[] memory _ts); /// @notice returns the main tickspacing used in the gauge/governance process /// @param tokenA address of token A in the pair /// @param tokenB address of token B in the pair /// @return _ts the main tickspacing function mainTickSpacingForPair( address tokenA, address tokenB ) external view returns (int24 _ts); /// @notice returns the block.timestamp divided by 1 week in seconds /// @return period the period used for gauges function getPeriod() external view returns (uint256 period); /// @notice cast a vote to direct emissions to gauges and earn incentives /// @param owner address of the owner /// @param _pools the list of pools to vote on /// @param _weights an arbitrary weight per pool which will be normalized to 100% regardless of numerical inputs function vote( address owner, address[] calldata _pools, uint256[] calldata _weights ) external; /// @notice reset the vote of an address /// @param owner address of the owner function reset(address owner) external; /// @notice set the governor address /// @param _governor the new governor address function setGovernor(address _governor) external; /// @notice recover stuck emissions /// @param _gauge the gauge address /// @param _period the period function stuckEmissionsRecovery(address _gauge, uint256 _period) external; /// @notice whitelists extra rewards for a gauge /// @param _gauge the gauge to whitelist rewards to /// @param _reward the reward to whitelist function whitelistGaugeRewards(address _gauge, address _reward) external; /// @notice removes a reward from the gauge whitelist /// @param _gauge the gauge to remove the whitelist from /// @param _reward the reward to remove from the whitelist function removeGaugeRewardWhitelist( address _gauge, address _reward ) external; /// @notice creates a legacy gauge for the pool /// @param _pool pool's address /// @return _gauge address of the new gauge function createGauge(address _pool) external returns (address _gauge); /// @notice create a concentrated liquidity gauge /// @param tokenA the address of tokenA /// @param tokenB the address of tokenB /// @param tickSpacing the tickspacing of the pool /// @return _clGauge address of the new gauge function createCLGauge( address tokenA, address tokenB, int24 tickSpacing ) external returns (address _clGauge); /// @notice claim concentrated liquidity gauge rewards for specific NFP token ids /// @param _gauges array of gauges /// @param _tokens two dimensional array for the tokens to claim /// @param _nfpTokenIds two dimensional array for the NFPs function claimClGaugeRewards( address[] calldata _gauges, address[][] calldata _tokens, uint256[][] calldata _nfpTokenIds ) external; /// @notice claim arbitrary rewards from specific feeDists /// @param owner address of the owner /// @param _feeDistributors address of the feeDists /// @param _tokens two dimensional array for the tokens to claim function claimIncentives( address owner, address[] calldata _feeDistributors, address[][] calldata _tokens ) external; /// @notice claim arbitrary rewards from specific gauges /// @param _gauges address of the gauges /// @param _tokens two dimensional array for the tokens to claim function claimRewards( address[] calldata _gauges, address[][] calldata _tokens ) external; /// @notice distribute emissions to a gauge for a specific period /// @param _gauge address of the gauge /// @param _period value of the period function distributeForPeriod(address _gauge, uint256 _period) external; /// @notice attempt distribution of emissions to all gauges function distributeAll() external; /// @notice distribute emissions to gauges by index /// @param startIndex start of the loop /// @param endIndex end of the loop function batchDistributeByIndex( uint256 startIndex, uint256 endIndex ) external; /// @notice returns the votes cast for a tokenID /// @param owner address of the owner /// @return votes an array of votes casted /// @return weights an array of the weights casted per pool function getVotes( address owner, uint256 period ) external view returns (address[] memory votes, uint256[] memory weights); /// @notice returns an array of all the gauges /// @return _gauges the array of gauges function getAllGauges() external view returns (address[] memory _gauges); /// @notice returns an array of all the feeDists /// @return _feeDistributors the array of feeDists function getAllFeeDistributors() external view returns (address[] memory _feeDistributors); /// @notice sets the xShadowRatio default function setGlobalRatio(uint256 _xRatio) external; /// @notice whether the token is whitelisted in governance function isWhitelisted(address _token) external view returns (bool _tf); /// @notice function for removing malicious or stuffed tokens function removeFeeDistributorReward( address _feeDist, address _token ) external; }
{ "remappings": [ "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/", "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/", "@forge-std-1.9.4/=dependencies/forge-std-1.9.4/", "@layerzerolabs/=node_modules/@layerzerolabs/", "@layerzerolabs/lz-evm-protocol-v2/=node_modules/@layerzerolabs/lz-evm-protocol-v2/", "@openzeppelin-contracts-upgradeable/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/", "@openzeppelin-contracts/contracts/=dependencies/@openzeppelin-contracts-5.1.0/", "@openzeppelin/contracts/=dependencies/@openzeppelin-contracts-5.1.0/", "erc4626-tests/=dependencies/erc4626-property-tests-1.0/", "forge-std/=dependencies/forge-std-1.9.4/src/", "permit2/=lib/permit2/", "@openzeppelin-3.4.2/=node_modules/@openzeppelin-3.4.2/", "@openzeppelin-contracts-5.1.0/=dependencies/@openzeppelin-contracts-5.1.0/", "@openzeppelin-contracts-upgradeable-5.1.0/=dependencies/@openzeppelin-contracts-upgradeable-5.1.0/", "@uniswap/=node_modules/@uniswap/", "base64-sol/=node_modules/base64-sol/", "ds-test/=node_modules/ds-test/", "erc4626-property-tests-1.0/=dependencies/erc4626-property-tests-1.0/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "forge-std-1.9.4/=dependencies/forge-std-1.9.4/src/", "hardhat/=node_modules/hardhat/", "solidity-bytes-utils/=node_modules/solidity-bytes-utils/", "solmate/=node_modules/solmate/" ], "optimizer": { "enabled": true, "runs": 1633 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": { "contracts/libraries/RewardClaimers.sol": { "RewardClaimers": "0x6D2fC04561107a8aaE638499D0d692E3Da424Bc8" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_voter","type":"address"},{"internalType":"address","name":"_accessHub","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ALREADY_AUTHORITY","type":"error"},{"inputs":[],"name":"ALREADY_OPERATOR","type":"error"},{"inputs":[],"name":"ENABLED","type":"error"},{"inputs":[],"name":"INVALID_TAKE","type":"error"},{"inputs":[],"name":"NOT_AUTHORITY","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"NOT_AUTHORIZED","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"NOT_ENABLED","type":"error"},{"inputs":[],"name":"NOT_OPERATOR","type":"error"},{"inputs":[],"name":"NO_FEEDIST","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"take","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"Configured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"DisabledPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"string","name":"_name","type":"string"}],"name":"EnabledPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"authority","type":"address"},{"indexed":true,"internalType":"string","name":"label","type":"string"}],"name":"Labeled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldPool","type":"address"},{"indexed":true,"internalType":"address","name":"newPool","type":"address"}],"name":"MigratedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newAuthority","type":"address"}],"name":"NewAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_old","type":"address"},{"indexed":true,"internalType":"address","name":"_new","type":"address"}],"name":"NewOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_previousAuthority","type":"address"}],"name":"RemovedAuthority","type":"event"},{"inputs":[],"name":"DENOM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accessHub","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorityMap","outputs":[{"internalType":"bool","name":"authority","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"disablePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"enablePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"feeDistToPool","outputs":[{"internalType":"address","name":"feeDist","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newAuthority","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"grantAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authority","type":"address"},{"internalType":"string","name":"_label","type":"string"}],"name":"label","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"launcherPluginEnabled","outputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oldPool","type":"address"},{"internalType":"address","name":"_newPool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"authority","type":"address"}],"name":"nameOfAuthority","outputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"poolConfigs","outputs":[{"internalType":"uint256","name":"launcherTake","type":"uint256"},{"internalType":"address","name":"takeRecipient","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oldAuthority","type":"address"}],"name":"revokeAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"uint256","name":"_take","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"setConfigs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeDist","type":"address"}],"name":"values","outputs":[{"internalType":"uint256","name":"_take","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0346100bd57601f61137238819003918201601f19168301916001600160401b038311848410176100c1578084926060946040528339810103126100bd57610047816100d5565b906100606040610059602084016100d5565b92016100d5565b6001600160a01b039283166080525f80549284166001600160a01b03199384161790556001805491909316911617905560405161128890816100ea823960805181818161017e0152818161062e01528181610a430152610d1c0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100bd5756fe6080806040526004361015610012575f80fd5b5f3560e01c9081630792d51314610f3f5750806316343da414610f235780631e8d2e4d14610ee257806322d65c3b14610ea55780632aeb8f2214610e075780632cd21e0014610d4057806346c96aac14610cfd57806354fe9fd714610c83578063570ca73514610c5d578063595aeb50146109e75780635dbb6eb4146108f4578063772b7e97146105a35780638668a49414610566578063b3ab15fb1461049d578063c657c71814610456578063d309dbc6146102fb578063dcaaa61b1461010b5763e7589b39146100e2575f80fd5b34610107575f3660031901126101075760206001600160a01b035f5416604051908152f35b5f80fd5b3461010757602036600319011261010757610124610f8d565b6001600160a01b035f5416331480156102e7575b156102bf576101606001600160a01b03821691825f52600260205260ff60405f2054166110b0565b805f5260036020525f60016040822082815501556001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040516302045be960e41b8152826004820152602081602481855afa80156102975760246001600160a01b03916020935f916102a2575b506040519485938492630f55858b60e41b84521660048301525afa8015610297576001600160a01b03915f91610268575b50165f52600460205260405f2073ffffffffffffffffffffffffffffffffffffffff198154169055805f52600260205260405f2060ff1981541690557fa41ee6d9177c663f26b51d8cc24e94c7331ffe79e49f760a14f15da1494ad1ca5f80a2005b61028a915060203d602011610290575b610282818361106f565b810190611091565b83610206565b503d610278565b6040513d5f823e3d90fd5b6102b99150843d861161029057610282818361106f565b866101d5565b7f19ca4b5e000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b03600154163314610138565b3461010757606036600319011261010757610314610f8d565b60243590604435916001600160a01b03831680930361010757335f52600560205260ff60405f2054168015610443575b1561041b5761036c6001600160a01b03831692835f52600260205260ff60405f2054166110b0565b61271081116103f35760207fef6b9552a5aee5bbfb0c617440309047e908953f5258b53d1078ffc0d6c884ab916040516103a58161103f565b8181526001600160a01b03600181858401898152885f526003875260405f209451855551169201911673ffffffffffffffffffffffffffffffffffffffff19825416179055604051908152a3005b7fc65df89d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc18fdad5000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b035f54163314610344565b346101075761046436610fa3565b906001600160a01b035f541633148015610489575b156102bf57610487926110ed565b005b506001600160a01b03600154163314610479565b34610107576020366003190112610107576104b6610f8d565b6001600160a01b035f541633148015610552575b156102bf57600154906001600160a01b0380831691169182821461052a5773ffffffffffffffffffffffffffffffffffffffff191682176001557ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c5f80a3005b7ff6bb6439000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b036001541633146104ca565b34610107576020366003190112610107576001600160a01b03610587610f8d565b165f526002602052602060ff60405f2054166040519015158152f35b34610107576040366003190112610107576105bc610f8d565b602435906001600160a01b038216809203610107576001600160a01b035f5416331480156108e0575b156108b45761060d6001600160a01b03821691825f52600260205260ff60405f2054166110b0565b815f52600260205260405f20600160ff198254161790556001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016604051906302045be960e41b8252826004830152602082602481845afa918215610297575f92610893575b506001600160a01b0360405192630f55858b60e41b8452166004830152602082602481845afa918215610297575f92610872575b506040516302045be960e41b8152846004820152602081602481855afa80156102975760246001600160a01b03916020935f91610855575b506040519485938492630f55858b60e41b84521660048301525afa8015610297576001600160a01b03915f91610836575b5016805f52600460205260405f208473ffffffffffffffffffffffffffffffffffffffff19825416179055825f52600360205260405f20845f52600360205260405f20908082036107fb575b5050825f5260036020525f6001604082208281550155825f52600260205260405f2060ff1981541690555f5260046020526001600160a01b038060405f20541691165f5260046020526001600160a01b0360405f20911673ffffffffffffffffffffffffffffffffffffffff198254161790557fa929e32c44fd4ebbb29a358c16e6cfb9b08d721f2a5e71126734a73a390e945c5f80a3005b60016001600160a01b03818382945486550154169201911673ffffffffffffffffffffffffffffffffffffffff198254161790558480610762565b61084f915060203d60201161029057610282818361106f565b85610716565b61086c9150843d861161029057610282818361106f565b886106e5565b61088c91925060203d60201161029057610282818361106f565b90846106ad565b6108ad91925060203d60201161029057610282818361106f565b9084610679565b7f2bc10c33000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b506001600160a01b036001541633146105e5565b34610107576020366003190112610107576001600160a01b03610915610f8d565b165f52600660205260405f206040515f82549261093184611007565b9081845260208401946001811690815f146109ca575060011461098a575b8460408561095f8187038261106f565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b8082106109b05750909150810160200161095f8261094f565b919260018160209254838588010152019101909291610997565b60ff191686525050151560051b8201602001905061095f8261094f565b3461010757602036600319011261010757610a00610f8d565b335f52600560205260ff60405f2054168015610c4a575b1561041b576001600160a01b0316805f52600260205260ff60405f205416610c22576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166040516302045be960e41b8152826004820152602081602481855afa80156102975760246001600160a01b03916020935f91610c05575b506040519485938492630f55858b60e41b84521660048301525afa8015610297576001600160a01b03915f91610be6575b50168015610bbe575f52600460205260405f208173ffffffffffffffffffffffffffffffffffffffff19825416179055805f52600260205260405f20600160ff19825416179055335f52600660205260405f2060405180915f90805490610b3182611007565b9160018116908115610ba75750600114610b72575b5050039020907fec779a851842f582d1e28aca39c7057da0596cf816d0535bec1df1c0b59fdaf45f80a3005b9091505f5260205f205f905b828210610b9057505081018480610b46565b805482860152849350602090910190600101610b7e565b60ff19168552505080151502820190508480610b46565b7fc90943a4000000000000000000000000000000000000000000000000000000005f5260045ffd5b610bff915060203d60201161029057610282818361106f565b83610acb565b610c1c9150843d861161029057610282818361106f565b86610a9a565b7fa5f0f1b2000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b035f54163314610a17565b34610107575f3660031901126101075760206001600160a01b0360015416604051908152f35b34610107576020366003190112610107576001600160a01b03610ca4610f8d565b165f5260046020526001600160a01b0360405f2054165f526003602052602060405f20604051610cd38161103f565b81548082526001909201546001600160a01b03169201829052604080519182526020820192909252f35b34610107575f3660031901126101075760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461010757610d4e36610fa3565b906001600160a01b035f541633148015610df3575b156102bf576001600160a01b03831692835f52600560205260ff60405f205416610dcb5783610487945f52600560205260405f20600160ff198254161790557f1a21cdb01b4a24f9795ddbd009ccbfea49adcea2f28c2606be806502192379e65f80a26110ed565b7fbc626b6f000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b03600154163314610d63565b3461010757602036600319011261010757610e20610f8d565b6001600160a01b035f541633148015610e91575b156102bf576001600160a01b0316805f52600560205260ff60405f2054161561041b57805f52600560205260405f2060ff1981541690557fc59f9761f66797faf208a417f9fbf142783bcffcd831283a2ded97f1a676abb05f80a2005b506001600160a01b03600154163314610e34565b34610107576020366003190112610107576001600160a01b03610ec6610f8d565b165f526005602052602060ff60405f2054166040519015158152f35b34610107576020366003190112610107576001600160a01b03610f03610f8d565b165f52600460205260206001600160a01b0360405f205416604051908152f35b34610107575f3660031901126101075760206040516127108152f35b34610107576020366003190112610107576001600160a01b03610f60610f8d565b165f9081526003602090815260409182902080546001909101549084526001600160a01b03169083015290f35b600435906001600160a01b038216820361010757565b6040600319820112610107576004356001600160a01b0381168103610107579160243567ffffffffffffffff811161010757826023820112156101075780600401359267ffffffffffffffff84116101075760248483010111610107576024019190565b90600182811c92168015611035575b602083101461102157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611016565b6040810190811067ffffffffffffffff82111761105b57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761105b57604052565b9081602091031261010757516001600160a01b03811681036101075790565b156110b85750565b6001600160a01b03907f3df80cf0000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001600160a01b03909291921691825f52600560205260ff60405f2054161561041b57825f52600660205260405f2067ffffffffffffffff831161105b576111358154611007565b601f811161120d575b50825f601f82116001146111a9575f9161119e575b508360011b905f198560031b1c19161790555b81604051928392833781015f8152039020907f28849b480f55b807e483bef9ba16565e53abaef052ab27c5f964a320aabb93975f80a3565b90508201355f611153565b5f8381526020812092508590601f198216905b8181106111f25750106111d9575b5050600183811b019055611166565b8301355f19600386901b60f8161c191690555f806111ca565b868401358555600190940193602093840193889350016111bc565b815f5260205f20601f850160051c81019160208610611248575b601f0160051c01905b81811061123d575061113e565b5f8155600101611230565b909150819061122756fea26469706673582212203972c88a473edcf61c9e30d41ff8eaaf174be5c75ec0cfdd10d0b039785faf3f64736f6c634300081c003300000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c9081630792d51314610f3f5750806316343da414610f235780631e8d2e4d14610ee257806322d65c3b14610ea55780632aeb8f2214610e075780632cd21e0014610d4057806346c96aac14610cfd57806354fe9fd714610c83578063570ca73514610c5d578063595aeb50146109e75780635dbb6eb4146108f4578063772b7e97146105a35780638668a49414610566578063b3ab15fb1461049d578063c657c71814610456578063d309dbc6146102fb578063dcaaa61b1461010b5763e7589b39146100e2575f80fd5b34610107575f3660031901126101075760206001600160a01b035f5416604051908152f35b5f80fd5b3461010757602036600319011261010757610124610f8d565b6001600160a01b035f5416331480156102e7575b156102bf576101606001600160a01b03821691825f52600260205260ff60405f2054166110b0565b805f5260036020525f60016040822082815501556001600160a01b037f00000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb166040516302045be960e41b8152826004820152602081602481855afa80156102975760246001600160a01b03916020935f916102a2575b506040519485938492630f55858b60e41b84521660048301525afa8015610297576001600160a01b03915f91610268575b50165f52600460205260405f2073ffffffffffffffffffffffffffffffffffffffff198154169055805f52600260205260405f2060ff1981541690557fa41ee6d9177c663f26b51d8cc24e94c7331ffe79e49f760a14f15da1494ad1ca5f80a2005b61028a915060203d602011610290575b610282818361106f565b810190611091565b83610206565b503d610278565b6040513d5f823e3d90fd5b6102b99150843d861161029057610282818361106f565b866101d5565b7f19ca4b5e000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b03600154163314610138565b3461010757606036600319011261010757610314610f8d565b60243590604435916001600160a01b03831680930361010757335f52600560205260ff60405f2054168015610443575b1561041b5761036c6001600160a01b03831692835f52600260205260ff60405f2054166110b0565b61271081116103f35760207fef6b9552a5aee5bbfb0c617440309047e908953f5258b53d1078ffc0d6c884ab916040516103a58161103f565b8181526001600160a01b03600181858401898152885f526003875260405f209451855551169201911673ffffffffffffffffffffffffffffffffffffffff19825416179055604051908152a3005b7fc65df89d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc18fdad5000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b035f54163314610344565b346101075761046436610fa3565b906001600160a01b035f541633148015610489575b156102bf57610487926110ed565b005b506001600160a01b03600154163314610479565b34610107576020366003190112610107576104b6610f8d565b6001600160a01b035f541633148015610552575b156102bf57600154906001600160a01b0380831691169182821461052a5773ffffffffffffffffffffffffffffffffffffffff191682176001557ff1e04d73c4304b5ff164f9d10c7473e2a1593b740674a6107975e2a7001c1e5c5f80a3005b7ff6bb6439000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b036001541633146104ca565b34610107576020366003190112610107576001600160a01b03610587610f8d565b165f526002602052602060ff60405f2054166040519015158152f35b34610107576040366003190112610107576105bc610f8d565b602435906001600160a01b038216809203610107576001600160a01b035f5416331480156108e0575b156108b45761060d6001600160a01b03821691825f52600260205260ff60405f2054166110b0565b815f52600260205260405f20600160ff198254161790556001600160a01b037f00000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb16604051906302045be960e41b8252826004830152602082602481845afa918215610297575f92610893575b506001600160a01b0360405192630f55858b60e41b8452166004830152602082602481845afa918215610297575f92610872575b506040516302045be960e41b8152846004820152602081602481855afa80156102975760246001600160a01b03916020935f91610855575b506040519485938492630f55858b60e41b84521660048301525afa8015610297576001600160a01b03915f91610836575b5016805f52600460205260405f208473ffffffffffffffffffffffffffffffffffffffff19825416179055825f52600360205260405f20845f52600360205260405f20908082036107fb575b5050825f5260036020525f6001604082208281550155825f52600260205260405f2060ff1981541690555f5260046020526001600160a01b038060405f20541691165f5260046020526001600160a01b0360405f20911673ffffffffffffffffffffffffffffffffffffffff198254161790557fa929e32c44fd4ebbb29a358c16e6cfb9b08d721f2a5e71126734a73a390e945c5f80a3005b60016001600160a01b03818382945486550154169201911673ffffffffffffffffffffffffffffffffffffffff198254161790558480610762565b61084f915060203d60201161029057610282818361106f565b85610716565b61086c9150843d861161029057610282818361106f565b886106e5565b61088c91925060203d60201161029057610282818361106f565b90846106ad565b6108ad91925060203d60201161029057610282818361106f565b9084610679565b7f2bc10c33000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b506001600160a01b036001541633146105e5565b34610107576020366003190112610107576001600160a01b03610915610f8d565b165f52600660205260405f206040515f82549261093184611007565b9081845260208401946001811690815f146109ca575060011461098a575b8460408561095f8187038261106f565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f90815260208120939250905b8082106109b05750909150810160200161095f8261094f565b919260018160209254838588010152019101909291610997565b60ff191686525050151560051b8201602001905061095f8261094f565b3461010757602036600319011261010757610a00610f8d565b335f52600560205260ff60405f2054168015610c4a575b1561041b576001600160a01b0316805f52600260205260ff60405f205416610c22576001600160a01b037f00000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb166040516302045be960e41b8152826004820152602081602481855afa80156102975760246001600160a01b03916020935f91610c05575b506040519485938492630f55858b60e41b84521660048301525afa8015610297576001600160a01b03915f91610be6575b50168015610bbe575f52600460205260405f208173ffffffffffffffffffffffffffffffffffffffff19825416179055805f52600260205260405f20600160ff19825416179055335f52600660205260405f2060405180915f90805490610b3182611007565b9160018116908115610ba75750600114610b72575b5050039020907fec779a851842f582d1e28aca39c7057da0596cf816d0535bec1df1c0b59fdaf45f80a3005b9091505f5260205f205f905b828210610b9057505081018480610b46565b805482860152849350602090910190600101610b7e565b60ff19168552505080151502820190508480610b46565b7fc90943a4000000000000000000000000000000000000000000000000000000005f5260045ffd5b610bff915060203d60201161029057610282818361106f565b83610acb565b610c1c9150843d861161029057610282818361106f565b86610a9a565b7fa5f0f1b2000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b035f54163314610a17565b34610107575f3660031901126101075760206001600160a01b0360015416604051908152f35b34610107576020366003190112610107576001600160a01b03610ca4610f8d565b165f5260046020526001600160a01b0360405f2054165f526003602052602060405f20604051610cd38161103f565b81548082526001909201546001600160a01b03169201829052604080519182526020820192909252f35b34610107575f3660031901126101075760206040516001600160a01b037f00000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb168152f35b3461010757610d4e36610fa3565b906001600160a01b035f541633148015610df3575b156102bf576001600160a01b03831692835f52600560205260ff60405f205416610dcb5783610487945f52600560205260405f20600160ff198254161790557f1a21cdb01b4a24f9795ddbd009ccbfea49adcea2f28c2606be806502192379e65f80a26110ed565b7fbc626b6f000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600160a01b03600154163314610d63565b3461010757602036600319011261010757610e20610f8d565b6001600160a01b035f541633148015610e91575b156102bf576001600160a01b0316805f52600560205260ff60405f2054161561041b57805f52600560205260405f2060ff1981541690557fc59f9761f66797faf208a417f9fbf142783bcffcd831283a2ded97f1a676abb05f80a2005b506001600160a01b03600154163314610e34565b34610107576020366003190112610107576001600160a01b03610ec6610f8d565b165f526005602052602060ff60405f2054166040519015158152f35b34610107576020366003190112610107576001600160a01b03610f03610f8d565b165f52600460205260206001600160a01b0360405f205416604051908152f35b34610107575f3660031901126101075760206040516127108152f35b34610107576020366003190112610107576001600160a01b03610f60610f8d565b165f9081526003602090815260409182902080546001909101549084526001600160a01b03169083015290f35b600435906001600160a01b038216820361010757565b6040600319820112610107576004356001600160a01b0381168103610107579160243567ffffffffffffffff811161010757826023820112156101075780600401359267ffffffffffffffff84116101075760248483010111610107576024019190565b90600182811c92168015611035575b602083101461102157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611016565b6040810190811067ffffffffffffffff82111761105b57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761105b57604052565b9081602091031261010757516001600160a01b03811681036101075790565b156110b85750565b6001600160a01b03907f3df80cf0000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6001600160a01b03909291921691825f52600560205260ff60405f2054161561041b57825f52600660205260405f2067ffffffffffffffff831161105b576111358154611007565b601f811161120d575b50825f601f82116001146111a9575f9161119e575b508360011b905f198560031b1c19161790555b81604051928392833781015f8152039020907f28849b480f55b807e483bef9ba16565e53abaef052ab27c5f964a320aabb93975f80a3565b90508201355f611153565b5f8381526020812092508590601f198216905b8181106111f25750106111d9575b5050600183811b019055611166565b8301355f19600386901b60f8161c191690555f806111ca565b868401358555600190940193602093840193889350016111bc565b815f5260205f20601f850160051c81019160208610611248575b601f0160051c01905b81811061123d575061113e565b5f8155600101611230565b909150819061122756fea26469706673582212203972c88a473edcf61c9e30d41ff8eaaf174be5c75ec0cfdd10d0b039785faf3f64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
-----Decoded View---------------
Arg [0] : _voter (address): 0x80CDe6f58a0fDaCB340Dd3eA3417DF8586A507fb
Arg [1] : _accessHub (address): 0x5e7A9eea6988063A4dBb9CcDDB3E04C923E8E37f
Arg [2] : _operator (address): 0x5Be2e859D0c2453C9aA062860cA27711ff553432
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000080cde6f58a0fdacb340dd3ea3417df8586a507fb
Arg [1] : 0000000000000000000000005e7a9eea6988063a4dbb9ccddb3e04c923e8e37f
Arg [2] : 0000000000000000000000005be2e859d0c2453c9aa062860ca27711ff553432
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.