Transaction Hash:
Block:
11585011 at Jan-04-2021 01:25:51 AM +UTC
Transaction Fee:
0.0025334 ETH
$6.11
Gas Used:
25,334 Gas / 100 Gwei
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x26212e5A...0E74d505A |
1.42491155 Eth
Nonce: 16
|
1.42237815 Eth
Nonce: 17
| 0.0025334 | ||
0xEA674fdD...16B898ec8
Miner
| (Ethermine) | 1,782.333209386451559584 Eth | 1,782.335742786451559584 Eth | 0.0025334 |
Execution Trace
ETH 0.05
XGoldProxy.876cb217( )
- ETH 0.05
0xae2ba2dcc7ad3a21783540eb9e68c2175e374693.876cb217( )
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to * be specified by overriding the virtual {_implementation} function. * * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a * different contract through the {_delegate} function. * * The success and return data of the delegated call will be returned back to the caller of the proxy. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internall call site, it will return directly to the external caller. */ function _delegate(address implementation) internal { // solhint-disable-next-line no-inline-assembly assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function * and {_fallback} should delegate. */ function _implementation() internal virtual view returns (address); /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internall call site, it will return directly to the external caller. */ function _fallback() internal { _beforeFallback(); _delegate(_implementation()); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other * function in the contract matches the call data. */ fallback () payable external { _fallback(); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data * is empty. */ receive () payable external { _fallback(); } /** * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback` * call, or as part of the Solidity `fallback` or `receive` functions. * * If overriden should call `super._beforeFallback()`. */ function _beforeFallback() internal virtual { } } contract XGoldProxy is Proxy { address public impl; address public contractOwner; address public fourthLevelUpdater; modifier onlyContractOwner() { require(msg.sender == contractOwner); _; } constructor(address _impl) public { impl = _impl; contractOwner = msg.sender; } function update(address newImpl) public onlyContractOwner { impl = newImpl; } function removeOwnership() public onlyContractOwner { contractOwner = address(0); } function _implementation() internal override view returns (address) { return impl; } }