'How to send ether from eoa to contract

I need to send ether from externally owned account to contract. All code I found so far looks like this

contract Contract {
   mapping (address => uint) balances;

   event Transfer(address indexed _from, uint256 _value);

   function deposit() public returns (uint) {
      balances[msg.sender] += msg.value;
      Transfer(msg.sender, msg.value);
      return balances[msg.sender];
   }
}

But I can not understand how does it work. I thought it should look like this: we should run some send function which will take current contract address, sender address and amount.

Can someone explain me the logic behind it?

I also found the solution which correspond to this logic

contract Contract {
   function pay() payable {}
}

and than call it from console like that

var contract
Contract.deployed().then(function(instance) { contract = instance; })
contract.pay.sendTransaction({from: eoa_address,to: contract_address,value: web3.toWei(amount,"ether"), gas:1000000})

But in this case sendTransaction function called outside of contact. Is there any way of calling it like from this perspective inside contract?



Solution 1:[1]

to send Ether to a contract :

we could create a payable function if we need to pay to execute this function

contract Contract {
   function do_somthing() payable {
action1
action2 
...
}
}

if we want to just send ethers to the contract without executing any function we define the fallback function as you presented in your question :

contract Contract {
   function pay() payable {}
}

the example you have provided before : contract Contract {

   mapping (address => uint) balances;

   event Transfer(address indexed _from, uint256 _value);

   function deposit() public returns (uint) {
      balances[msg.sender] += msg.value;
      emit Transfer(msg.sender, msg.value);
      return balances[msg.sender];
   }
}

is recording the balances sent by the users to the contract (this function needs to be declared as payable for the recent compiler : function deposit() public payable returns)

function deposit() public payable returns (uint) {
      balances[msg.sender] += msg.value;
      emit Transfer(msg.sender, msg.value); 
      return balances[msg.sender];
   }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 mbappai