If I call a function of Contract1, that creates/calls another Contract2. Who pays the gas used to call Contract2 ?
I think it's Contract1 - the second
msg.sender. In that case, how can I make the original
Gas and value in a transaction are entirely separate. When you send
x ETH to an address, whether from an account or a contract, the recipient's balance is guaranteed to go up by
x, regardless of how much gas was used (as long as there are no exceptions).
Additionally, gas is always paid by the original sender (
tx.origin in Solidity), not by any intermediate contracts. The gas used in a transaction is always subtracted from the balance of the sendimg account, not of a contract.
tl;dr: you don't need to do anything, just send enough gas in the transaction