Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
16328317 | 784 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Projects
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {Pausable} from "./abstract/Pausable.sol"; import {AllowList} from "./abstract/AllowList.sol"; import {IProjects} from "./interfaces/IProjects.sol"; import {IPausable} from "./interfaces/IPausable.sol"; /// @title Projects - Tracks projects and their owners /// @notice A storage contract that tracks project IDs and owner accounts. contract Projects is IProjects, AllowList, Pausable { string public constant NAME = "Projects"; string public constant VERSION = "0.0.1"; mapping(uint32 => address) public owners; mapping(uint32 => address) public pendingOwners; uint32 internal _nextProjectId; constructor(address _controller) AllowList(_controller) {} /// @inheritdoc IProjects function create(address owner) external override onlyAllowed whenNotPaused returns (uint32 id) { emit CreateProject(id = ++_nextProjectId); owners[id] = owner; } /// @inheritdoc IProjects function transferOwnership(uint32 projectId, address newOwner) external override onlyAllowed whenNotPaused { pendingOwners[projectId] = newOwner; emit TransferOwnership(projectId, owners[projectId], newOwner); } /// @inheritdoc IProjects function acceptOwnership(uint32 projectId) external override onlyAllowed whenNotPaused { address oldOwner = owners[projectId]; address newOwner = pendingOwnerOf(projectId); owners[projectId] = newOwner; delete pendingOwners[projectId]; emit AcceptOwnership(projectId, oldOwner, newOwner); } /// @inheritdoc IProjects function ownerOf(uint32 projectId) external view override returns (address owner) { owner = owners[projectId]; if (owner == address(0)) { revert NotFound(); } } /// @inheritdoc IProjects function pendingOwnerOf(uint32 projectId) public view override returns (address pendingOwner) { pendingOwner = pendingOwners[projectId]; if (pendingOwner == address(0)) { revert NotFound(); } } /// @inheritdoc IProjects function exists(uint32 projectId) external view override returns (bool) { return owners[projectId] != address(0); } /// @inheritdoc IPausable function pause() external override onlyController { _pause(); } /// @inheritdoc IPausable function unpause() external override onlyController { _unpause(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {Controllable} from "./Controllable.sol"; import {IAllowList} from "../interfaces/IAllowList.sol"; /// @title AllowList - Tracks approved addresses /// @notice An abstract contract for tracking allowed and denied addresses. abstract contract AllowList is IAllowList, Controllable { mapping(address => bool) public allowed; modifier onlyAllowed() { if (!allowed[msg.sender]) { revert Forbidden(); } _; } constructor(address _controller) Controllable(_controller) {} /// @inheritdoc IAllowList function denied(address caller) external view returns (bool) { return !allowed[caller]; } /// @inheritdoc IAllowList function allow(address caller) external onlyController { allowed[caller] = true; emit Allow(caller); } /// @inheritdoc IAllowList function deny(address caller) external onlyController { allowed[caller] = false; emit Deny(caller); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {IControllable} from "../interfaces/IControllable.sol"; /// @title Controllable - Controller management functions /// @notice An abstract base contract for contracts managed by the Controller. abstract contract Controllable is IControllable { address public controller; modifier onlyController() { if (msg.sender != controller) { revert Forbidden(); } _; } constructor(address _controller) { if (_controller == address(0)) { revert ZeroAddress(); } controller = _controller; } /// @inheritdoc IControllable function setDependency(bytes32 _name, address) external virtual onlyController { revert InvalidDependency(_name); } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {Pausable as OZPausable} from "openzeppelin-contracts/security/Pausable.sol"; import {IPausable} from "../interfaces/IPausable.sol"; /// @title Pausable - Pause and unpause functionality /// @notice Wraps OZ Pausable and adds an IPausable interface. abstract contract Pausable is IPausable, OZPausable {}
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {IControllable} from "./IControllable.sol"; interface IAllowList is IControllable { event Allow(address caller); event Deny(address caller); /// @notice Check whether the given `caller` address is allowed. /// @param caller The caller address. /// @return True if caller is allowed, false if caller is denied. function allowed(address caller) external view returns (bool); /// @notice Check whether the given `caller` address is denied. /// @param caller The caller address. /// @return True if caller is denied, false if caller is allowed. function denied(address caller) external view returns (bool); /// @notice Add a caller address to the allowlist. /// @param caller The caller address. function allow(address caller) external; /// @notice Remove a caller address from the allowlist. /// @param caller The caller address. function deny(address caller) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IAnnotated { /// @notice Get contract name. /// @return Contract name. function NAME() external returns (string memory); /// @notice Get contract version. /// @return Contract version. function VERSION() external returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface ICommonErrors { /// @notice The provided address is the zero address. error ZeroAddress(); /// @notice The attempted action is not allowed. error Forbidden(); /// @notice The requested entity cannot be found. error NotFound(); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {ICommonErrors} from "./ICommonErrors.sol"; interface IControllable is ICommonErrors { /// @notice The dependency with the given `name` is invalid. error InvalidDependency(bytes32 name); /// @notice Get controller address. /// @return Controller address. function controller() external returns (address); /// @notice Set a named dependency to the given contract address. /// @param _name bytes32 name of the dependency to set. /// @param _contract address of the dependency. function setDependency(bytes32 _name, address _contract) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IPausable { /// @notice Pause the contract. function pause() external; /// @notice Unpause the contract. function unpause() external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import {IAnnotated} from "./IAnnotated.sol"; import {ICommonErrors} from "./ICommonErrors.sol"; import {IPausable} from "./IPausable.sol"; import {IAllowList} from "./IAllowList.sol"; interface IProjects is IAllowList, IPausable, IAnnotated { event CreateProject(uint32 id); event TransferOwnership(uint32 indexed projectId, address indexed owner, address indexed newOwner); event AcceptOwnership(uint32 indexed projectId, address indexed owner, address indexed newOwner); /// @notice Create a new project owned by the given `owner`. /// @param owner address of project owner. /// @return uint32 Project ID. function create(address owner) external returns (uint32); /// @notice Start transfer of `projectId` to `newOwner`. The new owner must /// accept the transfer in order to assume ownership of the project. /// @param projectId uint32 project ID. /// @param newOwner address of proposed new owner. function transferOwnership(uint32 projectId, address newOwner) external; /// @notice Transfer ownership of `projectId` to `pendingOwner`. /// @param projectId uint32 project ID. function acceptOwnership(uint32 projectId) external; /// @notice Get owner of project by ID. /// @param projectId uint32 project ID. /// @return address of project owner. function ownerOf(uint32 projectId) external view returns (address); /// @notice Get pending owner of project by ID. /// @param projectId uint32 project ID. /// @return address of pending project owner. function pendingOwnerOf(uint32 projectId) external view returns (address); /// @notice Check whether project exists by ID. /// @param projectId uint32 project ID. /// @return True if project exists, false if project does not exist. function exists(uint32 projectId) external view returns (bool); }
{ "remappings": [ "ds-test/=lib/ds-test/src/", "erc4626-tests/=lib/operator-filter-registry/lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/", "operator-filter-registry/=lib/operator-filter-registry/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Forbidden","type":"error"},{"inputs":[{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"InvalidDependency","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"projectId","type":"uint32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"AcceptOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"Allow","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"id","type":"uint32"}],"name":"CreateProject","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"caller","type":"address"}],"name":"Deny","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint32","name":"projectId","type":"uint32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"TransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"projectId","type":"uint32"}],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"allow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"create","outputs":[{"internalType":"uint32","name":"id","type":"uint32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"denied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"deny","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"projectId","type":"uint32"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"projectId","type":"uint32"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"projectId","type":"uint32"}],"name":"pendingOwnerOf","outputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"","type":"uint32"}],"name":"pendingOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"setDependency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"projectId","type":"uint32"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610b44380380610b4483398101604081905261002f91610089565b80806001600160a01b0381166100585760405163d92e233d60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b039290921691909117905550506002805460ff191690556100b9565b60006020828403121561009b57600080fd5b81516001600160a01b03811681146100b257600080fd5b9392505050565b610a7c806100c86000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638dee1900116100ad578063d63a8e1111610071578063d63a8e11146102c1578063f77c4791146102e4578063fc9d96ba146102f7578063ff9913e814610324578063ffa1ad741461033757600080fd5b80638dee1900146102165780639c52a7f11461023f5780639ed9331814610252578063a3f4df7e1461027a578063a6907def146102ae57600080fd5b80633f4ba83a116100f45780633f4ba83a146101d35780635c975abb146101dd57806362d5da66146101e85780637238695e146101fb5780638456cb591461020e57600080fd5b8063123f62af1461012657806313c369ed14610156578063180dc3181461019757806323b7ec3b146101c0575b600080fd5b61013961013436600461091d565b61035b565b6040516001600160a01b0390911681526020015b60405180910390f35b61018761016436600461091d565b63ffffffff166000908152600360205260409020546001600160a01b0316151590565b604051901515815260200161014d565b6101396101a536600461091d565b6003602052600090815260409020546001600160a01b031681565b6101396101ce36600461091d565b61039d565b6101db6103da565b005b60025460ff16610187565b6101db6101f6366004610956565b61040f565b6101db610209366004610989565b6104b6565b6101db610502565b61013961022436600461091d565b6004602052600090815260409020546001600160a01b031681565b6101db61024d3660046109ac565b610535565b6102656102603660046109ac565b6105b8565b60405163ffffffff909116815260200161014d565b6102a16040518060400160405280600881526020016750726f6a6563747360c01b81525081565b60405161014d91906109c7565b6101db6102bc36600461091d565b610692565b6101876102cf3660046109ac565b60016020526000908152604090205460ff1681565b600054610139906001600160a01b031681565b6101876103053660046109ac565b6001600160a01b031660009081526001602052604090205460ff161590565b6101db6103323660046109ac565b61076b565b6102a160405180604001604052806005815260200164302e302e3160d81b81525081565b63ffffffff81166000908152600460205260409020546001600160a01b0316806103985760405163c5723b5160e01b815260040160405180910390fd5b919050565b63ffffffff81166000908152600360205260409020546001600160a01b0316806103985760405163c5723b5160e01b815260040160405180910390fd5b6000546001600160a01b0316331461040557604051631dd2188d60e31b815260040160405180910390fd5b61040d6107eb565b565b3360009081526001602052604090205460ff1661043f57604051631dd2188d60e31b815260040160405180910390fd5b61044761083d565b63ffffffff8216600081815260046020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556003909352818420549151929491169290917fa581100f07cafa4eb033143a19cdbed52156fe4436d03be94e0c48578c989e889190a45050565b6000546001600160a01b031633146104e157604051631dd2188d60e31b815260040160405180910390fd5b60405163580aaaa560e11b8152600481018390526024015b60405180910390fd5b6000546001600160a01b0316331461052d57604051631dd2188d60e31b815260040160405180910390fd5b61040d610883565b6000546001600160a01b0316331461056057604051631dd2188d60e31b815260040160405180910390fd5b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b91015b60405180910390a150565b3360009081526001602052604081205460ff166105e857604051631dd2188d60e31b815260040160405180910390fd5b6105f061083d565b600580547fd48e7150fdf5f1006411f492aa977690efdd6975a173a47bede246a804c3785991906000906106299063ffffffff16610a15565b825463ffffffff8083166101009490940a8481029102199091161790925560405190815290925060200160405180910390a163ffffffff8116600090815260036020526040902080546001600160a01b0319166001600160a01b03939093169290921790915590565b3360009081526001602052604090205460ff166106c257604051631dd2188d60e31b815260040160405180910390fd5b6106ca61083d565b63ffffffff81166000908152600360205260408120546001600160a01b0316906106f38361035b565b63ffffffff8416600081815260036020908152604080832080546001600160a01b038088166001600160a01b0319928316811790935560049094528285208054909116905590519495509390861692917f241adab2bb3eec6f96b6352d15d764b61aadddf18ba42b4f65ceb68c7b2c4fae91a4505050565b6000546001600160a01b0316331461079657604051631dd2188d60e31b815260040160405180910390fd5b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527f16c61d7230298bd24fb91c350e2c76dd94d2e45ebc2c5216331577721b01935391016105ad565b6107f36108c0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60025460ff161561040d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104f9565b61088b61083d565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586108203390565b60025460ff1661040d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104f9565b803563ffffffff8116811461039857600080fd5b60006020828403121561092f57600080fd5b61093882610909565b9392505050565b80356001600160a01b038116811461039857600080fd5b6000806040838503121561096957600080fd5b61097283610909565b91506109806020840161093f565b90509250929050565b6000806040838503121561099c57600080fd5b823591506109806020840161093f565b6000602082840312156109be57600080fd5b6109388261093f565b600060208083528351808285015260005b818110156109f4578581018301518582016040015282016109d8565b506000604082860101526040601f19601f8301168501019250505092915050565b600063ffffffff808316818103610a3c57634e487b7160e01b600052601160045260246000fd5b600101939250505056fea26469706673582212202c0fc4d21a2aceedd2887d7dca5887429b66a859e283ae9576dfad4c0bae65bb64736f6c6343000811003300000000000000000000000011fbbcf6e33913f22d4763731188df806e7bc8b1
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c80638dee1900116100ad578063d63a8e1111610071578063d63a8e11146102c1578063f77c4791146102e4578063fc9d96ba146102f7578063ff9913e814610324578063ffa1ad741461033757600080fd5b80638dee1900146102165780639c52a7f11461023f5780639ed9331814610252578063a3f4df7e1461027a578063a6907def146102ae57600080fd5b80633f4ba83a116100f45780633f4ba83a146101d35780635c975abb146101dd57806362d5da66146101e85780637238695e146101fb5780638456cb591461020e57600080fd5b8063123f62af1461012657806313c369ed14610156578063180dc3181461019757806323b7ec3b146101c0575b600080fd5b61013961013436600461091d565b61035b565b6040516001600160a01b0390911681526020015b60405180910390f35b61018761016436600461091d565b63ffffffff166000908152600360205260409020546001600160a01b0316151590565b604051901515815260200161014d565b6101396101a536600461091d565b6003602052600090815260409020546001600160a01b031681565b6101396101ce36600461091d565b61039d565b6101db6103da565b005b60025460ff16610187565b6101db6101f6366004610956565b61040f565b6101db610209366004610989565b6104b6565b6101db610502565b61013961022436600461091d565b6004602052600090815260409020546001600160a01b031681565b6101db61024d3660046109ac565b610535565b6102656102603660046109ac565b6105b8565b60405163ffffffff909116815260200161014d565b6102a16040518060400160405280600881526020016750726f6a6563747360c01b81525081565b60405161014d91906109c7565b6101db6102bc36600461091d565b610692565b6101876102cf3660046109ac565b60016020526000908152604090205460ff1681565b600054610139906001600160a01b031681565b6101876103053660046109ac565b6001600160a01b031660009081526001602052604090205460ff161590565b6101db6103323660046109ac565b61076b565b6102a160405180604001604052806005815260200164302e302e3160d81b81525081565b63ffffffff81166000908152600460205260409020546001600160a01b0316806103985760405163c5723b5160e01b815260040160405180910390fd5b919050565b63ffffffff81166000908152600360205260409020546001600160a01b0316806103985760405163c5723b5160e01b815260040160405180910390fd5b6000546001600160a01b0316331461040557604051631dd2188d60e31b815260040160405180910390fd5b61040d6107eb565b565b3360009081526001602052604090205460ff1661043f57604051631dd2188d60e31b815260040160405180910390fd5b61044761083d565b63ffffffff8216600081815260046020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556003909352818420549151929491169290917fa581100f07cafa4eb033143a19cdbed52156fe4436d03be94e0c48578c989e889190a45050565b6000546001600160a01b031633146104e157604051631dd2188d60e31b815260040160405180910390fd5b60405163580aaaa560e11b8152600481018390526024015b60405180910390fd5b6000546001600160a01b0316331461052d57604051631dd2188d60e31b815260040160405180910390fd5b61040d610883565b6000546001600160a01b0316331461056057604051631dd2188d60e31b815260040160405180910390fd5b6001600160a01b038116600081815260016020908152604091829020805460ff1916905590519182527f184450df2e323acec0ed3b5c7531b81f9b4cdef7914dfd4c0a4317416bb5251b91015b60405180910390a150565b3360009081526001602052604081205460ff166105e857604051631dd2188d60e31b815260040160405180910390fd5b6105f061083d565b600580547fd48e7150fdf5f1006411f492aa977690efdd6975a173a47bede246a804c3785991906000906106299063ffffffff16610a15565b825463ffffffff8083166101009490940a8481029102199091161790925560405190815290925060200160405180910390a163ffffffff8116600090815260036020526040902080546001600160a01b0319166001600160a01b03939093169290921790915590565b3360009081526001602052604090205460ff166106c257604051631dd2188d60e31b815260040160405180910390fd5b6106ca61083d565b63ffffffff81166000908152600360205260408120546001600160a01b0316906106f38361035b565b63ffffffff8416600081815260036020908152604080832080546001600160a01b038088166001600160a01b0319928316811790935560049094528285208054909116905590519495509390861692917f241adab2bb3eec6f96b6352d15d764b61aadddf18ba42b4f65ceb68c7b2c4fae91a4505050565b6000546001600160a01b0316331461079657604051631dd2188d60e31b815260040160405180910390fd5b6001600160a01b038116600081815260016020818152604092839020805460ff191690921790915590519182527f16c61d7230298bd24fb91c350e2c76dd94d2e45ebc2c5216331577721b01935391016105ad565b6107f36108c0565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60025460ff161561040d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104f9565b61088b61083d565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586108203390565b60025460ff1661040d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104f9565b803563ffffffff8116811461039857600080fd5b60006020828403121561092f57600080fd5b61093882610909565b9392505050565b80356001600160a01b038116811461039857600080fd5b6000806040838503121561096957600080fd5b61097283610909565b91506109806020840161093f565b90509250929050565b6000806040838503121561099c57600080fd5b823591506109806020840161093f565b6000602082840312156109be57600080fd5b6109388261093f565b600060208083528351808285015260005b818110156109f4578581018301518582016040015282016109d8565b506000604082860101526040601f19601f8301168501019250505092915050565b600063ffffffff808316818103610a3c57634e487b7160e01b600052601160045260246000fd5b600101939250505056fea26469706673582212202c0fc4d21a2aceedd2887d7dca5887429b66a859e283ae9576dfad4c0bae65bb64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000011fbBCF6e33913F22D4763731188Df806e7Bc8B1
-----Decoded View---------------
Arg [0] : _controller (address): 0x11fbBCF6e33913F22D4763731188Df806e7Bc8B1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000011fbBCF6e33913F22D4763731188Df806e7Bc8B1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.