Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,955 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Retire | 20321040 | 8 days ago | IN | 0 ETH | 0.00031016 | ||||
Accept Job | 20262105 | 16 days ago | IN | 0 ETH | 0.00015856 | ||||
Hire And Authori... | 20262102 | 16 days ago | IN | 0.00608 ETH | 0.00046679 | ||||
Accept Job | 19846163 | 74 days ago | IN | 0 ETH | 0.00027144 | ||||
Hire And Authori... | 19846162 | 74 days ago | IN | 0.005 ETH | 0.00071708 | ||||
Retire | 19669184 | 99 days ago | IN | 0 ETH | 0.00101398 | ||||
Hire And Authori... | 19400618 | 137 days ago | IN | 0.02 ETH | 0.00796019 | ||||
Retire | 19248933 | 158 days ago | IN | 0 ETH | 0.00097656 | ||||
Hire And Authori... | 19240942 | 159 days ago | IN | 0.001 ETH | 0.00541689 | ||||
Accept Job | 19026627 | 189 days ago | IN | 0 ETH | 0.00198233 | ||||
Hire And Authori... | 19026622 | 189 days ago | IN | 0.001 ETH | 0.0037353 | ||||
Accept Job | 18314897 | 289 days ago | IN | 0 ETH | 0.0005332 | ||||
Hire And Authori... | 18314896 | 289 days ago | IN | 0.1 ETH | 0.00141819 | ||||
Retire | 17756405 | 367 days ago | IN | 0 ETH | 0.00067702 | ||||
Retire | 17428788 | 413 days ago | IN | 0 ETH | 0.00062502 | ||||
Accept Job | 16792347 | 503 days ago | IN | 0 ETH | 0.00221203 | ||||
Hire And Authori... | 16792345 | 503 days ago | IN | 0.01 ETH | 0.00583727 | ||||
Retire | 16792270 | 503 days ago | IN | 0 ETH | 0.00125494 | ||||
Accept Job | 16752259 | 508 days ago | IN | 0 ETH | 0.00093994 | ||||
Hire And Authori... | 16752257 | 508 days ago | IN | 0.235 ETH | 0.00252882 | ||||
Retire | 16752138 | 508 days ago | IN | 0 ETH | 0.00059479 | ||||
Retire | 16548224 | 537 days ago | IN | 0 ETH | 0.00064955 | ||||
Retire | 16431512 | 553 days ago | IN | 0 ETH | 0.00054414 | ||||
Accept Job | 16278681 | 575 days ago | IN | 0 ETH | 0.00067374 | ||||
Retire | 16046007 | 607 days ago | IN | 0 ETH | 0.00033263 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20262102 | 16 days ago | 0.00608 ETH | ||||
19846162 | 74 days ago | 0.005 ETH | ||||
19400618 | 137 days ago | 0.02 ETH | ||||
19240942 | 159 days ago | 0.001 ETH | ||||
19026622 | 189 days ago | 0.001 ETH | ||||
18314896 | 289 days ago | 0.1 ETH | ||||
16792345 | 503 days ago | 0.01 ETH | ||||
16752257 | 508 days ago | 0.235 ETH | ||||
16278679 | 575 days ago | 0.01 ETH | ||||
16278679 | 575 days ago | 0.01 ETH | ||||
16278662 | 575 days ago | 0.001 ETH | ||||
16278662 | 575 days ago | 0.001 ETH | ||||
15961198 | 619 days ago | 0.01 ETH | ||||
15960872 | 619 days ago | 0.001 ETH | ||||
15739596 | 650 days ago | 0.02 ETH | ||||
15739596 | 650 days ago | 0.02 ETH | ||||
15739588 | 650 days ago | 0.001 ETH | ||||
15739588 | 650 days ago | 0.001 ETH | ||||
15412762 | 698 days ago | 0.001 ETH | ||||
15412762 | 698 days ago | 0.001 ETH | ||||
15412759 | 698 days ago | 0.001 ETH | ||||
15412759 | 698 days ago | 0.001 ETH | ||||
15067518 | 752 days ago | 0.001 ETH | ||||
14987621 | 767 days ago | 0.03 ETH | ||||
14891555 | 783 days ago | 0.6 ETH |
Loading...
Loading
Contract Name:
WorkerManagerAuthManagerImpl
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity Standard Json-Input format)
// Copyright 2020 Cartesi Pte. Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); you may not use // this file except in compliance with the License. You may obtain a copy of the // License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. /// @title WorkerManagerAuthManagerImpl /// @author Danilo Tuler pragma solidity ^0.7.0; import "./WorkerManager.sol"; import "./WorkerAuthManager.sol"; contract WorkerManagerAuthManagerImpl is WorkerManager, WorkerAuthManager { /// @dev user can only hire a worker if he sends more than minimum value uint256 constant MINIMUM_FUNDING = 0.001 ether; /// @dev transfers bigger than maximum value should be done directly uint256 constant MAXIMUM_FUNDING = 3 ether; /// @notice A worker can be in 4 different states, starting from Available enum WorkerState {Available, Pending, Owned, Retired} /// @dev mapping from worker to its user mapping(address => address payable) private userOf; /// @dev mapping from worker to its internal state mapping(address => WorkerState) private stateOf; /// @dev permissions keyed by hash(user, worker, dapp) mapping(bytes32 => bool) private permissions; function isAvailable(address workerAddress) public override view returns (bool) { return stateOf[workerAddress] == WorkerState.Available; } function isPending(address workerAddress) public override view returns (bool) { return stateOf[workerAddress] == WorkerState.Pending; } function getOwner(address _workerAddress) public override(WorkerManager, WorkerAuthManager) view returns (address) { return stateOf[_workerAddress] == WorkerState.Owned ? userOf[_workerAddress] : address(0); } function getUser(address _workerAddress) public override view returns (address) { return userOf[_workerAddress]; } function isOwned(address _workerAddress) public override view returns (bool) { return stateOf[_workerAddress] == WorkerState.Owned; } function hire(address payable _workerAddress) public override payable { require(isAvailable(_workerAddress), "worker is not available"); require(_workerAddress != address(0), "worker address can not be 0x0"); require(msg.value >= MINIMUM_FUNDING, "funding below minimum"); require(msg.value <= MAXIMUM_FUNDING, "funding above maximum"); // set owner userOf[_workerAddress] = msg.sender; // change state stateOf[_workerAddress] = WorkerState.Pending; // transfer ether to worker _workerAddress.transfer(msg.value); // emit event emit JobOffer(_workerAddress, msg.sender); } function acceptJob() public override { require( stateOf[msg.sender] == WorkerState.Pending, "worker not is not in pending state" ); // change state stateOf[msg.sender] = WorkerState.Owned; // from now on getOwner will return the user // emit event emit JobAccepted(msg.sender, userOf[msg.sender]); } function rejectJob() public override payable { require( userOf[msg.sender] != address(0), "worker does not have a job offer" ); address payable owner = userOf[msg.sender]; // reset hirer back to null userOf[msg.sender] = address(0); // change state stateOf[msg.sender] = WorkerState.Available; // return the money owner.transfer(msg.value); // emit event emit JobRejected(msg.sender, userOf[msg.sender]); } function cancelHire(address _workerAddress) public override { require( userOf[_workerAddress] == msg.sender, "only hirer can cancel the offer" ); // change state stateOf[_workerAddress] = WorkerState.Retired; // emit event emit JobRejected(_workerAddress, msg.sender); } function retire(address payable _workerAddress) public override { require( stateOf[_workerAddress] == WorkerState.Owned, "worker not owned" ); require( userOf[_workerAddress] == msg.sender, "only owner can retire worker" ); // change state stateOf[_workerAddress] = WorkerState.Retired; // emit event emit Retired(_workerAddress, msg.sender); } function isRetired(address _workerAddress) public override view returns (bool) { return stateOf[_workerAddress] == WorkerState.Retired; } modifier onlyByUser(address _workerAddress) { require( getUser(_workerAddress) == msg.sender, "worker not hired by sender" ); _; } function getAuthorizationKey( address _user, address _worker, address _dapp ) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_user, _worker, _dapp)); } function authorize(address _workerAddress, address _dappAddress) public override onlyByUser(_workerAddress) { bytes32 key = getAuthorizationKey( msg.sender, _workerAddress, _dappAddress ); require(permissions[key] == false, "dapp already authorized"); // record authorization from that user permissions[key] = true; // emit event emit Authorization(msg.sender, _workerAddress, _dappAddress); } function deauthorize(address _workerAddress, address _dappAddress) public override onlyByUser(_workerAddress) { bytes32 key = getAuthorizationKey( msg.sender, _workerAddress, _dappAddress ); require(permissions[key] == true, "dapp not authorized"); // record deauthorization from that user permissions[key] = false; // emit event emit Deauthorization(msg.sender, _workerAddress, _dappAddress); } function isAuthorized(address _workerAddress, address _dappAddress) public override view returns (bool) { return permissions[getAuthorizationKey( getOwner(_workerAddress), _workerAddress, _dappAddress )]; } function hireAndAuthorize( address payable _workerAddress, address _dappAddress ) public payable { hire(_workerAddress); authorize(_workerAddress, _dappAddress); } }
// Copyright 2020 Cartesi Pte. Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); you may not use // this file except in compliance with the License. You may obtain a copy of the // License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. /// @title WorkerAuthManager /// @author Danilo Tuler pragma solidity ^0.7.0; interface WorkerAuthManager { /// @notice Gives worker permission to act on a DApp /// @param _workerAddress address of the worker node to given permission /// @param _dappAddress address of the dapp that permission will be given to function authorize(address _workerAddress, address _dappAddress) external; /// @notice Removes worker's permission to act on a DApp /// @param _workerAddress address of the proxy that will lose permission /// @param _dappAddresses addresses of dapps that will lose permission function deauthorize(address _workerAddress, address _dappAddresses) external; /// @notice Returns is the dapp is authorized to be called by that worker /// @param _workerAddress address of the worker /// @param _dappAddress address of the DApp function isAuthorized(address _workerAddress, address _dappAddress) external view returns (bool); /// @notice Get the owner of the worker node /// @param workerAddress address of the worker node function getOwner(address workerAddress) external view returns (address); /// @notice A DApp has been authorized by a user for a worker event Authorization( address indexed user, address indexed worker, address indexed dapp ); /// @notice A DApp has been deauthorized by a user for a worker event Deauthorization( address indexed user, address indexed worker, address indexed dapp ); }
// Copyright 2010 Cartesi Pte. Ltd. // SPDX-License-Identifier: Apache-2.0 // Licensed under the Apache License, Version 2.0 (the "License"); you may not use // this file except in compliance with the License. You may obtain a copy of the // License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software distributed // under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR // CONDITIONS OF ANY KIND, either express or implied. See the License for the // specific language governing permissions and limitations under the License. /// @title WorkerManager /// @author Danilo Tuler pragma solidity ^0.7.0; interface WorkerManager { /// @notice Returns true if worker node is available /// @param workerAddress address of the worker node function isAvailable(address workerAddress) external view returns (bool); /// @notice Returns true if worker node is pending /// @param workerAddress address of the worker node function isPending(address workerAddress) external view returns (bool); /// @notice Get the owner of the worker node /// @param workerAddress address of the worker node function getOwner(address workerAddress) external view returns (address); /// @notice Get the user of the worker node, which may not be the owner yet, or how was the previous owner of a retired node function getUser(address workerAddress) external view returns (address); /// @notice Returns true if worker node is owned by some user function isOwned(address workerAddress) external view returns (bool); /// @notice Asks the worker to work for the sender. Sender needs to pay something. /// @param workerAddress address of the worker function hire(address payable workerAddress) external payable; /// @notice Called by the worker to accept the job function acceptJob() external; /// @notice Called by the worker to reject a job offer function rejectJob() external payable; /// @notice Called by the user to cancel a job offer /// @param workerAddress address of the worker node function cancelHire(address workerAddress) external; /// @notice Called by the user to retire his worker. /// @param workerAddress address of the worker to be retired /// @dev this also removes all authorizations in place function retire(address payable workerAddress) external; /// @notice Returns true if worker node was retired by its owner function isRetired(address workerAddress) external view returns (bool); /// @notice Events signalling every state transition event JobOffer(address indexed worker, address indexed user); event JobAccepted(address indexed worker, address indexed user); event JobRejected(address indexed worker, address indexed user); event Retired(address indexed worker, address indexed user); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"worker","type":"address"},{"indexed":true,"internalType":"address","name":"dapp","type":"address"}],"name":"Authorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"worker","type":"address"},{"indexed":true,"internalType":"address","name":"dapp","type":"address"}],"name":"Deauthorization","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"worker","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"JobAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"worker","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"JobOffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"worker","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"JobRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"worker","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"Retired","type":"event"},{"inputs":[],"name":"acceptJob","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"},{"internalType":"address","name":"_dappAddress","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"}],"name":"cancelHire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"},{"internalType":"address","name":"_dappAddress","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"}],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"}],"name":"getUser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_workerAddress","type":"address"}],"name":"hire","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_workerAddress","type":"address"},{"internalType":"address","name":"_dappAddress","type":"address"}],"name":"hireAndAuthorize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"},{"internalType":"address","name":"_dappAddress","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"workerAddress","type":"address"}],"name":"isAvailable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"}],"name":"isOwned","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"workerAddress","type":"address"}],"name":"isPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_workerAddress","type":"address"}],"name":"isRetired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rejectJob","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_workerAddress","type":"address"}],"name":"retire","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610da7806100206000396000f3fe6080604052600436106100e85760003560e01c80639b789b7e1161008a578063d9d6bd8611610059578063d9d6bd861461031f578063dbd9655414610345578063f4dc754b14610373578063fa544161146103a6576100e8565b80639b789b7e146102715780639e6371ba14610286578063a00745b6146102b9578063b64b3bed146102ec576100e8565b806365e4ad9e116100c657806365e4ad9e146101795780636d3c6275146101b45780636d892f7e146101e75780636f77926b14610222576100e8565b806303d6e81e146100ed5780632896f60b146100f75780632bef45951461013e575b600080fd5b6100f56103d9565b005b34801561010357600080fd5b5061012a6004803603602081101561011a57600080fd5b50356001600160a01b03166104f1565b604080519115158252519081900360200190f35b34801561014a57600080fd5b506100f56004803603604081101561016157600080fd5b506001600160a01b0381358116916020013516610523565b34801561018557600080fd5b5061012a6004803603604081101561019c57600080fd5b506001600160a01b0381358116916020013516610653565b3480156101c057600080fd5b5061012a600480360360208110156101d757600080fd5b50356001600160a01b0316610687565b3480156101f357600080fd5b506100f56004803603604081101561020a57600080fd5b506001600160a01b0381358116916020013516610690565b34801561022e57600080fd5b506102556004803603602081101561024557600080fd5b50356001600160a01b03166107b7565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b506100f56107d5565b34801561029257600080fd5b506100f5600480360360208110156102a957600080fd5b50356001600160a01b031661088a565b3480156102c557600080fd5b5061012a600480360360208110156102dc57600080fd5b50356001600160a01b03166109b4565b3480156102f857600080fd5b506100f56004803603602081101561030f57600080fd5b50356001600160a01b03166109bd565b6100f56004803603602081101561033557600080fd5b50356001600160a01b0316610a79565b6100f56004803603604081101561035b57600080fd5b506001600160a01b0381358116916020013516610c85565b34801561037f57600080fd5b5061012a6004803603602081101561039657600080fd5b50356001600160a01b0316610c9c565b3480156103b257600080fd5b50610255600480360360208110156103c957600080fd5b50356001600160a01b0316610ca5565b336000908152602081905260409020546001600160a01b0316610443576040805162461bcd60e51b815260206004820181905260248201527f776f726b657220646f6573206e6f7420686176652061206a6f62206f66666572604482015290519081900360640190fd5b3360009081526020818152604080832080546001600160a01b031981169091556001909252808320805460ff19169055516001600160a01b039091169182913480156108fc0292909190818181858888f193505050501580156104aa573d6000803e3d6000fd5b50336000818152602081905260408082205490516001600160a01b0390911692917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b6000805b6001600160a01b03831660009081526001602052604090205460ff16600381111561051c57fe5b1492915050565b813361052e826107b7565b6001600160a01b031614610589576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610596338585610cfe565b60008181526002602052604090205490915060ff16156105fd576040805162461bcd60e51b815260206004820152601760248201527f6461707020616c726561647920617574686f72697a6564000000000000000000604482015290519081900360640190fd5b600081815260026020526040808220805460ff19166001179055516001600160a01b03808616929087169133917fde756a416a233cdb16c23a1fa5dcb3113164968df8607e0a4eeca25974b96e0391a450505050565b60006002600061066c61066586610ca5565b8686610cfe565b815260208101919091526040016000205460ff169392505050565b600060036104f5565b813361069b826107b7565b6001600160a01b0316146106f6576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610703338585610cfe565b60008181526002602052604090205490915060ff161515600114610764576040805162461bcd60e51b815260206004820152601360248201527219185c1c081b9bdd08185d5d1a1bdc9a5e9959606a1b604482015290519081900360640190fd5b600081815260026020526040808220805460ff19169055516001600160a01b03808616929087169133917f4d2275ddb8a6d9c36c95476c2eaf9746c1785b4ab76a99719fd647b36da46cee91a450505050565b6001600160a01b039081166000908152602081905260409020541690565b60013360009081526001602052604090205460ff1660038111156107f557fe5b146108315760405162461bcd60e51b8152600401808060200182810382526022815260200180610d506022913960400191505060405180910390fd5b336000818152600160209081526040808320805460ff19166002179055908290528082205490516001600160a01b0390911692917f0cfa12ab8ee8dc6f9b68938d5e764dafed737d43dc5ec8443abf81e645276eb691a3565b60026001600160a01b03821660009081526001602052604090205460ff1660038111156108b357fe5b146108f8576040805162461bcd60e51b815260206004820152601060248201526f1ddbdc9ad95c881b9bdd081bdddb995960821b604482015290519081900360640190fd5b6001600160a01b03818116600090815260208190526040902054163314610966576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e65722063616e2072657469726520776f726b657200000000604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917f657b373e1262c26d1f1a83e8949f0af9067fe48026b308e47eec5ef6b40ff25d91a350565b600060016104f5565b6001600160a01b03818116600090815260208190526040902054163314610a2b576040805162461bcd60e51b815260206004820152601f60248201527f6f6e6c792068697265722063616e2063616e63656c20746865206f6666657200604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b610a82816104f1565b610ad3576040805162461bcd60e51b815260206004820152601760248201527f776f726b6572206973206e6f7420617661696c61626c65000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610b2e576040805162461bcd60e51b815260206004820152601d60248201527f776f726b657220616464726573732063616e206e6f7420626520307830000000604482015290519081900360640190fd5b66038d7ea4c68000341015610b82576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672062656c6f77206d696e696d756d60581b604482015290519081900360640190fd5b6729a2241af62c0000341115610bd7576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672061626f7665206d6178696d756d60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526020818152604080832080546001600160a01b03191633179055600191829052909120805460ff1916828002179055506040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610c4b573d6000803e3d6000fd5b5060405133906001600160a01b038316907f2e0aa97ef0e6f4f76319861c90e91beec7a7a44a698cab856dfc1985a0c588f090600090a350565b610c8e82610a79565b610c988282610523565b5050565b600060026104f5565b600060026001600160a01b03831660009081526001602052604090205460ff166003811115610cd057fe5b14610cdc576000610cf8565b6001600160a01b03808316600090815260208190526040902054165b92915050565b604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b811660348301529290941b90911660488401528051603c818503018152605c909301905281519101209056fe776f726b6572206e6f74206973206e6f7420696e2070656e64696e67207374617465a26469706673582212208c53bf1eedc7351032f43e555009382924e5be081917cbd30b4284e0f572d9bc64736f6c63430007040033
Deployed Bytecode
0x6080604052600436106100e85760003560e01c80639b789b7e1161008a578063d9d6bd8611610059578063d9d6bd861461031f578063dbd9655414610345578063f4dc754b14610373578063fa544161146103a6576100e8565b80639b789b7e146102715780639e6371ba14610286578063a00745b6146102b9578063b64b3bed146102ec576100e8565b806365e4ad9e116100c657806365e4ad9e146101795780636d3c6275146101b45780636d892f7e146101e75780636f77926b14610222576100e8565b806303d6e81e146100ed5780632896f60b146100f75780632bef45951461013e575b600080fd5b6100f56103d9565b005b34801561010357600080fd5b5061012a6004803603602081101561011a57600080fd5b50356001600160a01b03166104f1565b604080519115158252519081900360200190f35b34801561014a57600080fd5b506100f56004803603604081101561016157600080fd5b506001600160a01b0381358116916020013516610523565b34801561018557600080fd5b5061012a6004803603604081101561019c57600080fd5b506001600160a01b0381358116916020013516610653565b3480156101c057600080fd5b5061012a600480360360208110156101d757600080fd5b50356001600160a01b0316610687565b3480156101f357600080fd5b506100f56004803603604081101561020a57600080fd5b506001600160a01b0381358116916020013516610690565b34801561022e57600080fd5b506102556004803603602081101561024557600080fd5b50356001600160a01b03166107b7565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b506100f56107d5565b34801561029257600080fd5b506100f5600480360360208110156102a957600080fd5b50356001600160a01b031661088a565b3480156102c557600080fd5b5061012a600480360360208110156102dc57600080fd5b50356001600160a01b03166109b4565b3480156102f857600080fd5b506100f56004803603602081101561030f57600080fd5b50356001600160a01b03166109bd565b6100f56004803603602081101561033557600080fd5b50356001600160a01b0316610a79565b6100f56004803603604081101561035b57600080fd5b506001600160a01b0381358116916020013516610c85565b34801561037f57600080fd5b5061012a6004803603602081101561039657600080fd5b50356001600160a01b0316610c9c565b3480156103b257600080fd5b50610255600480360360208110156103c957600080fd5b50356001600160a01b0316610ca5565b336000908152602081905260409020546001600160a01b0316610443576040805162461bcd60e51b815260206004820181905260248201527f776f726b657220646f6573206e6f7420686176652061206a6f62206f66666572604482015290519081900360640190fd5b3360009081526020818152604080832080546001600160a01b031981169091556001909252808320805460ff19169055516001600160a01b039091169182913480156108fc0292909190818181858888f193505050501580156104aa573d6000803e3d6000fd5b50336000818152602081905260408082205490516001600160a01b0390911692917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b6000805b6001600160a01b03831660009081526001602052604090205460ff16600381111561051c57fe5b1492915050565b813361052e826107b7565b6001600160a01b031614610589576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610596338585610cfe565b60008181526002602052604090205490915060ff16156105fd576040805162461bcd60e51b815260206004820152601760248201527f6461707020616c726561647920617574686f72697a6564000000000000000000604482015290519081900360640190fd5b600081815260026020526040808220805460ff19166001179055516001600160a01b03808616929087169133917fde756a416a233cdb16c23a1fa5dcb3113164968df8607e0a4eeca25974b96e0391a450505050565b60006002600061066c61066586610ca5565b8686610cfe565b815260208101919091526040016000205460ff169392505050565b600060036104f5565b813361069b826107b7565b6001600160a01b0316146106f6576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610703338585610cfe565b60008181526002602052604090205490915060ff161515600114610764576040805162461bcd60e51b815260206004820152601360248201527219185c1c081b9bdd08185d5d1a1bdc9a5e9959606a1b604482015290519081900360640190fd5b600081815260026020526040808220805460ff19169055516001600160a01b03808616929087169133917f4d2275ddb8a6d9c36c95476c2eaf9746c1785b4ab76a99719fd647b36da46cee91a450505050565b6001600160a01b039081166000908152602081905260409020541690565b60013360009081526001602052604090205460ff1660038111156107f557fe5b146108315760405162461bcd60e51b8152600401808060200182810382526022815260200180610d506022913960400191505060405180910390fd5b336000818152600160209081526040808320805460ff19166002179055908290528082205490516001600160a01b0390911692917f0cfa12ab8ee8dc6f9b68938d5e764dafed737d43dc5ec8443abf81e645276eb691a3565b60026001600160a01b03821660009081526001602052604090205460ff1660038111156108b357fe5b146108f8576040805162461bcd60e51b815260206004820152601060248201526f1ddbdc9ad95c881b9bdd081bdddb995960821b604482015290519081900360640190fd5b6001600160a01b03818116600090815260208190526040902054163314610966576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e65722063616e2072657469726520776f726b657200000000604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917f657b373e1262c26d1f1a83e8949f0af9067fe48026b308e47eec5ef6b40ff25d91a350565b600060016104f5565b6001600160a01b03818116600090815260208190526040902054163314610a2b576040805162461bcd60e51b815260206004820152601f60248201527f6f6e6c792068697265722063616e2063616e63656c20746865206f6666657200604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b610a82816104f1565b610ad3576040805162461bcd60e51b815260206004820152601760248201527f776f726b6572206973206e6f7420617661696c61626c65000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610b2e576040805162461bcd60e51b815260206004820152601d60248201527f776f726b657220616464726573732063616e206e6f7420626520307830000000604482015290519081900360640190fd5b66038d7ea4c68000341015610b82576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672062656c6f77206d696e696d756d60581b604482015290519081900360640190fd5b6729a2241af62c0000341115610bd7576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672061626f7665206d6178696d756d60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526020818152604080832080546001600160a01b03191633179055600191829052909120805460ff1916828002179055506040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610c4b573d6000803e3d6000fd5b5060405133906001600160a01b038316907f2e0aa97ef0e6f4f76319861c90e91beec7a7a44a698cab856dfc1985a0c588f090600090a350565b610c8e82610a79565b610c988282610523565b5050565b600060026104f5565b600060026001600160a01b03831660009081526001602052604090205460ff166003811115610cd057fe5b14610cdc576000610cf8565b6001600160a01b03808316600090815260208190526040902054165b92915050565b604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b811660348301529290941b90911660488401528051603c818503018152605c909301905281519101209056fe776f726b6572206e6f74206973206e6f7420696e2070656e64696e67207374617465a26469706673582212208c53bf1eedc7351032f43e555009382924e5be081917cbd30b4284e0f572d9bc64736f6c63430007040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.