UNPKG

@mantleio/contracts

Version:
264 lines 29.4 kB
{ "address": "0xFe92aC303841f9eE446828E5215aFFb044937D0D", "abi": [ { "inputs": [ { "internalType": "contract Lib_AddressManager", "name": "_manager", "type": "address" }, { "internalType": "address", "name": "_finalOwner", "type": "address" }, { "internalType": "string[]", "name": "_names", "type": "string[]" }, { "internalType": "address[]", "name": "_addresses", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "finalOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNamedAddresses", "outputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "addr", "type": "address" } ], "internalType": "struct AddressDictator.NamedAddress[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "manager", "outputs": [ { "internalType": "contract Lib_AddressManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "returnOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setAddresses", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ], "transactionHash": "0x0d10d5917cbbceb59999b424b70bad16ff053ca2c7dc74e83417f064440af45b", "receipt": { "to": null, "from": "0x2A2954F3989a83Cc43DD58B0f038D5F276f21333", "contractAddress": "0xFe92aC303841f9eE446828E5215aFFb044937D0D", "transactionIndex": 20, "gasUsed": "1400441", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "blockHash": "0x1a5a2a75ab088e5bb2f849643f75d0fcca3040fefce76024bafc63a61a9301a8", "transactionHash": "0x0d10d5917cbbceb59999b424b70bad16ff053ca2c7dc74e83417f064440af45b", "logs": [], "blockNumber": 17578015, "cumulativeGasUsed": "2645445", "status": 1, "byzantium": true }, "args": [ "0x6968f3F16C3e64003F02E121cf0D5CCBf5625a42", "0x4e59e778a0fb77fBb305637435C62FaeD9aED40f", [ "ChainStorageContainer-CTC-batches", "ChainStorageContainer-SCC-batches", "CanonicalTransactionChain", "StateCommitmentChain", "BondManager", "BVM_L1CrossDomainMessenger", "Proxy__BVM_L1CrossDomainMessenger", "TssGroupManager", "TssStakingSlashing", "Proxy__BVM_L1StandardBridge", "Proxy__TSS_GroupManager", "Proxy__TSS_StakingSlashing", "L2CrossDomainMessenger", "BVM_Sequencer", "BVM_Proposer", "BVM_Rolluper", "L1_MantleAddress" ], [ "0x5Dd48eF85B99E3e3d711Ca8B41cBC07dA1677F3E", "0xd3f0BD982D72e28cccc69e0A9dA439e9D587b3bD", "0x291dc3819b863e19b0a9b9809F8025d2EB4aaE93", "0x89E9D387555AF0cDE22cb98833Bae40d640AD7fa", "0x31aBe1c466C2A8b95fd84258dD1471472979B650", "0x4692363048d0F32a2dE7816860D48fff0c61B24B", "0x676A795fe6E43C17c668de16730c3F690FEB7120", "0xF7576237087F808eB39531cA490b4F8eFd4a0c69", "0x09b276F9EcB83Fb6a37970e655863B04143Dc431", "0x95fC37A27a2f68e3A647CDc081F0A89bb47c3012", "0x399ca67660B79F7aA8A7Efd5BEF9836A4c19CACF", "0x78CF48880E9e1b3ab209779c0D8A76f611e53e81", "0x4200000000000000000000000000000000000007", "0x2F6AFE2E3feA041b892a6e240Fd1A0E5b51e8376", "0x5a021DC06A9630bb56099b8aEdfaDC2dEa7eB317", "0x6667961f5e9C98A76a48767522150889703Ed77D", "0x3c3a81e81dc49a522a592e7622a7e711c06bf354" ] ], "numDeployments": 1, "solcInputHash": "8712370f05889c79e0e075e92e6722c3", "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract Lib_AddressManager\",\"name\":\"_manager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_finalOwner\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"_names\",\"type\":\"string[]\"},{\"internalType\":\"address[]\",\"name\":\"_addresses\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"finalOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNamedAddresses\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"internalType\":\"struct AddressDictator.NamedAddress[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manager\",\"outputs\":[{\"internalType\":\"contract Lib_AddressManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"returnOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The AddressDictator (glory to Arstotzka) is a contract that allows us to safely manipulate many different addresses in the AddressManager without transferring ownership of the AddressManager to a hot wallet or hardware wallet.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_addresses\":\"Array of addresses to associate with the name.\",\"_finalOwner\":\"Address to transfer AddressManager ownership to afterwards.\",\"_manager\":\"Address of the AddressManager contract.\",\"_names\":\"Array of names to associate an address with.\"}}},\"title\":\"AddressDictator\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getNamedAddresses()\":{\"notice\":\"Returns the full namedAddresses array.\"},\"returnOwnership()\":{\"notice\":\"Transfers ownership of this contract to the finalOwner. Only callable by the Final Owner, which is intended to be our multisig. This function shouldn't be necessary, but it gives a sense of reassurance that we can recover if something really surprising goes wrong.\"},\"setAddresses()\":{\"notice\":\"Called to finalize the transfer, this function is callable by anyone, but will only result in an upgrade if this contract is the owner Address Manager.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/deployment/AddressDictator.sol\":\"AddressDictator\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _setOwner(_msgSender());\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _setOwner(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _setOwner(newOwner);\\n }\\n\\n function _setOwner(address newOwner) private {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x6bb804a310218875e89d12c053e94a13a4607cdf7cc2052f3e52bd32a0dc50a1\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x90565a39ae45c80f0468dc96c7b20d0afc3055f344c8203a0c9258239f350b9f\",\"license\":\"MIT\"},\"contracts/L1/deployment/AddressDictator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\nimport { Lib_AddressManager } from \\\"../../libraries/resolver/Lib_AddressManager.sol\\\";\\n\\n/**\\n * @title AddressDictator\\n * @dev The AddressDictator (glory to Arstotzka) is a contract that allows us to safely manipulate\\n * many different addresses in the AddressManager without transferring ownership of the\\n * AddressManager to a hot wallet or hardware wallet.\\n */\\ncontract AddressDictator {\\n /*********\\n * Types *\\n *********/\\n\\n struct NamedAddress {\\n string name;\\n address addr;\\n }\\n\\n /*************\\n * Variables *\\n *************/\\n\\n Lib_AddressManager public manager;\\n address public finalOwner;\\n NamedAddress[] namedAddresses;\\n\\n /***************\\n * Constructor *\\n ***************/\\n\\n /**\\n * @param _manager Address of the AddressManager contract.\\n * @param _finalOwner Address to transfer AddressManager ownership to afterwards.\\n * @param _names Array of names to associate an address with.\\n * @param _addresses Array of addresses to associate with the name.\\n */\\n constructor(\\n Lib_AddressManager _manager,\\n address _finalOwner,\\n string[] memory _names,\\n address[] memory _addresses\\n ) {\\n manager = _manager;\\n finalOwner = _finalOwner;\\n require(\\n _names.length == _addresses.length,\\n \\\"AddressDictator: Must provide an equal number of names and addresses.\\\"\\n );\\n for (uint256 i = 0; i < _names.length; i++) {\\n namedAddresses.push(NamedAddress({ name: _names[i], addr: _addresses[i] }));\\n }\\n }\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Called to finalize the transfer, this function is callable by anyone, but will only result in\\n * an upgrade if this contract is the owner Address Manager.\\n */\\n // slither-disable-next-line calls-loop\\n function setAddresses() external {\\n for (uint256 i = 0; i < namedAddresses.length; i++) {\\n manager.setAddress(namedAddresses[i].name, namedAddresses[i].addr);\\n }\\n // note that this will revert if _finalOwner == currentOwner\\n manager.transferOwnership(finalOwner);\\n }\\n\\n /**\\n * Transfers ownership of this contract to the finalOwner.\\n * Only callable by the Final Owner, which is intended to be our multisig.\\n * This function shouldn't be necessary, but it gives a sense of reassurance that we can recover\\n * if something really surprising goes wrong.\\n */\\n function returnOwnership() external {\\n require(msg.sender == finalOwner, \\\"AddressDictator: only callable by finalOwner\\\");\\n manager.transferOwnership(finalOwner);\\n }\\n\\n /******************\\n * View Functions *\\n ******************/\\n\\n /**\\n * Returns the full namedAddresses array.\\n */\\n function getNamedAddresses() external view returns (NamedAddress[] memory) {\\n return namedAddresses;\\n }\\n}\\n\",\"keccak256\":\"0xd67a7b7ca6d5554bca411d64c6b2d633dfe62ab74480494b99cefff2c672d06a\",\"license\":\"MIT\"},\"contracts/libraries/resolver/Lib_AddressManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/* External Imports */\\nimport { Ownable } from \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @title Lib_AddressManager\\n */\\ncontract Lib_AddressManager is Ownable {\\n /**********\\n * Events *\\n **********/\\n\\n event AddressSet(string indexed _name, address _newAddress, address _oldAddress);\\n\\n /*************\\n * Variables *\\n *************/\\n\\n mapping(bytes32 => address) private addresses;\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Changes the address associated with a particular name.\\n * @param _name String name to associate an address with.\\n * @param _address Address to associate with the name.\\n */\\n function setAddress(string memory _name, address _address) external onlyOwner {\\n bytes32 nameHash = _getNameHash(_name);\\n address oldAddress = addresses[nameHash];\\n addresses[nameHash] = _address;\\n\\n emit AddressSet(_name, _address, oldAddress);\\n }\\n\\n /**\\n * Retrieves the address associated with a given name.\\n * @param _name Name to retrieve an address for.\\n * @return Address associated with the given name.\\n */\\n function getAddress(string memory _name) external view returns (address) {\\n return addresses[_getNameHash(_name)];\\n }\\n\\n /**********************\\n * Internal Functions *\\n **********************/\\n\\n /**\\n * Computes the hash of a name.\\n * @param _name Name to compute a hash for.\\n * @return Hash of the given name.\\n */\\n function _getNameHash(string memory _name) internal pure returns (bytes32) {\\n return keccak256(abi.encodePacked(_name));\\n }\\n}\\n\",\"keccak256\":\"0xcde9b29429d512c549f7c1b8a033f161fa71c18cda08b241748663854196ae14\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x60806040523480156200001157600080fd5b5060405162000b6e38038062000b6e83398101604081905262000034916200037a565b600080546001600160a01b038087166001600160a01b03199283161790925560018054928616929091169190911790558051825114620000ee5760405162461bcd60e51b815260206004820152604560248201527f416464726573734469637461746f723a204d7573742070726f7669646520616e60448201527f20657175616c206e756d626572206f66206e616d657320616e6420616464726560648201526439b9b2b99760d91b608482015260a40160405180910390fd5b60005b8251811015620001c357600260405180604001604052808584815181106200011d576200011d62000505565b602002602001015181526020018484815181106200013f576200013f62000505565b6020908102919091018101516001600160a01b0316909152825460018101845560009384529281902082518051939460020290910192620001849284920190620001ce565b5060209190910151600190910180546001600160a01b0319166001600160a01b0390921691909117905580620001ba816200051b565b915050620000f1565b505050505062000582565b828054620001dc9062000545565b90600052602060002090601f0160209004810192826200020057600085556200024b565b82601f106200021b57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024b5782518255916020019190600101906200022e565b50620002599291506200025d565b5090565b5b808211156200025957600081556001016200025e565b6001600160a01b03811681146200028a57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002ce57620002ce6200028d565b604052919050565b60006001600160401b03821115620002f257620002f26200028d565b5060051b60200190565b600082601f8301126200030e57600080fd5b81516020620003276200032183620002d6565b620002a3565b82815260059290921b840181019181810190868411156200034757600080fd5b8286015b848110156200036f578051620003618162000274565b83529183019183016200034b565b509695505050505050565b600080600080608085870312156200039157600080fd5b84516200039e8162000274565b80945050602080860151620003b38162000274565b60408701519094506001600160401b0380821115620003d157600080fd5b818801915088601f830112620003e657600080fd5b8151620003f76200032182620002d6565b81815260059190911b8301840190848101908b8311156200041757600080fd5b8585015b83811015620004ce57805185811115620004355760008081fd5b8601603f81018e13620004485760008081fd5b87810151868111156200045f576200045f6200028d565b62000473601f8201601f19168a01620002a3565b8181528f60408385010111156200048a5760008081fd5b60005b82811015620004ab57838101604001518282018c01528a016200048d565b82811115620004bd5760008b84840101525b50855250509186019186016200041b565b5060608b01519097509450505080831115620004e957600080fd5b5050620004f987828801620002fc565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200053e57634e487b7160e01b600052601160045260246000fd5b5060010190565b600181811c908216806200055a57607f821691505b602082108114156200057c57634e487b7160e01b600052602260045260246000fd5b50919050565b6105dc80620005926000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806317ad94ec1461005c578063297d1a341461008c5780633ccad6fc14610096578063481c6a75146100ab578063bc3a429b146100be575b600080fd5b60015461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100946100c6565b005b61009e61019d565b60405161008391906103b5565b60005461006f906001600160a01b031681565b6100946102a1565b6001546001600160a01b031633146101395760405162461bcd60e51b815260206004820152602c60248201527f416464726573734469637461746f723a206f6e6c792063616c6c61626c65206260448201526b3c903334b730b627bbb732b960a11b606482015260840160405180910390fd5b60005460015460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b906024015b600060405180830381600087803b15801561018357600080fd5b505af1158015610197573d6000803e3d6000fd5b50505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561029857838290600052602060002090600202016040518060400160405290816000820180546101f49061046b565b80601f01602080910402602001604051908101604052809291908181526020018280546102209061046b565b801561026d5780601f106102425761010080835404028352916020019161026d565b820191906000526020600020905b81548152906001019060200180831161025057829003601f168201915b50505091835250506001918201546001600160a01b03166020918201529183529290920191016101c1565b50505050905090565b60005b60025481101561038057600054600280546001600160a01b0390921691639b2ea4bd9190849081106102d8576102d86104a6565b9060005260206000209060020201600001600284815481106102fc576102fc6104a6565b60009182526020909120600160029092020101546040516001600160e01b031960e085901b16815261033b92916001600160a01b0316906004016104bc565b600060405180830381600087803b15801561035557600080fd5b505af1158015610369573d6000803e3d6000fd5b5050505080806103789061057d565b9150506102a4565b5060005460015460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401610169565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561045c57603f198a8503018652825180518886528051808a880152845b8181101561041a578281018c0151888201606001528b016103fe565b8181111561042b57856060838a0101525b50918a01516001600160a01b0316868b01525095880195601f01601f191690930160600192918701916001016103dd565b50919998505050505050505050565b600181811c9082168061047f57607f821691505b602082108114156104a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60408152600080845481600182811c9150808316806104dc57607f831692505b60208084108214156104fc57634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561051b576001811461052c57610557565b60ff19871682528282019750610557565b60008c81526020902060005b8781101561055157815484820152908601908401610538565b83019850505b50508596506105708189018a6001600160a01b03169052565b5050505050509392505050565b600060001982141561059f57634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212205f127e3400d11d85cdbf39d44000cd20200dbfc19abd2d52085b718bf2d606ee64736f6c63430008090033", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c806317ad94ec1461005c578063297d1a341461008c5780633ccad6fc14610096578063481c6a75146100ab578063bc3a429b146100be575b600080fd5b60015461006f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6100946100c6565b005b61009e61019d565b60405161008391906103b5565b60005461006f906001600160a01b031681565b6100946102a1565b6001546001600160a01b031633146101395760405162461bcd60e51b815260206004820152602c60248201527f416464726573734469637461746f723a206f6e6c792063616c6c61626c65206260448201526b3c903334b730b627bbb732b960a11b606482015260840160405180910390fd5b60005460015460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b906024015b600060405180830381600087803b15801561018357600080fd5b505af1158015610197573d6000803e3d6000fd5b50505050565b60606002805480602002602001604051908101604052809291908181526020016000905b8282101561029857838290600052602060002090600202016040518060400160405290816000820180546101f49061046b565b80601f01602080910402602001604051908101604052809291908181526020018280546102209061046b565b801561026d5780601f106102425761010080835404028352916020019161026d565b820191906000526020600020905b81548152906001019060200180831161025057829003601f168201915b50505091835250506001918201546001600160a01b03166020918201529183529290920191016101c1565b50505050905090565b60005b60025481101561038057600054600280546001600160a01b0390921691639b2ea4bd9190849081106102d8576102d86104a6565b9060005260206000209060020201600001600284815481106102fc576102fc6104a6565b60009182526020909120600160029092020101546040516001600160e01b031960e085901b16815261033b92916001600160a01b0316906004016104bc565b600060405180830381600087803b15801561035557600080fd5b505af1158015610369573d6000803e3d6000fd5b5050505080806103789061057d565b9150506102a4565b5060005460015460405163f2fde38b60e01b81526001600160a01b03918216600482015291169063f2fde38b90602401610169565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561045c57603f198a8503018652825180518886528051808a880152845b8181101561041a578281018c0151888201606001528b016103fe565b8181111561042b57856060838a0101525b50918a01516001600160a01b0316868b01525095880195601f01601f191690930160600192918701916001016103dd565b50919998505050505050505050565b600181811c9082168061047f57607f821691505b602082108114156104a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b60408152600080845481600182811c9150808316806104dc57607f831692505b60208084108214156104fc57634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561051b576001811461052c57610557565b60ff19871682528282019750610557565b60008c81526020902060005b8781101561055157815484820152908601908401610538565b83019850505b50508596506105708189018a6001600160a01b03169052565b5050505050509392505050565b600060001982141561059f57634e487b7160e01b600052601160045260246000fd5b506001019056fea26469706673582212205f127e3400d11d85cdbf39d44000cd20200dbfc19abd2d52085b718bf2d606ee64736f6c63430008090033", "devdoc": { "details": "The AddressDictator (glory to Arstotzka) is a contract that allows us to safely manipulate many different addresses in the AddressManager without transferring ownership of the AddressManager to a hot wallet or hardware wallet.", "kind": "dev", "methods": { "constructor": { "params": { "_addresses": "Array of addresses to associate with the name.", "_finalOwner": "Address to transfer AddressManager ownership to afterwards.", "_manager": "Address of the AddressManager contract.", "_names": "Array of names to associate an address with." } } }, "title": "AddressDictator", "version": 1 }, "userdoc": { "kind": "user", "methods": { "getNamedAddresses()": { "notice": "Returns the full namedAddresses array." }, "returnOwnership()": { "notice": "Transfers ownership of this contract to the finalOwner. Only callable by the Final Owner, which is intended to be our multisig. This function shouldn't be necessary, but it gives a sense of reassurance that we can recover if something really surprising goes wrong." }, "setAddresses()": { "notice": "Called to finalize the transfer, this function is callable by anyone, but will only result in an upgrade if this contract is the owner Address Manager." } }, "version": 1 }, "storageLayout": { "storage": [ { "astId": 13074, "contract": "contracts/L1/deployment/AddressDictator.sol:AddressDictator", "label": "manager", "offset": 0, "slot": "0", "type": "t_contract(Lib_AddressManager)52614" }, { "astId": 13076, "contract": "contracts/L1/deployment/AddressDictator.sol:AddressDictator", "label": "finalOwner", "offset": 0, "slot": "1", "type": "t_address" }, { "astId": 13080, "contract": "contracts/L1/deployment/AddressDictator.sol:AddressDictator", "label": "namedAddresses", "offset": 0, "slot": "2", "type": "t_array(t_struct(NamedAddress)13071_storage)dyn_storage" } ], "types": { "t_address": { "encoding": "inplace", "label": "address", "numberOfBytes": "20" }, "t_array(t_struct(NamedAddress)13071_storage)dyn_storage": { "base": "t_struct(NamedAddress)13071_storage", "encoding": "dynamic_array", "label": "struct AddressDictator.NamedAddress[]", "numberOfBytes": "32" }, "t_contract(Lib_AddressManager)52614": { "encoding": "inplace", "label": "contract Lib_AddressManager", "numberOfBytes": "20" }, "t_string_storage": { "encoding": "bytes", "label": "string", "numberOfBytes": "32" }, "t_struct(NamedAddress)13071_storage": { "encoding": "inplace", "label": "struct AddressDictator.NamedAddress", "members": [ { "astId": 13068, "contract": "contracts/L1/deployment/AddressDictator.sol:AddressDictator", "label": "name", "offset": 0, "slot": "0", "type": "t_string_storage" }, { "astId": 13070, "contract": "contracts/L1/deployment/AddressDictator.sol:AddressDictator", "label": "addr", "offset": 0, "slot": "1", "type": "t_address" } ], "numberOfBytes": "64" } } } }