When you send ETH to a smart contract, you're actually calling its `receive()` function (https://docs.soliditylang.org/en/v0.8.17/contracts.html#receive-ether-function). If that function contains logic, it gets executed upon sending ETH to the smart contract, so yes, making a contract forward ETH that is sent to it (or do anything with it, actually, including dividing it and sending it to multiple addresses) is perfectly possible. In that case, the user sending the ETH in the first place is the one paying for the gas (smart contracts can't pay gas on their own). Below is a very simple example contract that forwards any ETH sent to it to the address that deployed it, and reverts the transaction ( = sends the ETH back to the sender) if for some reason it can't. ``` contract Forwarder { address owner; constructor() { owner = msg.sender; } receive() external payable { (bool s,) = payable(owner).call{value: msg.value}(new bytes(0)); require(s); } } ``` Note that it works that way only for ETH ( when i say "ETH" i mean the native token of the chain you're on, so ETH on ethereum mainnet, but BNB on the BSC, MATIC on polygon, etc..). ERC20 tokens work differently, and you can't do that with them.