pragma solidity ^0.8.1;

contract SendMoney{
    uint public publicBalance;
    uint public lockedUntil;

    function receiveMoney() public payable{
        publicBalance += msg.value;
        lockedUntil = block.timestamp + 1;

    function getBalance() public view returns(uint){
        return address(this).balance;

    function withdrawMoney() public{
        if(lockedUntil < block.timestamp){
            address payable to  = payable(msg.sender);

    function withdrawMoneyTo(address payable _to) public{
        if(lockedUntil < block.timestamp){

I have deployed a smart contract with some address lets say. I sent some ether to the smart contract with the method receive money. Now, when i press on withdrawMoney() function with some another address. Who will pay the gas fee? is it the address that has deployed the smart contract? or is it the smart contract itself?


1 Answer 1


The gas fee for any smart contract interaction is paid by the EOA (Externally Owned Account) that calls it. Even if the smart contract makes another transaction (as an internal transaction), it's considered to be part of the original transaction called by the EOA, so the EOA will have to pay the gas for the entire transaction.

  • If I make a swap with a certain token and the contract collect part of the transaction as fees and then transfers these fees to ten different wallets (hypothetical situation), I'm the one paying fo all these transfers?
    – Integral
    Commented Mar 26 at 5:21
  • 1
    Yes. That's correct.
    – pbsh
    Commented Mar 27 at 12:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.