Source Code
Overview
S Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S | ||||
22745338 | 15 days ago | 0 S |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
DisposableNXMaster
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "../../modules/governance/NXMaster.sol"; contract DisposableNXMaster is NXMaster { function initialize( address _owner, address _tokenAddress, address _emergencyAdmin, bytes2[] calldata _contractNames, uint8[] calldata _contractTypes, // 0 - eternal storage, 1 - "upgradable", 2 - proxy address payable[] calldata _contractAddresses ) external { require(!masterInitialized, "!init"); masterInitialized = true; owner = _owner; tokenAddress = _tokenAddress; emergencyAdmin = _emergencyAdmin; contractsActive[address(this)] = true; require( _contractNames.length == _contractTypes.length, "check names & types arrays length" ); for (uint i = 0; i < _contractNames.length; i++) { bytes2 name = _contractNames[i]; address payable contractAddress = _contractAddresses[i]; contractCodes.push(name); contractAddresses[name] = contractAddress; contractsActive[contractAddress] = true; if (_contractTypes[i] == 1) { isReplaceable[name] = true; } else if (_contractTypes[i] == 2) { isProxy[name] = true; } } } function switchGovernanceAddress(address payable newGV) external { {// change governance address address currentGV = contractAddresses["GV"]; contractAddresses["GV"] = newGV; contractsActive[currentGV] = false; contractsActive[newGV] = true; } // notify all contracts about address change for (uint i = 0; i < contractCodes.length; i++) { address _address = contractAddresses[contractCodes[i]]; IMasterAwareV2 up = IMasterAwareV2(_address); up.changeMasterAddress(address(this)); up.changeDependentContractAddress(); } } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface ILegacyClaimsReward { /// @dev Decides the next course of action for a given claim. function changeClaimStatus(uint claimid) external; function transferRewards() external; function getCurrencyAssetAddress(bytes4 currency) external view returns (address); function upgrade(address _newAdd) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IMasterAwareV2 { // TODO: if you update this enum, update lib/constants.js as well enum ID { TC, // TokenController.sol P1, // Pool.sol MR, // MemberRoles.sol MC, // MCR.sol CO, // Cover.sol SP, // StakingProducts.sol PS, // LegacyPooledStaking.sol GV, // Governance.sol GW, // LegacyGateway.sol - removed CL, // CoverMigrator.sol - removed AS, // Assessment.sol CI, // IndividualClaims.sol - Claims for Individuals CG, // YieldTokenIncidents.sol - Claims for Groups RA, // Ramm.sol ST, // SafeTracker.sol CP // CoverProducts.sol } function changeMasterAddress(address masterAddress) external; function changeDependentContractAddress() external; function internalContracts(uint) external view returns (address payable); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface IMemberRoles { enum Role {Unassigned, AdvisoryBoard, Member, Owner, Auditor} function join(address _userAddress, uint nonce, bytes calldata signature) external payable; function switchMembership(address _newAddress) external; function switchMembershipAndAssets( address newAddress, uint[] calldata coverIds, uint[] calldata stakingTokenIds ) external; function switchMembershipOf(address member, address _newAddress) external; function totalRoles() external view returns (uint256); function changeAuthorized(uint _roleId, address _newAuthorized) external; function setKycAuthAddress(address _add) external; function members(uint _memberRoleId) external view returns (uint, address[] memory memberArray); function numberOfMembers(uint _memberRoleId) external view returns (uint); function authorized(uint _memberRoleId) external view returns (address); function roles(address _memberAddress) external view returns (uint[] memory); function checkRole(address _memberAddress, uint _roleId) external view returns (bool); function getMemberLengthForAllRoles() external view returns (uint[] memory totalMembers); function memberAtIndex(uint _memberRoleId, uint index) external view returns (address, bool); function membersLength(uint _memberRoleId) external view returns (uint); event MemberRole(uint256 indexed roleId, bytes32 roleName, string roleDescription); event MemberJoined(address indexed newMember, uint indexed nonce); event switchedMembership(address indexed previousMember, address indexed newMember, uint timeStamp); event MembershipWithdrawn(address indexed member, uint timestamp); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; import "./IPriceFeedOracle.sol"; struct SwapDetails { uint104 minAmount; uint104 maxAmount; uint32 lastSwapTime; // 2 decimals of precision. 0.01% -> 0.0001 -> 1e14 uint16 maxSlippageRatio; } struct Asset { address assetAddress; bool isCoverAsset; bool isAbandoned; } interface IPool { function swapOperator() external view returns (address); function getAsset(uint assetId) external view returns (Asset memory); function getAssets() external view returns (Asset[] memory); function transferAssetToSwapOperator(address asset, uint amount) external; function setSwapDetailsLastSwapTime(address asset, uint32 lastSwapTime) external; function getAssetSwapDetails(address assetAddress) external view returns (SwapDetails memory); function sendPayout(uint assetIndex, address payable payoutAddress, uint amount, uint ethDepositAmount) external; function sendEth(address payoutAddress, uint amount) external; function upgradeCapitalPool(address payable newPoolAddress) external; function priceFeedOracle() external view returns (IPriceFeedOracle); function getPoolValueInEth() external view returns (uint); function calculateMCRRatio(uint totalAssetValue, uint mcrEth) external pure returns (uint); function getInternalTokenPriceInAsset(uint assetId) external view returns (uint tokenPrice); function getInternalTokenPriceInAssetAndUpdateTwap(uint assetId) external returns (uint tokenPrice); function getTokenPrice() external view returns (uint tokenPrice); function getMCRRatio() external view returns (uint); function setSwapValue(uint value) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface Aggregator { function decimals() external view returns (uint8); function latestAnswer() external view returns (int); } interface IPriceFeedOracle { struct OracleAsset { Aggregator aggregator; uint8 decimals; } function ETH() external view returns (address); function assets(address) external view returns (Aggregator, uint8); function getAssetToEthRate(address asset) external view returns (uint); function getAssetForEth(address asset, uint ethIn) external view returns (uint); function getEthForAsset(address asset, uint amount) external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface ISAFURAMaster { function tokenAddress() external view returns (address); function owner() external view returns (address); function emergencyAdmin() external view returns (address); function masterInitialized() external view returns (bool); function isInternal(address _add) external view returns (bool); function isPause() external view returns (bool check); function isMember(address _add) external view returns (bool); function checkIsAuthToGoverned(address _add) external view returns (bool); function getLatestAddress(bytes2 _contractName) external view returns (address payable contractAddress); function contractAddresses(bytes2 code) external view returns (address payable); function upgradeMultipleContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses ) external; function removeContracts(bytes2[] calldata contractCodesToRemove) external; function addNewInternalContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses, uint[] calldata _types ) external; function updateOwnerParameters(bytes8 code, address payable val) external; }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; interface ISAFURAToken { function burn(uint256 amount) external returns (bool); function burnFrom(address from, uint256 value) external returns (bool); function operatorTransfer(address from, uint256 value) external returns (bool); function mint(address account, uint256 amount) external; function isLockedForMV(address member) external view returns (uint); function whiteListed(address member) external view returns (bool); function addToWhiteList(address _member) external returns (bool); function removeFromWhiteList(address _member) external returns (bool); function changeOperator(address _newOperator) external returns (bool); function lockForMemberVote(address _of, uint _days) external; /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity >=0.5.0; import "./ISAFURAToken.sol"; interface ITokenController { struct StakingPoolNXMBalances { uint128 rewards; uint128 deposits; } struct CoverInfo { uint16 claimCount; bool hasOpenClaim; bool hasAcceptedClaim; uint96 requestedPayoutAmount; // note: still 128 bits available here, can be used later } struct StakingPoolOwnershipOffer { address proposedManager; uint96 deadline; } function coverInfo(uint id) external view returns ( uint16 claimCount, bool hasOpenClaim, bool hasAcceptedClaim, uint96 requestedPayoutAmount ); function withdrawCoverNote( address _of, uint[] calldata _coverIds, uint[] calldata _indexes ) external; function changeOperator(address _newOperator) external; function operatorTransfer(address _from, address _to, uint _value) external returns (bool); function burnFrom(address _of, uint amount) external returns (bool); function addToWhitelist(address _member) external; function removeFromWhitelist(address _member) external; function mint(address _member, uint _amount) external; function lockForMemberVote(address _of, uint _days) external; function withdrawClaimAssessmentTokens(address[] calldata users) external; function getLockReasons(address _of) external view returns (bytes32[] memory reasons); function totalSupply() external view returns (uint); function totalBalanceOf(address _of) external view returns (uint amount); function totalBalanceOfWithoutDelegations(address _of) external view returns (uint amount); function getTokenPrice() external view returns (uint tokenPrice); function token() external view returns (ISAFURAToken); function getStakingPoolManager(uint poolId) external view returns (address manager); function getManagerStakingPools(address manager) external view returns (uint[] memory poolIds); function isStakingPoolManager(address member) external view returns (bool); function getStakingPoolOwnershipOffer(uint poolId) external view returns (address proposedManager, uint deadline); function transferStakingPoolsOwnership(address from, address to) external; function assignStakingPoolManager(uint poolId, address manager) external; function createStakingPoolOwnershipOffer(uint poolId, address proposedManager, uint deadline) external; function acceptStakingPoolOwnershipOffer(uint poolId) external; function cancelStakingPoolOwnershipOffer(uint poolId) external; function mintStakingPoolNXMRewards(uint amount, uint poolId) external; function burnStakingPoolNXMRewards(uint amount, uint poolId) external; function depositStakedNXM(address from, uint amount, uint poolId) external; function withdrawNXMStakeAndRewards(address to, uint stakeToWithdraw, uint rewardsToWithdraw, uint poolId) external; function burnStakedNXM(uint amount, uint poolId) external; function stakingPoolNXMBalances(uint poolId) external view returns(uint128 rewards, uint128 deposits); function tokensLocked(address _of, bytes32 _reason) external view returns (uint256 amount); function getWithdrawableCoverNotes( address coverOwner ) external view returns ( uint[] memory coverIds, bytes32[] memory lockReasons, uint withdrawableAmount ); function getPendingRewards(address member) external view returns (uint); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "./UpgradeabilityProxy.sol"; /** * @title OwnedUpgradeabilityProxy * @dev This contract combines an upgradeability proxy with basic authorization control functionalities */ contract OwnedUpgradeabilityProxy is UpgradeabilityProxy { /** * @dev Event to show ownership has been transferred * @param previousOwner representing the address of the previous owner * @param newOwner representing the address of the new owner */ event ProxyOwnershipTransferred(address previousOwner, address newOwner); // Storage position of the owner of the contract bytes32 private constant PROXY_OWNER_POSITION = keccak256("org.govblocks.proxy.owner"); /** * @dev the constructor sets the original owner of the contract to the sender account. */ constructor(address _implementation) { _setUpgradeabilityOwner(msg.sender); _upgradeTo(_implementation); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyProxyOwner() { require(msg.sender == proxyOwner()); _; } /** * @dev Tells the address of the owner * @return owner - the address of the owner */ function proxyOwner() public view returns (address owner) { bytes32 position = PROXY_OWNER_POSITION; // solhint-disable-next-line no-inline-assembly assembly { owner := sload(position) } } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferProxyOwnership(address _newOwner) public onlyProxyOwner { require(_newOwner != address(0)); _setUpgradeabilityOwner(_newOwner); emit ProxyOwnershipTransferred(proxyOwner(), _newOwner); } /** * @dev Allows the proxy owner to upgrade the current version of the proxy. * @param _implementation representing the address of the new implementation to be set. */ function upgradeTo(address _implementation) public onlyProxyOwner { _upgradeTo(_implementation); } /** * @dev Sets the address of the owner */ function _setUpgradeabilityOwner(address _newProxyOwner) internal { bytes32 position = PROXY_OWNER_POSITION; // solhint-disable-next-line no-inline-assembly assembly { sstore(position, _newProxyOwner) } } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; /** * @title Proxy * @dev Gives the possibility to delegate any call to a foreign implementation. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. */ function _delegate() internal { address _impl = implementation(); require(_impl != address(0)); // solhint-disable-next-line no-inline-assembly assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize()) let result := delegatecall(gas(), _impl, ptr, calldatasize(), 0, 0) let size := returndatasize() returndatacopy(ptr, 0, size) switch result case 0 {revert(ptr, size)} default {return (ptr, size)} } } /** * @dev Fallback function allowing to perform a delegatecall to the given implementation. * This function will return whatever the implementation call returns */ fallback() external payable { _delegate(); } /** * @dev Receive function allowing to perform a delegatecall to the given implementation. * This function will return whatever the implementation call returns */ receive() external payable { _delegate(); } /** * @dev Tells the address of the implementation where every call will be delegated. * @return address of the implementation to which it will be delegated */ function implementation() virtual public view returns (address); }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "./Proxy.sol"; /** * @title UpgradeabilityProxy * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded */ contract UpgradeabilityProxy is Proxy { /** * @dev This event will be emitted every time the implementation gets upgraded * @param implementation representing the address of the upgraded implementation */ event Upgraded(address indexed implementation); // Storage position of the address of the current implementation bytes32 private constant IMPLEMENTATION_POSITION = keccak256("org.govblocks.proxy.implementation"); /** * @dev Constructor function */ // solhint-disable-next-line no-empty-blocks constructor() {} /** * @dev Tells the address of the current implementation * @return impl - address of the current implementation */ function implementation() public override view returns (address impl) { bytes32 position = IMPLEMENTATION_POSITION; // solhint-disable-next-line no-inline-assembly assembly { impl := sload(position) } } /** * @dev Sets the address of the current implementation * @param _newImplementation address representing the new implementation to be set */ function _setImplementation(address _newImplementation) internal { bytes32 position = IMPLEMENTATION_POSITION; // solhint-disable-next-line no-inline-assembly assembly { sstore(position, _newImplementation) } } /** * @dev Upgrades the implementation address * @param _newImplementation representing the address of the new implementation to be set */ function _upgradeTo(address _newImplementation) internal { address currentImplementation = implementation(); require(currentImplementation != _newImplementation); _setImplementation(_newImplementation); emit Upgraded(_newImplementation); } }
// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.18; import "../../interfaces/IMasterAwareV2.sol"; import "../../interfaces/IMemberRoles.sol"; import "../../interfaces/ISAFURAMaster.sol"; import "../../interfaces/IPool.sol"; import "./external/OwnedUpgradeabilityProxy.sol"; import "../../interfaces/ITokenController.sol"; import "../../interfaces/ILegacyClaimsReward.sol"; contract NXMaster is ISAFURAMaster { address public _unusedM; // Governed contract masterAddress slot uint public _unused0; bytes2[] public contractCodes; mapping(address => bool) public contractsActive; mapping(bytes2 => address payable) public contractAddresses; mapping(bytes2 => bool) public isProxy; mapping(bytes2 => bool) public isReplaceable; address public tokenAddress; bool internal reentrancyLock; bool public masterInitialized; address public owner; uint public _unused1; address public emergencyAdmin; bool public paused; enum ContractType { Undefined, Replaceable, Proxy } event InternalContractAdded(bytes2 indexed code, address contractAddress, ContractType indexed contractType); event ContractUpgraded(bytes2 indexed code, address newAddress, address previousAddress, ContractType indexed contractType); event ContractRemoved(bytes2 indexed code, address contractAddress); event PauseConfigured(bool paused); modifier onlyAuthorizedToGovern() { require(getLatestAddress("GV") == msg.sender, "Not authorized"); _; } modifier noReentrancy() { require(!reentrancyLock, "Reentrant call."); reentrancyLock = true; _; reentrancyLock = false; } modifier onlyEmergencyAdmin() { require(msg.sender == emergencyAdmin, "NXMaster: Not emergencyAdmin"); _; } function initializeEmergencyAdmin() external { if (emergencyAdmin == address(0)) { emergencyAdmin = 0x422D71fb8040aBEF53f3a05d21A9B85eebB2995D; } } function addNewInternalContracts( bytes2[] calldata newContractCodes, address payable[] calldata newAddresses, uint[] calldata _types ) external onlyAuthorizedToGovern { require(newContractCodes.length == newAddresses.length, "NXMaster: newContractCodes.length != newAddresses.length."); require(newContractCodes.length == _types.length, "NXMaster: newContractCodes.length != _types.length"); for (uint i = 0; i < newContractCodes.length; i++) { addNewInternalContract(newContractCodes[i], newAddresses[i], _types[i]); } updateAllDependencies(); } /// @dev Adds new internal contract /// @param contractCode contract code for new contract /// @param contractAddress contract address for new contract /// @param _type pass 1 if contract is replaceable, 2 if contract is proxy function addNewInternalContract( bytes2 contractCode, address payable contractAddress, uint _type ) internal { require(contractAddresses[contractCode] == address(0), "NXMaster: Code already in use"); require(contractAddress != address(0), "NXMaster: Contract address is 0"); contractCodes.push(contractCode); address payable newInternalContract; uint contractType = uint8(_type); if (contractType == uint(ContractType.Replaceable)) { newInternalContract = contractAddress; isReplaceable[contractCode] = true; } else if (contractType == uint(ContractType.Proxy)) { uint salt = _type >> 8; if (salt == 0) { // contractCode will use the 16 most significant bits (leftmost) // block.number will use the least significant bits (rightmost) // example: contractCode = "XX" = 0x5858, block.number = 13565952 = 0xcf0000 // result: 0x5858000000000000000000000000000000000000000000000000000000cf0000 salt = uint(bytes32(contractCode)) + block.number; } // using the max address as the initial implementation to avoid revert in upgradeTo OwnedUpgradeabilityProxy proxy = new OwnedUpgradeabilityProxy{salt: bytes32(salt)}(address(type(uint160).max)); proxy.upgradeTo(contractAddress); newInternalContract = payable(proxy); isProxy[contractCode] = true; } else { revert("NXMaster: Unsupported contract type"); } contractAddresses[contractCode] = newInternalContract; contractsActive[newInternalContract] = true; IMasterAwareV2 up = IMasterAwareV2(newInternalContract); up.changeMasterAddress(address(this)); emit InternalContractAdded(contractCode, contractAddress, ContractType(contractType)); } /// @dev upgrades multiple contracts at a time function upgradeMultipleContracts( bytes2[] calldata _contractCodes, address payable[] calldata newAddresses ) external onlyAuthorizedToGovern { require(_contractCodes.length == newAddresses.length, "NXMaster: _contractCodes.length != newAddresses.length"); for (uint i = 0; i < _contractCodes.length; i++) { address payable newAddress = newAddresses[i]; bytes2 code = _contractCodes[i]; require(newAddress != address(0), "NXMaster: Contract address is 0"); if (isProxy[code]) { OwnedUpgradeabilityProxy proxy = OwnedUpgradeabilityProxy(contractAddresses[code]); address previousAddress = proxy.implementation(); proxy.upgradeTo(newAddress); emit ContractUpgraded(code, newAddress, previousAddress, ContractType.Proxy); continue; } if (isReplaceable[code]) { address previousAddress = getLatestAddress(code); replaceContract(code, newAddress); emit ContractUpgraded(code, newAddress, previousAddress, ContractType.Replaceable); continue; } revert("NXMaster: Non-existant or non-upgradeable contract code"); } updateAllDependencies(); } function replaceContract(bytes2 code, address payable newAddress) internal { if (code == "CR") { ITokenController tc = ITokenController(getLatestAddress("TC")); tc.addToWhitelist(newAddress); tc.removeFromWhitelist(contractAddresses["CR"]); ILegacyClaimsReward cr = ILegacyClaimsReward(contractAddresses["CR"]); cr.upgrade(newAddress); } else if (code == "P1") { IPool p1 = IPool(contractAddresses["P1"]); p1.upgradeCapitalPool(newAddress); } address payable oldAddress = contractAddresses[code]; contractsActive[oldAddress] = false; contractAddresses[code] = newAddress; contractsActive[newAddress] = true; IMasterAwareV2 up = IMasterAwareV2(contractAddresses[code]); up.changeMasterAddress(address(this)); } function removeContracts(bytes2[] calldata contractCodesToRemove) external onlyAuthorizedToGovern { for (uint i = 0; i < contractCodesToRemove.length; i++) { bytes2 code = contractCodesToRemove[i]; address contractAddress = contractAddresses[code]; require(contractAddress != address(0), "NXMaster: Address is 0"); require(isInternal(contractAddress), "NXMaster: Contract not internal"); contractsActive[contractAddress] = false; contractAddresses[code] = payable(0); if (isProxy[code]) { isProxy[code] = false; } if (isReplaceable[code]) { isReplaceable[code] = false; } emit ContractRemoved(code, contractAddress); } // delete elements from contractCodes for (uint i = 0; i < contractCodes.length;) { for (uint j = 0; j < contractCodesToRemove.length; j++) { if (contractCodes[i] == contractCodesToRemove[j]) { contractCodes[i] = contractCodes[contractCodes.length - 1]; contractCodes.pop(); unchecked { i--; } break; } } unchecked { i++; } } updateAllDependencies(); } function updateAllDependencies() internal { for (uint i = 0; i < contractCodes.length; i++) { IMasterAwareV2 up = IMasterAwareV2(contractAddresses[contractCodes[i]]); up.changeDependentContractAddress(); } } /** * @dev set Emergency pause * @param _paused to toggle emergency pause ON/OFF */ function setEmergencyPause(bool _paused) public onlyEmergencyAdmin { paused = _paused; emit PauseConfigured(_paused); } /// @dev checks whether the address is an internal contract address. function isInternal(address _contractAddress) public view returns (bool) { return contractsActive[_contractAddress]; } /// @dev Checks whether emergency pause is on/not. function isPause() public view returns (bool) { return paused; } /// @dev checks whether the address is a member of the mutual or not. function isMember(address _add) public view returns (bool) { IMemberRoles mr = IMemberRoles(getLatestAddress("MR")); return mr.checkRole(_add, uint(IMemberRoles.Role.Member)); } /// @dev Gets current contract codes and their addresses /// @return _contractCodes - all stored contract codes /// @return _contractAddresses - all stored contract addresses function getInternalContracts() public view returns ( bytes2[] memory _contractCodes, address[] memory _contractAddresses ) { _contractCodes = contractCodes; _contractAddresses = new address[](contractCodes.length); for (uint i = 0; i < _contractCodes.length; i++) { _contractAddresses[i] = contractAddresses[contractCodes[i]]; } } /** * @dev returns the address of token controller * @return address is returned */ function dAppLocker() public view returns (address) { return getLatestAddress("TC"); } /// @dev Gets latest contract address /// @param _contractName Contract name to fetch function getLatestAddress(bytes2 _contractName) public view returns (address payable contractAddress) { contractAddress = contractAddresses[_contractName]; } /** * @dev to check if the address is authorized to govern or not * @param _add is the address in concern * @return the boolean status status for the check */ function checkIsAuthToGoverned(address _add) public view returns (bool) { return getLatestAddress("GV") == _add; } /** * @dev to update the owner parameters * @param code is the associated code * @param val is value to be set */ function updateOwnerParameters(bytes8 code, address payable val) public onlyAuthorizedToGovern { if (code == "EMADMIN") { emergencyAdmin = val; } else { revert("Invalid param code"); } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes2","name":"code","type":"bytes2"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes2","name":"code","type":"bytes2"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"},{"indexed":false,"internalType":"address","name":"previousAddress","type":"address"},{"indexed":true,"internalType":"enum NXMaster.ContractType","name":"contractType","type":"uint8"}],"name":"ContractUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes2","name":"code","type":"bytes2"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"enum NXMaster.ContractType","name":"contractType","type":"uint8"}],"name":"InternalContractAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PauseConfigured","type":"event"},{"inputs":[],"name":"_unused0","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_unused1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_unusedM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes2[]","name":"newContractCodes","type":"bytes2[]"},{"internalType":"address payable[]","name":"newAddresses","type":"address[]"},{"internalType":"uint256[]","name":"_types","type":"uint256[]"}],"name":"addNewInternalContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"checkIsAuthToGoverned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes2","name":"","type":"bytes2"}],"name":"contractAddresses","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"contractCodes","outputs":[{"internalType":"bytes2","name":"","type":"bytes2"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contractsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dAppLocker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getInternalContracts","outputs":[{"internalType":"bytes2[]","name":"_contractCodes","type":"bytes2[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes2","name":"_contractName","type":"bytes2"}],"name":"getLatestAddress","outputs":[{"internalType":"address payable","name":"contractAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_emergencyAdmin","type":"address"},{"internalType":"bytes2[]","name":"_contractNames","type":"bytes2[]"},{"internalType":"uint8[]","name":"_contractTypes","type":"uint8[]"},{"internalType":"address payable[]","name":"_contractAddresses","type":"address[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initializeEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"isInternal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes2","name":"","type":"bytes2"}],"name":"isProxy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes2","name":"","type":"bytes2"}],"name":"isReplaceable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes2[]","name":"contractCodesToRemove","type":"bytes2[]"}],"name":"removeContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setEmergencyPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newGV","type":"address"}],"name":"switchGovernanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes8","name":"code","type":"bytes8"},{"internalType":"address payable","name":"val","type":"address"}],"name":"updateOwnerParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes2[]","name":"_contractCodes","type":"bytes2[]"},{"internalType":"address payable[]","name":"newAddresses","type":"address[]"}],"name":"upgradeMultipleContracts","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506129ed806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001e95760003560e01c80638da5cb5b116200010d578063c15041d511620000a3578063d21f14ef116200007a578063d21f14ef1462000495578063d8d1a657146200049f578063e2cab14d14620004b6578063ff0938a714620004cd57600080fd5b8063c15041d5146200044a578063c64c2c35146200045f578063d13c9cc1146200048b57600080fd5b80639d76ea5811620000e45780639d76ea5814620003f4578063a230c5241462000408578063a54a9b47146200041f578063b96a8995146200043357600080fd5b80638da5cb5b146200038b5780638f16c41c146200039f578063973e753b14620003ce57600080fd5b8063469fc1d211620001835780636575eea5116200015a5780636575eea514620003305780636fc4ed4c146200034757806370905dce146200035e578063738e91a8146200037257600080fd5b8063469fc1d214620002ed5780635834e67a14620003045780635c975abb146200031b57600080fd5b80632079632311620001c457806320796323146200028a57806338c8349414620002a45780633a12507f14620002bd57806344d479e714620002c757600080fd5b80630138285814620001ee57806301c09f1414620002225780630997d56b1462000259575b600080fd5b62000205620001ff36600462001fad565b620004e0565b6040516001600160a01b0390911681526020015b60405180910390f35b620002486200023336600462001fef565b60036020526000908152604090205460ff1681565b604051901515815260200162000219565b620002706200026a3660046200200f565b62000505565b6040516001600160f01b0319909116815260200162000219565b620002946200053d565b6040516200021992919062002029565b620002bb620002b53660046200210a565b620006c5565b005b62000205620009c5565b62000248620002d836600462001fad565b60056020526000908152604090205460ff1681565b620002bb620002fe366004620021ee565b620009dc565b620002486200031536600462001fef565b62000de7565b600a546200024890600160a01b900460ff1681565b620002bb6200034136600462002234565b62000e13565b620002bb6200035836600462001fef565b62000fe2565b600a5462000205906001600160a01b031681565b6200037c60015481565b60405190815260200162000219565b60085462000205906001600160a01b031681565b62000248620003b036600462001fef565b6001600160a01b031660009081526003602052604090205460ff1690565b62000248620003df36600462001fad565b60066020526000908152604090205460ff1681565b60075462000205906001600160a01b031681565b620002486200041936600462001fef565b6200117d565b60005462000205906001600160a01b031681565b620002bb62000444366004620022d8565b6200120f565b6007546200024890600160a81b900460ff1681565b620002056200047036600462001fad565b6004602052600090815260409020546001600160a01b031681565b620002bb62001618565b6200037c60095481565b620002bb620004b03660046200235a565b62001652565b620002bb620004c73660046200237a565b62001707565b600a54600160a01b900460ff1662000248565b6001600160f01b0319166000908152600460205260409020546001600160a01b031690565b600281815481106200051657600080fd5b9060005260206000209060109182820401919006600202915054906101000a900460f01b81565b6060806002805480602002602001604051908101604052809291908181526020018280548015620005bb57602002820191906000526020600020906000905b82829054906101000a900460f01b6001600160f01b031916815260200190600201906020826001010492830192600103820291508084116200057c5790505b5050600254939550505067ffffffffffffffff8211159050620005e257620005e2620023c4565b6040519080825280602002602001820160405280156200060c578160200160208202803683370190505b50905060005b8251811015620006c0576004600060028381548110620006365762000636620023da565b60009182526020808320601083040154600f9092166002026101000a90910460f01b6001600160f01b031916835282019290925260400190205482516001600160a01b0390911690839083908110620006935762000693620023da565b6001600160a01b039092166020928302919091019091015280620006b78162002406565b91505062000612565b509091565b600754600160a81b900460ff16156200070d5760405162461bcd60e51b8152602060048201526005602482015264085a5b9a5d60da1b60448201526064015b60405180910390fd5b60078054600880546001600160a01b03808e166001600160a01b0319928316179092558b8216600161ff0160a01b031990931692909217600160a81b17909255600a8054928a1692909116919091179055306000908152600360205260409020805460ff19166001179055848314620007d35760405162461bcd60e51b815260206004820152602160248201527f636865636b206e616d6573202620747970657320617272617973206c656e67746044820152600d60fb1b606482015260840162000704565b60005b85811015620009b9576000878783818110620007f657620007f6620023da565b90506020020160208101906200080d919062001fad565b90506000848484818110620008265762000826620023da565b90506020020160208101906200083d919062001fef565b6002805460018181018355601082047f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01805460f088901c600f9094169094026101000a92830261ffff90930219909316919091179091556001600160f01b03198416600090815260046020908152604080832080546001600160a01b0387166001600160a01b03199091168117909155835260039091529020805460ff191690911790559050868684818110620008f957620008f9620023da565b905060200201602081019062000910919062002422565b60ff1660010362000945576001600160f01b031982166000908152600660205260409020805460ff19166001179055620009a1565b8686848181106200095a576200095a620023da565b905060200201602081019062000971919062002422565b60ff16600203620009a1576001600160f01b031982166000908152600560205260409020805460ff191660011790555b50508080620009b09062002406565b915050620007d6565b50505050505050505050565b6000620009d761544360f01b620004e0565b905090565b33620009ed6123ab60f11b620004e0565b6001600160a01b03161462000a165760405162461bcd60e51b8152600401620007049062002447565b60005b8181101562000c4557600083838381811062000a395762000a39620023da565b905060200201602081019062000a50919062001fad565b6001600160f01b031981166000908152600460205260409020549091506001600160a01b03168062000abe5760405162461bcd60e51b815260206004820152601660248201527504e584d61737465723a204164647265737320697320360541b604482015260640162000704565b6001600160a01b03811660009081526003602052604090205460ff1662000b285760405162461bcd60e51b815260206004820152601f60248201527f4e584d61737465723a20436f6e7472616374206e6f7420696e7465726e616c00604482015260640162000704565b6001600160a01b0381166000908152600360209081526040808320805460ff191690556001600160f01b0319851683526004825280832080546001600160a01b0319169055600590915290205460ff161562000ba0576001600160f01b031982166000908152600560205260409020805460ff191690555b6001600160f01b0319821660009081526006602052604090205460ff161562000be5576001600160f01b031982166000908152600660205260409020805460ff191690555b6040516001600160a01b03821681526001600160f01b03198316907f9a0e76e7e16765c82c2120b84ccaa2e1034a7862b90608e5e6e7c688a512145f9060200160405180910390a25050808062000c3c9062002406565b91505062000a19565b5060005b60025481101562000dd85760005b8281101562000dce5783838281811062000c755762000c75620023da565b905060200201602081019062000c8c919062001fad565b6001600160f01b0319166002838154811062000cac5762000cac620023da565b90600052602060002090601091828204019190066002029054906101000a900460f01b6001600160f01b0319160362000db9576002805462000cf1906001906200246f565b8154811062000d045762000d04620023da565b90600052602060002090601091828204019190066002029054906101000a900460f01b6002838154811062000d3d5762000d3d620023da565b90600052602060002090601091828204019190066002026101000a81548161ffff021916908360f01c0217905550600280548062000d7f5762000d7f6200248b565b6000828152602090206010600019928301908104909101805461ffff6002600f8516026101000a0219169055909155919091019062000dce565b8062000dc58162002406565b91505062000c57565b5060010162000c49565b5062000de3620017bc565b5050565b6000816001600160a01b031662000e036123ab60f11b620004e0565b6001600160a01b03161492915050565b3362000e246123ab60f11b620004e0565b6001600160a01b03161462000e4d5760405162461bcd60e51b8152600401620007049062002447565b84831462000ec45760405162461bcd60e51b815260206004820152603960248201527f4e584d61737465723a206e6577436f6e7472616374436f6465732e6c656e677460448201527f6820213d206e65774164647265737365732e6c656e6774682e00000000000000606482015260840162000704565b84811462000f305760405162461bcd60e51b815260206004820152603260248201527f4e584d61737465723a206e6577436f6e7472616374436f6465732e6c656e67746044820152710d040427a40bee8f2e0cae65cd8cadccee8d60731b606482015260840162000704565b60005b8581101562000fcf5762000fba87878381811062000f555762000f55620023da565b905060200201602081019062000f6c919062001fad565b86868481811062000f815762000f81620023da565b905060200201602081019062000f98919062001fef565b85858581811062000fad5762000fad620023da565b9050602002013562001895565b8062000fc68162002406565b91505062000f33565b5062000fda620017bc565b505050505050565b7f48b5d77e6708fd7f3423a4467845bea6010627a481f796e5f084bf79a1374f4d80546001600160a01b038381166001600160a01b03198316811790935516600090815260036020526040808220805460ff19908116909155928252812080549092166001179091555b60025481101562000de35760006004600060028481548110620010735762001073620023da565b60009182526020808320601083040154600f9092166002026101000a90910460f01b6001600160f01b03191683528201929092526040908101909120549051633519957d60e21b81523060048201526001600160a01b0390911691508190819063d46655f490602401600060405180830381600087803b158015620010f757600080fd5b505af11580156200110c573d6000803e3d6000fd5b50505050806001600160a01b0316630ea9c9846040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200114c57600080fd5b505af115801562001161573d6000803e3d6000fd5b5050505050508080620011749062002406565b9150506200104c565b600080620011906126a960f11b620004e0565b60405163505ef22f60e01b81526001600160a01b038581166004830152600260248301529192509082169063505ef22f90604401602060405180830381865afa158015620011e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012089190620024b7565b9392505050565b33620012206123ab60f11b620004e0565b6001600160a01b031614620012495760405162461bcd60e51b8152600401620007049062002447565b828114620012b95760405162461bcd60e51b815260206004820152603660248201527f4e584d61737465723a205f636f6e7472616374436f6465732e6c656e677468206044820152750427a40dccaee82c8c8e4cae6e6cae65cd8cadccee8d60531b606482015260840162000704565b60005b8381101562001607576000838383818110620012dc57620012dc620023da565b9050602002016020810190620012f3919062001fef565b905060008686848181106200130c576200130c620023da565b905060200201602081019062001323919062001fad565b90506001600160a01b0382166200137d5760405162461bcd60e51b815260206004820152601f60248201527f4e584d61737465723a20436f6e74726163742061646472657373206973203000604482015260640162000704565b6001600160f01b0319811660009081526005602052604090205460ff1615620014eb576001600160f01b031981166000908152600460208181526040808420548151635c60da1b60e01b815291516001600160a01b0390911694938593635c60da1b93808301939192908290030181865afa15801562001401573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014279190620024d7565b604051631b2ce7f360e11b81526001600160a01b03868116600483015291925090831690633659cfe690602401600060405180830381600087803b1580156200146f57600080fd5b505af115801562001484573d6000803e3d6000fd5b506002925062001492915050565b604080516001600160a01b038088168252841660208201526001600160f01b03198616917fad196ff1639327e1b88a90842d4140c2c8bdd4c0bbb4f3800484c0229fd0b3bc910160405180910390a350505050620015f2565b6001600160f01b0319811660009081526006602052604090205460ff1615620015835760006200151b82620004e0565b905062001529828462001c76565b6001604080516001600160a01b038087168252841660208201526001600160f01b03198516917fad196ff1639327e1b88a90842d4140c2c8bdd4c0bbb4f3800484c0229fd0b3bc910160405180910390a3505050620015f2565b60405162461bcd60e51b815260206004820152603760248201527f4e584d61737465723a204e6f6e2d6578697374616e74206f72206e6f6e2d757060448201527f677261646561626c6520636f6e747261637420636f6465000000000000000000606482015260840162000704565b80620015fe8162002406565b915050620012bc565b5062001612620017bc565b50505050565b600a546001600160a01b03166200165057600a80546001600160a01b03191673422d71fb8040abef53f3a05d21a9b85eebb2995d1790555b565b600a546001600160a01b03163314620016ae5760405162461bcd60e51b815260206004820152601c60248201527f4e584d61737465723a204e6f7420656d657267656e637941646d696e00000000604482015260640162000704565b600a8054821515600160a01b0260ff60a01b199091161790556040517faf0a7aed9964225ce1e722b34382b891b7fa58d0542f9bef86ac8b465790849690620016fc90831515815260200190565b60405180910390a150565b33620017186123ab60f11b620004e0565b6001600160a01b031614620017415760405162461bcd60e51b8152600401620007049062002447565b6001600160c01b031982166622a6a0a226a4a760c91b036200177e57600a80546001600160a01b0383166001600160a01b03199091161790555050565b60405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d20636f646560701b604482015260640162000704565b60005b600254811015620018925760006004600060028481548110620017e657620017e6620023da565b60009182526020808320601083040154600f9092166002026101000a90910460f01b6001600160f01b0319168352820192909252604090810182205481516303aa726160e21b815291516001600160a01b0390911693508392630ea9c984926004808201939182900301818387803b1580156200186257600080fd5b505af115801562001877573d6000803e3d6000fd5b50505050508080620018899062002406565b915050620017bf565b50565b6001600160f01b031983166000908152600460205260409020546001600160a01b031615620019075760405162461bcd60e51b815260206004820152601d60248201527f4e584d61737465723a20436f646520616c726561647920696e20757365000000604482015260640162000704565b6001600160a01b0382166200195f5760405162461bcd60e51b815260206004820152601f60248201527f4e584d61737465723a20436f6e74726163742061646472657373206973203000604482015260640162000704565b6002805460018101825560008281527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6010830401805461ffff600f9094169094026101000a9283021990931660f087901c929092029190911790915560ff82166000198101620019f7576001600160f01b031985166000908152600660205260409020805460ff1916600117905583915062001b5a565b6002810362001b0557600883901c600081900362001a285762001a25436001600160f01b03198816620024f7565b90505b60008160001b6001600160a01b0360405162001a449062001f9f565b6001600160a01b0390911681526020018190604051809103906000f590508015801562001a75573d6000803e3d6000fd5b50604051631b2ce7f360e11b81526001600160a01b03888116600483015291925090821690633659cfe690602401600060405180830381600087803b15801562001abe57600080fd5b505af115801562001ad3573d6000803e3d6000fd5b5050506001600160f01b031988166000908152600560205260409020805460ff1916600117905550925062001b5a9050565b60405162461bcd60e51b815260206004820152602360248201527f4e584d61737465723a20556e737570706f7274656420636f6e7472616374207460448201526279706560e81b606482015260840162000704565b6001600160f01b03198516600090815260046020818152604080842080546001600160a01b0319166001600160a01b038816908117909155808552600390925292839020805460ff191660011790559151633519957d60e21b8152309181019190915283919063d46655f490602401600060405180830381600087803b15801562001be457600080fd5b505af115801562001bf9573d6000803e3d6000fd5b5050505081600281111562001c125762001c12620024a1565b600281111562001c265762001c26620024a1565b6040516001600160a01b03871681526001600160f01b03198816907f6eba5fe8fc6be4cbbc0b7b5881ffa36428b8dee7170dd5a96cd4e76da2c682ec9060200160405180910390a3505050505050565b6001600160f01b031982166121a960f11b0362001e2b57600062001c9f61544360f01b620004e0565b60405163e43252d760e01b81526001600160a01b0384811660048301529192509082169063e43252d790602401600060405180830381600087803b15801562001ce757600080fd5b505af115801562001cfc573d6000803e3d6000fd5b50506121a960f11b6000525050600460208190527f81a16a8e02e895bc8f23c4b57164801632b22336e581fdbd05bc322b5dbf847454604051638ab1d68160e01b81526001600160a01b0391821692810192909252821690638ab1d68190602401600060405180830381600087803b15801562001d7857600080fd5b505af115801562001d8d573d6000803e3d6000fd5b50506121a960f11b6000525050600460208190527f81a16a8e02e895bc8f23c4b57164801632b22336e581fdbd05bc322b5dbf84745460405162900f0160e41b81526001600160a01b03858116938201939093529116908190630900f01090602401600060405180830381600087803b15801562001e0a57600080fd5b505af115801562001e1f573d6000803e3d6000fd5b50505050505062001ed7565b6001600160f01b0319821661503160f01b0362001ed75761503160f01b600052600460208190527f65e528c366d24fe1267504a3fd0d0e6ee46d1498cc6709837295d0fa5e628654546040516366fd551d60e01b81526001600160a01b038481169382019390935291169081906366fd551d90602401600060405180830381600087803b15801562001ebc57600080fd5b505af115801562001ed1573d6000803e3d6000fd5b50505050505b6001600160f01b03198216600081815260046020818152604080842080546001600160a01b0390811680875260038552838720805460ff1990811690915583546001600160a01b0319168a84169081178555885284882080549091166001179055969095529183905290549051633519957d60e21b8152309281019290925290911690819063d46655f490602401600060405180830381600087803b15801562001f8057600080fd5b505af115801562001f95573d6000803e3d6000fd5b5050505050505050565b6104aa806200250e83390190565b60006020828403121562001fc057600080fd5b81356001600160f01b0319811681146200120857600080fd5b6001600160a01b03811681146200189257600080fd5b6000602082840312156200200257600080fd5b8135620012088162001fd9565b6000602082840312156200202257600080fd5b5035919050565b604080825283519082018190526000906020906060840190828701845b828110156200206e5781516001600160f01b0319168452928401929084019060010162002046565b5050508381038285015284518082528583019183019060005b81811015620020ae5783516001600160a01b03168352928401929184019160010162002087565b5090979650505050505050565b60008083601f840112620020ce57600080fd5b50813567ffffffffffffffff811115620020e757600080fd5b6020830191508360208260051b85010111156200210357600080fd5b9250929050565b600080600080600080600080600060c08a8c0312156200212957600080fd5b8935620021368162001fd9565b985060208a0135620021488162001fd9565b975060408a01356200215a8162001fd9565b965060608a013567ffffffffffffffff808211156200217857600080fd5b620021868d838e01620020bb565b909850965060808c0135915080821115620021a057600080fd5b620021ae8d838e01620020bb565b909650945060a08c0135915080821115620021c857600080fd5b50620021d78c828d01620020bb565b915080935050809150509295985092959850929598565b600080602083850312156200220257600080fd5b823567ffffffffffffffff8111156200221a57600080fd5b6200222885828601620020bb565b90969095509350505050565b600080600080600080606087890312156200224e57600080fd5b863567ffffffffffffffff808211156200226757600080fd5b620022758a838b01620020bb565b909850965060208901359150808211156200228f57600080fd5b6200229d8a838b01620020bb565b90965094506040890135915080821115620022b757600080fd5b50620022c689828a01620020bb565b979a9699509497509295939492505050565b60008060008060408587031215620022ef57600080fd5b843567ffffffffffffffff808211156200230857600080fd5b6200231688838901620020bb565b909650945060208701359150808211156200233057600080fd5b506200233f87828801620020bb565b95989497509550505050565b80151581146200189257600080fd5b6000602082840312156200236d57600080fd5b813562001208816200234b565b600080604083850312156200238e57600080fd5b82356001600160c01b031981168114620023a757600080fd5b91506020830135620023b98162001fd9565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200241b576200241b620023f0565b5060010190565b6000602082840312156200243557600080fd5b813560ff811681146200120857600080fd5b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b81810381811115620024855762002485620023f0565b92915050565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620024ca57600080fd5b815162001208816200234b565b600060208284031215620024ea57600080fd5b8151620012088162001fd9565b80820180821115620024855762002485620023f056fe608060405234801561001057600080fd5b506040516104aa3803806104aa83398101604081905261002f916100ec565b610057337f2dbc9b6b8d09ee15269835797a45b6f772b81406ec218e6fd64b114f376266ba55565b61006081610066565b5061011c565b600061007e60008051602061048a8339815191525490565b9050816001600160a01b0316816001600160a01b03160361009e57600080fd5b6100b48260008051602061048a83398151915255565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000602082840312156100fe57600080fd5b81516001600160a01b038116811461011557600080fd5b9392505050565b61035f8061012b6000396000f3fe6080604052600436106100435760003560e01c8063025313a21461005a5780633659cfe6146100945780635c60da1b146100b4578063f1739cae146100d657610052565b36610052576100506100f6565b005b6100506100f6565b34801561006657600080fd5b506000805160206102ea833981519152545b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100506100af3660046102b9565b610148565b3480156100c057600080fd5b5060008051602061030a83398151915254610078565b3480156100e257600080fd5b506100506100f13660046102b9565b610181565b600061010e60008051602061030a8339815191525490565b90506001600160a01b03811661012357600080fd5b60405136600082376000803683855af43d806000843e818015610144578184f35b8184fd5b6000805160206102ea833981519152546001600160a01b0316336001600160a01b03161461017557600080fd5b61017e81610233565b50565b6000805160206102ea833981519152546001600160a01b0316336001600160a01b0316146101ae57600080fd5b6001600160a01b0381166101c157600080fd5b6101d7816000805160206102ea83398151915255565b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961020e6000805160206102ea8339815191525490565b604080516001600160a01b03928316815291841660208301520160405180910390a150565b600061024b60008051602061030a8339815191525490565b9050816001600160a01b0316816001600160a01b03160361026b57600080fd5b6102818260008051602061030a83398151915255565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000602082840312156102cb57600080fd5b81356001600160a01b03811681146102e257600080fd5b939250505056fe2dbc9b6b8d09ee15269835797a45b6f772b81406ec218e6fd64b114f376266ba7fb5080a7084f4c60aade0a78fc13ba4ba6555b60e554360d005f0d684cea186a26469706673582212201057513f99002041344c19a488bd48c257a905888fbb455418e934b436488f0b64736f6c634300081200337fb5080a7084f4c60aade0a78fc13ba4ba6555b60e554360d005f0d684cea186a26469706673582212209bf52131e7a333b18ee004ec0f774aa8b99dc28aaa3805bbbae069d831c8309164736f6c63430008120033
Deployed Bytecode
0x60806040523480156200001157600080fd5b5060043610620001e95760003560e01c80638da5cb5b116200010d578063c15041d511620000a3578063d21f14ef116200007a578063d21f14ef1462000495578063d8d1a657146200049f578063e2cab14d14620004b6578063ff0938a714620004cd57600080fd5b8063c15041d5146200044a578063c64c2c35146200045f578063d13c9cc1146200048b57600080fd5b80639d76ea5811620000e45780639d76ea5814620003f4578063a230c5241462000408578063a54a9b47146200041f578063b96a8995146200043357600080fd5b80638da5cb5b146200038b5780638f16c41c146200039f578063973e753b14620003ce57600080fd5b8063469fc1d211620001835780636575eea5116200015a5780636575eea514620003305780636fc4ed4c146200034757806370905dce146200035e578063738e91a8146200037257600080fd5b8063469fc1d214620002ed5780635834e67a14620003045780635c975abb146200031b57600080fd5b80632079632311620001c457806320796323146200028a57806338c8349414620002a45780633a12507f14620002bd57806344d479e714620002c757600080fd5b80630138285814620001ee57806301c09f1414620002225780630997d56b1462000259575b600080fd5b62000205620001ff36600462001fad565b620004e0565b6040516001600160a01b0390911681526020015b60405180910390f35b620002486200023336600462001fef565b60036020526000908152604090205460ff1681565b604051901515815260200162000219565b620002706200026a3660046200200f565b62000505565b6040516001600160f01b0319909116815260200162000219565b620002946200053d565b6040516200021992919062002029565b620002bb620002b53660046200210a565b620006c5565b005b62000205620009c5565b62000248620002d836600462001fad565b60056020526000908152604090205460ff1681565b620002bb620002fe366004620021ee565b620009dc565b620002486200031536600462001fef565b62000de7565b600a546200024890600160a01b900460ff1681565b620002bb6200034136600462002234565b62000e13565b620002bb6200035836600462001fef565b62000fe2565b600a5462000205906001600160a01b031681565b6200037c60015481565b60405190815260200162000219565b60085462000205906001600160a01b031681565b62000248620003b036600462001fef565b6001600160a01b031660009081526003602052604090205460ff1690565b62000248620003df36600462001fad565b60066020526000908152604090205460ff1681565b60075462000205906001600160a01b031681565b620002486200041936600462001fef565b6200117d565b60005462000205906001600160a01b031681565b620002bb62000444366004620022d8565b6200120f565b6007546200024890600160a81b900460ff1681565b620002056200047036600462001fad565b6004602052600090815260409020546001600160a01b031681565b620002bb62001618565b6200037c60095481565b620002bb620004b03660046200235a565b62001652565b620002bb620004c73660046200237a565b62001707565b600a54600160a01b900460ff1662000248565b6001600160f01b0319166000908152600460205260409020546001600160a01b031690565b600281815481106200051657600080fd5b9060005260206000209060109182820401919006600202915054906101000a900460f01b81565b6060806002805480602002602001604051908101604052809291908181526020018280548015620005bb57602002820191906000526020600020906000905b82829054906101000a900460f01b6001600160f01b031916815260200190600201906020826001010492830192600103820291508084116200057c5790505b5050600254939550505067ffffffffffffffff8211159050620005e257620005e2620023c4565b6040519080825280602002602001820160405280156200060c578160200160208202803683370190505b50905060005b8251811015620006c0576004600060028381548110620006365762000636620023da565b60009182526020808320601083040154600f9092166002026101000a90910460f01b6001600160f01b031916835282019290925260400190205482516001600160a01b0390911690839083908110620006935762000693620023da565b6001600160a01b039092166020928302919091019091015280620006b78162002406565b91505062000612565b509091565b600754600160a81b900460ff16156200070d5760405162461bcd60e51b8152602060048201526005602482015264085a5b9a5d60da1b60448201526064015b60405180910390fd5b60078054600880546001600160a01b03808e166001600160a01b0319928316179092558b8216600161ff0160a01b031990931692909217600160a81b17909255600a8054928a1692909116919091179055306000908152600360205260409020805460ff19166001179055848314620007d35760405162461bcd60e51b815260206004820152602160248201527f636865636b206e616d6573202620747970657320617272617973206c656e67746044820152600d60fb1b606482015260840162000704565b60005b85811015620009b9576000878783818110620007f657620007f6620023da565b90506020020160208101906200080d919062001fad565b90506000848484818110620008265762000826620023da565b90506020020160208101906200083d919062001fef565b6002805460018181018355601082047f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace01805460f088901c600f9094169094026101000a92830261ffff90930219909316919091179091556001600160f01b03198416600090815260046020908152604080832080546001600160a01b0387166001600160a01b03199091168117909155835260039091529020805460ff191690911790559050868684818110620008f957620008f9620023da565b905060200201602081019062000910919062002422565b60ff1660010362000945576001600160f01b031982166000908152600660205260409020805460ff19166001179055620009a1565b8686848181106200095a576200095a620023da565b905060200201602081019062000971919062002422565b60ff16600203620009a1576001600160f01b031982166000908152600560205260409020805460ff191660011790555b50508080620009b09062002406565b915050620007d6565b50505050505050505050565b6000620009d761544360f01b620004e0565b905090565b33620009ed6123ab60f11b620004e0565b6001600160a01b03161462000a165760405162461bcd60e51b8152600401620007049062002447565b60005b8181101562000c4557600083838381811062000a395762000a39620023da565b905060200201602081019062000a50919062001fad565b6001600160f01b031981166000908152600460205260409020549091506001600160a01b03168062000abe5760405162461bcd60e51b815260206004820152601660248201527504e584d61737465723a204164647265737320697320360541b604482015260640162000704565b6001600160a01b03811660009081526003602052604090205460ff1662000b285760405162461bcd60e51b815260206004820152601f60248201527f4e584d61737465723a20436f6e7472616374206e6f7420696e7465726e616c00604482015260640162000704565b6001600160a01b0381166000908152600360209081526040808320805460ff191690556001600160f01b0319851683526004825280832080546001600160a01b0319169055600590915290205460ff161562000ba0576001600160f01b031982166000908152600560205260409020805460ff191690555b6001600160f01b0319821660009081526006602052604090205460ff161562000be5576001600160f01b031982166000908152600660205260409020805460ff191690555b6040516001600160a01b03821681526001600160f01b03198316907f9a0e76e7e16765c82c2120b84ccaa2e1034a7862b90608e5e6e7c688a512145f9060200160405180910390a25050808062000c3c9062002406565b91505062000a19565b5060005b60025481101562000dd85760005b8281101562000dce5783838281811062000c755762000c75620023da565b905060200201602081019062000c8c919062001fad565b6001600160f01b0319166002838154811062000cac5762000cac620023da565b90600052602060002090601091828204019190066002029054906101000a900460f01b6001600160f01b0319160362000db9576002805462000cf1906001906200246f565b8154811062000d045762000d04620023da565b90600052602060002090601091828204019190066002029054906101000a900460f01b6002838154811062000d3d5762000d3d620023da565b90600052602060002090601091828204019190066002026101000a81548161ffff021916908360f01c0217905550600280548062000d7f5762000d7f6200248b565b6000828152602090206010600019928301908104909101805461ffff6002600f8516026101000a0219169055909155919091019062000dce565b8062000dc58162002406565b91505062000c57565b5060010162000c49565b5062000de3620017bc565b5050565b6000816001600160a01b031662000e036123ab60f11b620004e0565b6001600160a01b03161492915050565b3362000e246123ab60f11b620004e0565b6001600160a01b03161462000e4d5760405162461bcd60e51b8152600401620007049062002447565b84831462000ec45760405162461bcd60e51b815260206004820152603960248201527f4e584d61737465723a206e6577436f6e7472616374436f6465732e6c656e677460448201527f6820213d206e65774164647265737365732e6c656e6774682e00000000000000606482015260840162000704565b84811462000f305760405162461bcd60e51b815260206004820152603260248201527f4e584d61737465723a206e6577436f6e7472616374436f6465732e6c656e67746044820152710d040427a40bee8f2e0cae65cd8cadccee8d60731b606482015260840162000704565b60005b8581101562000fcf5762000fba87878381811062000f555762000f55620023da565b905060200201602081019062000f6c919062001fad565b86868481811062000f815762000f81620023da565b905060200201602081019062000f98919062001fef565b85858581811062000fad5762000fad620023da565b9050602002013562001895565b8062000fc68162002406565b91505062000f33565b5062000fda620017bc565b505050505050565b7f48b5d77e6708fd7f3423a4467845bea6010627a481f796e5f084bf79a1374f4d80546001600160a01b038381166001600160a01b03198316811790935516600090815260036020526040808220805460ff19908116909155928252812080549092166001179091555b60025481101562000de35760006004600060028481548110620010735762001073620023da565b60009182526020808320601083040154600f9092166002026101000a90910460f01b6001600160f01b03191683528201929092526040908101909120549051633519957d60e21b81523060048201526001600160a01b0390911691508190819063d46655f490602401600060405180830381600087803b158015620010f757600080fd5b505af11580156200110c573d6000803e3d6000fd5b50505050806001600160a01b0316630ea9c9846040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200114c57600080fd5b505af115801562001161573d6000803e3d6000fd5b5050505050508080620011749062002406565b9150506200104c565b600080620011906126a960f11b620004e0565b60405163505ef22f60e01b81526001600160a01b038581166004830152600260248301529192509082169063505ef22f90604401602060405180830381865afa158015620011e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012089190620024b7565b9392505050565b33620012206123ab60f11b620004e0565b6001600160a01b031614620012495760405162461bcd60e51b8152600401620007049062002447565b828114620012b95760405162461bcd60e51b815260206004820152603660248201527f4e584d61737465723a205f636f6e7472616374436f6465732e6c656e677468206044820152750427a40dccaee82c8c8e4cae6e6cae65cd8cadccee8d60531b606482015260840162000704565b60005b8381101562001607576000838383818110620012dc57620012dc620023da565b9050602002016020810190620012f3919062001fef565b905060008686848181106200130c576200130c620023da565b905060200201602081019062001323919062001fad565b90506001600160a01b0382166200137d5760405162461bcd60e51b815260206004820152601f60248201527f4e584d61737465723a20436f6e74726163742061646472657373206973203000604482015260640162000704565b6001600160f01b0319811660009081526005602052604090205460ff1615620014eb576001600160f01b031981166000908152600460208181526040808420548151635c60da1b60e01b815291516001600160a01b0390911694938593635c60da1b93808301939192908290030181865afa15801562001401573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014279190620024d7565b604051631b2ce7f360e11b81526001600160a01b03868116600483015291925090831690633659cfe690602401600060405180830381600087803b1580156200146f57600080fd5b505af115801562001484573d6000803e3d6000fd5b506002925062001492915050565b604080516001600160a01b038088168252841660208201526001600160f01b03198616917fad196ff1639327e1b88a90842d4140c2c8bdd4c0bbb4f3800484c0229fd0b3bc910160405180910390a350505050620015f2565b6001600160f01b0319811660009081526006602052604090205460ff1615620015835760006200151b82620004e0565b905062001529828462001c76565b6001604080516001600160a01b038087168252841660208201526001600160f01b03198516917fad196ff1639327e1b88a90842d4140c2c8bdd4c0bbb4f3800484c0229fd0b3bc910160405180910390a3505050620015f2565b60405162461bcd60e51b815260206004820152603760248201527f4e584d61737465723a204e6f6e2d6578697374616e74206f72206e6f6e2d757060448201527f677261646561626c6520636f6e747261637420636f6465000000000000000000606482015260840162000704565b80620015fe8162002406565b915050620012bc565b5062001612620017bc565b50505050565b600a546001600160a01b03166200165057600a80546001600160a01b03191673422d71fb8040abef53f3a05d21a9b85eebb2995d1790555b565b600a546001600160a01b03163314620016ae5760405162461bcd60e51b815260206004820152601c60248201527f4e584d61737465723a204e6f7420656d657267656e637941646d696e00000000604482015260640162000704565b600a8054821515600160a01b0260ff60a01b199091161790556040517faf0a7aed9964225ce1e722b34382b891b7fa58d0542f9bef86ac8b465790849690620016fc90831515815260200190565b60405180910390a150565b33620017186123ab60f11b620004e0565b6001600160a01b031614620017415760405162461bcd60e51b8152600401620007049062002447565b6001600160c01b031982166622a6a0a226a4a760c91b036200177e57600a80546001600160a01b0383166001600160a01b03199091161790555050565b60405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d20636f646560701b604482015260640162000704565b60005b600254811015620018925760006004600060028481548110620017e657620017e6620023da565b60009182526020808320601083040154600f9092166002026101000a90910460f01b6001600160f01b0319168352820192909252604090810182205481516303aa726160e21b815291516001600160a01b0390911693508392630ea9c984926004808201939182900301818387803b1580156200186257600080fd5b505af115801562001877573d6000803e3d6000fd5b50505050508080620018899062002406565b915050620017bf565b50565b6001600160f01b031983166000908152600460205260409020546001600160a01b031615620019075760405162461bcd60e51b815260206004820152601d60248201527f4e584d61737465723a20436f646520616c726561647920696e20757365000000604482015260640162000704565b6001600160a01b0382166200195f5760405162461bcd60e51b815260206004820152601f60248201527f4e584d61737465723a20436f6e74726163742061646472657373206973203000604482015260640162000704565b6002805460018101825560008281527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace6010830401805461ffff600f9094169094026101000a9283021990931660f087901c929092029190911790915560ff82166000198101620019f7576001600160f01b031985166000908152600660205260409020805460ff1916600117905583915062001b5a565b6002810362001b0557600883901c600081900362001a285762001a25436001600160f01b03198816620024f7565b90505b60008160001b6001600160a01b0360405162001a449062001f9f565b6001600160a01b0390911681526020018190604051809103906000f590508015801562001a75573d6000803e3d6000fd5b50604051631b2ce7f360e11b81526001600160a01b03888116600483015291925090821690633659cfe690602401600060405180830381600087803b15801562001abe57600080fd5b505af115801562001ad3573d6000803e3d6000fd5b5050506001600160f01b031988166000908152600560205260409020805460ff1916600117905550925062001b5a9050565b60405162461bcd60e51b815260206004820152602360248201527f4e584d61737465723a20556e737570706f7274656420636f6e7472616374207460448201526279706560e81b606482015260840162000704565b6001600160f01b03198516600090815260046020818152604080842080546001600160a01b0319166001600160a01b038816908117909155808552600390925292839020805460ff191660011790559151633519957d60e21b8152309181019190915283919063d46655f490602401600060405180830381600087803b15801562001be457600080fd5b505af115801562001bf9573d6000803e3d6000fd5b5050505081600281111562001c125762001c12620024a1565b600281111562001c265762001c26620024a1565b6040516001600160a01b03871681526001600160f01b03198816907f6eba5fe8fc6be4cbbc0b7b5881ffa36428b8dee7170dd5a96cd4e76da2c682ec9060200160405180910390a3505050505050565b6001600160f01b031982166121a960f11b0362001e2b57600062001c9f61544360f01b620004e0565b60405163e43252d760e01b81526001600160a01b0384811660048301529192509082169063e43252d790602401600060405180830381600087803b15801562001ce757600080fd5b505af115801562001cfc573d6000803e3d6000fd5b50506121a960f11b6000525050600460208190527f81a16a8e02e895bc8f23c4b57164801632b22336e581fdbd05bc322b5dbf847454604051638ab1d68160e01b81526001600160a01b0391821692810192909252821690638ab1d68190602401600060405180830381600087803b15801562001d7857600080fd5b505af115801562001d8d573d6000803e3d6000fd5b50506121a960f11b6000525050600460208190527f81a16a8e02e895bc8f23c4b57164801632b22336e581fdbd05bc322b5dbf84745460405162900f0160e41b81526001600160a01b03858116938201939093529116908190630900f01090602401600060405180830381600087803b15801562001e0a57600080fd5b505af115801562001e1f573d6000803e3d6000fd5b50505050505062001ed7565b6001600160f01b0319821661503160f01b0362001ed75761503160f01b600052600460208190527f65e528c366d24fe1267504a3fd0d0e6ee46d1498cc6709837295d0fa5e628654546040516366fd551d60e01b81526001600160a01b038481169382019390935291169081906366fd551d90602401600060405180830381600087803b15801562001ebc57600080fd5b505af115801562001ed1573d6000803e3d6000fd5b50505050505b6001600160f01b03198216600081815260046020818152604080842080546001600160a01b0390811680875260038552838720805460ff1990811690915583546001600160a01b0319168a84169081178555885284882080549091166001179055969095529183905290549051633519957d60e21b8152309281019290925290911690819063d46655f490602401600060405180830381600087803b15801562001f8057600080fd5b505af115801562001f95573d6000803e3d6000fd5b5050505050505050565b6104aa806200250e83390190565b60006020828403121562001fc057600080fd5b81356001600160f01b0319811681146200120857600080fd5b6001600160a01b03811681146200189257600080fd5b6000602082840312156200200257600080fd5b8135620012088162001fd9565b6000602082840312156200202257600080fd5b5035919050565b604080825283519082018190526000906020906060840190828701845b828110156200206e5781516001600160f01b0319168452928401929084019060010162002046565b5050508381038285015284518082528583019183019060005b81811015620020ae5783516001600160a01b03168352928401929184019160010162002087565b5090979650505050505050565b60008083601f840112620020ce57600080fd5b50813567ffffffffffffffff811115620020e757600080fd5b6020830191508360208260051b85010111156200210357600080fd5b9250929050565b600080600080600080600080600060c08a8c0312156200212957600080fd5b8935620021368162001fd9565b985060208a0135620021488162001fd9565b975060408a01356200215a8162001fd9565b965060608a013567ffffffffffffffff808211156200217857600080fd5b620021868d838e01620020bb565b909850965060808c0135915080821115620021a057600080fd5b620021ae8d838e01620020bb565b909650945060a08c0135915080821115620021c857600080fd5b50620021d78c828d01620020bb565b915080935050809150509295985092959850929598565b600080602083850312156200220257600080fd5b823567ffffffffffffffff8111156200221a57600080fd5b6200222885828601620020bb565b90969095509350505050565b600080600080600080606087890312156200224e57600080fd5b863567ffffffffffffffff808211156200226757600080fd5b620022758a838b01620020bb565b909850965060208901359150808211156200228f57600080fd5b6200229d8a838b01620020bb565b90965094506040890135915080821115620022b757600080fd5b50620022c689828a01620020bb565b979a9699509497509295939492505050565b60008060008060408587031215620022ef57600080fd5b843567ffffffffffffffff808211156200230857600080fd5b6200231688838901620020bb565b909650945060208701359150808211156200233057600080fd5b506200233f87828801620020bb565b95989497509550505050565b80151581146200189257600080fd5b6000602082840312156200236d57600080fd5b813562001208816200234b565b600080604083850312156200238e57600080fd5b82356001600160c01b031981168114620023a757600080fd5b91506020830135620023b98162001fd9565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200241b576200241b620023f0565b5060010190565b6000602082840312156200243557600080fd5b813560ff811681146200120857600080fd5b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b81810381811115620024855762002485620023f0565b92915050565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620024ca57600080fd5b815162001208816200234b565b600060208284031215620024ea57600080fd5b8151620012088162001fd9565b80820180821115620024855762002485620023f056fe608060405234801561001057600080fd5b506040516104aa3803806104aa83398101604081905261002f916100ec565b610057337f2dbc9b6b8d09ee15269835797a45b6f772b81406ec218e6fd64b114f376266ba55565b61006081610066565b5061011c565b600061007e60008051602061048a8339815191525490565b9050816001600160a01b0316816001600160a01b03160361009e57600080fd5b6100b48260008051602061048a83398151915255565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000602082840312156100fe57600080fd5b81516001600160a01b038116811461011557600080fd5b9392505050565b61035f8061012b6000396000f3fe6080604052600436106100435760003560e01c8063025313a21461005a5780633659cfe6146100945780635c60da1b146100b4578063f1739cae146100d657610052565b36610052576100506100f6565b005b6100506100f6565b34801561006657600080fd5b506000805160206102ea833981519152545b6040516001600160a01b03909116815260200160405180910390f35b3480156100a057600080fd5b506100506100af3660046102b9565b610148565b3480156100c057600080fd5b5060008051602061030a83398151915254610078565b3480156100e257600080fd5b506100506100f13660046102b9565b610181565b600061010e60008051602061030a8339815191525490565b90506001600160a01b03811661012357600080fd5b60405136600082376000803683855af43d806000843e818015610144578184f35b8184fd5b6000805160206102ea833981519152546001600160a01b0316336001600160a01b03161461017557600080fd5b61017e81610233565b50565b6000805160206102ea833981519152546001600160a01b0316336001600160a01b0316146101ae57600080fd5b6001600160a01b0381166101c157600080fd5b6101d7816000805160206102ea83398151915255565b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd961020e6000805160206102ea8339815191525490565b604080516001600160a01b03928316815291841660208301520160405180910390a150565b600061024b60008051602061030a8339815191525490565b9050816001600160a01b0316816001600160a01b03160361026b57600080fd5b6102818260008051602061030a83398151915255565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000602082840312156102cb57600080fd5b81356001600160a01b03811681146102e257600080fd5b939250505056fe2dbc9b6b8d09ee15269835797a45b6f772b81406ec218e6fd64b114f376266ba7fb5080a7084f4c60aade0a78fc13ba4ba6555b60e554360d005f0d684cea186a26469706673582212201057513f99002041344c19a488bd48c257a905888fbb455418e934b436488f0b64736f6c634300081200337fb5080a7084f4c60aade0a78fc13ba4ba6555b60e554360d005f0d684cea186a26469706673582212209bf52131e7a333b18ee004ec0f774aa8b99dc28aaa3805bbbae069d831c8309164736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
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.