ETH Price: $3,441.30 (-1.14%)
Gas: 12 Gwei

Contract

0x95B9067D07d6C96a63A3119285B0aa6092E32a4b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x6060604052545192018-03-14 15:33:042317 days ago1521041584IN
 Create: Repo
0 ETH0.004767994

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Repo

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-03-14
*/

//File: contracts/acl/IACL.sol
pragma solidity ^0.4.18;


interface IACL {
    function initialize(address permissionsCreator) public;
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);
}

//File: contracts/kernel/IKernel.sol
pragma solidity ^0.4.18;



interface IKernel {
    event SetApp(bytes32 indexed namespace, bytes32 indexed name, bytes32 indexed id, address app);

    function acl() public view returns (IACL);
    function hasPermission(address who, address where, bytes32 what, bytes how) public view returns (bool);

    function setApp(bytes32 namespace, bytes32 name, address app) public returns (bytes32 id);
    function getApp(bytes32 id) public view returns (address);
}
//File: contracts/apps/AppStorage.sol
pragma solidity ^0.4.18;




contract AppStorage {
    IKernel public kernel;
    bytes32 public appId;
    address internal pinnedCode; // used by Proxy Pinned
    uint256 internal initializationBlock; // used by Initializable
    uint256[95] private storageOffset; // forces App storage to start at after 100 slots
    uint256 private offset;
}

//File: contracts/common/Initializable.sol
pragma solidity ^0.4.18;




contract Initializable is AppStorage {
    modifier onlyInit {
        require(initializationBlock == 0);
        _;
    }

    /**
    * @return Block number in which the contract was initialized
    */
    function getInitializationBlock() public view returns (uint256) {
        return initializationBlock;
    }

    /**
    * @dev Function to be called by top level contract after initialization has finished.
    */
    function initialized() internal onlyInit {
        initializationBlock = getBlockNumber();
    }

    /**
    * @dev Returns the current block number.
    *      Using a function rather than `block.number` allows us to easily mock the block number in
    *      tests.
    */
    function getBlockNumber() internal view returns (uint256) {
        return block.number;
    }
}

//File: contracts/evmscript/IEVMScriptExecutor.sol
pragma solidity ^0.4.18;


interface IEVMScriptExecutor {
    function execScript(bytes script, bytes input, address[] blacklist) external returns (bytes);
}

//File: contracts/evmscript/IEVMScriptRegistry.sol
pragma solidity 0.4.18;


contract EVMScriptRegistryConstants {
    bytes32 constant public EVMSCRIPT_REGISTRY_APP_ID = keccak256("evmreg.aragonpm.eth");
    bytes32 constant public EVMSCRIPT_REGISTRY_APP = keccak256(keccak256("app"), EVMSCRIPT_REGISTRY_APP_ID);
}


interface IEVMScriptRegistry {
    function addScriptExecutor(address executor) external returns (uint id);
    function disableScriptExecutor(uint256 executorId) external;

    function getScriptExecutor(bytes script) public view returns (address);
}
//File: contracts/evmscript/ScriptHelpers.sol
pragma solidity 0.4.18;


library ScriptHelpers {
    // To test with JS and compare with actual encoder. Maintaining for reference.
    // t = function() { return IEVMScriptExecutor.at('0x4bcdd59d6c77774ee7317fc1095f69ec84421e49').contract.execScript.getData(...[].slice.call(arguments)).slice(10).match(/.{1,64}/g) }
    // run = function() { return ScriptHelpers.new().then(sh => { sh.abiEncode.call(...[].slice.call(arguments)).then(a => console.log(a.slice(2).match(/.{1,64}/g)) ) }) }
    // This is truly not beautiful but lets no daydream to the day solidity gets reflection features

    function abiEncode(bytes _a, bytes _b, address[] _c) public pure returns (bytes d) {
        return encode(_a, _b, _c);
    }

    function encode(bytes memory _a, bytes memory _b, address[] memory _c) internal pure returns (bytes memory d) {
        // A is positioned after the 3 position words
        uint256 aPosition = 0x60;
        uint256 bPosition = aPosition + 32 * abiLength(_a);
        uint256 cPosition = bPosition + 32 * abiLength(_b);
        uint256 length = cPosition + 32 * abiLength(_c);

        d = new bytes(length);
        assembly {
            // Store positions
            mstore(add(d, 0x20), aPosition)
            mstore(add(d, 0x40), bPosition)
            mstore(add(d, 0x60), cPosition)
        }

        // Copy memory to correct position
        copy(d, getPtr(_a), aPosition, _a.length);
        copy(d, getPtr(_b), bPosition, _b.length);
        copy(d, getPtr(_c), cPosition, _c.length * 32); // 1 word per address
    }

    function abiLength(bytes memory _a) internal pure returns (uint256) {
        // 1 for length +
        // memory words + 1 if not divisible for 32 to offset word
        return 1 + (_a.length / 32) + (_a.length % 32 > 0 ? 1 : 0);
    }

    function abiLength(address[] _a) internal pure returns (uint256) {
        // 1 for length + 1 per item
        return 1 + _a.length;
    }

    function copy(bytes _d, uint256 _src, uint256 _pos, uint256 _length) internal pure {
        uint dest;
        assembly {
            dest := add(add(_d, 0x20), _pos)
        }
        memcpy(dest, _src, _length + 32);
    }

    function getPtr(bytes memory _x) internal pure returns (uint256 ptr) {
        assembly {
            ptr := _x
        }
    }

    function getPtr(address[] memory _x) internal pure returns (uint256 ptr) {
        assembly {
            ptr := _x
        }
    }

    function getSpecId(bytes _script) internal pure returns (uint32) {
        return uint32At(_script, 0);
    }

    function uint256At(bytes _data, uint256 _location) internal pure returns (uint256 result) {
        assembly {
            result := mload(add(_data, add(0x20, _location)))
        }
    }

    function addressAt(bytes _data, uint256 _location) internal pure returns (address result) {
        uint256 word = uint256At(_data, _location);

        assembly {
            result := div(and(word, 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000),
            0x1000000000000000000000000)
        }
    }

    function uint32At(bytes _data, uint256 _location) internal pure returns (uint32 result) {
        uint256 word = uint256At(_data, _location);

        assembly {
            result := div(and(word, 0xffffffff00000000000000000000000000000000000000000000000000000000),
            0x100000000000000000000000000000000000000000000000000000000)
        }
    }

    function locationOf(bytes _data, uint256 _location) internal pure returns (uint256 result) {
        assembly {
            result := add(_data, add(0x20, _location))
        }
    }

    function toBytes(bytes4 _sig) internal pure returns (bytes) {
        bytes memory payload = new bytes(4);
        payload[0] = bytes1(_sig);
        payload[1] = bytes1(_sig << 8);
        payload[2] = bytes1(_sig << 16);
        payload[3] = bytes1(_sig << 24);
        return payload;
    }

    function memcpy(uint _dest, uint _src, uint _len) public pure {
        uint256 src = _src;
        uint256 dest = _dest;
        uint256 len = _len;

        // Copy word-length chunks while possible
        for (; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }
}
//File: contracts/evmscript/EVMScriptRunner.sol
pragma solidity ^0.4.18;








contract EVMScriptRunner is AppStorage, EVMScriptRegistryConstants {
    using ScriptHelpers for bytes;

    function runScript(bytes _script, bytes _input, address[] _blacklist) protectState internal returns (bytes output) {
        // TODO: Too much data flying around, maybe extracting spec id here is cheaper
        address executorAddr = getExecutor(_script);
        require(executorAddr != address(0));

        bytes memory calldataArgs = _script.encode(_input, _blacklist);
        bytes4 sig = IEVMScriptExecutor(0).execScript.selector;

        require(executorAddr.delegatecall(sig, calldataArgs));

        return returnedDataDecoded();
    }

    function getExecutor(bytes _script) public view returns (IEVMScriptExecutor) {
        return IEVMScriptExecutor(getExecutorRegistry().getScriptExecutor(_script));
    }

    // TODO: Internal
    function getExecutorRegistry() internal view returns (IEVMScriptRegistry) {
        address registryAddr = kernel.getApp(EVMSCRIPT_REGISTRY_APP);
        return IEVMScriptRegistry(registryAddr);
    }

    /**
    * @dev copies and returns last's call data. Needs to ABI decode first
    */
    function returnedDataDecoded() internal view returns (bytes ret) {
        assembly {
            let size := returndatasize
            switch size
            case 0 {}
            default {
                ret := mload(0x40) // free mem ptr get
                mstore(0x40, add(ret, add(size, 0x20))) // free mem ptr set
                returndatacopy(ret, 0x20, sub(size, 0x20)) // copy return data
            }
        }
        return ret;
    }

    modifier protectState {
        address preKernel = kernel;
        bytes32 preAppId = appId;
        _; // exec
        require(kernel == preKernel);
        require(appId == preAppId);
    }
}
//File: contracts/acl/ACLSyntaxSugar.sol
pragma solidity 0.4.18;


contract ACLSyntaxSugar {
    function arr() internal pure returns (uint256[] r) {}

    function arr(bytes32 _a) internal pure returns (uint256[] r) {
        return arr(uint256(_a));
    }

    function arr(bytes32 _a, bytes32 _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a) internal pure returns (uint256[] r) {
        return arr(uint256(_a));
    }

    function arr(address _a, address _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a, uint256 _b, uint256 _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), _b, _c);
    }

    function arr(address _a, uint256 _b) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b));
    }

    function arr(address _a, address _b, uint256 _c, uint256 _d, uint256 _e) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), _c, _d, _e);
    }

    function arr(address _a, address _b, address _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), uint256(_c));
    }

    function arr(address _a, address _b, uint256 _c) internal pure returns (uint256[] r) {
        return arr(uint256(_a), uint256(_b), uint256(_c));
    }

    function arr(uint256 _a) internal pure returns (uint256[] r) {
        r = new uint256[](1);
        r[0] = _a;
    }

    function arr(uint256 _a, uint256 _b) internal pure returns (uint256[] r) {
        r = new uint256[](2);
        r[0] = _a;
        r[1] = _b;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c) internal pure returns (uint256[] r) {
        r = new uint256[](3);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c, uint256 _d) internal pure returns (uint256[] r) {
        r = new uint256[](4);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
        r[3] = _d;
    }

    function arr(uint256 _a, uint256 _b, uint256 _c, uint256 _d, uint256 _e) internal pure returns (uint256[] r) {
        r = new uint256[](5);
        r[0] = _a;
        r[1] = _b;
        r[2] = _c;
        r[3] = _d;
        r[4] = _e;
    }
}


contract ACLHelpers {
    function decodeParamOp(uint256 _x) internal pure returns (uint8 b) {
        return uint8(_x >> (8 * 30));
    }

    function decodeParamId(uint256 _x) internal pure returns (uint8 b) {
        return uint8(_x >> (8 * 31));
    }

    function decodeParamsList(uint256 _x) internal pure returns (uint32 a, uint32 b, uint32 c) {
        a = uint32(_x);
        b = uint32(_x >> (8 * 4));
        c = uint32(_x >> (8 * 8));
    }
}

//File: contracts/apps/AragonApp.sol
pragma solidity ^0.4.18;







contract AragonApp is AppStorage, Initializable, ACLSyntaxSugar, EVMScriptRunner {
    modifier auth(bytes32 _role) {
        require(canPerform(msg.sender, _role, new uint256[](0)));
        _;
    }

    modifier authP(bytes32 _role, uint256[] params) {
        require(canPerform(msg.sender, _role, params));
        _;
    }

    function canPerform(address _sender, bytes32 _role, uint256[] params) public view returns (bool) {
        bytes memory how; // no need to init memory as it is never used
        if (params.length > 0) {
            uint256 byteLength = params.length * 32;
            assembly {
                how := params // forced casting
                mstore(how, byteLength)
            }
        }
        return address(kernel) == 0 || kernel.hasPermission(_sender, address(this), _role, how);
    }
}

//File: contracts/apm/Repo.sol
pragma solidity ^0.4.15;




contract Repo is AragonApp {
    struct Version {
        uint16[3] semanticVersion;
        address contractAddress;
        bytes contentURI;
    }

    Version[] versions;
    mapping (bytes32 => uint256) versionIdForSemantic;
    mapping (address => uint256) latestVersionIdForContract;

    bytes32 constant public CREATE_VERSION_ROLE = bytes32(1);

    event NewVersion(uint256 versionId, uint16[3] semanticVersion);

    /**
    * @notice Create new version for repo
    * @param _newSemanticVersion Semantic version for new repo version
    * @param _contractAddress address for smart contract logic for version (if set to 0, it uses last versions' contractAddress)
    * @param _contentURI External URI for fetching new version's content
    */
    function newVersion(
        uint16[3] _newSemanticVersion,
        address _contractAddress,
        bytes _contentURI
    ) auth(CREATE_VERSION_ROLE) public
    {
        address contractAddress = _contractAddress;
        if (versions.length > 0) {
            Version storage lastVersion = versions[versions.length - 1];
            require(isValidBump(lastVersion.semanticVersion, _newSemanticVersion));
            if (contractAddress == 0) {
                contractAddress = lastVersion.contractAddress;
            }
            // Only allows smart contract change on major version bumps
            require(lastVersion.contractAddress == contractAddress || _newSemanticVersion[0] > lastVersion.semanticVersion[0]);
        } else {
            versions.length += 1;
            uint16[3] memory zeroVersion;
            require(isValidBump(zeroVersion, _newSemanticVersion));
        }

        uint versionId = versions.push(Version(_newSemanticVersion, contractAddress, _contentURI)) - 1;
        versionIdForSemantic[semanticVersionHash(_newSemanticVersion)] = versionId;
        latestVersionIdForContract[contractAddress] = versionId;

        NewVersion(versionId, _newSemanticVersion);
    }

    function getLatest() public view returns (uint16[3] semanticVersion, address contractAddress, bytes contentURI) {
        return getByVersionId(versions.length - 1);
    }

    function getLatestForContractAddress(address _contractAddress) public view returns (uint16[3] semanticVersion, address contractAddress, bytes contentURI) {
        return getByVersionId(latestVersionIdForContract[_contractAddress]);
    }

    function getBySemanticVersion(uint16[3] _semanticVersion) public view returns (uint16[3] semanticVersion, address contractAddress, bytes contentURI) {
        return getByVersionId(versionIdForSemantic[semanticVersionHash(_semanticVersion)]);
    }

    function getByVersionId(uint _versionId) public view returns (uint16[3] semanticVersion, address contractAddress, bytes contentURI) {
        require(_versionId > 0);
        Version storage version = versions[_versionId];
        return (version.semanticVersion, version.contractAddress, version.contentURI);
    }

    function getVersionsCount() public view returns (uint256) {
        uint256 len = versions.length;
        return len > 0 ? len - 1 : 0;
    }

    function isValidBump(uint16[3] _oldVersion, uint16[3] _newVersion) public pure returns (bool) {
        bool hasBumped;
        uint i = 0;
        while (i < 3) {
            if (hasBumped) {
                if (_newVersion[i] != 0) {
                    return false;
                }
            } else if (_newVersion[i] != _oldVersion[i]) {
                if (_oldVersion[i] > _newVersion[i] || _newVersion[i] - _oldVersion[i] != 1) {
                    return false;
                }
                hasBumped = true;
            }
            i++;
        }
        return hasBumped;
    }

    function semanticVersionHash(uint16[3] version) internal pure returns (bytes32) {
        return keccak256(version[0], version[1], version[2]);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_semanticVersion","type":"uint16[3]"}],"name":"getBySemanticVersion","outputs":[{"name":"semanticVersion","type":"uint16[3]"},{"name":"contractAddress","type":"address"},{"name":"contentURI","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EVMSCRIPT_REGISTRY_APP_ID","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newSemanticVersion","type":"uint16[3]"},{"name":"_contractAddress","type":"address"},{"name":"_contentURI","type":"bytes"}],"name":"newVersion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_versionId","type":"uint256"}],"name":"getByVersionId","outputs":[{"name":"semanticVersion","type":"uint16[3]"},{"name":"contractAddress","type":"address"},{"name":"contentURI","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"appId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInitializationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"getLatestForContractAddress","outputs":[{"name":"semanticVersion","type":"uint16[3]"},{"name":"contractAddress","type":"address"},{"name":"contentURI","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"EVMSCRIPT_REGISTRY_APP","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender","type":"address"},{"name":"_role","type":"bytes32"},{"name":"params","type":"uint256[]"}],"name":"canPerform","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_oldVersion","type":"uint16[3]"},{"name":"_newVersion","type":"uint16[3]"}],"name":"isValidBump","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"CREATE_VERSION_ROLE","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLatest","outputs":[{"name":"semanticVersion","type":"uint16[3]"},{"name":"contractAddress","type":"address"},{"name":"contentURI","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getVersionsCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"kernel","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_script","type":"bytes"}],"name":"getExecutor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"versionId","type":"uint256"},{"indexed":false,"name":"semanticVersion","type":"uint16[3]"}],"name":"NewVersion","type":"event"}]

6060604052341561000f57600080fd5b6110cb8061001e6000396000f3006060604052600436106100c15763ffffffff60e060020a6000350416634c3ba26881146100c657806360b1e057146101b957806373053410146101de578063737e7d4f1461026757806380afdea81461027d5780638b3dd749146102905780639a6fe50c146102a35780639b3fdf4c146102c2578063a1658fad146102d5578063a7bdf16e1461034c578063aa61924a146103ad578063c36af460146103c0578063c6d48e0d146103d3578063d4aae0c4146103e6578063f92a79ff14610415575b600080fd5b34156100d157600080fd5b6100ff6004606481600360606040519081016040529190828260608082843750939550610466945050505050565b6040518084606080838360005b8381101561012457808201518382015260200161010c565b5050505090500183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561017c578082015183820152602001610164565b50505050905090810190601f1680156101a95780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156101c457600080fd5b6101cc6104ab565b60405190815260200160405180910390f35b34156101e957600080fd5b61026560046064816003606060405190810160405291908282606080828437509395600160a060020a038635169590945060408082019450602091820135860180830194503592508291601f8301819004810201905190810160405281815292919060208401838380828437509496506104df95505050505050565b005b341561027257600080fd5b6100ff60043561079d565b341561028857600080fd5b6101cc6108ff565b341561029b57600080fd5b6101cc610905565b34156102ae57600080fd5b6100ff600160a060020a036004351661090c565b34156102cd57600080fd5b6101cc610940565b34156102e057600080fd5b61033860048035600160a060020a03169060248035919060649060443590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496506109bc95505050505050565b604051901515815260200160405180910390f35b341561035757600080fd5b610338600460648160036060604051908101604052919082826060808284378201915050505050919080606001906003806020026040519081016040529190828260608082843750939550610afa945050505050565b34156103b857600080fd5b6101cc610be9565b34156103cb57600080fd5b6100ff610bee565b34156103de57600080fd5b6101cc610c1b565b34156103f157600080fd5b6103f9610c3b565b604051600160a060020a03909116815260200160405180910390f35b341561042057600080fd5b6103f960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b61046e610e51565b6000610478610e79565b61049e6065600061048887610d26565b815260208101919091526040016000205461079d565b9250925092509193909250565b6040517f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6000806104ea610e51565b600060016105173382846040518059106105015750595b90808252806020026020018201604052506109bc565b151561052257600080fd5b606454879550600090111561061a5760648054600019810190811061054357fe5b906000526020600020906003020193506105b784600001600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610574579050505050505089610afa565b15156105c257600080fd5b600160a060020a03851615156105e3576001840154600160a060020a031694505b6001840154600160a060020a038681169116148061060a5750835461ffff16885161ffff16115b151561061557600080fd5b610642565b606480546001019061062c9082610e8b565b506106378389610afa565b151561064257600080fd5b6001606480548060010182816106589190610e8b565b91600052602060002090600302016000606060405190810160409081528d8252600160a060020a038b16602083015281018b9052919050815161069e9082906003610ebc565b50602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151816002019080516106ed929160200190610f4e565b50505003915081606560006107018b610d26565b81526020808201929092526040908101600090812093909355600160a060020a03881683526066909152908190208390557e3aea8189d1a0aa3ebdb05219cd4c2a663166706e949e9d6e8aa63718ca43fd9083908a90518281526020810182606080838360005b83811015610780578082015183820152602001610768565b505050509050019250505060405180910390a15050505050505050565b6107a5610e51565b60006107af610e79565b60008085116107bd57600080fd5b60648054869081106107cb57fe5b90600052602060002090600302019050806000018160010160009054906101000a9004600160a060020a03168260020182600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161081657905050505050509250808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108ea5780601f106108bf576101008083540402835291602001916108ea565b820191906000526020600020905b8154815290600101906020018083116108cd57829003601f168201915b50505050509050935093509350509193909250565b60015481565b6003545b90565b610914610e51565b600061091e610e79565b600160a060020a03841660009081526066602052604090205461049e9061079d565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60006109c6610e79565b600080845111156109df57835160200290508391508082525b600054600160a060020a03161580610af0575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b83811015610a86578082015183820152602001610a6e565b50505050905090810190601f168015610ab35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515610ad457600080fd5b6102c65a03f11515610ae557600080fd5b505050604051805190505b9695505050505050565b600080805b6003811015610bdd578115610b3657838160038110610b1a57fe5b602002015161ffff1615610b315760009250610be1565b610bd5565b848160038110610b4257fe5b602002015161ffff16848260038110610b5757fe5b602002015161ffff1614610bd557838160038110610b7157fe5b602002015161ffff16858260038110610b8657fe5b602002015161ffff161180610bc25750848160038110610ba257fe5b6020020151848260038110610bb357fe5b60200201510361ffff16600114155b15610bd05760009250610be1565b600191505b600101610aff565b8192505b505092915050565b600181565b610bf6610e51565b6000610c00610e79565b606454610c10906000190161079d565b925092509250909192565b606454600090818111610c2f576000610c34565b600181035b91505b5090565b600054600160a060020a031681565b6000610c54610d85565b600160a060020a03166304bf2a7f836000604051602001526040518263ffffffff1660e060020a0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbb578082015183820152602001610ca3565b50505050905090810190601f168015610ce85780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610d0657600080fd5b6102c65a03f11515610d1757600080fd5b50505060405180519392505050565b60008151602083015160408401516040517e0100000000000000000000000000000000000000000000000000000000000061ffff9485168102825292841683026002820152921602600482015260060160405180910390209050919050565b600080548190600160a060020a03166342c71f1d6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d0657600080fd5b60606040519081016040526003815b600081526000199091019060200181610e605790505090565b60206040519081016040526000815290565b815481835581811511610eb757600302816003028360005260206000209182019101610eb79190610fc8565b505050565b600183019183908215610f425791602002820160005b83821115610f1257835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302610ed2565b8015610f405782816101000a81549061ffff0219169055600201602081600101049283019260010302610f12565b505b50610c37929150611018565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f8f57805160ff1916838001178555610fbc565b82800160010185558215610fbc579182015b82811115610fbc578251825591602001919060010190610fa1565b50610c37929150611037565b61090991905b80821115610c37576000610fe28282611051565b60018201805473ffffffffffffffffffffffffffffffffffffffff1916905561100f600283016000611058565b50600301610fce565b61090991905b80821115610c3757805461ffff1916815560010161101e565b61090991905b80821115610c37576000815560010161103d565b5060009055565b50805460018160011615610100020316600290046000825580601f1061107e575061109c565b601f01602090049060005260206000209081019061109c9190611037565b505600a165627a7a72305820a2b61a46ff68487c6958b69dee15c17471d446f8b15b7e9777da4a8630da028e0029

Deployed Bytecode

0x6060604052600436106100c15763ffffffff60e060020a6000350416634c3ba26881146100c657806360b1e057146101b957806373053410146101de578063737e7d4f1461026757806380afdea81461027d5780638b3dd749146102905780639a6fe50c146102a35780639b3fdf4c146102c2578063a1658fad146102d5578063a7bdf16e1461034c578063aa61924a146103ad578063c36af460146103c0578063c6d48e0d146103d3578063d4aae0c4146103e6578063f92a79ff14610415575b600080fd5b34156100d157600080fd5b6100ff6004606481600360606040519081016040529190828260608082843750939550610466945050505050565b6040518084606080838360005b8381101561012457808201518382015260200161010c565b5050505090500183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561017c578082015183820152602001610164565b50505050905090810190601f1680156101a95780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156101c457600080fd5b6101cc6104ab565b60405190815260200160405180910390f35b34156101e957600080fd5b61026560046064816003606060405190810160405291908282606080828437509395600160a060020a038635169590945060408082019450602091820135860180830194503592508291601f8301819004810201905190810160405281815292919060208401838380828437509496506104df95505050505050565b005b341561027257600080fd5b6100ff60043561079d565b341561028857600080fd5b6101cc6108ff565b341561029b57600080fd5b6101cc610905565b34156102ae57600080fd5b6100ff600160a060020a036004351661090c565b34156102cd57600080fd5b6101cc610940565b34156102e057600080fd5b61033860048035600160a060020a03169060248035919060649060443590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496506109bc95505050505050565b604051901515815260200160405180910390f35b341561035757600080fd5b610338600460648160036060604051908101604052919082826060808284378201915050505050919080606001906003806020026040519081016040529190828260608082843750939550610afa945050505050565b34156103b857600080fd5b6101cc610be9565b34156103cb57600080fd5b6100ff610bee565b34156103de57600080fd5b6101cc610c1b565b34156103f157600080fd5b6103f9610c3b565b604051600160a060020a03909116815260200160405180910390f35b341561042057600080fd5b6103f960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b61046e610e51565b6000610478610e79565b61049e6065600061048887610d26565b815260208101919091526040016000205461079d565b9250925092509193909250565b6040517f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6000806104ea610e51565b600060016105173382846040518059106105015750595b90808252806020026020018201604052506109bc565b151561052257600080fd5b606454879550600090111561061a5760648054600019810190811061054357fe5b906000526020600020906003020193506105b784600001600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610574579050505050505089610afa565b15156105c257600080fd5b600160a060020a03851615156105e3576001840154600160a060020a031694505b6001840154600160a060020a038681169116148061060a5750835461ffff16885161ffff16115b151561061557600080fd5b610642565b606480546001019061062c9082610e8b565b506106378389610afa565b151561064257600080fd5b6001606480548060010182816106589190610e8b565b91600052602060002090600302016000606060405190810160409081528d8252600160a060020a038b16602083015281018b9052919050815161069e9082906003610ebc565b50602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151816002019080516106ed929160200190610f4e565b50505003915081606560006107018b610d26565b81526020808201929092526040908101600090812093909355600160a060020a03881683526066909152908190208390557e3aea8189d1a0aa3ebdb05219cd4c2a663166706e949e9d6e8aa63718ca43fd9083908a90518281526020810182606080838360005b83811015610780578082015183820152602001610768565b505050509050019250505060405180910390a15050505050505050565b6107a5610e51565b60006107af610e79565b60008085116107bd57600080fd5b60648054869081106107cb57fe5b90600052602060002090600302019050806000018160010160009054906101000a9004600160a060020a03168260020182600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161081657905050505050509250808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108ea5780601f106108bf576101008083540402835291602001916108ea565b820191906000526020600020905b8154815290600101906020018083116108cd57829003601f168201915b50505050509050935093509350509193909250565b60015481565b6003545b90565b610914610e51565b600061091e610e79565b600160a060020a03841660009081526066602052604090205461049e9061079d565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60006109c6610e79565b600080845111156109df57835160200290508391508082525b600054600160a060020a03161580610af0575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b83811015610a86578082015183820152602001610a6e565b50505050905090810190601f168015610ab35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515610ad457600080fd5b6102c65a03f11515610ae557600080fd5b505050604051805190505b9695505050505050565b600080805b6003811015610bdd578115610b3657838160038110610b1a57fe5b602002015161ffff1615610b315760009250610be1565b610bd5565b848160038110610b4257fe5b602002015161ffff16848260038110610b5757fe5b602002015161ffff1614610bd557838160038110610b7157fe5b602002015161ffff16858260038110610b8657fe5b602002015161ffff161180610bc25750848160038110610ba257fe5b6020020151848260038110610bb357fe5b60200201510361ffff16600114155b15610bd05760009250610be1565b600191505b600101610aff565b8192505b505092915050565b600181565b610bf6610e51565b6000610c00610e79565b606454610c10906000190161079d565b925092509250909192565b606454600090818111610c2f576000610c34565b600181035b91505b5090565b600054600160a060020a031681565b6000610c54610d85565b600160a060020a03166304bf2a7f836000604051602001526040518263ffffffff1660e060020a0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbb578082015183820152602001610ca3565b50505050905090810190601f168015610ce85780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610d0657600080fd5b6102c65a03f11515610d1757600080fd5b50505060405180519392505050565b60008151602083015160408401516040517e0100000000000000000000000000000000000000000000000000000000000061ffff9485168102825292841683026002820152921602600482015260060160405180910390209050919050565b600080548190600160a060020a03166342c71f1d6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d0657600080fd5b60606040519081016040526003815b600081526000199091019060200181610e605790505090565b60206040519081016040526000815290565b815481835581811511610eb757600302816003028360005260206000209182019101610eb79190610fc8565b505050565b600183019183908215610f425791602002820160005b83821115610f1257835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302610ed2565b8015610f405782816101000a81549061ffff0219169055600201602081600101049283019260010302610f12565b505b50610c37929150611018565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f8f57805160ff1916838001178555610fbc565b82800160010185558215610fbc579182015b82811115610fbc578251825591602001919060010190610fa1565b50610c37929150611037565b61090991905b80821115610c37576000610fe28282611051565b60018201805473ffffffffffffffffffffffffffffffffffffffff1916905561100f600283016000611058565b50600301610fce565b61090991905b80821115610c3757805461ffff1916815560010161101e565b61090991905b80821115610c37576000815560010161103d565b5060009055565b50805460018160011615610100020316600290046000825580601f1061107e575061109c565b601f01602090049060005260206000209081019061109c9190611037565b505600a165627a7a72305820a2b61a46ff68487c6958b69dee15c17471d446f8b15b7e9777da4a8630da028e0029

Swarm Source

bzzr://a2b61a46ff68487c6958b69dee15c17471d446f8b15b7e9777da4a8630da028e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.