Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DiamondLoupeFacet
Compiler Version
v0.8.12+commit.f00d7308
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]>, Twitter/Github: @mudgen * EIP-2535 Diamonds /******************************************************************************/ // The functions in DiamondLoupeFacet MUST be added to a diamond. // The EIP-2535 Diamond standard requires these functions. import { LibDiamond } from "../libraries/LibDiamond.sol"; import { IDiamondLoupe } from "../interfaces/IDiamondLoupe.sol"; import { IERC165 } from "../interfaces/IERC165.sol"; // solhint-disable no-inline-assembly contract DiamondLoupeFacet is IDiamondLoupe, IERC165 { // Diamond Loupe Functions //////////////////////////////////////////////////////////////////// /// These functions are expected to be called frequently by tools. // // struct Facet { // address facetAddress; // bytes4[] functionSelectors; // } /// @notice Gets all facets and their selectors. /// @return facets_ Facet function facets() external view override returns (Facet[] memory facets_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); uint256 selectorCount = ds.selectors.length; // create an array set to the maximum size possible facets_ = new Facet[](selectorCount); // create an array for counting the number of selectors for each facet uint16[] memory numFacetSelectors = new uint16[](selectorCount); // total number of facets uint256 numFacets; // loop through function selectors for (uint256 selectorIndex; selectorIndex < selectorCount; selectorIndex++) { bytes4 selector = ds.selectors[selectorIndex]; address facetAddress_ = ds.facetAddressAndSelectorPosition[selector].facetAddress; bool continueLoop = false; // find the functionSelectors array for selector and add selector to it for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) { if (facets_[facetIndex].facetAddress == facetAddress_) { facets_[facetIndex].functionSelectors[numFacetSelectors[facetIndex]] = selector; numFacetSelectors[facetIndex]++; continueLoop = true; break; } } // if functionSelectors array exists for selector then continue loop if (continueLoop) { continueLoop = false; continue; } // create a new functionSelectors array for selector facets_[numFacets].facetAddress = facetAddress_; facets_[numFacets].functionSelectors = new bytes4[](selectorCount); facets_[numFacets].functionSelectors[0] = selector; numFacetSelectors[numFacets] = 1; numFacets++; } for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) { uint256 numSelectors = numFacetSelectors[facetIndex]; bytes4[] memory selectors = facets_[facetIndex].functionSelectors; // setting the number of selectors assembly { mstore(selectors, numSelectors) } } // setting the number of facets assembly { mstore(facets_, numFacets) } } /// @notice Gets all the function selectors supported by a specific facet. /// @param _facet The facet address. /// @return _facetFunctionSelectors The selectors associated with a facet address. function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory _facetFunctionSelectors) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); uint256 selectorCount = ds.selectors.length; uint256 numSelectors; _facetFunctionSelectors = new bytes4[](selectorCount); // loop through function selectors for (uint256 selectorIndex; selectorIndex < selectorCount; selectorIndex++) { bytes4 selector = ds.selectors[selectorIndex]; address facetAddress_ = ds.facetAddressAndSelectorPosition[selector].facetAddress; if (_facet == facetAddress_) { _facetFunctionSelectors[numSelectors] = selector; numSelectors++; } } // Set the number of selectors in the array assembly { mstore(_facetFunctionSelectors, numSelectors) } } /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view override returns (address[] memory facetAddresses_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); uint256 selectorCount = ds.selectors.length; // create an array set to the maximum size possible facetAddresses_ = new address[](selectorCount); uint256 numFacets; // loop through function selectors for (uint256 selectorIndex; selectorIndex < selectorCount; selectorIndex++) { bytes4 selector = ds.selectors[selectorIndex]; address facetAddress_ = ds.facetAddressAndSelectorPosition[selector].facetAddress; bool continueLoop = false; // see if we have collected the address already and break out of loop if we have for (uint256 facetIndex; facetIndex < numFacets; facetIndex++) { if (facetAddress_ == facetAddresses_[facetIndex]) { continueLoop = true; break; } } // continue loop if we already have the address if (continueLoop) { continueLoop = false; continue; } // include address facetAddresses_[numFacets] = facetAddress_; numFacets++; } // Set the number of facet addresses in the array assembly { mstore(facetAddresses_, numFacets) } } /// @notice Gets the facet address that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); facetAddress_ = ds.facetAddressAndSelectorPosition[_functionSelector].facetAddress; } // This implements ERC-165. function supportsInterface(bytes4 _interfaceId) external view override returns (bool) { LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); return ds.supportedInterfaces[_interfaceId]; } }
// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]>, Twitter/Github: @mudgen * EIP-2535 Diamonds /******************************************************************************/ import { IDiamond } from "../interfaces/IDiamond.sol"; import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; // solhint-disable avoid-low-level-calls // solhint-disable no-inline-assembly // Remember to add the loupe functions from DiamondLoupeFacet to the diamond. // The loupe functions are required by the EIP2535 Diamonds standard error NoSelectorsGivenToAdd(); error NotContractOwner(address _user, address _contractOwner); error NoSelectorsProvidedForFacetForCut(address _facetAddress); error CannotAddSelectorsToZeroAddress(bytes4[] _selectors); error NoBytecodeAtAddress(address _contractAddress, string _message); error IncorrectFacetCutAction(uint8 _action); error CannotAddFunctionToDiamondThatAlreadyExists(bytes4 _selector); error CannotReplaceFunctionsFromFacetWithZeroAddress(bytes4[] _selectors); error CannotReplaceImmutableFunction(bytes4 _selector); error CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(bytes4 _selector); error CannotReplaceFunctionThatDoesNotExists(bytes4 _selector); error RemoveFacetAddressMustBeZeroAddress(address _facetAddress); error CannotRemoveFunctionThatDoesNotExist(bytes4 _selector); error CannotRemoveImmutableFunction(bytes4 _selector); error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata); library LibDiamond { bytes32 internal constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndSelectorPosition { address facetAddress; uint16 selectorPosition; } struct DiamondStorage { // function selector => facet address and selector position in selectors array mapping(bytes4 => FacetAddressAndSelectorPosition) facetAddressAndSelectorPosition; bytes4[] selectors; mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { if (msg.sender != diamondStorage().contractOwner) { revert NotContractOwner(msg.sender, diamondStorage().contractOwner); } } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { bytes4[] memory functionSelectors = _diamondCut[facetIndex].functionSelectors; address facetAddress = _diamondCut[facetIndex].facetAddress; if (functionSelectors.length == 0) { revert NoSelectorsProvidedForFacetForCut(facetAddress); } IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamond.FacetCutAction.Add) { addFunctions(facetAddress, functionSelectors); } else if (action == IDiamond.FacetCutAction.Replace) { replaceFunctions(facetAddress, functionSelectors); } else if (action == IDiamond.FacetCutAction.Remove) { removeFunctions(facetAddress, functionSelectors); } else { revert IncorrectFacetCutAction(uint8(action)); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { if (_facetAddress == address(0)) { revert CannotAddSelectorsToZeroAddress(_functionSelectors); } DiamondStorage storage ds = diamondStorage(); uint16 selectorCount = uint16(ds.selectors.length); enforceHasContractCode(_facetAddress, "LibDiamondCut: Add facet has no code"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress; if (oldFacetAddress != address(0)) { revert CannotAddFunctionToDiamondThatAlreadyExists(selector); } ds.facetAddressAndSelectorPosition[selector] = FacetAddressAndSelectorPosition(_facetAddress, selectorCount); ds.selectors.push(selector); selectorCount++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { DiamondStorage storage ds = diamondStorage(); if (_facetAddress == address(0)) { revert CannotReplaceFunctionsFromFacetWithZeroAddress(_functionSelectors); } enforceHasContractCode(_facetAddress, "LibDiamondCut: Replace facet has no code"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress; // can't replace immutable functions -- functions defined directly in the diamond in this case if (oldFacetAddress == address(this)) { revert CannotReplaceImmutableFunction(selector); } if (oldFacetAddress == _facetAddress) { revert CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(selector); } if (oldFacetAddress == address(0)) { revert CannotReplaceFunctionThatDoesNotExists(selector); } // replace old facet address ds.facetAddressAndSelectorPosition[selector].facetAddress = _facetAddress; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { DiamondStorage storage ds = diamondStorage(); uint256 selectorCount = ds.selectors.length; if (_facetAddress != address(0)) { revert RemoveFacetAddressMustBeZeroAddress(_facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; FacetAddressAndSelectorPosition memory oldFacetAddressAndSelectorPosition = ds.facetAddressAndSelectorPosition[ selector ]; if (oldFacetAddressAndSelectorPosition.facetAddress == address(0)) { revert CannotRemoveFunctionThatDoesNotExist(selector); } // can't remove immutable functions -- functions defined directly in the diamond if (oldFacetAddressAndSelectorPosition.facetAddress == address(this)) { revert CannotRemoveImmutableFunction(selector); } // replace selector with last selector selectorCount--; if (oldFacetAddressAndSelectorPosition.selectorPosition != selectorCount) { bytes4 lastSelector = ds.selectors[selectorCount]; ds.selectors[oldFacetAddressAndSelectorPosition.selectorPosition] = lastSelector; ds.facetAddressAndSelectorPosition[lastSelector].selectorPosition = oldFacetAddressAndSelectorPosition .selectorPosition; } // delete last selector ds.selectors.pop(); delete ds.facetAddressAndSelectorPosition[selector]; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { return; } enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { // bubble up error /// @solidity memory-safe-assembly assembly { let returndata_size := mload(error) revert(add(32, error), returndata_size) } } else { revert InitializationFunctionReverted(_init, _calldata); } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } if (contractSize == 0) { revert NoBytecodeAtAddress(_contract, _errorMessage); } } }
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;
interface IERC165 {
/// @notice Query if a contract implements an interface
/// @param interfaceId The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]>, Twitter/Github: @mudgen * EIP-2535 Diamonds /******************************************************************************/ // A loupe is a small magnifying glass used to look at diamonds. // These functions look at diamonds interface IDiamondLoupe { /// These functions are expected to be called frequently /// by tools. struct Facet { address facetAddress; bytes4[] functionSelectors; } /// @notice Gets all facet addresses and their four byte function selectors. /// @return facets_ Facet function facets() external view returns (Facet[] memory facets_); /// @notice Gets all the function selectors supported by a specific facet. /// @param _facet The facet address. /// @return facetFunctionSelectors_ function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_); /// @notice Get all the facet addresses used by a diamond. /// @return facetAddresses_ function facetAddresses() external view returns (address[] memory facetAddresses_); /// @notice Gets the facet that supports the given selector. /// @dev If facet is not found return address(0). /// @param _functionSelector The function selector. /// @return facetAddress_ The facet address. function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_); }
// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]>, Twitter/Github: @mudgen * EIP-2535 Diamonds /******************************************************************************/ interface IDiamond { enum FacetCutAction { Add, Replace, Remove } // Add=0, Replace=1, Remove=2 struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); }
// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]>, Twitter/Github: @mudgen * EIP-2535 Diamonds /******************************************************************************/ import { IDiamond } from "./IDiamond.sol"; interface IDiamondCut is IDiamond { /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; }
{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"facetAddress","outputs":[{"internalType":"address","name":"facetAddress_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facetAddresses","outputs":[{"internalType":"address[]","name":"facetAddresses_","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_facet","type":"address"}],"name":"facetFunctionSelectors","outputs":[{"internalType":"bytes4[]","name":"_facetFunctionSelectors","type":"bytes4[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"facets","outputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamondLoupe.Facet[]","name":"facets_","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50610a89806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806301ffc9a71461005c57806352ef6b2c146100bd5780637a0ed627146100d2578063adfca15e146100e7578063cdffacc614610107575b600080fd5b6100a861006a366004610838565b6001600160e01b03191660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100c561015f565b6040516100b49190610869565b6100da610301565b6040516100b491906108fb565b6100fa6100f5366004610978565b6106ef565b6040516100b491906109a1565b610147610115366004610838565b6001600160e01b0319166000908152600080516020610a3483398151915260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100b4565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54606090600080516020610a34833981519152908067ffffffffffffffff8111156101ad576101ad6109b4565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5092506000805b828110156102f75760008460010182815481106101fc576101fc6109ca565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b0319811683529087905260408220549092506001600160a01b031690805b858110156102995788818151811061025d5761025d6109ca565b60200260200101516001600160a01b0316836001600160a01b031614156102875760019150610299565b80610291816109f6565b915050610243565b5080156102a957506102e5915050565b818886815181106102bc576102bc6109ca565b6001600160a01b0390921660209283029190910190910152846102de816109f6565b9550505050505b806102ef816109f6565b9150506101dd565b5080845250505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54606090600080516020610a34833981519152908067ffffffffffffffff81111561034f5761034f6109b4565b60405190808252806020026020018201604052801561039557816020015b60408051808201909152600081526060602082015281526020019060019003908161036d5790505b50925060008167ffffffffffffffff8111156103b3576103b36109b4565b6040519080825280602002602001820160405280156103dc578160200160208202803683370190505b5090506000805b8381101561067c576000856001018281548110610402576104026109ca565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b0319811683529088905260408220549092506001600160a01b031690805b8581101561054057826001600160a01b03168a828151811061046d5761046d6109ca565b6020026020010151600001516001600160a01b0316141561052e57838a828151811061049b5761049b6109ca565b6020026020010151602001518883815181106104b9576104b96109ca565b602002602001015161ffff16815181106104d5576104d56109ca565b60200260200101906001600160e01b03191690816001600160e01b03191681525050868181518110610509576105096109ca565b60200260200101805180919061051e90610a11565b61ffff1690525060019150610540565b80610538816109f6565b915050610449565b508015610550575061066a915050565b81898681518110610563576105636109ca565b60209081029190910101516001600160a01b0390911690528667ffffffffffffffff811115610594576105946109b4565b6040519080825280602002602001820160405280156105bd578160200160208202803683370190505b508986815181106105d0576105d06109ca565b602002602001015160200181905250828986815181106105f2576105f26109ca565b602002602001015160200151600081518110610610576106106109ca565b60200260200101906001600160e01b03191690816001600160e01b031916815250506001868681518110610646576106466109ca565b61ffff9092166020928302919091019091015284610663816109f6565b9550505050505b80610674816109f6565b9150506103e3565b5060005b818110156106e457600083828151811061069c5761069c6109ca565b602002602001015161ffff16905060008783815181106106be576106be6109ca565b6020026020010151602001519050818152505080806106dc906109f6565b915050610680565b508085525050505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54606090600080516020610a348339815191529060008167ffffffffffffffff81111561073f5761073f6109b4565b604051908082528060200260200182016040528015610768578160200160208202803683370190505b50935060005b8281101561082d57600084600101828154811061078d5761078d6109ca565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b031981168352908790526040909120549091506001600160a01b0390811690881681141561081857818785815181106107f1576107f16109ca565b6001600160e01b03199092166020928302919091019091015283610814816109f6565b9450505b50508080610825906109f6565b91505061076e565b508352509092915050565b60006020828403121561084a57600080fd5b81356001600160e01b03198116811461086257600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108aa5783516001600160a01b031683529284019291840191600101610885565b50909695505050505050565b600081518084526020808501945080840160005b838110156108f05781516001600160e01b031916875295820195908201906001016108ca565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561096a57888303603f19018552815180516001600160a01b03168452870151878401879052610957878501826108b6565b9588019593505090860190600101610922565b509098975050505050505050565b60006020828403121561098a57600080fd5b81356001600160a01b038116811461086257600080fd5b60208152600061086260208301846108b6565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610a0a57610a0a6109e0565b5060010190565b600061ffff80831681811415610a2957610a296109e0565b600101939250505056fec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ca2646970667358221220e573bd85b2063ff683a3a961378fc9f615d3bc5b4b01230fa7e41c5abcc36dc764736f6c634300080c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c806301ffc9a71461005c57806352ef6b2c146100bd5780637a0ed627146100d2578063adfca15e146100e7578063cdffacc614610107575b600080fd5b6100a861006a366004610838565b6001600160e01b03191660009081527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131e602052604090205460ff1690565b60405190151581526020015b60405180910390f35b6100c561015f565b6040516100b49190610869565b6100da610301565b6040516100b491906108fb565b6100fa6100f5366004610978565b6106ef565b6040516100b491906109a1565b610147610115366004610838565b6001600160e01b0319166000908152600080516020610a3483398151915260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100b4565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54606090600080516020610a34833981519152908067ffffffffffffffff8111156101ad576101ad6109b4565b6040519080825280602002602001820160405280156101d6578160200160208202803683370190505b5092506000805b828110156102f75760008460010182815481106101fc576101fc6109ca565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b0319811683529087905260408220549092506001600160a01b031690805b858110156102995788818151811061025d5761025d6109ca565b60200260200101516001600160a01b0316836001600160a01b031614156102875760019150610299565b80610291816109f6565b915050610243565b5080156102a957506102e5915050565b818886815181106102bc576102bc6109ca565b6001600160a01b0390921660209283029190910190910152846102de816109f6565b9550505050505b806102ef816109f6565b9150506101dd565b5080845250505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54606090600080516020610a34833981519152908067ffffffffffffffff81111561034f5761034f6109b4565b60405190808252806020026020018201604052801561039557816020015b60408051808201909152600081526060602082015281526020019060019003908161036d5790505b50925060008167ffffffffffffffff8111156103b3576103b36109b4565b6040519080825280602002602001820160405280156103dc578160200160208202803683370190505b5090506000805b8381101561067c576000856001018281548110610402576104026109ca565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b0319811683529088905260408220549092506001600160a01b031690805b8581101561054057826001600160a01b03168a828151811061046d5761046d6109ca565b6020026020010151600001516001600160a01b0316141561052e57838a828151811061049b5761049b6109ca565b6020026020010151602001518883815181106104b9576104b96109ca565b602002602001015161ffff16815181106104d5576104d56109ca565b60200260200101906001600160e01b03191690816001600160e01b03191681525050868181518110610509576105096109ca565b60200260200101805180919061051e90610a11565b61ffff1690525060019150610540565b80610538816109f6565b915050610449565b508015610550575061066a915050565b81898681518110610563576105636109ca565b60209081029190910101516001600160a01b0390911690528667ffffffffffffffff811115610594576105946109b4565b6040519080825280602002602001820160405280156105bd578160200160208202803683370190505b508986815181106105d0576105d06109ca565b602002602001015160200181905250828986815181106105f2576105f26109ca565b602002602001015160200151600081518110610610576106106109ca565b60200260200101906001600160e01b03191690816001600160e01b031916815250506001868681518110610646576106466109ca565b61ffff9092166020928302919091019091015284610663816109f6565b9550505050505b80610674816109f6565b9150506103e3565b5060005b818110156106e457600083828151811061069c5761069c6109ca565b602002602001015161ffff16905060008783815181106106be576106be6109ca565b6020026020010151602001519050818152505080806106dc906109f6565b915050610680565b508085525050505090565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131d54606090600080516020610a348339815191529060008167ffffffffffffffff81111561073f5761073f6109b4565b604051908082528060200260200182016040528015610768578160200160208202803683370190505b50935060005b8281101561082d57600084600101828154811061078d5761078d6109ca565b6000918252602080832060088304015460079092166004026101000a90910460e01b6001600160e01b031981168352908790526040909120549091506001600160a01b0390811690881681141561081857818785815181106107f1576107f16109ca565b6001600160e01b03199092166020928302919091019091015283610814816109f6565b9450505b50508080610825906109f6565b91505061076e565b508352509092915050565b60006020828403121561084a57600080fd5b81356001600160e01b03198116811461086257600080fd5b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156108aa5783516001600160a01b031683529284019291840191600101610885565b50909695505050505050565b600081518084526020808501945080840160005b838110156108f05781516001600160e01b031916875295820195908201906001016108ca565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561096a57888303603f19018552815180516001600160a01b03168452870151878401879052610957878501826108b6565b9588019593505090860190600101610922565b509098975050505050505050565b60006020828403121561098a57600080fd5b81356001600160a01b038116811461086257600080fd5b60208152600061086260208301846108b6565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610a0a57610a0a6109e0565b5060010190565b600061ffff80831681811415610a2957610a296109e0565b600101939250505056fec8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131ca2646970667358221220e573bd85b2063ff683a3a961378fc9f615d3bc5b4b01230fa7e41c5abcc36dc764736f6c634300080c0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.