Address Details
contract
proxy
validator group
0x7C75B0B81A54359E9dCCDa9cb663ca2e3De6B710
- Contract Name
- Proxy
- Creator
- 0x743d80–035b13 at 0x6d58b2–0e544b
- Implementation
- 0x6ad72b56a1218fd2f5755e5c6f0023f96ba6774f
- Balance
- 0.000004629398400855 CELO ( )
- Locked CELO Balance
- 51311.32 CELO
- Voting CELO Balance
- 51311.32 CELO
- Pending Unlocked Gold
- 0.00 CELO
- Validator Rewards | Voting Rewards
- 626595.65 cUSD | 6079.31 CELO
- Tokens
-
Fetching tokens...
- Transactions
- 163 Transactions
- Transfers
- 4,580 Transfers
- Gas Used
- 10,982,744
- Last Balance Update
- 29082240
Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Celo Info
Epoch Transactions
Code
Read Contract
Read Proxy
Write Contract
Write Proxy
This contract has been partially verified via Sourcify.
View contract in Sourcify repository
- Contract name:
- Proxy
- Optimization enabled
- false
- Compiler version
- v0.5.13+commit.5b0b510c
- EVM Version
- istanbul
- Verified at
- 2021-08-21T00:08:30.393197Z
Contract source code
pragma solidity ^0.5.13; /* solhint-disable no-inline-assembly, no-complex-fallback, avoid-low-level-calls */ import "openzeppelin-solidity/contracts/utils/Address.sol"; /** * @title A Proxy utilizing the Unstructured Storage pattern. */ contract Proxy { // Used to store the address of the owner. bytes32 private constant OWNER_POSITION = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1); // Used to store the address of the implementation contract. bytes32 private constant IMPLEMENTATION_POSITION = bytes32( uint256(keccak256("eip1967.proxy.implementation")) - 1 ); event OwnerSet(address indexed owner); event ImplementationSet(address indexed implementation); constructor() public { _setOwner(msg.sender); } /** * @notice Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == _getOwner(), "sender was not owner"); _; } /** * @notice Delegates calls to the implementation contract. */ function() external payable { bytes32 implementationPosition = IMPLEMENTATION_POSITION; address implementationAddress; // Load the address of the implementation contract from an explicit storage slot. assembly { implementationAddress := sload(implementationPosition) } // Avoid checking if address is a contract or executing delegated call when // implementation address is 0x0 require(implementationAddress != address(0), "No Implementation set"); require(Address.isContract(implementationAddress), "Invalid contract address"); assembly { // Extract the position of the transaction data (i.e. function ID and arguments). let newCallDataPosition := mload(0x40) mstore(0x40, add(newCallDataPosition, calldatasize)) calldatacopy(newCallDataPosition, 0, calldatasize) // Call the smart contract at `implementationAddress` in the context of the proxy contract, // with the same msg.sender and value. let delegatecallSuccess := delegatecall( gas, implementationAddress, newCallDataPosition, calldatasize, 0, 0 ) // Copy the return value of the call so it can be returned. let returnDataSize := returndatasize let returnDataPosition := mload(0x40) mstore(0x40, add(returnDataPosition, returnDataSize)) returndatacopy(returnDataPosition, 0, returnDataSize) // Revert or return depending on whether or not the call was successful. switch delegatecallSuccess case 0 { revert(returnDataPosition, returnDataSize) } default { return(returnDataPosition, returnDataSize) } } } /** * @notice Transfers ownership of Proxy to a new owner. * @param newOwner Address of the new owner account. */ function _transferOwnership(address newOwner) external onlyOwner { _setOwner(newOwner); } /** * @notice Sets the address of the implementation contract and calls into it. * @param implementation Address of the new target contract. * @param callbackData The abi-encoded function call to perform in the implementation * contract. * @dev Throws if the initialization callback fails. * @dev If the target contract does not need initialization, use * setImplementation instead. */ function _setAndInitializeImplementation(address implementation, bytes calldata callbackData) external payable onlyOwner { _setImplementation(implementation); bool success; bytes memory returnValue; (success, returnValue) = implementation.delegatecall(callbackData); require(success, "initialization callback failed"); } /** * @notice Returns the implementation address. */ function _getImplementation() external view returns (address implementation) { bytes32 implementationPosition = IMPLEMENTATION_POSITION; // Load the address of the implementation contract from an explicit storage slot. assembly { implementation := sload(implementationPosition) } } /** * @notice Sets the address of the implementation contract. * @param implementation Address of the new target contract. * @dev If the target contract needs to be initialized, call * setAndInitializeImplementation instead. */ function _setImplementation(address implementation) public onlyOwner { bytes32 implementationPosition = IMPLEMENTATION_POSITION; require(Address.isContract(implementation), "Invalid contract address"); // Store the address of the implementation contract in an explicit storage slot. assembly { sstore(implementationPosition, implementation) } emit ImplementationSet(implementation); } /** * @notice Returns the Proxy owner's address. */ function _getOwner() public view returns (address owner) { bytes32 position = OWNER_POSITION; // Load the address of the contract owner from an explicit storage slot. assembly { owner := sload(position) } } function _setOwner(address newOwner) private { require(newOwner != address(0), "owner cannot be 0"); bytes32 position = OWNER_POSITION; // Store the address of the contract owner in an explicit storage slot. assembly { sstore(position, newOwner) } emit OwnerSet(newOwner); } }
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"event","name":"ImplementationSet","inputs":[{"type":"address","name":"implementation","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnerSet","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true}],"anonymous":false},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"implementation","internalType":"address"}],"name":"_getImplementation","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"owner","internalType":"address"}],"name":"_getOwner","inputs":[],"constant":true},{"type":"function","stateMutability":"payable","payable":true,"outputs":[],"name":"_setAndInitializeImplementation","inputs":[{"type":"address","name":"implementation","internalType":"address"},{"type":"bytes","name":"callbackData","internalType":"bytes"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_setImplementation","inputs":[{"type":"address","name":"implementation","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"_transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}],"constant":false}]
Contract Creation Code
0x60806040526100133361001860201b60201c565b610148565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156100bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f776e65722063616e6e6f74206265203000000000000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a25050565b610a19806101576000396000f3fe60806040526004361061004a5760003560e01c806303386ba3146101e757806342404e0714610280578063bb913f41146102d7578063d29d44ee14610328578063f7e6af8014610379575b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050600081549050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20496d706c656d656e746174696f6e20736574000000000000000000000081525060200191505060405180910390fd5b61013f816103d0565b6101b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b60405136810160405236600082376000803683855af43d604051818101604052816000823e82600081146101e3578282f35b8282fd5b61027e600480360360408110156101fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184600183028401116401000000008311171561026e57600080fd5b909192939192939050505061041b565b005b34801561028c57600080fd5b506102956105c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e357600080fd5b50610326600480360360208110156102fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061060d565b005b34801561033457600080fd5b506103776004803603602081101561034b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107bd565b005b34801561038557600080fd5b5061038e610871565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561041257506000801b8214155b92505050919050565b610423610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6104cc8361060d565b600060608473ffffffffffffffffffffffffffffffffffffffff168484604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610539576040519150601f19603f3d011682016040523d82523d6000602084013e61053e565b606091505b508092508193505050816105ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e697469616c697a6174696f6e2063616c6c6261636b206661696c6564000081525060200191505060405180910390fd5b5050505050565b600080600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050805491505090565b610615610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050610701826103d0565b610773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b8181558173ffffffffffffffffffffffffffffffffffffffff167fab64f92ab780ecbf4f3866f57cee465ff36c89450dcce20237ca7a8d81fb7d1360405160405180910390a25050565b6107c5610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b61086e816108bd565b50565b600080600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b9050805491505090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f776e65722063616e6e6f74206265203000000000000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a2505056fea165627a7a72305820b862497decc842ed6b2cf9c83b03f37ae84f22688fd3d3c38b832781ecde44c60029
Deployed ByteCode
0x60806040526004361061004a5760003560e01c806303386ba3146101e757806342404e0714610280578063bb913f41146102d7578063d29d44ee14610328578063f7e6af8014610379575b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050600081549050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610136576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4e6f20496d706c656d656e746174696f6e20736574000000000000000000000081525060200191505060405180910390fd5b61013f816103d0565b6101b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b60405136810160405236600082376000803683855af43d604051818101604052816000823e82600081146101e3578282f35b8282fd5b61027e600480360360408110156101fd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561023a57600080fd5b82018360208201111561024c57600080fd5b8035906020019184600183028401116401000000008311171561026e57600080fd5b909192939192939050505061041b565b005b34801561028c57600080fd5b506102956105c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156102e357600080fd5b50610326600480360360208110156102fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061060d565b005b34801561033457600080fd5b506103776004803603602081101561034b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107bd565b005b34801561038557600080fd5b5061038e610871565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561041257506000801b8214155b92505050919050565b610423610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6104cc8361060d565b600060608473ffffffffffffffffffffffffffffffffffffffff168484604051808383808284378083019250505092505050600060405180830381855af49150503d8060008114610539576040519150601f19603f3d011682016040523d82523d6000602084013e61053e565b606091505b508092508193505050816105ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f696e697469616c697a6174696f6e2063616c6c6261636b206661696c6564000081525060200191505060405180910390fd5b5050505050565b600080600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050805491505090565b610615610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e696d706c656d656e746174696f6e00000000815250601c019050604051809103902060001c0360001b9050610701826103d0565b610773576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e76616c696420636f6e74726163742061646472657373000000000000000081525060200191505060405180910390fd5b8181558173ffffffffffffffffffffffffffffffffffffffff167fab64f92ab780ecbf4f3866f57cee465ff36c89450dcce20237ca7a8d81fb7d1360405160405180910390a25050565b6107c5610871565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f73656e64657220776173206e6f74206f776e657200000000000000000000000081525060200191505060405180910390fd5b61086e816108bd565b50565b600080600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b9050805491505090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6f776e65722063616e6e6f74206265203000000000000000000000000000000081525060200191505060405180910390fd5b6000600160405180807f656970313936372e70726f78792e61646d696e000000000000000000000000008152506013019050604051809103902060001c0360001b90508181558173ffffffffffffffffffffffffffffffffffffffff167f50146d0e3c60aa1d17a70635b05494f864e86144a2201275021014fbf08bafe260405160405180910390a2505056fea165627a7a72305820b862497decc842ed6b2cf9c83b03f37ae84f22688fd3d3c38b832781ecde44c60029