Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Name:
DeactivateNodeOperators
Compiler Version
v0.8.6+commit.11564f7e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-FileCopyrightText: 2023 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.6; import "contracts/TrustedCaller.sol"; import "contracts/libraries/EVMScriptCreator.sol"; import "contracts/interfaces/IEVMScriptFactory.sol"; import "contracts/interfaces/INodeOperatorsRegistry.sol"; import "contracts/interfaces/IACL.sol"; /// @notice Creates EVMScript to deactivate several node operators contract DeactivateNodeOperators is TrustedCaller, IEVMScriptFactory { struct DeactivateNodeOperatorInput { uint256 nodeOperatorId; address managerAddress; } // ------------- // CONSTANTS // ------------- bytes4 private constant DEACTIVATE_NODE_OPERATOR_SELECTOR = bytes4(keccak256("deactivateNodeOperator(uint256)")); bytes4 private constant REVOKE_PERMISSION_SELECTOR = bytes4(keccak256("revokePermission(address,address,bytes32)")); bytes32 private constant MANAGE_SIGNING_KEYS_ROLE = keccak256("MANAGE_SIGNING_KEYS"); // ------------- // VARIABLES // ------------- /// @notice Address of NodeOperatorsRegistry contract INodeOperatorsRegistry public immutable nodeOperatorsRegistry; /// @notice Address of Aragon ACL contract IACL public immutable acl; // ------------- // ERRORS // ------------- string private constant ERROR_WRONG_OPERATOR_ACTIVE_STATE = "WRONG_OPERATOR_ACTIVE_STATE"; string private constant ERROR_NODE_OPERATOR_INDEX_OUT_OF_RANGE = "NODE_OPERATOR_INDEX_OUT_OF_RANGE"; string private constant ERROR_MANAGER_HAS_NO_ROLE = "MANAGER_HAS_NO_ROLE"; string private constant ERROR_NODE_OPERATORS_IS_NOT_SORTED = "NODE_OPERATORS_IS_NOT_SORTED"; string private constant ERROR_EMPTY_CALLDATA = "EMPTY_CALLDATA"; // ------------- // CONSTRUCTOR // ------------- constructor( address _trustedCaller, address _nodeOperatorsRegistry, address _acl ) TrustedCaller(_trustedCaller) { nodeOperatorsRegistry = INodeOperatorsRegistry(_nodeOperatorsRegistry); acl = IACL(_acl); } // ------------- // EXTERNAL METHODS // ------------- /// @notice Creates EVMScript to deactivate batch of node operators /// @param _creator Address who creates EVMScript /// @param _evmScriptCallData Encoded (DeactivateNodeOperatorInput[]) function createEVMScript( address _creator, bytes memory _evmScriptCallData ) external view override onlyTrustedCaller(_creator) returns (bytes memory) { DeactivateNodeOperatorInput[] memory decodedCallData = _decodeEVMScriptCallData( _evmScriptCallData ); _validateInputData(decodedCallData); address[] memory toAddresses = new address[](decodedCallData.length * 2); bytes4[] memory methodIds = new bytes4[](decodedCallData.length * 2); bytes[] memory encodedCalldata = new bytes[](decodedCallData.length * 2); for (uint256 i = 0; i < decodedCallData.length; ++i) { toAddresses[i * 2] = address(nodeOperatorsRegistry); methodIds[i * 2] = DEACTIVATE_NODE_OPERATOR_SELECTOR; encodedCalldata[i * 2] = abi.encode(decodedCallData[i].nodeOperatorId); toAddresses[i * 2 + 1] = address(acl); methodIds[i * 2 + 1] = REVOKE_PERMISSION_SELECTOR; encodedCalldata[i * 2 + 1] = abi.encode( decodedCallData[i].managerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE ); } return EVMScriptCreator.createEVMScript(toAddresses, methodIds, encodedCalldata); } /// @notice Decodes call data used by createEVMScript method /// @param _evmScriptCallData Encoded (DeactivateNodeOperatorInput[]) /// @return DeactivateNodeOperatorInput[] function decodeEVMScriptCallData( bytes memory _evmScriptCallData ) external pure returns (DeactivateNodeOperatorInput[] memory) { return _decodeEVMScriptCallData(_evmScriptCallData); } // ------------------ // PRIVATE METHODS // ------------------ function _decodeEVMScriptCallData( bytes memory _evmScriptCallData ) private pure returns (DeactivateNodeOperatorInput[] memory) { return abi.decode(_evmScriptCallData, (DeactivateNodeOperatorInput[])); } function _validateInputData( DeactivateNodeOperatorInput[] memory _decodedCallData ) private view { uint256 nodeOperatorsCount = nodeOperatorsRegistry.getNodeOperatorsCount(); require(_decodedCallData.length > 0, ERROR_EMPTY_CALLDATA); require( _decodedCallData[_decodedCallData.length - 1].nodeOperatorId < nodeOperatorsCount, ERROR_NODE_OPERATOR_INDEX_OUT_OF_RANGE ); for (uint256 i = 0; i < _decodedCallData.length; ++i) { require( i == 0 || _decodedCallData[i].nodeOperatorId > _decodedCallData[i - 1].nodeOperatorId, ERROR_NODE_OPERATORS_IS_NOT_SORTED ); require( nodeOperatorsRegistry.getNodeOperatorIsActive(_decodedCallData[i].nodeOperatorId) == true, ERROR_WRONG_OPERATOR_ACTIVE_STATE ); require( acl.getPermissionParamsLength( _decodedCallData[i].managerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE ) == 1, ERROR_MANAGER_HAS_NO_ROLE ); // See https://legacy-docs.aragon.org/developers/tools/aragonos/reference-aragonos-3#parameter-interpretation for details (uint8 paramIndex, uint8 paramOp, uint240 param) = acl.getPermissionParam( _decodedCallData[i].managerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE, 0 ); require(paramIndex == 0, ERROR_MANAGER_HAS_NO_ROLE); require(paramOp == 1, ERROR_MANAGER_HAS_NO_ROLE); require(param == _decodedCallData[i].nodeOperatorId, ERROR_MANAGER_HAS_NO_ROLE); } } }
// SPDX-FileCopyrightText: 2021 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4; /// @author psirex /// @notice A helper contract contains logic to validate that only a trusted caller has access to certain methods. /// @dev Trusted caller set once on deployment and can't be changed. contract TrustedCaller { string private constant ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS = "TRUSTED_CALLER_IS_ZERO_ADDRESS"; string private constant ERROR_CALLER_IS_FORBIDDEN = "CALLER_IS_FORBIDDEN"; address public immutable trustedCaller; constructor(address _trustedCaller) { require(_trustedCaller != address(0), ERROR_TRUSTED_CALLER_IS_ZERO_ADDRESS); trustedCaller = _trustedCaller; } modifier onlyTrustedCaller(address _caller) { require(_caller == trustedCaller, ERROR_CALLER_IS_FORBIDDEN); _; } }
// SPDX-FileCopyrightText: 2021 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4; /// @author psirex /// @notice Contains methods for convenient creation /// of EVMScripts in EVMScript factories contracts library EVMScriptCreator { // Id of default CallsScript Aragon's executor. bytes4 private constant SPEC_ID = hex"00000001"; /// @notice Encodes one method call as EVMScript function createEVMScript( address _to, bytes4 _methodId, bytes memory _evmScriptCallData ) internal pure returns (bytes memory _commands) { return abi.encodePacked( SPEC_ID, _to, uint32(_evmScriptCallData.length) + 4, _methodId, _evmScriptCallData ); } /// @notice Encodes multiple calls of the same method on one contract as EVMScript function createEVMScript( address _to, bytes4 _methodId, bytes[] memory _evmScriptCallData ) internal pure returns (bytes memory _evmScript) { for (uint256 i = 0; i < _evmScriptCallData.length; ++i) { _evmScript = bytes.concat( _evmScript, abi.encodePacked( _to, uint32(_evmScriptCallData[i].length) + 4, _methodId, _evmScriptCallData[i] ) ); } _evmScript = bytes.concat(SPEC_ID, _evmScript); } /// @notice Encodes multiple calls to different methods within the same contract as EVMScript function createEVMScript( address _to, bytes4[] memory _methodIds, bytes[] memory _evmScriptCallData ) internal pure returns (bytes memory _evmScript) { require(_methodIds.length == _evmScriptCallData.length, "LENGTH_MISMATCH"); for (uint256 i = 0; i < _methodIds.length; ++i) { _evmScript = bytes.concat( _evmScript, abi.encodePacked( _to, uint32(_evmScriptCallData[i].length) + 4, _methodIds[i], _evmScriptCallData[i] ) ); } _evmScript = bytes.concat(SPEC_ID, _evmScript); } /// @notice Encodes multiple calls to different contracts as EVMScript function createEVMScript( address[] memory _to, bytes4[] memory _methodIds, bytes[] memory _evmScriptCallData ) internal pure returns (bytes memory _evmScript) { require(_to.length == _methodIds.length, "LENGTH_MISMATCH"); require(_to.length == _evmScriptCallData.length, "LENGTH_MISMATCH"); for (uint256 i = 0; i < _to.length; ++i) { _evmScript = bytes.concat( _evmScript, abi.encodePacked( _to[i], uint32(_evmScriptCallData[i].length) + 4, _methodIds[i], _evmScriptCallData[i] ) ); } _evmScript = bytes.concat(SPEC_ID, _evmScript); } }
// SPDX-FileCopyrightText: 2021 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4; /// @author psirex /// @notice Interface which every EVMScript factory used in EasyTrack contract has to implement interface IEVMScriptFactory { function createEVMScript(address _creator, bytes memory _evmScriptCallData) external returns (bytes memory); }
// SPDX-FileCopyrightText: 2023 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4; /// @author bulbozaur interface INodeOperatorsRegistry { function activateNodeOperator(uint256 _nodeOperatorId) external; function deactivateNodeOperator(uint256 _nodeOperatorId) external; function getNodeOperatorIsActive(uint256 _nodeOperatorId) external view returns (bool); function getNodeOperatorsCount() external view returns (uint256); function addNodeOperator( string memory _name, address _rewardAddress ) external returns (uint256 id); function MAX_NODE_OPERATOR_NAME_LENGTH() external view returns (uint256); function MAX_NODE_OPERATORS_COUNT() external view returns (uint256); function setNodeOperatorRewardAddress(uint256 _nodeOperatorId, address _rewardAddress) external; function setNodeOperatorName(uint256 _nodeOperatorId, string memory _name) external; function getNodeOperator( uint256 _id, bool _fullInfo ) external view returns ( bool active, string memory name, address rewardAddress, uint64 stakingLimit, uint64 stoppedValidators, uint64 totalSigningKeys, uint64 usedSigningKeys ); function canPerform( address _sender, bytes32 _role, uint256[] memory _params ) external view returns (bool); function setNodeOperatorStakingLimit(uint256 _id, uint64 _stakingLimit) external; function updateTargetValidatorsLimits( uint256 _nodeOperatorId, uint256 _targetLimitMode, uint256 _targetLimit ) external; }
// SPDX-FileCopyrightText: 2023 Lido <[email protected]> // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.4; interface IACL { function grantPermissionP( address _entity, address _app, bytes32 _role, uint256[] memory _params ) external; function revokePermission(address _entity, address _app, bytes32 _role) external; function hasPermission( address _entity, address _app, bytes32 _role ) external view returns (bool); function hasPermission( address _entity, address _app, bytes32 _role, uint256[] memory _params ) external view returns (bool); function getPermissionParamsLength( address _entity, address _app, bytes32 _role ) external view returns (uint256); function getPermissionParam( address _entity, address _app, bytes32 _role, uint256 _index ) external view returns (uint8, uint8, uint240); function getPermissionManager(address _app, bytes32 _role) external view returns (address); function removePermissionManager(address _app, bytes32 _role) external; }
{ "evmVersion": "istanbul", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "DeactivateNodeOperators.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_trustedCaller","type":"address"},{"internalType":"address","name":"_nodeOperatorsRegistry","type":"address"},{"internalType":"address","name":"_acl","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"acl","outputs":[{"internalType":"contract IACL","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"createEVMScript","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_evmScriptCallData","type":"bytes"}],"name":"decodeEVMScriptCallData","outputs":[{"components":[{"internalType":"uint256","name":"nodeOperatorId","type":"uint256"},{"internalType":"address","name":"managerAddress","type":"address"}],"internalType":"struct DeactivateNodeOperators.DeactivateNodeOperatorInput[]","name":"","type":"tuple[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"nodeOperatorsRegistry","outputs":[{"internalType":"contract INodeOperatorsRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedCaller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620015ca380380620015ca8339810160408190526200003491620000e2565b60408051808201909152601e81527f545255535445445f43414c4c45525f49535f5a45524f5f414444524553530000602082015283906001600160a01b0382166200009d5760405162461bcd60e51b81526004016200009491906200012c565b60405180910390fd5b506001600160601b0319606091821b811660805292811b831660a0521b1660c0525062000184565b80516001600160a01b0381168114620000dd57600080fd5b919050565b600080600060608486031215620000f857600080fd5b6200010384620000c5565b92506200011360208501620000c5565b91506200012360408501620000c5565b90509250925092565b600060208083528351808285015260005b818110156200015b578581018301518582016040015282016200013d565b818111156200016e576000604083870101525b50601f01601f1916929092016040019392505050565b60805160601c60a05160601c60c05160601c6113ca620002006000396000818160cc01528181610410015281816109120152610a7a0152600081816061015281816102f5015281816104f8015281816105ee015281816107ff015281816109850152610aed01526000818160a5015261014401526113ca6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063227242b51461005c578063268f0760146100a0578063de287359146100c7578063ecf7c690146100ee578063fea21c9c1461010e575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6101016100fc36600461102f565b61012e565b60405161009791906111bd565b61012161011c366004610edb565b61013f565b6040516100979190611215565b6060610139826105d4565b92915050565b6060827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b815250906101ca5760405162461bcd60e51b81526004016101c19190611215565b60405180910390fd5b5060006101d6846105d4565b90506101e1816105ea565b6000815160026101f191906112b9565b67ffffffffffffffff81111561020957610209611366565b604051908082528060200260200182016040528015610232578160200160208202803683370190505b50905060008251600261024591906112b9565b67ffffffffffffffff81111561025d5761025d611366565b604051908082528060200260200182016040528015610286578160200160208202803683370190505b50905060008351600261029991906112b9565b67ffffffffffffffff8111156102b1576102b1611366565b6040519080825280602002602001820160405280156102e457816020015b60608152602001906001900390816102cf5790505b50905060005b84518110156105bc577f0000000000000000000000000000000000000000000000000000000000000000846103208360026112b9565b8151811061033057610330611350565b6001600160a01b03909216602092830291909101909101527f75a080d5a977c28e7c6f2710274d4932ee732cd469d736e965259fa5595bffbf836103758360026112b9565b8151811061038557610385611350565b60200260200101906001600160e01b03191690816001600160e01b031916815250508481815181106103b9576103b9611350565b6020026020010151600001516040516020016103d791815260200190565b60408051601f19818403018152919052826103f38360026112b9565b8151811061040357610403611350565b60209081029190910101527f00000000000000000000000000000000000000000000000000000000000000008461043b8360026112b9565b610446906001611282565b8151811061045657610456611350565b6001600160a01b03909216602092830291909101909101527f9d0effdb70cfc78561b926c15125dc0b3872ab042845fe2f01b4e4285852ecc78361049b8360026112b9565b6104a6906001611282565b815181106104b6576104b6611350565b60200260200101906001600160e01b03191690816001600160e01b031916815250508481815181106104ea576104ea611350565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000007f75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee604051602001610569939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60408051601f19818403018152919052826105858360026112b9565b610590906001611282565b815181106105a0576105a0611350565b6020026020010181905250806105b59061131f565b90506102ea565b506105c8838383610cc8565b98975050505050505050565b6060818060200190518101906101399190610f2b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561064557600080fd5b505afa158015610659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067d919061106c565b905060008251116040518060400160405280600e81526020016d454d5054595f43414c4c4441544160901b815250906106c95760405162461bcd60e51b81526004016101c19190611215565b508082600184516106da91906112d8565b815181106106ea576106ea611350565b602002602001015160000151106040518060400160405280602081526020017f4e4f44455f4f50455241544f525f494e4445585f4f55545f4f465f52414e47458152509061074b5760405162461bcd60e51b81526004016101c19190611215565b5060005b8251811015610cc3578015806107a857508261076c6001836112d8565b8151811061077c5761077c611350565b60200260200101516000015183828151811061079a5761079a611350565b602002602001015160000151115b6040518060400160405280601c81526020017f4e4f44455f4f50455241544f52535f49535f4e4f545f534f5254454400000000815250906107fc5760405162461bcd60e51b81526004016101c19190611215565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635e2fb90884838151811061083e5761083e611350565b6020026020010151600001516040518263ffffffff1660e01b815260040161086891815260200190565b60206040518083038186803b15801561088057600080fd5b505afa158015610894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b89190611006565b60408051808201909152601b81527f57524f4e475f4f50455241544f525f4143544956455f53544154450000000000602082015290151560011461090f5760405162461bcd60e51b81526004016101c19190611215565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166315949ed784838151811061095157610951611350565b602090810291909101810151015160405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f000000000000000000000000000000000000000000000000000000000000000090911660248201527f75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee604482015260640160206040518083038186803b1580156109ed57600080fd5b505afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a25919061106c565b600114604051806040016040528060138152602001724d414e414745525f4841535f4e4f5f524f4c4560681b81525090610a725760405162461bcd60e51b81526004016101c19190611215565b5060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a03c5832878681518110610ab957610ab9611350565b602090810291909101810151015160405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f000000000000000000000000000000000000000000000000000000000000000090911660248201527f75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee60448201526000606482015260840160606040518083038186803b158015610b5c57600080fd5b505afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b949190611085565b9250925092508260ff16600014604051806040016040528060138152602001724d414e414745525f4841535f4e4f5f524f4c4560681b81525090610beb5760405162461bcd60e51b81526004016101c19190611215565b506040805180820190915260138152724d414e414745525f4841535f4e4f5f524f4c4560681b6020820152600160ff841614610c3a5760405162461bcd60e51b81526004016101c19190611215565b50858481518110610c4d57610c4d611350565b602002602001015160000151816001600160f01b031614604051806040016040528060138152602001724d414e414745525f4841535f4e4f5f524f4c4560681b81525090610cae5760405162461bcd60e51b81526004016101c19190611215565b5050505080610cbc9061131f565b905061074f565b505050565b60608251845114610d0d5760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064016101c1565b8151845114610d505760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064016101c1565b60005b8451811015610e255781858281518110610d6f57610d6f611350565b6020026020010151848381518110610d8957610d89611350565b6020026020010151516004610d9e919061129a565b868481518110610db057610db0611350565b6020026020010151868581518110610dca57610dca611350565b6020026020010151604051602001610de59493929190611105565b60408051601f1981840301815290829052610e03929160200161118e565b604051602081830303815290604052915080610e1e9061131f565b9050610d53565b50600160e01b81604051602001610e3d92919061115d565b60405160208183030381529060405290509392505050565b600082601f830112610e6657600080fd5b813567ffffffffffffffff811115610e8057610e80611366565b610e93601f8201601f1916602001611251565b818152846020838601011115610ea857600080fd5b816020850160208301376000918101602001919091529392505050565b805160ff81168114610ed657600080fd5b919050565b60008060408385031215610eee57600080fd5b8235610ef98161137c565b9150602083013567ffffffffffffffff811115610f1557600080fd5b610f2185828601610e55565b9150509250929050565b60006020808385031215610f3e57600080fd5b825167ffffffffffffffff80821115610f5657600080fd5b818501915085601f830112610f6a57600080fd5b815181811115610f7c57610f7c611366565b610f8a848260051b01611251565b8181528481019250838501600683901b85018601891015610faa57600080fd5b60009450845b83811015610ff857604080838c031215610fc8578687fd5b610fd0611228565b8351815288840151610fe18161137c565b818a01528652948701949190910190600101610fb0565b509098975050505050505050565b60006020828403121561101857600080fd5b8151801515811461102857600080fd5b9392505050565b60006020828403121561104157600080fd5b813567ffffffffffffffff81111561105857600080fd5b61106484828501610e55565b949350505050565b60006020828403121561107e57600080fd5b5051919050565b60008060006060848603121561109a57600080fd5b6110a384610ec5565b92506110b160208501610ec5565b60408501519092506001600160f01b03811681146110ce57600080fd5b809150509250925092565b600081518084526110f18160208601602086016112ef565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061114d81601c8501602087016112ef565b91909101601c0195945050505050565b6001600160e01b03198316815281516000906111808160048501602087016112ef565b919091016004019392505050565b600083516111a08184602088016112ef565b8351908301906111b48183602088016112ef565b01949350505050565b602080825282518282018190526000919060409081850190868401855b82811015611208578151805185528601516001600160a01b03168685015292840192908501906001016111da565b5091979650505050505050565b60208152600061102860208301846110d9565b6040805190810167ffffffffffffffff8111828210171561124b5761124b611366565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561127a5761127a611366565b604052919050565b600082198211156112955761129561133a565b500190565b600063ffffffff8083168185168083038211156111b4576111b461133a565b60008160001904831182151516156112d3576112d361133a565b500290565b6000828210156112ea576112ea61133a565b500390565b60005b8381101561130a5781810151838201526020016112f2565b83811115611319576000848401525b50505050565b60006000198214156113335761133361133a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461139157600080fd5b5056fea26469706673582212207586fd8d71e19edcd2e1b7997249b338d84f5588f7607f0abf98c5663344931364736f6c63430008060033000000000000000000000000bb958292042c604855d23f8db458855d20e169960000000000000000000000000b5236beca68004db89434462dfc3bb074d2c83000000000000000000000000078780e70eae33e2935814a327f7db6c01136cc62
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063227242b51461005c578063268f0760146100a0578063de287359146100c7578063ecf7c690146100ee578063fea21c9c1461010e575b600080fd5b6100837f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c83081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100837f000000000000000000000000bb958292042c604855d23f8db458855d20e1699681565b6100837f00000000000000000000000078780e70eae33e2935814a327f7db6c01136cc6281565b6101016100fc36600461102f565b61012e565b60405161009791906111bd565b61012161011c366004610edb565b61013f565b6040516100979190611215565b6060610139826105d4565b92915050565b6060827f000000000000000000000000bb958292042c604855d23f8db458855d20e169966001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b815250906101ca5760405162461bcd60e51b81526004016101c19190611215565b60405180910390fd5b5060006101d6846105d4565b90506101e1816105ea565b6000815160026101f191906112b9565b67ffffffffffffffff81111561020957610209611366565b604051908082528060200260200182016040528015610232578160200160208202803683370190505b50905060008251600261024591906112b9565b67ffffffffffffffff81111561025d5761025d611366565b604051908082528060200260200182016040528015610286578160200160208202803683370190505b50905060008351600261029991906112b9565b67ffffffffffffffff8111156102b1576102b1611366565b6040519080825280602002602001820160405280156102e457816020015b60608152602001906001900390816102cf5790505b50905060005b84518110156105bc577f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c830846103208360026112b9565b8151811061033057610330611350565b6001600160a01b03909216602092830291909101909101527f75a080d5a977c28e7c6f2710274d4932ee732cd469d736e965259fa5595bffbf836103758360026112b9565b8151811061038557610385611350565b60200260200101906001600160e01b03191690816001600160e01b031916815250508481815181106103b9576103b9611350565b6020026020010151600001516040516020016103d791815260200190565b60408051601f19818403018152919052826103f38360026112b9565b8151811061040357610403611350565b60209081029190910101527f00000000000000000000000078780e70eae33e2935814a327f7db6c01136cc628461043b8360026112b9565b610446906001611282565b8151811061045657610456611350565b6001600160a01b03909216602092830291909101909101527f9d0effdb70cfc78561b926c15125dc0b3872ab042845fe2f01b4e4285852ecc78361049b8360026112b9565b6104a6906001611282565b815181106104b6576104b6611350565b60200260200101906001600160e01b03191690816001600160e01b031916815250508481815181106104ea576104ea611350565b6020026020010151602001517f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c8307f75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee604051602001610569939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60408051601f19818403018152919052826105858360026112b9565b610590906001611282565b815181106105a0576105a0611350565b6020026020010181905250806105b59061131f565b90506102ea565b506105c8838383610cc8565b98975050505050505050565b6060818060200190518101906101399190610f2b565b60007f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c8306001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b15801561064557600080fd5b505afa158015610659573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067d919061106c565b905060008251116040518060400160405280600e81526020016d454d5054595f43414c4c4441544160901b815250906106c95760405162461bcd60e51b81526004016101c19190611215565b508082600184516106da91906112d8565b815181106106ea576106ea611350565b602002602001015160000151106040518060400160405280602081526020017f4e4f44455f4f50455241544f525f494e4445585f4f55545f4f465f52414e47458152509061074b5760405162461bcd60e51b81526004016101c19190611215565b5060005b8251811015610cc3578015806107a857508261076c6001836112d8565b8151811061077c5761077c611350565b60200260200101516000015183828151811061079a5761079a611350565b602002602001015160000151115b6040518060400160405280601c81526020017f4e4f44455f4f50455241544f52535f49535f4e4f545f534f5254454400000000815250906107fc5760405162461bcd60e51b81526004016101c19190611215565b507f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c8306001600160a01b0316635e2fb90884838151811061083e5761083e611350565b6020026020010151600001516040518263ffffffff1660e01b815260040161086891815260200190565b60206040518083038186803b15801561088057600080fd5b505afa158015610894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b89190611006565b60408051808201909152601b81527f57524f4e475f4f50455241544f525f4143544956455f53544154450000000000602082015290151560011461090f5760405162461bcd60e51b81526004016101c19190611215565b507f00000000000000000000000078780e70eae33e2935814a327f7db6c01136cc626001600160a01b03166315949ed784838151811061095157610951611350565b602090810291909101810151015160405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c83090911660248201527f75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee604482015260640160206040518083038186803b1580156109ed57600080fd5b505afa158015610a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a25919061106c565b600114604051806040016040528060138152602001724d414e414745525f4841535f4e4f5f524f4c4560681b81525090610a725760405162461bcd60e51b81526004016101c19190611215565b5060008060007f00000000000000000000000078780e70eae33e2935814a327f7db6c01136cc626001600160a01b031663a03c5832878681518110610ab957610ab9611350565b602090810291909101810151015160405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c83090911660248201527f75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621ee60448201526000606482015260840160606040518083038186803b158015610b5c57600080fd5b505afa158015610b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b949190611085565b9250925092508260ff16600014604051806040016040528060138152602001724d414e414745525f4841535f4e4f5f524f4c4560681b81525090610beb5760405162461bcd60e51b81526004016101c19190611215565b506040805180820190915260138152724d414e414745525f4841535f4e4f5f524f4c4560681b6020820152600160ff841614610c3a5760405162461bcd60e51b81526004016101c19190611215565b50858481518110610c4d57610c4d611350565b602002602001015160000151816001600160f01b031614604051806040016040528060138152602001724d414e414745525f4841535f4e4f5f524f4c4560681b81525090610cae5760405162461bcd60e51b81526004016101c19190611215565b5050505080610cbc9061131f565b905061074f565b505050565b60608251845114610d0d5760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064016101c1565b8151845114610d505760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064016101c1565b60005b8451811015610e255781858281518110610d6f57610d6f611350565b6020026020010151848381518110610d8957610d89611350565b6020026020010151516004610d9e919061129a565b868481518110610db057610db0611350565b6020026020010151868581518110610dca57610dca611350565b6020026020010151604051602001610de59493929190611105565b60408051601f1981840301815290829052610e03929160200161118e565b604051602081830303815290604052915080610e1e9061131f565b9050610d53565b50600160e01b81604051602001610e3d92919061115d565b60405160208183030381529060405290509392505050565b600082601f830112610e6657600080fd5b813567ffffffffffffffff811115610e8057610e80611366565b610e93601f8201601f1916602001611251565b818152846020838601011115610ea857600080fd5b816020850160208301376000918101602001919091529392505050565b805160ff81168114610ed657600080fd5b919050565b60008060408385031215610eee57600080fd5b8235610ef98161137c565b9150602083013567ffffffffffffffff811115610f1557600080fd5b610f2185828601610e55565b9150509250929050565b60006020808385031215610f3e57600080fd5b825167ffffffffffffffff80821115610f5657600080fd5b818501915085601f830112610f6a57600080fd5b815181811115610f7c57610f7c611366565b610f8a848260051b01611251565b8181528481019250838501600683901b85018601891015610faa57600080fd5b60009450845b83811015610ff857604080838c031215610fc8578687fd5b610fd0611228565b8351815288840151610fe18161137c565b818a01528652948701949190910190600101610fb0565b509098975050505050505050565b60006020828403121561101857600080fd5b8151801515811461102857600080fd5b9392505050565b60006020828403121561104157600080fd5b813567ffffffffffffffff81111561105857600080fd5b61106484828501610e55565b949350505050565b60006020828403121561107e57600080fd5b5051919050565b60008060006060848603121561109a57600080fd5b6110a384610ec5565b92506110b160208501610ec5565b60408501519092506001600160f01b03811681146110ce57600080fd5b809150509250925092565b600081518084526110f18160208601602086016112ef565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061114d81601c8501602087016112ef565b91909101601c0195945050505050565b6001600160e01b03198316815281516000906111808160048501602087016112ef565b919091016004019392505050565b600083516111a08184602088016112ef565b8351908301906111b48183602088016112ef565b01949350505050565b602080825282518282018190526000919060409081850190868401855b82811015611208578151805185528601516001600160a01b03168685015292840192908501906001016111da565b5091979650505050505050565b60208152600061102860208301846110d9565b6040805190810167ffffffffffffffff8111828210171561124b5761124b611366565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561127a5761127a611366565b604052919050565b600082198211156112955761129561133a565b500190565b600063ffffffff8083168185168083038211156111b4576111b461133a565b60008160001904831182151516156112d3576112d361133a565b500290565b6000828210156112ea576112ea61133a565b500390565b60005b8381101561130a5781810151838201526020016112f2565b83811115611319576000848401525b50505050565b60006000198214156113335761133361133a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461139157600080fd5b5056fea26469706673582212207586fd8d71e19edcd2e1b7997249b338d84f5588f7607f0abf98c5663344931364736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000bb958292042c604855d23f8db458855d20e169960000000000000000000000000b5236beca68004db89434462dfc3bb074d2c83000000000000000000000000078780e70eae33e2935814a327f7db6c01136cc62
-----Decoded View---------------
Arg [0] : _trustedCaller (address): 0xbB958292042c604855d23F8db458855d20e16996
Arg [1] : _nodeOperatorsRegistry (address): 0x0B5236BECA68004DB89434462DfC3BB074d2c830
Arg [2] : _acl (address): 0x78780e70Eae33e2935814a327f7dB6c01136cc62
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000bb958292042c604855d23f8db458855d20e16996
Arg [1] : 0000000000000000000000000b5236beca68004db89434462dfc3bb074d2c830
Arg [2] : 00000000000000000000000078780e70eae33e2935814a327f7db6c01136cc62
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.