Transaction Hash:
Block:
21167314 at Nov-11-2024 10:05:47 PM +UTC
Transaction Fee:
0.012238555751561237 ETH
$30.89
Gas Used:
253,183 Gas / 48.338773739 Gwei
Emitted Events:
278 |
Forwarder.ForwarderDeposited( from=[Receiver] 0xa9d1e08c7793af67e9d92fe308d5697fb81d3e43, value=49181000000000000, data=0x )
|
279 |
0x2b02cdd9a37ecea1d1c5308a4224289642bfa609.0xa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf1( 0xa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf1, 000000000000000000000000a9d1e08c7793af67e9d92fe308d5697fb81d3e43, 00000000000000000000000000000000000000000000000001cb158f69386000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x0B80c366...82eDcf65d | 2.879252216877740357 Eth | 34.118286216877740357 Eth | 31.239034 | ||
0x1e671e9C...6cC8EA2BE | 0.80294507 Eth | 0.86758252 Eth | 0.06463745 | ||
0x2585ABd1...46753C0f3 | 0 Eth | 0.04196333 Eth | 0.04196333 | ||
0x2b02cDd9...642bFa609 | 0 Eth | 0.12922072 Eth | 0.12922072 | ||
0x386d31a9...22CCC79CC | 0.003788566003572284 Eth | 0.033530776003572284 Eth | 0.02974221 | ||
0x552D099e...238159122 | 0.000155143623698359 Eth | 0.227812333623698359 Eth | 0.22765719 | ||
0x6aDA11c1...24414Ae26 | 0.03479349819819625 Eth | 0.44452188819819625 Eth | 0.40972839 | ||
0x6C8Cb9A2...71142B3D2 | 2.743861525567700052 Eth | 2.878179905567700052 Eth | 0.13431838 | ||
0x74FA7826...79a3b0D6a | 0.005083696564475875 Eth | 0.014104246564475875 Eth | 0.00902055 | ||
0x7830c87C...31FA86F43 | (Coinbase: Deposit) |
44.037880527943770688 Eth
Nonce: 1877559
|
44.025641972192209451 Eth
Nonce: 1877560
| 0.012238555751561237 | |
0x8144E9f1...A85AF6D6a | 0.000897883081824 Eth | 1.203455123081824 Eth | 1.20255724 | ||
0x8C11a757...3642aa56c | 0.000022059900324 Eth | 0.128868799900324 Eth | 0.12884674 | ||
0x8f32437b...193Da7896 | 0 Eth | 0.00885807 Eth | 0.00885807 | ||
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 7.852910511478290383 Eth | 7.853163694478290383 Eth | 0.000253183 | |
0x9Aa935d2...663546bF9 | 0.000502786015899239 Eth | 0.188258856015899239 Eth | 0.18775607 | ||
0xA9D1e08C...FB81d3E43 | (Coinbase 10) | 2,728.010114194298045117 Eth | 2,692.565296074298045117 Eth | 35.44481812 | |
0xB8b815A3...bE5B2a04c | 1.81156781 Eth | 1.96189763 Eth | 0.15032982 | ||
0xbB267a5a...69FF60103 | 0.853449566582886385 Eth | 2.056636206582886385 Eth | 1.20318664 | ||
0xbe347F5F...2f33d5277 | 0.000586028318065 Eth | 0.186349938318065 Eth | 0.18576391 | ||
0xC01E1642...Fb38D19D0 | 0 Eth | 0.01498 Eth | 0.01498 | ||
0xCfC0F98f...85e55aB33 | (Zero Hash 1) | 273.050097709017515794 Eth | 273.099278709017515794 Eth | 0.049181 | |
0xDF7d55f1...27a262f06 | 0.000021433278846 Eth | 0.014618143278846 Eth | 0.01459671 | ||
0xE846fc94...08c4BF858 | 0.03198791 Eth | 0.04542761 Eth | 0.0134397 |
Execution Trace
Coinbase 10.1a1da075( )
- ETH 0.13431838
0x6c8cb9a2fa7ecef232adadd521c30b371142b3d2.CALL( )
- ETH 0.18775607
0x9aa935d26025af85a09741da58a6922663546bf9.CALL( )
- ETH 0.01498
0xc01e16421797f2093094f15b2c965edfb38d19d0.CALL( )
- ETH 0.12884674
0x8c11a757eec27e4eafba0b965297eb63642aa56c.CALL( )
- ETH 0.0134397
0xe846fc949d3abf1be5b7d86946faac808c4bf858.CALL( )
- ETH 0.40972839
0x6ada11c13b1a6c71837c1dd9cb4a6b324414ae26.CALL( )
- ETH 1.20255724
0x8144e9f1d69aa4eca079707254bd39ea85af6d6a.CALL( )
- ETH 0.04196333
0x2585abd158f602110446ba4f4c2b4d346753c0f3.CALL( )
- ETH 0.00902055
0x74fa782644c0abfeb48ad674ba99db879a3b0d6a.CALL( )
- ETH 0.22765719
0x552d099e6f68e810429e17d7a5cc31a238159122.CALL( )
ETH 0.049181
Forwarder.CALL( )
ETH 0.049181
Forwarder.DELEGATECALL( )
- ETH 0.049181
Zero Hash 1.CALL( )
- ETH 0.049181
- ETH 0.01459671
0xdf7d55f188ecb2f451a07de4c2a9b4c27a262f06.CALL( )
- ETH 0.06463745
0x1e671e9cf7e75cbe3f76ecdd3ca09a36cc8ea2be.CALL( )
- ETH 0.15032982
0xb8b815a33967c53794e72d49a5aab92be5b2a04c.CALL( )
ETH 0.12922072
0x2b02cdd9a37ecea1d1c5308a4224289642bfa609.CALL( )
- ETH 0.12922072
0x39778bc77bd7a9456655b19fd4c5d0bf2071104e.DELEGATECALL( )
- ETH 0.12922072
- ETH 31.239034
0x0b80c366d3d92fcd4de0d4a3d596ced82edcf65d.CALL( )
- ETH 0.02974221
0x386d31a9804570088de22756cbe4d5722ccc79cc.CALL( )
- ETH 0.18576391
0xbe347f5f7329bdf5942bd1ef8c8415e2f33d5277.CALL( )
- ETH 1.20318664
0xbb267a5a5a0d4028ebab8ae79817dbe69ff60103.CALL( )
- ETH 0.00885807
0x8f32437b05adab65a95245df2f17c23193da7896.CALL( )
File 1 of 2: Forwarder
File 2 of 2: Forwarder
// File: @uniswap/lib/contracts/libraries/TransferHelper.sol pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } // File: ManualForwarder/ERC20Interface.sol pragma solidity ^0.8.0; /** * Contract that exposes the needed erc20 token functions */ abstract contract ERC20Interface { // Send _value amount of tokens to address _to function transfer(address _to, uint256 _value) public virtual returns (bool success); // Get the account balance of another account with address _owner function balanceOf(address _owner) public virtual view returns (uint256 balance); } // File: ManualForwarder/Forwarder.sol pragma solidity ^0.8.19; contract Forwarder { address private parentAddress; address private owner; event ForwarderDeposited(address from, uint256 value, bytes data); function initialize(address _owner, address initAddress) public onlyUninitialized { require(initAddress != address(0), "Invalid parent address"); require(_owner != address(0), "Invalid owner address"); owner = _owner; parentAddress = initAddress; } modifier onlyUninitialized { require(parentAddress == address(0x0), "Already initialized"); _; } modifier onlyOwner { require(msg.sender == owner, "Only Owner"); _; } function getParentAddress() public view onlyOwner returns (address) { return parentAddress; } function getOwner() public view onlyOwner returns (address) { return owner; } fallback() external payable { flush(); } receive() external payable { flush(); } function setParentAddress(address newAddress) public onlyOwner { require(newAddress != address(0), "Invalid parent address"); parentAddress = newAddress; } function flush() private { uint256 value = payable(address(this)).balance; if (value == 0) { return; } (bool success, ) = parentAddress.call{ value: value }(""); require(success, "Flush failed"); emit ForwarderDeposited(msg.sender, value, msg.data); } function getERC20Balance( address tokenContractAddress ) public view returns (uint256) { ERC20Interface instance = ERC20Interface(tokenContractAddress); address forwarderAddress = address(this); uint256 forwarderBalance = instance.balanceOf(forwarderAddress); if (forwarderBalance == 0) { return 0; } return forwarderBalance; } function flushTokens(address tokenContractAddress) external onlyOwner { ERC20Interface instance = ERC20Interface(tokenContractAddress); address forwarderAddress = address(this); uint256 forwarderBalance = instance.balanceOf(forwarderAddress); if (forwarderBalance == 0) { return; } TransferHelper.safeTransfer( tokenContractAddress, parentAddress, forwarderBalance ); } }
File 2 of 2: Forwarder
// File: @uniswap/lib/contracts/libraries/TransferHelper.sol pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } } // File: ManualForwarder/ERC20Interface.sol pragma solidity ^0.8.0; /** * Contract that exposes the needed erc20 token functions */ abstract contract ERC20Interface { // Send _value amount of tokens to address _to function transfer(address _to, uint256 _value) public virtual returns (bool success); // Get the account balance of another account with address _owner function balanceOf(address _owner) public virtual view returns (uint256 balance); } // File: ManualForwarder/Forwarder.sol pragma solidity ^0.8.19; contract Forwarder { address private parentAddress; address private owner; event ForwarderDeposited(address from, uint256 value, bytes data); function initialize(address _owner, address initAddress) public onlyUninitialized { require(initAddress != address(0), "Invalid parent address"); require(_owner != address(0), "Invalid owner address"); owner = _owner; parentAddress = initAddress; } modifier onlyUninitialized { require(parentAddress == address(0x0), "Already initialized"); _; } modifier onlyOwner { require(msg.sender == owner, "Only Owner"); _; } function getParentAddress() public view onlyOwner returns (address) { return parentAddress; } function getOwner() public view onlyOwner returns (address) { return owner; } fallback() external payable { flush(); } receive() external payable { flush(); } function setParentAddress(address newAddress) public onlyOwner { require(newAddress != address(0), "Invalid parent address"); parentAddress = newAddress; } function flush() private { uint256 value = payable(address(this)).balance; if (value == 0) { return; } (bool success, ) = parentAddress.call{ value: value }(""); require(success, "Flush failed"); emit ForwarderDeposited(msg.sender, value, msg.data); } function getERC20Balance( address tokenContractAddress ) public view returns (uint256) { ERC20Interface instance = ERC20Interface(tokenContractAddress); address forwarderAddress = address(this); uint256 forwarderBalance = instance.balanceOf(forwarderAddress); if (forwarderBalance == 0) { return 0; } return forwarderBalance; } function flushTokens(address tokenContractAddress) external onlyOwner { ERC20Interface instance = ERC20Interface(tokenContractAddress); address forwarderAddress = address(this); uint256 forwarderBalance = instance.balanceOf(forwarderAddress); if (forwarderBalance == 0) { return; } TransferHelper.safeTransfer( tokenContractAddress, parentAddress, forwarderBalance ); } }