false
false
The Sokol Testnet is currently lacking validators. Please consider using Goerli or Mumbai for testing purposes.

Contract Address Details
contract

0xa61aB7bC31E0721C5bf30aD4c39B9E4634a39a08

Contract Name
Registry
Creator
0xeec2fa–73249a at 0x60b206–6bc5b9
Balance
0 SPOA
Tokens
Fetching tokens...
Transactions
13 Transactions
Transfers
0 Transfers
Gas Used
1,148,334
Last Balance Update
27736955
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

Sol2uml
new
// 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