Transaction Hash:
Block:
16902542 at Mar-25-2023 05:56:59 AM +UTC
Transaction Fee:
0.003188554 ETH
$7.80
Gas Used:
187,562 Gas / 17 Gwei
Emitted Events:
10 |
CoinToolProxy.0x04afd2ce457d973046bd54f5d7d36368546da08b88be1bca8ae50e32b451da17( 0x04afd2ce457d973046bd54f5d7d36368546da08b88be1bca8ae50e32b451da17, 00000000000000000000000000000000000000000000000002b854f627fa0000, 000000000000000000000000000000000000000000000000000000000000beef )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x0bBE8959...fa38482AD |
0.307304477838703825 Eth
Nonce: 20
|
0.108115923838703825 Eth
Nonce: 21
| 0.199188554 | ||
0x448bEf74...b93d9b1CC | 0.000108589098492 Eth | 0.023108589098492 Eth | 0.023 | ||
0x4544B85D...DC2ba4773 |
0 Eth
Nonce: 0
|
0.023 Eth
Nonce: 0
| 0.023 | ||
0x5c73C770...878Fd52eE |
0 Eth
Nonce: 0
|
0.023 Eth
Nonce: 0
| 0.023 | ||
0x8Cb4f4BA...aF763a1a2 | 0.00015133746243 Eth | 0.02315133746243 Eth | 0.023 | ||
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 204.419048366369658182 Eth | 204.419804463102374842 Eth | 0.00075609673271666 | |
0xCEC8F070...f8179eA09 | (CoinTool: MultiSender) | 17.508 Eth | 17.52 Eth | 0.012 | |
0xDE6eD0f1...321441DD7 | 0.000086961447447 Eth | 0.023086961447447 Eth | 0.023 | ||
0xe1fC52D5...791C35d96 | 0.000086670159219 Eth | 0.023086670159219 Eth | 0.023 | ||
0xec001A2F...5fB33987a |
0 Eth
Nonce: 0
|
0.023 Eth
Nonce: 0
| 0.023 | ||
0xFFCf072b...e43E76418 | 0.000193707636066 Eth | 0.023193707636066 Eth | 0.023 |
Execution Trace
ETH 0.196
CoinToolProxy.0b66f3f5( )
ETH 0.196
0xdf6fee057222d2f7933c215c11e5150bd2efc53e.0b66f3f5( )
- ETH 0.023
0xde6ed0f1ef4790db0e1460a18e49de9321441dd7.CALL( )
- ETH 0.023
0x5c73c7701186085c01fc14297015deb878fd52ee.CALL( )
- ETH 0.023
0xec001a2ff40f11306176e1bce545eba5fb33987a.CALL( )
- ETH 0.023
0x4544b85d5f573c44230d28d1c16492edc2ba4773.CALL( )
- ETH 0.023
0x448bef74aee57df223fbf70c20fb53db93d9b1cc.CALL( )
- ETH 0.023
0xe1fc52d50b504d9797ac689ee3392b0791c35d96.CALL( )
- ETH 0.023
0xffcf072b97afbb52976c6421a573b30e43e76418.CALL( )
- ETH 0.023
0x8cb4f4ba13130ac0cf9decb8dec5bb8af763a1a2.CALL( )
- ETH 0.023
/** * @title CoinTool, support ETH and ERC20 Tokens * @dev To Use this Dapp: https://cointool.app */ pragma solidity 0.4.24; /** * @title Proxy * @dev Gives the possibility to delegate any call to a foreign implementation. */ contract Proxy { /** * @dev Tells the address of the implementation where every call will be delegated. * @return address of the implementation to which it will be delegated */ function implementation() public view returns (address); /** * @dev Tells the version of the current implementation * @return version of the current implementation */ function version() public view returns (string); /** * @dev Fallback function allowing to perform a delegatecall to the given implementation. * This function will return whatever the implementation call returns */ function () payable public { address _impl = implementation(); require(_impl != address(0)); assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize) let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0) let size := returndatasize returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } } pragma solidity 0.4.24; /** * @title UpgradeabilityProxy * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded */ contract UpgradeabilityProxy is Proxy { /** * @dev This event will be emitted every time the implementation gets upgraded * @param implementation representing the address of the upgraded implementation */ event Upgraded(address indexed implementation, string version); // Storage position of the address of the current implementation bytes32 private constant implementationPosition = keccak256("cointool.app.proxy.implementation"); //Version name of the current implementation string internal _version; /** * @dev Constructor function */ constructor() public {} /** * @dev Tells the version name of the current implementation * @return string representing the name of the current version */ function version() public view returns (string) { return _version; } /** * @dev Tells the address of the current implementation * @return address of the current implementation */ function implementation() public view returns (address impl) { bytes32 position = implementationPosition; assembly { impl := sload(position) } } /** * @dev Sets the address of the current implementation * @param _newImplementation address representing the new implementation to be set */ function _setImplementation(address _newImplementation) internal { bytes32 position = implementationPosition; assembly { sstore(position, _newImplementation) } } /** * @dev Upgrades the implementation address * @param _newImplementation representing the address of the new implementation to be set */ function _upgradeTo(address _newImplementation, string _newVersion) internal { address currentImplementation = implementation(); require(currentImplementation != _newImplementation); _setImplementation(_newImplementation); _version = _newVersion; emit Upgraded( _newImplementation, _newVersion); } } pragma solidity 0.4.24; /** * @title CoinToolProxy * @dev This contract combines an upgradeability proxy with basic authorization control functionalities */ contract CoinToolProxy is UpgradeabilityProxy { /** * @dev Event to show ownership has been transferred * @param previousOwner representing the address of the previous owner * @param newOwner representing the address of the new owner */ event ProxyOwnershipTransferred(address previousOwner, address newOwner); // Storage position of the owner of the contract bytes32 private constant proxyOwnerPosition = keccak256("cointool.app.proxy.owner"); /** * @dev the constructor sets the original owner of the contract to the sender account. */ constructor(address _implementation, string _version) public { _setUpgradeabilityOwner(msg.sender); _upgradeTo(_implementation, _version); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyProxyOwner() { require(msg.sender == proxyOwner()); _; } /** * @dev Tells the address of the owner * @return the address of the owner */ function proxyOwner() public view returns (address owner) { bytes32 position = proxyOwnerPosition; assembly { owner := sload(position) } } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferProxyOwnership(address _newOwner) public onlyProxyOwner { require(_newOwner != address(0)); _setUpgradeabilityOwner(_newOwner); emit ProxyOwnershipTransferred(proxyOwner(), _newOwner); } /** * @dev Allows the proxy owner to upgrade the current version of the proxy. * @param _implementation representing the address of the new implementation to be set. */ function upgradeTo(address _implementation, string _newVersion) public onlyProxyOwner { _upgradeTo(_implementation, _newVersion); } /** * @dev Allows the proxy owner to upgrade the current version of the proxy and call the new implementation * to initialize whatever is needed through a low level call. * @param _implementation representing the address of the new implementation to be set. * @param _data represents the msg.data to bet sent in the low level call. This parameter may include the function * signature of the implementation to be called with the needed payload */ function upgradeToAndCall(address _implementation, string _newVersion, bytes _data) payable public onlyProxyOwner { _upgradeTo(_implementation, _newVersion); require(address(this).call.value(msg.value)(_data)); } /* * @dev Sets the address of the owner */ function _setUpgradeabilityOwner(address _newProxyOwner) internal { bytes32 position = proxyOwnerPosition; assembly { sstore(position, _newProxyOwner) } } }