contract NonPayableContract {
function someFunction() public pure returns (string memory) {
return "This contract cannot receive ETH";
}
}
function testEthTransferFailureInterruptsErc20Distribution() public {
NonPayableContract nonPayableContract = new NonPayableContract();
address nonPayableAddress = address(nonPayableContract);
console.log("Non-payable contract address:", nonPayableAddress);
uint256 initialContractBalance = raiseBoxFaucet.getFaucetTotalSupply();
uint256 initialEthBalance = address(raiseBoxFaucet).balance;
uint256 initialNonPayableTokenBalance = raiseBoxFaucet.getBalance(nonPayableAddress);
uint256 initialNonPayableEthBalance = nonPayableAddress.balance;
console.log("Initial contract token balance:", initialContractBalance);
console.log("Initial contract ETH balance:", initialEthBalance);
console.log("Initial non-payable contract token balance:", initialNonPayableTokenBalance);
console.log("Initial non-payable contract ETH balance:", initialNonPayableEthBalance);
assertTrue(initialEthBalance >= raiseBoxFaucet.sepEthAmountToDrip(), "Contract should have enough ETH");
vm.prank(nonPayableAddress);
vm.expectRevert(RaiseBoxFaucet.RaiseBoxFaucet_EthTransferFailed.selector);
raiseBoxFaucet.claimFaucetTokens();
uint256 finalContractBalance = raiseBoxFaucet.getFaucetTotalSupply();
uint256 finalEthBalance = address(raiseBoxFaucet).balance;
uint256 finalNonPayableTokenBalance = raiseBoxFaucet.getBalance(nonPayableAddress);
uint256 finalNonPayableEthBalance = nonPayableAddress.balance;
console.log("Final contract token balance:", finalContractBalance);
console.log("Final contract ETH balance:", finalEthBalance);
console.log("Final non-payable contract token balance:", finalNonPayableTokenBalance);
console.log("Final non-payable contract ETH balance:", finalNonPayableEthBalance);
assertEq(finalContractBalance, initialContractBalance, "Contract token balances should not change");
assertEq(finalEthBalance, initialEthBalance, "Contract ETH balances should not change");
assertEq(finalNonPayableTokenBalance, initialNonPayableTokenBalance, "Non-payable contract token balances should not change");
assertEq(finalNonPayableEthBalance, initialNonPayableEthBalance, "Non-payable contract ETH balances should not change");
assertFalse(raiseBoxFaucet.getHasClaimedEth(nonPayableAddress), "hasClaimedEth status should not change");
console.log("Test completed: ETH The transfer failure successfully prevented the issuance of the ERC20 token");
}