Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xFC529276263392E0032953D5D1c9Ae96c66DF82c
Contract Name:
UpgradableProxy
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-06-18 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.6; interface IERCProxy { function proxyType() external pure returns (uint256 proxyTypeId); function implementation() external view returns (address codeAddr); } abstract contract Proxy is IERCProxy { function delegatedFwd(address _dst, bytes memory _calldata) internal { // solium-disable-next-line security/no-inline-assembly 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 proxyType() external pure virtual override returns (uint256 proxyTypeId) { // Upgradeable proxy proxyTypeId = 2; } function implementation() external view virtual override returns (address); } contract UpgradableProxy is Proxy { event ProxyUpdated(address indexed _new, address indexed _old); event ProxyOwnerUpdate(address _new, address _old); bytes32 constant IMPLEMENTATION_SLOT = keccak256("matic.network.proxy.implementation"); bytes32 constant OWNER_SLOT = keccak256("matic.network.proxy.owner"); constructor(address _proxyTo) { setProxyOwner(msg.sender); setImplementation(_proxyTo); } fallback() external payable { delegatedFwd(loadImplementation(), msg.data); } receive() external payable { delegatedFwd(loadImplementation(), msg.data); } modifier onlyProxyOwner() { require(loadProxyOwner() == msg.sender, "NOT_OWNER"); _; } function proxyOwner() external view returns (address) { return loadProxyOwner(); } function loadProxyOwner() internal view returns (address) { address _owner; bytes32 position = OWNER_SLOT; assembly { _owner := sload(position) } return _owner; } function implementation() external view override returns (address) { return loadImplementation(); } function loadImplementation() internal view returns (address) { address _impl; bytes32 position = IMPLEMENTATION_SLOT; assembly { _impl := sload(position) } return _impl; } function transferProxyOwnership(address newOwner) public onlyProxyOwner { require(newOwner != address(0), "ZERO_ADDRESS"); emit ProxyOwnerUpdate(newOwner, loadProxyOwner()); setProxyOwner(newOwner); } function setProxyOwner(address newOwner) private { bytes32 position = OWNER_SLOT; assembly { sstore(position, newOwner) } } function updateImplementation(address _newProxyTo) public onlyProxyOwner { require(_newProxyTo != address(0x0), "INVALID_PROXY_ADDRESS"); require( isContract(_newProxyTo), "DESTINATION_ADDRESS_IS_NOT_A_CONTRACT" ); emit ProxyUpdated(_newProxyTo, loadImplementation()); setImplementation(_newProxyTo); } function updateAndCall(address _newProxyTo, bytes memory data) public payable onlyProxyOwner { updateImplementation(_newProxyTo); (bool success, bytes memory returnData) = address(this).call{ value: msg.value }(data); require(success, string(returnData)); } function setImplementation(address _newProxyTo) private { bytes32 position = IMPLEMENTATION_SLOT; assembly { sstore(position, _newProxyTo) } } function isContract(address _target) internal view returns (bool) { if (_target == address(0)) { return false; } uint256 size; assembly { size := extcodesize(_target) } return size > 0; } }
[{"inputs":[{"internalType":"address","name":"_proxyTo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_new","type":"address"},{"indexed":false,"internalType":"address","name":"_old","type":"address"}],"name":"ProxyOwnerUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_new","type":"address"},{"indexed":true,"internalType":"address","name":"_old","type":"address"}],"name":"ProxyUpdated","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyType","outputs":[{"internalType":"uint256","name":"proxyTypeId","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferProxyOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newProxyTo","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"updateAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newProxyTo","type":"address"}],"name":"updateImplementation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516108003803806108008339818101604052602081101561003357600080fd5b505161003e3361004d565b61004781610071565b50610095565b7f44f6e2e8884cba1236b7f22f351fa5d88b17292b7e0225ca47e5ecdf6055cdd655565b7fbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f55565b61075c806100a46000396000f3fe6080604052600436106100595760003560e01c8063025313a2146100b3578063025b22bc146100e45780634555d5c9146101175780635c60da1b1461013e578063d88ca2c814610153578063f1739cae14610209576100a8565b366100a8576100a661006961023c565b6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061026192505050565b005b6100a661006961023c565b3480156100bf57600080fd5b506100c8610289565b604080516001600160a01b039092168252519081900360200190f35b3480156100f057600080fd5b506100a66004803603602081101561010757600080fd5b50356001600160a01b0316610298565b34801561012357600080fd5b5061012c6103d2565b60408051918252519081900360200190f35b34801561014a57600080fd5b506100c86103d7565b6100a66004803603604081101561016957600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561019457600080fd5b8201836020820111156101a657600080fd5b803590602001918460018302840111640100000000831117156101c857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506103e1945050505050565b34801561021557600080fd5b506100a66004803603602081101561022c57600080fd5b50356001600160a01b0316610576565b7fbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f5490565b600080825160208401856127105a03f43d604051816000823e828015610285578282f35b8282fd5b6000610293610671565b905090565b336102a1610671565b6001600160a01b0316146102e8576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001600160a01b03811661033b576040805162461bcd60e51b8152602060048201526015602482015274494e56414c49445f50524f58595f4144445245535360581b604482015290519081900360640190fd5b61034481610696565b61037f5760405162461bcd60e51b81526004018080602001828103825260258152602001806107026025913960400191505060405180910390fd5b61038761023c565b6001600160a01b0316816001600160a01b03167fd32d24edea94f55e932d9a008afc425a8561462d1b1f57bc6e508e9a6b9509e160405160405180910390a36103cf816106b9565b50565b600290565b600061029361023c565b336103ea610671565b6001600160a01b031614610431576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b61043a82610298565b600080306001600160a01b031634846040518082805190602001908083835b602083106104785780518252601f199092019160209182019101610459565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146104da576040519150601f19603f3d011682016040523d82523d6000602084013e6104df565b606091505b509150915081819061056f5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561053457818101518382015260200161051c565b50505050905090810190601f1680156105615780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5050505050565b3361057f610671565b6001600160a01b0316146105c6576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b6001600160a01b038116610610576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b7fdbe5fd65bcdbae152f24ab660ea68e72b4d4705b57b16e0caae994e214680ee28161063a610671565b60405180836001600160a01b03168152602001826001600160a01b031681526020019250505060405180910390a16103cf816106dd565b7f44f6e2e8884cba1236b7f22f351fa5d88b17292b7e0225ca47e5ecdf6055cdd65490565b60006001600160a01b0382166106ae575060006106b4565b50803b15155b919050565b7fbaab7dbf64751104133af04abc7d9979f0fda3b059a322a8333f533d3f32bf7f55565b7f44f6e2e8884cba1236b7f22f351fa5d88b17292b7e0225ca47e5ecdf6055cdd65556fe44455354494e4154494f4e5f414444524553535f49535f4e4f545f415f434f4e5452414354a264697066735822122059551fbbee5f4f7c9161fa1c556c3ac008e38f3a10f73237fe9a96eae445f2eb64736f6c63430007060033000000000000000000000000db830cf24ae2bd57bd4fc3320721f06847005ef2
Deployed ByteCode Sourcemap
1445:3120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2056:44;2069:20;:18;:20::i;:::-;2091:8;;2056:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2056:12:0;;-1:-1:-1;;;2056:44:0:i;:::-;1445:3120;;1958:44;1971:20;:18;:20::i;2233:96::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2233:96:0;;;;;;;;;;;;;;3350:382;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3350:382:0;-1:-1:-1;;;;;3350:382:0;;:::i;1159:196::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2570:113;;;;;;;;;;;;;:::i;3740:345::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3740:345:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3740:345:0;;-1:-1:-1;3740:345:0;;-1:-1:-1;;;;;3740:345:0:i;2934:232::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2934:232:0;-1:-1:-1;;;;;2934:232:0;;:::i;2691:235::-;1668:47;2870:15;2691:235;:::o;279:872::-;646:1;626;597:9;591:16;567:4;556:9;552:20;529:4;504:5;497;493:17;462:200;688:16;737:4;731:11;779:4;776:1;771:3;756:28;982:6;1002:58;;;;1113:4;1108:3;1101:17;1002:58;1040:4;1035:3;1028:17;2233:96;2278:7;2305:16;:14;:16::i;:::-;2298:23;;2233:96;:::o;3350:382::-;2181:10;2161:16;:14;:16::i;:::-;-1:-1:-1;;;;;2161:30:0;;2153:52;;;;;-1:-1:-1;;;2153:52:0;;;;;;;;;;;;-1:-1:-1;;;2153:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3442:27:0;::::1;3434:61;;;::::0;;-1:-1:-1;;;3434:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3434:61:0;;;;;;;;;;;;;::::1;;3528:23;3539:11;3528:10;:23::i;:::-;3506:110;;;;-1:-1:-1::0;;;3506:110:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3660:20;:18;:20::i;:::-;-1:-1:-1::0;;;;;3634:47:0::1;3647:11;-1:-1:-1::0;;;;;3634:47:0::1;;;;;;;;;;;3694:30;3712:11;3694:17;:30::i;:::-;3350:382:::0;:::o;1159:196::-;1346:1;;1159:196::o;2570:113::-;2628:7;2655:20;:18;:20::i;3740:345::-;2181:10;2161:16;:14;:16::i;:::-;-1:-1:-1;;;;;2161:30:0;;2153:52;;;;;-1:-1:-1;;;2153:52:0;;;;;;;;;;;;-1:-1:-1;;;2153:52:0;;;;;;;;;;;;;;;3876:33:::1;3897:11;3876:20;:33::i;:::-;3923:12;3937:23:::0;3972:4:::1;-1:-1:-1::0;;;;;3964:18:0::1;4004:9;4025:4;3964:66;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;3964:66:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3922:108;;;;4049:7;4065:10;4041:36;;;;;-1:-1:-1::0;;;4041:36:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:1;;3740:345:::0;;:::o;2934:232::-;2181:10;2161:16;:14;:16::i;:::-;-1:-1:-1;;;;;2161:30:0;;2153:52;;;;;-1:-1:-1;;;2153:52:0;;;;;;;;;;;;-1:-1:-1;;;2153:52:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3025:22:0;::::1;3017:47;;;::::0;;-1:-1:-1;;;3017:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;3017:47:0;;;;;;;;;;;;;::::1;;3080:44;3097:8;3107:16;:14;:16::i;:::-;3080:44;;;;-1:-1:-1::0;;;;;3080:44:0::1;;;;;;-1:-1:-1::0;;;;;3080:44:0::1;;;;;;;;;;;;;;;;3135:23;3149:8;3135:13;:23::i;2337:225::-:0;1752:38;2505:15;2337:225;:::o;4288:274::-;4348:4;-1:-1:-1;;;;;4369:21:0;;4365:66;;-1:-1:-1;4414:5:0;4407:12;;4365:66;-1:-1:-1;4498:20:0;;4546:8;;4288:274;;;;:::o;4093:187::-;1668:47;4233:29;4218:55::o;3174:168::-;1752:38;3298:26;3283:52::o
Swarm Source
ipfs://59551fbbee5f4f7c9161fa1c556c3ac008e38f3a10f73237fe9a96eae445f2eb
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.