ETH Price: $3,326.18 (-4.50%)
Gas: 3 Gwei

Contract

0x832D9f06970ddAc7BA49Be5a2cCad8f89Df74C13
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Retire203210402024-07-16 19:03:358 days ago1721156615IN
0x832D9f06...89Df74C13
0 ETH0.0003101610.07895754
Accept Job202621052024-07-08 13:31:2316 days ago1720445483IN
0x832D9f06...89Df74C13
0 ETH0.000158565.24076211
Hire And Authori...202621022024-07-08 13:30:4716 days ago1720445447IN
0x832D9f06...89Df74C13
0.00608 ETH0.000466793.65487374
Accept Job198461632024-05-11 10:21:4774 days ago1715422907IN
0x832D9f06...89Df74C13
0 ETH0.000271448.9712186
Hire And Authori...198461622024-05-11 10:21:3574 days ago1715422895IN
0x832D9f06...89Df74C13
0.005 ETH0.000717085.61510769
Retire196691842024-04-16 16:18:3599 days ago1713284315IN
0x832D9f06...89Df74C13
0 ETH0.0010139832.94938643
Hire And Authori...194006182024-03-09 22:46:59137 days ago1710024419IN
0x832D9f06...89Df74C13
0.02 ETH0.0079601962.33218435
Retire192489332024-02-17 17:02:35158 days ago1708189355IN
0x832D9f06...89Df74C13
0 ETH0.0009765631.73344608
Hire And Authori...192409422024-02-16 14:06:47159 days ago1708092407IN
0x832D9f06...89Df74C13
0.001 ETH0.0054168942.4129593
Accept Job190266272024-01-17 12:31:47189 days ago1705494707IN
0x832D9f06...89Df74C13
0 ETH0.0019823365.51647031
Hire And Authori...190266222024-01-17 12:30:47189 days ago1705494647IN
0x832D9f06...89Df74C13
0.001 ETH0.003735336.36465331
Accept Job183148972023-10-09 19:07:59289 days ago1696878479IN
0x832D9f06...89Df74C13
0 ETH0.000533217.62256275
Hire And Authori...183148962023-10-09 19:07:47289 days ago1696878467IN
0x832D9f06...89Df74C13
0.1 ETH0.0014181911.10410172
Retire177564052023-07-23 14:27:23367 days ago1690122443IN
0x832D9f06...89Df74C13
0 ETH0.0006770222
Retire174287882023-06-07 13:27:35413 days ago1686144455IN
0x832D9f06...89Df74C13
0 ETH0.0006250220.31026042
Accept Job167923472023-03-09 18:11:59503 days ago1678385519IN
0x832D9f06...89Df74C13
0 ETH0.0022120373.10836164
Hire And Authori...167923452023-03-09 18:11:35503 days ago1678385495IN
0x832D9f06...89Df74C13
0.01 ETH0.0058372745.70436603
Retire167922702023-03-09 17:56:11503 days ago1678384571IN
0x832D9f06...89Df74C13
0 ETH0.0012549440.77937769
Accept Job167522592023-03-04 2:57:11508 days ago1677898631IN
0x832D9f06...89Df74C13
0 ETH0.0009399431.06521192
Hire And Authori...167522572023-03-04 2:56:47508 days ago1677898607IN
0x832D9f06...89Df74C13
0.235 ETH0.0025288219.80008249
Retire167521382023-03-04 2:32:35508 days ago1677897155IN
0x832D9f06...89Df74C13
0 ETH0.0005947919.32785062
Retire165482242023-02-03 12:22:23537 days ago1675426943IN
0x832D9f06...89Df74C13
0 ETH0.0006495521.10737955
Retire164315122023-01-18 5:10:59553 days ago1674018659IN
0x832D9f06...89Df74C13
0 ETH0.0005441417.68887082
Accept Job162786812022-12-27 21:10:35575 days ago1672175435IN
0x832D9f06...89Df74C13
0 ETH0.0006737422.26753819
Retire160460072022-11-25 9:08:47607 days ago1669367327IN
0x832D9f06...89Df74C13
0 ETH0.0003326310.80885849
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
202621022024-07-08 13:30:4716 days ago1720445447
0x832D9f06...89Df74C13
0.00608 ETH
198461622024-05-11 10:21:3574 days ago1715422895
0x832D9f06...89Df74C13
0.005 ETH
194006182024-03-09 22:46:59137 days ago1710024419
0x832D9f06...89Df74C13
0.02 ETH
192409422024-02-16 14:06:47159 days ago1708092407
0x832D9f06...89Df74C13
0.001 ETH
190266222024-01-17 12:30:47189 days ago1705494647
0x832D9f06...89Df74C13
0.001 ETH
183148962023-10-09 19:07:47289 days ago1696878467
0x832D9f06...89Df74C13
0.1 ETH
167923452023-03-09 18:11:35503 days ago1678385495
0x832D9f06...89Df74C13
0.01 ETH
167522572023-03-04 2:56:47508 days ago1677898607
0x832D9f06...89Df74C13
0.235 ETH
162786792022-12-27 21:10:11575 days ago1672175411
0x832D9f06...89Df74C13
0.01 ETH
162786792022-12-27 21:10:11575 days ago1672175411
0x832D9f06...89Df74C13
0.01 ETH
162786622022-12-27 21:06:47575 days ago1672175207
0x832D9f06...89Df74C13
0.001 ETH
162786622022-12-27 21:06:47575 days ago1672175207
0x832D9f06...89Df74C13
0.001 ETH
159611982022-11-13 12:47:47619 days ago1668343667
0x832D9f06...89Df74C13
0.01 ETH
159608722022-11-13 11:42:11619 days ago1668339731
0x832D9f06...89Df74C13
0.001 ETH
157395962022-10-13 13:48:59650 days ago1665668939
0x832D9f06...89Df74C13
0.02 ETH
157395962022-10-13 13:48:59650 days ago1665668939
0x832D9f06...89Df74C13
0.02 ETH
157395882022-10-13 13:47:23650 days ago1665668843
0x832D9f06...89Df74C13
0.001 ETH
157395882022-10-13 13:47:23650 days ago1665668843
0x832D9f06...89Df74C13
0.001 ETH
154127622022-08-26 2:35:05698 days ago1661481305
0x832D9f06...89Df74C13
0.001 ETH
154127622022-08-26 2:35:05698 days ago1661481305
0x832D9f06...89Df74C13
0.001 ETH
154127592022-08-26 2:33:28698 days ago1661481208
0x832D9f06...89Df74C13
0.001 ETH
154127592022-08-26 2:33:28698 days ago1661481208
0x832D9f06...89Df74C13
0.001 ETH
150675182022-07-03 4:52:41752 days ago1656823961
0x832D9f06...89Df74C13
0.001 ETH
149876212022-06-18 23:18:45767 days ago1655594325
0x832D9f06...89Df74C13
0.03 ETH
148915552022-06-02 14:34:49783 days ago1654180489
0x832D9f06...89Df74C13
0.6 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
WorkerManagerAuthManagerImpl

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license
File 1 of 3 : WorkerManagerAuthManagerImpl.sol
// 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);
    }
}

File 2 of 3 : WorkerAuthManager.sol
// 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
    );
}

File 3 of 3 : WorkerManager.sol
// 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);
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"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"}]

608060405234801561001057600080fd5b50610da7806100206000396000f3fe6080604052600436106100e85760003560e01c80639b789b7e1161008a578063d9d6bd8611610059578063d9d6bd861461031f578063dbd9655414610345578063f4dc754b14610373578063fa544161146103a6576100e8565b80639b789b7e146102715780639e6371ba14610286578063a00745b6146102b9578063b64b3bed146102ec576100e8565b806365e4ad9e116100c657806365e4ad9e146101795780636d3c6275146101b45780636d892f7e146101e75780636f77926b14610222576100e8565b806303d6e81e146100ed5780632896f60b146100f75780632bef45951461013e575b600080fd5b6100f56103d9565b005b34801561010357600080fd5b5061012a6004803603602081101561011a57600080fd5b50356001600160a01b03166104f1565b604080519115158252519081900360200190f35b34801561014a57600080fd5b506100f56004803603604081101561016157600080fd5b506001600160a01b0381358116916020013516610523565b34801561018557600080fd5b5061012a6004803603604081101561019c57600080fd5b506001600160a01b0381358116916020013516610653565b3480156101c057600080fd5b5061012a600480360360208110156101d757600080fd5b50356001600160a01b0316610687565b3480156101f357600080fd5b506100f56004803603604081101561020a57600080fd5b506001600160a01b0381358116916020013516610690565b34801561022e57600080fd5b506102556004803603602081101561024557600080fd5b50356001600160a01b03166107b7565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b506100f56107d5565b34801561029257600080fd5b506100f5600480360360208110156102a957600080fd5b50356001600160a01b031661088a565b3480156102c557600080fd5b5061012a600480360360208110156102dc57600080fd5b50356001600160a01b03166109b4565b3480156102f857600080fd5b506100f56004803603602081101561030f57600080fd5b50356001600160a01b03166109bd565b6100f56004803603602081101561033557600080fd5b50356001600160a01b0316610a79565b6100f56004803603604081101561035b57600080fd5b506001600160a01b0381358116916020013516610c85565b34801561037f57600080fd5b5061012a6004803603602081101561039657600080fd5b50356001600160a01b0316610c9c565b3480156103b257600080fd5b50610255600480360360208110156103c957600080fd5b50356001600160a01b0316610ca5565b336000908152602081905260409020546001600160a01b0316610443576040805162461bcd60e51b815260206004820181905260248201527f776f726b657220646f6573206e6f7420686176652061206a6f62206f66666572604482015290519081900360640190fd5b3360009081526020818152604080832080546001600160a01b031981169091556001909252808320805460ff19169055516001600160a01b039091169182913480156108fc0292909190818181858888f193505050501580156104aa573d6000803e3d6000fd5b50336000818152602081905260408082205490516001600160a01b0390911692917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b6000805b6001600160a01b03831660009081526001602052604090205460ff16600381111561051c57fe5b1492915050565b813361052e826107b7565b6001600160a01b031614610589576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610596338585610cfe565b60008181526002602052604090205490915060ff16156105fd576040805162461bcd60e51b815260206004820152601760248201527f6461707020616c726561647920617574686f72697a6564000000000000000000604482015290519081900360640190fd5b600081815260026020526040808220805460ff19166001179055516001600160a01b03808616929087169133917fde756a416a233cdb16c23a1fa5dcb3113164968df8607e0a4eeca25974b96e0391a450505050565b60006002600061066c61066586610ca5565b8686610cfe565b815260208101919091526040016000205460ff169392505050565b600060036104f5565b813361069b826107b7565b6001600160a01b0316146106f6576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610703338585610cfe565b60008181526002602052604090205490915060ff161515600114610764576040805162461bcd60e51b815260206004820152601360248201527219185c1c081b9bdd08185d5d1a1bdc9a5e9959606a1b604482015290519081900360640190fd5b600081815260026020526040808220805460ff19169055516001600160a01b03808616929087169133917f4d2275ddb8a6d9c36c95476c2eaf9746c1785b4ab76a99719fd647b36da46cee91a450505050565b6001600160a01b039081166000908152602081905260409020541690565b60013360009081526001602052604090205460ff1660038111156107f557fe5b146108315760405162461bcd60e51b8152600401808060200182810382526022815260200180610d506022913960400191505060405180910390fd5b336000818152600160209081526040808320805460ff19166002179055908290528082205490516001600160a01b0390911692917f0cfa12ab8ee8dc6f9b68938d5e764dafed737d43dc5ec8443abf81e645276eb691a3565b60026001600160a01b03821660009081526001602052604090205460ff1660038111156108b357fe5b146108f8576040805162461bcd60e51b815260206004820152601060248201526f1ddbdc9ad95c881b9bdd081bdddb995960821b604482015290519081900360640190fd5b6001600160a01b03818116600090815260208190526040902054163314610966576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e65722063616e2072657469726520776f726b657200000000604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917f657b373e1262c26d1f1a83e8949f0af9067fe48026b308e47eec5ef6b40ff25d91a350565b600060016104f5565b6001600160a01b03818116600090815260208190526040902054163314610a2b576040805162461bcd60e51b815260206004820152601f60248201527f6f6e6c792068697265722063616e2063616e63656c20746865206f6666657200604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b610a82816104f1565b610ad3576040805162461bcd60e51b815260206004820152601760248201527f776f726b6572206973206e6f7420617661696c61626c65000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610b2e576040805162461bcd60e51b815260206004820152601d60248201527f776f726b657220616464726573732063616e206e6f7420626520307830000000604482015290519081900360640190fd5b66038d7ea4c68000341015610b82576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672062656c6f77206d696e696d756d60581b604482015290519081900360640190fd5b6729a2241af62c0000341115610bd7576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672061626f7665206d6178696d756d60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526020818152604080832080546001600160a01b03191633179055600191829052909120805460ff1916828002179055506040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610c4b573d6000803e3d6000fd5b5060405133906001600160a01b038316907f2e0aa97ef0e6f4f76319861c90e91beec7a7a44a698cab856dfc1985a0c588f090600090a350565b610c8e82610a79565b610c988282610523565b5050565b600060026104f5565b600060026001600160a01b03831660009081526001602052604090205460ff166003811115610cd057fe5b14610cdc576000610cf8565b6001600160a01b03808316600090815260208190526040902054165b92915050565b604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b811660348301529290941b90911660488401528051603c818503018152605c909301905281519101209056fe776f726b6572206e6f74206973206e6f7420696e2070656e64696e67207374617465a26469706673582212208c53bf1eedc7351032f43e555009382924e5be081917cbd30b4284e0f572d9bc64736f6c63430007040033

Deployed Bytecode

0x6080604052600436106100e85760003560e01c80639b789b7e1161008a578063d9d6bd8611610059578063d9d6bd861461031f578063dbd9655414610345578063f4dc754b14610373578063fa544161146103a6576100e8565b80639b789b7e146102715780639e6371ba14610286578063a00745b6146102b9578063b64b3bed146102ec576100e8565b806365e4ad9e116100c657806365e4ad9e146101795780636d3c6275146101b45780636d892f7e146101e75780636f77926b14610222576100e8565b806303d6e81e146100ed5780632896f60b146100f75780632bef45951461013e575b600080fd5b6100f56103d9565b005b34801561010357600080fd5b5061012a6004803603602081101561011a57600080fd5b50356001600160a01b03166104f1565b604080519115158252519081900360200190f35b34801561014a57600080fd5b506100f56004803603604081101561016157600080fd5b506001600160a01b0381358116916020013516610523565b34801561018557600080fd5b5061012a6004803603604081101561019c57600080fd5b506001600160a01b0381358116916020013516610653565b3480156101c057600080fd5b5061012a600480360360208110156101d757600080fd5b50356001600160a01b0316610687565b3480156101f357600080fd5b506100f56004803603604081101561020a57600080fd5b506001600160a01b0381358116916020013516610690565b34801561022e57600080fd5b506102556004803603602081101561024557600080fd5b50356001600160a01b03166107b7565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b506100f56107d5565b34801561029257600080fd5b506100f5600480360360208110156102a957600080fd5b50356001600160a01b031661088a565b3480156102c557600080fd5b5061012a600480360360208110156102dc57600080fd5b50356001600160a01b03166109b4565b3480156102f857600080fd5b506100f56004803603602081101561030f57600080fd5b50356001600160a01b03166109bd565b6100f56004803603602081101561033557600080fd5b50356001600160a01b0316610a79565b6100f56004803603604081101561035b57600080fd5b506001600160a01b0381358116916020013516610c85565b34801561037f57600080fd5b5061012a6004803603602081101561039657600080fd5b50356001600160a01b0316610c9c565b3480156103b257600080fd5b50610255600480360360208110156103c957600080fd5b50356001600160a01b0316610ca5565b336000908152602081905260409020546001600160a01b0316610443576040805162461bcd60e51b815260206004820181905260248201527f776f726b657220646f6573206e6f7420686176652061206a6f62206f66666572604482015290519081900360640190fd5b3360009081526020818152604080832080546001600160a01b031981169091556001909252808320805460ff19169055516001600160a01b039091169182913480156108fc0292909190818181858888f193505050501580156104aa573d6000803e3d6000fd5b50336000818152602081905260408082205490516001600160a01b0390911692917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b6000805b6001600160a01b03831660009081526001602052604090205460ff16600381111561051c57fe5b1492915050565b813361052e826107b7565b6001600160a01b031614610589576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610596338585610cfe565b60008181526002602052604090205490915060ff16156105fd576040805162461bcd60e51b815260206004820152601760248201527f6461707020616c726561647920617574686f72697a6564000000000000000000604482015290519081900360640190fd5b600081815260026020526040808220805460ff19166001179055516001600160a01b03808616929087169133917fde756a416a233cdb16c23a1fa5dcb3113164968df8607e0a4eeca25974b96e0391a450505050565b60006002600061066c61066586610ca5565b8686610cfe565b815260208101919091526040016000205460ff169392505050565b600060036104f5565b813361069b826107b7565b6001600160a01b0316146106f6576040805162461bcd60e51b815260206004820152601a60248201527f776f726b6572206e6f742068697265642062792073656e646572000000000000604482015290519081900360640190fd5b6000610703338585610cfe565b60008181526002602052604090205490915060ff161515600114610764576040805162461bcd60e51b815260206004820152601360248201527219185c1c081b9bdd08185d5d1a1bdc9a5e9959606a1b604482015290519081900360640190fd5b600081815260026020526040808220805460ff19169055516001600160a01b03808616929087169133917f4d2275ddb8a6d9c36c95476c2eaf9746c1785b4ab76a99719fd647b36da46cee91a450505050565b6001600160a01b039081166000908152602081905260409020541690565b60013360009081526001602052604090205460ff1660038111156107f557fe5b146108315760405162461bcd60e51b8152600401808060200182810382526022815260200180610d506022913960400191505060405180910390fd5b336000818152600160209081526040808320805460ff19166002179055908290528082205490516001600160a01b0390911692917f0cfa12ab8ee8dc6f9b68938d5e764dafed737d43dc5ec8443abf81e645276eb691a3565b60026001600160a01b03821660009081526001602052604090205460ff1660038111156108b357fe5b146108f8576040805162461bcd60e51b815260206004820152601060248201526f1ddbdc9ad95c881b9bdd081bdddb995960821b604482015290519081900360640190fd5b6001600160a01b03818116600090815260208190526040902054163314610966576040805162461bcd60e51b815260206004820152601c60248201527f6f6e6c79206f776e65722063616e2072657469726520776f726b657200000000604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917f657b373e1262c26d1f1a83e8949f0af9067fe48026b308e47eec5ef6b40ff25d91a350565b600060016104f5565b6001600160a01b03818116600090815260208190526040902054163314610a2b576040805162461bcd60e51b815260206004820152601f60248201527f6f6e6c792068697265722063616e2063616e63656c20746865206f6666657200604482015290519081900360640190fd5b6001600160a01b038116600081815260016020526040808220805460ff19166003179055513392917fac8bfc64efe7b663f325ca81c7468a291a868aacc74c8f91cdc5c8141c15e38a91a350565b610a82816104f1565b610ad3576040805162461bcd60e51b815260206004820152601760248201527f776f726b6572206973206e6f7420617661696c61626c65000000000000000000604482015290519081900360640190fd5b6001600160a01b038116610b2e576040805162461bcd60e51b815260206004820152601d60248201527f776f726b657220616464726573732063616e206e6f7420626520307830000000604482015290519081900360640190fd5b66038d7ea4c68000341015610b82576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672062656c6f77206d696e696d756d60581b604482015290519081900360640190fd5b6729a2241af62c0000341115610bd7576040805162461bcd60e51b815260206004820152601560248201527466756e64696e672061626f7665206d6178696d756d60581b604482015290519081900360640190fd5b6001600160a01b03811660009081526020818152604080832080546001600160a01b03191633179055600191829052909120805460ff1916828002179055506040516001600160a01b038216903480156108fc02916000818181858888f19350505050158015610c4b573d6000803e3d6000fd5b5060405133906001600160a01b038316907f2e0aa97ef0e6f4f76319861c90e91beec7a7a44a698cab856dfc1985a0c588f090600090a350565b610c8e82610a79565b610c988282610523565b5050565b600060026104f5565b600060026001600160a01b03831660009081526001602052604090205460ff166003811115610cd057fe5b14610cdc576000610cf8565b6001600160a01b03808316600090815260208190526040902054165b92915050565b604080516bffffffffffffffffffffffff19606095861b811660208084019190915294861b811660348301529290941b90911660488401528051603c818503018152605c909301905281519101209056fe776f726b6572206e6f74206973206e6f7420696e2070656e64696e67207374617465a26469706673582212208c53bf1eedc7351032f43e555009382924e5be081917cbd30b4284e0f572d9bc64736f6c63430007040033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.