Accounts

更新:如何在“address.transfer(amount)”中確定“付款人地址”?

  • July 11, 2018

考慮我們如下的函式:

address public recipient; 

function settlement(uint256 amount) public {

       recipient = msg.sender;
       recipient.transfer(amount);

   }

然後recipient通過如下呼叫此函式(使用web3.js),嘗試接收amount

contractInstance.methods.settlement(10).send({ from: '0xca35b7d915458ef540ade6068dfe2f44e8fa733c' }, function(error, result) {
   console.log(error);
   console.log(result)
});

所以,地址0xca35b7d915458ef540ade6068dfe2f44e8fa733c必須收到10 wei,但從哪裡來address?誰是payer?這10 wei已經which account address? _

同時,由於我們沒有使用**payable**函式settlement,所以這個ether 傳輸會正確完成嗎?

**更新:**如果我們payable在 中constructor標記contract,那麼我們需要標記settlement函式嗎?並且將recipient被發送amount的?balance``contract

這一行:

recipient.transfer(amount);

amountwei 從合約的餘額轉移到recipient. 這一行:

recipient = msg.sender;

表示收件人是呼叫該函式的帳戶。

因此,當您從地址呼叫函式時0xca35b7d915458ef540ade6068dfe2f44e8fa733c,使用參數10,該地址將收到 10 wei,從合約中支付。(這是假設合約呼叫成功,只要合約至少有 10 wei 就應該成功。)

同時,由於我們沒有使用支付結算功能,這個乙太幣轉賬會正確嗎?

payable是的,只有在要接收乙太幣時才需要標記函式。你不需要標記發送乙太的函式。

這篇博文可能有助於了解接收和發送乙太幣的基礎知識:https ://programtheblockchain.com/posts/2017/12/15/writing-a-contract-that-handles-ether/ 。

引用自:https://ethereum.stackexchange.com/questions/53074