More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 87,132 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Build | 21784839 | 32 hrs ago | IN | 0 ETH | 0.00084238 | ||||
Build | 21764607 | 4 days ago | IN | 0 ETH | 0.00935316 | ||||
Build | 21704302 | 12 days ago | IN | 0 ETH | 0.00236324 | ||||
Build | 21674897 | 16 days ago | IN | 0 ETH | 0.01420038 | ||||
Build | 21641947 | 21 days ago | IN | 0 ETH | 0.00234633 | ||||
Build | 21639172 | 21 days ago | IN | 0 ETH | 0.00529972 | ||||
Build | 21617378 | 24 days ago | IN | 0 ETH | 0.00442804 | ||||
Build | 21589872 | 28 days ago | IN | 0 ETH | 0.00352581 | ||||
Build | 21548633 | 34 days ago | IN | 0 ETH | 0.00300802 | ||||
Build | 21538787 | 35 days ago | IN | 0 ETH | 0.00763082 | ||||
Build | 21493162 | 42 days ago | IN | 0 ETH | 0.00275959 | ||||
Build | 21481162 | 43 days ago | IN | 0 ETH | 0.00463559 | ||||
Build | 21463128 | 46 days ago | IN | 0 ETH | 0.00234731 | ||||
Build | 21460805 | 46 days ago | IN | 0 ETH | 0.00342914 | ||||
Build | 21460737 | 46 days ago | IN | 0 ETH | 0.00560388 | ||||
Build | 21429637 | 50 days ago | IN | 0 ETH | 0.00911053 | ||||
Build | 21415652 | 52 days ago | IN | 0 ETH | 0.00831061 | ||||
Build | 21406518 | 54 days ago | IN | 0 ETH | 0.0041731 | ||||
Build | 21406422 | 54 days ago | IN | 0 ETH | 0.00365957 | ||||
Build | 21406227 | 54 days ago | IN | 0 ETH | 0.00381541 | ||||
Build | 21391202 | 56 days ago | IN | 0 ETH | 0.00037289 | ||||
Build | 21391184 | 56 days ago | IN | 0 ETH | 0.00856362 | ||||
Build | 21386703 | 56 days ago | IN | 0 ETH | 0.01384375 | ||||
Build | 21380229 | 57 days ago | IN | 0 ETH | 0.02095801 | ||||
Build | 21377282 | 58 days ago | IN | 0 ETH | 0.00602993 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ProxyRegistry
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-06-22 */ // proxy.sol - execute actions atomically through the proxy's identity // Copyright (C) 2017 DappHub, LLC // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. pragma solidity ^0.4.23; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } // DSProxy // Allows code execution using a persistant identity This can be very // useful to execute a sequence of atomic actions. Since the owner of // the proxy can be changed, this allows for dynamic ownership models // i.e. a multisig contract DSProxy is DSAuth, DSNote { DSProxyCache public cache; // global cache for contracts constructor(address _cacheAddr) public { require(setCache(_cacheAddr)); } function() public payable { } // use the proxy to execute calldata _data on contract _code function execute(bytes _code, bytes _data) public payable returns (address target, bytes32 response) { target = cache.read(_code); if (target == 0x0) { // deploy contract & store its address in cache target = cache.write(_code); } response = execute(target, _data); } function execute(address _target, bytes _data) public auth note payable returns (bytes32 response) { require(_target != 0x0); // call contract in current context assembly { let succeeded := delegatecall(sub(gas, 5000), _target, add(_data, 0x20), mload(_data), 0, 32) response := mload(0) // load delegatecall output switch iszero(succeeded) case 1 { // throw if delegatecall failed revert(0, 0) } } } //set new cache function setCache(address _cacheAddr) public auth note returns (bool) { require(_cacheAddr != 0x0); // invalid cache address cache = DSProxyCache(_cacheAddr); // overwrite cache return true; } } // DSProxyFactory // This factory deploys new proxy instances through build() // Deployed proxy addresses are logged contract DSProxyFactory { event Created(address indexed sender, address indexed owner, address proxy, address cache); mapping(address=>bool) public isProxy; DSProxyCache public cache = new DSProxyCache(); // deploys a new proxy instance // sets owner of proxy to caller function build() public returns (DSProxy proxy) { proxy = build(msg.sender); } // deploys a new proxy instance // sets custom owner of proxy function build(address owner) public returns (DSProxy proxy) { proxy = new DSProxy(cache); emit Created(msg.sender, owner, address(proxy), address(cache)); proxy.setOwner(owner); isProxy[proxy] = true; } } // DSProxyCache // This global cache stores addresses of contracts previously deployed // by a proxy. This saves gas from repeat deployment of the same // contracts and eliminates blockchain bloat. // By default, all proxies deployed from the same factory store // contracts in the same cache. The cache a proxy instance uses can be // changed. The cache uses the sha3 hash of a contract's bytecode to // lookup the address contract DSProxyCache { mapping(bytes32 => address) cache; function read(bytes _code) public view returns (address) { bytes32 hash = keccak256(_code); return cache[hash]; } function write(bytes _code) public returns (address target) { assembly { target := create(0, add(_code, 0x20), mload(_code)) switch iszero(extcodesize(target)) case 1 { // throw if contract failed to deploy revert(0, 0) } } bytes32 hash = keccak256(_code); cache[hash] = target; } } // ProxyRegistry // This Registry deploys new proxy instances through DSProxyFactory.build(address) and keeps a registry of owner => proxy contract ProxyRegistry { mapping(address => DSProxy) public proxies; DSProxyFactory factory; constructor(DSProxyFactory factory_) public { factory = factory_; } // deploys a new proxy instance // sets owner of proxy to caller function build() public returns (DSProxy proxy) { proxy = build(msg.sender); } // deploys a new proxy instance // sets custom owner of proxy function build(address owner) public returns (DSProxy proxy) { require(proxies[owner] == DSProxy(0) || proxies[owner].owner() != owner); // Not allow new proxy if the user already has one and remains being the owner proxy = factory.build(owner); proxies[owner] = proxy; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"build","outputs":[{"name":"proxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"proxies","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"build","outputs":[{"name":"proxy","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"factory_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051602080610319833981016040525160018054600160a060020a031916600160a060020a039092169190911790556102c9806100506000396000f3006080604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638e1a55fc811461005b578063c45527911461008c578063f3701da2146100ad575b600080fd5b34801561006757600080fd5b506100706100ce565b60408051600160a060020a039092168252519081900360200190f35b34801561009857600080fd5b50610070600160a060020a03600435166100de565b3480156100b957600080fd5b50610070600160a060020a03600435166100f9565b60006100d9336100f9565b905090565b600060208190529081526040902054600160a060020a031681565b600160a060020a0381811660009081526020819052604081205490911615806101be5750600160a060020a038083166000818152602081815260408083205481517f8da5cb5b000000000000000000000000000000000000000000000000000000008152915194951693638da5cb5b93600480840194938390030190829087803b15801561018657600080fd5b505af115801561019a573d6000803e3d6000fd5b505050506040513d60208110156101b057600080fd5b5051600160a060020a031614155b15156101c957600080fd5b600154604080517ff3701da2000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301529151919092169163f3701da29160248083019260209291908290030181600087803b15801561023157600080fd5b505af1158015610245573d6000803e3d6000fd5b505050506040513d602081101561025b57600080fd5b5051600160a060020a039283166000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19169382169390931790925550905600a165627a7a72305820b8fbb618658e361e3b872cf31c29da0b8a560429629060d4c0ecf52ab32fa7c60029000000000000000000000000a26e15c895efc0616177b7c1e7270a4c7d51c997
Deployed Bytecode
0x6080604052600436106100565763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416638e1a55fc811461005b578063c45527911461008c578063f3701da2146100ad575b600080fd5b34801561006757600080fd5b506100706100ce565b60408051600160a060020a039092168252519081900360200190f35b34801561009857600080fd5b50610070600160a060020a03600435166100de565b3480156100b957600080fd5b50610070600160a060020a03600435166100f9565b60006100d9336100f9565b905090565b600060208190529081526040902054600160a060020a031681565b600160a060020a0381811660009081526020819052604081205490911615806101be5750600160a060020a038083166000818152602081815260408083205481517f8da5cb5b000000000000000000000000000000000000000000000000000000008152915194951693638da5cb5b93600480840194938390030190829087803b15801561018657600080fd5b505af115801561019a573d6000803e3d6000fd5b505050506040513d60208110156101b057600080fd5b5051600160a060020a031614155b15156101c957600080fd5b600154604080517ff3701da2000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301529151919092169163f3701da29160248083019260209291908290030181600087803b15801561023157600080fd5b505af1158015610245573d6000803e3d6000fd5b505050506040513d602081101561025b57600080fd5b5051600160a060020a039283166000908152602081905260409020805473ffffffffffffffffffffffffffffffffffffffff19169382169390931790925550905600a165627a7a72305820b8fbb618658e361e3b872cf31c29da0b8a560429629060d4c0ecf52ab32fa7c60029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a26e15c895efc0616177b7c1e7270a4c7d51c997
-----Decoded View---------------
Arg [0] : factory_ (address): 0xA26e15C895EFc0616177B7c1e7270A4C7D51C997
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a26e15c895efc0616177b7c1e7270a4c7d51c997
Swarm Source
bzzr://b8fbb618658e361e3b872cf31c29da0b8a560429629060d4c0ecf52ab32fa7c6
Loading...
Loading
Loading...
Loading
OVERVIEW
Sky (formerly Maker) enables users to get rewarded for non-custodial savings.Loading...
Loading
[ Download: CSV Export ]
[ 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.