Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xe278b85a...e2965c058 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
MutableForwarder
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.4.18; import "./DelegateProxy.sol"; import "./DSAuth.sol"; /** * @title Forwarder proxy contract with editable target * * @dev For TCR Registry contracts (Registry.sol, ParamChangeRegistry.sol) we use mutable forwarders instead of using * contracts directly. This is for better upgradeability. Since registry contracts fire all events related to registry * entries, we want to be able to access whole history of events always on the same address. Which would be address of * a MutableForwarder. When a registry contract is replaced with updated one, mutable forwarder just replaces target * and all events stay still accessible on the same address. */ contract MutableForwarder is DelegateProxy, DSAuth { address public target = 0xf4e6e033921b34f89b0586beb2d529e8eae3e021; // checksumed to silence warning /** * @dev Replaces targer forwarder contract is pointing to * Only authenticated user can replace target * @param _target New target to proxy into */ function setTarget(address _target) public auth { target = _target; } function() payable { delegatedFwd(target, msg.data); } }
pragma solidity ^0.4.18; contract DelegateProxy { /** * @dev Performs a delegatecall and returns whatever the delegatecall returned (entire context execution will return!) * @param _dst Destination address to perform the delegatecall * @param _calldata Calldata for the delegatecall */ function delegatedFwd(address _dst, bytes _calldata) internal { require(isContract(_dst)); assembly { let result := delegatecall(sub(gas, 10000), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) // revert instead of invalid() bc if the underlying call failed with invalid() it already wasted gas. // if the call returned error data, forward it switch result case 0 {revert(ptr, size)} default {return (ptr, size)} } } function isContract(address _target) internal view returns (bool) { uint256 size; assembly {size := extcodesize(_target)} return size > 0; } }
// 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.13; 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; function DSAuth() public { owner = msg.sender; LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; 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 Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"owner_","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"setTarget","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"authority_","type":"address"}],"name":"setAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"authority","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"target","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"authority","type":"address"}],"name":"LogSetAuthority","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"LogSetOwner","type":"event"}]
Deployed Bytecode
0x608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806313af4035146100d9578063776d1a011461011c5780637a9e5e4b1461015f5780638da5cb5b146101a2578063bf7e214f146101f9578063d4b8399214610250575b6100d7600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000368080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050506102a7565b005b3480156100e557600080fd5b5061011a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506102e5565b005b34801561012857600080fd5b5061015d600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c7565b005b34801561016b57600080fd5b506101a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610444565b005b3480156101ae57600080fd5b506101b7610524565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561020557600080fd5b5061020e61054a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025c57600080fd5b5061026561056f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102b082610595565b15156102bb57600080fd5b600080825160208401856127105a03f43d604051816000823e82600081146102e1578282f35b8282fd5b610313336000357fffffffff00000000000000000000000000000000000000000000000000000000166105a8565b151561031e57600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fce241d7ca1f669fee44b6fc00b8eba2df3bb514eed0f6f668f8f89096e81ed9460405160405180910390a250565b6103f5336000357fffffffff00000000000000000000000000000000000000000000000000000000166105a8565b151561040057600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610472336000357fffffffff00000000000000000000000000000000000000000000000000000000166105a8565b151561047d57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f1abebea81bfa2637f28358c371278fb15ede7ea8dd28d2e03b112ff6d936ada460405160405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105e75760019050610819565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106465760019050610819565b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156106a55760009050610819565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b70096138430856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019350505050602060405180830381600087803b1580156107db57600080fd5b505af11580156107ef573d6000803e3d6000fd5b505050506040513d602081101561080557600080fd5b810190808051906020019092919050505090505b929150505600a165627a7a7230582041cb6b7ffd5f3d14dd1c6e0aff407558904101bef8fe2ca155e33d79bbaeb7830029
Deployed Bytecode Sourcemap
682:467:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1111:30;1124:6;;;;;;;;;;;1132:8;;1111:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:30::i;:::-;682:467;1105:101:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1105:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1007:75:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1007:75:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;1210:129:0;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1210:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;987:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;987:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;953:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;953:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;738:66:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;738:66:2;;;;;;;;;;;;;;;;;;;;;;;;;;;299:559:1;375:16;386:4;375:10;:16::i;:::-;367:25;;;;;;;;508:1;505;493:9;487:16;480:4;469:9;465:20;459:4;451:5;446:3;442:15;429:81;529:14;568:4;562:11;603:4;600:1;595:3;580:28;780:6;792:1;787:26;;;;842:4;837:3;829:18;787:26;807:4;802:3;795:17;1105:101:0;1371:33;1384:10;1396:7;;;;1371:12;:33::i;:::-;1363:42;;;;;;;;1171:6;1163:5;;:14;;;;;;;;;;;;;;;;;;1195:5;;;;;;;;;;;1183:18;;;;;;;;;;;;1105:101;:::o;1007:75:2:-;1371:33:0;1384:10;1396:7;;;;1371:12;:33::i;:::-;1363:42;;;;;;;;1070:7:2;1061:6;;:16;;;;;;;;;;;;;;;;;;1007:75;:::o;1210:129:0:-;1371:33;1384:10;1396:7;;;;1371:12;:33::i;:::-;1363:42;;;;;;;;1292:10;1280:9;;:22;;;;;;;;;;;;;;;;;;1324:9;;;;;;;;;;;1308:26;;;;;;;;;;;;1210:129;:::o;987:26::-;;;;;;;;;;;;;:::o;953:30::-;;;;;;;;;;;;;:::o;738:66:2:-;;;;;;;;;;;;;:::o;862:154:1:-;922:4;934:12;982:7;970:20;962:28;;1010:1;1003:4;:8;996:15;;862:154;;;;:::o;1421:315:0:-;1491:4;1522;1507:20;;:3;:20;;;1503:229;;;1544:4;1537:11;;;;1503:229;1572:5;;;;;;;;;;;1565:12;;:3;:12;;;1561:171;;;1594:4;1587:11;;;;1561:171;1640:1;1615:27;;:9;;;;;;;;;;;:27;;;1611:121;;;1659:5;1652:12;;;;1611:121;1692:9;;;;;;;;;;;:17;;;1710:3;1715:4;1721:3;1692:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1692:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1692:33:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1692:33:0;;;;;;;;;;;;;;;;1685:40;;1421:315;;;;;:::o
Swarm Source
bzzr://41cb6b7ffd5f3d14dd1c6e0aff407558904101bef8fe2ca155e33d79bbaeb783
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.