Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60606040 | 5254519 | 2317 days ago | IN | Create: Repo | 0 ETH | 0.00476799 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
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
- No Contract Security Audit Submitted- Submit Audit Here
[{"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"}]
Contract Creation Code
6060604052341561000f57600080fd5b6110cb8061001e6000396000f3006060604052600436106100c15763ffffffff60e060020a6000350416634c3ba26881146100c657806360b1e057146101b957806373053410146101de578063737e7d4f1461026757806380afdea81461027d5780638b3dd749146102905780639a6fe50c146102a35780639b3fdf4c146102c2578063a1658fad146102d5578063a7bdf16e1461034c578063aa61924a146103ad578063c36af460146103c0578063c6d48e0d146103d3578063d4aae0c4146103e6578063f92a79ff14610415575b600080fd5b34156100d157600080fd5b6100ff6004606481600360606040519081016040529190828260608082843750939550610466945050505050565b6040518084606080838360005b8381101561012457808201518382015260200161010c565b5050505090500183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561017c578082015183820152602001610164565b50505050905090810190601f1680156101a95780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156101c457600080fd5b6101cc6104ab565b60405190815260200160405180910390f35b34156101e957600080fd5b61026560046064816003606060405190810160405291908282606080828437509395600160a060020a038635169590945060408082019450602091820135860180830194503592508291601f8301819004810201905190810160405281815292919060208401838380828437509496506104df95505050505050565b005b341561027257600080fd5b6100ff60043561079d565b341561028857600080fd5b6101cc6108ff565b341561029b57600080fd5b6101cc610905565b34156102ae57600080fd5b6100ff600160a060020a036004351661090c565b34156102cd57600080fd5b6101cc610940565b34156102e057600080fd5b61033860048035600160a060020a03169060248035919060649060443590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496506109bc95505050505050565b604051901515815260200160405180910390f35b341561035757600080fd5b610338600460648160036060604051908101604052919082826060808284378201915050505050919080606001906003806020026040519081016040529190828260608082843750939550610afa945050505050565b34156103b857600080fd5b6101cc610be9565b34156103cb57600080fd5b6100ff610bee565b34156103de57600080fd5b6101cc610c1b565b34156103f157600080fd5b6103f9610c3b565b604051600160a060020a03909116815260200160405180910390f35b341561042057600080fd5b6103f960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b61046e610e51565b6000610478610e79565b61049e6065600061048887610d26565b815260208101919091526040016000205461079d565b9250925092509193909250565b6040517f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6000806104ea610e51565b600060016105173382846040518059106105015750595b90808252806020026020018201604052506109bc565b151561052257600080fd5b606454879550600090111561061a5760648054600019810190811061054357fe5b906000526020600020906003020193506105b784600001600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610574579050505050505089610afa565b15156105c257600080fd5b600160a060020a03851615156105e3576001840154600160a060020a031694505b6001840154600160a060020a038681169116148061060a5750835461ffff16885161ffff16115b151561061557600080fd5b610642565b606480546001019061062c9082610e8b565b506106378389610afa565b151561064257600080fd5b6001606480548060010182816106589190610e8b565b91600052602060002090600302016000606060405190810160409081528d8252600160a060020a038b16602083015281018b9052919050815161069e9082906003610ebc565b50602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151816002019080516106ed929160200190610f4e565b50505003915081606560006107018b610d26565b81526020808201929092526040908101600090812093909355600160a060020a03881683526066909152908190208390557e3aea8189d1a0aa3ebdb05219cd4c2a663166706e949e9d6e8aa63718ca43fd9083908a90518281526020810182606080838360005b83811015610780578082015183820152602001610768565b505050509050019250505060405180910390a15050505050505050565b6107a5610e51565b60006107af610e79565b60008085116107bd57600080fd5b60648054869081106107cb57fe5b90600052602060002090600302019050806000018160010160009054906101000a9004600160a060020a03168260020182600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161081657905050505050509250808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108ea5780601f106108bf576101008083540402835291602001916108ea565b820191906000526020600020905b8154815290600101906020018083116108cd57829003601f168201915b50505050509050935093509350509193909250565b60015481565b6003545b90565b610914610e51565b600061091e610e79565b600160a060020a03841660009081526066602052604090205461049e9061079d565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60006109c6610e79565b600080845111156109df57835160200290508391508082525b600054600160a060020a03161580610af0575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b83811015610a86578082015183820152602001610a6e565b50505050905090810190601f168015610ab35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515610ad457600080fd5b6102c65a03f11515610ae557600080fd5b505050604051805190505b9695505050505050565b600080805b6003811015610bdd578115610b3657838160038110610b1a57fe5b602002015161ffff1615610b315760009250610be1565b610bd5565b848160038110610b4257fe5b602002015161ffff16848260038110610b5757fe5b602002015161ffff1614610bd557838160038110610b7157fe5b602002015161ffff16858260038110610b8657fe5b602002015161ffff161180610bc25750848160038110610ba257fe5b6020020151848260038110610bb357fe5b60200201510361ffff16600114155b15610bd05760009250610be1565b600191505b600101610aff565b8192505b505092915050565b600181565b610bf6610e51565b6000610c00610e79565b606454610c10906000190161079d565b925092509250909192565b606454600090818111610c2f576000610c34565b600181035b91505b5090565b600054600160a060020a031681565b6000610c54610d85565b600160a060020a03166304bf2a7f836000604051602001526040518263ffffffff1660e060020a0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbb578082015183820152602001610ca3565b50505050905090810190601f168015610ce85780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610d0657600080fd5b6102c65a03f11515610d1757600080fd5b50505060405180519392505050565b60008151602083015160408401516040517e0100000000000000000000000000000000000000000000000000000000000061ffff9485168102825292841683026002820152921602600482015260060160405180910390209050919050565b600080548190600160a060020a03166342c71f1d6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d0657600080fd5b60606040519081016040526003815b600081526000199091019060200181610e605790505090565b60206040519081016040526000815290565b815481835581811511610eb757600302816003028360005260206000209182019101610eb79190610fc8565b505050565b600183019183908215610f425791602002820160005b83821115610f1257835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302610ed2565b8015610f405782816101000a81549061ffff0219169055600201602081600101049283019260010302610f12565b505b50610c37929150611018565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f8f57805160ff1916838001178555610fbc565b82800160010185558215610fbc579182015b82811115610fbc578251825591602001919060010190610fa1565b50610c37929150611037565b61090991905b80821115610c37576000610fe28282611051565b60018201805473ffffffffffffffffffffffffffffffffffffffff1916905561100f600283016000611058565b50600301610fce565b61090991905b80821115610c3757805461ffff1916815560010161101e565b61090991905b80821115610c37576000815560010161103d565b5060009055565b50805460018160011615610100020316600290046000825580601f1061107e575061109c565b601f01602090049060005260206000209081019061109c9190611037565b505600a165627a7a72305820a2b61a46ff68487c6958b69dee15c17471d446f8b15b7e9777da4a8630da028e0029
Deployed Bytecode
0x6060604052600436106100c15763ffffffff60e060020a6000350416634c3ba26881146100c657806360b1e057146101b957806373053410146101de578063737e7d4f1461026757806380afdea81461027d5780638b3dd749146102905780639a6fe50c146102a35780639b3fdf4c146102c2578063a1658fad146102d5578063a7bdf16e1461034c578063aa61924a146103ad578063c36af460146103c0578063c6d48e0d146103d3578063d4aae0c4146103e6578063f92a79ff14610415575b600080fd5b34156100d157600080fd5b6100ff6004606481600360606040519081016040529190828260608082843750939550610466945050505050565b6040518084606080838360005b8381101561012457808201518382015260200161010c565b5050505090500183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561017c578082015183820152602001610164565b50505050905090810190601f1680156101a95780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b34156101c457600080fd5b6101cc6104ab565b60405190815260200160405180910390f35b34156101e957600080fd5b61026560046064816003606060405190810160405291908282606080828437509395600160a060020a038635169590945060408082019450602091820135860180830194503592508291601f8301819004810201905190810160405281815292919060208401838380828437509496506104df95505050505050565b005b341561027257600080fd5b6100ff60043561079d565b341561028857600080fd5b6101cc6108ff565b341561029b57600080fd5b6101cc610905565b34156102ae57600080fd5b6100ff600160a060020a036004351661090c565b34156102cd57600080fd5b6101cc610940565b34156102e057600080fd5b61033860048035600160a060020a03169060248035919060649060443590810190830135806020808202016040519081016040528093929190818152602001838360200280828437509496506109bc95505050505050565b604051901515815260200160405180910390f35b341561035757600080fd5b610338600460648160036060604051908101604052919082826060808284378201915050505050919080606001906003806020026040519081016040529190828260608082843750939550610afa945050505050565b34156103b857600080fd5b6101cc610be9565b34156103cb57600080fd5b6100ff610bee565b34156103de57600080fd5b6101cc610c1b565b34156103f157600080fd5b6103f9610c3b565b604051600160a060020a03909116815260200160405180910390f35b341561042057600080fd5b6103f960046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610c4a95505050505050565b61046e610e51565b6000610478610e79565b61049e6065600061048887610d26565b815260208101919091526040016000205461079d565b9250925092509193909250565b6040517f65766d7265672e617261676f6e706d2e657468000000000000000000000000008152601301604051809103902081565b6000806104ea610e51565b600060016105173382846040518059106105015750595b90808252806020026020018201604052506109bc565b151561052257600080fd5b606454879550600090111561061a5760648054600019810190811061054357fe5b906000526020600020906003020193506105b784600001600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610574579050505050505089610afa565b15156105c257600080fd5b600160a060020a03851615156105e3576001840154600160a060020a031694505b6001840154600160a060020a038681169116148061060a5750835461ffff16885161ffff16115b151561061557600080fd5b610642565b606480546001019061062c9082610e8b565b506106378389610afa565b151561064257600080fd5b6001606480548060010182816106589190610e8b565b91600052602060002090600302016000606060405190810160409081528d8252600160a060020a038b16602083015281018b9052919050815161069e9082906003610ebc565b50602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556040820151816002019080516106ed929160200190610f4e565b50505003915081606560006107018b610d26565b81526020808201929092526040908101600090812093909355600160a060020a03881683526066909152908190208390557e3aea8189d1a0aa3ebdb05219cd4c2a663166706e949e9d6e8aa63718ca43fd9083908a90518281526020810182606080838360005b83811015610780578082015183820152602001610768565b505050509050019250505060405180910390a15050505050505050565b6107a5610e51565b60006107af610e79565b60008085116107bd57600080fd5b60648054869081106107cb57fe5b90600052602060002090600302019050806000018160010160009054906101000a9004600160a060020a03168260020182600380602002604051908101604052919060608301826000855b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161081657905050505050509250808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108ea5780601f106108bf576101008083540402835291602001916108ea565b820191906000526020600020905b8154815290600101906020018083116108cd57829003601f168201915b50505050509050935093509350509193909250565b60015481565b6003545b90565b610914610e51565b600061091e610e79565b600160a060020a03841660009081526066602052604090205461049e9061079d565b6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902081565b60006109c6610e79565b600080845111156109df57835160200290508391508082525b600054600160a060020a03161580610af0575060008054600160a060020a03169063fdef91069088903090899087906040516020015260405160e060020a63ffffffff8716028152600160a060020a0380861660048301908152908516602483015260448201849052608060648301908152909160840183818151815260200191508051906020019080838360005b83811015610a86578082015183820152602001610a6e565b50505050905090810190601f168015610ab35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1515610ad457600080fd5b6102c65a03f11515610ae557600080fd5b505050604051805190505b9695505050505050565b600080805b6003811015610bdd578115610b3657838160038110610b1a57fe5b602002015161ffff1615610b315760009250610be1565b610bd5565b848160038110610b4257fe5b602002015161ffff16848260038110610b5757fe5b602002015161ffff1614610bd557838160038110610b7157fe5b602002015161ffff16858260038110610b8657fe5b602002015161ffff161180610bc25750848160038110610ba257fe5b6020020151848260038110610bb357fe5b60200201510361ffff16600114155b15610bd05760009250610be1565b600191505b600101610aff565b8192505b505092915050565b600181565b610bf6610e51565b6000610c00610e79565b606454610c10906000190161079d565b925092509250909192565b606454600090818111610c2f576000610c34565b600181035b91505b5090565b600054600160a060020a031681565b6000610c54610d85565b600160a060020a03166304bf2a7f836000604051602001526040518263ffffffff1660e060020a0281526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610cbb578082015183820152602001610ca3565b50505050905090810190601f168015610ce85780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b1515610d0657600080fd5b6102c65a03f11515610d1757600080fd5b50505060405180519392505050565b60008151602083015160408401516040517e0100000000000000000000000000000000000000000000000000000000000061ffff9485168102825292841683026002820152921602600482015260060160405180910390209050919050565b600080548190600160a060020a03166342c71f1d6040517f6170700000000000000000000000000000000000000000000000000000000000815260030160405180910390206040517f65766d7265672e617261676f6e706d2e6574680000000000000000000000000081526013016040518091039020604051918252602082015260409081019051809103902060006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515610d0657600080fd5b60606040519081016040526003815b600081526000199091019060200181610e605790505090565b60206040519081016040526000815290565b815481835581811511610eb757600302816003028360005260206000209182019101610eb79190610fc8565b505050565b600183019183908215610f425791602002820160005b83821115610f1257835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302610ed2565b8015610f405782816101000a81549061ffff0219169055600201602081600101049283019260010302610f12565b505b50610c37929150611018565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610f8f57805160ff1916838001178555610fbc565b82800160010185558215610fbc579182015b82811115610fbc578251825591602001919060010190610fa1565b50610c37929150611037565b61090991905b80821115610c37576000610fe28282611051565b60018201805473ffffffffffffffffffffffffffffffffffffffff1916905561100f600283016000611058565b50600301610fce565b61090991905b80821115610c3757805461ffff1916815560010161101e565b61090991905b80821115610c37576000815560010161103d565b5060009055565b50805460018160011615610100020316600290046000825580601f1061107e575061109c565b601f01602090049060005260206000209081019061109c9190611037565b505600a165627a7a72305820a2b61a46ff68487c6958b69dee15c17471d446f8b15b7e9777da4a8630da028e0029
Swarm Source
bzzr://a2b61a46ff68487c6958b69dee15c17471d446f8b15b7e9777da4a8630da028e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.