Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- Registry
- Optimization enabled
- true
- Compiler version
- v0.8.13+commit.abaa5c0e
- Optimization runs
- 200
- Verified at
- 2022-03-23T10:56:58.515808Z
Constructor Arguments
0000000000000000000000009a53af4309f6bb38e84c1ae2d36ee429582b4fc4000000000000000000000000000000000000000000000000000000312e322e30
Arg [0] (address) : 0x9a53af4309f6bb38e84c1ae2d36ee429582b4fc4
Arg [1] (bytes32) : 000000000000000000000000000000000000000000000000000000312e322e30
Registry.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "RegistryStorageModel.sol";
import "BaseModuleStorage.sol";
contract Registry is RegistryStorageModel, BaseModuleStorage {
bytes32 public constant NAME = "Registry";
constructor(address _controller, bytes32 _initialRelease) {
// Init
release = _initialRelease;
contracts[release]["InstanceOperatorService"] = msg.sender;
contractNames[release].push("InstanceOperatorService");
contractsInRelease[release] = 1;
_assignController(_controller);
// register the deployment block for reading logs
startBlock = block.number;
}
function assignController(address _controller) external {
// todo: use onlyInstanceOperator modifier
require(
msg.sender == contracts[release]["InstanceOperator"],
"ERROR:REG-001:NOT_AUTHORIZED"
);
_assignController(_controller);
}
}
IRegistry.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
interface IRegistry {
event LogContractRegistered(
bytes32 release,
bytes32 contractName,
address contractAddress,
bool isNew
);
event LogContractDeregistered(bytes32 release, bytes32 contractName);
event LogReleasePrepared(bytes32 release);
}
RegistryStorageModel.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "IRegistry.sol";
contract RegistryStorageModel is IRegistry {
/**
* @dev Current release
* We use semantic versioning.
*/
bytes32 public release;
uint256 public startBlock;
/**
* @dev Save number of items to iterate through
* Currently we have < 20 contracts.
*/
uint256 public maxContracts = 100;
// release => contract name => contract address
mapping(bytes32 => mapping(bytes32 => address)) public contracts;
// release => contract name []
mapping(bytes32 => bytes32[]) public contractNames;
// number of contracts in release
mapping(bytes32 => uint256) public contractsInRelease;
}
BaseModuleStorage.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "Delegator.sol";
contract BaseModuleStorage is Delegator {
address public controller;
/* solhint-disable payable-fallback */
fallback() external virtual {
_delegate(controller);
}
/* solhint-enable payable-fallback */
function _assignController(address _controller) internal {
controller = _controller;
}
}
Delegator.sol
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
contract Delegator {
function _delegate(address _implementation) internal {
require(
_implementation != address(0),
"ERROR:DEL-001:UNKNOWN_IMPLEMENTATION"
);
bytes memory data = msg.data;
/* solhint-disable no-inline-assembly */
assembly {
let result := delegatecall(
gas(),
_implementation,
add(data, 0x20),
mload(data),
0,
0
)
let size := returndatasize()
let ptr := mload(0x40)
returndatacopy(ptr, 0, size)
switch result
case 0 {
revert(ptr, size)
}
default {
return(ptr, size)
}
}
/* solhint-enable no-inline-assembly */
}
}
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_controller","internalType":"address"},{"type":"bytes32","name":"_initialRelease","internalType":"bytes32"}]},{"type":"event","name":"LogContractDeregistered","inputs":[{"type":"bytes32","name":"release","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"contractName","internalType":"bytes32","indexed":false}],"anonymous":false},{"type":"event","name":"LogContractRegistered","inputs":[{"type":"bytes32","name":"release","internalType":"bytes32","indexed":false},{"type":"bytes32","name":"contractName","internalType":"bytes32","indexed":false},{"type":"address","name":"contractAddress","internalType":"address","indexed":false},{"type":"bool","name":"isNew","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"LogReleasePrepared","inputs":[{"type":"bytes32","name":"release","internalType":"bytes32","indexed":false}],"anonymous":false},{"type":"fallback","stateMutability":"nonpayable"},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"NAME","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"assignController","inputs":[{"type":"address","name":"_controller","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"contractNames","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"contracts","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"contractsInRelease","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"controller","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxContracts","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"release","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"startBlock","inputs":[]}]
Contract Creation Code
0x6080604052606460025534801561001557600080fd5b506040516104f23803806104f2833981016040819052610034916100df565b60008181558181526003602090815260408083207f496e7374616e63654f70657261746f725365727669636500000000000000000080855290835281842080546001600160a01b0319163317905583548452600483528184208054600181810183559186528486200191909155835484526005909252909120556100d482600680546001600160a01b0319166001600160a01b0392909216919091179055565b505043600155610119565b600080604083850312156100f257600080fd5b82516001600160a01b038116811461010957600080fd5b6020939093015192949293505050565b6103ca806101286000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a3f4df7e11610066578063a3f4df7e1461013b578063b07163411461014d578063b739fcba14610160578063ec1bc1ac14610169578063f77c47911461017c57610093565b806348cd4cb1146100aa5780636010a5ad146100c65780636feed94b1461011257806386d1a69f14610132575b6006546100a8906001600160a01b031661018f565b005b6100b360015481565b6040519081526020015b60405180910390f35b6100fa6100d4366004610329565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100bd565b6100b361012036600461034b565b60056020526000908152604090205481565b6100b360005481565b6100b367526567697374727960c01b81565b6100b361015b366004610329565b610255565b6100b360025481565b6100a8610177366004610364565b610286565b6006546100fa906001600160a01b031681565b6001600160a01b0381166101f65760405162461bcd60e51b8152602060048201526024808201527f4552524f523a44454c2d3030313a554e4b4e4f574e5f494d504c454d454e54416044820152632a24a7a760e11b60648201526084015b60405180910390fd5b600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509384935091505060208401855af43d604051816000823e828015610251578282f35b8282fd5b6004602052816000526040600020818154811061027157600080fd5b90600052602060002001600091509150505481565b6000805481526003602090815260408083206f24b739ba30b731b2a7b832b930ba37b960811b84529091529020546001600160a01b0316331461030b5760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a5245472d3030313a4e4f545f415554484f52495a45440000000060448201526064016101ed565b600680546001600160a01b0319166001600160a01b03831617905550565b6000806040838503121561033c57600080fd5b50508035926020909101359150565b60006020828403121561035d57600080fd5b5035919050565b60006020828403121561037657600080fd5b81356001600160a01b038116811461038d57600080fd5b939250505056fea264697066735822122038b5b3d2a94d173db9204e348e300c0f55a2c5c609d3941ce2a15e15564f282164736f6c634300080d00330000000000000000000000009a53af4309f6bb38e84c1ae2d36ee429582b4fc4000000000000000000000000000000000000000000000000000000312e322e30
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a3f4df7e11610066578063a3f4df7e1461013b578063b07163411461014d578063b739fcba14610160578063ec1bc1ac14610169578063f77c47911461017c57610093565b806348cd4cb1146100aa5780636010a5ad146100c65780636feed94b1461011257806386d1a69f14610132575b6006546100a8906001600160a01b031661018f565b005b6100b360015481565b6040519081526020015b60405180910390f35b6100fa6100d4366004610329565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100bd565b6100b361012036600461034b565b60056020526000908152604090205481565b6100b360005481565b6100b367526567697374727960c01b81565b6100b361015b366004610329565b610255565b6100b360025481565b6100a8610177366004610364565b610286565b6006546100fa906001600160a01b031681565b6001600160a01b0381166101f65760405162461bcd60e51b8152602060048201526024808201527f4552524f523a44454c2d3030313a554e4b4e4f574e5f494d504c454d454e54416044820152632a24a7a760e11b60648201526084015b60405180910390fd5b600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509384935091505060208401855af43d604051816000823e828015610251578282f35b8282fd5b6004602052816000526040600020818154811061027157600080fd5b90600052602060002001600091509150505481565b6000805481526003602090815260408083206f24b739ba30b731b2a7b832b930ba37b960811b84529091529020546001600160a01b0316331461030b5760405162461bcd60e51b815260206004820152601c60248201527f4552524f523a5245472d3030313a4e4f545f415554484f52495a45440000000060448201526064016101ed565b600680546001600160a01b0319166001600160a01b03831617905550565b6000806040838503121561033c57600080fd5b50508035926020909101359150565b60006020828403121561035d57600080fd5b5035919050565b60006020828403121561037657600080fd5b81356001600160a01b038116811461038d57600080fd5b939250505056fea264697066735822122038b5b3d2a94d173db9204e348e300c0f55a2c5c609d3941ce2a15e15564f282164736f6c634300080d0033