Contract
0x969d515486ba6133400ac9c73298586426a090f5
3
Contract Overview
Balance:
0 GLMR
GLMR Value:
$0.00
My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x629b25a99678051b3343b2dc92835eb4d730c2042a7507ede0ae966e23201276 | 0x60a06040 | 171369 | 507 days 21 hrs ago | 0xa5bd5c661f373256c0ccfbc628fd52de74f9bb55 | IN | Contract Creation | 0 GLMR | 0.0288924 |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xFe8874778f946Ac2990A29eba3CFd50760593B2F
Contract Name:
UpgradeBeacon
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.6.11; // ============ External Imports ============ import {Address} from "@openzeppelin/contracts/utils/Address.sol"; /** * @title UpgradeBeacon * @notice Stores the address of an implementation contract * and allows a controller to upgrade the implementation address * @dev This implementation combines the gas savings of having no function selectors * found in 0age's implementation: * https://github.com/dharma-eng/dharma-smart-wallet/blob/master/contracts/proxies/smart-wallet/UpgradeBeaconProxyV1.sol * With the added niceties of a safety check that each implementation is a contract * and an Upgrade event emitted each time the implementation is changed * found in OpenZeppelin's implementation: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/proxy/beacon/BeaconProxy.sol */ contract UpgradeBeacon { // ============ Immutables ============ // The controller is capable of modifying the implementation address address private immutable controller; // ============ Private Storage Variables ============ // The implementation address is held in storage slot zero. address private implementation; // ============ Events ============ // Upgrade event is emitted each time the implementation address is set // (including deployment) event Upgrade(address indexed implementation); // ============ Constructor ============ /** * @notice Validate the initial implementation and store it. * Store the controller immutably. * @param _initialImplementation Address of the initial implementation contract * @param _controller Address of the controller who can upgrade the implementation */ constructor(address _initialImplementation, address _controller) payable { _setImplementation(_initialImplementation); controller = _controller; } // ============ External Functions ============ /** * @notice For all callers except the controller, return the current implementation address. * If called by the Controller, update the implementation address * to the address passed in the calldata. * Note: this requires inline assembly because Solidity fallback functions * do not natively take arguments or return values. */ fallback() external payable { if (msg.sender != controller) { // if not called by the controller, // load implementation address from storage slot zero // and return it. assembly { mstore(0, sload(0)) return(0, 32) } } else { // if called by the controller, // load new implementation address from the first word of the calldata address _newImplementation; assembly { _newImplementation := calldataload(0) } // set the new implementation _setImplementation(_newImplementation); } } // ============ Private Functions ============ /** * @notice Perform checks on the new implementation address * then upgrade the stored implementation. * @param _newImplementation Address of the new implementation contract which will replace the old one */ function _setImplementation(address _newImplementation) private { // Require that the new implementation is different from the current one require(implementation != _newImplementation, "!upgrade"); // Require that the new implementation is a contract require( Address.isContract(_newImplementation), "implementation !contract" ); // set the new implementation implementation = _newImplementation; emit Upgrade(_newImplementation); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
{ "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_initialImplementation","type":"address"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgrade","type":"event"},{"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
60a060405260405161036d38038061036d8339818101604052604081101561002657600080fd5b5080516020909101516100388261004e565b60601b6001600160601b0319166080525061014e565b6000546001600160a01b038281169116141561009c576040805162461bcd60e51b8152602060048201526008602482015267217570677261646560c01b604482015290519081900360640190fd5b6100af8161014860201b6101c71760201c565b610100576040805162461bcd60e51b815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b151590565b60805160601c61020361016a60003980601c52506102036000f3fe60806040523373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461004d5760005460005260206000f35b6000356100598161005c565b50005b60005473ffffffffffffffffffffffffffffffffffffffff828116911614156100e657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f2175706772616465000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6100ef816101c7565b61015a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696d706c656d656e746174696f6e2021636f6e74726163740000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117825560405190917ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d91a250565b3b15159056fea2646970667358221220f8dead67a094ec1890f3d64fa226c417203cec9094811630e9e9287dc2881a1d64736f6c634300070600330000000000000000000000009272c9d5fa902ef3804ec81e0333ae420d57f715000000000000000000000000dce06ffe78aaac2894109a56ba83c3c33b073f44
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.