Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ChangeNodeOperatorManagers
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 "TrustedCaller.sol"; import "EVMScriptCreator.sol"; import "IEVMScriptFactory.sol"; import "INodeOperatorsRegistry.sol"; import "IACL.sol"; /// @notice Creates EVMScript to change signing keys manager for several node operators contract ChangeNodeOperatorManagers is TrustedCaller, IEVMScriptFactory { struct ChangeNodeOperatorManagersInput { uint256 nodeOperatorId; address oldManagerAddress; address newManagerAddress; } // ------------- // CONSTANTS // ------------- bytes32 private constant MANAGE_SIGNING_KEYS_ROLE = keccak256("MANAGE_SIGNING_KEYS"); bytes4 private constant GRANT_PERMISSION_P_SELECTOR = bytes4(keccak256("grantPermissionP(address,address,bytes32,uint256[])")); bytes4 private constant REVOKE_PERMISSION_SELECTOR = bytes4(keccak256("revokePermission(address,address,bytes32)")); // ------------- // ERRORS // ------------- string private constant ERROR_NODE_OPERATOR_INDEX_OUT_OF_RANGE = "NODE_OPERATOR_INDEX_OUT_OF_RANGE"; string private constant ERROR_OLD_MANAGER_HAS_NO_ROLE = "OLD_MANAGER_HAS_NO_ROLE"; string private constant ERROR_MANAGER_ALREADY_HAS_ROLE = "MANAGER_ALREADY_HAS_ROLE"; string private constant ERROR_MANAGER_ADDRESSES_HAS_DUPLICATE = "MANAGER_ADDRESSES_HAS_DUPLICATE"; string private constant ERROR_NODE_OPERATORS_IS_NOT_SORTED = "NODE_OPERATORS_IS_NOT_SORTED"; string private constant ERROR_ZERO_MANAGER_ADDRESS = "ZERO_MANAGER_ADDRESS"; string private constant ERROR_EMPTY_CALLDATA = "EMPTY_CALLDATA"; // ------------- // VARIABLES // ------------- /// @notice Address of NodeOperatorsRegistry contract INodeOperatorsRegistry public immutable nodeOperatorsRegistry; /// @notice Address of Aragon ACL contract IACL public immutable acl; // ------------- // CONSTRUCTOR // ------------- constructor( address _trustedCaller, address _nodeOperatorsRegistry, address _acl ) TrustedCaller(_trustedCaller) { nodeOperatorsRegistry = INodeOperatorsRegistry(_nodeOperatorsRegistry); acl = IACL(_acl); } // ------------- // EXTERNAL METHODS // ------------- /// @notice Creates EVMScript to change managers of several node operators /// @param _creator Address who creates EVMScript /// @param _evmScriptCallData Encoded (ChangeNodeOperatorManagersInput[]) function createEVMScript( address _creator, bytes memory _evmScriptCallData ) external view override onlyTrustedCaller(_creator) returns (bytes memory) { ChangeNodeOperatorManagersInput[] memory decodedCallData = _decodeEVMScriptCallData( _evmScriptCallData ); bytes4[] memory methodIds = new bytes4[](decodedCallData.length * 2); bytes[] memory encodedCalldata = new bytes[](decodedCallData.length * 2); _validateInputData(decodedCallData); for (uint256 i = 0; i < decodedCallData.length; ++i) { methodIds[i * 2] = REVOKE_PERMISSION_SELECTOR; encodedCalldata[i * 2] = abi.encode( decodedCallData[i].oldManagerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE ); // See https://legacy-docs.aragon.org/developers/tools/aragonos/reference-aragonos-3#parameter-interpretation for details uint256[] memory permissionParams = new uint256[](1); permissionParams[0] = (1 << 240) + decodedCallData[i].nodeOperatorId; methodIds[i * 2 + 1] = GRANT_PERMISSION_P_SELECTOR; encodedCalldata[i * 2 + 1] = abi.encode( decodedCallData[i].newManagerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE, permissionParams ); } return EVMScriptCreator.createEVMScript(address(acl), methodIds, encodedCalldata); } /// @notice Decodes call data used by createEVMScript method /// @param _evmScriptCallData Encoded (ChangeNodeOperatorManagersInput[]) /// @return ChangeNodeOperatorManagersInput[] function decodeEVMScriptCallData( bytes memory _evmScriptCallData ) external pure returns (ChangeNodeOperatorManagersInput[] memory) { return _decodeEVMScriptCallData(_evmScriptCallData); } // ------------------ // PRIVATE METHODS // ------------------ function _decodeEVMScriptCallData( bytes memory _evmScriptCallData ) private pure returns (ChangeNodeOperatorManagersInput[] memory) { return abi.decode(_evmScriptCallData, (ChangeNodeOperatorManagersInput[])); } function _validateInputData( ChangeNodeOperatorManagersInput[] 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 ); address managerAddress = _decodedCallData[i].newManagerAddress; for (uint256 testIndex = i + 1; testIndex < _decodedCallData.length; ++testIndex) { require( managerAddress != _decodedCallData[testIndex].newManagerAddress, ERROR_MANAGER_ADDRESSES_HAS_DUPLICATE ); } require( acl.getPermissionParamsLength( _decodedCallData[i].oldManagerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE ) == 1, ERROR_OLD_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].oldManagerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE, 0 ); require(paramIndex == 0, ERROR_OLD_MANAGER_HAS_NO_ROLE); require(paramOp == 1, ERROR_OLD_MANAGER_HAS_NO_ROLE); require(param == _decodedCallData[i].nodeOperatorId, ERROR_OLD_MANAGER_HAS_NO_ROLE); require( _decodedCallData[i].newManagerAddress != address(0), ERROR_ZERO_MANAGER_ADDRESS ); require( acl.hasPermission( _decodedCallData[i].newManagerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE ) == false, ERROR_MANAGER_ALREADY_HAS_ROLE ); require( acl.getPermissionParamsLength( _decodedCallData[i].newManagerAddress, address(nodeOperatorsRegistry), MANAGE_SIGNING_KEYS_ROLE ) == 0, ERROR_MANAGER_ALREADY_HAS_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, bool _isTargetLimitActive, 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": {
"ChangeNodeOperatorManagers.sol": {}
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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":"oldManagerAddress","type":"address"},{"internalType":"address","name":"newManagerAddress","type":"address"}],"internalType":"struct ChangeNodeOperatorManagers.ChangeNodeOperatorManagersInput[]","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
60e06040523480156200001157600080fd5b5060405162001854380380620018548339810160408190526200003491620000e2565b60408051808201909152601e81527f545255535445445f43414c4c45525f49535f5a45524f5f414444524553530000602082015283906001600160a01b0382166200009d5760405162461bcd60e51b81526004016200009491906200012c565b60405180910390fd5b506001600160601b0319606091821b811660805292811b831660a0521b1660c0525062000184565b80516001600160a01b0381168114620000dd57600080fd5b919050565b600080600060608486031215620000f857600080fd5b6200010384620000c5565b92506200011360208501620000c5565b91506200012360408501620000c5565b90509250925092565b600060208083528351808285015260005b818110156200015b578581018301518582016040015282016200013d565b818111156200016e576000604083870101525b50601f01601f1916929092016040019392505050565b60805160601c60a05160601c60c05160601c61163f620002156000396000818160cc0152818161052a0152818161085c0152818161099e01528181610c4f0152610d8901526000818160610152818161031e0152818161048e01528181610575015281816108a901528181610a1101528181610c9c0152610dd601526000818160a50152610144015261163f6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063227242b51461005c578063268f0760146100a0578063de287359146100c7578063ecf7c690146100ee578063fea21c9c1461010e575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6101016100fc3660046111f7565b61012e565b6040516100979190611404565b61012161011c366004611092565b61013f565b604051610097919061146a565b60606101398261055b565b92915050565b6060827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b815250906101ca5760405162461bcd60e51b81526004016101c1919061146a565b60405180910390fd5b5060006101d68461055b565b90506000815160026101e8919061150e565b67ffffffffffffffff811115610200576102006115bb565b604051908082528060200260200182016040528015610229578160200160208202803683370190505b50905060008251600261023c919061150e565b67ffffffffffffffff811115610254576102546115bb565b60405190808252806020026020018201604052801561028757816020015b60608152602001906001900390816102725790505b50905061029383610571565b60005b8351811015610524577f9d0effdb70cfc78561b926c15125dc0b3872ab042845fe2f01b4e4285852ecc7836102cc83600261150e565b815181106102dc576102dc6115a5565b60200260200101906001600160e01b03191690816001600160e01b03191681525050838181518110610310576103106115a5565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000006000805160206115ea83398151915260405160200161035e93929190611385565b60408051601f198184030181529190528261037a83600261150e565b8151811061038a5761038a6115a5565b60209081029190910101526040805160018082528183019092526000918160200160208202803683370190505090508482815181106103cb576103cb6115a5565b602002602001015160000151600160f01b6103e691906114d7565b816000815181106103f9576103f96115a5565b60209081029190910101527f6815c9928a4e5d6b2777b20d8d9e9d1dd5492daa3fa5ec5aaca0a739383ef6fb8461043184600261150e565b61043c9060016114d7565b8151811061044c5761044c6115a5565b60200260200101906001600160e01b03191690816001600160e01b03191681525050848281518110610480576104806115a5565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006000805160206115ea833981519152836040516020016104d094939291906113a9565b60408051601f19818403018152919052836104ec84600261150e565b6104f79060016114d7565b81518110610507576105076115a5565b6020026020010181905250508061051d90611574565b9050610296565b506105507f00000000000000000000000000000000000000000000000000000000000000008383610edb565b979650505050505050565b60608180602001905181019061013991906110e2565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156105cc57600080fd5b505afa1580156105e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106049190611234565b905060008251116040518060400160405280600e81526020016d454d5054595f43414c4c4441544160901b815250906106505760405162461bcd60e51b81526004016101c1919061146a565b50808260018451610661919061152d565b81518110610671576106716115a5565b602002602001015160000151106040518060400160405280602081526020017f4e4f44455f4f50455241544f525f494e4445585f4f55545f4f465f52414e4745815250906106d25760405162461bcd60e51b81526004016101c1919061146a565b5060005b8251811015610ed65780158061072f5750826106f360018361152d565b81518110610703576107036115a5565b602002602001015160000151838281518110610721576107216115a5565b602002602001015160000151115b6040518060400160405280601c81526020017f4e4f44455f4f50455241544f52535f49535f4e4f545f534f5254454400000000815250906107835760405162461bcd60e51b81526004016101c1919061146a565b506000838281518110610798576107986115a5565b602002602001015160400151905060008260016107b591906114d7565b90505b8451811015610859578481815181106107d3576107d36115a5565b6020026020010151604001516001600160a01b0316826001600160a01b031614156040518060400160405280601f81526020017f4d414e414745525f4144445245535345535f4841535f4455504c494341544500815250906108485760405162461bcd60e51b81526004016101c1919061146a565b5061085281611574565b90506107b8565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166315949ed785848151811061089b5761089b6115a5565b6020026020010151602001517f00000000000000000000000000000000000000000000000000000000000000006000805160206115ea8339815191526040518463ffffffff1660e01b81526004016108f593929190611385565b60206040518083038186803b15801561090d57600080fd5b505afa158015610921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109459190611234565b600114604051806040016040528060178152602001764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b815250906109965760405162461bcd60e51b81526004016101c1919061146a565b5060008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a03c58328887815181106109dd576109dd6115a5565b602090810291909101810151015160405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f000000000000000000000000000000000000000000000000000000000000000090911660248201526000805160206115ea83398151915260448201526000606482015260840160606040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa6919061124d565b9250925092508260ff16600014604051806040016040528060178152602001764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b81525090610b015760405162461bcd60e51b81526004016101c1919061146a565b506040805180820190915260178152764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b6020820152600160ff841614610b545760405162461bcd60e51b81526004016101c1919061146a565b50868581518110610b6757610b676115a5565b602002602001015160000151816001600160f01b031614604051806040016040528060178152602001764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b81525090610bcc5760405162461bcd60e51b81526004016101c1919061146a565b5060006001600160a01b0316878681518110610bea57610bea6115a5565b6020026020010151604001516001600160a01b03161415604051806040016040528060148152602001735a45524f5f4d414e414745525f4144445245535360601b81525090610c4c5760405162461bcd60e51b81526004016101c1919061146a565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636d6712d8888781518110610c8e57610c8e6115a5565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006000805160206115ea8339815191526040518463ffffffff1660e01b8152600401610ce893929190611385565b60206040518083038186803b158015610d0057600080fd5b505afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3891906111ce565b6040805180820190915260188152774d414e414745525f414c52454144595f4841535f524f4c4560401b60208201529015610d865760405162461bcd60e51b81526004016101c1919061146a565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166315949ed7888781518110610dc857610dc86115a5565b6020026020010151604001517f00000000000000000000000000000000000000000000000000000000000000006000805160206115ea8339815191526040518463ffffffff1660e01b8152600401610e2293929190611385565b60206040518083038186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190611234565b6040805180820190915260188152774d414e414745525f414c52454144595f4841535f524f4c4560401b60208201529015610ec05760405162461bcd60e51b81526004016101c1919061146a565b505050505080610ecf90611574565b90506106d6565b505050565b60608151835114610f205760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064016101c1565b60005b8351811015610fdc578185848381518110610f4057610f406115a5565b6020026020010151516004610f5591906114ef565b868481518110610f6757610f676115a5565b6020026020010151868581518110610f8157610f816115a5565b6020026020010151604051602001610f9c94939291906112cd565b60408051601f1981840301815290829052610fba9291602001611356565b604051602081830303815290604052915080610fd590611574565b9050610f23565b50600160e01b81604051602001610ff4929190611325565b60405160208183030381529060405290509392505050565b600082601f83011261101d57600080fd5b813567ffffffffffffffff811115611037576110376115bb565b61104a601f8201601f19166020016114a6565b81815284602083860101111561105f57600080fd5b816020850160208301376000918101602001919091529392505050565b805160ff8116811461108d57600080fd5b919050565b600080604083850312156110a557600080fd5b82356110b0816115d1565b9150602083013567ffffffffffffffff8111156110cc57600080fd5b6110d88582860161100c565b9150509250929050565b600060208083850312156110f557600080fd5b825167ffffffffffffffff8082111561110d57600080fd5b818501915085601f83011261112157600080fd5b815181811115611133576111336115bb565b611141848260051b016114a6565b81815284810192508385016060808402860187018a101561116157600080fd5b60009550855b848110156111bf5781838c03121561117d578687fd5b61118561147d565b8351815288840151611196816115d1565b818a01526040848101516111a9816115d1565b9082015286529487019491810191600101611167565b50919998505050505050505050565b6000602082840312156111e057600080fd5b815180151581146111f057600080fd5b9392505050565b60006020828403121561120957600080fd5b813567ffffffffffffffff81111561122057600080fd5b61122c8482850161100c565b949350505050565b60006020828403121561124657600080fd5b5051919050565b60008060006060848603121561126257600080fd5b61126b8461107c565b92506112796020850161107c565b60408501519092506001600160f01b038116811461129657600080fd5b809150509250925092565b600081518084526112b9816020860160208601611544565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061131581601c850160208701611544565b91909101601c0195945050505050565b6001600160e01b0319831681528151600090611348816004850160208701611544565b919091016004019392505050565b60008351611368818460208801611544565b83519083019061137c818360208801611544565b01949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020808301919091526040820184905260806060830181905283519083018190526000918481019160a085019190845b818110156111bf578451845293820193928201926001016113e8565b602080825282518282018190526000919060409081850190868401855b8281101561145d57815180518552868101516001600160a01b039081168887015290860151168585015260609093019290850190600101611421565b5091979650505050505050565b6020815260006111f060208301846112a1565b6040516060810167ffffffffffffffff811182821017156114a0576114a06115bb565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156114cf576114cf6115bb565b604052919050565b600082198211156114ea576114ea61158f565b500190565b600063ffffffff80831681851680830382111561137c5761137c61158f565b60008160001904831182151516156115285761152861158f565b500290565b60008282101561153f5761153f61158f565b500390565b60005b8381101561155f578181015183820152602001611547565b8381111561156e576000848401525b50505050565b60006000198214156115885761158861158f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146115e657600080fd5b5056fe75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621eea26469706673582212201bc1ad8dc31e83937df4f519d648e7155ea87286e01a278ba2c574786cdb13c564736f6c6343000806003300000000000000000000000008637515e85a4633e23dfc7861e2a9f53af640f7000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4330000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063227242b51461005c578063268f0760146100a0578063de287359146100c7578063ecf7c690146100ee578063fea21c9c1461010e575b600080fd5b6100837f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b43381565b6040516001600160a01b0390911681526020015b60405180910390f35b6100837f00000000000000000000000008637515e85a4633e23dfc7861e2a9f53af640f781565b6100837f0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb81565b6101016100fc3660046111f7565b61012e565b6040516100979190611404565b61012161011c366004611092565b61013f565b604051610097919061146a565b60606101398261055b565b92915050565b6060827f00000000000000000000000008637515e85a4633e23dfc7861e2a9f53af640f76001600160a01b0316816001600160a01b0316146040518060400160405280601381526020017221a0a62622a92fa4a9afa327a92124a22222a760691b815250906101ca5760405162461bcd60e51b81526004016101c1919061146a565b60405180910390fd5b5060006101d68461055b565b90506000815160026101e8919061150e565b67ffffffffffffffff811115610200576102006115bb565b604051908082528060200260200182016040528015610229578160200160208202803683370190505b50905060008251600261023c919061150e565b67ffffffffffffffff811115610254576102546115bb565b60405190808252806020026020018201604052801561028757816020015b60608152602001906001900390816102725790505b50905061029383610571565b60005b8351811015610524577f9d0effdb70cfc78561b926c15125dc0b3872ab042845fe2f01b4e4285852ecc7836102cc83600261150e565b815181106102dc576102dc6115a5565b60200260200101906001600160e01b03191690816001600160e01b03191681525050838181518110610310576103106115a5565b6020026020010151602001517f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4336000805160206115ea83398151915260405160200161035e93929190611385565b60408051601f198184030181529190528261037a83600261150e565b8151811061038a5761038a6115a5565b60209081029190910101526040805160018082528183019092526000918160200160208202803683370190505090508482815181106103cb576103cb6115a5565b602002602001015160000151600160f01b6103e691906114d7565b816000815181106103f9576103f96115a5565b60209081029190910101527f6815c9928a4e5d6b2777b20d8d9e9d1dd5492daa3fa5ec5aaca0a739383ef6fb8461043184600261150e565b61043c9060016114d7565b8151811061044c5761044c6115a5565b60200260200101906001600160e01b03191690816001600160e01b03191681525050848281518110610480576104806115a5565b6020026020010151604001517f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4336000805160206115ea833981519152836040516020016104d094939291906113a9565b60408051601f19818403018152919052836104ec84600261150e565b6104f79060016114d7565b81518110610507576105076115a5565b6020026020010181905250508061051d90611574565b9050610296565b506105507f0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb8383610edb565b979650505050505050565b60608180602001905181019061013991906110e2565b60007f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4336001600160a01b031663a70c70e46040518163ffffffff1660e01b815260040160206040518083038186803b1580156105cc57600080fd5b505afa1580156105e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106049190611234565b905060008251116040518060400160405280600e81526020016d454d5054595f43414c4c4441544160901b815250906106505760405162461bcd60e51b81526004016101c1919061146a565b50808260018451610661919061152d565b81518110610671576106716115a5565b602002602001015160000151106040518060400160405280602081526020017f4e4f44455f4f50455241544f525f494e4445585f4f55545f4f465f52414e4745815250906106d25760405162461bcd60e51b81526004016101c1919061146a565b5060005b8251811015610ed65780158061072f5750826106f360018361152d565b81518110610703576107036115a5565b602002602001015160000151838281518110610721576107216115a5565b602002602001015160000151115b6040518060400160405280601c81526020017f4e4f44455f4f50455241544f52535f49535f4e4f545f534f5254454400000000815250906107835760405162461bcd60e51b81526004016101c1919061146a565b506000838281518110610798576107986115a5565b602002602001015160400151905060008260016107b591906114d7565b90505b8451811015610859578481815181106107d3576107d36115a5565b6020026020010151604001516001600160a01b0316826001600160a01b031614156040518060400160405280601f81526020017f4d414e414745525f4144445245535345535f4841535f4455504c494341544500815250906108485760405162461bcd60e51b81526004016101c1919061146a565b5061085281611574565b90506107b8565b507f0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb6001600160a01b03166315949ed785848151811061089b5761089b6115a5565b6020026020010151602001517f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4336000805160206115ea8339815191526040518463ffffffff1660e01b81526004016108f593929190611385565b60206040518083038186803b15801561090d57600080fd5b505afa158015610921573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109459190611234565b600114604051806040016040528060178152602001764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b815250906109965760405162461bcd60e51b81526004016101c1919061146a565b5060008060007f0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb6001600160a01b031663a03c58328887815181106109dd576109dd6115a5565b602090810291909101810151015160405160e083901b6001600160e01b03191681526001600160a01b0391821660048201527f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b43390911660248201526000805160206115ea83398151915260448201526000606482015260840160606040518083038186803b158015610a6e57600080fd5b505afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa6919061124d565b9250925092508260ff16600014604051806040016040528060178152602001764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b81525090610b015760405162461bcd60e51b81526004016101c1919061146a565b506040805180820190915260178152764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b6020820152600160ff841614610b545760405162461bcd60e51b81526004016101c1919061146a565b50868581518110610b6757610b676115a5565b602002602001015160000151816001600160f01b031614604051806040016040528060178152602001764f4c445f4d414e414745525f4841535f4e4f5f524f4c4560481b81525090610bcc5760405162461bcd60e51b81526004016101c1919061146a565b5060006001600160a01b0316878681518110610bea57610bea6115a5565b6020026020010151604001516001600160a01b03161415604051806040016040528060148152602001735a45524f5f4d414e414745525f4144445245535360601b81525090610c4c5760405162461bcd60e51b81526004016101c1919061146a565b507f0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb6001600160a01b0316636d6712d8888781518110610c8e57610c8e6115a5565b6020026020010151604001517f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4336000805160206115ea8339815191526040518463ffffffff1660e01b8152600401610ce893929190611385565b60206040518083038186803b158015610d0057600080fd5b505afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3891906111ce565b6040805180820190915260188152774d414e414745525f414c52454144595f4841535f524f4c4560401b60208201529015610d865760405162461bcd60e51b81526004016101c1919061146a565b507f0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb6001600160a01b03166315949ed7888781518110610dc857610dc86115a5565b6020026020010151604001517f000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4336000805160206115ea8339815191526040518463ffffffff1660e01b8152600401610e2293929190611385565b60206040518083038186803b158015610e3a57600080fd5b505afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190611234565b6040805180820190915260188152774d414e414745525f414c52454144595f4841535f524f4c4560401b60208201529015610ec05760405162461bcd60e51b81526004016101c1919061146a565b505050505080610ecf90611574565b90506106d6565b505050565b60608151835114610f205760405162461bcd60e51b815260206004820152600f60248201526e0988a9c8ea890be9a92a69a82a8869608b1b60448201526064016101c1565b60005b8351811015610fdc578185848381518110610f4057610f406115a5565b6020026020010151516004610f5591906114ef565b868481518110610f6757610f676115a5565b6020026020010151868581518110610f8157610f816115a5565b6020026020010151604051602001610f9c94939291906112cd565b60408051601f1981840301815290829052610fba9291602001611356565b604051602081830303815290604052915080610fd590611574565b9050610f23565b50600160e01b81604051602001610ff4929190611325565b60405160208183030381529060405290509392505050565b600082601f83011261101d57600080fd5b813567ffffffffffffffff811115611037576110376115bb565b61104a601f8201601f19166020016114a6565b81815284602083860101111561105f57600080fd5b816020850160208301376000918101602001919091529392505050565b805160ff8116811461108d57600080fd5b919050565b600080604083850312156110a557600080fd5b82356110b0816115d1565b9150602083013567ffffffffffffffff8111156110cc57600080fd5b6110d88582860161100c565b9150509250929050565b600060208083850312156110f557600080fd5b825167ffffffffffffffff8082111561110d57600080fd5b818501915085601f83011261112157600080fd5b815181811115611133576111336115bb565b611141848260051b016114a6565b81815284810192508385016060808402860187018a101561116157600080fd5b60009550855b848110156111bf5781838c03121561117d578687fd5b61118561147d565b8351815288840151611196816115d1565b818a01526040848101516111a9816115d1565b9082015286529487019491810191600101611167565b50919998505050505050505050565b6000602082840312156111e057600080fd5b815180151581146111f057600080fd5b9392505050565b60006020828403121561120957600080fd5b813567ffffffffffffffff81111561122057600080fd5b61122c8482850161100c565b949350505050565b60006020828403121561124657600080fd5b5051919050565b60008060006060848603121561126257600080fd5b61126b8461107c565b92506112796020850161107c565b60408501519092506001600160f01b038116811461129657600080fd5b809150509250925092565b600081518084526112b9816020860160208601611544565b601f01601f19169290920160200192915050565b6bffffffffffffffffffffffff19606086901b1681526001600160e01b031960e085901b8116601483015283166018820152815160009061131581601c850160208701611544565b91909101601c0195945050505050565b6001600160e01b0319831681528151600090611348816004850160208701611544565b919091016004019392505050565b60008351611368818460208801611544565b83519083019061137c818360208801611544565b01949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03858116825284166020808301919091526040820184905260806060830181905283519083018190526000918481019160a085019190845b818110156111bf578451845293820193928201926001016113e8565b602080825282518282018190526000919060409081850190868401855b8281101561145d57815180518552868101516001600160a01b039081168887015290860151168585015260609093019290850190600101611421565b5091979650505050505050565b6020815260006111f060208301846112a1565b6040516060810167ffffffffffffffff811182821017156114a0576114a06115bb565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156114cf576114cf6115bb565b604052919050565b600082198211156114ea576114ea61158f565b500190565b600063ffffffff80831681851680830382111561137c5761137c61158f565b60008160001904831182151516156115285761152861158f565b500290565b60008282101561153f5761153f61158f565b500390565b60005b8381101561155f578181015183820152602001611547565b8381111561156e576000848401525b50505050565b60006000198214156115885761158861158f565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146115e657600080fd5b5056fe75abc64490e17b40ea1e66691c3eb493647b24430b358bd87ec3e5127f1621eea26469706673582212201bc1ad8dc31e83937df4f519d648e7155ea87286e01a278ba2c574786cdb13c564736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000008637515e85a4633e23dfc7861e2a9f53af640f7000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b4330000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb
-----Decoded View---------------
Arg [0] : _trustedCaller (address): 0x08637515E85A4633E23dfc7861e2A9f53af640f7
Arg [1] : _nodeOperatorsRegistry (address): 0xaE7B191A31f627b4eB1d4DaC64eaB9976995b433
Arg [2] : _acl (address): 0x9895F0F17cc1d1891b6f18ee0b483B6f221b37Bb
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000008637515e85a4633e23dfc7861e2a9f53af640f7
Arg [1] : 000000000000000000000000ae7b191a31f627b4eb1d4dac64eab9976995b433
Arg [2] : 0000000000000000000000009895f0f17cc1d1891b6f18ee0b483b6f221b37bb
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.