如何将以太从eoa发送到合同

时间:2017-08-10 12:49:30

标签: ethereum solidity

我需要从外部账户向合同发送以太币。 到目前为止我找到的所有代码都是这样的

/usr/share/arduino/libraries/LiquidCrystal/Print.h

但我无法理解它是如何运作的。我认为它应该是这样的:我们应该运行一些发送功能,它将获取当前的合同地址,发件人地址和金额。

有人可以解释一下它背后的逻辑吗?

我还找到了与此逻辑相对应的解决方案

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];
   }
}

然后从控制台中调用它

contract Contract {
   function pay() payable {}
}

但在这种情况下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}) 函数在联系之外调用。 有没有办法从sendTransaction透视合同中调用它?

1 个答案:

答案 0 :(得分:2)

将Ether发送给合同:

如果我们需要付费来执行此功能,我们可以创建一个应付函数

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

如果我们想在不执行任何功能的情况下将醚发送到合同中,我们会在您的问题中定义回退函数:

contract Contract {
   function pay() payable {}
}

您之前提供的示例: 合同合同{

   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];
   }
}

正在记录用户发送给合同的余额(此函数需要声明为最近编译器的应付款:function deposit() public payable returns

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