@mantleio/contracts
Version:
[Mantle] L1 and L2 smart contracts for Mantle
264 lines • 29.4 kB
JSON
{
"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"
}
}
}
}