ETH Price: $2,981.41 (+2.10%)
Gas: 1 Gwei

Contract

0xab47304D987390E27Ce3BC0fA4Fe31E3A98B0db2
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Set Operator201889882024-06-28 8:28:117 days ago1719563291IN
Juicebox: Operator Store
0 ETH0.000170623.52801878
Set Operator201864092024-06-27 23:49:118 days ago1719532151IN
Juicebox: Operator Store
0 ETH0.000157033.24699842
Set Operator201668512024-06-25 6:16:5910 days ago1719296219IN
Juicebox: Operator Store
0 ETH0.000146233.02374606
Set Operator200866822024-06-14 1:11:5922 days ago1718327519IN
Juicebox: Operator Store
0 ETH0.000341147.05393741
Set Operator200818492024-06-13 8:56:2322 days ago1718268983IN
Juicebox: Operator Store
0 ETH0.0005274610.9065942
Set Operator200460172024-06-08 8:48:2327 days ago1717836503IN
Juicebox: Operator Store
0 ETH0.00030576.32109228
Set Operator199865692024-05-31 1:35:3536 days ago1717119335IN
Juicebox: Operator Store
0 ETH0.000391468.09437573
Set Operator199843952024-05-30 18:18:3536 days ago1717093115IN
Juicebox: Operator Store
0 ETH0.0010430221.56701235
Set Operator199244592024-05-22 9:13:5944 days ago1716369239IN
Juicebox: Operator Store
0 ETH0.000341657.06456218
Set Operator199244122024-05-22 9:04:3544 days ago1716368675IN
Juicebox: Operator Store
0 ETH0.000394418.15536999
Set Operator197810932024-05-02 7:57:5964 days ago1714636679IN
Juicebox: Operator Store
0 ETH0.000274865.68347708
Set Operator197809562024-05-02 7:30:3564 days ago1714635035IN
Juicebox: Operator Store
0 ETH0.000321256.64272513
Set Operator197716942024-05-01 0:26:5966 days ago1714523219IN
Juicebox: Operator Store
0 ETH0.000294246.08415971
Set Operator197537422024-04-28 12:13:2368 days ago1714306403IN
Juicebox: Operator Store
0 ETH0.000428128.85242603
Set Operator197514352024-04-28 4:29:1168 days ago1714278551IN
Juicebox: Operator Store
0 ETH0.000250875.18742066
Set Operator196706922024-04-16 21:22:4780 days ago1713302567IN
Juicebox: Operator Store
0 ETH0.0006701213.85646975
Set Operator196472652024-04-13 14:32:2383 days ago1713018743IN
Juicebox: Operator Store
0 ETH0.0005432619.07939794
Set Operator196427952024-04-12 23:28:2384 days ago1712964503IN
Juicebox: Operator Store
0 ETH0.0007923516.38377548
Set Operator196022822024-04-07 7:18:5989 days ago1712474339IN
Juicebox: Operator Store
0 ETH0.0005879112.15645249
Set Operator195629062024-04-01 18:57:1195 days ago1711997831IN
Juicebox: Operator Store
0 ETH0.0013094727.07657539
Set Operator195604582024-04-01 10:43:5995 days ago1711968239IN
Juicebox: Operator Store
0 ETH0.000897118.5497968
Set Operator195510172024-03-31 2:50:1197 days ago1711853411IN
Juicebox: Operator Store
0 ETH0.000928219.19277619
Set Operator195202012024-03-26 17:51:59101 days ago1711475519IN
Juicebox: Operator Store
0 ETH0.0018488938.23036317
Set Operator195175992024-03-26 9:02:59101 days ago1711443779IN
Juicebox: Operator Store
0 ETH0.0009552919.75302447
Set Operator195137082024-03-25 19:58:23102 days ago1711396703IN
Juicebox: Operator Store
0 ETH0.0016245633.59181111
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OperatorStore

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion
File 1 of 2 : OperatorStore.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

import "./interfaces/IOperatorStore.sol";

/** 
  @notice
  Addresses can give permissions to any other address to take specific actions 
  throughout the Juicebox ecosystem on their behalf. These addresses are called `operators`.
  
  @dev
  Permissions are stored as a uint256, with each boolean bit representing whether or not
  an oporator has the permission identified by that bit's index in the 256 bit uint256.
  Indexes must be between 0 and 255.

  The directory of permissions, along with how they uniquely mapp to indexes, are managed externally.
  This contract doesn't know or care about specific permissions and their indexes.
*/
contract OperatorStore is IOperatorStore {
    // --- public stored properties --- //

    /** 
      @notice
      The permissions that an operator has to operate on a specific domain.
      
      @dev
      An account can give an operator permissions that only pertain to a specific domain.
      There is no domain with an ID of 0 -- accounts can use the 0 domain to give an operator
      permissions to operator on their personal behalf.
    */
    mapping(address => mapping(address => mapping(uint256 => uint256)))
        public
        override permissionsOf;

    // --- public views --- //

    /** 
      @notice 
      Whether or not an operator has the permission to take a certain action pertaining to the specified domain.

      @param _operator The operator to check.
      @param _account The account that has given out permission to the operator.
      @param _domain The domain that the operator has been given permissions to operate.
      @param _permissionIndex the permission to check for.

      @return Whether the operator has the specified permission.
    */
    function hasPermission(
        address _operator,
        address _account,
        uint256 _domain,
        uint256 _permissionIndex
    ) external view override returns (bool) {
        require(
            _permissionIndex <= 255,
            "OperatorStore::hasPermission: INDEX_OUT_OF_BOUNDS"
        );
        return
            ((permissionsOf[_operator][_account][_domain] >> _permissionIndex) &
                1) == 1;
    }

    /** 
      @notice 
      Whether or not an operator has the permission to take certain actions pertaining to the specified domain.

      @param _operator The operator to check.
      @param _account The account that has given out permissions to the operator.
      @param _domain The domain that the operator has been given permissions to operate.
      @param _permissionIndexes An array of permission indexes to check for.

      @return Whether the operator has all specified permissions.
    */
    function hasPermissions(
        address _operator,
        address _account,
        uint256 _domain,
        uint256[] calldata _permissionIndexes
    ) external view override returns (bool) {
        for (uint256 _i = 0; _i < _permissionIndexes.length; _i++) {
            uint256 _permissionIndex = _permissionIndexes[_i];

            require(
                _permissionIndex <= 255,
                "OperatorStore::hasPermissions: INDEX_OUT_OF_BOUNDS"
            );

            if (
                ((permissionsOf[_operator][_account][_domain] >>
                    _permissionIndex) & 1) == 0
            ) return false;
        }
        return true;
    }

    // --- external transactions --- //

    /** 
      @notice 
      Sets permissions for an operator.

      @param _operator The operator to give permission to.
      @param _domain The domain that the operator is being given permissions to operate.
      @param _permissionIndexes An array of indexes of permissions to set.
    */
    function setOperator(
        address _operator,
        uint256 _domain,
        uint256[] calldata _permissionIndexes
    ) external override {
        // Pack the indexes into a uint256.
        uint256 _packed = _packedPermissions(_permissionIndexes);

        // Store the new value.
        permissionsOf[_operator][msg.sender][_domain] = _packed;

        emit SetOperator(
            _operator,
            msg.sender,
            _domain,
            _permissionIndexes,
            _packed
        );
    }

    /** 
      @notice 
      Sets permissions for many operators.

      @param _operators The operators to give permission to.
      @param _domains The domains that can be operated. Set to 0 to allow operation of account level actions.
      @param _permissionIndexes The level of power each operator should have.
    */
    function setOperators(
        address[] calldata _operators,
        uint256[] calldata _domains,
        uint256[][] calldata _permissionIndexes
    ) external override {
        // There should be a level for each operator provided.
        require(
            _operators.length == _permissionIndexes.length &&
                _operators.length == _domains.length,
            "OperatorStore::setOperators: BAD_ARGS"
        );
        for (uint256 _i = 0; _i < _operators.length; _i++) {
            // Pack the indexes into a uint256.
            uint256 _packed = _packedPermissions(_permissionIndexes[_i]);
            // Store the new value.
            permissionsOf[_operators[_i]][msg.sender][_domains[_i]] = _packed;
            emit SetOperator(
                _operators[_i],
                msg.sender,
                _domains[_i],
                _permissionIndexes[_i],
                _packed
            );
        }
    }

    // --- private helper functions --- //

    /** 
      @notice 
      Converts an array of permission indexes to a packed int.

      @param _indexes The indexes of the permissions to pack.

      @return packed The packed result.
    */
    function _packedPermissions(uint256[] calldata _indexes)
        private
        pure
        returns (uint256 packed)
    {
        for (uint256 _i = 0; _i < _indexes.length; _i++) {
            uint256 _permissionIndex = _indexes[_i];
            require(
                _permissionIndex <= 255,
                "OperatorStore::_packedPermissions: INDEX_OUT_OF_BOUNDS"
            );
            // Turn the bit at the index on.
            packed |= 1 << _permissionIndex;
        }
    }
}

File 2 of 2 : IOperatorStore.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.6;

interface IOperatorStore {
    event SetOperator(
        address indexed operator,
        address indexed account,
        uint256 indexed domain,
        uint256[] permissionIndexes,
        uint256 packed
    );

    function permissionsOf(
        address _operator,
        address _account,
        uint256 _domain
    ) external view returns (uint256);

    function hasPermission(
        address _operator,
        address _account,
        uint256 _domain,
        uint256 _permissionIndex
    ) external view returns (bool);

    function hasPermissions(
        address _operator,
        address _account,
        uint256 _domain,
        uint256[] calldata _permissionIndexes
    ) external view returns (bool);

    function setOperator(
        address _operator,
        uint256 _domain,
        uint256[] calldata _permissionIndexes
    ) external;

    function setOperators(
        address[] calldata _operators,
        uint256[] calldata _domains,
        uint256[][] calldata _permissionIndexes
    ) external;
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 10000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"domain","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"permissionIndexes","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"packed","type":"uint256"}],"name":"SetOperator","type":"event"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_domain","type":"uint256"},{"internalType":"uint256","name":"_permissionIndex","type":"uint256"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_domain","type":"uint256"},{"internalType":"uint256[]","name":"_permissionIndexes","type":"uint256[]"}],"name":"hasPermissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"permissionsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"uint256","name":"_domain","type":"uint256"},{"internalType":"uint256[]","name":"_permissionIndexes","type":"uint256[]"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_operators","type":"address[]"},{"internalType":"uint256[]","name":"_domains","type":"uint256[]"},{"internalType":"uint256[][]","name":"_permissionIndexes","type":"uint256[][]"}],"name":"setOperators","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50610ad0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806380deb2301161005057806380deb230146100a957806393535be1146100e7578063c161c93f146100fa57600080fd5b80630f5932f01461006c5780635ea6cc8614610094575b600080fd5b61007f61007a36600461079f565b61010d565b60405190151581526020015b60405180910390f35b6100a76100a2366004610850565b61023b565b005b6100d96100b7366004610763565b6000602081815293815260408082208552928152828120909352825290205481565b60405190815260200161008b565b6100a76100f53660046108aa565b6102ce565b61007f61010836600461080e565b610513565b6000805b8281101561022c57600084848381811061012d5761012d610a6b565b90506020020135905060ff8111156101cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f70657261746f7253746f72653a3a6861735065726d697373696f6e733a204960448201527f4e4445585f4f55545f4f465f424f554e4453000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff888116600090815260208181526040808320938b16835292815282822089835290522054811c60011661021957600092505050610232565b508061022481610a0b565b915050610111565b50600190505b95945050505050565b600061024783836105f0565b73ffffffffffffffffffffffffffffffffffffffff8616600081815260208181526040808320338085529083528184208a855290925291829020849055905192935086929091907f9dee2ffb464e2d0198cd20321be1ae3f79ed49f7ed4abfaa7ee4fe982bbeb320906102bf90889088908890610944565b60405180910390a45050505050565b84811480156102dc57508483145b610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f70657261746f7253746f72653a3a7365744f70657261746f72733a2042414460448201527f5f4152475300000000000000000000000000000000000000000000000000000060648201526084016101c3565b60005b8581101561050a5760006103a184848481811061038a5761038a610a6b565b905060200281019061039c91906109a3565b6105f0565b9050806000808a8a868181106103b9576103b9610a6b565b90506020020160208101906103ce9190610741565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040908101600090812033825290925281209088888681811061041457610414610a6b565b9050602002013581526020019081526020016000208190555085858381811061043f5761043f610a6b565b905060200201353373ffffffffffffffffffffffffffffffffffffffff1689898581811061046f5761046f610a6b565b90506020020160208101906104849190610741565b73ffffffffffffffffffffffffffffffffffffffff167f9dee2ffb464e2d0198cd20321be1ae3f79ed49f7ed4abfaa7ee4fe982bbeb3208787878181106104cd576104cd610a6b565b90506020028101906104df91906109a3565b866040516104ef93929190610944565b60405180910390a4508061050281610a0b565b91505061036b565b50505050505050565b600060ff8211156105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f70657261746f7253746f72653a3a6861735065726d697373696f6e3a20494e60448201527f4445585f4f55545f4f465f424f554e445300000000000000000000000000000060648201526084016101c3565b5073ffffffffffffffffffffffffffffffffffffffff808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b6000805b828110156106c557600084848381811061061057610610610a6b565b90506020020135905060ff8111156106aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f70657261746f7253746f72653a3a5f7061636b65645065726d697373696f6e60448201527f733a20494e4445585f4f55545f4f465f424f554e44530000000000000000000060648201526084016101c3565b6001901b9190911790806106bd81610a0b565b9150506105f4565b5092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f057600080fd5b919050565b60008083601f84011261070757600080fd5b50813567ffffffffffffffff81111561071f57600080fd5b6020830191508360208260051b850101111561073a57600080fd5b9250929050565b60006020828403121561075357600080fd5b61075c826106cc565b9392505050565b60008060006060848603121561077857600080fd5b610781846106cc565b925061078f602085016106cc565b9150604084013590509250925092565b6000806000806000608086880312156107b757600080fd5b6107c0866106cc565b94506107ce602087016106cc565b935060408601359250606086013567ffffffffffffffff8111156107f157600080fd5b6107fd888289016106f5565b969995985093965092949392505050565b6000806000806080858703121561082457600080fd5b61082d856106cc565b935061083b602086016106cc565b93969395505050506040820135916060013590565b6000806000806060858703121561086657600080fd5b61086f856106cc565b935060208501359250604085013567ffffffffffffffff81111561089257600080fd5b61089e878288016106f5565b95989497509550505050565b600080600080600080606087890312156108c357600080fd5b863567ffffffffffffffff808211156108db57600080fd5b6108e78a838b016106f5565b9098509650602089013591508082111561090057600080fd5b61090c8a838b016106f5565b9096509450604089013591508082111561092557600080fd5b5061093289828a016106f5565b979a9699509497509295939492505050565b6040815282604082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84111561097d57600080fd5b8360051b8086606085013760009083016060019081526020909201929092529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126109d857600080fd5b83018035915067ffffffffffffffff8211156109f357600080fd5b6020019150600581901b360382131561073a57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a64577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220fcf6ef5dd27163b088a1baab03bb18a417fb8934ef1fb97ffe3f84f57c6d47cd64736f6c63430008060033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100675760003560e01c806380deb2301161005057806380deb230146100a957806393535be1146100e7578063c161c93f146100fa57600080fd5b80630f5932f01461006c5780635ea6cc8614610094575b600080fd5b61007f61007a36600461079f565b61010d565b60405190151581526020015b60405180910390f35b6100a76100a2366004610850565b61023b565b005b6100d96100b7366004610763565b6000602081815293815260408082208552928152828120909352825290205481565b60405190815260200161008b565b6100a76100f53660046108aa565b6102ce565b61007f61010836600461080e565b610513565b6000805b8281101561022c57600084848381811061012d5761012d610a6b565b90506020020135905060ff8111156101cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f70657261746f7253746f72653a3a6861735065726d697373696f6e733a204960448201527f4e4445585f4f55545f4f465f424f554e4453000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff888116600090815260208181526040808320938b16835292815282822089835290522054811c60011661021957600092505050610232565b508061022481610a0b565b915050610111565b50600190505b95945050505050565b600061024783836105f0565b73ffffffffffffffffffffffffffffffffffffffff8616600081815260208181526040808320338085529083528184208a855290925291829020849055905192935086929091907f9dee2ffb464e2d0198cd20321be1ae3f79ed49f7ed4abfaa7ee4fe982bbeb320906102bf90889088908890610944565b60405180910390a45050505050565b84811480156102dc57508483145b610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4f70657261746f7253746f72653a3a7365744f70657261746f72733a2042414460448201527f5f4152475300000000000000000000000000000000000000000000000000000060648201526084016101c3565b60005b8581101561050a5760006103a184848481811061038a5761038a610a6b565b905060200281019061039c91906109a3565b6105f0565b9050806000808a8a868181106103b9576103b9610a6b565b90506020020160208101906103ce9190610741565b73ffffffffffffffffffffffffffffffffffffffff1681526020808201929092526040908101600090812033825290925281209088888681811061041457610414610a6b565b9050602002013581526020019081526020016000208190555085858381811061043f5761043f610a6b565b905060200201353373ffffffffffffffffffffffffffffffffffffffff1689898581811061046f5761046f610a6b565b90506020020160208101906104849190610741565b73ffffffffffffffffffffffffffffffffffffffff167f9dee2ffb464e2d0198cd20321be1ae3f79ed49f7ed4abfaa7ee4fe982bbeb3208787878181106104cd576104cd610a6b565b90506020028101906104df91906109a3565b866040516104ef93929190610944565b60405180910390a4508061050281610a0b565b91505061036b565b50505050505050565b600060ff8211156105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f70657261746f7253746f72653a3a6861735065726d697373696f6e3a20494e60448201527f4445585f4f55545f4f465f424f554e445300000000000000000000000000000060648201526084016101c3565b5073ffffffffffffffffffffffffffffffffffffffff808516600090815260208181526040808320938716835292815282822085835290522054600190821c811614949350505050565b6000805b828110156106c557600084848381811061061057610610610a6b565b90506020020135905060ff8111156106aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f70657261746f7253746f72653a3a5f7061636b65645065726d697373696f6e60448201527f733a20494e4445585f4f55545f4f465f424f554e44530000000000000000000060648201526084016101c3565b6001901b9190911790806106bd81610a0b565b9150506105f4565b5092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106f057600080fd5b919050565b60008083601f84011261070757600080fd5b50813567ffffffffffffffff81111561071f57600080fd5b6020830191508360208260051b850101111561073a57600080fd5b9250929050565b60006020828403121561075357600080fd5b61075c826106cc565b9392505050565b60008060006060848603121561077857600080fd5b610781846106cc565b925061078f602085016106cc565b9150604084013590509250925092565b6000806000806000608086880312156107b757600080fd5b6107c0866106cc565b94506107ce602087016106cc565b935060408601359250606086013567ffffffffffffffff8111156107f157600080fd5b6107fd888289016106f5565b969995985093965092949392505050565b6000806000806080858703121561082457600080fd5b61082d856106cc565b935061083b602086016106cc565b93969395505050506040820135916060013590565b6000806000806060858703121561086657600080fd5b61086f856106cc565b935060208501359250604085013567ffffffffffffffff81111561089257600080fd5b61089e878288016106f5565b95989497509550505050565b600080600080600080606087890312156108c357600080fd5b863567ffffffffffffffff808211156108db57600080fd5b6108e78a838b016106f5565b9098509650602089013591508082111561090057600080fd5b61090c8a838b016106f5565b9096509450604089013591508082111561092557600080fd5b5061093289828a016106f5565b979a9699509497509295939492505050565b6040815282604082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84111561097d57600080fd5b8360051b8086606085013760009083016060019081526020909201929092529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126109d857600080fd5b83018035915067ffffffffffffffff8211156109f357600080fd5b6020019150600581901b360382131561073a57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415610a64577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220fcf6ef5dd27163b088a1baab03bb18a417fb8934ef1fb97ffe3f84f57c6d47cd64736f6c63430008060033

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  ]

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.